{
  "name": "pilotdeck-ui",
  "version": "0.1.0",
  "private": true,
  "description": "PilotDeck Web UI — talks to src/gateway via ui/server/pilotdeck-bridge.js.",
  "type": "module",
  "main": "server/index.js",
  "scripts": {
    "predev": "node ../scripts/bootstrap-pilotdeck-config.mjs",
    "dev": "node ../scripts/dev-launcher.mjs",
    "dev:concurrent": "concurrently --kill-others-on-fail --names gateway,server,client \"npm:dev:gateway\" \"npm:dev:server\" \"npm:dev:client\"",
    "dev:gateway": "npm --prefix .. run server",
    "dev:server": "node --import tsx server/index.js",
    "dev:client": "vite",
    "server": "node --import tsx server/index.js",
    "gateway": "npm --prefix .. run server",
    "client": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "typecheck": "tsc --noEmit -p tsconfig.json",
    "lint": "eslint src/",
    "lint:fix": "eslint src/ --fix",
    "start": "npm run build && npm run start:built",
    "start:built": "concurrently --kill-others-on-fail --names gateway,server \"npm:gateway\" \"npm:server\"",
    "postinstall": "node scripts/fix-node-pty.js"
  },
  "dependencies": {
    "@codemirror/language": "^6.12.3",
    "@codemirror/lang-css": "^6.3.1",
    "@codemirror/lang-html": "^6.4.9",
    "@codemirror/lang-javascript": "^6.2.4",
    "@codemirror/lang-json": "^6.0.1",
    "@codemirror/lang-markdown": "^6.3.3",
    "@codemirror/lang-python": "^6.2.1",
    "@codemirror/view": "^6.43.0",
    "@codemirror/merge": "^6.11.1",
    "@codemirror/state": "^6.6.0",
    "@codemirror/theme-one-dark": "^6.1.2",
    "@fontsource-variable/inter": "^5.2.8",
    "@iarna/toml": "^2.2.5",
    "@octokit/rest": "^22.0.0",
    "@radix-ui/react-slot": "^1.2.4",
    "@replit/codemirror-minimap": "^0.5.2",
    "@tailwindcss/typography": "^0.5.16",
    "@uiw/react-codemirror": "^4.23.13",
    "@xterm/addon-clipboard": "^0.1.0",
    "@xterm/addon-fit": "^0.11.0",
    "@xterm/addon-web-links": "^0.11.0",
    "@xterm/addon-webgl": "^0.19.0",
    "@xterm/xterm": "^5.5.0",
    "@lezer/highlight": "^1.2.3",
    "bcrypt": "^6.0.0",
    "better-sqlite3": "^12.6.2",
    "chokidar": "^4.0.3",
    "class-variance-authority": "^0.7.1",
    "clsx": "^2.1.1",
    "cors": "^2.8.5",
    "cross-spawn": "^7.0.3",
    "express": "^4.18.2",
    "fuse.js": "^7.0.0",
    "gray-matter": "^4.0.3",
    "i18next": "^26.3.0",
    "i18next-browser-languagedetector": "^8.2.0",
    "jsonwebtoken": "^9.0.2",
    "jszip": "^3.10.1",
    "katex": "^0.16.25",
    "lucide-react": "^0.515.0",
    "mime-types": "^3.0.1",
    "multer": "^2.0.1",
    "node-fetch": "^2.7.0",
    "node-pty": "^1.1.0-beta34",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-dropzone": "^15.0.0",
    "react-error-boundary": "^4.1.2",
    "react-i18next": "^16.5.3",
    "react-markdown": "^10.1.0",
    "react-router-dom": "^6.8.1",
    "react-syntax-highlighter": "^15.6.1",
    "rehype-katex": "^7.0.1",
    "rehype-raw": "^7.0.0",
    "remark-gfm": "^4.0.0",
    "remark-math": "^6.0.0",
    "sqlite": "^5.1.1",
    "sqlite3": "^5.1.7",
    "tailwind-merge": "^3.3.1",
    "web-push": "^3.6.7",
    "ws": "^8.14.2",
    "yaml": "^2.8.2"
  },
  "devDependencies": {
    "@eslint/js": "^9.39.3",
    "@playwright/test": "^1.59.1",
    "@testing-library/react": "^16.3.2",
    "@types/node": "^22.19.7",
    "@types/react": "^18.2.43",
    "@types/react-dom": "^18.2.17",
    "@vitejs/plugin-react": "^4.6.0",
    "autoprefixer": "^10.4.16",
    "concurrently": "^8.2.2",
    "eslint": "^9.39.3",
    "eslint-plugin-import-x": "^4.16.1",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^7.0.1",
    "eslint-plugin-react-refresh": "^0.5.2",
    "eslint-plugin-tailwindcss": "^3.18.2",
    "eslint-plugin-unused-imports": "^4.4.1",
    "globals": "^17.4.0",
    "jsdom": "^29.0.2",
    "node-gyp": "^12.3.0",
    "postcss": "^8.4.32",
    "sharp": "^0.34.2",
    "tailwindcss": "^3.4.0",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.56.1",
    "vite": "^7.0.4",
    "vitest": "^4.1.4"
  }
}