GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build darwin arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
Load lightweight conversation summaries and hydrate full history only when needed, preserving search, copy, export, queued requests, and remote questions. Keep unchanged image reconciliation messages stable so list refreshes no longer resend the entire saved history. Prepare Desktop 0.13.6 with the approved bilingual notes and aligned feature matrices. Agent remains 0.13.0; no LoongArch preview or navigation demo edits are included. Development validation passed 4301 tests with 67 skipped; the user requested CI validation instead of repeating local release checks. Release note: 历史会话按需加载,减少切回应用时的重复保存和内存占用,同时保留完整历史、搜索与续聊。
401 lines
12 KiB
JSON
401 lines
12 KiB
JSON
{
|
|
"name": "goodbuddy",
|
|
"version": "0.13.6",
|
|
"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",
|
|
"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",
|
|
"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/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",
|
|
"@vscode/ripgrep": "1.18.0",
|
|
"@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
|
|
}
|
|
}
|