zozul-cli 0.1.1 → 0.2.1
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/.github/workflows/publish.yml +2 -3
- package/DEVELOPMENT.md +123 -12
- package/README.md +10 -7
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +10 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/dashboard/html.d.ts +5 -6
- package/dist/dashboard/html.d.ts.map +1 -1
- package/dist/dashboard/html.js +7 -50
- package/dist/dashboard/html.js.map +1 -1
- package/dist/dashboard/index.html +1016 -739
- package/dist/hooks/server.d.ts +2 -0
- package/dist/hooks/server.d.ts.map +1 -1
- package/dist/hooks/server.js +19 -4
- package/dist/hooks/server.js.map +1 -1
- package/dist/storage/repo.d.ts +8 -2
- package/dist/storage/repo.d.ts.map +1 -1
- package/dist/storage/repo.js +46 -27
- package/dist/storage/repo.js.map +1 -1
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +21 -0
- package/dist/sync/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands.ts +12 -1
- package/src/dashboard/html.ts +7 -61
- package/src/dashboard/index.html +1016 -739
- package/src/hooks/server.ts +24 -3
- package/src/storage/repo.ts +51 -31
- package/src/sync/index.ts +24 -0
|
@@ -2,7 +2,7 @@ name: Publish to npm
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
|
|
5
|
+
tags: ['v*']
|
|
6
6
|
|
|
7
7
|
jobs:
|
|
8
8
|
publish:
|
|
@@ -21,7 +21,6 @@ jobs:
|
|
|
21
21
|
|
|
22
22
|
- run: npm test
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
run: npm publish --access public || true
|
|
24
|
+
- run: npm publish --access public
|
|
26
25
|
env:
|
|
27
26
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/DEVELOPMENT.md
CHANGED
|
@@ -16,7 +16,7 @@ zozul-cli is a local observability sidecar for Claude Code. It ingests data from
|
|
|
16
16
|
src/
|
|
17
17
|
index.ts Entry point — loads .env, runs CLI
|
|
18
18
|
cli/
|
|
19
|
-
commands.ts All CLI commands (
|
|
19
|
+
commands.ts All CLI commands (5 top-level + hidden utilities)
|
|
20
20
|
format.ts Terminal output formatters
|
|
21
21
|
storage/
|
|
22
22
|
db.ts SQLite setup, schema migration, row types
|
|
@@ -24,6 +24,7 @@ src/
|
|
|
24
24
|
hooks/
|
|
25
25
|
server.ts HTTP server: hook handler, API routes, OTEL receiver dispatch
|
|
26
26
|
config.ts Read/write ~/.claude/settings.json for hooks
|
|
27
|
+
git.ts Install/uninstall git post-commit hook (auto-clears context)
|
|
27
28
|
otel/
|
|
28
29
|
receiver.ts Parse OTLP JSON payloads → DB + session accumulation
|
|
29
30
|
config.ts Read/write ~/.claude/settings.json for OTEL env vars
|
|
@@ -33,10 +34,19 @@ src/
|
|
|
33
34
|
watcher.ts fs.watch on ~/.claude/projects, debounced ingest
|
|
34
35
|
types.ts JSONL type definitions
|
|
35
36
|
dashboard/
|
|
36
|
-
index.html Dashboard SPA (vanilla JS, Chart.js from CDN)
|
|
37
|
-
html.ts Reads and serves index.html
|
|
37
|
+
index.html Dashboard SPA (vanilla JS, Chart.js from CDN). Four views: Summary, Tasks, Tags, Sessions. Auto-fallback between remote and local API.
|
|
38
|
+
html.ts Reads and serves index.html; injects ZOZUL_CONFIG for remote API auto-detection when env vars are set
|
|
39
|
+
context/
|
|
40
|
+
index.ts Read/write ~/.zozul/context.json — active task tags
|
|
41
|
+
sync/
|
|
42
|
+
client.ts ZozulApiClient — HTTP client for backend API
|
|
43
|
+
transform.ts SQLite row → API payload converters
|
|
44
|
+
index.ts Watermark-based incremental sync (sessions + OTEL bulk tables)
|
|
45
|
+
sync.test.ts Vitest tests for sync logic
|
|
38
46
|
service/
|
|
39
47
|
index.ts Install/uninstall as launchd (macOS) or systemd (Linux) service
|
|
48
|
+
pricing/
|
|
49
|
+
index.ts Model pricing table for per-turn cost calculation
|
|
40
50
|
```
|
|
41
51
|
|
|
42
52
|
Build output goes to `dist/`. The build script also copies `src/dashboard/index.html` → `dist/dashboard/index.html`.
|
|
@@ -93,7 +103,7 @@ Each line in the file is one JSON entry. Entries have `message.role`, `message.c
|
|
|
93
103
|
|
|
94
104
|
## Database schema
|
|
95
105
|
|
|
96
|
-
|
|
106
|
+
Eight tables, all in `~/.zozul/zozul.db` (WAL mode, foreign keys ON).
|
|
97
107
|
|
|
98
108
|
### `sessions`
|
|
99
109
|
One row per Claude Code session. Updated from both JSONL and OTEL.
|
|
@@ -187,6 +197,26 @@ prompt_id TEXT
|
|
|
187
197
|
timestamp TEXT
|
|
188
198
|
```
|
|
189
199
|
|
|
200
|
+
### `task_tags`
|
|
201
|
+
Maps turns to task tag strings. Populated during JSONL ingest when a context is active.
|
|
202
|
+
|
|
203
|
+
```sql
|
|
204
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
205
|
+
turn_id INTEGER → turns(id)
|
|
206
|
+
task TEXT
|
|
207
|
+
tagged_at TEXT -- ISO timestamp
|
|
208
|
+
UNIQUE(turn_id, task)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### `sync_watermarks`
|
|
212
|
+
Tracks incremental sync progress per table. Prevents re-syncing already-uploaded data.
|
|
213
|
+
|
|
214
|
+
```sql
|
|
215
|
+
table_name TEXT PRIMARY KEY -- 'sessions', 'turns', 'otel_metrics', 'otel_events'
|
|
216
|
+
last_id INTEGER -- highest rowid/id successfully synced
|
|
217
|
+
updated_at TEXT
|
|
218
|
+
```
|
|
219
|
+
|
|
190
220
|
---
|
|
191
221
|
|
|
192
222
|
## Key design decisions
|
|
@@ -205,6 +235,12 @@ timestamp TEXT
|
|
|
205
235
|
|
|
206
236
|
**JSONL file paths use lossy encoding.** Claude Code replaces `/` with `-` in project directory names. `decodeProjectPath` reverses this, but hyphens in original paths become `/`. This is unavoidable with Claude Code's current encoding scheme.
|
|
207
237
|
|
|
238
|
+
**Proportional cost replaces `turns.cost_usd` in queries.** Since `costUSD` in JSONL is always 0, per-turn cost is estimated as `session.total_cost_usd * (turn_all_tokens / session_all_tokens)` where all_tokens includes input, output, cache_read, and cache_creation. Both the local server (`PROPORTIONAL_COST_SQL` in `repo.ts`) and the remote API compute this server-side. Coverage is ~95% — turns with no JSONL token data get $0.
|
|
239
|
+
|
|
240
|
+
**Dashboard auto-detects data source.** When `ZOZUL_API_URL` and `ZOZUL_API_KEY` are set, `html.ts` injects `ZOZUL_CONFIG` into the dashboard. On load, the dashboard health-checks the remote API at `/api/v1/health` (3s timeout). If available, it routes `fetchJson` calls to the remote; if any remote call fails, it falls back to local for that request. A badge in the header shows "Remote" or "Local".
|
|
241
|
+
|
|
242
|
+
**Dashboard has four views.** Summary (cost chart, project breakdown, stat cards), Tasks (tag-combination groups from `/task-groups`), Tags (per-tag stats), Sessions (sortable/filterable table). All views except Sessions support time window filtering (7d/30d/All) via `?from=&to=` params. The dashboard uses only endpoints that exist on both the local and remote API — no local-only endpoints.
|
|
243
|
+
|
|
208
244
|
---
|
|
209
245
|
|
|
210
246
|
## Session lifecycle
|
|
@@ -230,11 +266,20 @@ All served by `hooks/server.ts` on port 7890.
|
|
|
230
266
|
|
|
231
267
|
| Method | Path | Description |
|
|
232
268
|
|---|---|---|
|
|
233
|
-
| GET | `/
|
|
234
|
-
| GET | `/
|
|
235
|
-
| GET | `/api/
|
|
269
|
+
| GET | `/health` | Health check — returns `{ status: "ok" }` |
|
|
270
|
+
| GET | `/dashboard` | Dashboard HTML (injects `ZOZUL_CONFIG` when `ZOZUL_API_URL` / `ZOZUL_API_KEY` are set) |
|
|
271
|
+
| GET | `/api/stats` | Aggregate stats. Accepts `?from=ISO&to=ISO` to filter by `sessions.started_at` |
|
|
272
|
+
| GET | `/api/sessions` | Paginated session list. Accepts `?limit=N&offset=N&from=ISO&to=ISO` |
|
|
236
273
|
| GET | `/api/sessions/:id` | Single session row |
|
|
237
274
|
| GET | `/api/sessions/:id/turns` | Turns for a session |
|
|
275
|
+
| GET | `/api/context` | Active task context (`~/.zozul/context.json`) |
|
|
276
|
+
| GET | `/api/task-groups` | Task groups by tag combination. Accepts `?from=ISO&to=ISO`. Returns `[{ tags, turn_count, human_interventions, total_duration_ms, total_cost_usd, last_seen }]`. Includes `Untagged` group |
|
|
277
|
+
| GET | `/api/tasks` | List distinct tags with turn counts, first/last tagged timestamps |
|
|
278
|
+
| GET | `/api/tasks/stats` | Multi-tag cost/token stats — `?tags=X,Y&mode=all\|any&from=ISO&to=ISO` |
|
|
279
|
+
| GET | `/api/tasks/turns` | Paginated turns filtered by tags — `?tags=X&mode=any&limit=N&offset=N&from=ISO&to=ISO`. Returns `block_cost_usd`, `block_cache_read_tokens`, `block_cache_creation_tokens` per turn |
|
|
280
|
+
| GET | `/api/tasks/:name/stats` | Per-tag cost/token breakdown |
|
|
281
|
+
| GET | `/api/tasks/:name/turns` | Paginated turns for a single tag |
|
|
282
|
+
| GET | `/api/turns/:id/block` | Turn block — all turns from a user prompt to the next. Returns `estimated_cost_usd` per turn |
|
|
238
283
|
| GET | `/api/metrics/tokens` | Token time-series from `otel_metrics` |
|
|
239
284
|
| GET | `/api/metrics/cost` | Cost time-series from `otel_metrics` |
|
|
240
285
|
| GET | `/api/metrics/tools` | Tool usage breakdown from `tool_uses` |
|
|
@@ -243,9 +288,64 @@ All served by `hooks/server.ts` on port 7890.
|
|
|
243
288
|
| POST | `/v1/logs` | OTLP logs receiver |
|
|
244
289
|
| POST | `/hook/:event` | Claude Code hook receiver |
|
|
245
290
|
|
|
246
|
-
`/api/sessions` accepts `?limit=N` (default 50, max 500) and `?offset=N`. The response envelope `{ sessions, total, limit, offset }` lets the dashboard implement Load More without a separate count query.
|
|
291
|
+
**Pagination**: `/api/sessions` accepts `?limit=N` (default 50, max 500) and `?offset=N`. The response envelope `{ sessions, total, limit, offset }` lets the dashboard implement Load More without a separate count query.
|
|
292
|
+
|
|
293
|
+
**Time filtering**: endpoints that accept `?from=ISO&to=ISO` filter inclusively. `/api/stats` and `/api/sessions` filter on `sessions.started_at`. `/api/task-groups`, `/api/tasks/stats`, and `/api/tasks/turns` filter on `turns.timestamp`. Both params must be provided together or neither.
|
|
294
|
+
|
|
295
|
+
**Time-series**: `/api/metrics/cost` and `/api/metrics/tokens` accept `?range=7d`, `?range=24h`, or `?from=ISO&to=ISO&step=5m`. Step auto-selects based on range if omitted.
|
|
296
|
+
|
|
297
|
+
**Proportional cost**: all cost fields in task/turn queries use `session_cost * turn_all_tokens / session_all_tokens` (including cache tokens) instead of `turns.cost_usd` which is always 0 from JSONL. The remote API also computes this server-side. Locally defined as `PROPORTIONAL_COST_SQL` in `repo.ts`.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## CLI commands
|
|
302
|
+
|
|
303
|
+
The CLI has been consolidated to 5 top-level commands (plus hidden utilities):
|
|
304
|
+
|
|
305
|
+
| Command | Description |
|
|
306
|
+
|---|---|
|
|
307
|
+
| `zozul serve` | Start the local HTTP server (hooks + OTEL + dashboard + API) |
|
|
308
|
+
| `zozul install` | Configure Claude Code hooks/OTEL, install background service, install git hook |
|
|
309
|
+
| `zozul sync` | Push local SQLite data to remote backend (requires `ZOZUL_API_URL` + `ZOZUL_API_KEY`) |
|
|
310
|
+
| `zozul context [tags...]` | Set or clear active task context tags |
|
|
311
|
+
| `zozul install --status` | Show background service status |
|
|
312
|
+
| `zozul install --restart` | Restart the background service (replaces old `zozul restart`) |
|
|
313
|
+
| `zozul ingest` | Hidden — manually ingest a JSONL file |
|
|
314
|
+
| `zozul db-clean` | Hidden — remove rows with invalid timestamps |
|
|
247
315
|
|
|
248
|
-
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Remote sync
|
|
319
|
+
|
|
320
|
+
`zozul sync` pushes local SQLite data to the remote backend incrementally using watermarks stored in `sync_watermarks`. It syncs three data types:
|
|
321
|
+
|
|
322
|
+
1. **Sessions** — all sessions with new data since last sync (by rowid watermark)
|
|
323
|
+
2. **OTEL metrics** — bulk, batched at 500 rows
|
|
324
|
+
3. **OTEL events** — bulk, batched at 500 rows
|
|
325
|
+
|
|
326
|
+
Each session sync sends the full payload in one request: session row + all turns + tool_uses + task_tags + hook_events. The backend upserts everything atomically.
|
|
327
|
+
|
|
328
|
+
**Configuration** (via `.env` or environment):
|
|
329
|
+
```
|
|
330
|
+
ZOZUL_API_URL=http://... # Backend base URL
|
|
331
|
+
ZOZUL_API_KEY=zozul_... # API key (X-API-Key header)
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Source files**:
|
|
335
|
+
- `src/sync/client.ts` — HTTP client (`ZozulApiClient`)
|
|
336
|
+
- `src/sync/transform.ts` — SQLite row → API payload converters
|
|
337
|
+
- `src/sync/index.ts` — watermark-based incremental sync logic
|
|
338
|
+
|
|
339
|
+
**Getting an API key**: use the admin endpoints on the backend (requires `X-Admin-Key`):
|
|
340
|
+
```bash
|
|
341
|
+
# Create a user
|
|
342
|
+
curl -X POST $BASE/api/v1/admin/users -H "X-Admin-Key: $ADMIN_KEY" \
|
|
343
|
+
-d '{"name": "Your Name", "email": "you@example.com"}'
|
|
344
|
+
|
|
345
|
+
# Generate API key for that user (returns full key once)
|
|
346
|
+
curl -X POST $BASE/api/v1/admin/api-keys -H "X-Admin-Key: $ADMIN_KEY" \
|
|
347
|
+
-d '{"user_id": <id>}'
|
|
348
|
+
```
|
|
249
349
|
|
|
250
350
|
---
|
|
251
351
|
|
|
@@ -258,19 +358,28 @@ Time-series endpoints accept `?range=7d`, `?range=24h`, or `?from=ISO&to=ISO&ste
|
|
|
258
358
|
|
|
259
359
|
The service file bakes in the absolute paths to the node binary (`process.execPath`) and the script (`process.argv[1]` resolved). This makes it nvm-safe but means you need to re-run `zozul install --service` if you upgrade node or move the project.
|
|
260
360
|
|
|
261
|
-
`zozul restart` kills and immediately relaunches the running service (`launchctl kickstart -k` on macOS, `systemctl --user restart` on Linux). Use this after `npm run build` to pick up code changes
|
|
361
|
+
`zozul install --restart` kills and immediately relaunches the running service (`launchctl kickstart -k` on macOS, `systemctl --user restart` on Linux). Use this after `npm run build` to pick up code changes.
|
|
262
362
|
|
|
263
363
|
Logs: `~/.zozul/zozul.log`
|
|
264
364
|
|
|
265
365
|
---
|
|
266
366
|
|
|
367
|
+
## Task context tagging
|
|
368
|
+
|
|
369
|
+
`zozul context "tag1" "tag2"` writes `{ active: string[], set_at: string }` to `~/.zozul/context.json`. Tags are applied during JSONL ingest to all turns whose `timestamp >= set_at`. Context is cleared automatically by a git `post-commit` hook installed by `zozul install` (marker: `# zozul: auto-clear context on commit`). Also auto-cleared when Claude runs `git commit` or `git push` (via PostToolUse hook handler in `server.ts`).
|
|
370
|
+
|
|
371
|
+
Source: `src/context/index.ts` (context read/write), `src/hooks/git.ts` (hook install).
|
|
372
|
+
|
|
373
|
+
**Limitation**: manual discipline required. Tags apply to all turns after `set_at` regardless of whether they're topically related. No retroactive tagging of past sessions.
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
267
377
|
## Known limitations
|
|
268
378
|
|
|
269
379
|
- **No schema migrations**: `db.ts` uses `CREATE TABLE IF NOT EXISTS`. Adding columns to existing tables requires manual SQL or a proper migration system.
|
|
270
380
|
- **JSONL path decoding is lossy**: hyphens in project directory names decode incorrectly. No fix without changes to Claude Code.
|
|
271
381
|
- **OTEL cost history is unrecoverable**: if zozul wasn't running during a session, cost data for that period is permanently lost.
|
|
272
382
|
- **`tool_uses.success` and `tool_uses.duration_ms` are never populated**: the schema has these columns but nothing writes to them yet.
|
|
273
|
-
- **Session filter is client-side only**: the filter input searches loaded sessions; Load More fetches additional pages.
|
|
274
383
|
|
|
275
384
|
---
|
|
276
385
|
|
|
@@ -283,6 +392,8 @@ npm run build # Compile TypeScript + copy index.html to dist/
|
|
|
283
392
|
npm test # Run vitest
|
|
284
393
|
```
|
|
285
394
|
|
|
286
|
-
When the service is installed, it runs `dist/index.js` directly. After code changes: `npm run build && zozul restart`.
|
|
395
|
+
When the service is installed, it runs `dist/index.js` directly. After code changes: `npm run build && zozul install --restart`.
|
|
287
396
|
|
|
288
397
|
The DB is at `~/.zozul/zozul.db`. Use `sqlite3 ~/.zozul/zozul.db` for ad-hoc inspection. Use `zozul db-clean` to remove rows with invalid timestamps.
|
|
398
|
+
|
|
399
|
+
For sync, set `ZOZUL_API_URL` and `ZOZUL_API_KEY` in `.env`, then `npm run dev -- sync --verbose` (or `zozul sync --verbose` if built).
|
package/README.md
CHANGED
|
@@ -42,13 +42,16 @@ open http://localhost:7890/dashboard
|
|
|
42
42
|
|
|
43
43
|
`http://localhost:7890/dashboard`
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
50
|
-
- **Sessions
|
|
51
|
-
|
|
45
|
+
Four views, all with time window filtering (7d / 30d / All):
|
|
46
|
+
|
|
47
|
+
- **Summary** — total cost, sessions, and tasks at a glance; 30-day cost chart; cost breakdown by project
|
|
48
|
+
- **Tasks** — groups turns by tag combination (e.g. `[API] [Backend] [DB]`), shows process time, cost, and human interventions per group; click to drill into individual turns
|
|
49
|
+
- **Tags** — per-tag stats with drill-down into paginated turns and per-prompt cost
|
|
50
|
+
- **Sessions** — sortable, filterable, paginated session table; click any session for the full conversation with per-turn token counts and expandable tool call inputs/outputs
|
|
51
|
+
|
|
52
|
+
The dashboard auto-detects whether a remote backend is available (via health check) and falls back to the local API transparently. A badge in the header shows "Remote" or "Local".
|
|
53
|
+
|
|
54
|
+
Auto-refresh polls every 10s on the active view.
|
|
52
55
|
|
|
53
56
|
## Commands
|
|
54
57
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,QAAQ,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,QAAQ,IAAI,OAAO,CAwTlC"}
|
package/dist/cli/commands.js
CHANGED
|
@@ -42,7 +42,10 @@ export function buildCli() {
|
|
|
42
42
|
const verbose = opts.verbose || envVerbose();
|
|
43
43
|
const db = getDb(envDbPath());
|
|
44
44
|
const repo = new SessionRepo(db);
|
|
45
|
-
const
|
|
45
|
+
const apiUrl = process.env.ZOZUL_API_URL;
|
|
46
|
+
const apiKey = process.env.ZOZUL_API_KEY;
|
|
47
|
+
const syncClient = apiUrl && apiKey ? new ZozulApiClient({ apiUrl, apiKey }) : undefined;
|
|
48
|
+
const server = createHookServer({ port, repo, verbose, syncClient });
|
|
46
49
|
server.on("error", (err) => {
|
|
47
50
|
if (err.code === "EADDRINUSE") {
|
|
48
51
|
console.error(`Port ${port} is already in use. Is zozul already running?`);
|
|
@@ -60,6 +63,12 @@ export function buildCli() {
|
|
|
60
63
|
console.log(` API: http://localhost:${port}/api/*`);
|
|
61
64
|
console.log("\nPress Ctrl+C to stop.\n");
|
|
62
65
|
const stopWatcher = await watchSessionFiles({ repo, verbose, catchUp: true });
|
|
66
|
+
// Catch-up sync on start, then sync after every Stop/SessionEnd (wired in server)
|
|
67
|
+
if (syncClient) {
|
|
68
|
+
if (verbose)
|
|
69
|
+
console.log(" Remote sync: enabled");
|
|
70
|
+
runSync(repo, syncClient, { verbose }).catch(() => { });
|
|
71
|
+
}
|
|
63
72
|
process.on("SIGINT", () => {
|
|
64
73
|
stopWatcher();
|
|
65
74
|
server.close();
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/dashboard/html.d.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
/** Local-only dashboard (no remote
|
|
1
|
+
/** Local-only dashboard (no remote config). */
|
|
2
2
|
export declare function dashboardHtml(): string;
|
|
3
3
|
/**
|
|
4
|
-
* Dashboard with
|
|
5
|
-
*
|
|
6
|
-
* and
|
|
7
|
-
* `mode` sets the initial active source.
|
|
4
|
+
* Dashboard with remote API config injected for auto-fallback.
|
|
5
|
+
* The dashboard auto-detects whether remote is available (health check)
|
|
6
|
+
* and falls back to local if not.
|
|
8
7
|
*/
|
|
9
8
|
export declare function dashboardHtmlWithToggle(remote: {
|
|
10
9
|
apiUrl: string;
|
|
11
10
|
apiKey: string;
|
|
12
|
-
},
|
|
11
|
+
}, _mode?: "local" | "remote"): string;
|
|
13
12
|
/**
|
|
14
13
|
* Remote-only dashboard (no local API available).
|
|
15
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAUA,+CAA+C;AAC/C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAUA,+CAA+C;AAC/C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,GAAE,OAAO,GAAG,QAAkB,GAAG,MAAM,CAe/H;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1E"}
|
package/dist/dashboard/html.js
CHANGED
|
@@ -5,69 +5,26 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
5
5
|
function rawHtml() {
|
|
6
6
|
return readFileSync(join(__dirname, "index.html"), "utf-8");
|
|
7
7
|
}
|
|
8
|
-
/** Local-only dashboard (no remote
|
|
8
|
+
/** Local-only dashboard (no remote config). */
|
|
9
9
|
export function dashboardHtml() {
|
|
10
10
|
return rawHtml();
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Dashboard with
|
|
14
|
-
*
|
|
15
|
-
* and
|
|
16
|
-
* `mode` sets the initial active source.
|
|
13
|
+
* Dashboard with remote API config injected for auto-fallback.
|
|
14
|
+
* The dashboard auto-detects whether remote is available (health check)
|
|
15
|
+
* and falls back to local if not.
|
|
17
16
|
*/
|
|
18
|
-
export function dashboardHtmlWithToggle(remote,
|
|
17
|
+
export function dashboardHtmlWithToggle(remote, _mode = "local") {
|
|
19
18
|
const baseUrl = remote.apiUrl.replace(/\/+$/, "") + "/api/v1";
|
|
20
19
|
let html = rawHtml();
|
|
21
20
|
const configScript = `
|
|
22
21
|
<script>
|
|
23
22
|
const ZOZUL_CONFIG = {
|
|
24
23
|
remote: { baseUrl: ${JSON.stringify(baseUrl)}, apiKey: ${JSON.stringify(remote.apiKey)} },
|
|
25
|
-
mode: ${JSON.stringify(mode)},
|
|
26
24
|
};
|
|
27
25
|
</script>`;
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
html = html.replace(`async function fetchJson(path) {\n const res = await fetch(path);\n if (!res.ok) throw new Error(res.status + ' ' + path);\n return res.json();\n}`, `async function fetchJson(path) {
|
|
31
|
-
if (ZOZUL_CONFIG && ZOZUL_CONFIG.mode === 'remote') {
|
|
32
|
-
const url = ZOZUL_CONFIG.remote.baseUrl + path.replace('/api/', '/');
|
|
33
|
-
const res = await fetch(url, { headers: { 'X-API-Key': ZOZUL_CONFIG.remote.apiKey } });
|
|
34
|
-
if (!res.ok) throw new Error(res.status + ' ' + url);
|
|
35
|
-
return res.json();
|
|
36
|
-
}
|
|
37
|
-
const res = await fetch(path);
|
|
38
|
-
if (!res.ok) throw new Error(res.status + ' ' + path);
|
|
39
|
-
return res.json();
|
|
40
|
-
}`);
|
|
41
|
-
// Inject toggle button into the header-right div
|
|
42
|
-
const toggleHtml = `
|
|
43
|
-
<div style="display:flex;border:1px solid var(--border);border-radius:6px;overflow:hidden;font-size:12px">
|
|
44
|
-
<button id="src-local" onclick="switchSource('local')"
|
|
45
|
-
style="padding:4px 12px;border:none;cursor:pointer;font-size:12px;font-family:inherit;transition:all 0.15s">Local</button>
|
|
46
|
-
<button id="src-remote" onclick="switchSource('remote')"
|
|
47
|
-
style="padding:4px 12px;border:none;cursor:pointer;font-size:12px;font-family:inherit;transition:all 0.15s">Remote</button>
|
|
48
|
-
</div>`;
|
|
49
|
-
html = html.replace('<div class="header-right">', '<div class="header-right">' + toggleHtml);
|
|
50
|
-
// Inject switchSource function and initial toggle state
|
|
51
|
-
const switchScript = `
|
|
52
|
-
function switchSource(mode) {
|
|
53
|
-
ZOZUL_CONFIG.mode = mode;
|
|
54
|
-
const local = document.getElementById('src-local');
|
|
55
|
-
const remote = document.getElementById('src-remote');
|
|
56
|
-
const activeStyle = 'background:var(--accent);color:#fff;';
|
|
57
|
-
const inactiveStyle = 'background:var(--surface);color:var(--text-dim);';
|
|
58
|
-
local.style.cssText += (mode === 'local' ? activeStyle : inactiveStyle);
|
|
59
|
-
remote.style.cssText += (mode === 'remote' ? activeStyle : inactiveStyle);
|
|
60
|
-
document.title = 'zozul — ' + (mode === 'local' ? 'Local' : 'Remote') + ' Dashboard';
|
|
61
|
-
loadDashboard();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Set initial toggle state on load
|
|
65
|
-
document.addEventListener('DOMContentLoaded', () => switchSource(ZOZUL_CONFIG.mode));
|
|
66
|
-
`;
|
|
67
|
-
// Must target the top-level bootstrap call (last occurrence), not the one inside manualRefresh()
|
|
68
|
-
const bootstrapCall = "loadDashboard().then(scheduleAutoRefresh);";
|
|
69
|
-
const lastIdx = html.lastIndexOf(bootstrapCall);
|
|
70
|
-
html = html.slice(0, lastIdx) + switchScript + "\n" + bootstrapCall + html.slice(lastIdx + bootstrapCall.length);
|
|
26
|
+
// Inject config before the main script block
|
|
27
|
+
html = html.replace("<script>\n// ── State ──", configScript + "\n<script>\n// ── State ──");
|
|
71
28
|
return html;
|
|
72
29
|
}
|
|
73
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,OAAO;IACd,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,OAAO;IACd,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA0C,EAAE,QAA4B,OAAO;IACrH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;IAC9D,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;IAErB,MAAM,YAAY,GAAG;;;uBAGA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;UAE9E,CAAC;IAET,6CAA6C;IAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,YAAY,GAAG,4BAA4B,CAAC,CAAC;IAE7F,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,MAAc;IAChE,OAAO,uBAAuB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
|