mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 14:22:28 +08:00
* feat: add multi-provider model configuration - Add model config dialog for managing multiple AI providers - Support for OpenAI, Anthropic, Google, Azure, Bedrock, OpenRouter, DeepSeek, SiliconFlow, Ollama, and AI Gateway - Add model selector dropdown in chat panel header - Add API key validation endpoint - Add custom model ID input with keyboard navigation - Fix hover highlight in Command component - Add suggested models for each provider including latest Claude 4.5 series - Store configuration locally in browser * feat: improve model config UI and move selector to chat input - Move model selector from header to chat input (left of send button) - Add per-model validation status (queued, running, valid, invalid) - Filter model selector to only show verified models - Add editable model IDs in config dialog - Add custom model input field alongside suggested models dropdown - Fix hover states on provider buttons and select triggers - Update OpenAI suggested models with GPT-5 series - Add alert-dialog component for delete confirmation * refactor: revert shadcn component changes, apply hover fix at usage site * feat: add AWS credentials support for Bedrock provider - Add AWS Access Key ID, Secret Access Key, Region fields for Bedrock - Show different credential fields based on provider type - Update validation API to handle Bedrock with AWS credentials - Add region selector with common AWS regions * fix: reset Test button after validation completes * fix: reset validation button to Test after success * fix: complete bedrock support and UI/UX improvements - Add bedrock to ALLOWED_CLIENT_PROVIDERS for client credentials - Pass AWS credentials through full chain (headers → API → provider) - Replace non-existent GPT-5 models with real ones (o1, o3-mini) - Add accessibility: aria-labels, focus-visible rings, inline errors - Add more AWS regions (Ohio, London, Paris, Mumbai, Seoul, São Paulo) - Fix setTimeout cleanup with useRef on component unmount - Fix TypeScript type consistency in getSelectedAIConfig fallback * chore: remove unused code - Remove unused setAccessCodeRequired state in chat-panel.tsx - Remove unused getSelectedModel export in model-config.ts * fix: UI/UX improvements for model configuration dialog - Add gradient header styling with icon badge - Change Configuration section icon from Key to Settings2 - Add duplicate model detection with warning banner and inline removal - Filter out already-added models from suggestions dropdown - Add type-to-confirm for deleting providers with 3+ models - Enhance delete confirmation dialog with warning icon - Improve model selector discoverability (show model name + chevron) - Add truncation for long model names with title tooltip - Remove AI provider settings from Settings dialog (now in Model Config) - Extract ValidationButton into reusable component * fix: prevent duplicate model IDs within same provider - Block adding model if ID already exists in provider - Block editing model ID to match existing model in provider * fix: improve duplicate model ID notifications - Add toast notification when trying to add duplicate model - Allow free typing when editing model ID, validate on blur - Show warning toast instead of blocking input * fix: improve duplicate model validation UX in config dialog - Add inline error display for duplicate model IDs - Show red border on input when error exists - Validate on blur with shake animation for edit errors - Prevent saving empty model names - Clear errors when user starts typing - Simplify error styling (small red text, no heavy chips)
116 lines
4.6 KiB
JSON
116 lines
4.6 KiB
JSON
{
|
|
"name": "next-ai-draw-io",
|
|
"version": "0.4.5",
|
|
"license": "Apache-2.0",
|
|
"private": true,
|
|
"main": "dist-electron/main/index.js",
|
|
"scripts": {
|
|
"dev": "next dev --turbopack --port 6002",
|
|
"build": "next build",
|
|
"start": "next start --port 6001",
|
|
"lint": "biome lint .",
|
|
"format": "biome check --write .",
|
|
"check": "biome ci",
|
|
"prepare": "husky",
|
|
"electron:dev": "node scripts/electron-dev.mjs",
|
|
"electron:build": "npm run build && npm run electron:compile",
|
|
"electron:compile": "npx esbuild electron/main/index.ts electron/preload/index.ts electron/preload/settings.ts --bundle --platform=node --outdir=dist-electron --external:electron --sourcemap --packages=external && npx shx cp -r electron/settings dist-electron/",
|
|
"electron:start": "npx cross-env NODE_ENV=development npx electron .",
|
|
"electron:prepare": "node scripts/prepare-electron-build.mjs",
|
|
"dist": "npm run electron:build && npm run electron:prepare && npx electron-builder",
|
|
"dist:mac": "npm run electron:build && npm run electron:prepare && npx electron-builder --mac",
|
|
"dist:win": "npm run electron:build && npm run electron:prepare && npx electron-builder --win",
|
|
"dist:linux": "npm run electron:build && npm run electron:prepare && npx electron-builder --linux",
|
|
"dist:all": "npm run electron:build && npm run electron:prepare && npx electron-builder --mac --win --linux"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/amazon-bedrock": "^3.0.70",
|
|
"@ai-sdk/anthropic": "^2.0.44",
|
|
"@ai-sdk/azure": "^2.0.69",
|
|
"@ai-sdk/deepseek": "^1.0.30",
|
|
"@ai-sdk/gateway": "^2.0.21",
|
|
"@ai-sdk/google": "^2.0.0",
|
|
"@ai-sdk/openai": "^2.0.19",
|
|
"@ai-sdk/react": "^2.0.107",
|
|
"@aws-sdk/credential-providers": "^3.943.0",
|
|
"@formatjs/intl-localematcher": "^0.7.2",
|
|
"@langfuse/client": "^4.4.9",
|
|
"@langfuse/otel": "^4.4.4",
|
|
"@langfuse/tracing": "^4.4.9",
|
|
"@next/third-parties": "^16.0.6",
|
|
"@openrouter/ai-sdk-provider": "^1.2.3",
|
|
"@opentelemetry/exporter-trace-otlp-http": "^0.208.0",
|
|
"@opentelemetry/sdk-trace-node": "^2.2.0",
|
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-label": "^2.1.8",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-scroll-area": "^1.2.3",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tooltip": "^1.1.8",
|
|
"@radix-ui/react-use-controllable-state": "^1.2.2",
|
|
"@xmldom/xmldom": "^0.9.8",
|
|
"ai": "^5.0.89",
|
|
"base-64": "^1.0.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"js-tiktoken": "^1.0.21",
|
|
"jsdom": "^26.0.0",
|
|
"jsonrepair": "^3.13.1",
|
|
"lucide-react": "^0.483.0",
|
|
"motion": "^12.23.25",
|
|
"negotiator": "^1.0.0",
|
|
"next": "^16.0.7",
|
|
"ollama-ai-provider-v2": "^1.5.4",
|
|
"pako": "^2.1.0",
|
|
"prism-react-renderer": "^2.4.1",
|
|
"react": "^19.1.2",
|
|
"react-dom": "^19.1.2",
|
|
"react-drawio": "^1.0.3",
|
|
"react-icons": "^5.5.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-resizable-panels": "^3.0.6",
|
|
"remark-gfm": "^4.0.1",
|
|
"server-only": "^0.0.1",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.0.2",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"unpdf": "^1.4.0",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,ts,jsx,tsx,json,css}": [
|
|
"biome check --write --no-errors-on-unmatched",
|
|
"biome check --no-errors-on-unmatched"
|
|
]
|
|
},
|
|
"devDependencies": {
|
|
"@anthropic-ai/tokenizer": "^0.0.4",
|
|
"@biomejs/biome": "^2.3.10",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@types/negotiator": "^0.6.4",
|
|
"@types/node": "^20",
|
|
"@types/pako": "^2.0.3",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"concurrently": "^9.2.1",
|
|
"cross-env": "^10.1.0",
|
|
"electron": "^39.2.7",
|
|
"electron-builder": "^26.0.12",
|
|
"esbuild": "^0.27.2",
|
|
"eslint": "9.39.1",
|
|
"eslint-config-next": "16.0.5",
|
|
"husky": "^9.1.7",
|
|
"lint-staged": "^16.2.7",
|
|
"shx": "^0.4.0",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^5",
|
|
"wait-on": "^9.0.3"
|
|
}
|
|
}
|