fluxy-bot 0.8.8 → 0.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +84 -53
  2. package/bin/cli.backup.js +2138 -0
  3. package/bin/cli.js +6 -1717
  4. package/cli/commands/daemon.ts +42 -0
  5. package/cli/commands/init.ts +173 -0
  6. package/cli/commands/start.ts +113 -0
  7. package/cli/commands/tunnel.temp.ts +206 -0
  8. package/cli/commands/tunnel.ts +227 -0
  9. package/cli/commands/update.ts +163 -0
  10. package/cli/core/base-adapter.ts +156 -0
  11. package/cli/core/cloudflared.ts +113 -0
  12. package/cli/core/config.ts +73 -0
  13. package/cli/core/os-detector.ts +43 -0
  14. package/cli/core/server.ts +115 -0
  15. package/cli/core/types.ts +15 -0
  16. package/cli/index.ts +72 -0
  17. package/cli/platforms/darwin.ts +146 -0
  18. package/cli/platforms/index.ts +21 -0
  19. package/cli/platforms/linux.ts +156 -0
  20. package/cli/platforms/win32.ts +34 -0
  21. package/cli/utils/ui.ts +37 -0
  22. package/components.json +18 -18
  23. package/package.json +109 -98
  24. package/postcss.config.js +3 -3
  25. package/scripts/install.ps1 +1 -1
  26. package/scripts/install.sh +1 -1
  27. package/scripts/postinstall.js +58 -47
  28. package/shared/ai.ts +202 -118
  29. package/shared/config.ts +39 -37
  30. package/shared/logger.ts +14 -6
  31. package/shared/paths.ts +16 -10
  32. package/shared/relay.ts +98 -89
  33. package/supervisor/backend.ts +89 -77
  34. package/supervisor/chat/ARCHITECTURE.md +14 -13
  35. package/supervisor/chat/OnboardWizard.tsx +3419 -2194
  36. package/supervisor/chat/fluxy-main.tsx +633 -495
  37. package/supervisor/chat/fluxy.html +36 -24
  38. package/supervisor/chat/onboard-main.tsx +8 -8
  39. package/supervisor/chat/onboard.html +13 -10
  40. package/supervisor/chat/src/components/Chat/AudioBubble.tsx +108 -94
  41. package/supervisor/chat/src/components/Chat/ChatView.tsx +36 -14
  42. package/supervisor/chat/src/components/Chat/ImageLightbox.tsx +89 -71
  43. package/supervisor/chat/src/components/Chat/InputBar.tsx +728 -498
  44. package/supervisor/chat/src/components/Chat/MessageBubble.tsx +246 -154
  45. package/supervisor/chat/src/components/Chat/MessageList.tsx +138 -114
  46. package/supervisor/chat/src/components/Chat/TypingIndicator.tsx +50 -38
  47. package/supervisor/chat/src/components/LoginScreen.tsx +296 -245
  48. package/supervisor/chat/src/hooks/useChat.ts +259 -210
  49. package/supervisor/chat/src/hooks/useFluxyChat.ts +322 -232
  50. package/supervisor/chat/src/hooks/useSpeechRecognition.ts +148 -126
  51. package/supervisor/chat/src/lib/auth.ts +23 -20
  52. package/supervisor/chat/src/lib/ws-client.ts +125 -113
  53. package/supervisor/chat/src/styles/globals.css +85 -76
  54. package/supervisor/file-saver.ts +52 -39
  55. package/supervisor/fluxy-agent.ts +292 -213
  56. package/supervisor/index.ts +1263 -895
  57. package/supervisor/scheduler.ts +299 -237
  58. package/supervisor/tunnel.ts +167 -113
  59. package/supervisor/vite-dev.ts +61 -51
  60. package/supervisor/widget.js +147 -135
  61. package/supervisor/worker.ts +49 -45
  62. package/tsconfig.json +24 -18
  63. package/vite.config.ts +55 -48
  64. package/vite.fluxy.config.ts +34 -34
  65. package/worker/claude-auth.ts +265 -202
  66. package/worker/codex-auth.ts +181 -144
  67. package/worker/db.ts +191 -63
  68. package/worker/index.ts +842 -601
  69. package/workspace/MYSELF.md +1 -1
  70. package/workspace/PULSE.json +6 -6
  71. package/workspace/backend/index.ts +19 -16
  72. package/workspace/client/index.html +60 -47
  73. package/workspace/client/public/manifest.json +21 -21
  74. package/workspace/client/public/sw.js +31 -29
  75. package/workspace/client/src/App.tsx +136 -91
  76. package/workspace/client/src/components/Dashboard/DashboardPage.tsx +72 -68
  77. package/workspace/client/src/components/ErrorBoundary.tsx +11 -11
  78. package/workspace/client/src/components/Layout/DashboardLayout.tsx +35 -35
  79. package/workspace/client/src/components/Layout/Footer.tsx +12 -12
  80. package/workspace/client/src/components/Layout/MobileNav.tsx +23 -23
  81. package/workspace/client/src/components/Layout/Sidebar.tsx +81 -81
  82. package/workspace/client/src/components/ui/avatar.tsx +85 -85
  83. package/workspace/client/src/components/ui/badge.tsx +41 -40
  84. package/workspace/client/src/components/ui/button.tsx +57 -56
  85. package/workspace/client/src/components/ui/card.tsx +75 -75
  86. package/workspace/client/src/components/ui/dialog.tsx +117 -114
  87. package/workspace/client/src/components/ui/dropdown-menu.tsx +199 -191
  88. package/workspace/client/src/components/ui/input.tsx +17 -17
  89. package/workspace/client/src/components/ui/scroll-area.tsx +47 -47
  90. package/workspace/client/src/components/ui/select.tsx +151 -145
  91. package/workspace/client/src/components/ui/separator.tsx +21 -21
  92. package/workspace/client/src/components/ui/sheet.tsx +102 -102
  93. package/workspace/client/src/components/ui/skeleton.tsx +10 -10
  94. package/workspace/client/src/components/ui/switch.tsx +26 -26
  95. package/workspace/client/src/components/ui/tabs.tsx +69 -69
  96. package/workspace/client/src/components/ui/textarea.tsx +14 -14
  97. package/workspace/client/src/components/ui/tooltip.tsx +37 -37
  98. package/workspace/client/src/lib/utils.ts +1 -1
  99. package/workspace/client/src/main.tsx +3 -3
  100. package/workspace/client/src/styles/globals.css +85 -76
  101. package/workspace/skills/code-reviewer/.claude-plugin/plugin.json +3 -3
  102. package/workspace/skills/code-reviewer/skills/code-reviewer/SKILL.md +6 -0
  103. package/workspace/skills/daily-standup/.claude-plugin/plugin.json +3 -3
  104. package/workspace/skills/daily-standup/skills/daily-standup/SKILL.md +7 -0
  105. package/workspace/skills/workspace-helper/.claude-plugin/plugin.json +3 -3
  106. package/workspace/skills/workspace-helper/skills/workspace-helper/SKILL.md +2 -0
