{ "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", "test": "vitest run", "test:watch": "vitest", "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" } }