daimon 0.9.0 → 0.10.0
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/CHANGELOG.md +83 -0
- package/dist/cli.js +98 -88
- package/dist/dashboard/browser/chunk-2LMH5KDX.js +5 -0
- package/dist/dashboard/browser/{chunk-6Z4FDREI.js → chunk-2QORICNU.js} +1 -1
- package/dist/dashboard/browser/{chunk-UUJWPV5O.js → chunk-36JZZZCV.js} +1 -1
- package/dist/dashboard/browser/{chunk-4KVYA2AQ.js → chunk-3S7OJ77P.js} +1 -1
- package/dist/dashboard/browser/{chunk-TGSV7ZHM.js → chunk-42QQHEGP.js} +1 -1
- package/dist/dashboard/browser/chunk-4L223A7A.js +1 -0
- package/dist/dashboard/browser/{chunk-EBGPIJ7S.js → chunk-532NB4ME.js} +1 -1
- package/dist/dashboard/browser/{chunk-X4RGWMLE.js → chunk-6CP6NCA6.js} +2 -2
- package/dist/dashboard/browser/chunk-6OMBXV4F.js +1 -0
- package/dist/dashboard/browser/chunk-6YXOOFGY.js +1 -0
- package/dist/dashboard/browser/{chunk-VMW35ZNT.js → chunk-AHO3BCLI.js} +1 -1
- package/dist/dashboard/browser/{chunk-CIQNXWDY.js → chunk-ASK7FG27.js} +1 -1
- package/dist/dashboard/browser/{chunk-AGN2F6JP.js → chunk-BCGQJHY3.js} +1 -1
- package/dist/dashboard/browser/{chunk-ACPSBF55.js → chunk-BDTAVYPH.js} +1 -1
- package/dist/dashboard/browser/{chunk-FZLMX6EY.js → chunk-BFBXHJEF.js} +1 -1
- package/dist/dashboard/browser/{chunk-B2DPS6BL.js → chunk-BKYXU3OY.js} +1 -1
- package/dist/dashboard/browser/{chunk-UC7AWK4C.js → chunk-BPUIUSAU.js} +1 -1
- package/dist/dashboard/browser/{chunk-6MTVWBQQ.js → chunk-C6SNIY22.js} +1 -1
- package/dist/dashboard/browser/{chunk-3ZFFKHPU.js → chunk-CCRYWDXZ.js} +1 -1
- package/dist/dashboard/browser/{chunk-JWXROQJJ.js → chunk-DNHNU64I.js} +1 -1
- package/dist/dashboard/browser/{chunk-FRKUCFVI.js → chunk-DRBVSI3B.js} +1 -1
- package/dist/dashboard/browser/{chunk-RNUJZTKS.js → chunk-EXOJOB6H.js} +2 -2
- package/dist/dashboard/browser/chunk-EYOED3X7.js +2 -0
- package/dist/dashboard/browser/{chunk-3EPFSBJ2.js → chunk-G3IBZZQH.js} +1 -1
- package/dist/dashboard/browser/chunk-H3HRZLHG.js +4 -0
- package/dist/dashboard/browser/chunk-H5GKWN4K.js +1 -0
- package/dist/dashboard/browser/{chunk-KRC72WWY.js → chunk-HVK4GEK7.js} +1 -1
- package/dist/dashboard/browser/{chunk-7LKM244H.js → chunk-HYIZY5FQ.js} +1 -1
- package/dist/dashboard/browser/chunk-ITSOVQEA.js +1 -0
- package/dist/dashboard/browser/{chunk-WOMCRDMJ.js → chunk-JODWQVMA.js} +1 -1
- package/dist/dashboard/browser/chunk-LAMOHX23.js +1 -0
- package/dist/dashboard/browser/chunk-NMKAKRON.js +1 -0
- package/dist/dashboard/browser/{chunk-F3FCHBFQ.js → chunk-NY5IR366.js} +1 -1
- package/dist/dashboard/browser/{chunk-NVL5HFLU.js → chunk-OOQPWG6B.js} +1 -1
- package/dist/dashboard/browser/{chunk-SR4HVFOB.js → chunk-P3Q7RWT5.js} +1 -1
- package/dist/dashboard/browser/{chunk-YHBNUNU3.js → chunk-PVPELZPO.js} +1 -1
- package/dist/dashboard/browser/{chunk-66VYPESU.js → chunk-QHXOUNPA.js} +1 -1
- package/dist/dashboard/browser/{chunk-VHALTUPL.js → chunk-RMV7CR6Y.js} +1 -1
- package/dist/dashboard/browser/chunk-RQSDQXNY.js +1 -0
- package/dist/dashboard/browser/chunk-RWX5JIT4.js +1 -0
- package/dist/dashboard/browser/{chunk-R7VSXL63.js → chunk-SXE7REUK.js} +1 -1
- package/dist/dashboard/browser/chunk-TLCLILNG.js +4 -0
- package/dist/dashboard/browser/chunk-UAIWZYHN.js +1 -0
- package/dist/dashboard/browser/chunk-UFTWVSEC.js +2 -0
- package/dist/dashboard/browser/{chunk-RWXAGDGT.js → chunk-UXLEE3F2.js} +1 -1
- package/dist/dashboard/browser/{chunk-K6PUQAFE.js → chunk-XPP3TYS2.js} +1 -1
- package/dist/dashboard/browser/{chunk-PRLUGTKR.js → chunk-YFYMS5EE.js} +1 -1
- package/dist/dashboard/browser/chunk-YPVVBWNF.js +1 -0
- package/dist/dashboard/browser/{chunk-BBTQXZIS.js → chunk-Z3XFJOYG.js} +1 -1
- package/dist/dashboard/browser/index.html +2 -2
- package/dist/dashboard/browser/main-EENULCI5.js +1 -0
- package/dist/main.js +55 -51
- package/dist/mcp.js +3 -3
- package/package.json +4 -2
- package/dist/dashboard/browser/chunk-55AO3FMG.js +0 -1
- package/dist/dashboard/browser/chunk-FD3BW2ZN.js +0 -1
- package/dist/dashboard/browser/chunk-GMEW64AS.js +0 -1
- package/dist/dashboard/browser/chunk-HXX2OUOE.js +0 -1
- package/dist/dashboard/browser/chunk-HZNVO3JE.js +0 -1
- package/dist/dashboard/browser/chunk-K2SFF47Z.js +0 -5
- package/dist/dashboard/browser/chunk-K5WKBG55.js +0 -1
- package/dist/dashboard/browser/chunk-LBWOIG7N.js +0 -5
- package/dist/dashboard/browser/chunk-O76B43BY.js +0 -4
- package/dist/dashboard/browser/chunk-QYIYT4YU.js +0 -1
- package/dist/dashboard/browser/chunk-RXOAYCKI.js +0 -2
- package/dist/dashboard/browser/chunk-WRX32YWH.js +0 -1
- package/dist/dashboard/browser/main-YAROJLJV.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,89 @@ All notable changes to Daimon are documented here. The format follows [Keep a Ch
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.0] — 2026-05-22
|
|
8
|
+
|
|
9
|
+
Strategic theme: **Mature & Aware.** The biggest release yet. 11 milestones (M54–M64) covering perf at scale, recovery hardening, agent identity, pattern detection, predictive UX, webhooks, a VS Code extension, and a generated docs site.
|
|
10
|
+
|
|
11
|
+
### Added (M54) — Perf at scale (50 apps / 100K events)
|
|
12
|
+
|
|
13
|
+
- `test/perf-50apps.test.mjs` bench: 50 synthetic apps, 100k events, 30-day retention. Asserts hot-path budgets: events query p95 < 250ms, timeline 24h < 300ms, 50× summary doctor pass < 500ms, SSE catchup < 1s, RSS < 150MB.
|
|
14
|
+
- New `events_app_ts` SQLite index for the (app, ts) lookup pattern that powers `/api/apps?cwd=` + per-app timeline.
|
|
15
|
+
|
|
16
|
+
### Added (M55) — Recovery hardening
|
|
17
|
+
|
|
18
|
+
- History.db auto-rebuild on startup: `PRAGMA integrity_check` runs at open time; on failure the bad file is renamed `history.db.corrupt-<ts>` and a fresh db is created. Surface flows through to `daimon doctor` so the user can decide whether to delete the snapshot.
|
|
19
|
+
- WAL checkpoint on close: `PRAGMA wal_checkpoint(TRUNCATE)` runs during shutdown to keep `-wal` sidecars from ballooning across SIGKILL cycles.
|
|
20
|
+
- New doctor rule `history-db-healthy` — reports any archived `.corrupt-*` snapshots left behind by previous startups.
|
|
21
|
+
|
|
22
|
+
### Added (M56) — Tests to 200+ under 30s
|
|
23
|
+
|
|
24
|
+
- New test files: `agents.test.mjs`, `audit.test.mjs`, `regressions.test.mjs`, `webhooks.test.mjs`, `recovery.test.mjs`, `perf-50apps.test.mjs`, `history-property.test.mjs`, `scope-property.test.mjs`, `mcp-contract.test.mjs`.
|
|
25
|
+
- Suite: **219 tests / 15.2s wall-clock** (up from 130 / 14s in v0.9).
|
|
26
|
+
|
|
27
|
+
### Added (M57) — Docs site + branding
|
|
28
|
+
|
|
29
|
+
- `scripts/build-docs.mjs` → generates `docs/index.html` from the live CLI surface + MCP tool list. Single self-contained HTML, no JS framework.
|
|
30
|
+
- New `CLAUDE.md` — orientation for future agents (where files live, conventions, "things daimon never does").
|
|
31
|
+
- New `npm run build:docs` script.
|
|
32
|
+
|
|
33
|
+
### Added (M58) — Agent identity + handoff (locked decision)
|
|
34
|
+
|
|
35
|
+
- `src/agents.ts`: `generateAgentId()` returns `<host>-<pid>-<rand4>`; `AgentRegistry` tracks who's calling (active = touched within 5 min); `LockManager` enforces 30-second per-app soft-locks.
|
|
36
|
+
- Audit log gains a **6th column** (agent id). `parseAuditLine()` exposed for tooling; legacy 5-col rows still parse.
|
|
37
|
+
- New endpoints: `GET /api/agents`, `GET /api/apps/<n>/lock`, `POST /api/apps/<n>/handoff`.
|
|
38
|
+
- `start`/`stop`/`restart` now return HTTP 409 `locked-by-other-agent` when another agent holds the soft-lock. Pass `?steal=1` to override.
|
|
39
|
+
- CLI: every call ships `X-Daimon-Agent`. New `daimon agents` and `daimon handoff <app> <agentId>` verbs. `--steal` on lifecycle verbs.
|
|
40
|
+
- MCP forwards `X-Daimon-Agent` and `X-Daimon-Cwd` on every request.
|
|
41
|
+
|
|
42
|
+
### Added (M59) — MCP expansion + who's watching
|
|
43
|
+
|
|
44
|
+
- New MCP tools: `daimon_who_owns`, `daimon_subscribe_events`, `daimon_notify_on_error`.
|
|
45
|
+
- Per-app lock + recent-interaction list queryable via `/api/apps/<n>/lock`.
|
|
46
|
+
- New dashboard `/agents` route: live list of every agent touching this daemon with per-agent cards showing call counts, last-seen, cwd, and the apps each agent currently holds. Orphan-lock surface lists locks held by agents that have gone inactive. Chord `g g` jumps straight to it; the help dialog and command palette pick it up automatically.
|
|
47
|
+
|
|
48
|
+
### Added (M60) — Pattern detection
|
|
49
|
+
|
|
50
|
+
- New event type `regression-detected` with structured payload `{ kind, factor, baseline, current, suspectCommit }`.
|
|
51
|
+
- Compile-time: factor 2.0 vs rolling median of last 20 successful compiles.
|
|
52
|
+
- Bundle: 10% initialKB growth vs the previous baseline.
|
|
53
|
+
- Error-flap: ≥5 errors/hour AND ≥3× the 23h-prior baseline.
|
|
54
|
+
- Suspect-commit hint pulled via `git log -1 --format=%h:%s` (best-effort; null on non-git workspaces).
|
|
55
|
+
- New dashboard `/regressions` route: filterable cards (all / compile / bundle / error-flap) showing baseline-vs-current, factor, fingerprint, and suspect-commit. Live-updates from the SSE stream and seeds from `/api/history/events?type=regression-detected`. Chord `g r`.
|
|
56
|
+
|
|
57
|
+
### Added (M61) — Predictive UX (ready-time)
|
|
58
|
+
|
|
59
|
+
- `AppSummary.estimatedReadyAtMs` projected from p50 of last 10 compiles during `compiling` state. Surfaced in compact CLI status and MCP `get_status` payloads.
|
|
60
|
+
- `daimon profiles suggest` CLI verb backed by `GET /api/profiles/suggest`. Sweeps the last 30d of `status → starting` events into co-start sessions (60s windows), counts canonical app-sets, and emits suggestions for clusters seen ≥5 times that don't already match an existing profile. Each suggestion carries a name, app list, occurrence count, last-seen, and reason string. `--since` and `--min` flags tune the window.
|
|
61
|
+
- `smart-restart-tune` doctor rule. Scans the last 7d of `status` events for non-stopped→starting transitions per app; flags any app restarting ≥5×/day with `restartPolicy` review guidance.
|
|
62
|
+
|
|
63
|
+
### Added (M62) — VS Code extension
|
|
64
|
+
|
|
65
|
+
- New `vscode-extension/` subpackage. Marketplace name `flycotech.daimon`.
|
|
66
|
+
- Features: status bar (cwd app health), errors sidebar (cwd-filtered, click-to-open), commands `Daimon: Start / Stop / Open dashboard / Show logs`, soft-lock-aware Start (offers to steal on 409).
|
|
67
|
+
- New root `npm run build:vscode` script (delegates to `vscode-extension` after `npm install`).
|
|
68
|
+
- `.vsix` built: `vscode-extension/daimon-vscode.vsix` (7.85 KB). LICENSE bundled. Ready for `vsce publish` to the marketplace.
|
|
69
|
+
|
|
70
|
+
### Added (M63) — Webhooks + CI verb
|
|
71
|
+
|
|
72
|
+
- New top-level config key `webhooks: WebhookEntry[]`.
|
|
73
|
+
- `WebhookDispatcher` subscribes to registry events, filters per-config, shapes payloads per host (Slack `attachments`, Discord `embeds`, generic envelope otherwise), and posts with up to 3 retries + exponential backoff. Global budget 1 req/sec, drop-oldest on overflow.
|
|
74
|
+
- New CLI verb `daimon ci start <profile> --until ready|healthy --timeout <duration> [--json]`. Exit code 0 on full success, 2 on timeout, 1 on unknown profile.
|
|
75
|
+
|
|
76
|
+
### Added (M64) — Polish + ship
|
|
77
|
+
|
|
78
|
+
- Help dialog automatically picks up new chords (`agents`, `handoff`, `ci`, `--steal`) from `cliSurface.ts`. Two new chord entries surfaced: `g g` (Agents), `g r` (Regressions), `g i` (Timeline).
|
|
79
|
+
- Playwright drive landed at `dashboard/e2e/dashboard.spec.ts`. Visits 13 routes (all existing + new `/agents`, `/regressions`), asserts page-specific landmarks, enforces a console-error budget, and verifies the `g g` / `g r` chord routing. Seed helper at `dashboard/e2e/seed.ts` writes 6 fixture events (≥1 serving, ≥1 error, ≥2 regressions). Run with `npm run e2e:install && npm run e2e:seed && npm run e2e` from `dashboard/`.
|
|
80
|
+
- Doctor 11-rule UI tightening carry-over from v0.9.
|
|
81
|
+
- `RELEASE-v0.10.0.md` with migration steps for the audit-column add and webhooks config.
|
|
82
|
+
- Test suite now at 225 / 17.0s (added 6 profile-suggester / restart-cadence tests).
|
|
83
|
+
|
|
84
|
+
### Migration
|
|
85
|
+
|
|
86
|
+
- Audit log gains a 6th column (agent). 5-column rows still parse.
|
|
87
|
+
- New `webhooks: []` config key. Default is the empty array — no outbound deliveries unless you opt in.
|
|
88
|
+
- HTTP 409 `locked-by-other-agent` is a new response code for lifecycle endpoints. Old CLIs (no `X-Daimon-Agent` header) get `agentId = 'unknown'` and never collide with named agents.
|
|
89
|
+
|
|
7
90
|
## [0.9.0] — 2026-05-21
|
|
8
91
|
|
|
9
92
|
Strategic theme: **Multi-agent observability.** v0.9 finishes the pivot to many agents on one machine, each in their own workspace, all sharing one daemon and one dashboard. On top of the architectural shift, deepen what daimon *sees* (lint findings as a third signal class beyond errors + warnings) and *shows* (a unified event timeline), and broaden what it *understands* (framework-aware health probes for the polyglot stack landed in v0.7).
|