package/README.md CHANGED
@@ -11,8 +11,8 @@ Fluxy is three separate codebases working together:
11
11
  1. **Fluxy Bot** (this repo) -- runs on the user's machine. Supervisor process, worker API, workspace app, chat UI.
12
12
  2. **Fluxy Relay** (separate server at `api.fluxy.bot`) -- optional cloud service that maps `username.fluxy.bot` to the user's Cloudflare tunnel. Routes HTTP and WebSocket traffic. Only used with Quick Tunnels.
13
13
  3. **Cloudflare Tunnel** -- exposes `localhost:3000` to the internet. Two modes:
14
- - **Quick Tunnel** -- zero-config, no account needed, random `*.trycloudflare.com` URL that changes on restart. Optionally paired with the relay for a permanent domain.
15
- - **Named Tunnel** -- persistent URL with the user's own domain. Requires a Cloudflare account and DNS setup. No relay needed.
14
+ - **Quick Tunnel** -- zero-config, no account needed, random `*.trycloudflare.com` URL that changes on restart. Optionally paired with the relay for a permanent domain.
15
+ - **Named Tunnel** -- persistent URL with the user's own domain. Requires a Cloudflare account and DNS setup. No relay needed.
16
16
 
17
17
  The user chooses their tunnel mode during `fluxy init` via an interactive selector.
