* fix: improve local model provider robustness and UX - Extract shared Docker URL rewriting and env conversion into BaseProvider to eliminate 4x duplicated code across Ollama and LMStudio - Add error handling and 5s timeouts to all model-listing fetches so one unreachable provider doesn't block the entire model list - Fix Ollama using createOllama() instead of mutating provider internals - Fix LLMManager singleton ignoring env updates on subsequent requests - Narrow cache key to only include provider-relevant env vars instead of the entire server environment - Fix 'as any' casts in LMStudio and OpenAILike by using shared convertEnvToRecord helper - Replace console.log/error with structured logger in OpenAILike - Fix typo: filteredStaticModesl -> filteredStaticModels in manager - Add connection status indicator (green/red dot) for local providers in the ModelSelector dropdown - Show helpful "is X running?" message when local provider has no models Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add Cerebras LLM provider - Add Cerebras provider with 8 models (Llama, GPT OSS, Qwen, ZAI GLM) - Integrate @ai-sdk/cerebras@0.2.16 for compatibility - Add CEREBRAS_API_KEY to environment configuration - Register provider in LLMManager registry Models included: - llama3.1-8b, llama-3.3-70b - gpt-oss-120b (reasoning) - qwen-3-32b, qwen-3-235b variants - zai-glm-4.6, zai-glm-4.7 (reasoning) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add Fireworks AI LLM provider - Add Fireworks provider with 6 popular models - Integrate @ai-sdk/fireworks@0.2.16 for compatibility - Add FIREWORKS_API_KEY to environment configuration - Register provider in LLMManager registry Models included: - Llama 3.1 variants (405B, 70B, 8B Instruct) - DeepSeek R1 (reasoning model) - Qwen 2.5 72B Instruct - FireFunction V2 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add coding-specific models to existing providers Enhanced providers with state-of-the-art coding models: **DeepSeek Provider:** + DeepSeek V3.2 (integrates thinking + tool-use) + DeepSeek V3.2-Speciale (high-compute variant, beats GPT-5) **Fireworks Provider:** + Qwen3-Coder 480B (262K context, best for coding) + Qwen3-Coder 30B (fast coding specialist) **Cerebras Provider:** + Qwen3-Coder 480B (2000 tokens/sec!) - Removed deprecated models (qwen-3-32b, llama-3.3-70b) Total new models: 4 Total coding models across all providers: 12+ Performance highlights: - Qwen3-Coder: State-of-the-art coding performance - DeepSeek V3.2: Integrates thinking directly into tool-use - ZAI GLM 4.6: 73.8% SWE-bench score - Ultra-fast inference: 2000 tok/s on Cerebras Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add dynamic model discovery to providers Implemented getDynamicModels() for automatic model discovery: **DeepSeek Provider:** - Fetches models from https://api.deepseek.com/models - Automatically discovers new models as DeepSeek adds them - Filters out static models to avoid duplicates **Cerebras Provider:** - Fetches models from https://api.cerebras.ai/v1/models - Auto-discovers new Cerebras models - Keeps UI up-to-date with latest offerings **Fireworks Provider:** - Fetches from https://api.fireworks.ai/v1/accounts/fireworks/models - Includes context_length from API response - Discovers new Qwen-Coder and other models automatically **Moonshot Provider:** - Fetches from https://api.moonshot.ai/v1/models - OpenAI-compatible endpoint - Auto-discovers new Kimi models Benefits: - ✅ No manual updates needed when providers add new models - ✅ Users always have access to latest models - ✅ Graceful fallback to static models if API fails - ✅ 5-second timeout prevents hanging - ✅ Caching system built into BaseProvider Technical details: - Uses BaseProvider's built-in caching system - Cache invalidates when API keys change - Failed API calls fallback to static models - All endpoints have 5-second timeout protection Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add Z.AI provider with GLM models and JWT authentication Merged changes from PR #2069 to add Z.AI provider: - Added GLM-4.6 (200K), GLM-4.5 (128K), and GLM-4.5 Flash models - Implemented secure JWT token generation with HMAC-SHA256 signing - Added dynamic model discovery from Z.AI API - Included proper error handling and token validation - GLM-4.6 achieves 73.8% on SWE-bench coding benchmarks Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
216 lines
8.3 KiB
JSON
216 lines
8.3 KiB
JSON
{
|
|
"name": "bolt",
|
|
"description": "An AI Agent",
|
|
"private": true,
|
|
"license": "MIT",
|
|
"sideEffects": false,
|
|
"type": "module",
|
|
"version": "1.0.0",
|
|
"author": {
|
|
"name": "bolt.diy team",
|
|
"email": "maintainers@bolt.diy"
|
|
},
|
|
"scripts": {
|
|
"deploy": "npm run build && wrangler pages deploy",
|
|
"build": "remix vite:build",
|
|
"dev": "node pre-start.cjs && remix vite:dev",
|
|
"test": "vitest --run",
|
|
"test:watch": "vitest",
|
|
"lint": "eslint --cache --cache-location ./node_modules/.cache/eslint app",
|
|
"lint:fix": "npm run lint -- --fix && prettier app --write",
|
|
"start:windows": "wrangler pages dev ./build/client",
|
|
"start:unix": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings",
|
|
"start": "node -e \"const { spawn } = require('child_process'); const isWindows = process.platform === 'win32'; const cmd = isWindows ? 'npm run start:windows' : 'npm run start:unix'; const child = spawn(cmd, { shell: true, stdio: 'inherit' }); child.on('exit', code => process.exit(code));\"",
|
|
"dockerstart": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings --ip 0.0.0.0 --port 5173 --no-show-interactive-dev-session",
|
|
"dockerrun": "docker run -it -d --name bolt-ai-live -p 5173:5173 --env-file .env.local bolt-ai",
|
|
"dockerbuild:prod": "docker build -t bolt-ai:production -t bolt-ai:latest --target bolt-ai-production .",
|
|
"dockerbuild": "docker build -t bolt-ai:development -t bolt-ai:latest --target development .",
|
|
"typecheck": "tsc",
|
|
"typegen": "wrangler types",
|
|
"preview": "pnpm run build && pnpm run start",
|
|
"prepare": "husky",
|
|
"clean": "node scripts/clean.js",
|
|
"electron:dev": "node scripts/electron-dev.mjs",
|
|
"electron:dev:inspect": "NODE_ENV=development electron --inspect=9229 build/electron/main/index.mjs",
|
|
"electron:build:deps": "concurrently \"pnpm electron:build:main\" \"pnpm electron:build:preload\" --kill-others-on-fail",
|
|
"electron:build:main": "vite build --config ./electron/main/vite.config.ts",
|
|
"electron:build:preload": "vite build --config ./electron/preload/vite.config.ts",
|
|
"electron:build:renderer": "remix vite:build --config vite-electron.config.js",
|
|
"electron:build:unpack": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --dir",
|
|
"electron:build:mac": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --mac",
|
|
"electron:build:win": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --win",
|
|
"electron:build:linux": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --linux",
|
|
"electron:build:dist": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --mwl"
|
|
},
|
|
"engines": {
|
|
"node": ">=18.18.0"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/amazon-bedrock": "1.0.6",
|
|
"@ai-sdk/anthropic": "0.0.39",
|
|
"@ai-sdk/cerebras": "^0.2.16",
|
|
"@ai-sdk/cohere": "1.0.3",
|
|
"@ai-sdk/deepseek": "0.1.3",
|
|
"@ai-sdk/fireworks": "^0.2.16",
|
|
"@ai-sdk/google": "0.0.52",
|
|
"@ai-sdk/mistral": "0.0.43",
|
|
"@ai-sdk/openai": "1.1.2",
|
|
"@ai-sdk/react": "^1.2.12",
|
|
"@ai-sdk/ui-utils": "^1.2.11",
|
|
"@codemirror/autocomplete": "^6.18.3",
|
|
"@codemirror/commands": "^6.7.1",
|
|
"@codemirror/lang-cpp": "^6.0.2",
|
|
"@codemirror/lang-css": "^6.3.1",
|
|
"@codemirror/lang-html": "^6.4.9",
|
|
"@codemirror/lang-javascript": "^6.2.2",
|
|
"@codemirror/lang-json": "^6.0.1",
|
|
"@codemirror/lang-markdown": "^6.3.1",
|
|
"@codemirror/lang-python": "^6.1.6",
|
|
"@codemirror/lang-sass": "^6.0.2",
|
|
"@codemirror/lang-vue": "^0.1.3",
|
|
"@codemirror/lang-wast": "^6.0.2",
|
|
"@codemirror/language": "^6.10.6",
|
|
"@codemirror/search": "^6.5.8",
|
|
"@codemirror/state": "^6.4.1",
|
|
"@codemirror/view": "^6.35.0",
|
|
"@headlessui/react": "^2.2.0",
|
|
"@heroicons/react": "^2.2.0",
|
|
"@iconify-json/svg-spinners": "^1.2.1",
|
|
"@lezer/highlight": "^1.2.1",
|
|
"@modelcontextprotocol/sdk": "^1.15.0",
|
|
"@nanostores/react": "^0.7.3",
|
|
"@octokit/rest": "^21.0.2",
|
|
"@octokit/types": "^13.6.2",
|
|
"@openrouter/ai-sdk-provider": "^0.0.5",
|
|
"@phosphor-icons/react": "^2.1.7",
|
|
"@radix-ui/react-checkbox": "^1.1.4",
|
|
"@radix-ui/react-collapsible": "^1.0.3",
|
|
"@radix-ui/react-context-menu": "^2.2.2",
|
|
"@radix-ui/react-dialog": "^1.1.5",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.6",
|
|
"@radix-ui/react-label": "^2.1.1",
|
|
"@radix-ui/react-popover": "^1.1.5",
|
|
"@radix-ui/react-progress": "^1.0.3",
|
|
"@radix-ui/react-scroll-area": "^1.2.2",
|
|
"@radix-ui/react-separator": "^1.1.0",
|
|
"@radix-ui/react-switch": "^1.1.1",
|
|
"@radix-ui/react-tabs": "^1.1.2",
|
|
"@radix-ui/react-tooltip": "^1.1.4",
|
|
"@remix-run/cloudflare": "^2.15.2",
|
|
"@remix-run/cloudflare-pages": "^2.15.2",
|
|
"@remix-run/node": "^2.15.2",
|
|
"@remix-run/react": "^2.15.2",
|
|
"@tanstack/react-virtual": "^3.13.0",
|
|
"@types/react-beautiful-dnd": "^13.1.8",
|
|
"@uiw/codemirror-theme-vscode": "^4.23.6",
|
|
"@unocss/reset": "^0.61.9",
|
|
"@webcontainer/api": "1.6.1-internal.1",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"@xterm/addon-web-links": "^0.11.0",
|
|
"@xterm/xterm": "^5.5.0",
|
|
"ai": "4.3.16",
|
|
"chalk": "^5.4.1",
|
|
"chart.js": "^4.4.7",
|
|
"class-variance-authority": "^0.7.0",
|
|
"clsx": "^2.1.0",
|
|
"date-fns": "^3.6.0",
|
|
"diff": "^5.2.0",
|
|
"dotenv": "^16.4.7",
|
|
"electron-log": "^5.2.3",
|
|
"electron-store": "^10.1.0",
|
|
"electron-updater": "^6.3.9",
|
|
"file-saver": "^2.0.5",
|
|
"framer-motion": "^11.12.0",
|
|
"ignore": "^6.0.2",
|
|
"isbot": "^4.4.0",
|
|
"isomorphic-git": "^1.27.2",
|
|
"istextorbinary": "^9.5.0",
|
|
"jose": "^5.9.6",
|
|
"js-cookie": "^3.0.5",
|
|
"jspdf": "^2.5.2",
|
|
"jszip": "^3.10.1",
|
|
"lucide-react": "^0.485.0",
|
|
"mime": "^4.0.4",
|
|
"nanostores": "^0.10.3",
|
|
"ollama-ai-provider": "^0.15.2",
|
|
"path-browserify": "^1.0.1",
|
|
"react": "^18.3.1",
|
|
"react-beautiful-dnd": "^13.1.1",
|
|
"react-chartjs-2": "^5.3.0",
|
|
"react-dnd": "^16.0.1",
|
|
"react-dnd-html5-backend": "^16.0.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-hotkeys-hook": "^4.6.1",
|
|
"react-icons": "^5.4.0",
|
|
"react-markdown": "^9.0.1",
|
|
"react-qrcode-logo": "^3.0.0",
|
|
"react-resizable-panels": "^2.1.7",
|
|
"react-toastify": "^10.0.6",
|
|
"react-window": "^1.8.11",
|
|
"rehype-raw": "^7.0.0",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"remark-gfm": "^4.0.0",
|
|
"remix-island": "^0.2.0",
|
|
"remix-utils": "^7.7.0",
|
|
"rollup-plugin-node-polyfills": "^0.2.1",
|
|
"shiki": "^1.24.0",
|
|
"tailwind-merge": "^2.2.1",
|
|
"unist-util-visit": "^5.0.0",
|
|
"use-debounce": "^10.0.4",
|
|
"vite-plugin-node-polyfills": "^0.22.0",
|
|
"zod": "^3.24.1",
|
|
"zustand": "^5.0.3"
|
|
},
|
|
"devDependencies": {
|
|
"@blitz/eslint-plugin": "0.1.0",
|
|
"@cloudflare/workers-types": "^4.20251011.0",
|
|
"@electron/notarize": "^2.5.0",
|
|
"@iconify-json/ph": "^1.2.1",
|
|
"@iconify/types": "^2.0.0",
|
|
"@remix-run/dev": "^2.15.2",
|
|
"@remix-run/serve": "^2.15.2",
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.2.0",
|
|
"@types/diff": "^5.2.3",
|
|
"@types/dom-speech-recognition": "^0.0.4",
|
|
"@types/electron": "^1.6.12",
|
|
"@types/file-saver": "^2.0.7",
|
|
"@types/js-cookie": "^3.0.6",
|
|
"@types/path-browserify": "^1.0.3",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@types/react-window": "^1.8.8",
|
|
"@vitejs/plugin-react": "^4.3.4",
|
|
"concurrently": "^8.2.2",
|
|
"cross-env": "^7.0.3",
|
|
"crypto-browserify": "^3.12.1",
|
|
"electron": "^33.2.0",
|
|
"electron-builder": "^26.0.12",
|
|
"eslint-config-prettier": "^10.1.1",
|
|
"eslint-plugin-prettier": "^5.2.6",
|
|
"fast-glob": "^3.3.2",
|
|
"husky": "9.1.7",
|
|
"is-ci": "^3.0.1",
|
|
"jsdom": "^26.0.0",
|
|
"node-fetch": "^3.3.2",
|
|
"pnpm": "^9.14.4",
|
|
"prettier": "^3.5.3",
|
|
"rimraf": "^4.4.1",
|
|
"sass-embedded": "^1.81.0",
|
|
"stream-browserify": "^3.0.0",
|
|
"typescript": "^5.7.2",
|
|
"unified": "^11.0.5",
|
|
"unocss": "^0.61.9",
|
|
"vite": "^5.4.11",
|
|
"vite-plugin-copy": "^0.1.6",
|
|
"vite-plugin-optimize-css-modules": "^1.1.0",
|
|
"vite-tsconfig-paths": "^4.3.2",
|
|
"vitest": "^2.1.7",
|
|
"wrangler": "^4.44.0"
|
|
},
|
|
"resolutions": {
|
|
"@typescript-eslint/utils": "^8.0.0-alpha.30"
|
|
},
|
|
"packageManager": "pnpm@9.14.4"
|
|
}
|