{ "name": "goodbuddy", "version": "0.8.9", "private": true, "description": "Secure desktop AI workspace with controlled Agent Runtimes", "desktopName": "GoodBuddy", "homepage": "https://github.com/mesalogo/goodbuddy", "author": { "name": "MesaLogo" }, "license": "UNLICENSED", "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", "build": "npm run typecheck && npm run build:bundle", "build:bundle": "electron-vite build", "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, "compression": "maximum", "files": [ "out/**/*", "package.json" ], "extraResources": [ { "from": "resources/skills", "to": "skills", "filter": [ "**/*" ] }, { "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/@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" } ], "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", "extendInfo": { "NSMicrophoneUsageDescription": "GoodBuddy 需要访问麦克风,将语音转换为可编辑文字。" } }, "linux": { "icon": "build/icon.png", "maintainer": "MesaLogo", "vendor": "MesaLogo", "synopsis": "安全可控的桌面智能助手与 Agent 工作空间", "syncDesktopName": true, "target": [ "AppImage", "deb" ], "category": "Utility" } }, "dependencies": { "@modelcontextprotocol/sdk": "^1.30.0", "@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", "echarts": "^6.1.0", "fflate": "^0.8.3", "html-to-text": "^10.0.0", "json5": "^2.2.3", "lucide-react": "^1.27.0", "pdfjs-dist": "^6.2.108", "qrcode": "^1.5.4", "quill": "^2.0.3", "react": "^19.2.8", "react-dom": "^19.2.8", "react-markdown": "^10.1.0", "remark-gfm": "^4.0.1", "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" } }