@iowarp/clio-coder 0.3.0 → 0.3.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/CHANGELOG.md +33 -0
- package/README.md +50 -53
- package/dist/acp-FPR54DGL.js +138 -0
- package/dist/{agents-Q4MYPMUW.js → agents-OGPIHPJH.js} +33 -25
- package/dist/assets/codewiki.json +1 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
- package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
- package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/{auth-O6HYIJ6J.js → auth-IC3K6NIZ.js} +22 -15
- package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
- package/dist/chunk-3I7MS7N2.js +40 -0
- package/dist/chunk-3R73A4XB.js +69 -0
- package/dist/{chunk-26BZQOAD.js → chunk-474KN5II.js} +86 -115
- package/dist/{chunk-NI4DEJMC.js → chunk-4QKXUHSR.js} +26 -3
- package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
- package/dist/{chunk-TFSSEXL6.js → chunk-673JJUWJ.js} +14 -4
- package/dist/{chunk-GNGDQYDU.js → chunk-7SS2CTV2.js} +27922 -1249
- package/dist/{chunk-7RBKDI66.js → chunk-ASND7OZK.js} +104 -12
- package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
- package/dist/{chunk-RQDWMVRB.js → chunk-BSU2YIWB.js} +9 -3
- package/dist/{chunk-CLJ5HLUD.js → chunk-C4PTHK7P.js} +24 -5
- package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
- package/dist/{chunk-BYEU76JP.js → chunk-DKGKUHFA.js} +34 -9
- package/dist/chunk-EYOKLTMF.js +170 -0
- package/dist/{chunk-PS4PFJQP.js → chunk-FCIH3BIZ.js} +15258 -14130
- package/dist/{chunk-2J63S4SF.js → chunk-FST4FYJB.js} +82 -14
- package/dist/{chunk-3DANZDGR.js → chunk-G34LV2PF.js} +34 -9
- package/dist/{chunk-BBUH4VAA.js → chunk-GAEBEQVI.js} +34 -21
- package/dist/chunk-GB6QRBXN.js +8543 -0
- package/dist/chunk-GEP36Y4X.js +12796 -0
- package/dist/{chunk-TKHQ4DGZ.js → chunk-H6F6BYOH.js} +496 -121
- package/dist/{chunk-UGYAX5YI.js → chunk-HQQID6OA.js} +10 -5
- package/dist/chunk-IHXBNWMM.js +137 -0
- package/dist/{chunk-ME6DNWIU.js → chunk-IS3ONKU3.js} +7 -1
- package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
- package/dist/chunk-K2ITRMHZ.js +642 -0
- package/dist/{chunk-KBR4MZZR.js → chunk-K5XEMXTI.js} +7 -1
- package/dist/{chunk-AMFR5YA3.js → chunk-KKNLWXI6.js} +24 -10
- package/dist/{chunk-JWHCJDCI.js → chunk-KY56HMHH.js} +145 -61
- package/dist/{chunk-E3NYWENM.js → chunk-LU4TK2PR.js} +52 -7
- package/dist/{chunk-UWIJNAOB.js → chunk-M5T5VO65.js} +109 -42
- package/dist/{chunk-JPOWPFCU.js → chunk-MAR7Y6HW.js} +38 -16
- package/dist/chunk-N6F52NLF.js +6951 -0
- package/dist/{chunk-UHTSULZS.js → chunk-NMOX6HFD.js} +20 -7
- package/dist/{chunk-WD6AJM35.js → chunk-OLBBMFRD.js} +30 -13
- package/dist/{chunk-VOO7NYPP.js → chunk-PFEFKVGL.js} +22 -6
- package/dist/{chunk-6CWDTGUC.js → chunk-PIUMUEMV.js} +7 -1
- package/dist/chunk-PV4JUBVJ.js +462 -0
- package/dist/{chunk-527KG6XR.js → chunk-Q3RUPKEJ.js} +22 -4
- package/dist/{chunk-D5YD55AR.js → chunk-Q5WJOSJ7.js} +11 -1
- package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
- package/dist/{chunk-4UQA7NCT.js → chunk-R5KLMSBV.js} +7 -2
- package/dist/{chunk-PIDUD6M2.js → chunk-RDLVBZEO.js} +11 -6
- package/dist/{chunk-O4EJEDHO.js → chunk-RPTR2H26.js} +40 -31
- package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
- package/dist/{chunk-XNISANGE.js → chunk-TEKV33Q5.js} +122 -57
- package/dist/chunk-TXOTCRLG.js +15 -0
- package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
- package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
- package/dist/{chunk-UU3R62TT.js → chunk-XYWBQRDM.js} +13 -4
- package/dist/{chunk-7BHLZB3A.js → chunk-ZPY3JZ5E.js} +32 -10
- package/dist/cli/index.js +39 -33
- package/dist/clio-BZVGEUFJ.js +58 -0
- package/dist/{components-JVHMUBEB.js → components-DMAOEKFB.js} +26 -9
- package/dist/{config-ZFCDBMDC.js → config-IRUQ7SE4.js} +42 -31
- package/dist/configure-S7S6F6CL.js +32 -0
- package/dist/{context-CDXTP2MP.js → context-3KWFLHJG.js} +17 -11
- package/dist/{context-E3KIFVXI.js → context-5RADCKTR.js} +33 -28
- package/dist/{context-clear-3F4PLXOS.js → context-clear-7TSNPAAI.js} +36 -28
- package/dist/{context-index-Q7YSYTR3.js → context-index-W4RLWOQH.js} +10 -4
- package/dist/{docs-YIETIWZI.js → docs-5AWSPS37.js} +16 -10
- package/dist/doctor-UC5NAJYQ.js +77 -0
- package/dist/{eval-B3KZZESM.js → eval-U6TJHRLX.js} +77 -24
- package/dist/{evidence-V67CHM35.js → evidence-YEGUW4L3.js} +34 -26
- package/dist/{evolve-YDZSUQYA.js → evolve-TXARCTPG.js} +39 -26
- package/dist/{extensions-SRG7XCAH.js → extensions-OZFJ3A3G.js} +13 -7
- package/dist/{fleet-CA2CRTVG.js → fleet-6G3DHNYE.js} +45 -37
- package/dist/fleet-preflight-DSNT37JK.js +23 -0
- package/dist/{init-2OZDJE2D.js → init-KZ5QTF6M.js} +42 -34
- package/dist/{memory-3PIQQAKX.js → memory-73ESV5YC.js} +35 -27
- package/dist/{models-DY35XI7Y.js → models-A4PVNWJK.js} +34 -23
- package/dist/{paths-5OMXW7Z4.js → paths-C4H6IV77.js} +12 -6
- package/dist/preload-6WVMHX3A.js +13 -0
- package/dist/{reset-PIFYNOS3.js → reset-BGW6OGMV.js} +17 -11
- package/dist/{run-3VSPP24F.js → run-YTPEYQOH.js} +60 -48
- package/dist/{share-D36RQCXM.js → share-YIFFV4NQ.js} +16 -10
- package/dist/{skills-F2MRLELY.js → skills-2V6RA3OQ.js} +18 -11
- package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-S2TVJO4F.js} +45 -36
- package/dist/{targets-DZMEZAH4.js → targets-TYXLPB23.js} +61 -59
- package/dist/{trace-7NYCUI2J.js → trace-GGOJ6Q6Z.js} +9 -3
- package/dist/{uninstall-AD3JWHBB.js → uninstall-LLLT4F4W.js} +14 -8
- package/dist/{upgrade-WYYBKGDY.js → upgrade-33G2LMM5.js} +45 -23
- package/dist/{usage-ULIDAGFF.js → usage-ZAFSXKKG.js} +35 -27
- package/dist/version-KGEG7EPO.js +21 -0
- package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-NUQCVOQ3.js} +55 -45
- package/dist/worker/entry.js +101 -43
- package/docs/README.md +12 -9
- package/docs/acp.md +28 -5
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +23 -2
- package/docs/artifact-placement.md +101 -0
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +4 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +125 -41
- package/docs/configuration-and-targets.md +88 -18
- package/docs/context-engine.md +6 -2
- package/docs/development-pipeline.md +77 -0
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +3 -3
- package/docs/environment-variables.md +2 -1
- package/docs/eval-runner.md +3 -3
- package/docs/evals-internal.md +2 -2
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +18 -11
- package/docs/fleet-demo-runbook.md +22 -23
- package/docs/fleet-dispatch.md +111 -12
- package/docs/glossary.md +107 -15
- package/docs/html/agents_blueprint.html +3 -3
- package/docs/html/alcf_blueprint.html +3 -3
- package/docs/html/architecture_blueprint.html +3 -3
- package/docs/html/commands_blueprint.html +187 -42
- package/docs/html/configuration_blueprint.html +7 -7
- package/docs/html/context_blueprint.html +3 -3
- package/docs/html/documentation_blueprint.html +1 -1
- package/docs/html/environment_blueprint.html +3 -3
- package/docs/html/eval_blueprint.html +4 -4
- package/docs/html/evals_internal_blueprint.html +3 -3
- package/docs/html/evolution_blueprint.html +3 -3
- package/docs/html/extensions_blueprint.html +3 -3
- package/docs/html/fleet_dispatch_blueprint.html +8 -8
- package/docs/html/index.html +5 -5
- package/docs/html/lifecycle_blueprint.html +4 -4
- package/docs/html/memory_blueprint.html +3 -3
- package/docs/html/middleware_blueprint.html +3 -3
- package/docs/html/models_blueprint.html +2 -2
- package/docs/html/observability_blueprint.html +2 -2
- package/docs/html/provider_adapter_blueprint.html +3 -3
- package/docs/html/safety_blueprint.html +3 -3
- package/docs/html/skills_blueprint.html +2 -2
- package/docs/html/soak_blueprint.html +3 -3
- package/docs/html/tool_usage_blueprint.html +4 -4
- package/docs/html/tools_blueprint.html +2 -2
- package/docs/html/trace_blueprint.html +3 -3
- package/docs/html/tui_design_blueprint.html +100 -40
- package/docs/html/validation_blueprint.html +1 -1
- package/docs/html/worker_dispatch_blueprint.html +3 -3
- package/docs/installation-and-lifecycle.md +62 -11
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +2 -2
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +12 -12
- package/docs/prompt-envelope-and-tools.md +2 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +4 -0
- package/docs/safety-model.md +21 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +2 -2
- package/docs/skills-marketplace.md +1 -1
- package/docs/time-conventions.md +101 -0
- package/docs/tool-usage.md +5 -4
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +83 -27
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +16 -16
- package/skills/README.md +5 -6
- package/skills/git/file-ticket/SKILL.md +107 -0
- package/skills/git/file-ticket/evals.md +54 -0
- package/skills/git/fix-issue/SKILL.md +106 -0
- package/skills/git/fix-issue/evals.md +71 -0
- package/skills/git/ship/SKILL.md +92 -0
- package/skills/git/ship/evals.md +72 -0
- package/skills/skill-marketplace.json +12 -20
- package/src/cli/acp.ts +88 -0
- package/src/cli/agents.ts +60 -0
- package/src/cli/args.ts +280 -0
- package/src/cli/argv.ts +170 -0
- package/src/cli/ask.ts +34 -0
- package/src/cli/auth.ts +468 -0
- package/src/cli/bootstrap-generate.ts +498 -0
- package/src/cli/clio.ts +34 -0
- package/src/cli/components.ts +195 -0
- package/src/cli/config-inspect.ts +330 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/configure-interop.ts +67 -0
- package/src/cli/configure-layout.ts +172 -0
- package/src/cli/configure.ts +1487 -0
- package/src/cli/context-clear.ts +76 -0
- package/src/cli/context-index.ts +102 -0
- package/src/cli/context.ts +316 -0
- package/src/cli/default-target.ts +63 -0
- package/src/cli/docs.ts +340 -0
- package/src/cli/doctor.ts +54 -0
- package/src/cli/eval.ts +315 -0
- package/src/cli/evidence.ts +222 -0
- package/src/cli/evolve.ts +219 -0
- package/src/cli/extensions.ts +205 -0
- package/src/cli/fleet.ts +827 -0
- package/src/cli/index.ts +309 -0
- package/src/cli/init.ts +219 -0
- package/src/cli/initial-message.ts +47 -0
- package/src/cli/internal-dispatch.ts +55 -0
- package/src/cli/memory.ts +180 -0
- package/src/cli/models.ts +257 -0
- package/src/cli/modes/json-stream.ts +85 -0
- package/src/cli/modes/jsonl.ts +9 -0
- package/src/cli/modes/print.ts +589 -0
- package/src/cli/oauth-manual-input.ts +72 -0
- package/src/cli/oauth-select.ts +36 -0
- package/src/cli/output-guard.ts +48 -0
- package/src/cli/paths.ts +44 -0
- package/src/cli/provider-target.ts +113 -0
- package/src/cli/removal.ts +72 -0
- package/src/cli/reset.ts +253 -0
- package/src/cli/run.ts +497 -0
- package/src/cli/share.ts +243 -0
- package/src/cli/shared.ts +60 -0
- package/src/cli/skills-eval.ts +1225 -0
- package/src/cli/skills.ts +470 -0
- package/src/cli/steer-channel.ts +86 -0
- package/src/cli/targets.ts +1150 -0
- package/src/cli/text-layout.ts +102 -0
- package/src/cli/trace.ts +274 -0
- package/src/cli/uninstall.ts +405 -0
- package/src/cli/upgrade.ts +270 -0
- package/src/cli/usage.ts +869 -0
- package/src/cli/validate-model.ts +28 -0
- package/src/cli/version.ts +7 -0
- package/src/cli/wiki-generate.ts +509 -0
- package/src/core/artifact-paths.ts +43 -0
- package/src/core/bash-exec.ts +242 -0
- package/src/core/boot-trace.ts +37 -0
- package/src/core/bus-events.ts +728 -0
- package/src/core/bus-trace.ts +53 -0
- package/src/core/c-header-language.ts +265 -0
- package/src/core/clio-repo.ts +78 -0
- package/src/core/config.ts +1593 -0
- package/src/core/context-floor.ts +33 -0
- package/src/core/defaults.ts +625 -0
- package/src/core/domain-loader.ts +170 -0
- package/src/core/event-bus.ts +94 -0
- package/src/core/file-references.ts +282 -0
- package/src/core/guardrails.ts +185 -0
- package/src/core/headless-permission.ts +21 -0
- package/src/core/init.ts +223 -0
- package/src/core/json-payload.ts +58 -0
- package/src/core/package-root.ts +54 -0
- package/src/core/path-canonical.ts +37 -0
- package/src/core/process-identity.ts +41 -0
- package/src/core/recent-models.ts +91 -0
- package/src/core/release.ts +2 -0
- package/src/core/residency-protection.ts +56 -0
- package/src/core/resolve-config-value.ts +88 -0
- package/src/core/response-schema.ts +279 -0
- package/src/core/run-overrides.ts +77 -0
- package/src/core/safe-exec.ts +193 -0
- package/src/core/safe-id.ts +37 -0
- package/src/core/safe-resource-write.ts +162 -0
- package/src/core/session-routing.ts +339 -0
- package/src/core/settings-layers.ts +220 -0
- package/src/core/shared-bus.ts +8 -0
- package/src/core/shell-quote.ts +26 -0
- package/src/core/skill-activation.ts +190 -0
- package/src/core/startup-timer.ts +37 -0
- package/src/core/state-file-lock.ts +207 -0
- package/src/core/termination.ts +202 -0
- package/src/core/timers.ts +38 -0
- package/src/core/tool-names.ts +65 -0
- package/src/core/verification-scripts.ts +13 -0
- package/src/core/workspace-files.ts +492 -0
- package/src/core/xdg.ts +177 -0
- package/src/domains/agents/builtins/architect.md +4 -4
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +3 -3
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +1 -1
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +172 -0
- package/src/domains/agents/contract.ts +16 -0
- package/src/domains/agents/extension.ts +110 -0
- package/src/domains/agents/fleet-commands.ts +154 -0
- package/src/domains/agents/fleet-contract.ts +797 -0
- package/src/domains/agents/frontmatter.ts +40 -0
- package/src/domains/agents/index.ts +102 -0
- package/src/domains/agents/manifest.ts +6 -0
- package/src/domains/agents/recipe-schema.ts +202 -0
- package/src/domains/agents/recipe.ts +125 -0
- package/src/domains/agents/registry.ts +111 -0
- package/src/domains/agents/result-contract.ts +1265 -0
- package/src/domains/agents/spec.ts +371 -0
- package/src/domains/agents/write-boundary.ts +109 -0
- package/src/domains/components/diff.ts +99 -0
- package/src/domains/components/hash.ts +21 -0
- package/src/domains/components/index.ts +3 -0
- package/src/domains/components/scan.ts +304 -0
- package/src/domains/components/snapshot.ts +108 -0
- package/src/domains/components/types.ts +82 -0
- package/src/domains/config/agent-namespace.ts +13 -0
- package/src/domains/config/classify.ts +94 -0
- package/src/domains/config/contract.ts +22 -0
- package/src/domains/config/extension.ts +136 -0
- package/src/domains/config/index.ts +13 -0
- package/src/domains/config/keybindings.ts +164 -0
- package/src/domains/config/manifest.ts +6 -0
- package/src/domains/config/watcher.ts +41 -0
- package/src/domains/context/adoption.ts +880 -0
- package/src/domains/context/bootstrap-prompt.ts +273 -0
- package/src/domains/context/bootstrap.ts +1409 -0
- package/src/domains/context/clear.ts +86 -0
- package/src/domains/context/clio-md.ts +327 -0
- package/src/domains/context/codewiki/cmake.ts +356 -0
- package/src/domains/context/codewiki/cooperative.ts +46 -0
- package/src/domains/context/codewiki/digest.ts +135 -0
- package/src/domains/context/codewiki/grammar-assets.ts +33 -0
- package/src/domains/context/codewiki/indexer.ts +1614 -0
- package/src/domains/context/codewiki/tree-sitter.ts +771 -0
- package/src/domains/context/contract.ts +62 -0
- package/src/domains/context/excluded-dirs.ts +1 -0
- package/src/domains/context/extension.ts +407 -0
- package/src/domains/context/fingerprint.ts +196 -0
- package/src/domains/context/index.ts +164 -0
- package/src/domains/context/init-options.ts +69 -0
- package/src/domains/context/manifest.ts +6 -0
- package/src/domains/context/operator-profile.ts +157 -0
- package/src/domains/context/project-metadata.ts +510 -0
- package/src/domains/context/project-rules.ts +227 -0
- package/src/domains/context/prompt-context.ts +62 -0
- package/src/domains/context/refresh.ts +170 -0
- package/src/domains/context/sibling-files.ts +10 -0
- package/src/domains/context/state.ts +237 -0
- package/src/domains/context/wiki/assemble.ts +303 -0
- package/src/domains/context/wiki/frontmatter.ts +210 -0
- package/src/domains/context/wiki/generate.ts +590 -0
- package/src/domains/context/wiki/layout.ts +111 -0
- package/src/domains/context/wiki/meta.ts +221 -0
- package/src/domains/context/wiki/plan-store.ts +217 -0
- package/src/domains/context/wiki/plan.ts +250 -0
- package/src/domains/context/wiki/prompts.ts +270 -0
- package/src/domains/context/wiki/staleness.ts +198 -0
- package/src/domains/dispatch/active-route-planner.ts +168 -0
- package/src/domains/dispatch/admission-queue.ts +150 -0
- package/src/domains/dispatch/admission.ts +334 -0
- package/src/domains/dispatch/agent-candidates.ts +307 -0
- package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
- package/src/domains/dispatch/agent-ledger-store.ts +257 -0
- package/src/domains/dispatch/agent-ledger.ts +212 -0
- package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
- package/src/domains/dispatch/assignment-events.ts +132 -0
- package/src/domains/dispatch/assignment-reconcile.ts +76 -0
- package/src/domains/dispatch/assignment-store.ts +162 -0
- package/src/domains/dispatch/assignment.ts +278 -0
- package/src/domains/dispatch/backoff.ts +59 -0
- package/src/domains/dispatch/batch-store.ts +134 -0
- package/src/domains/dispatch/batch-tracker.ts +66 -0
- package/src/domains/dispatch/capability-match.ts +155 -0
- package/src/domains/dispatch/capacity-lease.ts +413 -0
- package/src/domains/dispatch/code-step-store.ts +52 -0
- package/src/domains/dispatch/code-step.ts +368 -0
- package/src/domains/dispatch/contract.ts +278 -0
- package/src/domains/dispatch/dedup.ts +133 -0
- package/src/domains/dispatch/event-pump.ts +251 -0
- package/src/domains/dispatch/execution-handoff.ts +29 -0
- package/src/domains/dispatch/execution-plan.ts +328 -0
- package/src/domains/dispatch/execution-role.ts +277 -0
- package/src/domains/dispatch/execution-scheduler.ts +583 -0
- package/src/domains/dispatch/extension.ts +5869 -0
- package/src/domains/dispatch/failure-classification.ts +141 -0
- package/src/domains/dispatch/fleet-plan.ts +225 -0
- package/src/domains/dispatch/fleet-preflight.ts +394 -0
- package/src/domains/dispatch/gate-decisions.ts +1040 -0
- package/src/domains/dispatch/gate-role-prompts.ts +58 -0
- package/src/domains/dispatch/heartbeat.ts +27 -0
- package/src/domains/dispatch/index.ts +137 -0
- package/src/domains/dispatch/joint-route-adapter.ts +114 -0
- package/src/domains/dispatch/joint-route-resolver.ts +283 -0
- package/src/domains/dispatch/manifest.ts +6 -0
- package/src/domains/dispatch/orphan-recovery.ts +224 -0
- package/src/domains/dispatch/outcome.ts +109 -0
- package/src/domains/dispatch/phase-timing.ts +47 -0
- package/src/domains/dispatch/placement.ts +202 -0
- package/src/domains/dispatch/receipt-findings.ts +255 -0
- package/src/domains/dispatch/receipt-integrity.ts +378 -0
- package/src/domains/dispatch/recovery-candidates.ts +74 -0
- package/src/domains/dispatch/reproducibility.ts +48 -0
- package/src/domains/dispatch/reservation-store.ts +501 -0
- package/src/domains/dispatch/route-approval.ts +177 -0
- package/src/domains/dispatch/route-candidates.ts +57 -0
- package/src/domains/dispatch/route-decision.ts +1079 -0
- package/src/domains/dispatch/route-facts.ts +187 -0
- package/src/domains/dispatch/route-history.ts +238 -0
- package/src/domains/dispatch/route-observer.ts +488 -0
- package/src/domains/dispatch/route-policy.ts +327 -0
- package/src/domains/dispatch/route-quality.ts +256 -0
- package/src/domains/dispatch/route-readiness.ts +120 -0
- package/src/domains/dispatch/routing-intent.ts +287 -0
- package/src/domains/dispatch/run-identity.ts +56 -0
- package/src/domains/dispatch/scout-transition.ts +130 -0
- package/src/domains/dispatch/state.ts +277 -0
- package/src/domains/dispatch/tool-stats.ts +132 -0
- package/src/domains/dispatch/transport.ts +209 -0
- package/src/domains/dispatch/types.ts +785 -0
- package/src/domains/dispatch/validation-grounding.ts +154 -0
- package/src/domains/dispatch/validation.ts +721 -0
- package/src/domains/dispatch/worker-protocol.ts +275 -0
- package/src/domains/dispatch/worker-spawn.ts +566 -0
- package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
- package/src/domains/dispatch/write-boundary.ts +426 -0
- package/src/domains/eval/artifacts/redact.ts +42 -0
- package/src/domains/eval/artifacts/store.ts +173 -0
- package/src/domains/eval/compare/compare.ts +33 -0
- package/src/domains/eval/compare/gates.ts +66 -0
- package/src/domains/eval/compare/thresholds.ts +92 -0
- package/src/domains/eval/harness-metrics.ts +62 -0
- package/src/domains/eval/index.ts +66 -0
- package/src/domains/eval/metrics/chaos-stream.ts +93 -0
- package/src/domains/eval/metrics/context.ts +34 -0
- package/src/domains/eval/metrics/coverage.ts +21 -0
- package/src/domains/eval/metrics/evidence.ts +182 -0
- package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
- package/src/domains/eval/metrics/invariants.ts +736 -0
- package/src/domains/eval/metrics/latency.ts +4 -0
- package/src/domains/eval/metrics/token-stream.ts +139 -0
- package/src/domains/eval/metrics/tokens.ts +51 -0
- package/src/domains/eval/metrics/tool-calls.ts +7 -0
- package/src/domains/eval/proactive-memory.ts +279 -0
- package/src/domains/eval/provenance.ts +35 -0
- package/src/domains/eval/report.ts +234 -0
- package/src/domains/eval/reports/json.ts +5 -0
- package/src/domains/eval/reports/junit.ts +23 -0
- package/src/domains/eval/reports/markdown.ts +20 -0
- package/src/domains/eval/reports/swe-jsonl.ts +16 -0
- package/src/domains/eval/reports/text.ts +25 -0
- package/src/domains/eval/run-compare.ts +274 -0
- package/src/domains/eval/runner.ts +244 -0
- package/src/domains/eval/runners/clio-run.ts +148 -0
- package/src/domains/eval/runners/context-index.ts +56 -0
- package/src/domains/eval/runners/context-init.ts +203 -0
- package/src/domains/eval/runners/external-command.ts +350 -0
- package/src/domains/eval/runtime-paths.ts +171 -0
- package/src/domains/eval/schema/artifact.ts +75 -0
- package/src/domains/eval/schema/suite.ts +235 -0
- package/src/domains/eval/schema/validate.ts +339 -0
- package/src/domains/eval/store.ts +392 -0
- package/src/domains/eval/suites/load.ts +74 -0
- package/src/domains/eval/suites/matrix.ts +19 -0
- package/src/domains/eval/suites/resolve.ts +44 -0
- package/src/domains/eval/suites/run.ts +325 -0
- package/src/domains/eval/task-file.ts +186 -0
- package/src/domains/eval/types.ts +141 -0
- package/src/domains/eval/verifiers/command.ts +27 -0
- package/src/domains/eval/verifiers/file-exists.ts +6 -0
- package/src/domains/eval/verifiers/patch.ts +22 -0
- package/src/domains/eval/workspaces/git.ts +41 -0
- package/src/domains/eval/workspaces/local.ts +17 -0
- package/src/domains/eval/workspaces/temp-copy.ts +29 -0
- package/src/domains/evidence/build.ts +1714 -0
- package/src/domains/evidence/eval.ts +605 -0
- package/src/domains/evidence/failure-attribution.ts +54 -0
- package/src/domains/evidence/finish-contract-map.ts +42 -0
- package/src/domains/evidence/index.ts +55 -0
- package/src/domains/evidence/provenance.ts +200 -0
- package/src/domains/evidence/redact.ts +81 -0
- package/src/domains/evidence/store.ts +291 -0
- package/src/domains/evidence/types.ts +325 -0
- package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
- package/src/domains/evolution/index.ts +26 -0
- package/src/domains/evolution/manifest.ts +154 -0
- package/src/domains/evolution/validate.ts +304 -0
- package/src/domains/extensions/contract.ts +22 -0
- package/src/domains/extensions/discovery.ts +193 -0
- package/src/domains/extensions/extension.ts +46 -0
- package/src/domains/extensions/index.ts +34 -0
- package/src/domains/extensions/manager.ts +30 -0
- package/src/domains/extensions/manifest.ts +6 -0
- package/src/domains/extensions/resources.ts +38 -0
- package/src/domains/extensions/state.ts +224 -0
- package/src/domains/extensions/types.ts +83 -0
- package/src/domains/interop/consent.ts +185 -0
- package/src/domains/interop/contract.ts +29 -0
- package/src/domains/interop/detect.ts +173 -0
- package/src/domains/interop/extension.ts +59 -0
- package/src/domains/interop/index.ts +34 -0
- package/src/domains/interop/manifest.ts +6 -0
- package/src/domains/interop/registry.ts +139 -0
- package/src/domains/interop/state.ts +92 -0
- package/src/domains/interop/types.ts +109 -0
- package/src/domains/lifecycle/contract.ts +11 -0
- package/src/domains/lifecycle/doctor.ts +536 -0
- package/src/domains/lifecycle/extension.ts +23 -0
- package/src/domains/lifecycle/index.ts +21 -0
- package/src/domains/lifecycle/install-method.ts +51 -0
- package/src/domains/lifecycle/manifest.ts +6 -0
- package/src/domains/lifecycle/migrations/index.ts +94 -0
- package/src/domains/lifecycle/state.ts +93 -0
- package/src/domains/lifecycle/upgrade-notice.ts +35 -0
- package/src/domains/lifecycle/version.ts +35 -0
- package/src/domains/memory/index.ts +128 -0
- package/src/domains/memory/operations.ts +143 -0
- package/src/domains/memory/prompt-section.ts +86 -0
- package/src/domains/memory/proposal.ts +180 -0
- package/src/domains/memory/store.ts +163 -0
- package/src/domains/memory/task-bank.ts +229 -0
- package/src/domains/memory/task-memory-handoff.ts +222 -0
- package/src/domains/memory/task-memory-policy.ts +602 -0
- package/src/domains/memory/task-memory-status.ts +58 -0
- package/src/domains/memory/task-memory-telemetry.ts +346 -0
- package/src/domains/memory/task-memory-trace.ts +89 -0
- package/src/domains/memory/types.ts +74 -0
- package/src/domains/memory/validate.ts +297 -0
- package/src/domains/middleware/budget.ts +216 -0
- package/src/domains/middleware/contract.ts +35 -0
- package/src/domains/middleware/dispatch-nudge.ts +469 -0
- package/src/domains/middleware/extension.ts +129 -0
- package/src/domains/middleware/hook-receipts.ts +70 -0
- package/src/domains/middleware/hooks-io.ts +174 -0
- package/src/domains/middleware/hooks.ts +432 -0
- package/src/domains/middleware/index.ts +154 -0
- package/src/domains/middleware/manifest.ts +6 -0
- package/src/domains/middleware/memory-intervention.ts +701 -0
- package/src/domains/middleware/rules.ts +42 -0
- package/src/domains/middleware/runtime.ts +333 -0
- package/src/domains/middleware/skills-reminder.ts +187 -0
- package/src/domains/middleware/snapshot.ts +71 -0
- package/src/domains/middleware/stalled-turn.ts +71 -0
- package/src/domains/middleware/task-board-reminder.ts +87 -0
- package/src/domains/middleware/task-nudge.ts +77 -0
- package/src/domains/middleware/tool-choice-control.ts +42 -0
- package/src/domains/middleware/types.ts +131 -0
- package/src/domains/middleware/validate.ts +329 -0
- package/src/domains/observability/accountability.ts +67 -0
- package/src/domains/observability/contract.ts +168 -0
- package/src/domains/observability/cost.ts +206 -0
- package/src/domains/observability/evidence-index.ts +123 -0
- package/src/domains/observability/extension.ts +281 -0
- package/src/domains/observability/index.ts +78 -0
- package/src/domains/observability/manifest.ts +10 -0
- package/src/domains/observability/metrics.ts +37 -0
- package/src/domains/observability/projection.ts +477 -0
- package/src/domains/observability/telemetry.ts +89 -0
- package/src/domains/observability/trace-store.ts +1454 -0
- package/src/domains/prompts/compiler.ts +556 -0
- package/src/domains/prompts/contract.ts +30 -0
- package/src/domains/prompts/extension.ts +304 -0
- package/src/domains/prompts/fragment-loader.ts +139 -0
- package/src/domains/prompts/fragments/identity/clio.md +3 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +63 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -1
- package/src/domains/prompts/hash.ts +73 -0
- package/src/domains/prompts/index.ts +32 -0
- package/src/domains/prompts/manifest.ts +8 -0
- package/src/domains/prompts/memory-intervention.ts +57 -0
- package/src/domains/prompts/preload.ts +82 -0
- package/src/domains/providers/auth/api-key.ts +47 -0
- package/src/domains/providers/auth/backend-file.ts +69 -0
- package/src/domains/providers/auth/backend-memory.ts +17 -0
- package/src/domains/providers/auth/index.ts +37 -0
- package/src/domains/providers/auth/oauth.ts +36 -0
- package/src/domains/providers/auth/storage.ts +667 -0
- package/src/domains/providers/capabilities.ts +50 -0
- package/src/domains/providers/catalog.ts +162 -0
- package/src/domains/providers/contract.ts +151 -0
- package/src/domains/providers/credentials.ts +20 -0
- package/src/domains/providers/eligibility.ts +24 -0
- package/src/domains/providers/errors.ts +64 -0
- package/src/domains/providers/extension.ts +536 -0
- package/src/domains/providers/index.ts +142 -0
- package/src/domains/providers/knowledge-base-path.ts +102 -0
- package/src/domains/providers/manifest.ts +6 -0
- package/src/domains/providers/model-capabilities.ts +136 -0
- package/src/domains/providers/model-discovery.ts +144 -0
- package/src/domains/providers/model-family.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +712 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +2 -2
- package/src/domains/providers/plugins.ts +59 -0
- package/src/domains/providers/probe/fingerprint.ts +44 -0
- package/src/domains/providers/probe/http.ts +114 -0
- package/src/domains/providers/probe/reasoning.ts +111 -0
- package/src/domains/providers/registry.ts +166 -0
- package/src/domains/providers/resolver.ts +156 -0
- package/src/domains/providers/runtime-resolution.ts +720 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
- package/src/domains/providers/runtimes/builtins.ts +78 -0
- package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
- package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
- package/src/domains/providers/runtimes/claude/common.ts +55 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
- package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
- package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
- package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
- package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
- package/src/domains/providers/runtimes/cloud/google.ts +41 -0
- package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
- package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
- package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +32 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +165 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
- package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
- package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +491 -0
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
- package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
- package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
- package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
- package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
- package/src/domains/providers/runtimes/protocol/google.ts +27 -0
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
- package/src/domains/providers/support.ts +238 -0
- package/src/domains/providers/thinking-control-policy.ts +85 -0
- package/src/domains/providers/types/capability-flags.ts +114 -0
- package/src/domains/providers/types/cost-provenance.ts +7 -0
- package/src/domains/providers/types/inference.ts +41 -0
- package/src/domains/providers/types/knowledge-base.ts +156 -0
- package/src/domains/providers/types/local-model-quirks.ts +218 -0
- package/src/domains/providers/types/runtime-descriptor.ts +170 -0
- package/src/domains/providers/types/target-descriptor.ts +38 -0
- package/src/domains/resources/collision.ts +92 -0
- package/src/domains/resources/common-loader.ts +140 -0
- package/src/domains/resources/contract.ts +25 -0
- package/src/domains/resources/extension.ts +61 -0
- package/src/domains/resources/index.ts +74 -0
- package/src/domains/resources/loader.ts +86 -0
- package/src/domains/resources/manifest.ts +6 -0
- package/src/domains/resources/prompts/loader.ts +232 -0
- package/src/domains/resources/prompts/substitute.ts +65 -0
- package/src/domains/resources/skills/content-hash.ts +105 -0
- package/src/domains/resources/skills/evals.ts +175 -0
- package/src/domains/resources/skills/install.ts +410 -0
- package/src/domains/resources/skills/loader.ts +978 -0
- package/src/domains/resources/skills/marketplace.ts +255 -0
- package/src/domains/resources/skills/provenance-pin.ts +115 -0
- package/src/domains/safety/action-classifier.ts +268 -0
- package/src/domains/safety/approval-axis.ts +23 -0
- package/src/domains/safety/audit.ts +487 -0
- package/src/domains/safety/autonomy.ts +174 -0
- package/src/domains/safety/call-target.ts +59 -0
- package/src/domains/safety/contract.ts +65 -0
- package/src/domains/safety/damage-control.ts +44 -0
- package/src/domains/safety/default-path-policy.ts +117 -0
- package/src/domains/safety/extension.ts +383 -0
- package/src/domains/safety/finish-contract-registration.ts +128 -0
- package/src/domains/safety/finish-contract.ts +554 -0
- package/src/domains/safety/index.ts +44 -0
- package/src/domains/safety/loop-detector.ts +143 -0
- package/src/domains/safety/manifest.ts +6 -0
- package/src/domains/safety/path-policy.ts +164 -0
- package/src/domains/safety/policy-engine.ts +994 -0
- package/src/domains/safety/project-policy.ts +391 -0
- package/src/domains/safety/protected-artifacts-registration.ts +189 -0
- package/src/domains/safety/protected-artifacts.ts +993 -0
- package/src/domains/safety/rejection-feedback.ts +102 -0
- package/src/domains/safety/rigor.ts +72 -0
- package/src/domains/safety/rule-compiler.ts +48 -0
- package/src/domains/safety/rule-pack-loader.ts +92 -0
- package/src/domains/safety/run-effects.ts +197 -0
- package/src/domains/safety/scope.ts +61 -0
- package/src/domains/scheduling/budget.ts +35 -0
- package/src/domains/scheduling/cluster.ts +175 -0
- package/src/domains/scheduling/contract.ts +30 -0
- package/src/domains/scheduling/extension.ts +91 -0
- package/src/domains/scheduling/index.ts +12 -0
- package/src/domains/scheduling/manifest.ts +6 -0
- package/src/domains/session/archive-readers.ts +208 -0
- package/src/domains/session/checkpoint.ts +38 -0
- package/src/domains/session/compaction/auto.ts +89 -0
- package/src/domains/session/compaction/branch-summary.ts +186 -0
- package/src/domains/session/compaction/compact.ts +493 -0
- package/src/domains/session/compaction/cut-point.ts +171 -0
- package/src/domains/session/compaction/defaults.ts +34 -0
- package/src/domains/session/compaction/mask-observations.ts +265 -0
- package/src/domains/session/compaction/session-entries.ts +18 -0
- package/src/domains/session/compaction/tokens.ts +147 -0
- package/src/domains/session/context-accounting.ts +583 -0
- package/src/domains/session/context-ledger.ts +348 -0
- package/src/domains/session/contract.ts +144 -0
- package/src/domains/session/cwd-fallback.ts +65 -0
- package/src/domains/session/entries.ts +509 -0
- package/src/domains/session/extension.ts +322 -0
- package/src/domains/session/history.ts +172 -0
- package/src/domains/session/index.ts +84 -0
- package/src/domains/session/manager.ts +128 -0
- package/src/domains/session/manifest.ts +6 -0
- package/src/domains/session/migrations/index.ts +27 -0
- package/src/domains/session/prompt-manifest.ts +173 -0
- package/src/domains/session/protected-artifact-journal.ts +241 -0
- package/src/domains/session/protected-artifacts.ts +90 -0
- package/src/domains/session/retry.ts +238 -0
- package/src/domains/session/task-board.ts +375 -0
- package/src/domains/session/tree/active-path.ts +98 -0
- package/src/domains/session/tree/fork.ts +160 -0
- package/src/domains/session/tree/manager.ts +128 -0
- package/src/domains/session/tree/navigator.ts +177 -0
- package/src/domains/session/tree/preview.ts +259 -0
- package/src/domains/session/usage.ts +148 -0
- package/src/domains/session/workspace/git-probe.ts +161 -0
- package/src/domains/session/workspace/index.ts +4 -0
- package/src/domains/session/workspace/project-type.ts +217 -0
- package/src/domains/session/workspace/snapshot.ts +74 -0
- package/src/domains/share/archive.ts +684 -0
- package/src/domains/share/contract.ts +9 -0
- package/src/domains/share/extension.ts +26 -0
- package/src/domains/share/index.ts +28 -0
- package/src/domains/share/manifest.ts +6 -0
- package/src/engine/acp/adapter.ts +397 -0
- package/src/engine/acp/errors.ts +32 -0
- package/src/engine/acp/event-mapper.ts +154 -0
- package/src/engine/acp/server.ts +656 -0
- package/src/engine/acp/tool-mediator.ts +686 -0
- package/src/engine/acp/transport.ts +654 -0
- package/src/engine/acp/types.ts +170 -0
- package/src/engine/agent.ts +29 -0
- package/src/engine/ai.ts +202 -0
- package/src/engine/alcf-oauth.ts +198 -0
- package/src/engine/antigravity/subprocess-runtime.ts +205 -0
- package/src/engine/apis/degraded-inference.ts +95 -0
- package/src/engine/apis/index.ts +20 -0
- package/src/engine/apis/llamacpp-residency.ts +252 -0
- package/src/engine/apis/lmstudio-native.ts +1438 -0
- package/src/engine/apis/lmstudio-residency.ts +92 -0
- package/src/engine/apis/ollama-native.ts +507 -0
- package/src/engine/apis/openai-completions.ts +716 -0
- package/src/engine/apis/output-budget.ts +99 -0
- package/src/engine/apis/residency-lock.ts +29 -0
- package/src/engine/apis/residency.ts +640 -0
- package/src/engine/apis/resident-models.ts +42 -0
- package/src/engine/apis/sampling-overrides.ts +38 -0
- package/src/engine/apis/thinking-replay.ts +11 -0
- package/src/engine/claude/sdk-runtime.ts +685 -0
- package/src/engine/claude/session-id.ts +5 -0
- package/src/engine/claude/subprocess-runtime.ts +316 -0
- package/src/engine/claude/tool-safety.ts +400 -0
- package/src/engine/external-subprocess.ts +23 -0
- package/src/engine/harmony-response.ts +165 -0
- package/src/engine/loop-guard.ts +1127 -0
- package/src/engine/oauth.ts +192 -0
- package/src/engine/pi-mono-names.ts +13 -0
- package/src/engine/provider-payload.ts +315 -0
- package/src/engine/select-list.ts +53 -0
- package/src/engine/session.ts +834 -0
- package/src/engine/strip-tokenizer-sentinels.ts +125 -0
- package/src/engine/tui.ts +103 -0
- package/src/engine/types.ts +66 -0
- package/src/engine/worker-events.ts +100 -0
- package/src/engine/worker-runtime.ts +1022 -0
- package/src/engine/worker-tools.ts +203 -0
- package/src/entry/orchestrator.ts +1873 -0
- package/src/interactive/application-controller.ts +346 -0
- package/src/interactive/bus-notices.ts +265 -0
- package/src/interactive/chat-loop-messages.ts +626 -0
- package/src/interactive/chat-loop-policy.ts +18 -0
- package/src/interactive/chat-loop.ts +865 -0
- package/src/interactive/chat-panel.ts +1694 -0
- package/src/interactive/chat-renderer.ts +1038 -0
- package/src/interactive/clio-editor.ts +166 -0
- package/src/interactive/command-fallbacks.ts +23 -0
- package/src/interactive/command-output.ts +85 -0
- package/src/interactive/context-activity.ts +203 -0
- package/src/interactive/context-meter.ts +223 -0
- package/src/interactive/context-overlay.ts +220 -0
- package/src/interactive/cost-overlay.ts +279 -0
- package/src/interactive/dispatch-board.ts +1319 -0
- package/src/interactive/dispatch-steering.ts +86 -0
- package/src/interactive/editor-bash.ts +46 -0
- package/src/interactive/editor-steer.ts +51 -0
- package/src/interactive/editor-submit.ts +303 -0
- package/src/interactive/external-editor.ts +67 -0
- package/src/interactive/follow-up-queue-panel.ts +75 -0
- package/src/interactive/footer/dashboard.ts +534 -0
- package/src/interactive/footer/notifications.ts +275 -0
- package/src/interactive/footer/widgets.ts +1246 -0
- package/src/interactive/footer-panel.ts +187 -0
- package/src/interactive/format-time.ts +85 -0
- package/src/interactive/index.ts +11 -0
- package/src/interactive/interactive-application.ts +755 -0
- package/src/interactive/interactive-event-projection.ts +380 -0
- package/src/interactive/interactive-input-runtime.ts +261 -0
- package/src/interactive/interactive-presentation.ts +452 -0
- package/src/interactive/interactive-shell.ts +134 -0
- package/src/interactive/interactive-slash-runtime.ts +492 -0
- package/src/interactive/interactive-subscriptions.ts +111 -0
- package/src/interactive/interactive-tickers.ts +152 -0
- package/src/interactive/keybinding-manager.ts +496 -0
- package/src/interactive/layout.ts +20 -0
- package/src/interactive/leader-key.ts +143 -0
- package/src/interactive/loop-guard-interrupt.ts +101 -0
- package/src/interactive/memory-overlay.ts +280 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
- package/src/interactive/overlay-auth-lifecycle.ts +308 -0
- package/src/interactive/overlay-frame.ts +502 -0
- package/src/interactive/overlay-general-openers.ts +217 -0
- package/src/interactive/overlay-key-routing.ts +213 -0
- package/src/interactive/overlay-lifecycle.ts +413 -0
- package/src/interactive/overlay-model-selectors.ts +127 -0
- package/src/interactive/overlay-permission-lifecycle.ts +344 -0
- package/src/interactive/overlay-resource-openers.ts +112 -0
- package/src/interactive/overlay-session-lifecycle.ts +270 -0
- package/src/interactive/overlay-transitions.ts +57 -0
- package/src/interactive/overlays/agents.ts +69 -0
- package/src/interactive/overlays/ask-user.ts +921 -0
- package/src/interactive/overlays/auth-dialog.ts +221 -0
- package/src/interactive/overlays/context-reset.ts +108 -0
- package/src/interactive/overlays/cwd-fallback.ts +141 -0
- package/src/interactive/overlays/extensions.ts +54 -0
- package/src/interactive/overlays/help-reference.ts +140 -0
- package/src/interactive/overlays/interop.ts +139 -0
- package/src/interactive/overlays/keybinding-detail.ts +90 -0
- package/src/interactive/overlays/list-overlay.ts +606 -0
- package/src/interactive/overlays/message-picker.ts +155 -0
- package/src/interactive/overlays/model-selector.ts +1091 -0
- package/src/interactive/overlays/prompts.ts +72 -0
- package/src/interactive/overlays/session-selector-search.ts +31 -0
- package/src/interactive/overlays/session-selector.ts +266 -0
- package/src/interactive/overlays/settings.ts +3363 -0
- package/src/interactive/overlays/skills-hub.ts +237 -0
- package/src/interactive/overlays/tree-selector.ts +387 -0
- package/src/interactive/permission-overlay.ts +170 -0
- package/src/interactive/render-trace.ts +125 -0
- package/src/interactive/renderers/branch-summary.ts +86 -0
- package/src/interactive/renderers/code-ink.ts +420 -0
- package/src/interactive/renderers/compaction-summary.ts +112 -0
- package/src/interactive/renderers/diff.ts +126 -0
- package/src/interactive/renderers/notice.ts +28 -0
- package/src/interactive/renderers/retry-status.ts +31 -0
- package/src/interactive/renderers/structured.ts +89 -0
- package/src/interactive/renderers/tool-execution.ts +1104 -0
- package/src/interactive/renderers/worker-entry.ts +264 -0
- package/src/interactive/session-last-turn.ts +186 -0
- package/src/interactive/session-transcript.ts +105 -0
- package/src/interactive/session-usage-reseed.ts +74 -0
- package/src/interactive/slash-autocomplete.ts +364 -0
- package/src/interactive/slash-commands.ts +1319 -0
- package/src/interactive/slash-spec.ts +453 -0
- package/src/interactive/status/controller.ts +256 -0
- package/src/interactive/status/index.ts +23 -0
- package/src/interactive/status/state-machine.ts +530 -0
- package/src/interactive/status/summary.ts +170 -0
- package/src/interactive/status/types.ts +121 -0
- package/src/interactive/status/verbs.ts +163 -0
- package/src/interactive/status/watchdog.ts +24 -0
- package/src/interactive/tasks-overlay.ts +186 -0
- package/src/interactive/theme/components.ts +55 -0
- package/src/interactive/theme/glyphs.ts +70 -0
- package/src/interactive/theme/index.ts +15 -0
- package/src/interactive/theme/labels.ts +88 -0
- package/src/interactive/theme/rules.ts +138 -0
- package/src/interactive/theme/segments.ts +88 -0
- package/src/interactive/theme/tokens.ts +121 -0
- package/src/interactive/thinking-level-policy.ts +6 -0
- package/src/interactive/tool-prose-loop.ts +122 -0
- package/src/interactive/tool-prose-registration.ts +48 -0
- package/src/interactive/turn-context.ts +854 -0
- package/src/interactive/turn-middleware.ts +283 -0
- package/src/interactive/turn-persistence.ts +441 -0
- package/src/interactive/turn-queues.ts +169 -0
- package/src/interactive/turn-recovery.ts +306 -0
- package/src/interactive/turn-runtime.ts +802 -0
- package/src/interactive/turn-state.ts +123 -0
- package/src/interactive/view/artifacts.ts +1342 -0
- package/src/interactive/view/view-overlay.ts +732 -0
- package/src/interactive/welcome-dashboard.ts +536 -0
- package/src/interactive/worker-receipts.ts +94 -0
- package/src/interactive/worker-replay.ts +111 -0
- package/src/interactive/worker-share.ts +100 -0
- package/src/interactive/worker-stream.ts +442 -0
- package/src/interactive/workspace-facts.ts +141 -0
- package/src/tools/agent-tools.ts +382 -0
- package/src/tools/artifact.ts +103 -0
- package/src/tools/ask-user.ts +656 -0
- package/src/tools/bash.ts +176 -0
- package/src/tools/bootstrap.ts +474 -0
- package/src/tools/codewiki/code-nav.ts +563 -0
- package/src/tools/codewiki/shared.ts +115 -0
- package/src/tools/compete-worktrees.ts +898 -0
- package/src/tools/context/docs-engine.ts +619 -0
- package/src/tools/context/index.ts +435 -0
- package/src/tools/credential-present.ts +151 -0
- package/src/tools/dispatch-arguments.ts +228 -0
- package/src/tools/dispatch-plan.ts +741 -0
- package/src/tools/dispatch-scout.ts +461 -0
- package/src/tools/dispatch.ts +3338 -0
- package/src/tools/edit-diff.ts +534 -0
- package/src/tools/edit.ts +128 -0
- package/src/tools/executables.ts +22 -0
- package/src/tools/file-mutation-queue.ts +35 -0
- package/src/tools/find.ts +292 -0
- package/src/tools/grep.ts +495 -0
- package/src/tools/ignore-policy.ts +169 -0
- package/src/tools/ledger.ts +206 -0
- package/src/tools/ls.ts +110 -0
- package/src/tools/monitor.ts +797 -0
- package/src/tools/network-policy.ts +29 -0
- package/src/tools/observation.ts +421 -0
- package/src/tools/observers.ts +99 -0
- package/src/tools/path-utils.ts +79 -0
- package/src/tools/policy.ts +154 -0
- package/src/tools/profiles.ts +108 -0
- package/src/tools/read.ts +173 -0
- package/src/tools/registry.ts +1157 -0
- package/src/tools/result-shaping.ts +204 -0
- package/src/tools/safe-exec.ts +128 -0
- package/src/tools/spawn-hygiene.ts +182 -0
- package/src/tools/steer.ts +88 -0
- package/src/tools/string-enum.ts +15 -0
- package/src/tools/tasks.ts +168 -0
- package/src/tools/truncate-utf8.ts +17 -0
- package/src/tools/truncate.ts +202 -0
- package/src/tools/verify/frontend.ts +685 -0
- package/src/tools/verify/index.ts +66 -0
- package/src/tools/verify/scripts.ts +108 -0
- package/src/tools/web-fetch.ts +777 -0
- package/src/tools/worker-evidence.ts +215 -0
- package/src/tools/write.ts +52 -0
- package/src/utils/exif-orientation.ts +192 -0
- package/src/utils/git.ts +24 -0
- package/src/utils/image-resize.ts +148 -0
- package/src/utils/photon.ts +103 -0
- package/src/worker/control-lane.ts +22 -0
- package/src/worker/entry.ts +257 -0
- package/src/worker/event-projection.ts +56 -0
- package/src/worker/heartbeat.ts +24 -0
- package/src/worker/ledger-mirror.ts +95 -0
- package/src/worker/ndjson.ts +40 -0
- package/src/worker/protocol.ts +529 -0
- package/src/worker/resource-facts.ts +79 -0
- package/src/worker/runtime-registry.ts +12 -0
- package/src/worker/spec-contract.ts +654 -0
- package/src/worker/stdin-demux.ts +316 -0
- package/dist/acp-UMLFVA3F.js +0 -92
- package/dist/chunk-262G75JS.js +0 -35
- package/dist/chunk-5LDRNKX2.js +0 -1063
- package/dist/chunk-67MTHP2E.js +0 -135
- package/dist/chunk-GOTUR54M.js +0 -9
- package/dist/chunk-TPOCL34A.js +0 -2876
- package/dist/chunk-XV4ZJ6ZM.js +0 -3177
- package/dist/clio-KIQ5SNDS.js +0 -53
- package/dist/configure-G4E3A2PG.js +0 -27
- package/dist/doctor-M5HJJZOL.js +0 -61
- package/dist/domains/agents/builtins/architect.md +0 -33
- package/dist/domains/agents/builtins/coder.md +0 -31
- package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
- package/dist/domains/agents/builtins/debugger.md +0 -30
- package/dist/domains/agents/builtins/documenter.md +0 -31
- package/dist/domains/agents/builtins/git-master.md +0 -30
- package/dist/domains/agents/builtins/provenance.md +0 -30
- package/dist/domains/agents/builtins/researcher.md +0 -71
- package/dist/domains/agents/builtins/scout.md +0 -42
- package/dist/domains/agents/builtins/tester.md +0 -31
- package/dist/domains/agents/builtins/verifier.md +0 -30
- package/dist/domains/agents/builtins/wiki-writer.md +0 -41
- package/dist/fleet-preflight-CLIAX7YR.js +0 -21
- package/dist/preload-KZVHET2B.js +0 -11
- package/dist/version-ROZ6CZKH.js +0 -16
- package/skills/git/commit-crafting/SKILL.md +0 -79
- package/skills/git/commit-crafting/evals.md +0 -92
- package/skills/git/create-pr/SKILL.md +0 -116
- package/skills/git/create-pr/evals.md +0 -114
- package/skills/git/investigate-issue/SKILL.md +0 -139
- package/skills/git/investigate-issue/evals.md +0 -94
- package/skills/git/review-changes/SKILL.md +0 -103
- package/skills/git/review-changes/evals.md +0 -85
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running USD cost accumulator. The catalog-backed auto-pricing fallback was
|
|
3
|
+
* dropped in the provider redesign; pricing now flows from the providers
|
|
4
|
+
* domain's TargetPricing + knowledge-base entries and the caller supplies
|
|
5
|
+
* the resolved `usd` per call. Unknown or unpriced calls accumulate zero so
|
|
6
|
+
* they never blow up the tally.
|
|
7
|
+
*
|
|
8
|
+
* Per-entry token breakdown (input/output/cacheRead/cacheWrite/reasoning)
|
|
9
|
+
* matches the shape of pi-ai's `Usage` plus provider-specific reasoning detail
|
|
10
|
+
* fields. The /cost overlay aggregates it via `aggregateCostEntries`; the TUI
|
|
11
|
+
* footer consumes the session sum through `ObservabilityContract.sessionTokens()`.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { type CostProvenance, normalizeCostProvenance } from "../providers/index.js";
|
|
15
|
+
|
|
16
|
+
export interface CostAmount {
|
|
17
|
+
usd: number;
|
|
18
|
+
provenance: CostProvenance;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface CostAggregate {
|
|
22
|
+
knownUsd: number;
|
|
23
|
+
hasEstimated: boolean;
|
|
24
|
+
hasUnknown: boolean;
|
|
25
|
+
allKnownFree: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* How many priced calls this aggregate folded.
|
|
28
|
+
*
|
|
29
|
+
* Zero and "measured zero" are different claims and the flags above cannot
|
|
30
|
+
* tell them apart: a session that has not made a call and a session whose one
|
|
31
|
+
* call was genuinely free both reduce to `knownUsd: 0` with every flag false.
|
|
32
|
+
* The footer rendered the first as `$0.00`, a number nothing had measured,
|
|
33
|
+
* while `/cost` on the same session said no usage was recorded. Callers ask
|
|
34
|
+
* {@link costWasMeasured} rather than reading this directly.
|
|
35
|
+
*/
|
|
36
|
+
calls: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function emptyCostAggregate(): CostAggregate {
|
|
40
|
+
return { knownUsd: 0, hasEstimated: false, hasUnknown: false, allKnownFree: false, calls: 0 };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** False when nothing has been priced yet, so no cost claim of any kind is available. */
|
|
44
|
+
export function costWasMeasured(cost: CostAggregate | null | undefined): cost is CostAggregate {
|
|
45
|
+
return cost !== null && cost !== undefined && cost.calls > 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function accumulateCostAmount(aggregate: CostAggregate, amount: CostAmount, first: boolean): CostAggregate {
|
|
49
|
+
return {
|
|
50
|
+
knownUsd: aggregate.knownUsd + (amount.provenance === "unknown" ? 0 : amount.usd),
|
|
51
|
+
hasEstimated: aggregate.hasEstimated || amount.provenance === "estimated",
|
|
52
|
+
hasUnknown: aggregate.hasUnknown || amount.provenance === "unknown",
|
|
53
|
+
allKnownFree: amount.provenance === "known_free" && (first || aggregate.allKnownFree),
|
|
54
|
+
calls: aggregate.calls + 1,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function aggregateCostAmounts(amounts: ReadonlyArray<CostAmount>): CostAggregate {
|
|
59
|
+
return amounts.reduce(
|
|
60
|
+
(aggregate, amount, index) => accumulateCostAmount(aggregate, amount, index === 0),
|
|
61
|
+
emptyCostAggregate(),
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function formatUsdAmount(value: number): string {
|
|
66
|
+
if (!Number.isFinite(value) || value <= 0) return "$0.00";
|
|
67
|
+
return value < 0.01 ? `$${value.toFixed(4)}` : `$${value.toFixed(2)}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The one derivation every cost surface renders. Null means there is no cost
|
|
72
|
+
* claim to make, and a null must be shown as the absence of a cost field rather
|
|
73
|
+
* than as any number: `$0.00` before the first call was a measurement that had
|
|
74
|
+
* not happened, and it sat beside a `/cost` overlay saying no usage was recorded.
|
|
75
|
+
*
|
|
76
|
+
* Two different situations reduce to null. Nothing priced yet is one. A target
|
|
77
|
+
* that reports no pricing at all is the other: those calls were made and their
|
|
78
|
+
* tokens were measured, but nobody put a number on them, so the honest cost
|
|
79
|
+
* field is no field. The words `cost unknown` were themselves a claim, and they
|
|
80
|
+
* rendered beside a Σ total that was real, which read as if the tokens were in
|
|
81
|
+
* doubt too. Usage always shows; cost shows when something priced it.
|
|
82
|
+
*/
|
|
83
|
+
export function formatCostAggregate(cost: CostAggregate | null | undefined): string | null {
|
|
84
|
+
if (!costWasMeasured(cost)) return null;
|
|
85
|
+
if (cost.allKnownFree) return "$0.00 local";
|
|
86
|
+
// Partly priced still says what it knows, with the `+?` marking the rest.
|
|
87
|
+
if (cost.hasUnknown) return cost.knownUsd > 0 ? `${formatUsdAmount(cost.knownUsd)} +?` : null;
|
|
88
|
+
if (cost.hasEstimated) return `~${formatUsdAmount(cost.knownUsd)} est`;
|
|
89
|
+
return formatUsdAmount(cost.knownUsd);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* What a fixed-width surface says when there is no cost claim. The footer and
|
|
94
|
+
* `/cost` drop their cost field instead; a table cell that owns a column cannot,
|
|
95
|
+
* so it says the same thing in words rather than inventing `$0.00`.
|
|
96
|
+
*/
|
|
97
|
+
export const COST_NOT_MEASURED = "not measured";
|
|
98
|
+
|
|
99
|
+
export function costAggregateForAmount(usd: number, provenance: CostProvenance | undefined): CostAggregate {
|
|
100
|
+
return aggregateCostAmounts([{ usd, provenance: normalizeCostProvenance(provenance) }]);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface UsageBreakdown {
|
|
104
|
+
input: number;
|
|
105
|
+
output: number;
|
|
106
|
+
cacheRead: number;
|
|
107
|
+
cacheWrite: number;
|
|
108
|
+
reasoningTokens: number;
|
|
109
|
+
totalTokens: number;
|
|
110
|
+
apiCalls?: number;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface CostEntry {
|
|
114
|
+
providerId: string;
|
|
115
|
+
modelId: string;
|
|
116
|
+
tokens: number;
|
|
117
|
+
usd: number;
|
|
118
|
+
provenance: CostProvenance;
|
|
119
|
+
input: number;
|
|
120
|
+
output: number;
|
|
121
|
+
cacheRead: number;
|
|
122
|
+
cacheWrite: number;
|
|
123
|
+
reasoningTokens: number;
|
|
124
|
+
apiCalls?: number;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export interface CostTracker {
|
|
128
|
+
accumulate(
|
|
129
|
+
providerId: string,
|
|
130
|
+
modelId: string,
|
|
131
|
+
tokens: number,
|
|
132
|
+
usd?: number,
|
|
133
|
+
breakdown?: Partial<UsageBreakdown>,
|
|
134
|
+
provenance?: CostProvenance,
|
|
135
|
+
): number;
|
|
136
|
+
sessionTotal(): number;
|
|
137
|
+
sessionCost(): CostAggregate;
|
|
138
|
+
sessionTokens(): UsageBreakdown;
|
|
139
|
+
entries(): ReadonlyArray<CostEntry>;
|
|
140
|
+
reset(): void;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function emptyBreakdown(): UsageBreakdown {
|
|
144
|
+
return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoningTokens: 0, totalTokens: 0 };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function createCostTracker(): CostTracker {
|
|
148
|
+
const log: CostEntry[] = [];
|
|
149
|
+
let total = 0;
|
|
150
|
+
const totals = emptyBreakdown();
|
|
151
|
+
return {
|
|
152
|
+
accumulate(providerId, modelId, tokens, usd, breakdown, costProvenance) {
|
|
153
|
+
const resolvedUsd = usd ?? 0;
|
|
154
|
+
const provenance = normalizeCostProvenance(costProvenance);
|
|
155
|
+
const input = breakdown?.input ?? 0;
|
|
156
|
+
const output = breakdown?.output ?? 0;
|
|
157
|
+
const cacheRead = breakdown?.cacheRead ?? 0;
|
|
158
|
+
const cacheWrite = breakdown?.cacheWrite ?? 0;
|
|
159
|
+
const reasoningTokens = breakdown?.reasoningTokens ?? 0;
|
|
160
|
+
const apiCalls = breakdown?.apiCalls;
|
|
161
|
+
log.push({
|
|
162
|
+
providerId,
|
|
163
|
+
modelId,
|
|
164
|
+
tokens,
|
|
165
|
+
usd: resolvedUsd,
|
|
166
|
+
provenance,
|
|
167
|
+
input,
|
|
168
|
+
output,
|
|
169
|
+
cacheRead,
|
|
170
|
+
cacheWrite,
|
|
171
|
+
reasoningTokens,
|
|
172
|
+
...(apiCalls !== undefined ? { apiCalls } : {}),
|
|
173
|
+
});
|
|
174
|
+
total += resolvedUsd;
|
|
175
|
+
totals.input += input;
|
|
176
|
+
totals.output += output;
|
|
177
|
+
totals.cacheRead += cacheRead;
|
|
178
|
+
totals.cacheWrite += cacheWrite;
|
|
179
|
+
totals.reasoningTokens += reasoningTokens;
|
|
180
|
+
totals.totalTokens += tokens;
|
|
181
|
+
return resolvedUsd;
|
|
182
|
+
},
|
|
183
|
+
sessionTotal() {
|
|
184
|
+
return total;
|
|
185
|
+
},
|
|
186
|
+
sessionCost() {
|
|
187
|
+
return aggregateCostAmounts(log.map((entry) => ({ usd: entry.usd, provenance: entry.provenance })));
|
|
188
|
+
},
|
|
189
|
+
sessionTokens() {
|
|
190
|
+
return { ...totals };
|
|
191
|
+
},
|
|
192
|
+
entries() {
|
|
193
|
+
return log;
|
|
194
|
+
},
|
|
195
|
+
reset() {
|
|
196
|
+
log.length = 0;
|
|
197
|
+
total = 0;
|
|
198
|
+
totals.input = 0;
|
|
199
|
+
totals.output = 0;
|
|
200
|
+
totals.cacheRead = 0;
|
|
201
|
+
totals.cacheWrite = 0;
|
|
202
|
+
totals.reasoningTokens = 0;
|
|
203
|
+
totals.totalTokens = 0;
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidecar evidence index. A compact, append/merge-by-runId ledger written
|
|
3
|
+
* under `<stateDir>/evidence-index.json` whenever a dispatch run completes and
|
|
4
|
+
* the forensic evidence bundle is built (see extension.ts). Slice 6 reads this
|
|
5
|
+
* to surface a rolling first-pass-success rate and a failure-cause histogram in
|
|
6
|
+
* observability without re-running the heavy `buildEvidence` aggregator.
|
|
7
|
+
*
|
|
8
|
+
* The file is a JSON array kept as a bounded ring (newest rows win, capped at
|
|
9
|
+
* MAX_EVIDENCE_INDEX_ROWS) mirroring the dispatch runs ledger. Read/merge/write
|
|
10
|
+
* sections use the same cross-process state-file lock as runs.json; writes are
|
|
11
|
+
* then atomic via safeResourceWrite (tmp + rename). Reads are tolerant: a
|
|
12
|
+
* missing or malformed file yields an empty index rather than throwing, so a
|
|
13
|
+
* corrupt sidecar never blocks a run or a view.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { readFileSync } from "node:fs";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { safeResourceWrite } from "../../core/safe-resource-write.js";
|
|
19
|
+
import { withStateFileLock } from "../../core/state-file-lock.js";
|
|
20
|
+
import type { EvidenceTag } from "../evidence/index.js";
|
|
21
|
+
|
|
22
|
+
/** Cap on retained index rows. Matches the dispatch runs ledger default. */
|
|
23
|
+
export const MAX_EVIDENCE_INDEX_ROWS = 1000;
|
|
24
|
+
|
|
25
|
+
/** Filename of the sidecar index under the state dir. */
|
|
26
|
+
export const EVIDENCE_INDEX_FILE = "evidence-index.json";
|
|
27
|
+
|
|
28
|
+
let evidenceIndexWriteQueue: Promise<void> = Promise.resolve();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* One row of the sidecar evidence index, keyed by runId. Derived from the
|
|
32
|
+
* `EvidenceBuildResult` produced by `buildEvidence` plus the terminal dispatch
|
|
33
|
+
* payload. `tags` and `findingCount` come from the built bundle's findings.
|
|
34
|
+
* `firstPassSuccess` is computed from forensic evidence and is the authority
|
|
35
|
+
* for user-visible accountability rates. The receipt's cheap findings summary
|
|
36
|
+
* is intentionally conservative and may be false when transcript-level
|
|
37
|
+
* validation evidence makes this value true.
|
|
38
|
+
*/
|
|
39
|
+
export interface EvidenceIndexRow {
|
|
40
|
+
runId: string;
|
|
41
|
+
evidenceId: string;
|
|
42
|
+
tags: EvidenceTag[];
|
|
43
|
+
firstPassSuccess: boolean;
|
|
44
|
+
findingCount: number;
|
|
45
|
+
/** ISO-8601 timestamp the row was written. */
|
|
46
|
+
generatedAt: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function indexPath(stateDir: string): string {
|
|
50
|
+
return join(stateDir, EVIDENCE_INDEX_FILE);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function isEvidenceIndexRow(value: unknown): value is EvidenceIndexRow {
|
|
54
|
+
if (typeof value !== "object" || value === null) return false;
|
|
55
|
+
const row = value as Record<string, unknown>;
|
|
56
|
+
return (
|
|
57
|
+
typeof row.runId === "string" &&
|
|
58
|
+
typeof row.evidenceId === "string" &&
|
|
59
|
+
Array.isArray(row.tags) &&
|
|
60
|
+
row.tags.every((tag) => typeof tag === "string") &&
|
|
61
|
+
typeof row.firstPassSuccess === "boolean" &&
|
|
62
|
+
typeof row.findingCount === "number" &&
|
|
63
|
+
typeof row.generatedAt === "string"
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Read the sidecar evidence index. Tolerant by design: a missing file, invalid
|
|
69
|
+
* JSON, or a non-array payload all yield an empty array. Malformed rows are
|
|
70
|
+
* dropped, valid rows are kept.
|
|
71
|
+
*/
|
|
72
|
+
export function readEvidenceIndex(stateDir: string): EvidenceIndexRow[] {
|
|
73
|
+
let raw: string;
|
|
74
|
+
try {
|
|
75
|
+
raw = readFileSync(indexPath(stateDir), "utf8");
|
|
76
|
+
} catch {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
let parsed: unknown;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(raw) as unknown;
|
|
82
|
+
} catch {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
if (!Array.isArray(parsed)) return [];
|
|
86
|
+
return parsed.filter(isEvidenceIndexRow);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Merge one row into the sidecar index by runId and write it back atomically.
|
|
91
|
+
* An existing row with the same runId is replaced (a retried run that finalizes
|
|
92
|
+
* again overwrites the stale entry); the merged row is moved to the tail so the
|
|
93
|
+
* ring keeps the most recently written entries when it is bounded. Returns the
|
|
94
|
+
* full index as written.
|
|
95
|
+
*/
|
|
96
|
+
async function writeEvidenceIndexRow(stateDir: string, row: EvidenceIndexRow): Promise<EvidenceIndexRow[]> {
|
|
97
|
+
let bounded: EvidenceIndexRow[] = [];
|
|
98
|
+
await withStateFileLock(indexPath(stateDir), () => {
|
|
99
|
+
const existing = readEvidenceIndex(stateDir).filter((entry) => entry.runId !== row.runId);
|
|
100
|
+
existing.push(row);
|
|
101
|
+
bounded = existing.length > MAX_EVIDENCE_INDEX_ROWS ? existing.slice(-MAX_EVIDENCE_INDEX_ROWS) : existing;
|
|
102
|
+
safeResourceWrite(indexPath(stateDir), `${JSON.stringify(bounded, null, 2)}\n`, { encoding: "utf8" });
|
|
103
|
+
});
|
|
104
|
+
return bounded;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Queue index row merges within this process. The state-file lock serializes
|
|
109
|
+
* across processes; this queue avoids avoidable local lock contention when
|
|
110
|
+
* terminal dispatch events start several evidence builds in parallel.
|
|
111
|
+
*/
|
|
112
|
+
export async function writeEvidenceIndexRowQueued(
|
|
113
|
+
stateDir: string,
|
|
114
|
+
row: EvidenceIndexRow,
|
|
115
|
+
): Promise<EvidenceIndexRow[]> {
|
|
116
|
+
let written: EvidenceIndexRow[] = [];
|
|
117
|
+
const write = evidenceIndexWriteQueue.then(async () => {
|
|
118
|
+
written = await writeEvidenceIndexRow(stateDir, row);
|
|
119
|
+
});
|
|
120
|
+
evidenceIndexWriteQueue = write.catch(() => undefined);
|
|
121
|
+
await write;
|
|
122
|
+
return written;
|
|
123
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observability domain wire-up. Listens to dispatch + safety bus channels and
|
|
3
|
+
* folds payloads into telemetry/cost trackers. Emits nothing; other domains
|
|
4
|
+
* read the snapshot through the contract.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { BusChannels, type DispatchCompletedPayload } from "../../core/bus-events.js";
|
|
8
|
+
import type { DomainBundle, DomainContext, DomainExtension } from "../../core/domain-loader.js";
|
|
9
|
+
import { clioDataDir, clioStateDir } from "../../core/xdg.js";
|
|
10
|
+
import { buildEvidence, type EvidenceBuildResult } from "../evidence/index.js";
|
|
11
|
+
import { readAccountabilitySummary } from "./accountability.js";
|
|
12
|
+
import type { ObservabilityContract, ObservabilityRunEvidence, TokenThroughputSnapshot } from "./contract.js";
|
|
13
|
+
import { createCostTracker } from "./cost.js";
|
|
14
|
+
import { type EvidenceIndexRow, writeEvidenceIndexRowQueued } from "./evidence-index.js";
|
|
15
|
+
import { aggregateMetrics } from "./metrics.js";
|
|
16
|
+
import { createObservabilityProjection } from "./projection.js";
|
|
17
|
+
import { createTelemetry } from "./telemetry.js";
|
|
18
|
+
import { createDispatchTraceMirror, type DispatchTraceMirror, traceDatabasePath } from "./trace-store.js";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Callbacks the auto-build path uses to report evidence readiness back to the
|
|
22
|
+
* projection without coupling the pure build helper to it. `onReady` fires once
|
|
23
|
+
* the sidecar index row lands; `onFailed` fires when the build or write throws.
|
|
24
|
+
*/
|
|
25
|
+
interface EvidenceBuildHooks {
|
|
26
|
+
onReady(runId: string, evidence: ObservabilityRunEvidence): void;
|
|
27
|
+
onFailed(runId: string, message: string): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Terminal dispatch payload with every field optional. Partial<> alone does
|
|
32
|
+
* not admit DispatchFailedPayload under exactOptionalPropertyTypes, and this
|
|
33
|
+
* subscriber treats completed/failed identically for cost purposes.
|
|
34
|
+
*/
|
|
35
|
+
type DispatchTerminalLike = {
|
|
36
|
+
[K in keyof DispatchCompletedPayload]?: DispatchCompletedPayload[K] | undefined;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
function recordDispatchCost(
|
|
40
|
+
telemetry: ReturnType<typeof createTelemetry>,
|
|
41
|
+
cost: ReturnType<typeof createCostTracker>,
|
|
42
|
+
payload: DispatchTerminalLike,
|
|
43
|
+
): void {
|
|
44
|
+
if (!payload.targetId || !payload.wireModelId || typeof payload.tokenCount !== "number") {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
telemetry.record("counter", "tokens.total", payload.tokenCount);
|
|
48
|
+
// Dispatch terminal payloads carry the same full split as receipts. Preserve
|
|
49
|
+
// it so /cost and the footer agree with the fleet board instead of showing
|
|
50
|
+
// zero input/output/cache for worker-only sessions.
|
|
51
|
+
cost.accumulate(
|
|
52
|
+
payload.targetId,
|
|
53
|
+
payload.wireModelId,
|
|
54
|
+
payload.tokenCount,
|
|
55
|
+
payload.costUsd,
|
|
56
|
+
{
|
|
57
|
+
input: payload.inputTokenCount ?? 0,
|
|
58
|
+
output: payload.outputTokenCount ?? 0,
|
|
59
|
+
cacheRead: payload.cacheReadTokenCount ?? 0,
|
|
60
|
+
cacheWrite: payload.cacheWriteTokenCount ?? 0,
|
|
61
|
+
reasoningTokens: payload.reasoningTokenCount ?? 0,
|
|
62
|
+
totalTokens: payload.tokenCount,
|
|
63
|
+
},
|
|
64
|
+
payload.costProvenance,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Build the forensic evidence bundle for a finalized run and record a compact
|
|
70
|
+
* sidecar index row. Best-effort: every failure (build throws, write throws) is
|
|
71
|
+
* logged to stderr and swallowed so a run completes normally regardless.
|
|
72
|
+
*
|
|
73
|
+
* `succeeded` distinguishes the DispatchCompleted channel (terminal success)
|
|
74
|
+
* from DispatchFailed; only a succeeded run is eligible for firstPassSuccess.
|
|
75
|
+
* `attempt` is the dispatch lineage attempt (0 = first try, increments per
|
|
76
|
+
* retry). A retry, a non-success outcome, or a bundle that shows no validation
|
|
77
|
+
* evidence all force firstPassSuccess to false. See section 7 of the spec.
|
|
78
|
+
*/
|
|
79
|
+
async function buildAndIndexEvidence(
|
|
80
|
+
runId: string,
|
|
81
|
+
succeeded: boolean,
|
|
82
|
+
attempt: number | undefined,
|
|
83
|
+
hooks: EvidenceBuildHooks,
|
|
84
|
+
): Promise<void> {
|
|
85
|
+
try {
|
|
86
|
+
const dataDir = clioDataDir();
|
|
87
|
+
const stateDir = clioStateDir();
|
|
88
|
+
const result = await buildEvidence({ dataDir, stateDir, runId });
|
|
89
|
+
const row = evidenceIndexRow(runId, result, succeeded, attempt);
|
|
90
|
+
await writeEvidenceIndexRowQueued(stateDir, row);
|
|
91
|
+
hooks.onReady(runId, {
|
|
92
|
+
evidenceId: row.evidenceId,
|
|
93
|
+
firstPassSuccess: row.firstPassSuccess,
|
|
94
|
+
findingCount: row.findingCount,
|
|
95
|
+
tags: row.tags,
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
+
process.stderr.write(`[clio:evidence] auto-build failed for run ${runId}: ${message}\n`);
|
|
100
|
+
hooks.onFailed(runId, message);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* firstPassSuccess is TRUE only when the terminal outcome succeeded, the run
|
|
106
|
+
* had zero dispatch retries (lineage attempt 0), and the built bundle carries
|
|
107
|
+
* validation evidence. We read validation evidence negatively: a bundle whose
|
|
108
|
+
* overview or findings tags include `no-validation` means the run produced no
|
|
109
|
+
* validation, so it cannot first-pass-succeed.
|
|
110
|
+
*/
|
|
111
|
+
function evidenceIndexRow(
|
|
112
|
+
runId: string,
|
|
113
|
+
result: EvidenceBuildResult,
|
|
114
|
+
succeeded: boolean,
|
|
115
|
+
attempt: number | undefined,
|
|
116
|
+
): EvidenceIndexRow {
|
|
117
|
+
const tags = result.overview.tags;
|
|
118
|
+
const hasNoValidationTag =
|
|
119
|
+
tags.includes("no-validation") || result.findings.some((finding) => finding.tag === "no-validation");
|
|
120
|
+
const firstPassSuccess = succeeded && attempt === 0 && !hasNoValidationTag;
|
|
121
|
+
return {
|
|
122
|
+
runId,
|
|
123
|
+
evidenceId: result.evidenceId,
|
|
124
|
+
tags: [...tags],
|
|
125
|
+
firstPassSuccess,
|
|
126
|
+
findingCount: result.findings.length,
|
|
127
|
+
generatedAt: new Date().toISOString(),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface ObservabilityBundleOptions {
|
|
132
|
+
/** Disable the SQLite dispatch mirror for short-lived internal generators. */
|
|
133
|
+
dispatchTrace?: boolean;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function createObservabilityBundle(
|
|
137
|
+
context: DomainContext,
|
|
138
|
+
options: ObservabilityBundleOptions = {},
|
|
139
|
+
): DomainBundle<ObservabilityContract> {
|
|
140
|
+
const telemetry = createTelemetry();
|
|
141
|
+
const cost = createCostTracker();
|
|
142
|
+
const trace: DispatchTraceMirror =
|
|
143
|
+
options.dispatchTrace === false
|
|
144
|
+
? { enqueue: () => {}, enqueueSessionTurn: () => {}, flush: async () => {}, close: async () => {} }
|
|
145
|
+
: createDispatchTraceMirror(traceDatabasePath(clioStateDir()));
|
|
146
|
+
const unsubscribes: Array<() => void> = [];
|
|
147
|
+
let latestThroughput: TokenThroughputSnapshot | null = null;
|
|
148
|
+
|
|
149
|
+
// The product-facing projection folds the bus channels plus the session
|
|
150
|
+
// cost/telemetry trackers into a single bounded snapshot. It reads these
|
|
151
|
+
// accessors at snapshot-build time, so it always observes the latest state
|
|
152
|
+
// regardless of bus-handler ordering.
|
|
153
|
+
const projection = createObservabilityProjection(context.bus, {
|
|
154
|
+
metrics: () => aggregateMetrics(telemetry.snapshot()),
|
|
155
|
+
sessionCost: () => cost.sessionTotal(),
|
|
156
|
+
sessionCostSummary: () => cost.sessionCost(),
|
|
157
|
+
sessionTokens: () => cost.sessionTokens(),
|
|
158
|
+
latestThroughput: () => latestThroughput,
|
|
159
|
+
readAccountability: () => readAccountabilitySummary(clioStateDir()),
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// In-flight forensic builds. The terminal event is emitted after the receipt
|
|
163
|
+
// and ledger are persisted (dispatch finalizers persist before emit), so a
|
|
164
|
+
// build that starts here reads durable state. We keep the bus handler
|
|
165
|
+
// non-blocking by not awaiting the build inline, but a headless one-shot
|
|
166
|
+
// `clio-coder run` tears the process down right after the run, which would abandon
|
|
167
|
+
// the build mid-flight. Tracking the promises lets stop() flush them so the
|
|
168
|
+
// bundle and index row reliably land on every path, not just long-lived
|
|
169
|
+
// interactive sessions.
|
|
170
|
+
const pendingBuilds = new Set<Promise<void>>();
|
|
171
|
+
const trackBuild = (runId: string, succeeded: boolean, attempt: number | undefined): void => {
|
|
172
|
+
projection.evidenceBuildStarted(runId);
|
|
173
|
+
const build = buildAndIndexEvidence(runId, succeeded, attempt, {
|
|
174
|
+
onReady: (id, evidence) => projection.evidenceBuildSucceeded(id, evidence),
|
|
175
|
+
onFailed: (id, message) => projection.evidenceBuildFailed(id, message),
|
|
176
|
+
});
|
|
177
|
+
pendingBuilds.add(build);
|
|
178
|
+
void build.finally(() => pendingBuilds.delete(build));
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const extension: DomainExtension = {
|
|
182
|
+
async start() {
|
|
183
|
+
for (const channel of [
|
|
184
|
+
BusChannels.DispatchEnqueued,
|
|
185
|
+
BusChannels.DispatchStarted,
|
|
186
|
+
BusChannels.DispatchProgress,
|
|
187
|
+
BusChannels.DispatchCompleted,
|
|
188
|
+
BusChannels.DispatchFailed,
|
|
189
|
+
] as const) {
|
|
190
|
+
unsubscribes.push(context.bus.on(channel, (payload) => trace.enqueue(channel, payload)));
|
|
191
|
+
}
|
|
192
|
+
unsubscribes.push(
|
|
193
|
+
context.bus.on(BusChannels.DispatchCompleted, (raw) => {
|
|
194
|
+
const payload: DispatchTerminalLike = raw ?? {};
|
|
195
|
+
telemetry.record("counter", "dispatch.completed", 1);
|
|
196
|
+
if (typeof payload.durationMs === "number") {
|
|
197
|
+
telemetry.record("histogram", "dispatch.duration_ms", payload.durationMs);
|
|
198
|
+
}
|
|
199
|
+
recordDispatchCost(telemetry, cost, payload);
|
|
200
|
+
// Kick off the heavy forensic build without blocking the bus.
|
|
201
|
+
// buildAndIndexEvidence swallows all failures; stop() flushes it.
|
|
202
|
+
if (typeof payload.runId === "string" && payload.runId.length > 0) {
|
|
203
|
+
trackBuild(payload.runId, true, payload.lineage?.attempt);
|
|
204
|
+
}
|
|
205
|
+
}),
|
|
206
|
+
);
|
|
207
|
+
unsubscribes.push(
|
|
208
|
+
context.bus.on(BusChannels.DispatchFailed, (raw) => {
|
|
209
|
+
const payload: DispatchTerminalLike = raw ?? {};
|
|
210
|
+
telemetry.record("counter", "dispatch.failed", 1);
|
|
211
|
+
if (typeof payload.durationMs === "number") {
|
|
212
|
+
telemetry.record("histogram", "dispatch.duration_ms", payload.durationMs);
|
|
213
|
+
}
|
|
214
|
+
recordDispatchCost(telemetry, cost, payload);
|
|
215
|
+
// A failed run is never a first-pass success; still build the
|
|
216
|
+
// bundle so its failure-cause tags exist for the index.
|
|
217
|
+
if (typeof payload.runId === "string" && payload.runId.length > 0) {
|
|
218
|
+
trackBuild(payload.runId, false, payload.lineage?.attempt);
|
|
219
|
+
}
|
|
220
|
+
}),
|
|
221
|
+
);
|
|
222
|
+
unsubscribes.push(
|
|
223
|
+
context.bus.on(BusChannels.SafetyClassified, () => {
|
|
224
|
+
telemetry.record("counter", "safety.classified", 1);
|
|
225
|
+
// The projection reads metrics off telemetry; nudge it so the
|
|
226
|
+
// safety-classification counter reaches the snapshot.
|
|
227
|
+
projection.refresh();
|
|
228
|
+
}),
|
|
229
|
+
);
|
|
230
|
+
},
|
|
231
|
+
async stop() {
|
|
232
|
+
for (const off of unsubscribes) off();
|
|
233
|
+
unsubscribes.length = 0;
|
|
234
|
+
projection.stop();
|
|
235
|
+
// Terminal trace facts are the live operator contract. Flush them before
|
|
236
|
+
// potentially slower evidence builds consume the remaining hook budget.
|
|
237
|
+
await trace.close();
|
|
238
|
+
// Flush any in-flight forensic builds so a headless run that shuts down
|
|
239
|
+
// immediately after dispatch still persists its bundle and index row.
|
|
240
|
+
// Best-effort and bounded by the shutdown hook budget; each build
|
|
241
|
+
// already swallows its own failures.
|
|
242
|
+
if (pendingBuilds.size > 0) {
|
|
243
|
+
await Promise.allSettled([...pendingBuilds]);
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
const contract: ObservabilityContract = {
|
|
249
|
+
telemetry: () => telemetry.snapshot(),
|
|
250
|
+
metrics: () => aggregateMetrics(telemetry.snapshot()),
|
|
251
|
+
sessionCost: () => cost.sessionTotal(),
|
|
252
|
+
sessionCostSummary: () => cost.sessionCost(),
|
|
253
|
+
sessionTokens: () => cost.sessionTokens(),
|
|
254
|
+
costEntries: () => cost.entries(),
|
|
255
|
+
accountability: () => readAccountabilitySummary(clioStateDir()),
|
|
256
|
+
latestTokenThroughput: () => latestThroughput,
|
|
257
|
+
resetSession() {
|
|
258
|
+
cost.reset();
|
|
259
|
+
latestThroughput = null;
|
|
260
|
+
projection.refresh();
|
|
261
|
+
},
|
|
262
|
+
recordTokens(providerId, modelId, tokens, costUsd, breakdown, costProvenance) {
|
|
263
|
+
telemetry.record("counter", "tokens.total", tokens);
|
|
264
|
+
cost.accumulate(providerId, modelId, tokens, costUsd, breakdown, costProvenance);
|
|
265
|
+
projection.refresh();
|
|
266
|
+
},
|
|
267
|
+
recordSessionTurn(sessionTurn) {
|
|
268
|
+
trace.enqueueSessionTurn(sessionTurn);
|
|
269
|
+
},
|
|
270
|
+
recordTokenThroughput(snapshot) {
|
|
271
|
+
latestThroughput = snapshot;
|
|
272
|
+
telemetry.record("histogram", "tokens.output_per_second", snapshot.tokensPerSecond);
|
|
273
|
+
telemetry.record("histogram", "tokens.ttft_ms", snapshot.ttftMs ?? 0);
|
|
274
|
+
projection.refresh();
|
|
275
|
+
},
|
|
276
|
+
snapshot: () => projection.snapshot(),
|
|
277
|
+
subscribe: (listener) => projection.subscribe(listener),
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
return { extension, contract };
|
|
281
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { DomainModule } from "../../core/domain-loader.js";
|
|
2
|
+
import { createObservabilityBundle, type ObservabilityBundleOptions } from "./extension.js";
|
|
3
|
+
import { ObservabilityManifest } from "./manifest.js";
|
|
4
|
+
|
|
5
|
+
export const ObservabilityDomainModule: DomainModule = {
|
|
6
|
+
manifest: ObservabilityManifest,
|
|
7
|
+
createExtension: createObservabilityBundle,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export function createObservabilityDomainModule(options: ObservabilityBundleOptions = {}): DomainModule {
|
|
11
|
+
return {
|
|
12
|
+
manifest: ObservabilityManifest,
|
|
13
|
+
createExtension: (context) => createObservabilityBundle(context, options),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type { AccountabilitySummary } from "./accountability.js";
|
|
18
|
+
export { readAccountabilitySummary, summarizeEvidenceIndex } from "./accountability.js";
|
|
19
|
+
export type {
|
|
20
|
+
ObservabilityContract,
|
|
21
|
+
ObservabilityNotice,
|
|
22
|
+
ObservabilityRunEvidence,
|
|
23
|
+
ObservabilityRunSummary,
|
|
24
|
+
ObservabilitySnapshot,
|
|
25
|
+
TokenThroughputSnapshot,
|
|
26
|
+
} from "./contract.js";
|
|
27
|
+
export {
|
|
28
|
+
aggregateCostAmounts,
|
|
29
|
+
COST_NOT_MEASURED,
|
|
30
|
+
type CostAggregate,
|
|
31
|
+
type CostAmount,
|
|
32
|
+
type CostEntry,
|
|
33
|
+
costAggregateForAmount,
|
|
34
|
+
costWasMeasured,
|
|
35
|
+
emptyCostAggregate,
|
|
36
|
+
formatCostAggregate,
|
|
37
|
+
type UsageBreakdown,
|
|
38
|
+
} from "./cost.js";
|
|
39
|
+
export type { EvidenceIndexRow } from "./evidence-index.js";
|
|
40
|
+
export { EVIDENCE_INDEX_FILE, MAX_EVIDENCE_INDEX_ROWS, readEvidenceIndex } from "./evidence-index.js";
|
|
41
|
+
export { ObservabilityManifest } from "./manifest.js";
|
|
42
|
+
export type { MetricsView } from "./metrics.js";
|
|
43
|
+
export type { ObservabilityProjection, ProjectionReadModel } from "./projection.js";
|
|
44
|
+
export {
|
|
45
|
+
createObservabilityProjection,
|
|
46
|
+
MAX_PROJECTION_NOTICES,
|
|
47
|
+
MAX_PROJECTION_RUNS,
|
|
48
|
+
PROJECTION_FLUSH_DEBOUNCE_MS,
|
|
49
|
+
} from "./projection.js";
|
|
50
|
+
export { DEFAULT_HISTOGRAM_CAPACITY, type MetricKind, type TelemetrySnapshot } from "./telemetry.js";
|
|
51
|
+
export type {
|
|
52
|
+
DispatchTraceMirror,
|
|
53
|
+
SessionTurnEvent,
|
|
54
|
+
SessionTurnFinish,
|
|
55
|
+
SessionTurnStart,
|
|
56
|
+
SessionTurnTrace,
|
|
57
|
+
SessionTurnUsage,
|
|
58
|
+
TraceEventInput,
|
|
59
|
+
TraceEventRow,
|
|
60
|
+
TraceGateCheck,
|
|
61
|
+
TraceGateResultInput,
|
|
62
|
+
TracePhaseRow,
|
|
63
|
+
TraceProcessInput,
|
|
64
|
+
TraceProcessRow,
|
|
65
|
+
TraceRunRow,
|
|
66
|
+
TraceSpendInput,
|
|
67
|
+
} from "./trace-store.js";
|
|
68
|
+
export {
|
|
69
|
+
createDispatchTraceMirror,
|
|
70
|
+
SESSION_TRACE_ASSIGNMENT_ID,
|
|
71
|
+
TRACE_DATABASE_FILE,
|
|
72
|
+
TRACE_EVENT_POLL_LIMIT,
|
|
73
|
+
TRACE_SCHEMA_VERSION,
|
|
74
|
+
TraceReader,
|
|
75
|
+
TraceSchemaVersionError,
|
|
76
|
+
TraceStore,
|
|
77
|
+
traceDatabasePath,
|
|
78
|
+
} from "./trace-store.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DomainManifest } from "../../core/domain-loader.js";
|
|
2
|
+
|
|
3
|
+
export const ObservabilityManifest: DomainManifest = {
|
|
4
|
+
// observability listens to dispatch + safety bus channels but never reads
|
|
5
|
+
// their contracts. Keeping dispatch out of dependsOn lets scheduling sit
|
|
6
|
+
// between observability and dispatch (scheduling -> observability, dispatch
|
|
7
|
+
// -> scheduling) without a topological cycle.
|
|
8
|
+
name: "observability",
|
|
9
|
+
dependsOn: ["providers", "session"],
|
|
10
|
+
};
|