Set the approved Desktop and Agent versions and package the approved Chinese and English notes without changing published release history. Keep OpenCode pinned to 1.18.29 and require Desktop 0.12.7 before the new Agent package. Align both feature lists and affected design documents with reference-image editing, inherited expert work modes, preview boundaries, and remaining release acceptance. Application navigation remains design-only. No LoongArch preview is planned for this release; Agent publication remains non-Latest. The first candidate full run exposed a browser test clicking Send before it was enabled. Wait for startup readiness using the existing test convention; production code is unchanged by this release-preparation commit. Validation: final full suite 3597 passed, 0 failed, 61 skipped across 338 files. Typecheck, lint, bilingual release-note validation, version consistency, unchanged historical notes, whitespace and relative-link checks passed. No additional real model calls, local production builds, pushes or tags. Concurrent navigation, workbar and roadmap design edits are not included.
394 lines
12 KiB
JSON
394 lines
12 KiB
JSON
{
|
|
"name": "goodbuddy",
|
|
"version": "0.12.7",
|
|
"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-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/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": "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"
|
|
]
|
|
},
|
|
{
|
|
"from": ".runtime-resources/opencode-config",
|
|
"to": "runtimes/opencode-config",
|
|
"filter": [
|
|
"**/*"
|
|
]
|
|
},
|
|
{
|
|
"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/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/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.2",
|
|
"@deepseek-ai/dsh-agent": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-agent-loop": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-bash-local": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-credentials": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-fs-local": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-llm": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-llm-pi-ai": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-pwsh-local": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-sandbox": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-sandbox-policy": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-session": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-shell-env": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-skill": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-subprocess-local": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-token-meter": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-tool-bash": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-tool-fs": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-tool-pwsh": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-tool-skill": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-tools": "0.1.2-rc.1",
|
|
"@deepseek-ai/dsh-user-approval": "0.1.2-rc.1",
|
|
"@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",
|
|
"@wecom/aibot-node-sdk": "^1.0.6",
|
|
"@xterm/addon-fit": "0.11.0",
|
|
"@xterm/addon-search": "0.16.0",
|
|
"@xterm/addon-webgl": "0.19.0",
|
|
"@xterm/xterm": "6.0.0",
|
|
"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",
|
|
"koffi": "3.1.4",
|
|
"lucide-react": "^1.27.0",
|
|
"mermaid": "^11.16.1",
|
|
"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",
|
|
"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",
|
|
"ssh2": "^1.17.0",
|
|
"undici": "^7.29.0",
|
|
"yaml": "^2.9.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@antv/g6": "^5.1.1",
|
|
"@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",
|
|
"@types/ssh2": "^1.15.5",
|
|
"@vitejs/plugin-react": "^5.2.0",
|
|
"electron": "^43.2.0",
|
|
"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",
|
|
"globals": "^17.8.0",
|
|
"jsdom": "^30.0.1",
|
|
"opencode-ai": "1.18.29",
|
|
"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"
|
|
},
|
|
"allowScripts": {
|
|
"@deepseek-ai/dsh-subprocess-local@0.1.2-rc.1": 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
|
|
}
|
|
}
|