{ "name": "tradepilot", "version": "0.1.0", "private": true, "description": "开源 AI 外贸 CRM、订单履约与产品视频工作台,支持 BYOK、Ollama、Firecrawl、MoneyPrinterTurbo、OpenMontage 和 Docker 自托管。", "keywords": [ "ai-crm", "foreign-trade", "trade-management", "order-management", "cross-border", "self-hosted", "ollama", "firecrawl", "product-video", "nextjs" ], "homepage": "https://tradepilot.us.kg/", "repository": { "type": "git", "url": "https://github.com/feifei9126/tradepilot.git" }, "bugs": { "url": "https://github.com/feifei9126/tradepilot/issues" }, "license": "AGPL-3.0", "author": "TradePilot Contributors", "scripts": { "dev": "next dev -p 3458", "build": "next build", "start": "node scripts/start-local.mjs", "start:web": "next start", "lint": "eslint", "test": "tsx --test tests/product-video/*.test.ts tests/firecrawl/*.test.ts tests/business/*.test.ts tests/build/*.test.mjs tests/livekit/*.test.ts tests/database/*.test.mjs", "precfbuild": "node scripts/ensure-cloudflare-native-deps.mjs", "deploy": "bash install.sh", "deploy:docker": "bash install.sh", "deploy:cloudflare": "opennextjs-cloudflare build && opennextjs-cloudflare deploy", "preview:cloudflare": "opennextjs-cloudflare build && opennextjs-cloudflare preview", "upload:cloudflare": "opennextjs-cloudflare build && opennextjs-cloudflare upload", "cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts", "cfbuild": "opennextjs-cloudflare build", "db:init": "node scripts/init-db.mjs", "db:migrate": "node scripts/migrate-db.mjs", "db:backup": "node scripts/db-backup.mjs", "db:restore": "node scripts/db-restore.mjs", "firecrawl:deploy": "node scripts/deploy-firecrawl.mjs", "video-worker": "node workers/openmontage-adapter/server.mjs", "test:livekit": "tsx --test tests/livekit/*.test.ts", "test:db": "tsx --test --test-concurrency=1 tests/database/*.integration.ts", "brand:generate": "node scripts/generate-brand-assets.mjs", "test:cloudflare": "node scripts/smoke-cloudflare.mjs", "postcfbuild": "node scripts/fix-cloudflare-pg.mjs", "test:cloudflare:db": "node scripts/smoke-cloudflare-db.mjs" }, "dependencies": { "@auth/drizzle-adapter": "^1.11.3", "@aws-sdk/client-s3": "^3.1147.0", "@aws-sdk/s3-request-presigner": "^3.1146.0", "@base-ui/react": "^1.5.0", "@ffmpeg-installer/ffmpeg": "^1.1.0", "@hookform/resolvers": "^5.4.0", "@livekit/components-react": "^2.9.24", "@livekit/components-styles": "^1.2.0", "@neondatabase/serverless": "^1.1.0", "@tanstack/react-query": "^5.101.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.4.0", "drizzle-orm": "^0.45.2", "fast-xml-parser": "5.11.2", "imapflow": "^2.2.6", "livekit-client": "^2.22.3", "livekit-server-sdk": "^2.19.0", "lucide-react": "^1.17.0", "mailparser": "^3.9.36", "motion": "^14.1.0", "next": "16.4.2", "next-auth": "^5.0.0-beta.32", "next-themes": "^0.4.6", "nodemailer": "^10.0.15", "openai": "^6.42.0", "pg": "^8.23.1", "qrcode": "^1.5.4", "react": "19.2.4", "react-dom": "19.2.4", "react-hook-form": "^7.77.0", "sonner": "^2.0.7", "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", "zod": "^4.4.3", "zustand": "^5.0.14" }, "devDependencies": { "@opennextjs/cloudflare": "1.20.13", "@tailwindcss/postcss": "^4", "@types/mailparser": "^3.9.0", "@types/node": "^20", "@types/nodemailer": "^8.0.2", "@types/pg": "^8.20.0", "@types/qrcode": "^1.5.6", "@types/react": "^19", "@types/react-dom": "^19", "braces": "file:vendor/braces", "dotenv": "^17.4.2", "drizzle-kit": "^0.31.10", "eslint": "^9", "eslint-config-next": "16.4.2", "tailwindcss": "^4", "tsx": "^4.22.4", "typescript": "^5", "wrangler": "^4.151.0" }, "engines": { "node": ">=22.22" }, "overrides": { "braces": "$braces", "@node-minify/core": { "glob": "10.5.0" } } }