{ "name": "goodbuddy", "version": "0.15.8", "private": true, "description": "Secure desktop AI workspace with controlled Agent Runtimes", "desktopName": "GoodBuddy", "homepage": "https://mesalogo.github.io/goodbuddy/", "author": { "name": "MesaLogo" }, "license": "0BSD", "repository": { "type": "git", "url": "git+https://github.com/mesalogo/goodbuddy.git" }, "bugs": { "url": "https://github.com/mesalogo/goodbuddy/issues" }, "main": "./out/main/index.js", "type": "module", "scripts": { "dev": "electron-vite dev", "start": "electron-vite preview", "typecheck": "tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.agent.json && tsc --noEmit -p tsconfig.web.json", "lint": "eslint .", "test": "vitest run", "test:watch": "vitest", "perf:app": "node build/run-app-perf.cjs", "perf:knowledge": "node build/run-knowledge-perf.cjs", "eval:retrieval": "vitest run --config tests/support/knowledge-retrieval-evaluation.ts tests/knowledge-retrieval-metrics.test.ts tests/knowledge-retrieval-evaluation.test.ts", "build": "npm run typecheck && npm run build:bundle", "build:bundle": "electron-vite build && node build/check-control-plane-package-installer.cjs", "smoke:deepseek-harness": "npm run build:bundle && node build/run-deepseek-harness-utility-smoke.cjs", "smoke:deepseek-harness:packaged": "node build/run-packaged-deepseek-harness-smoke.cjs", "agent:build": "node build/agent-bundle.cjs build", "agent:verify": "node build/agent-bundle.cjs verify", "agent:import": "node build/agent-bundle.cjs import", "remote-runtime:build": "node build/remote-runtime-bundle.cjs build", "remote-runtime:verify": "node build/remote-runtime-bundle.cjs verify", "remote-runtime:import": "node build/remote-runtime-bundle.cjs import", "release:notes:verify": "node build/release-notes.cjs", "dist": "npm run build && node build/run-electron-builder.cjs", "dist:win": "npm run build && node build/run-electron-builder.cjs --win nsis --x64 --arm64", "dist:mac": "npm run build && node build/run-electron-builder.cjs --mac dmg --x64 --arm64", "dist:linux": "npm run dist:linux:x64 && npm run dist:linux:arm64", "dist:linux:x64": "npm run build && node build/run-electron-builder.cjs --linux AppImage deb rpm --x64", "dist:linux:arm64": "npm run build && node build/run-electron-builder.cjs --linux AppImage deb rpm --arm64", "icons": "node build/generate-icons.mjs", "release:package": "node build/build-release.cjs", "portable": "node build/build-portable.cjs" }, "build": { "appId": "live.digiman.goodbuddy", "productName": "GoodBuddy", "directories": { "buildResources": "build", "output": "dist" }, "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", "beforePack": "build/runtime-hooks.cjs", "asar": true, "asarUnpack": [ "out/main/obsidian-mcpvault/**/*", "out/main/package.json", "out/main/deepseek-harness-*", "out/main/embedding-inference-bootstrap.js", "out/main/chunks/**/*", "node_modules/node-pty/lib/**/*", "node_modules/node-pty/package.json", "node_modules/node-pty/prebuilds/**/*", "node_modules/node-pty/build/Release/**/*", "node_modules/koffi/**/*", "node_modules/@koromix/koffi-*/**/*", "node_modules/@napi-rs/canvas{,/**/*}", "node_modules/@napi-rs/canvas-*/**/*", "node_modules/onnxruntime-web/dist/**/*.wasm" ], "npmRebuild": false, "compression": "maximum", "files": [ "out/main/**/*", "out/preload/**/*", "out/renderer/**/*", "package.json", "!node_modules/npm{,/**/*}" ], "extraResources": [ { "from": ".runtime-resources/dsh-${arch}/node_modules", "to": "runtimes/dsh/node_modules", "filter": [ "**/*", "!**/*.{js,mjs,cjs,ts,mts,cts}.map", "!**/*.d.{ts,mts,cts}", "!**/*.pdb" ] }, { "from": "resources/skills", "to": "skills", "filter": [ "**/*" ] }, { "from": "resources/release-notes.json", "to": "release-notes.json" }, { "from": "resources/tool-environment/managed-python-artifacts.json", "to": "tool-environment/managed-python-artifacts.json" }, { "from": "agent-runtime-lock.json", "to": "agent-runtime-lock.json" }, { "from": "remote-runtime-lock.json", "to": "remote-runtime-lock.json" }, { "from": "resources/agent-release-keys.json", "to": "agent-release-keys.json" }, { "from": "build/icon-taskbar.ico", "to": "icon.ico" }, { "from": "build/icon.png", "to": "icon.png" }, { "from": "build/icon-tray.png", "to": "tray-icon.png" }, { "from": ".runtime-resources/${arch}", "to": "runtimes/opencode", "filter": [ "opencode", "opencode.exe", "rg", "rg.exe" ] }, { "from": ".runtime-resources", "to": "runtimes", "filter": [ "opencode-config{,/**/*}" ] }, { "from": "node_modules/opencode-ai/LICENSE", "to": "licenses/opencode-ai-LICENSE" }, { "from": "node_modules/@vscode/ripgrep/LICENSE", "to": "licenses/vscode-ripgrep-MIT.txt" }, { "from": "node_modules/@deepseek-ai/dsh-agent/LICENSE", "to": "licenses/deepseek-harness-MIT.txt" }, { "from": "node_modules/@deepseek-ai/cordis/LICENSE", "to": "licenses/deepseek-cordis-MIT.txt" }, { "from": "node_modules/@agentclientprotocol/sdk/LICENSE", "to": "licenses/agent-client-protocol-Apache-2.0.txt" }, { "from": "node_modules", "to": "runtimes", "filter": [ "npm{,/**/*}" ] }, { "from": "node_modules/node-pty/LICENSE", "to": "licenses/node-pty-MIT.txt" }, { "from": "node_modules/ssh2/LICENSE", "to": "licenses/ssh2-MIT.txt" }, { "from": "node_modules/koffi/LICENSE.txt", "to": "licenses/koffi-MIT.txt" }, { "from": "node_modules/@napi-rs/canvas/LICENSE", "to": "licenses/napi-rs-canvas-MIT.txt" }, { "from": "node_modules/@continuedev/cli", "to": "runtimes/continue", "filter": [ "package.json", "dist/cn.js", "dist/index.js", "dist/xhr-sync-worker.js" ] }, { "from": "node_modules/typescript/LICENSE.txt", "to": "licenses/continuedev-cli-LICENSE" }, { "from": "node_modules/@fontsource-variable/inter/LICENSE", "to": "licenses/inter-OFL-1.1.txt" }, { "from": "node_modules/@fontsource-variable/noto-sans-sc/LICENSE", "to": "licenses/noto-sans-sc-OFL-1.1.txt" }, { "from": "node_modules/ppu-paddle-ocr/LICENSE", "to": "licenses/ppu-paddle-ocr-MIT.txt" }, { "from": "node_modules/ppu-ocv/LICENSE", "to": "licenses/ppu-ocv-MIT.txt" }, { "from": "resources/licenses/onnxruntime-MIT.txt", "to": "licenses/onnxruntime-web-MIT.txt" }, { "from": "node_modules/@huggingface/tokenizers/LICENSE", "to": "licenses/huggingface-tokenizers-Apache-2.0.txt" }, { "from": "node_modules/katex/LICENSE", "to": "licenses/katex-MIT.txt" }, { "from": "node_modules/fabric/LICENSE", "to": "licenses/fabric-MIT.txt" }, { "from": "node_modules/jspdf/LICENSE", "to": "licenses/jspdf-MIT.txt" }, { "from": "node_modules/quill/LICENSE", "to": "licenses/quill-BSD-3-Clause.txt" }, { "from": "node_modules/pdfjs-dist/LICENSE", "to": "licenses/pdfjs-Apache-2.0.txt" }, { "from": "src/renderer/src/magic-canvas/NOTICE.md", "to": "licenses/peoplelib-canvas-NOTICE.md" }, { "from": "node_modules/mermaid/LICENSE", "to": "licenses/mermaid-MIT.txt" }, { "from": "node_modules/dompurify/LICENSE", "to": "licenses/dompurify-Apache-2.0.txt" }, { "from": "node_modules/dompurify/LICENSE-MPL", "to": "licenses/dompurify-MPL-2.0.txt" } ], "win": { "icon": "build/icon-taskbar.ico", "target": [ "nsis" ] }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true, "createDesktopShortcut": "always", "createStartMenuShortcut": true, "deleteAppDataOnUninstall": false }, "mac": { "icon": "build/icon.png", "target": [ "dmg" ], "category": "public.app-category.productivity", "hardenedRuntime": true, "gatekeeperAssess": false, "notarize": true, "extendInfo": { "NSMicrophoneUsageDescription": "GoodBuddy 需要访问麦克风,将语音转换为可编辑文字。" } }, "linux": { "icon": "build/icon.png", "maintainer": "MesaLogo", "vendor": "MesaLogo", "synopsis": "安全可控的桌面智能助手与 Agent 工作空间", "syncDesktopName": true, "target": [ "AppImage", "deb", "rpm" ], "category": "Utility" } }, "dependencies": { "@agentclientprotocol/sdk": "0.25.1", "@deepseek-ai/cordis": "4.0.4", "@deepseek-ai/dsh-agent": "0.1.7-rc.2", "@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2", "@deepseek-ai/dsh-bash-local": "0.1.7-rc.2", "@deepseek-ai/dsh-credentials": "0.1.7-rc.2", "@deepseek-ai/dsh-fs-local": "0.1.7-rc.2", "@deepseek-ai/dsh-llm": "0.1.7-rc.2", "@deepseek-ai/dsh-llm-pi-ai": "0.1.7-rc.2", "@deepseek-ai/dsh-pwsh-local": "0.1.7-rc.2", "@deepseek-ai/dsh-sandbox": "0.1.7-rc.2", "@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.2", "@deepseek-ai/dsh-session": "0.1.7-rc.2", "@deepseek-ai/dsh-session-projection": "0.1.7-rc.2", "@deepseek-ai/dsh-shell-env": "0.1.7-rc.2", "@deepseek-ai/dsh-skill": "0.1.7-rc.2", "@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.2", "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2", "@deepseek-ai/dsh-token-meter": "0.1.7-rc.2", "@deepseek-ai/dsh-tool-bash": "0.1.7-rc.2", "@deepseek-ai/dsh-tool-fs": "0.1.7-rc.2", "@deepseek-ai/dsh-tool-pwsh": "0.1.7-rc.2", "@deepseek-ai/dsh-tool-skill": "0.1.7-rc.2", "@deepseek-ai/dsh-tools": "0.1.7-rc.2", "@deepseek-ai/dsh-user-approval": "0.1.7-rc.2", "@huggingface/tokenizers": "^0.1.3", "@modelcontextprotocol/sdk": "^1.30.0", "@napi-rs/canvas": "1.0.3", "@opencode-ai/plugin": "1.18.29", "@opencode-ai/sdk": "1.18.29", "@vscode/ripgrep": "1.18.0", "@wecom/aibot-node-sdk": "^1.0.6", "cross-spawn": "^7.0.6", "dingtalk-stream": "^2.1.6-beta.1", "dompurify": "^3.4.13", "fflate": "^0.8.3", "html-to-text": "^10.0.0", "json5": "^2.2.3", "jspdf": "4.2.1", "koffi": "3.1.4", "node-pty": "^1.2.0-beta.15", "npm": "11.19.0", "onnxruntime-web": "^1.23.2", "pdfjs-dist": "^6.2.108", "ppu-paddle-ocr": "^6.4.0", "qrcode": "^1.5.4", "sherpa-onnx": "1.13.4", "ssh2": "^1.17.0", "undici": "^7.29.0", "yaml": "^2.9.0", "zod": "^4.4.3" }, "devDependencies": { "@antv/g6": "^5.1.1", "@bitbonsai/mcpvault": "0.16.0", "@continuedev/cli": "1.5.47", "@deepseek-ai/dsh": "0.1.7-rc.2", "@eslint/js": "^10.0.1", "@fontsource-variable/inter": "^5.3.0", "@fontsource-variable/noto-sans-sc": "^5.3.0", "@testing-library/jest-dom": "^7.0.0", "@testing-library/react": "^16.3.2", "@types/cross-spawn": "^6.0.6", "@types/html-to-text": "^9.0.4", "@types/node": "^26.1.2", "@types/qrcode": "^1.5.5", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@types/ssh2": "^1.15.5", "@types/three": "^0.186.0", "@vitejs/plugin-react": "^5.2.0", "@xterm/addon-fit": "0.11.0", "@xterm/addon-search": "0.16.0", "@xterm/addon-webgl": "0.19.0", "@xterm/xterm": "6.0.0", "electron": "^44.5.1", "electron-builder": "^26.15.3", "electron-vite": "^5.0.0", "esbuild": "0.25.12", "eslint": "^10.8.0", "eslint-plugin-react-hooks": "^7.1.1", "fabric": "7.4.0", "globals": "^17.8.0", "i18next": "^25.10.10", "jsdom": "^30.0.1", "katex": "^0.16.47", "lucide-react": "^1.27.0", "mermaid": "^11.16.1", "opencode-ai": "1.18.29", "png-to-ico": "^3.0.2", "pngjs": "^7.0.0", "quill": "^2.0.3", "react": "^19.2.8", "react-dom": "^19.2.8", "react-i18next": "^16.6.6", "react-markdown": "^10.1.0", "rehype-katex": "^7.0.1", "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", "tar": "7.5.22", "three": "^0.186.1", "typescript": "^6.0.3", "typescript-eslint": "^8.65.0", "vite": "^7.3.6", "vitest": "^4.1.10" }, "optionalDependencies": { "@koromix/koffi-darwin-arm64": "3.1.4", "@koromix/koffi-darwin-x64": "3.1.4", "@koromix/koffi-linux-arm64": "3.1.4", "@koromix/koffi-linux-x64": "3.1.4", "@koromix/koffi-win32-arm64": "3.1.4", "@koromix/koffi-win32-x64": "3.1.4" }, "allowScripts": { "@deepseek-ai/dsh-subprocess-local@0.1.7-rc.2": true, "@google/genai@1.52.0": true, "cpu-features@0.0.10": true, "electron-winstaller@5.4.0": true, "esbuild@0.25.12": true, "esbuild@0.28.1": true, "fsevents@2.3.3": true, "koffi@3.1.4": true, "node-pty@1.2.0-beta.15": true, "opencode-ai@1.18.29": true, "protobufjs@7.6.5": true, "ssh2@1.17.0": true } }