{
  "name": "upage",
  "version": "1.0.0",
  "private": true,
  "description": "使用人工智能构建可视化网页",
  "sideEffects": false,
  "type": "module",
  "scripts": {
    "dev": "node pre-start.mjs && remix vite:dev",
    "build": "remix vite:build",
    "preview": "pnpm run build && pnpm run start",
    "start": "cross-env NODE_ENV=production node ./server.mjs",
    "check": "biome check --write --no-errors-on-unmatched .",
    "check:stage": "biome check --write --staged --no-errors-on-unmatched",
    "clean": "node scripts/clean.js",
    "setup": "prisma migrate deploy && prisma generate",
    "docker:build": "docker build -t upage-ai:production -t upage-ai:latest --target runtime .",
    "docker:dev:run": "docker compose -f docker-compose-dev.yaml up",
    "docker:prod:run": "docker compose -f docker-compose-prod.yaml up",
    "prepare": "husky || true",
    "test": "vitest --run",
    "test:watch": "vitest",
    "typecheck": "tsc",
    "docs:start": "pnpm --filter upage-docs run start",
    "docs:build": "pnpm --filter upage-docs run build",
    "docs:serve": "pnpm --filter upage-docs run serve"
  },
  "dependencies": {
    "@agentic/ai-sdk": "^8.4.4",
    "@agentic/serper": "^8.4.4",
    "@agentic/weather": "^7.6.9",
    "@ai-sdk/amazon-bedrock": "^3.0.22",
    "@ai-sdk/anthropic": "^2.0.17",
    "@ai-sdk/cohere": "^2.0.10",
    "@ai-sdk/deepseek": "^1.0.18",
    "@ai-sdk/google": "^2.0.15",
    "@ai-sdk/mistral": "^2.0.15",
    "@ai-sdk/openai": "^2.0.32",
    "@ai-sdk/openai-compatible": "^1.0.19",
    "@ai-sdk/react": "^2.0.49",
    "@floating-ui/react": "^0.27.16",
    "@headlessui/react": "^2.2.8",
    "@iconify-json/svg-spinners": "^1.2.4",
    "@logto/node": "^3.1.6",
    "@logto/remix": "^3.0.10",
    "@nanostores/react": "^1.0.0",
    "@octokit/rest": "^22.0.0",
    "@openrouter/ai-sdk-provider": "^1.2.0",
    "@prisma/adapter-better-sqlite3": "^6.16.2",
    "@prisma/client": "^6.16.2",
    "@radix-ui/react-checkbox": "^1.3.3",
    "@radix-ui/react-collapsible": "^1.1.12",
    "@radix-ui/react-context-menu": "^2.2.16",
    "@radix-ui/react-dialog": "^1.1.15",
    "@radix-ui/react-dropdown-menu": "^2.1.16",
    "@radix-ui/react-label": "^2.1.7",
    "@radix-ui/react-popover": "^1.1.15",
    "@radix-ui/react-progress": "^1.1.7",
    "@radix-ui/react-scroll-area": "^1.2.10",
    "@radix-ui/react-separator": "^1.1.7",
    "@radix-ui/react-switch": "^1.2.6",
    "@radix-ui/react-tabs": "^1.1.13",
    "@radix-ui/react-tooltip": "^1.2.8",
    "@remix-run/express": "^2.17.1",
    "@remix-run/node": "^2.17.1",
    "@remix-run/react": "^2.17.1",
    "ai": "^5.0.49",
    "chalk": "^5.6.2",
    "chart.js": "^4.5.0",
    "class-variance-authority": "^0.7.1",
    "classnames": "^2.5.1",
    "compression": "^1.8.1",
    "cors": "^2.8.5",
    "cross-env": "^10.0.0",
    "date-fns": "^4.1.0",
    "diff": "^8.0.2",
    "express": "^4.21.2",
    "express-rate-limit": "^8.1.0",
    "framer-motion": "^12.23.19",
    "isbot": "^5.1.30",
    "js-cookie": "^3.0.5",
    "js-tiktoken": "^1.0.21",
    "jspdf": "^3.0.3",
    "jszip": "^3.10.1",
    "lodash": "^4.17.21",
    "morgan": "^1.10.1",
    "nanostores": "^1.0.1",
    "node-fetch": "^3.3.2",
    "ollama-ai-provider-v2": "^1.3.1",
    "path-browserify": "^1.0.1",
    "prettier": "^3.6.2",
    "prisma": "^6.16.2",
    "qrcode": "1.5.1",
    "react": "^18.3.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-frame-component": "^5.2.7",
    "react-markdown": "^10.1.0",
    "react-resizable-panels": "^3.0.6",
    "react-window": "^2.1.1",
    "rehype-raw": "^7.0.0",
    "rehype-sanitize": "^6.0.0",
    "remark-gfm": "^4.0.1",
    "remix-utils": "^9.0.0",
    "shiki": "^3.13.0",
    "sonner": "^2.0.7",
    "unified": "^11.0.5",
    "unist-util-visit": "^5.0.0",
    "winston": "^3.17.0",
    "winston-daily-rotate-file": "^5.0.0",
    "zod": "^4.1.11"
  },
  "devDependencies": {
    "@biomejs/biome": "2.2.4",
    "@iconify/json": "^2.2.387",
    "@iconify/types": "^2.0.0",
    "@octokit/types": "^15.0.0",
    "@remix-run/dev": "^2.17.1",
    "@remix-run/serve": "^2.17.1",
    "@testing-library/jest-dom": "^6.8.0",
    "@testing-library/react": "^16.3.0",
    "@types/compression": "^1.8.1",
    "@types/express": "^5.0.3",
    "@types/js-cookie": "^3.0.6",
    "@types/lodash": "^4.17.20",
    "@types/path-browserify": "^1.0.3",
    "@types/react": "^18.3.1",
    "@types/react-dom": "^18.3.1",
    "@unocss/reset": "^66.5.2",
    "@vitejs/plugin-react": "^5.0.3",
    "concurrently": "^9.2.1",
    "crypto-browserify": "^3.12.1",
    "dotenv": "^17.2.2",
    "fast-glob": "^3.3.3",
    "husky": "9.1.7",
    "pnpm": "^10.17.1",
    "sass-embedded": "^1.93.1",
    "typescript": "^5.9.2",
    "unocss": "^66.5.2",
    "vite": "^5.4.19",
    "vite-tsconfig-paths": "^5.1.4",
    "vitest": "^3.2.4"
  },
  "packageManager": "pnpm@9.4.0",
  "engines": {
    "node": ">=18.18.0"
  }
}
