Features: - Integrate unifuncs DeepSearch API (OpenAI compatible protocol) - SSE real-time streaming for AI thinking process display - Natural language input, auto-generate PubMed search strategy - Extract and display PubMed literature links - Database storage for task records (asl_research_tasks) Backend: - researchService.ts - Core business logic with SSE streaming - researchController.ts - SSE stream endpoint - researchWorker.ts - Async task worker (backup mode) - schema.prisma - AslResearchTask model Frontend: - ResearchSearch.tsx - Search page with unified content stream - ResearchSearch.css - Styling (unifuncs-inspired simple design) - ASLLayout.tsx - Enable menu item - api/index.ts - Add research API functions API Endpoints: - POST /api/v1/asl/research/stream - SSE streaming search - POST /api/v1/asl/research/tasks - Async task creation - GET /api/v1/asl/research/tasks/:taskId/status - Task status Documentation: - Development record for DeepSearch integration - Update ASL module status (v1.5) - Update system status (v3.7) Known limitations: - SSE mode, task interrupts when leaving page - Cost ~0.3 RMB per search (unifuncs API)
76 lines
1.9 KiB
JSON
76 lines
1.9 KiB
JSON
{
|
|
"name": "ai-clinical-backend",
|
|
"version": "1.0.0",
|
|
"description": "AI Clinical Research Platform - Backend API",
|
|
"main": "dist/index.js",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc",
|
|
"start": "node dist/index.js",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:migrate": "prisma migrate dev",
|
|
"prisma:studio": "prisma studio",
|
|
"prisma:seed": "tsx prisma/seed.ts",
|
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
},
|
|
"prisma": {
|
|
"seed": "tsx prisma/seed.ts"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"clinical",
|
|
"research",
|
|
"medical"
|
|
],
|
|
"author": "AI Clinical Dev Team",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"@fastify/cors": "^11.1.0",
|
|
"@fastify/jwt": "^10.0.0",
|
|
"@fastify/multipart": "^9.2.1",
|
|
"@prisma/client": "^6.17.0",
|
|
"@types/form-data": "^2.2.1",
|
|
"@wecom/crypto": "^1.0.1",
|
|
"ajv": "^8.17.1",
|
|
"axios": "^1.12.2",
|
|
"bcryptjs": "^2.4.3",
|
|
"bullmq": "^5.65.0",
|
|
"diff-match-patch": "^1.0.5",
|
|
"dotenv": "^17.2.3",
|
|
"exceljs": "^4.4.0",
|
|
"fastify": "^5.6.1",
|
|
"form-data": "^4.0.4",
|
|
"handlebars": "^4.7.8",
|
|
"html2canvas": "^1.4.1",
|
|
"js-yaml": "^4.1.0",
|
|
"jsonrepair": "^3.13.1",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"jspdf": "^3.0.3",
|
|
"openai": "^6.16.0",
|
|
"p-queue": "^9.0.1",
|
|
"pg-boss": "^12.5.2",
|
|
"prisma": "^6.17.0",
|
|
"tiktoken": "^1.0.22",
|
|
"winston": "^3.18.3",
|
|
"xlsx": "^0.18.5",
|
|
"xml2js": "^0.6.2",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/js-yaml": "^4.0.9",
|
|
"@types/jsonwebtoken": "^9.0.7",
|
|
"@types/node": "^24.7.1",
|
|
"@types/uuid": "^10.0.0",
|
|
"@types/winston": "^2.4.4",
|
|
"@types/xml2js": "^0.4.14",
|
|
"better-sqlite3": "^12.4.6",
|
|
"nodemon": "^3.1.10",
|
|
"pino-pretty": "^13.1.1",
|
|
"ts-node": "^10.9.2",
|
|
"tsx": "^4.20.6",
|
|
"typescript": "^5.9.3"
|
|
}
|
|
}
|