fluxy-bot 0.8.6 → 0.8.9
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.
- package/README.md +84 -53
- package/bin/cli.backup.js +2138 -0
- package/bin/cli.js +6 -1717
- package/cli/commands/daemon.ts +42 -0
- package/cli/commands/init.ts +32 -0
- package/cli/commands/start.ts +113 -0
- package/cli/commands/tunnel.temp.ts +206 -0
- package/cli/commands/tunnel.ts +227 -0
- package/cli/commands/update.ts +163 -0
- package/cli/core/base-adapter.ts +156 -0
- package/cli/core/cloudflared.ts +113 -0
- package/cli/core/config.ts +73 -0
- package/cli/core/os-detector.ts +43 -0
- package/cli/core/server.ts +109 -0
- package/cli/core/types.ts +15 -0
- package/cli/index.ts +72 -0
- package/cli/platforms/darwin.ts +146 -0
- package/cli/platforms/index.ts +21 -0
- package/cli/platforms/linux.ts +156 -0
- package/cli/platforms/win32.ts +34 -0
- package/cli/utils/ui.ts +37 -0
- package/components.json +18 -18
- package/dist-fluxy/assets/{fluxy-CY9PvJvb.js → fluxy-BAucOLaM.js} +30 -30
- package/dist-fluxy/fluxy.html +1 -1
- package/package.json +109 -98
- package/postcss.config.js +3 -3
- package/scripts/install.ps1 +1 -1
- package/scripts/install.sh +1 -1
- package/scripts/postinstall.js +58 -47
- package/shared/ai.ts +202 -118
- package/shared/config.ts +39 -37
- package/shared/logger.ts +14 -6
- package/shared/paths.ts +16 -10
- package/shared/relay.ts +98 -89
- package/supervisor/backend.ts +89 -77
- package/supervisor/chat/ARCHITECTURE.md +14 -13
- package/supervisor/chat/OnboardWizard.tsx +3419 -2194
- package/supervisor/chat/fluxy-main.tsx +633 -495
- package/supervisor/chat/fluxy.html +36 -24
- package/supervisor/chat/onboard-main.tsx +8 -8
- package/supervisor/chat/onboard.html +13 -10
- package/supervisor/chat/src/components/Chat/AudioBubble.tsx +108 -94
- package/supervisor/chat/src/components/Chat/ChatView.tsx +36 -14
- package/supervisor/chat/src/components/Chat/ImageLightbox.tsx +89 -71
- package/supervisor/chat/src/components/Chat/InputBar.tsx +728 -498
- package/supervisor/chat/src/components/Chat/MessageBubble.tsx +246 -154
- package/supervisor/chat/src/components/Chat/MessageList.tsx +138 -114
- package/supervisor/chat/src/components/Chat/TypingIndicator.tsx +50 -38
- package/supervisor/chat/src/components/LoginScreen.tsx +296 -245
- package/supervisor/chat/src/hooks/useChat.ts +259 -210
- package/supervisor/chat/src/hooks/useFluxyChat.ts +322 -232
- package/supervisor/chat/src/hooks/useSpeechRecognition.ts +147 -137
- package/supervisor/chat/src/lib/auth.ts +23 -20
- package/supervisor/chat/src/lib/ws-client.ts +125 -113
- package/supervisor/chat/src/styles/globals.css +85 -76
- package/supervisor/file-saver.ts +52 -39
- package/supervisor/fluxy-agent.ts +292 -213
- package/supervisor/index.ts +1263 -895
- package/supervisor/scheduler.ts +299 -237
- package/supervisor/tunnel.ts +167 -113
- package/supervisor/vite-dev.ts +61 -51
- package/supervisor/widget.js +147 -135
- package/supervisor/worker.ts +49 -45
- package/tsconfig.json +24 -18
- package/vite.config.ts +55 -48
- package/vite.fluxy.config.ts +34 -34
- package/worker/claude-auth.ts +265 -202
- package/worker/codex-auth.ts +181 -144
- package/worker/db.ts +191 -63
- package/worker/index.ts +842 -601
- package/workspace/MYSELF.md +1 -1
- package/workspace/PULSE.json +6 -6
- package/workspace/backend/index.ts +19 -16
- package/workspace/client/index.html +60 -47
- package/workspace/client/public/manifest.json +21 -21
- package/workspace/client/public/sw.js +31 -29
- package/workspace/client/src/App.tsx +136 -91
- package/workspace/client/src/components/Dashboard/DashboardPage.tsx +72 -68
- package/workspace/client/src/components/ErrorBoundary.tsx +11 -11
- package/workspace/client/src/components/Layout/DashboardLayout.tsx +35 -35
- package/workspace/client/src/components/Layout/Footer.tsx +12 -12
- package/workspace/client/src/components/Layout/MobileNav.tsx +23 -23
- package/workspace/client/src/components/Layout/Sidebar.tsx +81 -81
- package/workspace/client/src/components/ui/avatar.tsx +85 -85
- package/workspace/client/src/components/ui/badge.tsx +41 -40
- package/workspace/client/src/components/ui/button.tsx +57 -56
- package/workspace/client/src/components/ui/card.tsx +75 -75
- package/workspace/client/src/components/ui/dialog.tsx +117 -114
- package/workspace/client/src/components/ui/dropdown-menu.tsx +199 -191
- package/workspace/client/src/components/ui/input.tsx +17 -17
- package/workspace/client/src/components/ui/scroll-area.tsx +47 -47
- package/workspace/client/src/components/ui/select.tsx +151 -145
- package/workspace/client/src/components/ui/separator.tsx +21 -21
- package/workspace/client/src/components/ui/sheet.tsx +102 -102
- package/workspace/client/src/components/ui/skeleton.tsx +10 -10
- package/workspace/client/src/components/ui/switch.tsx +26 -26
- package/workspace/client/src/components/ui/tabs.tsx +69 -69
- package/workspace/client/src/components/ui/textarea.tsx +14 -14
- package/workspace/client/src/components/ui/tooltip.tsx +37 -37
- package/workspace/client/src/lib/utils.ts +1 -1
- package/workspace/client/src/main.tsx +3 -3
- package/workspace/client/src/styles/globals.css +85 -76
- package/workspace/skills/code-reviewer/.claude-plugin/plugin.json +3 -3
- package/workspace/skills/code-reviewer/skills/code-reviewer/SKILL.md +6 -0
- package/workspace/skills/daily-standup/.claude-plugin/plugin.json +3 -3
- package/workspace/skills/daily-standup/skills/daily-standup/SKILL.md +7 -0
- package/workspace/skills/workspace-helper/.claude-plugin/plugin.json +3 -3
- 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
|
-
|
|
15
|
-
|
|
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
|
|
50
|
-
|
|
51
|
-
| `/fluxy/widget.js`
|
|
52
|
-
| `/sw.js`, `/fluxy/sw.js` | Embedded service worker
|
|
53
|
-
| `/app/api/*`
|
|
54
|
-
| `/api/*`
|
|
55
|
-
| `/fluxy/*`
|
|
56
|
-
| Everything else
|
|
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
|
|
154
|
-
|
|
155
|
-
| `MYSELF.md`
|
|
156
|
-
| `MYHUMAN.md`
|
|
157
|
-
| `MEMORY.md`
|
|
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
|
-
{
|
|
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
|
-
[
|
|
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
|
-
|
|
390
|
-
|
|
391
|
-
|
|
|
392
|
-
|
|
|
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
|
|
429
|
-
|
|
430
|
-
| `fluxy init`
|
|
431
|
-
| `fluxy start`
|
|
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
|
-
|
|
439
|
-
|
|
440
|
-
|
|
|
441
|
-
| `fluxy tunnel
|
|
442
|
-
| `fluxy tunnel
|
|
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
|
|
482
|
-
|
|
483
|
-
| `~/.fluxy/config.json`
|
|
484
|
-
| `~/.fluxy/cloudflared-config.yml`
|
|
485
|
-
| `~/.fluxy/memory.db`
|
|
486
|
-
| `~/.fluxy/bin/cloudflared`
|
|
487
|
-
| `~/.fluxy/workspace/`
|
|
488
|
-
| `~/.codex/codedeck-auth.json`
|
|
489
|
-
| `~/.claude/.credentials.json`
|
|
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
|