GoodBuddy previously required an external OpenAI-compatible endpoint for vector retrieval. It can now install, verify, import, remove, and run the built-in Granite multilingual embedding model in an isolated local inference process, while retaining custom embedding connections and migrating existing settings. The model connection UI now manages built-in and custom vector connections consistently, reports the actual retrieval path, preserves credentials across failed saves, and renders the vector tab synchronously. Related settings copy, switch styling, metadata typography, and renderer bundle guardrails are aligned with the resulting workflow. Release note: 新增可管理的内置 Granite 多语言向量模型,支持本地下载、离线导入、连接切换与诊断;同时优化向量设置及相关界面的文案、开关和状态显示。
335 lines
10 KiB
JSON
335 lines
10 KiB
JSON
{
|
|
"name": "goodbuddy",
|
|
"version": "0.11.0",
|
|
"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.web.json",
|
|
"lint": "eslint .",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"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-renderer-bundle.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",
|
|
"release:notes:verify": "node build/release-notes.cjs",
|
|
"dist": "npm run build && electron-builder",
|
|
"dist:win": "npm run build && electron-builder --win nsis --x64 --arm64",
|
|
"dist:mac": "npm run build && electron-builder --mac dmg --x64 --arm64",
|
|
"dist:linux": "npm run dist:linux:x64 && npm run dist:linux:arm64",
|
|
"dist:linux:x64": "npm run build && electron-builder --linux AppImage deb --x64",
|
|
"dist:linux:arm64": "npm run build && electron-builder --linux AppImage deb --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/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/**/*",
|
|
"package.json",
|
|
"!node_modules/npm{,/**/*}"
|
|
],
|
|
"extraResources": [
|
|
{
|
|
"from": "resources/skills",
|
|
"to": "skills",
|
|
"filter": [
|
|
"**/*"
|
|
]
|
|
},
|
|
{
|
|
"from": "resources/release-notes.json",
|
|
"to": "release-notes.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"
|
|
]
|
|
},
|
|
{
|
|
"from": "node_modules/opencode-ai/LICENSE",
|
|
"to": "licenses/opencode-ai-LICENSE"
|
|
},
|
|
{
|
|
"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/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": "node_modules/onnxruntime-web/LICENSE",
|
|
"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/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"
|
|
],
|
|
"category": "Utility"
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"@agentclientprotocol/sdk": "0.25.1",
|
|
"@antv/g6": "^5.1.1",
|
|
"@deepseek-ai/cordis": "4.0.1",
|
|
"@deepseek-ai/dsh-agent": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-agent-loop": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-bash-local": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-credentials": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-fs-local": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-llm": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-pwsh-local": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-sandbox": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-sandbox-policy": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-session": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-shell-env": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-skill": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-token-meter": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-tool-bash": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-tool-fs": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-tool-pwsh": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-tool-skill": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-tools": "0.1.0-rc.6",
|
|
"@deepseek-ai/dsh-user-approval": "0.1.0-rc.6",
|
|
"@huggingface/tokenizers": "^0.1.3",
|
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
"@napi-rs/canvas": "1.0.3",
|
|
"@opencode-ai/sdk": "^1.18.9",
|
|
"@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",
|
|
"i18next": "^25.10.10",
|
|
"json5": "^2.2.3",
|
|
"katex": "^0.16.47",
|
|
"lucide-react": "^1.27.0",
|
|
"mermaid": "^11.16.1",
|
|
"npm": "11.19.0",
|
|
"onnxruntime-web": "^1.23.2",
|
|
"pdfjs-dist": "^6.2.108",
|
|
"ppu-paddle-ocr": "^6.4.0",
|
|
"qrcode": "^1.5.4",
|
|
"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",
|
|
"sherpa-onnx": "1.13.4",
|
|
"undici": "^7.29.0",
|
|
"yaml": "^2.9.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@continuedev/cli": "1.5.47",
|
|
"@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",
|
|
"@vitejs/plugin-react": "^5.2.0",
|
|
"electron": "^43.2.0",
|
|
"electron-builder": "^26.15.3",
|
|
"electron-vite": "^5.0.0",
|
|
"eslint": "^10.8.0",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"globals": "^17.8.0",
|
|
"jsdom": "^30.0.1",
|
|
"opencode-ai": "1.18.9",
|
|
"png-to-ico": "^3.0.2",
|
|
"pngjs": "^7.0.0",
|
|
"tar": "7.5.22",
|
|
"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"
|
|
}
|
|
}
|