* feat(web): add Cloudflare Quick Tunnel support for remote access Implement --try-cf-tunnel flag that creates a temporary public URL routing to the locally running server via cloudflared. Features: - Auto-detect and spawn cloudflared subprocess - Extract and display *.trycloudflare.com URL - Proper cleanup on server shutdown - Dynamic port handling (tunnel routes to actual listening port) - Isolated HOME dir to avoid config conflicts - Installation help and limitations warning * docs: add Cloudflare tunnel feature to README - Document --try-cf-tunnel flag in CLI examples - Add Cloudflare Quick Tunnel to Web/PWA features * docs: add cloudflared as prerequisite for --try-cf-tunnel * feat(web): auto-generate password for Cloudflare tunnel When using --try-cf-tunnel without --ui-password, automatically generate a secure random password to protect the publicly exposed service. Features: - 16-character random password (easy to read, no ambiguous characters) - Password is displayed after tunnel is established - Warning to save the password (not shown again) - Works in both foreground and daemon modes - Uses same password for subsequent restarts (stored in instance file) * fix(web): improve Cloudflare tunnel UX and fix spawn ENAMETOOLONG - Generate and display password before tunnel starts (green colored) - Display tunnel URL in cyan via onTunnelReady callback - Fix ENAMETOOLONG by using env:undefined instead of copying process.env - Pass tryCfTunnel flag from CLI to main function - Remove duplicate tunnel URL output - Update warning message to reflect password protection - Change start script to use CLI wrapper for proper initialization --------- Co-authored-by: aptdnfapt <197602950+aptdnfapt@users.noreply.github.com>
93 lines
2.6 KiB
JSON
93 lines
2.6 KiB
JSON
{
|
|
"name": "@openchamber/web",
|
|
"version": "1.3.9",
|
|
"private": false,
|
|
"type": "module",
|
|
"main": "./server/index.js",
|
|
"types": "./server/index.d.ts",
|
|
"bin": {
|
|
"openchamber": "./bin/cli.js"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"scripts": {
|
|
"dev": "bun run build:watch",
|
|
"dev:server": "node server/index.js --port 3001",
|
|
"dev:server:watch": "nodemon --watch server --ext js --exec \"node server/index.js --port 3001\"",
|
|
"build": "vite build",
|
|
"build:watch": "vite build --watch",
|
|
"type-check": "tsc --noEmit",
|
|
"lint": "eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js",
|
|
"start": "node bin/cli.js serve"
|
|
},
|
|
"dependencies": {
|
|
"@fontsource/ibm-plex-mono": "^5.2.7",
|
|
"@fontsource/ibm-plex-sans": "^5.1.1",
|
|
"@ibm/plex": "^6.4.1",
|
|
"@opencode-ai/sdk": "^1.0.209",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.7",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@radix-ui/react-toggle": "^1.1.10",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@remixicon/react": "^4.7.0",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"@xterm/xterm": "^5.3.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"express": "^5.1.0",
|
|
"http-proxy-middleware": "^3.0.5",
|
|
"next-themes": "^0.4.6",
|
|
"node-pty": "^1.0.0",
|
|
"react": "^19.1.1",
|
|
"react-dom": "^19.1.1",
|
|
"react-markdown": "^10.1.0",
|
|
"react-syntax-highlighter": "^15.6.6",
|
|
"remark-gfm": "^4.0.1",
|
|
"simple-git": "^3.28.0",
|
|
"sonner": "^2.0.7",
|
|
"strip-json-comments": "^5.0.3",
|
|
"tailwind-merge": "^3.3.1",
|
|
"yaml": "^2.8.1",
|
|
"zustand": "^5.0.8"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.33.0",
|
|
"@tailwindcss/postcss": "^4.0.0",
|
|
"@types/node": "^24.3.1",
|
|
"@types/react": "^19.1.10",
|
|
"@types/react-dom": "^19.1.7",
|
|
"@vitejs/plugin-react": "^5.0.0",
|
|
"autoprefixer": "^10.4.21",
|
|
"concurrently": "^9.2.1",
|
|
"cors": "^2.8.5",
|
|
"cross-env": "^7.0.3",
|
|
"eslint": "^9.33.0",
|
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
"eslint-plugin-react-refresh": "^0.4.20",
|
|
"globals": "^16.3.0",
|
|
"nodemon": "^3.1.7",
|
|
"tailwindcss": "^4.0.0",
|
|
"tsx": "^4.20.6",
|
|
"tw-animate-css": "^1.3.8",
|
|
"typescript": "~5.8.3",
|
|
"typescript-eslint": "^8.39.1",
|
|
"vite": "^7.1.2"
|
|
},
|
|
"files": [
|
|
"dist",
|
|
"server",
|
|
"bin",
|
|
"public",
|
|
"package.json",
|
|
"README.md"
|
|
]
|
|
}
|