背景:v0.5.0 发布后对工具调用链路(adapter 流式 tool_call → 引擎 PARSING → preToolHooks 管道 → ToolRegistry → 结果回填)做全链路复检,发现并修复两处问题。 安全修复: - SubAgent 中止时 pending 确认未清理(安全回归):SubEngine 以 taskId 为 sessionId 写入 ConfirmationHook,abortSession 的 clearPending(sessionId) 清不到它们。后果:中止会话后残留弹框若被补批,孤儿工具会真实执行副作用 (v0.4.x 的全局清空反而能拦截)。修复:abortByParent 返回被中止的 taskId 列表,abortSession 一并 clearPending(taskId)。 确认弹框会话隔离(前端对齐后端 v0.5.0 语义): - ConfirmationRequest 新增 sessionId 字段(主会话为 sessionId,SubAgent 为 taskId),弹框在会话 INIT/TERMINATED 时只清除该会话的请求 —— 修复并发 会话下任意会话结束误清其他会话等待中确认的问题 - 选中计数按当前 requests 收敛(selectedIds 残留 id 无害化) 测试(207 → 215 用例): - 新增引擎级工具调用链路集成测试 ×6(engine-toolchain.test.ts):真实 PermissionCheckHook + RateLimitHook + ConfirmationHook 管道 + 真实 ToolRegistry,覆盖 SAFE 工具直通 / HIGH 工具批准执行 / 拒绝以 Blocked 错误回传 LLM / 会话隔离端到端 / 工具异常不中断循环 / 策略拦截系统路径 - 新增 FTS 触发器 × NULL content 删除安全性测试 ×2:验证 truncateAfter (编辑重发/重新生成)删除 content=NULL 的 assistant 消息(模型仅发 tool_calls 的标准场景)不抛错且索引保持一致 - agent.test.ts 的 orchestrator mock 适配 abortByParent 新返回类型 验证: lint 0 problems / typecheck 双工程 0 errors / test:electron 215 全过 / build 成功
102 lines
3.1 KiB
JSON
102 lines
3.1 KiB
JSON
{
|
|
"name": "metona-ai-desktop",
|
|
"version": "0.5.1",
|
|
"description": "MetonaAI Desktop — 生产级通用 AI Agent 智能体桌面应用",
|
|
"main": "dist-electron/main/main.js",
|
|
"author": "Metona Team",
|
|
"license": "MIT",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "electron-vite dev",
|
|
"build": "npm run prebuild && electron-vite build && electron-builder",
|
|
"prebuild": "npm dedupe && node -e \"require('fs').rmSync('release',{recursive:true,force:true})\"",
|
|
"build:renderer": "electron-vite build --rendererOnly",
|
|
"build:electron": "tsc -p tsconfig.node.json",
|
|
"preview": "vite preview",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"format": "prettier --write \"src/**/*.{ts,tsx,css}\" \"electron/**/*.ts\"",
|
|
"typecheck": "tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json",
|
|
"typecheck:node": "tsc -p tsconfig.node.json --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:electron": "cross-env ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs run",
|
|
"prepare": "husky"
|
|
},
|
|
"lint-staged": {
|
|
"electron/**/*.{ts,tsx}": [
|
|
"eslint --fix",
|
|
"prettier --write"
|
|
],
|
|
"src/**/*.{ts,tsx}": [
|
|
"eslint --fix",
|
|
"prettier --write"
|
|
],
|
|
"src/**/*.css": [
|
|
"prettier --write"
|
|
]
|
|
},
|
|
"dependencies": {
|
|
"@emotion/react": "^11.14.0",
|
|
"@emotion/styled": "^11.14.1",
|
|
"@metona-team/metona-toast": "^0.2.1",
|
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
"@mui/icons-material": "^9.1.1",
|
|
"@mui/material": "^9.1.2",
|
|
"better-sqlite3": "^11.9.1",
|
|
"date-fns": "^4.1.0",
|
|
"dotenv": "^17.4.2",
|
|
"electron-log": "^5.3.3",
|
|
"electron-store": "^10.0.1",
|
|
"fuse.js": "^7.1.0",
|
|
"lru-cache": "^11.1.0",
|
|
"nanoid": "^5.1.5",
|
|
"node-html-parser": "^6.1.13",
|
|
"react": "^19.1.0",
|
|
"react-dom": "^19.1.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-virtuoso": "^4.18.12",
|
|
"rehype-highlight": "^7.0.2",
|
|
"rehype-raw": "^7.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"shell-quote": "^1.10.0",
|
|
"zod": "^3.25.67",
|
|
"zustand": "^5.0.5"
|
|
},
|
|
"devDependencies": {
|
|
"@electron-toolkit/preload": "^3.0.1",
|
|
"@electron-toolkit/utils": "^4.0.0",
|
|
"@eslint/js": "^9.39.5",
|
|
"@tailwindcss/typography": "^0.5.16",
|
|
"@tailwindcss/vite": "^4.1.7",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/node": "^22.15.29",
|
|
"@types/react": "^19.1.6",
|
|
"@types/react-dom": "^19.1.6",
|
|
"@types/shell-quote": "^1.7.5",
|
|
"@vitejs/plugin-react": "^4.5.2",
|
|
"autoprefixer": "^10.4.21",
|
|
"cross-env": "^10.1.0",
|
|
"electron": "^35.5.1",
|
|
"electron-builder": "^26.0.12",
|
|
"electron-vite": "^3.1.0",
|
|
"eslint": "^9.28.0",
|
|
"husky": "^9.1.7",
|
|
"lint-staged": "^17.3.0",
|
|
"lucide-react": "^0.511.0",
|
|
"postcss": "^8.5.4",
|
|
"prettier": "^3.5.3",
|
|
"tailwindcss": "^4.1.7",
|
|
"typescript": "^5.8.3",
|
|
"typescript-eslint": "^8.67.0",
|
|
"vite": "^6.3.5",
|
|
"vitest": "^3.2.1"
|
|
},
|
|
"allowScripts": {
|
|
"electron@35.7.5": true,
|
|
"better-sqlite3@11.10.0": true,
|
|
"esbuild@0.25.12": true,
|
|
"electron-winstaller@5.4.0": true
|
|
}
|
|
}
|