- lib/claude/client.ts: replace Anthropic SDK with openai package pointed at DeepSeek baseURL
- 4 AI routes: port tool definitions, tool_choice, and output parsing to OpenAI function-calling format
- Drop thinking:{type:'adaptive'} (no DeepSeek equivalent); model string → deepseek-chat
- settings/route.ts: add DEEPSEEK_API_KEY to ALLOWED_KEYS
- migration: seed DEEPSEEK_API_KEY placeholder row in app_settings
- tests: update 3 AI route tests to mock createDeepSeekClient + OpenAI response shape
Voyage AI embedding path untouched (DeepSeek has no embeddings endpoint).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
45 lines
1.1 KiB
JSON
45 lines
1.1 KiB
JSON
{
|
|
"name": "ims-app",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"generate-qr": "tsx scripts/generate-qr.ts"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.111.0",
|
|
"@supabase/ssr": "^0.12.0",
|
|
"@supabase/supabase-js": "^2.110.2",
|
|
"idb": "^8.0.3",
|
|
"next": "^15.5.20",
|
|
"openai": "^6.46.0",
|
|
"pdf-lib": "^1.17.1",
|
|
"react": "^19.2.7",
|
|
"react-dom": "^19.2.7",
|
|
"resend": "^6.17.2"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/node": "^20",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@vitejs/plugin-react": "^6.0.3",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.2.10",
|
|
"jsdom": "^29.1.1",
|
|
"qrcode": "^1.5.4",
|
|
"tailwindcss": "^4",
|
|
"tsx": "^4.23.0",
|
|
"typescript": "^5",
|
|
"vitest": "^4.1.10"
|
|
}
|
|
}
|