18
18
 
@@ -22,7 +22,7 @@ The user chooses their tunnel mode during `fluxy init` via an interactive select
22
22
 
23
23
  When `fluxy start` runs, the CLI spawns a single supervisor process. The supervisor then spawns child processes and manages their lifecycle:
24
24
 
25
- ```
25
+ ```shell
26
26
  CLI (bin/cli.js)
27
27
  |
28
28
  spawns
@@ -46,20 +46,22 @@ All child processes auto-restart up to 3 times on crash (reset counter if alive
46
46
 
47
47
  The supervisor is a raw `http.createServer` (no Express) that routes every incoming request:
48
48
 
49
- | Path | Target | Notes |
50
- |---|---|---|
51
- | `/fluxy/widget.js` | Direct file serve | Chat bubble script, no-cache |
52
- | `/sw.js`, `/fluxy/sw.js` | Embedded service worker | PWA + push notification support |
53
- | `/app/api/*` | Backend (port 3004) | Strips `/app/api` prefix before forwarding |
54
- | `/api/*` | Worker (port 3001) | Auth middleware checks Bearer token on mutations |
55
- | `/fluxy/*` | Static files from `dist-fluxy/` | Pre-built chat SPA. HTML: no-cache. Hashed assets: immutable, 1yr max-age |
56
- | Everything else | Vite dev server (port 3002) | Dashboard + HMR |
49
+ | Path | Target | Notes |
50
+ | ------------------------ | ------------------------------- | ------------------------------------------------------------------------- |
51
+ | `/fluxy/widget.js` | Direct file serve | Chat bubble script, no-cache |
52
+ | `/sw.js`, `/fluxy/sw.js` | Embedded service worker | PWA + push notification support |
53
+ | `/app/api/*` | Backend (port 3004) | Strips `/app/api` prefix before forwarding |
54
+ | `/api/*` | Worker (port 3001) | Auth middleware checks Bearer token on mutations |
55
+ | `/fluxy/*` | Static files from `dist-fluxy/` | Pre-built chat SPA. HTML: no-cache. Hashed assets: immutable, 1yr max-age |
56
+ | Everything else | Vite dev server (port 3002) | Dashboard + HMR |
57
57
 
58
58
  WebSocket upgrades:
59
+
59
60
  - `/fluxy/ws` -- Fluxy chat. Auth-gated via query param token. Handled by an in-process `WebSocketServer`.
60
61
  - Everything else -- proxied to Vite dev server for HMR.
61
62
 
62
63
  The supervisor also:
64
+
63
65
  - Manages the Cloudflare tunnel lifecycle (start, stop, health watchdog every 30s) for both quick and named tunnels
64
66
  - Registers with the relay and maintains heartbeats (quick tunnel mode only)
65
67
  - Runs the Claude Agent SDK when users send chat messages
@@ -85,6 +87,7 @@ Express server on port 3001. Owns the database and all platform API logic. The s
85
87
  **Database:** `~/.fluxy/memory.db` (SQLite via better-sqlite3, WAL mode)
86
88
 
87
89
  Tables:
90
+
88
91
  - `conversations` -- chat sessions (id, title, model, session_id, timestamps)
89
92
  - `messages` -- individual messages (role, content, tokens_in, tokens_out, model, audio_data, attachments as JSON)
90
93
  - `settings` -- key-value store (onboard config, provider, model, portal credentials, etc.)
@@ -94,6 +97,7 @@ Tables:
94
97
  Auto-migrations add missing columns on startup (session_id, audio_data, attachments).
95
98
 
96
99
  Key endpoints:
100
+
97
101
  - `/api/conversations` -- CRUD for conversations and messages (paginated with `before` cursor)
98
102
  - `/api/settings` -- key-value read/write
99
103
  - `/api/onboard` -- saves wizard configuration (provider, model, portal password, whisper key, names)
@@ -118,7 +122,7 @@ Portal passwords are hashed with scrypt (random 16-byte salt, stored as `salt:ha
118
122
 
119
123
  The workspace is a full-stack app template that Claude can freely modify. It lives at `workspace/` in the project and gets copied to `~/.fluxy/workspace/` on first install.
120
124
 
121
- ```
125
+ ```shell
122
126
  workspace/
123
127
  client/ React + Vite + Tailwind dashboard
124
128
  src/App.tsx Main app entry (error boundary, rebuild overlay, onboard iframe)
@@ -150,12 +154,12 @@ The workspace is the only directory Claude is allowed to modify. The system prom
150
154
 
151
155
  The agent has no persistent memory between sessions except through files in the workspace:
152
156
 
153
- | File | Purpose |
154
- |---|---|
155
- | `MYSELF.md` | Agent identity, personality, operating manual. The agent's self-authored description of who it is. |
156
- | `MYHUMAN.md` | Profile of the user -- preferences, context, everything the agent has learned about them. |
157
- | `MEMORY.md` | Long-term curated knowledge. Distilled from daily notes into durable insights. |
158
- | `memory/YYYY-MM-DD.md` | Daily notes. Raw, append-only log of events and observations for that day. |
157
+ | File | Purpose |
158
+ | ---------------------- | -------------------------------------------------------------------------------------------------- |
159
+ | `MYSELF.md` | Agent identity, personality, operating manual. The agent's self-authored description of who it is. |
160
+ | `MYHUMAN.md` | Profile of the user -- preferences, context, everything the agent has learned about them. |
161
+ | `MEMORY.md` | Long-term curated knowledge. Distilled from daily notes into durable insights. |
162
+ | `memory/YYYY-MM-DD.md` | Daily notes. Raw, append-only log of events and observations for that day. |
159
163
 
160
164
  All four are injected into the system prompt at query time by `fluxy-agent.ts`. The agent reads and writes these files itself -- there's no external process managing them.
161
165
 
@@ -170,7 +174,11 @@ The scheduler runs in-process within the supervisor, checking every 60 seconds.
170
174
  Periodic wake-ups configured in `workspace/PULSE.json`:
171
175
 
172
176
  ```json
173
- { "enabled": true, "intervalMinutes": 30, "quietHours": { "start": "23:00", "end": "07:00" } }
177
+ {
178
+ "enabled": true,
179
+ "intervalMinutes": 30,
180
+ "quietHours": { "start": "23:00", "end": "07:00" }
181
+ }
174
182
  ```
175
183
 
176
184
  When a pulse fires, the scheduler triggers the agent with a system-generated prompt. The agent can check in, review notes, or take proactive action. Quiet hours suppress pulses.
@@ -180,12 +188,21 @@ When a pulse fires, the scheduler triggers the agent with a system-generated pro
180
188
  Scheduled tasks configured in `workspace/CRONS.json`:
181
189
 
182
190
  ```json
183
- [{ "id": "...", "schedule": "0 9 * * *", "task": "Check the weather", "enabled": true, "oneShot": false }]
191
+ [
192
+ {
193
+ "id": "...",
194
+ "schedule": "0 9 * * *",
195
+ "task": "Check the weather",
196
+ "enabled": true,
197
+ "oneShot": false
198
+ }
199
+ ]
184
200
  ```
185
201
 
186
202
  Uses `cron-parser` to match cron expressions against the current minute. One-shot crons are auto-removed after firing.
187
203
 
188
204
  When a cron or pulse fires:
205
+
189
206
  1. The scheduler calls `startFluxyAgentQuery` with the task
190
207
  2. It extracts `<Message>` blocks from the agent's response
191
208
  3. It sends push notifications for those messages
@@ -220,12 +237,14 @@ If Claude introduces a bug that crashes the dashboard, the chat stays alive. The
220
237
  ### Widget (supervisor/widget.js)
221
238
 
222
239
  Vanilla JS that injects:
240
+
223
241
  - A floating video bubble (60px, bottom-right corner, with Safari fallback image)
224
242
  - A slide-out panel (480px wide, full screen on mobile) containing the iframe at `/fluxy/`
225
243
  - A backdrop for dismissal
226
244
  - Keyboard dismiss (Escape key)
227
245
 
228
246
  Communicates with the iframe via `postMessage`:
247
+
229
248
  - `fluxy:close` -- iframe requests panel close
230
249
  - `fluxy:install-app` -- iframe requests PWA install prompt
231
250
  - `fluxy:show-ios-install` -- iframe requests iOS-specific install modal
@@ -240,6 +259,7 @@ Panel state persisted in localStorage (`fluxy_widget_open`) to survive HMR reloa
240
259
  ### Chat Protocol (WebSocket)
241
260
 
242
261
  Client -> Server:
262
+
243
263
  - `user:message` -- `{ content, conversationId?, attachments? }` where attachments are `{ type, name, mediaType, data(base64) }`
244
264
  - `user:stop` -- abort current agent query
245
265
  - `user:clear-context` -- clear conversation and agent session
@@ -247,6 +267,7 @@ Client -> Server:
247
267
  - `settings:save` -- `{ ...settings }` (bypasses relay POST limitation)
248
268
 
249
269
  Server -> Client:
270
+
250
271
  - `bot:typing` -- agent started
251
272
  - `bot:token` -- streamed text chunk
252
273
  - `bot:tool` -- tool invocation (name, status)
@@ -266,6 +287,7 @@ Auto-reconnects with exponential backoff (1s -> 8s cap). Queues messages during
266
287
  ### PWA Support
267
288
 
268
289
  The chat SPA handles:
290
+
269
291
  - `beforeinstallprompt` for Android PWA install
270
292
  - iOS-specific install modal with step-by-step instructions
271
293
  - Standalone mode detection
@@ -309,7 +331,7 @@ The user selects a tunnel mode during `fluxy init`. The mode is stored in `~/.fl
309
331
 
310
332
  Zero configuration. No Cloudflare account needed.
311
333
 
312
- ```
334
+ ```shell
313
335
  Phone browser
314
336
  |
315
337
  | https://bruno.fluxy.bot (via relay, optional)
@@ -334,7 +356,7 @@ Supervisor User's machine
334
356
 
335
357
  Persistent URL with the user's own domain. Requires a Cloudflare account + domain.
336
358
 
337
- ```
359
+ ```shell
338
360
  Phone browser
339
361
  |
340
362
  | https://bot.mydomain.com
@@ -365,6 +387,7 @@ Supervisor User's machine
365
387
  Node.js/Express + http-proxy + MongoDB. Hosted on Railway. Only used when the user opts into Quick Tunnel mode and registers a handle.
366
388
 
367
389
  **Registration flow:**
390
+
368
391
  1. User picks a username during onboarding
369
392
  2. Bot calls `POST /api/register` with username + tier
370
393
  3. Relay stores tokenHash (SHA-256) in MongoDB, returns raw token + relay URL
@@ -373,6 +396,7 @@ Node.js/Express + http-proxy + MongoDB. Hosted on Railway. Only used when the us
373
396
  6. Relay marks bot online, starts accepting proxied traffic
374
397
 
375
398
  **Request proxying:**
399
+
376
400
  1. Request hits `bruno.fluxy.bot`
377
401
  2. Subdomain middleware extracts username + tier from hostname
378
402
  3. MongoDB lookup returns the bot's tunnel URL
@@ -380,16 +404,18 @@ Node.js/Express + http-proxy + MongoDB. Hosted on Railway. Only used when the us
380
404
  5. Response streams back to the user's browser
381
405
 
382
406
  **Presence:**
407
+
383
408
  - Bot sends `POST /api/heartbeat` every 30 seconds with its tunnel URL
384
409
  - Relay considers a bot stale if no heartbeat in 120 seconds
385
410
  - Stale bots get a 503 offline page (auto-refreshes every 15s)
386
411
  - On graceful shutdown, bot calls `POST /api/disconnect`
387
412
 
388
413
  **Domain tiers:**
389
- | Tier | Subdomain | Path shortcut | Cost |
390
- |---|---|---|---|
391
- | Premium | `bruno.fluxy.bot` | `fluxy.bot/bruno` | $5/mo |
392
- | Free | `bruno.my.fluxy.bot` | `my.fluxy.bot/bruno` | Free |
414
+
415
+ | Tier | Subdomain | Path shortcut | Cost |
416
+ | ------- | -------------------- | -------------------- | ----- |
417
+ | Premium | `bruno.fluxy.bot` | `fluxy.bot/bruno` | $5/mo |
418
+ | Free | `bruno.my.fluxy.bot` | `my.fluxy.bot/bruno` | Free |
393
419
 
394
420
  Same username can exist on both tiers independently. Compound unique index on `username + tier`.
395
421
 
@@ -425,21 +451,22 @@ Settings are saved via WebSocket (`settings:save` message) to bypass relay POST
425
451
 
426
452
  The CLI is the user-facing entry point. Commands:
427
453
 
428
- | Command | Description |
429
- |---|---|
430
- | `fluxy init` | First-time setup: interactive tunnel mode chooser (Quick or Named), creates config, installs cloudflared, boots server, optionally installs systemd daemon |
431
- | `fluxy start` | Boot the supervisor (or detect existing daemon and show status) |
432
- | `fluxy status` | Health check via `/api/health`, shows uptime, tunnel URL, and relay URL |
433
- | `fluxy update` | Downloads latest from npm registry, updates code directories, rebuilds UI, restarts daemon |
434
- | `fluxy tunnel` | Named tunnel management (subcommands below) |
435
- | `fluxy daemon` | Linux systemd management: install, start, stop, restart, status, logs, uninstall |
454
+ | Command | Description |
455
+ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
456
+ | `fluxy init` | First-time setup: interactive tunnel mode chooser (Quick or Named), creates config, installs cloudflared, boots server, optionally installs systemd daemon |
457
+ | `fluxy start` | Boot the supervisor (or detect existing daemon and show status) |
458
+ | `fluxy status` | Health check via `/api/health`, shows uptime, tunnel URL, and relay URL |
459
+ | `fluxy update` | Downloads latest from npm registry, updates code directories, rebuilds UI, restarts daemon |
460
+ | `fluxy tunnel` | Named tunnel management (subcommands below) |
461
+ | `fluxy daemon` | Linux systemd management: install, start, stop, restart, status, logs, uninstall |
436
462
 
437
463
  **`fluxy tunnel` subcommands:**
438
- | Subcommand | Description |
439
- |---|---|
440
- | `fluxy tunnel setup` | Interactive named tunnel setup: login to Cloudflare, create tunnel, enter domain, generate config YAML, print CNAME instructions |
441
- | `fluxy tunnel status` | Show current tunnel mode and configuration |
442
- | `fluxy tunnel reset` | Switch back to quick tunnel mode |
464
+
465
+ | Subcommand | Description |
466
+ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
467
+ | `fluxy tunnel setup` | Interactive named tunnel setup: login to Cloudflare, create tunnel, enter domain, generate config YAML, print CNAME instructions |
468
+ | `fluxy tunnel status` | Show current tunnel mode and configuration |
469
+ | `fluxy tunnel reset` | Switch back to quick tunnel mode |
443
470
 
444
471
  **`fluxy init` tunnel chooser:**
445
472
 
@@ -461,15 +488,19 @@ On Linux, `fluxy daemon` generates a systemd unit file that runs the supervisor
461
488
  Two installation paths:
462
489
 
463
490
  **Via curl (production):**
464
- ```
491
+
492
+ ```shell
465
493
  curl -fsSL https://fluxy.bot/install | sh
466
494
  ```
495
+
467
496
  The install script (`scripts/install.sh`) detects OS/arch, checks for Node.js >= 18 (or bundles Node 22.14.0), downloads the npm package, extracts to `~/.fluxy/`, and adds `fluxy` to PATH.
468
497
 
469
498
  **Via npm (development):**
470
- ```
499
+
500
+ ```shell
471
501
  npm install fluxy-bot
472
502
  ```
503
+
473
504
  The `postinstall` script (`scripts/postinstall.js`) copies code directories to `~/.fluxy/`, runs `npm install --omit=dev` there, builds the chat UI if missing, and creates a `fluxy` symlink.
474
505
 
475
506
  Windows: `scripts/install.ps1` (PowerShell equivalent).
@@ -478,16 +509,16 @@ Windows: `scripts/install.ps1` (PowerShell equivalent).
478
509
 
479
510
  ## Data Locations
480
511
 
481
- | Path | Contents |
482
- |---|---|
483
- | `~/.fluxy/config.json` | Port, username, AI provider, tunnel mode/config, relay token, tunnel URL |
484
- | `~/.fluxy/cloudflared-config.yml` | Named tunnel config (generated by `fluxy tunnel setup`) |
485
- | `~/.fluxy/memory.db` | SQLite -- conversations, messages, settings, sessions, push subscriptions |
486
- | `~/.fluxy/bin/cloudflared` | Cloudflare tunnel binary |
487
- | `~/.fluxy/workspace/` | User's workspace copy (client, backend, memory files, skills, config) |
488
- | `~/.codex/codedeck-auth.json` | OpenAI OAuth tokens |
489
- | `~/.claude/.credentials.json` | Claude OAuth tokens (Linux/Windows) |
490
- | macOS Keychain `Claude Code-credentials` | Claude OAuth tokens (macOS, source of truth) |
512
+ | Path | Contents |
513
+ | ---------------------------------------- | ------------------------------------------------------------------------- |
514
+ | `~/.fluxy/config.json` | Port, username, AI provider, tunnel mode/config, relay token, tunnel URL |
515
+ | `~/.fluxy/cloudflared-config.yml` | Named tunnel config (generated by `fluxy tunnel setup`) |
516
+ | `~/.fluxy/memory.db` | SQLite -- conversations, messages, settings, sessions, push subscriptions |
517
+ | `~/.fluxy/bin/cloudflared` | Cloudflare tunnel binary |
518
+ | `~/.fluxy/workspace/` | User's workspace copy (client, backend, memory files, skills, config) |
519
+ | `~/.codex/codedeck-auth.json` | OpenAI OAuth tokens |
520
+ | `~/.claude/.credentials.json` | Claude OAuth tokens (Linux/Windows) |
521
+ | macOS Keychain `Claude Code-credentials` | Claude OAuth tokens (macOS, source of truth) |
491
522
 
492
523
  ---
493
524
 
@@ -495,7 +526,7 @@ Windows: `scripts/install.ps1` (PowerShell equivalent).
495
526
 
496
527
  ### Sacred (never modified by the agent)
497
528
 
498
- ```
529
+ ```shell
499
530
  bin/cli.js CLI entry point, startup sequence, update logic, daemon management
500
531
  supervisor/
501
532
  index.ts HTTP server, request routing, WebSocket handler, process orchestration
@@ -546,7 +577,7 @@ scripts/
546
577
 
547
578
  ### Workspace (agent-modifiable)
548
579
 
549
- ```
580
+ ```shell
550
581
  workspace/
551
582
  client/
552
583
  index.html Dashboard HTML shell, PWA manifest, widget script tag