@@ -24,8 +24,11 @@ release this kit. User-facing docs live in [README.md](README.md); this file is
2424
2525### CLI shape (` bin/agentic-kit.mjs ` )
2626
27- - ** Porcelain** (daily): ` setup ` , ` status ` , ` sync ` , ` dashboard ` , ` admin ` , ` dual ` , ` uninstall ` . Bare ` ak ` → ` status --hint ` . (` dashboard ` and ` admin ` are also reachable as ` ak x dashboard ` / ` ak x admin ` .)
28- - ** Plumbing** (power users): ` ak x daemon-gc | mcp | reference | statusline | verify | improvement-eval ` .
27+ - ** Porcelain** (daily): ` setup ` , ` status ` , ` sync ` , ` dashboard ` , ` admin ` , ` usage ` , ` run ` ,
28+ ` host ` , ` uninstall ` . Bare ` ak ` → ` status --hint ` . (` dashboard ` , ` admin ` , and ` host `
29+ are also reachable under ` ak x ` .)
30+ - ** Plumbing** (power users): `ak x admin | daemon-gc | dashboard | harvest | host | mcp |
31+ reference | statusline | verify | improvement-eval`.
2932- Each command module exports ` options ` (a ` parseArgs ` config) and ` run({ flags, positionals, pkgRoot }) ` .
3033- A best-effort drift nudge runs after non-` sync ` , non-` --json ` commands.
3134
@@ -37,9 +40,9 @@ release this kit. User-facing docs live in [README.md](README.md); this file is
3740bin/agentic-kit.mjs # single entrypoint — arg parse + command dispatch (PORCELAIN/PLUMBING maps)
3841src/
3942 commands/ # porcelain verbs
40- setup.mjs status.mjs sync.mjs dual .mjs uninstall.mjs
43+ setup.mjs status.mjs sync.mjs run .mjs uninstall.mjs
4144 x/ # plumbing verbs
42- admin.mjs daemon-gc.mjs dashboard.mjs harvest.mjs mcp .mjs provider .mjs reference.mjs statusline.mjs verify.mjs
45+ admin.mjs daemon-gc.mjs dashboard.mjs harvest.mjs host .mjs mcp .mjs reference.mjs statusline.mjs verify.mjs
4346 lib/ # the engine — each file is one concern
4447 heal.mjs # the mutations sync/setup apply (idempotent, {ok,detail})
4548 natives.mjs # better-sqlite3 / agentdb native detection
6265 admin-model.mjs # PURE admin number model — imports nothing; embedded in the page AND node-tested
6366 admin-view.mjs # admin browser controller (embedded into the page; not node-imported)
6467 browser.mjs # openInBrowser — shared by dashboard + admin
68+ usage-index.mjs # canonical usage aggregation by host, provider, model, project, and category
6569 npx.mjs # stale npx-cache detection/prune
6670 mcp.mjs settings.mjs config.mjs paths.mjs statusline.mjs
6771 rvf.mjs daemons.mjs exec.mjs output.mjs
@@ -80,17 +84,19 @@ docs/
8084```
8185
8286** Published tarball** = the ` files ` whitelist in ` package.json ` :
83- ` bin/agentic-kit.mjs ` , ` src/ ` , ` claude/ ` , ` docs/TROUBLESHOOTING.md ` . Nothing else
84- ships — verify with ` npm pack --dry-run ` before a release if you touch ` files ` .
85-
86- ** Dual-host subsystem** (the ` providers ` /` routing ` /` dual ` cluster): one policy in
87- ` kit.json ` ` providers ` is the source of truth — ` hosts {claude,codex} ` (which are
88- enabled), ` primaryHost ` (which leads; default ` claude ` ), and ` dualRouting ` (the
89- per-activity host+model map). ` routing.mjs ` is pure (defaults, ` seedDualRouting ` ,
90- ` swapRoute ` for codex-primary mirroring, and the projections to aqe ` agentOverrides `
91- + the dual-run config); ` providers.mjs ` does the I/O (host/auth detection, env
92- wiring, both MCP-bridge directions, aqe router file). Seeded/healed by ` setup ` +
93- ` sync ` + ` x provider pick ` , surfaced by ` status ` + ` dashboard ` . Design records:
87+ ` bin/agentic-kit.mjs ` , ` src/ ` , ` claude/ ` , ` docs/TROUBLESHOOTING.md ` ,
88+ ` docs/CODEX-STATUSLINE.md ` , and
89+ ` docs/adr/0015-managed-codex-native-statusline.md ` . Generated workspace state under
90+ the shipped source trees is explicitly excluded. Nothing else ships — verify with
91+ ` npm pack --dry-run ` before a release if you touch ` files ` .
92+
93+ ** Multi-host routing subsystem** (the ` providers ` /` routing ` cluster): durable intent is
94+ split between ` integrations.hosts ` (which hosts are enabled) and top-level ` routing `
95+ (` version ` , ` primaryHost ` , and the per-activity ` routes ` ). ` routing.mjs ` is pure
96+ (defaults, primary-host mirroring, validation, and projections to AQE
97+ ` agentOverrides ` and ` ak run ` ); ` providers.mjs ` does the I/O (host/auth detection,
98+ environment wiring, both MCP-bridge directions, AQE router file). Seeded/healed by
99+ ` setup ` + ` sync ` + ` x host pick ` , surfaced by ` status ` + ` dashboard ` . Design records:
94100ADRs [ 0001–0006] ( docs/adr/ ) ; user guide: ` docs/PROVIDERS.md ` .
95101
96102** Status-line capability is host-specific.** Claude owns a project-scoped,
@@ -190,18 +196,16 @@ Edit a file under `src/`, re-run the CLI, done.
190196## 4. Testing
191197
192198``` bash
193- pnpm test # the full gate — exactly what CI runs
199+ pnpm test # coverage-enforced unit + renderer/server suites
200+ pnpm run check # release gate: typecheck, lint, markdown, build/package, tests
194201```
195202
196- That expands to:
197-
198- ``` bash
199- node --test " tests/kit/*.test.mjs" && node tests/statusline-segments.test.cjs
200- ```
201-
202- - ` tests/kit/*.test.mjs ` — ` node:test ` unit suites (blocks, natives, settings-config, versions). ** 32 tests.**
203- - ` tests/statusline-segments.test.cjs ` — statusline footer renderer. ** 20 tests.**
204- - ** 52 total, 0 failures = release-ready.**
203+ - ` tests/kit/*.test.mjs ` — the broad ` node:test ` suite, run with 70% line, branch, and
204+ function coverage floors.
205+ - Eight ` .cjs ` suites exercise statusline rendering, Brain display, AgentDB,
206+ health history, harvest, dashboard, and admin behavior.
207+ - ` pnpm run build ` validates the CLI load and dry-run package manifest, including
208+ forbidden generated/private paths.
205209
206210Run one suite while iterating: ` node --test tests/kit/versions.test.mjs ` .
207211
0 commit comments