{ "name": "xyz.chatboxapp.ce", "productName": "xyz.chatboxapp.ce", "version": "0.0.1", "engines": { "node": ">=22.13.0 <23.0.0", "pnpm": ">=10.17.0" }, "private": true, "description": "A desktop client for multiple cutting-edge AI models", "main": "out/main/main.js", "scripts": { "generate:model-snapshot": "pnpm exec tsx scripts/generate-model-snapshot.ts", "build": "pnpm run build:main && pnpm run build:preload && pnpm run build:renderer", "build:main": "cross-env CHATBOX_ELECTRON_VITE_TARGET=main electron-vite build", "build:preload": "cross-env CHATBOX_ELECTRON_VITE_TARGET=preload electron-vite build", "build:renderer": "cross-env CHATBOX_ELECTRON_VITE_TARGET=renderer electron-vite build", "build:web": "cross-env CHATBOX_BUILD_PLATFORM=web electron-vite build && pnpm run delete-sourcemaps", "delete-sourcemaps": "ts-node ./.erb/scripts/delete-source-maps-runner.js", "postinstall": "node .erb/scripts/postinstall.cjs", "package": "tsx ./.erb/scripts/clean.js && pnpm run build && cross-env UPDATE_CHANNEL=alpha electron-builder build --publish never", "package:all": "tsx ./.erb/scripts/clean.js && pnpm run build && cross-env UPDATE_CHANNEL=alpha electron-builder build --publish never --win --mac --linux", "release:web": "bash release-web.sh", "release:mac": "bash release-mac.sh", "release:linux": "bash release-linux.sh", "release:win": "bash release-win.sh", "electron:publish-mac": "pnpm run build && electron-builder build --publish always --mac", "electron:publish-linux": "pnpm run build && electron-builder build --publish always --linux", "electron:publish-win": "pnpm run build && electron-builder build --publish always --win", "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app", "dev": "pnpm start", "dev:local": "cross-env USE_LOCAL_API=true pnpm start", "dev:web": "cross-env DEV_WEB_ONLY=true CHATBOX_BUILD_PLATFORM=web pnpm start", "dev:web:standalone": "vite --config vite.config.web.ts", "dev:debug": "cross-env MAIN_ARGS=\"--inspect=5858\" pnpm start", "start": "electron-vite dev", "start:cdp": "electron-vite dev -- --remote-debugging-port=9333", "start:main": "cross-env NODE_ENV=development electronmon -r ts-node/register/transpile-only .", "start:preload": "electron-vite build --preload --watch", "start:renderer": "electron-vite", "serve:web": "npx serve ./release/app/dist/renderer", "test": "vitest run", "test:windows": "vitest run src/main/sandbox/manager.windows.test.ts src/main/skills/user-exec-runner.windows.test.ts", "test:ui": "vitest --ui", "test:watch": "vitest", "test:coverage": "vitest run --coverage", "test:e2e": "npx playwright test --config test/e2e/playwright.config.ts", "test:integration": "vitest run test/integration --testTimeout=300000", "test:file-conversation": "vitest run test/integration/file-conversation --testTimeout=120000", "test:model-provider": "cross-env RUN_MODEL_PROVIDER_TESTS=1 vitest run test/integration/model-provider --testTimeout=120000", "test:claude-prompt-cache-live": "cross-env RUN_MODEL_PROVIDER_TESTS=1 RUN_CLAUDE_PROMPT_CACHE_LIVE=1 vitest run test/integration/model-provider/claude-prompt-cache-live.test.ts --testTimeout=180000", "eval:session-rag": "node scripts/session-rag-eval/run-session-rag-eval.mjs", "eval:session-rag:chatbox": "node scripts/session-rag-eval/run-chatbox-flow-eval.mjs", "lint": "biome lint .", "lint:fix": "biome lint . --write", "check": "node scripts/generate-routes.mjs && node --max-old-space-size=8192 ./node_modules/typescript/bin/tsc --noEmit", "check:packages": "pnpm --filter @chatbox/core check && pnpm --filter @chatbox/react check", "format": "biome format --write", "check:biome": "biome check", "check:ci": "biome ci", "check:shared-boundaries": "node scripts/check-shared-boundaries.mjs", "mobile:sync": "pnpm run mobile:sync:ios && pnpm run mobile:sync:android", "mobile:sync:ios": "cross-env CHATBOX_BUILD_TARGET=mobile_app CHATBOX_BUILD_PLATFORM=ios pnpm run build:renderer && pnpm run delete-sourcemaps && npx cap sync ios", "mobile:sync:android": "cross-env CHATBOX_BUILD_TARGET=mobile_app CHATBOX_BUILD_PLATFORM=android pnpm run build:renderer && pnpm run delete-sourcemaps && npx cap sync android", "mobile:ios": "pnpm run mobile:sync:ios && npx cap open ios", "mobile:android": "pnpm run mobile:sync:android && npx cap open android", "mobile:assets": "npx capacitor-assets generate --ios --android", "prepare": "node -e \"try { require('husky') } catch(e) { process.exit(0) }\" && husky || true", "check:error-i18n-keys": "node script/sync-error-i18n-keys.mjs --check", "sync:error-i18n-keys": "node script/sync-error-i18n-keys.mjs", "translate": "pnpm run sync:error-i18n-keys && i18next && node script/translate.mjs", "storybook": "cross-env NODE_OPTIONS=\"--require=./.storybook/ignore-root-env.cjs\" storybook dev -p 6006", "build-storybook": "cross-env NODE_OPTIONS=\"--require=./.storybook/ignore-root-env.cjs\" storybook build" }, "repository": { "type": "git", "url": "https://github.com/chatboxai/chatbox.git" }, "keywords": [], "author": { "name": "bennhuang", "email": "tohuangbin@gmail.com" }, "devDependencies": { "@ai-sdk/amazon-bedrock": "^4.0.141", "@ai-sdk/anthropic": "^3.0.102", "@ai-sdk/azure": "^3.0.93", "@ai-sdk/deepseek": "^2.0.50", "@ai-sdk/gateway": "^3.0.157", "@ai-sdk/google": "^3.0.101", "@ai-sdk/mcp": "^1.0.64", "@ai-sdk/mistral": "^3.0.51", "@ai-sdk/openai": "^3.0.88", "@ai-sdk/openai-compatible": "^2.0.62", "@ai-sdk/perplexity": "^3.0.47", "@ai-sdk/provider": "^3.0.14", "@babel/core": "^7.28.0", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/preset-env": "^7.28.0", "@biomejs/biome": "2.0.0", "@braintree/sanitize-url": "^6.0.4", "@capacitor-community/sqlite": "^7.0.2", "@capacitor/android": "^7.0.0", "@capacitor/app": "^7.0.0", "@capacitor/app-launcher": "^7.0.4", "@capacitor/assets": "^3.0.5", "@capacitor/browser": "^7.0.2", "@capacitor/cli": "^7.0.0", "@capacitor/core": "^7.0.0", "@capacitor/device": "^7.0.2", "@capacitor/filesystem": "^7.0.0", "@capacitor/haptics": "^7.0.5", "@capacitor/ios": "^7.0.0", "@capacitor/keyboard": "^7.0.0", "@capacitor/share": "^7.0.0", "@capacitor/splash-screen": "^7.0.0", "@capacitor/toast": "^7.0.0", "@chatbox/core": "workspace:*", "@chatbox/react": "workspace:*", "@dnd-kit/core": "^6.0.8", "@dnd-kit/modifiers": "^6.0.1", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", "@ebay/nice-modal-react": "^1.2.13", "@electron/notarize": "^3.1.1", "@electron/rebuild": "^4.0.3", "@emotion/babel-plugin": "^11.13.5", "@emotion/babel-preset-css-prop": "^11.12.0", "@emotion/css": "^11.13.5", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@epic-web/cachified": "^5.5.1", "@faker-js/faker": "^8.0.2", "@floating-ui/dom": "^1.7.5", "@lobehub/icons": "^4.12.0", "@mantine/core": "^7.17.7", "@mantine/form": "^7.17.7", "@mantine/hooks": "^7.17.7", "@mantine/modals": "^7.17.7", "@mantine/spotlight": "^7.17.7", "@modelcontextprotocol/client": "2.0.0", "@mui/icons-material": "^5.11.11", "@mui/material": "^5.11.11", "@openrouter/ai-sdk-provider": "^2.0.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-tooltip": "^1.2.12", "@sentry/react": "^10.12.0", "@sentry/vite-plugin": "^4.6.1", "@sentry/webpack-plugin": "^4.3.0", "@storybook/addon-a11y": "^10.2.15", "@storybook/addon-docs": "^10.2.15", "@storybook/react-vite": "^10.2.15", "@svgr/webpack": "^8.0.1", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.4", "@tanstack/react-router": "^1.114.23", "@tanstack/router-devtools": "^1.114.23", "@tanstack/router-plugin": "^1.120.15", "@tanstack/zod-adapter": "^1.127.3", "@teamsupercell/typings-for-css-modules-loader": "^2.5.2", "@testing-library/react": "^14.0.0", "@types/adm-zip": "^0.5.8", "@types/auto-launch": "^5.0.5", "@types/autosize": "^4.0.3", "@types/big.js": "^6.2.2", "@types/canvas-confetti": "^1.9.0", "@types/d3": "^7.4.3", "@types/epub": "^0.0.11", "@types/gtag.js": "^0.0.13", "@types/highlight.js": "^10.1.0", "@types/katex": "^0.16.2", "@types/lodash": "^4.17.24", "@types/mark.js": "^8.11.12", "@types/markdown-it": "^12.2.3", "@types/markdown-it-link-attributes": "^3.0.1", "@types/node": "20.2.5", "@types/react": "^18.3.31", "@types/react-dom": "^18.2.4", "@types/react-swipeable-views": "^0.13.6", "@types/react-syntax-highlighter": "^15.5.9", "@types/react-test-renderer": "^18.0.0", "@types/shell-quote": "^1.7.5", "@types/store": "^2.0.2", "@types/terser-webpack-plugin": "^5.0.4", "@types/ua-parser-js": "^0.7.39", "@types/uuid": "^9.0.1", "@types/webpack-bundle-analyzer": "^4.6.0", "@vitejs/plugin-react": "^5.1.1", "@vitest/coverage-v8": "^4.1.10", "@vitest/ui": "^4.1.10", "@vscode/ripgrep-universal": "^1.18.0", "ai": "^6.0.11", "ai-retry": "^1.0.1", "autoprefixer": "^10.4.14", "autosize": "^6.0.1", "axios": "^1.15.0", "babel-loader": "^10.0.0", "big.js": "^7.0.1", "browserslist-config-erb": "^0.0.3", "canvas-confetti": "^1.9.4", "capacitor-plugin-safe-area": "^4.0.0", "capacitor-stream-http": "^0.1.0", "chalk": "^4.1.2", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "cmdk": "^0.2.0", "compare-versions": "^6.1.1", "concurrently": "^8.1.0", "copy-to-clipboard": "^3.3.3", "core-js": "^3.34.0", "cross-env": "^7.0.3", "css-loader": "^6.8.1", "css-minimizer-webpack-plugin": "^5.0.0", "dayjs": "^1.11.13", "deepmerge": "^4.3.1", "detect-port": "^1.5.1", "diff": "8.0.3", "dotenv": "^16.3.1", "electron": "^35.7.5", "electron-builder": "^26.8.1", "electron-vite": "^4.0.1", "electronmon": "^2.0.2", "emittery": "^1.1.0", "fake-indexeddb": "^6.2.5", "fflate": "^0.8.3", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^7.2.13", "form-data": "^4.0.6", "gray-matter": "^4.0.3", "highlight.js": "^11.7.0", "html-webpack-plugin": "^5.5.1", "husky": "^9.0.11", "i18next": "^22.4.13", "i18next-parser": "^9.3.0", "identity-obj-proxy": "^3.0.0", "immer": "^10.1.1", "javascript-obfuscator": "^4.0.2", "jotai": "^2.1.0", "jotai-immer": "^0.4.1", "jotai-optics": "^0.3.0", "js-base64": "^3.7.7", "js-tiktoken": "^1.0.7", "jsdom": "^26.1.0", "lint-staged": "^16.1.2", "localforage": "^1.10.0", "lucide-react": "^0.419.0", "mark.js": "^8.11.1", "material-ui-popup-state": "^5.0.4", "mermaid": "^11.13.0", "mini-css-extract-plugin": "^2.7.6", "msw": "^2.10.5", "node-loader": "^2.0.0", "optics-ts": "^2.4.0", "p-map": "^7.0.3", "p-timeout": "^6.1.4", "pdfjs-dist": "^6.0.227", "photoswipe": "^5.4.4", "postcss": "^8.5.21", "postcss-loader": "^7.3.3", "postcss-preset-mantine": "^1.17.0", "postcss-simple-vars": "^7.0.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-dropzone": "14.2.9", "react-hotkeys-hook": "^4.6.1", "react-i18next": "^12.2.0", "react-markdown": "^9.0.0", "react-photoswipe-gallery": "^3.1.1", "react-refresh": "^0.14.0", "react-router-dom": "^6.11.2", "react-swipeable-views": "^0.14.1", "react-syntax-highlighter": "^15.5.0", "react-test-renderer": "^18.2.0", "react-virtuoso": "^4.10.4", "react-zoom-pan-pinch": "^3.4.4", "rehype-katex": "^7.0.0", "remark-breaks": "^4.0.0", "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "rimraf": "^5.0.1", "rollup-plugin-visualizer": "^6.0.5", "sass": "^1.62.1", "sass-loader": "^13.3.1", "shell-env": "^4.0.1", "shell-quote": "^1.10.0", "shiki": "^4.0.2", "sonner": "^2.0.3", "store": "^2.0.12", "storybook": "^10.2.15", "string-replace-loader": "^3.2.0", "style-loader": "^3.3.3", "swr": "^2.1.5", "tailwind-merge": "^1.14.0", "tailwind-scrollbar": "^3.1.0", "tailwindcss": "^3.4.0", "tailwindcss-animate": "^1.0.7", "terser-webpack-plugin": "^5.3.9", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.8.3", "unist-util-visit": "^5.0.0", "url-loader": "^4.1.1", "vaul": "^1.1.2", "vite": "^7.3.6", "vite-plugin-babel": "^1.3.2", "vite-plugin-svgr": "^4.5.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.1.10", "web-vitals": "^2.1.4", "webpack": "^5.85.0", "webpack-bundle-analyzer": "^4.9.0", "webpack-cli": "^5.1.1", "webpack-dev-server": "^4.15.0", "webpack-merge": "^5.9.0", "webpack-obfuscator": "^3.5.1", "zod": "^4.0.17", "zustand": "^5.0.6" }, "dependencies": { "@libsql/client": "^0.15.6", "@mastra/core": "^0.13.2", "@mastra/libsql": "^0.13.2", "@mastra/rag": "^1.0.8", "@modelcontextprotocol/sdk": "^1.15.1", "@mozilla/readability": "^0.5.0", "@sentry/node": "^9.28.1", "auto-launch": "^5.0.6", "chardet": "^2.1.0", "cohere-ai": "^7.17.1", "electron-debug": "^3.2.0", "electron-devtools-installer": "^3.2.0", "electron-log": "^5.3.4", "electron-store": "^8.1.0", "electron-updater": "^6.8.3", "epub": "^1.3.0", "es-toolkit": "^1.43.0", "fs-extra": "^11.1.1", "iconv-lite": "^0.6.3", "linkedom": "^0.18.5", "lodash": "^4.17.21", "ofetch": "^1.0.1", "officeparser": "5.0.0", "sanitize-filename": "^1.6.3", "ua-parser-js": "^2.0.10", "uuid": "^9.0.0" }, "optionalDependencies": { "@rollup/rollup-darwin-arm64": "4.48.1", "@rollup/rollup-darwin-x64": "4.48.1", "@rollup/rollup-linux-x64-gnu": "4.48.1", "@rollup/rollup-win32-x64-msvc": "4.48.1" }, "browserslist": [], "electronmon": { "patterns": [ "!**/**", "src/main/**" ], "logLevel": "quiet" }, "lint-staged": { "*.{js,jsx,ts,tsx}": "biome format --write --no-errors-on-unmatched" }, "pnpm": { "onlyBuiltDependencies": [ "@parcel/watcher", "@sentry/cli", "core-js", "core-js-pure", "electron", "esbuild", "msw", "protobufjs", "sharp" ], "overrides": { "@tanstack/router-generator": "1.120.15", "@tanstack/router-plugin": "1.120.15", "@mastra/libsql": "0.13.2", "@mastra/rag": "1.0.8", "handlebars": ">=4.7.9", "convict": ">=6.2.5", "fast-xml-parser": ">=5.5.7", "shell-quote": "1.10.0" } }, "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319" }