@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.
Files changed (988) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +50 -53
  3. package/dist/acp-FPR54DGL.js +138 -0
  4. package/dist/{agents-Q4MYPMUW.js → agents-OGPIHPJH.js} +33 -25
  5. package/dist/assets/codewiki.json +1 -0
  6. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
  7. package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
  8. package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
  9. package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
  10. package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
  11. package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
  12. package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
  13. package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
  14. package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
  15. package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
  16. package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
  17. package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
  18. package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
  19. package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
  20. package/dist/assets/grammars/tree-sitter.wasm +0 -0
  21. package/dist/{auth-O6HYIJ6J.js → auth-IC3K6NIZ.js} +22 -15
  22. package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
  23. package/dist/chunk-3I7MS7N2.js +40 -0
  24. package/dist/chunk-3R73A4XB.js +69 -0
  25. package/dist/{chunk-26BZQOAD.js → chunk-474KN5II.js} +86 -115
  26. package/dist/{chunk-NI4DEJMC.js → chunk-4QKXUHSR.js} +26 -3
  27. package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
  28. package/dist/{chunk-TFSSEXL6.js → chunk-673JJUWJ.js} +14 -4
  29. package/dist/{chunk-GNGDQYDU.js → chunk-7SS2CTV2.js} +27922 -1249
  30. package/dist/{chunk-7RBKDI66.js → chunk-ASND7OZK.js} +104 -12
  31. package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
  32. package/dist/{chunk-RQDWMVRB.js → chunk-BSU2YIWB.js} +9 -3
  33. package/dist/{chunk-CLJ5HLUD.js → chunk-C4PTHK7P.js} +24 -5
  34. package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
  35. package/dist/{chunk-BYEU76JP.js → chunk-DKGKUHFA.js} +34 -9
  36. package/dist/chunk-EYOKLTMF.js +170 -0
  37. package/dist/{chunk-PS4PFJQP.js → chunk-FCIH3BIZ.js} +15258 -14130
  38. package/dist/{chunk-2J63S4SF.js → chunk-FST4FYJB.js} +82 -14
  39. package/dist/{chunk-3DANZDGR.js → chunk-G34LV2PF.js} +34 -9
  40. package/dist/{chunk-BBUH4VAA.js → chunk-GAEBEQVI.js} +34 -21
  41. package/dist/chunk-GB6QRBXN.js +8543 -0
  42. package/dist/chunk-GEP36Y4X.js +12796 -0
  43. package/dist/{chunk-TKHQ4DGZ.js → chunk-H6F6BYOH.js} +496 -121
  44. package/dist/{chunk-UGYAX5YI.js → chunk-HQQID6OA.js} +10 -5
  45. package/dist/chunk-IHXBNWMM.js +137 -0
  46. package/dist/{chunk-ME6DNWIU.js → chunk-IS3ONKU3.js} +7 -1
  47. package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
  48. package/dist/chunk-K2ITRMHZ.js +642 -0
  49. package/dist/{chunk-KBR4MZZR.js → chunk-K5XEMXTI.js} +7 -1
  50. package/dist/{chunk-AMFR5YA3.js → chunk-KKNLWXI6.js} +24 -10
  51. package/dist/{chunk-JWHCJDCI.js → chunk-KY56HMHH.js} +145 -61
  52. package/dist/{chunk-E3NYWENM.js → chunk-LU4TK2PR.js} +52 -7
  53. package/dist/{chunk-UWIJNAOB.js → chunk-M5T5VO65.js} +109 -42
  54. package/dist/{chunk-JPOWPFCU.js → chunk-MAR7Y6HW.js} +38 -16
  55. package/dist/chunk-N6F52NLF.js +6951 -0
  56. package/dist/{chunk-UHTSULZS.js → chunk-NMOX6HFD.js} +20 -7
  57. package/dist/{chunk-WD6AJM35.js → chunk-OLBBMFRD.js} +30 -13
  58. package/dist/{chunk-VOO7NYPP.js → chunk-PFEFKVGL.js} +22 -6
  59. package/dist/{chunk-6CWDTGUC.js → chunk-PIUMUEMV.js} +7 -1
  60. package/dist/chunk-PV4JUBVJ.js +462 -0
  61. package/dist/{chunk-527KG6XR.js → chunk-Q3RUPKEJ.js} +22 -4
  62. package/dist/{chunk-D5YD55AR.js → chunk-Q5WJOSJ7.js} +11 -1
  63. package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
  64. package/dist/{chunk-4UQA7NCT.js → chunk-R5KLMSBV.js} +7 -2
  65. package/dist/{chunk-PIDUD6M2.js → chunk-RDLVBZEO.js} +11 -6
  66. package/dist/{chunk-O4EJEDHO.js → chunk-RPTR2H26.js} +40 -31
  67. package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
  68. package/dist/{chunk-XNISANGE.js → chunk-TEKV33Q5.js} +122 -57
  69. package/dist/chunk-TXOTCRLG.js +15 -0
  70. package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
  71. package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
  72. package/dist/{chunk-UU3R62TT.js → chunk-XYWBQRDM.js} +13 -4
  73. package/dist/{chunk-7BHLZB3A.js → chunk-ZPY3JZ5E.js} +32 -10
  74. package/dist/cli/index.js +39 -33
  75. package/dist/clio-BZVGEUFJ.js +58 -0
  76. package/dist/{components-JVHMUBEB.js → components-DMAOEKFB.js} +26 -9
  77. package/dist/{config-ZFCDBMDC.js → config-IRUQ7SE4.js} +42 -31
  78. package/dist/configure-S7S6F6CL.js +32 -0
  79. package/dist/{context-CDXTP2MP.js → context-3KWFLHJG.js} +17 -11
  80. package/dist/{context-E3KIFVXI.js → context-5RADCKTR.js} +33 -28
  81. package/dist/{context-clear-3F4PLXOS.js → context-clear-7TSNPAAI.js} +36 -28
  82. package/dist/{context-index-Q7YSYTR3.js → context-index-W4RLWOQH.js} +10 -4
  83. package/dist/{docs-YIETIWZI.js → docs-5AWSPS37.js} +16 -10
  84. package/dist/doctor-UC5NAJYQ.js +77 -0
  85. package/dist/{eval-B3KZZESM.js → eval-U6TJHRLX.js} +77 -24
  86. package/dist/{evidence-V67CHM35.js → evidence-YEGUW4L3.js} +34 -26
  87. package/dist/{evolve-YDZSUQYA.js → evolve-TXARCTPG.js} +39 -26
  88. package/dist/{extensions-SRG7XCAH.js → extensions-OZFJ3A3G.js} +13 -7
  89. package/dist/{fleet-CA2CRTVG.js → fleet-6G3DHNYE.js} +45 -37
  90. package/dist/fleet-preflight-DSNT37JK.js +23 -0
  91. package/dist/{init-2OZDJE2D.js → init-KZ5QTF6M.js} +42 -34
  92. package/dist/{memory-3PIQQAKX.js → memory-73ESV5YC.js} +35 -27
  93. package/dist/{models-DY35XI7Y.js → models-A4PVNWJK.js} +34 -23
  94. package/dist/{paths-5OMXW7Z4.js → paths-C4H6IV77.js} +12 -6
  95. package/dist/preload-6WVMHX3A.js +13 -0
  96. package/dist/{reset-PIFYNOS3.js → reset-BGW6OGMV.js} +17 -11
  97. package/dist/{run-3VSPP24F.js → run-YTPEYQOH.js} +60 -48
  98. package/dist/{share-D36RQCXM.js → share-YIFFV4NQ.js} +16 -10
  99. package/dist/{skills-F2MRLELY.js → skills-2V6RA3OQ.js} +18 -11
  100. package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-S2TVJO4F.js} +45 -36
  101. package/dist/{targets-DZMEZAH4.js → targets-TYXLPB23.js} +61 -59
  102. package/dist/{trace-7NYCUI2J.js → trace-GGOJ6Q6Z.js} +9 -3
  103. package/dist/{uninstall-AD3JWHBB.js → uninstall-LLLT4F4W.js} +14 -8
  104. package/dist/{upgrade-WYYBKGDY.js → upgrade-33G2LMM5.js} +45 -23
  105. package/dist/{usage-ULIDAGFF.js → usage-ZAFSXKKG.js} +35 -27
  106. package/dist/version-KGEG7EPO.js +21 -0
  107. package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-NUQCVOQ3.js} +55 -45
  108. package/dist/worker/entry.js +101 -43
  109. package/docs/README.md +12 -9
  110. package/docs/acp.md +28 -5
  111. package/docs/alcf-provider.md +1 -1
  112. package/docs/architecture.md +23 -2
  113. package/docs/artifact-placement.md +101 -0
  114. package/docs/artifact-versions.md +1 -1
  115. package/docs/built-in-agents.md +4 -2
  116. package/docs/capacity-and-scheduling.md +1 -1
  117. package/docs/commands-and-modes.md +125 -41
  118. package/docs/configuration-and-targets.md +88 -18
  119. package/docs/context-engine.md +6 -2
  120. package/docs/development-pipeline.md +77 -0
  121. package/docs/documentation-coverage.md +4 -4
  122. package/docs/documentation-guide.md +3 -3
  123. package/docs/environment-variables.md +2 -1
  124. package/docs/eval-runner.md +3 -3
  125. package/docs/evals-internal.md +2 -2
  126. package/docs/evidence-and-memory.md +6 -2
  127. package/docs/evolution.md +1 -1
  128. package/docs/exit-codes-and-output.md +1 -1
  129. package/docs/extensions-and-sharing.md +18 -11
  130. package/docs/fleet-demo-runbook.md +22 -23
  131. package/docs/fleet-dispatch.md +111 -12
  132. package/docs/glossary.md +107 -15
  133. package/docs/html/agents_blueprint.html +3 -3
  134. package/docs/html/alcf_blueprint.html +3 -3
  135. package/docs/html/architecture_blueprint.html +3 -3
  136. package/docs/html/commands_blueprint.html +187 -42
  137. package/docs/html/configuration_blueprint.html +7 -7
  138. package/docs/html/context_blueprint.html +3 -3
  139. package/docs/html/documentation_blueprint.html +1 -1
  140. package/docs/html/environment_blueprint.html +3 -3
  141. package/docs/html/eval_blueprint.html +4 -4
  142. package/docs/html/evals_internal_blueprint.html +3 -3
  143. package/docs/html/evolution_blueprint.html +3 -3
  144. package/docs/html/extensions_blueprint.html +3 -3
  145. package/docs/html/fleet_dispatch_blueprint.html +8 -8
  146. package/docs/html/index.html +5 -5
  147. package/docs/html/lifecycle_blueprint.html +4 -4
  148. package/docs/html/memory_blueprint.html +3 -3
  149. package/docs/html/middleware_blueprint.html +3 -3
  150. package/docs/html/models_blueprint.html +2 -2
  151. package/docs/html/observability_blueprint.html +2 -2
  152. package/docs/html/provider_adapter_blueprint.html +3 -3
  153. package/docs/html/safety_blueprint.html +3 -3
  154. package/docs/html/skills_blueprint.html +2 -2
  155. package/docs/html/soak_blueprint.html +3 -3
  156. package/docs/html/tool_usage_blueprint.html +4 -4
  157. package/docs/html/tools_blueprint.html +2 -2
  158. package/docs/html/trace_blueprint.html +3 -3
  159. package/docs/html/tui_design_blueprint.html +100 -40
  160. package/docs/html/validation_blueprint.html +1 -1
  161. package/docs/html/worker_dispatch_blueprint.html +3 -3
  162. package/docs/installation-and-lifecycle.md +62 -11
  163. package/docs/middleware-and-components.md +1 -1
  164. package/docs/model-catalog.md +2 -2
  165. package/docs/observability.md +3 -3
  166. package/docs/proactive-memory.md +12 -12
  167. package/docs/prompt-envelope-and-tools.md +2 -2
  168. package/docs/provider-adapter-cookbook.md +1 -1
  169. package/docs/release-cut-checklist.md +4 -0
  170. package/docs/safety-model.md +21 -5
  171. package/docs/scientific-validation.md +3 -3
  172. package/docs/session-lifecycle.md +2 -2
  173. package/docs/skills-marketplace.md +1 -1
  174. package/docs/time-conventions.md +101 -0
  175. package/docs/tool-usage.md +5 -4
  176. package/docs/trace-store.md +1 -1
  177. package/docs/troubleshooting.md +1 -1
  178. package/docs/tui-design.md +83 -27
  179. package/docs/worker-dispatch-mechanics.md +3 -3
  180. package/package.json +16 -16
  181. package/skills/README.md +5 -6
  182. package/skills/git/file-ticket/SKILL.md +107 -0
  183. package/skills/git/file-ticket/evals.md +54 -0
  184. package/skills/git/fix-issue/SKILL.md +106 -0
  185. package/skills/git/fix-issue/evals.md +71 -0
  186. package/skills/git/ship/SKILL.md +92 -0
  187. package/skills/git/ship/evals.md +72 -0
  188. package/skills/skill-marketplace.json +12 -20
  189. package/src/cli/acp.ts +88 -0
  190. package/src/cli/agents.ts +60 -0
  191. package/src/cli/args.ts +280 -0
  192. package/src/cli/argv.ts +170 -0
  193. package/src/cli/ask.ts +34 -0
  194. package/src/cli/auth.ts +468 -0
  195. package/src/cli/bootstrap-generate.ts +498 -0
  196. package/src/cli/clio.ts +34 -0
  197. package/src/cli/components.ts +195 -0
  198. package/src/cli/config-inspect.ts +330 -0
  199. package/src/cli/config.ts +72 -0
  200. package/src/cli/configure-interop.ts +67 -0
  201. package/src/cli/configure-layout.ts +172 -0
  202. package/src/cli/configure.ts +1487 -0
  203. package/src/cli/context-clear.ts +76 -0
  204. package/src/cli/context-index.ts +102 -0
  205. package/src/cli/context.ts +316 -0
  206. package/src/cli/default-target.ts +63 -0
  207. package/src/cli/docs.ts +340 -0
  208. package/src/cli/doctor.ts +54 -0
  209. package/src/cli/eval.ts +315 -0
  210. package/src/cli/evidence.ts +222 -0
  211. package/src/cli/evolve.ts +219 -0
  212. package/src/cli/extensions.ts +205 -0
  213. package/src/cli/fleet.ts +827 -0
  214. package/src/cli/index.ts +309 -0
  215. package/src/cli/init.ts +219 -0
  216. package/src/cli/initial-message.ts +47 -0
  217. package/src/cli/internal-dispatch.ts +55 -0
  218. package/src/cli/memory.ts +180 -0
  219. package/src/cli/models.ts +257 -0
  220. package/src/cli/modes/json-stream.ts +85 -0
  221. package/src/cli/modes/jsonl.ts +9 -0
  222. package/src/cli/modes/print.ts +589 -0
  223. package/src/cli/oauth-manual-input.ts +72 -0
  224. package/src/cli/oauth-select.ts +36 -0
  225. package/src/cli/output-guard.ts +48 -0
  226. package/src/cli/paths.ts +44 -0
  227. package/src/cli/provider-target.ts +113 -0
  228. package/src/cli/removal.ts +72 -0
  229. package/src/cli/reset.ts +253 -0
  230. package/src/cli/run.ts +497 -0
  231. package/src/cli/share.ts +243 -0
  232. package/src/cli/shared.ts +60 -0
  233. package/src/cli/skills-eval.ts +1225 -0
  234. package/src/cli/skills.ts +470 -0
  235. package/src/cli/steer-channel.ts +86 -0
  236. package/src/cli/targets.ts +1150 -0
  237. package/src/cli/text-layout.ts +102 -0
  238. package/src/cli/trace.ts +274 -0
  239. package/src/cli/uninstall.ts +405 -0
  240. package/src/cli/upgrade.ts +270 -0
  241. package/src/cli/usage.ts +869 -0
  242. package/src/cli/validate-model.ts +28 -0
  243. package/src/cli/version.ts +7 -0
  244. package/src/cli/wiki-generate.ts +509 -0
  245. package/src/core/artifact-paths.ts +43 -0
  246. package/src/core/bash-exec.ts +242 -0
  247. package/src/core/boot-trace.ts +37 -0
  248. package/src/core/bus-events.ts +728 -0
  249. package/src/core/bus-trace.ts +53 -0
  250. package/src/core/c-header-language.ts +265 -0
  251. package/src/core/clio-repo.ts +78 -0
  252. package/src/core/config.ts +1593 -0
  253. package/src/core/context-floor.ts +33 -0
  254. package/src/core/defaults.ts +625 -0
  255. package/src/core/domain-loader.ts +170 -0
  256. package/src/core/event-bus.ts +94 -0
  257. package/src/core/file-references.ts +282 -0
  258. package/src/core/guardrails.ts +185 -0
  259. package/src/core/headless-permission.ts +21 -0
  260. package/src/core/init.ts +223 -0
  261. package/src/core/json-payload.ts +58 -0
  262. package/src/core/package-root.ts +54 -0
  263. package/src/core/path-canonical.ts +37 -0
  264. package/src/core/process-identity.ts +41 -0
  265. package/src/core/recent-models.ts +91 -0
  266. package/src/core/release.ts +2 -0
  267. package/src/core/residency-protection.ts +56 -0
  268. package/src/core/resolve-config-value.ts +88 -0
  269. package/src/core/response-schema.ts +279 -0
  270. package/src/core/run-overrides.ts +77 -0
  271. package/src/core/safe-exec.ts +193 -0
  272. package/src/core/safe-id.ts +37 -0
  273. package/src/core/safe-resource-write.ts +162 -0
  274. package/src/core/session-routing.ts +339 -0
  275. package/src/core/settings-layers.ts +220 -0
  276. package/src/core/shared-bus.ts +8 -0
  277. package/src/core/shell-quote.ts +26 -0
  278. package/src/core/skill-activation.ts +190 -0
  279. package/src/core/startup-timer.ts +37 -0
  280. package/src/core/state-file-lock.ts +207 -0
  281. package/src/core/termination.ts +202 -0
  282. package/src/core/timers.ts +38 -0
  283. package/src/core/tool-names.ts +65 -0
  284. package/src/core/verification-scripts.ts +13 -0
  285. package/src/core/workspace-files.ts +492 -0
  286. package/src/core/xdg.ts +177 -0
  287. package/src/domains/agents/builtins/architect.md +4 -4
  288. package/src/domains/agents/builtins/coder.md +3 -2
  289. package/src/domains/agents/builtins/debugger.md +1 -1
  290. package/src/domains/agents/builtins/documenter.md +1 -1
  291. package/src/domains/agents/builtins/git-master.md +3 -3
  292. package/src/domains/agents/builtins/provenance.md +1 -1
  293. package/src/domains/agents/builtins/researcher.md +1 -1
  294. package/src/domains/agents/builtins/scout.md +1 -1
  295. package/src/domains/agents/builtins/tester.md +1 -1
  296. package/src/domains/agents/builtins/verifier.md +1 -1
  297. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  298. package/src/domains/agents/catalog.ts +172 -0
  299. package/src/domains/agents/contract.ts +16 -0
  300. package/src/domains/agents/extension.ts +110 -0
  301. package/src/domains/agents/fleet-commands.ts +154 -0
  302. package/src/domains/agents/fleet-contract.ts +797 -0
  303. package/src/domains/agents/frontmatter.ts +40 -0
  304. package/src/domains/agents/index.ts +102 -0
  305. package/src/domains/agents/manifest.ts +6 -0
  306. package/src/domains/agents/recipe-schema.ts +202 -0
  307. package/src/domains/agents/recipe.ts +125 -0
  308. package/src/domains/agents/registry.ts +111 -0
  309. package/src/domains/agents/result-contract.ts +1265 -0
  310. package/src/domains/agents/spec.ts +371 -0
  311. package/src/domains/agents/write-boundary.ts +109 -0
  312. package/src/domains/components/diff.ts +99 -0
  313. package/src/domains/components/hash.ts +21 -0
  314. package/src/domains/components/index.ts +3 -0
  315. package/src/domains/components/scan.ts +304 -0
  316. package/src/domains/components/snapshot.ts +108 -0
  317. package/src/domains/components/types.ts +82 -0
  318. package/src/domains/config/agent-namespace.ts +13 -0
  319. package/src/domains/config/classify.ts +94 -0
  320. package/src/domains/config/contract.ts +22 -0
  321. package/src/domains/config/extension.ts +136 -0
  322. package/src/domains/config/index.ts +13 -0
  323. package/src/domains/config/keybindings.ts +164 -0
  324. package/src/domains/config/manifest.ts +6 -0
  325. package/src/domains/config/watcher.ts +41 -0
  326. package/src/domains/context/adoption.ts +880 -0
  327. package/src/domains/context/bootstrap-prompt.ts +273 -0
  328. package/src/domains/context/bootstrap.ts +1409 -0
  329. package/src/domains/context/clear.ts +86 -0
  330. package/src/domains/context/clio-md.ts +327 -0
  331. package/src/domains/context/codewiki/cmake.ts +356 -0
  332. package/src/domains/context/codewiki/cooperative.ts +46 -0
  333. package/src/domains/context/codewiki/digest.ts +135 -0
  334. package/src/domains/context/codewiki/grammar-assets.ts +33 -0
  335. package/src/domains/context/codewiki/indexer.ts +1614 -0
  336. package/src/domains/context/codewiki/tree-sitter.ts +771 -0
  337. package/src/domains/context/contract.ts +62 -0
  338. package/src/domains/context/excluded-dirs.ts +1 -0
  339. package/src/domains/context/extension.ts +407 -0
  340. package/src/domains/context/fingerprint.ts +196 -0
  341. package/src/domains/context/index.ts +164 -0
  342. package/src/domains/context/init-options.ts +69 -0
  343. package/src/domains/context/manifest.ts +6 -0
  344. package/src/domains/context/operator-profile.ts +157 -0
  345. package/src/domains/context/project-metadata.ts +510 -0
  346. package/src/domains/context/project-rules.ts +227 -0
  347. package/src/domains/context/prompt-context.ts +62 -0
  348. package/src/domains/context/refresh.ts +170 -0
  349. package/src/domains/context/sibling-files.ts +10 -0
  350. package/src/domains/context/state.ts +237 -0
  351. package/src/domains/context/wiki/assemble.ts +303 -0
  352. package/src/domains/context/wiki/frontmatter.ts +210 -0
  353. package/src/domains/context/wiki/generate.ts +590 -0
  354. package/src/domains/context/wiki/layout.ts +111 -0
  355. package/src/domains/context/wiki/meta.ts +221 -0
  356. package/src/domains/context/wiki/plan-store.ts +217 -0
  357. package/src/domains/context/wiki/plan.ts +250 -0
  358. package/src/domains/context/wiki/prompts.ts +270 -0
  359. package/src/domains/context/wiki/staleness.ts +198 -0
  360. package/src/domains/dispatch/active-route-planner.ts +168 -0
  361. package/src/domains/dispatch/admission-queue.ts +150 -0
  362. package/src/domains/dispatch/admission.ts +334 -0
  363. package/src/domains/dispatch/agent-candidates.ts +307 -0
  364. package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
  365. package/src/domains/dispatch/agent-ledger-store.ts +257 -0
  366. package/src/domains/dispatch/agent-ledger.ts +212 -0
  367. package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
  368. package/src/domains/dispatch/assignment-events.ts +132 -0
  369. package/src/domains/dispatch/assignment-reconcile.ts +76 -0
  370. package/src/domains/dispatch/assignment-store.ts +162 -0
  371. package/src/domains/dispatch/assignment.ts +278 -0
  372. package/src/domains/dispatch/backoff.ts +59 -0
  373. package/src/domains/dispatch/batch-store.ts +134 -0
  374. package/src/domains/dispatch/batch-tracker.ts +66 -0
  375. package/src/domains/dispatch/capability-match.ts +155 -0
  376. package/src/domains/dispatch/capacity-lease.ts +413 -0
  377. package/src/domains/dispatch/code-step-store.ts +52 -0
  378. package/src/domains/dispatch/code-step.ts +368 -0
  379. package/src/domains/dispatch/contract.ts +278 -0
  380. package/src/domains/dispatch/dedup.ts +133 -0
  381. package/src/domains/dispatch/event-pump.ts +251 -0
  382. package/src/domains/dispatch/execution-handoff.ts +29 -0
  383. package/src/domains/dispatch/execution-plan.ts +328 -0
  384. package/src/domains/dispatch/execution-role.ts +277 -0
  385. package/src/domains/dispatch/execution-scheduler.ts +583 -0
  386. package/src/domains/dispatch/extension.ts +5869 -0
  387. package/src/domains/dispatch/failure-classification.ts +141 -0
  388. package/src/domains/dispatch/fleet-plan.ts +225 -0
  389. package/src/domains/dispatch/fleet-preflight.ts +394 -0
  390. package/src/domains/dispatch/gate-decisions.ts +1040 -0
  391. package/src/domains/dispatch/gate-role-prompts.ts +58 -0
  392. package/src/domains/dispatch/heartbeat.ts +27 -0
  393. package/src/domains/dispatch/index.ts +137 -0
  394. package/src/domains/dispatch/joint-route-adapter.ts +114 -0
  395. package/src/domains/dispatch/joint-route-resolver.ts +283 -0
  396. package/src/domains/dispatch/manifest.ts +6 -0
  397. package/src/domains/dispatch/orphan-recovery.ts +224 -0
  398. package/src/domains/dispatch/outcome.ts +109 -0
  399. package/src/domains/dispatch/phase-timing.ts +47 -0
  400. package/src/domains/dispatch/placement.ts +202 -0
  401. package/src/domains/dispatch/receipt-findings.ts +255 -0
  402. package/src/domains/dispatch/receipt-integrity.ts +378 -0
  403. package/src/domains/dispatch/recovery-candidates.ts +74 -0
  404. package/src/domains/dispatch/reproducibility.ts +48 -0
  405. package/src/domains/dispatch/reservation-store.ts +501 -0
  406. package/src/domains/dispatch/route-approval.ts +177 -0
  407. package/src/domains/dispatch/route-candidates.ts +57 -0
  408. package/src/domains/dispatch/route-decision.ts +1079 -0
  409. package/src/domains/dispatch/route-facts.ts +187 -0
  410. package/src/domains/dispatch/route-history.ts +238 -0
  411. package/src/domains/dispatch/route-observer.ts +488 -0
  412. package/src/domains/dispatch/route-policy.ts +327 -0
  413. package/src/domains/dispatch/route-quality.ts +256 -0
  414. package/src/domains/dispatch/route-readiness.ts +120 -0
  415. package/src/domains/dispatch/routing-intent.ts +287 -0
  416. package/src/domains/dispatch/run-identity.ts +56 -0
  417. package/src/domains/dispatch/scout-transition.ts +130 -0
  418. package/src/domains/dispatch/state.ts +277 -0
  419. package/src/domains/dispatch/tool-stats.ts +132 -0
  420. package/src/domains/dispatch/transport.ts +209 -0
  421. package/src/domains/dispatch/types.ts +785 -0
  422. package/src/domains/dispatch/validation-grounding.ts +154 -0
  423. package/src/domains/dispatch/validation.ts +721 -0
  424. package/src/domains/dispatch/worker-protocol.ts +275 -0
  425. package/src/domains/dispatch/worker-spawn.ts +566 -0
  426. package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
  427. package/src/domains/dispatch/write-boundary.ts +426 -0
  428. package/src/domains/eval/artifacts/redact.ts +42 -0
  429. package/src/domains/eval/artifacts/store.ts +173 -0
  430. package/src/domains/eval/compare/compare.ts +33 -0
  431. package/src/domains/eval/compare/gates.ts +66 -0
  432. package/src/domains/eval/compare/thresholds.ts +92 -0
  433. package/src/domains/eval/harness-metrics.ts +62 -0
  434. package/src/domains/eval/index.ts +66 -0
  435. package/src/domains/eval/metrics/chaos-stream.ts +93 -0
  436. package/src/domains/eval/metrics/context.ts +34 -0
  437. package/src/domains/eval/metrics/coverage.ts +21 -0
  438. package/src/domains/eval/metrics/evidence.ts +182 -0
  439. package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
  440. package/src/domains/eval/metrics/invariants.ts +736 -0
  441. package/src/domains/eval/metrics/latency.ts +4 -0
  442. package/src/domains/eval/metrics/token-stream.ts +139 -0
  443. package/src/domains/eval/metrics/tokens.ts +51 -0
  444. package/src/domains/eval/metrics/tool-calls.ts +7 -0
  445. package/src/domains/eval/proactive-memory.ts +279 -0
  446. package/src/domains/eval/provenance.ts +35 -0
  447. package/src/domains/eval/report.ts +234 -0
  448. package/src/domains/eval/reports/json.ts +5 -0
  449. package/src/domains/eval/reports/junit.ts +23 -0
  450. package/src/domains/eval/reports/markdown.ts +20 -0
  451. package/src/domains/eval/reports/swe-jsonl.ts +16 -0
  452. package/src/domains/eval/reports/text.ts +25 -0
  453. package/src/domains/eval/run-compare.ts +274 -0
  454. package/src/domains/eval/runner.ts +244 -0
  455. package/src/domains/eval/runners/clio-run.ts +148 -0
  456. package/src/domains/eval/runners/context-index.ts +56 -0
  457. package/src/domains/eval/runners/context-init.ts +203 -0
  458. package/src/domains/eval/runners/external-command.ts +350 -0
  459. package/src/domains/eval/runtime-paths.ts +171 -0
  460. package/src/domains/eval/schema/artifact.ts +75 -0
  461. package/src/domains/eval/schema/suite.ts +235 -0
  462. package/src/domains/eval/schema/validate.ts +339 -0
  463. package/src/domains/eval/store.ts +392 -0
  464. package/src/domains/eval/suites/load.ts +74 -0
  465. package/src/domains/eval/suites/matrix.ts +19 -0
  466. package/src/domains/eval/suites/resolve.ts +44 -0
  467. package/src/domains/eval/suites/run.ts +325 -0
  468. package/src/domains/eval/task-file.ts +186 -0
  469. package/src/domains/eval/types.ts +141 -0
  470. package/src/domains/eval/verifiers/command.ts +27 -0
  471. package/src/domains/eval/verifiers/file-exists.ts +6 -0
  472. package/src/domains/eval/verifiers/patch.ts +22 -0
  473. package/src/domains/eval/workspaces/git.ts +41 -0
  474. package/src/domains/eval/workspaces/local.ts +17 -0
  475. package/src/domains/eval/workspaces/temp-copy.ts +29 -0
  476. package/src/domains/evidence/build.ts +1714 -0
  477. package/src/domains/evidence/eval.ts +605 -0
  478. package/src/domains/evidence/failure-attribution.ts +54 -0
  479. package/src/domains/evidence/finish-contract-map.ts +42 -0
  480. package/src/domains/evidence/index.ts +55 -0
  481. package/src/domains/evidence/provenance.ts +200 -0
  482. package/src/domains/evidence/redact.ts +81 -0
  483. package/src/domains/evidence/store.ts +291 -0
  484. package/src/domains/evidence/types.ts +325 -0
  485. package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
  486. package/src/domains/evolution/index.ts +26 -0
  487. package/src/domains/evolution/manifest.ts +154 -0
  488. package/src/domains/evolution/validate.ts +304 -0
  489. package/src/domains/extensions/contract.ts +22 -0
  490. package/src/domains/extensions/discovery.ts +193 -0
  491. package/src/domains/extensions/extension.ts +46 -0
  492. package/src/domains/extensions/index.ts +34 -0
  493. package/src/domains/extensions/manager.ts +30 -0
  494. package/src/domains/extensions/manifest.ts +6 -0
  495. package/src/domains/extensions/resources.ts +38 -0
  496. package/src/domains/extensions/state.ts +224 -0
  497. package/src/domains/extensions/types.ts +83 -0
  498. package/src/domains/interop/consent.ts +185 -0
  499. package/src/domains/interop/contract.ts +29 -0
  500. package/src/domains/interop/detect.ts +173 -0
  501. package/src/domains/interop/extension.ts +59 -0
  502. package/src/domains/interop/index.ts +34 -0
  503. package/src/domains/interop/manifest.ts +6 -0
  504. package/src/domains/interop/registry.ts +139 -0
  505. package/src/domains/interop/state.ts +92 -0
  506. package/src/domains/interop/types.ts +109 -0
  507. package/src/domains/lifecycle/contract.ts +11 -0
  508. package/src/domains/lifecycle/doctor.ts +536 -0
  509. package/src/domains/lifecycle/extension.ts +23 -0
  510. package/src/domains/lifecycle/index.ts +21 -0
  511. package/src/domains/lifecycle/install-method.ts +51 -0
  512. package/src/domains/lifecycle/manifest.ts +6 -0
  513. package/src/domains/lifecycle/migrations/index.ts +94 -0
  514. package/src/domains/lifecycle/state.ts +93 -0
  515. package/src/domains/lifecycle/upgrade-notice.ts +35 -0
  516. package/src/domains/lifecycle/version.ts +35 -0
  517. package/src/domains/memory/index.ts +128 -0
  518. package/src/domains/memory/operations.ts +143 -0
  519. package/src/domains/memory/prompt-section.ts +86 -0
  520. package/src/domains/memory/proposal.ts +180 -0
  521. package/src/domains/memory/store.ts +163 -0
  522. package/src/domains/memory/task-bank.ts +229 -0
  523. package/src/domains/memory/task-memory-handoff.ts +222 -0
  524. package/src/domains/memory/task-memory-policy.ts +602 -0
  525. package/src/domains/memory/task-memory-status.ts +58 -0
  526. package/src/domains/memory/task-memory-telemetry.ts +346 -0
  527. package/src/domains/memory/task-memory-trace.ts +89 -0
  528. package/src/domains/memory/types.ts +74 -0
  529. package/src/domains/memory/validate.ts +297 -0
  530. package/src/domains/middleware/budget.ts +216 -0
  531. package/src/domains/middleware/contract.ts +35 -0
  532. package/src/domains/middleware/dispatch-nudge.ts +469 -0
  533. package/src/domains/middleware/extension.ts +129 -0
  534. package/src/domains/middleware/hook-receipts.ts +70 -0
  535. package/src/domains/middleware/hooks-io.ts +174 -0
  536. package/src/domains/middleware/hooks.ts +432 -0
  537. package/src/domains/middleware/index.ts +154 -0
  538. package/src/domains/middleware/manifest.ts +6 -0
  539. package/src/domains/middleware/memory-intervention.ts +701 -0
  540. package/src/domains/middleware/rules.ts +42 -0
  541. package/src/domains/middleware/runtime.ts +333 -0
  542. package/src/domains/middleware/skills-reminder.ts +187 -0
  543. package/src/domains/middleware/snapshot.ts +71 -0
  544. package/src/domains/middleware/stalled-turn.ts +71 -0
  545. package/src/domains/middleware/task-board-reminder.ts +87 -0
  546. package/src/domains/middleware/task-nudge.ts +77 -0
  547. package/src/domains/middleware/tool-choice-control.ts +42 -0
  548. package/src/domains/middleware/types.ts +131 -0
  549. package/src/domains/middleware/validate.ts +329 -0
  550. package/src/domains/observability/accountability.ts +67 -0
  551. package/src/domains/observability/contract.ts +168 -0
  552. package/src/domains/observability/cost.ts +206 -0
  553. package/src/domains/observability/evidence-index.ts +123 -0
  554. package/src/domains/observability/extension.ts +281 -0
  555. package/src/domains/observability/index.ts +78 -0
  556. package/src/domains/observability/manifest.ts +10 -0
  557. package/src/domains/observability/metrics.ts +37 -0
  558. package/src/domains/observability/projection.ts +477 -0
  559. package/src/domains/observability/telemetry.ts +89 -0
  560. package/src/domains/observability/trace-store.ts +1454 -0
  561. package/src/domains/prompts/compiler.ts +556 -0
  562. package/src/domains/prompts/contract.ts +30 -0
  563. package/src/domains/prompts/extension.ts +304 -0
  564. package/src/domains/prompts/fragment-loader.ts +139 -0
  565. package/src/domains/prompts/fragments/identity/clio.md +3 -2
  566. package/src/domains/prompts/fragments/identity/self-awareness.md +63 -0
  567. package/src/domains/prompts/fragments/operating/contract.md +10 -1
  568. package/src/domains/prompts/hash.ts +73 -0
  569. package/src/domains/prompts/index.ts +32 -0
  570. package/src/domains/prompts/manifest.ts +8 -0
  571. package/src/domains/prompts/memory-intervention.ts +57 -0
  572. package/src/domains/prompts/preload.ts +82 -0
  573. package/src/domains/providers/auth/api-key.ts +47 -0
  574. package/src/domains/providers/auth/backend-file.ts +69 -0
  575. package/src/domains/providers/auth/backend-memory.ts +17 -0
  576. package/src/domains/providers/auth/index.ts +37 -0
  577. package/src/domains/providers/auth/oauth.ts +36 -0
  578. package/src/domains/providers/auth/storage.ts +667 -0
  579. package/src/domains/providers/capabilities.ts +50 -0
  580. package/src/domains/providers/catalog.ts +162 -0
  581. package/src/domains/providers/contract.ts +151 -0
  582. package/src/domains/providers/credentials.ts +20 -0
  583. package/src/domains/providers/eligibility.ts +24 -0
  584. package/src/domains/providers/errors.ts +64 -0
  585. package/src/domains/providers/extension.ts +536 -0
  586. package/src/domains/providers/index.ts +142 -0
  587. package/src/domains/providers/knowledge-base-path.ts +102 -0
  588. package/src/domains/providers/manifest.ts +6 -0
  589. package/src/domains/providers/model-capabilities.ts +136 -0
  590. package/src/domains/providers/model-discovery.ts +144 -0
  591. package/src/domains/providers/model-family.ts +32 -0
  592. package/src/domains/providers/model-runtime-capabilities.ts +712 -0
  593. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +2 -2
  594. package/src/domains/providers/plugins.ts +59 -0
  595. package/src/domains/providers/probe/fingerprint.ts +44 -0
  596. package/src/domains/providers/probe/http.ts +114 -0
  597. package/src/domains/providers/probe/reasoning.ts +111 -0
  598. package/src/domains/providers/registry.ts +166 -0
  599. package/src/domains/providers/resolver.ts +156 -0
  600. package/src/domains/providers/runtime-resolution.ts +720 -0
  601. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
  602. package/src/domains/providers/runtimes/builtins.ts +78 -0
  603. package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
  604. package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
  605. package/src/domains/providers/runtimes/claude/common.ts +55 -0
  606. package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
  607. package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
  608. package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
  609. package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
  610. package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
  611. package/src/domains/providers/runtimes/cloud/google.ts +41 -0
  612. package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
  613. package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
  614. package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
  615. package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
  616. package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
  617. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +32 -0
  618. package/src/domains/providers/runtimes/common/local-synth.ts +165 -0
  619. package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
  620. package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
  621. package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
  622. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
  623. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
  624. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
  625. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
  626. package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
  627. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +491 -0
  628. package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
  629. package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
  630. package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
  631. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
  632. package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
  633. package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
  634. package/src/domains/providers/runtimes/protocol/google.ts +27 -0
  635. package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
  636. package/src/domains/providers/support.ts +238 -0
  637. package/src/domains/providers/thinking-control-policy.ts +85 -0
  638. package/src/domains/providers/types/capability-flags.ts +114 -0
  639. package/src/domains/providers/types/cost-provenance.ts +7 -0
  640. package/src/domains/providers/types/inference.ts +41 -0
  641. package/src/domains/providers/types/knowledge-base.ts +156 -0
  642. package/src/domains/providers/types/local-model-quirks.ts +218 -0
  643. package/src/domains/providers/types/runtime-descriptor.ts +170 -0
  644. package/src/domains/providers/types/target-descriptor.ts +38 -0
  645. package/src/domains/resources/collision.ts +92 -0
  646. package/src/domains/resources/common-loader.ts +140 -0
  647. package/src/domains/resources/contract.ts +25 -0
  648. package/src/domains/resources/extension.ts +61 -0
  649. package/src/domains/resources/index.ts +74 -0
  650. package/src/domains/resources/loader.ts +86 -0
  651. package/src/domains/resources/manifest.ts +6 -0
  652. package/src/domains/resources/prompts/loader.ts +232 -0
  653. package/src/domains/resources/prompts/substitute.ts +65 -0
  654. package/src/domains/resources/skills/content-hash.ts +105 -0
  655. package/src/domains/resources/skills/evals.ts +175 -0
  656. package/src/domains/resources/skills/install.ts +410 -0
  657. package/src/domains/resources/skills/loader.ts +978 -0
  658. package/src/domains/resources/skills/marketplace.ts +255 -0
  659. package/src/domains/resources/skills/provenance-pin.ts +115 -0
  660. package/src/domains/safety/action-classifier.ts +268 -0
  661. package/src/domains/safety/approval-axis.ts +23 -0
  662. package/src/domains/safety/audit.ts +487 -0
  663. package/src/domains/safety/autonomy.ts +174 -0
  664. package/src/domains/safety/call-target.ts +59 -0
  665. package/src/domains/safety/contract.ts +65 -0
  666. package/src/domains/safety/damage-control.ts +44 -0
  667. package/src/domains/safety/default-path-policy.ts +117 -0
  668. package/src/domains/safety/extension.ts +383 -0
  669. package/src/domains/safety/finish-contract-registration.ts +128 -0
  670. package/src/domains/safety/finish-contract.ts +554 -0
  671. package/src/domains/safety/index.ts +44 -0
  672. package/src/domains/safety/loop-detector.ts +143 -0
  673. package/src/domains/safety/manifest.ts +6 -0
  674. package/src/domains/safety/path-policy.ts +164 -0
  675. package/src/domains/safety/policy-engine.ts +994 -0
  676. package/src/domains/safety/project-policy.ts +391 -0
  677. package/src/domains/safety/protected-artifacts-registration.ts +189 -0
  678. package/src/domains/safety/protected-artifacts.ts +993 -0
  679. package/src/domains/safety/rejection-feedback.ts +102 -0
  680. package/src/domains/safety/rigor.ts +72 -0
  681. package/src/domains/safety/rule-compiler.ts +48 -0
  682. package/src/domains/safety/rule-pack-loader.ts +92 -0
  683. package/src/domains/safety/run-effects.ts +197 -0
  684. package/src/domains/safety/scope.ts +61 -0
  685. package/src/domains/scheduling/budget.ts +35 -0
  686. package/src/domains/scheduling/cluster.ts +175 -0
  687. package/src/domains/scheduling/contract.ts +30 -0
  688. package/src/domains/scheduling/extension.ts +91 -0
  689. package/src/domains/scheduling/index.ts +12 -0
  690. package/src/domains/scheduling/manifest.ts +6 -0
  691. package/src/domains/session/archive-readers.ts +208 -0
  692. package/src/domains/session/checkpoint.ts +38 -0
  693. package/src/domains/session/compaction/auto.ts +89 -0
  694. package/src/domains/session/compaction/branch-summary.ts +186 -0
  695. package/src/domains/session/compaction/compact.ts +493 -0
  696. package/src/domains/session/compaction/cut-point.ts +171 -0
  697. package/src/domains/session/compaction/defaults.ts +34 -0
  698. package/src/domains/session/compaction/mask-observations.ts +265 -0
  699. package/src/domains/session/compaction/session-entries.ts +18 -0
  700. package/src/domains/session/compaction/tokens.ts +147 -0
  701. package/src/domains/session/context-accounting.ts +583 -0
  702. package/src/domains/session/context-ledger.ts +348 -0
  703. package/src/domains/session/contract.ts +144 -0
  704. package/src/domains/session/cwd-fallback.ts +65 -0
  705. package/src/domains/session/entries.ts +509 -0
  706. package/src/domains/session/extension.ts +322 -0
  707. package/src/domains/session/history.ts +172 -0
  708. package/src/domains/session/index.ts +84 -0
  709. package/src/domains/session/manager.ts +128 -0
  710. package/src/domains/session/manifest.ts +6 -0
  711. package/src/domains/session/migrations/index.ts +27 -0
  712. package/src/domains/session/prompt-manifest.ts +173 -0
  713. package/src/domains/session/protected-artifact-journal.ts +241 -0
  714. package/src/domains/session/protected-artifacts.ts +90 -0
  715. package/src/domains/session/retry.ts +238 -0
  716. package/src/domains/session/task-board.ts +375 -0
  717. package/src/domains/session/tree/active-path.ts +98 -0
  718. package/src/domains/session/tree/fork.ts +160 -0
  719. package/src/domains/session/tree/manager.ts +128 -0
  720. package/src/domains/session/tree/navigator.ts +177 -0
  721. package/src/domains/session/tree/preview.ts +259 -0
  722. package/src/domains/session/usage.ts +148 -0
  723. package/src/domains/session/workspace/git-probe.ts +161 -0
  724. package/src/domains/session/workspace/index.ts +4 -0
  725. package/src/domains/session/workspace/project-type.ts +217 -0
  726. package/src/domains/session/workspace/snapshot.ts +74 -0
  727. package/src/domains/share/archive.ts +684 -0
  728. package/src/domains/share/contract.ts +9 -0
  729. package/src/domains/share/extension.ts +26 -0
  730. package/src/domains/share/index.ts +28 -0
  731. package/src/domains/share/manifest.ts +6 -0
  732. package/src/engine/acp/adapter.ts +397 -0
  733. package/src/engine/acp/errors.ts +32 -0
  734. package/src/engine/acp/event-mapper.ts +154 -0
  735. package/src/engine/acp/server.ts +656 -0
  736. package/src/engine/acp/tool-mediator.ts +686 -0
  737. package/src/engine/acp/transport.ts +654 -0
  738. package/src/engine/acp/types.ts +170 -0
  739. package/src/engine/agent.ts +29 -0
  740. package/src/engine/ai.ts +202 -0
  741. package/src/engine/alcf-oauth.ts +198 -0
  742. package/src/engine/antigravity/subprocess-runtime.ts +205 -0
  743. package/src/engine/apis/degraded-inference.ts +95 -0
  744. package/src/engine/apis/index.ts +20 -0
  745. package/src/engine/apis/llamacpp-residency.ts +252 -0
  746. package/src/engine/apis/lmstudio-native.ts +1438 -0
  747. package/src/engine/apis/lmstudio-residency.ts +92 -0
  748. package/src/engine/apis/ollama-native.ts +507 -0
  749. package/src/engine/apis/openai-completions.ts +716 -0
  750. package/src/engine/apis/output-budget.ts +99 -0
  751. package/src/engine/apis/residency-lock.ts +29 -0
  752. package/src/engine/apis/residency.ts +640 -0
  753. package/src/engine/apis/resident-models.ts +42 -0
  754. package/src/engine/apis/sampling-overrides.ts +38 -0
  755. package/src/engine/apis/thinking-replay.ts +11 -0
  756. package/src/engine/claude/sdk-runtime.ts +685 -0
  757. package/src/engine/claude/session-id.ts +5 -0
  758. package/src/engine/claude/subprocess-runtime.ts +316 -0
  759. package/src/engine/claude/tool-safety.ts +400 -0
  760. package/src/engine/external-subprocess.ts +23 -0
  761. package/src/engine/harmony-response.ts +165 -0
  762. package/src/engine/loop-guard.ts +1127 -0
  763. package/src/engine/oauth.ts +192 -0
  764. package/src/engine/pi-mono-names.ts +13 -0
  765. package/src/engine/provider-payload.ts +315 -0
  766. package/src/engine/select-list.ts +53 -0
  767. package/src/engine/session.ts +834 -0
  768. package/src/engine/strip-tokenizer-sentinels.ts +125 -0
  769. package/src/engine/tui.ts +103 -0
  770. package/src/engine/types.ts +66 -0
  771. package/src/engine/worker-events.ts +100 -0
  772. package/src/engine/worker-runtime.ts +1022 -0
  773. package/src/engine/worker-tools.ts +203 -0
  774. package/src/entry/orchestrator.ts +1873 -0
  775. package/src/interactive/application-controller.ts +346 -0
  776. package/src/interactive/bus-notices.ts +265 -0
  777. package/src/interactive/chat-loop-messages.ts +626 -0
  778. package/src/interactive/chat-loop-policy.ts +18 -0
  779. package/src/interactive/chat-loop.ts +865 -0
  780. package/src/interactive/chat-panel.ts +1694 -0
  781. package/src/interactive/chat-renderer.ts +1038 -0
  782. package/src/interactive/clio-editor.ts +166 -0
  783. package/src/interactive/command-fallbacks.ts +23 -0
  784. package/src/interactive/command-output.ts +85 -0
  785. package/src/interactive/context-activity.ts +203 -0
  786. package/src/interactive/context-meter.ts +223 -0
  787. package/src/interactive/context-overlay.ts +220 -0
  788. package/src/interactive/cost-overlay.ts +279 -0
  789. package/src/interactive/dispatch-board.ts +1319 -0
  790. package/src/interactive/dispatch-steering.ts +86 -0
  791. package/src/interactive/editor-bash.ts +46 -0
  792. package/src/interactive/editor-steer.ts +51 -0
  793. package/src/interactive/editor-submit.ts +303 -0
  794. package/src/interactive/external-editor.ts +67 -0
  795. package/src/interactive/follow-up-queue-panel.ts +75 -0
  796. package/src/interactive/footer/dashboard.ts +534 -0
  797. package/src/interactive/footer/notifications.ts +275 -0
  798. package/src/interactive/footer/widgets.ts +1246 -0
  799. package/src/interactive/footer-panel.ts +187 -0
  800. package/src/interactive/format-time.ts +85 -0
  801. package/src/interactive/index.ts +11 -0
  802. package/src/interactive/interactive-application.ts +755 -0
  803. package/src/interactive/interactive-event-projection.ts +380 -0
  804. package/src/interactive/interactive-input-runtime.ts +261 -0
  805. package/src/interactive/interactive-presentation.ts +452 -0
  806. package/src/interactive/interactive-shell.ts +134 -0
  807. package/src/interactive/interactive-slash-runtime.ts +492 -0
  808. package/src/interactive/interactive-subscriptions.ts +111 -0
  809. package/src/interactive/interactive-tickers.ts +152 -0
  810. package/src/interactive/keybinding-manager.ts +496 -0
  811. package/src/interactive/layout.ts +20 -0
  812. package/src/interactive/leader-key.ts +143 -0
  813. package/src/interactive/loop-guard-interrupt.ts +101 -0
  814. package/src/interactive/memory-overlay.ts +280 -0
  815. package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
  816. package/src/interactive/overlay-auth-lifecycle.ts +308 -0
  817. package/src/interactive/overlay-frame.ts +502 -0
  818. package/src/interactive/overlay-general-openers.ts +217 -0
  819. package/src/interactive/overlay-key-routing.ts +213 -0
  820. package/src/interactive/overlay-lifecycle.ts +413 -0
  821. package/src/interactive/overlay-model-selectors.ts +127 -0
  822. package/src/interactive/overlay-permission-lifecycle.ts +344 -0
  823. package/src/interactive/overlay-resource-openers.ts +112 -0
  824. package/src/interactive/overlay-session-lifecycle.ts +270 -0
  825. package/src/interactive/overlay-transitions.ts +57 -0
  826. package/src/interactive/overlays/agents.ts +69 -0
  827. package/src/interactive/overlays/ask-user.ts +921 -0
  828. package/src/interactive/overlays/auth-dialog.ts +221 -0
  829. package/src/interactive/overlays/context-reset.ts +108 -0
  830. package/src/interactive/overlays/cwd-fallback.ts +141 -0
  831. package/src/interactive/overlays/extensions.ts +54 -0
  832. package/src/interactive/overlays/help-reference.ts +140 -0
  833. package/src/interactive/overlays/interop.ts +139 -0
  834. package/src/interactive/overlays/keybinding-detail.ts +90 -0
  835. package/src/interactive/overlays/list-overlay.ts +606 -0
  836. package/src/interactive/overlays/message-picker.ts +155 -0
  837. package/src/interactive/overlays/model-selector.ts +1091 -0
  838. package/src/interactive/overlays/prompts.ts +72 -0
  839. package/src/interactive/overlays/session-selector-search.ts +31 -0
  840. package/src/interactive/overlays/session-selector.ts +266 -0
  841. package/src/interactive/overlays/settings.ts +3363 -0
  842. package/src/interactive/overlays/skills-hub.ts +237 -0
  843. package/src/interactive/overlays/tree-selector.ts +387 -0
  844. package/src/interactive/permission-overlay.ts +170 -0
  845. package/src/interactive/render-trace.ts +125 -0
  846. package/src/interactive/renderers/branch-summary.ts +86 -0
  847. package/src/interactive/renderers/code-ink.ts +420 -0
  848. package/src/interactive/renderers/compaction-summary.ts +112 -0
  849. package/src/interactive/renderers/diff.ts +126 -0
  850. package/src/interactive/renderers/notice.ts +28 -0
  851. package/src/interactive/renderers/retry-status.ts +31 -0
  852. package/src/interactive/renderers/structured.ts +89 -0
  853. package/src/interactive/renderers/tool-execution.ts +1104 -0
  854. package/src/interactive/renderers/worker-entry.ts +264 -0
  855. package/src/interactive/session-last-turn.ts +186 -0
  856. package/src/interactive/session-transcript.ts +105 -0
  857. package/src/interactive/session-usage-reseed.ts +74 -0
  858. package/src/interactive/slash-autocomplete.ts +364 -0
  859. package/src/interactive/slash-commands.ts +1319 -0
  860. package/src/interactive/slash-spec.ts +453 -0
  861. package/src/interactive/status/controller.ts +256 -0
  862. package/src/interactive/status/index.ts +23 -0
  863. package/src/interactive/status/state-machine.ts +530 -0
  864. package/src/interactive/status/summary.ts +170 -0
  865. package/src/interactive/status/types.ts +121 -0
  866. package/src/interactive/status/verbs.ts +163 -0
  867. package/src/interactive/status/watchdog.ts +24 -0
  868. package/src/interactive/tasks-overlay.ts +186 -0
  869. package/src/interactive/theme/components.ts +55 -0
  870. package/src/interactive/theme/glyphs.ts +70 -0
  871. package/src/interactive/theme/index.ts +15 -0
  872. package/src/interactive/theme/labels.ts +88 -0
  873. package/src/interactive/theme/rules.ts +138 -0
  874. package/src/interactive/theme/segments.ts +88 -0
  875. package/src/interactive/theme/tokens.ts +121 -0
  876. package/src/interactive/thinking-level-policy.ts +6 -0
  877. package/src/interactive/tool-prose-loop.ts +122 -0
  878. package/src/interactive/tool-prose-registration.ts +48 -0
  879. package/src/interactive/turn-context.ts +854 -0
  880. package/src/interactive/turn-middleware.ts +283 -0
  881. package/src/interactive/turn-persistence.ts +441 -0
  882. package/src/interactive/turn-queues.ts +169 -0
  883. package/src/interactive/turn-recovery.ts +306 -0
  884. package/src/interactive/turn-runtime.ts +802 -0
  885. package/src/interactive/turn-state.ts +123 -0
  886. package/src/interactive/view/artifacts.ts +1342 -0
  887. package/src/interactive/view/view-overlay.ts +732 -0
  888. package/src/interactive/welcome-dashboard.ts +536 -0
  889. package/src/interactive/worker-receipts.ts +94 -0
  890. package/src/interactive/worker-replay.ts +111 -0
  891. package/src/interactive/worker-share.ts +100 -0
  892. package/src/interactive/worker-stream.ts +442 -0
  893. package/src/interactive/workspace-facts.ts +141 -0
  894. package/src/tools/agent-tools.ts +382 -0
  895. package/src/tools/artifact.ts +103 -0
  896. package/src/tools/ask-user.ts +656 -0
  897. package/src/tools/bash.ts +176 -0
  898. package/src/tools/bootstrap.ts +474 -0
  899. package/src/tools/codewiki/code-nav.ts +563 -0
  900. package/src/tools/codewiki/shared.ts +115 -0
  901. package/src/tools/compete-worktrees.ts +898 -0
  902. package/src/tools/context/docs-engine.ts +619 -0
  903. package/src/tools/context/index.ts +435 -0
  904. package/src/tools/credential-present.ts +151 -0
  905. package/src/tools/dispatch-arguments.ts +228 -0
  906. package/src/tools/dispatch-plan.ts +741 -0
  907. package/src/tools/dispatch-scout.ts +461 -0
  908. package/src/tools/dispatch.ts +3338 -0
  909. package/src/tools/edit-diff.ts +534 -0
  910. package/src/tools/edit.ts +128 -0
  911. package/src/tools/executables.ts +22 -0
  912. package/src/tools/file-mutation-queue.ts +35 -0
  913. package/src/tools/find.ts +292 -0
  914. package/src/tools/grep.ts +495 -0
  915. package/src/tools/ignore-policy.ts +169 -0
  916. package/src/tools/ledger.ts +206 -0
  917. package/src/tools/ls.ts +110 -0
  918. package/src/tools/monitor.ts +797 -0
  919. package/src/tools/network-policy.ts +29 -0
  920. package/src/tools/observation.ts +421 -0
  921. package/src/tools/observers.ts +99 -0
  922. package/src/tools/path-utils.ts +79 -0
  923. package/src/tools/policy.ts +154 -0
  924. package/src/tools/profiles.ts +108 -0
  925. package/src/tools/read.ts +173 -0
  926. package/src/tools/registry.ts +1157 -0
  927. package/src/tools/result-shaping.ts +204 -0
  928. package/src/tools/safe-exec.ts +128 -0
  929. package/src/tools/spawn-hygiene.ts +182 -0
  930. package/src/tools/steer.ts +88 -0
  931. package/src/tools/string-enum.ts +15 -0
  932. package/src/tools/tasks.ts +168 -0
  933. package/src/tools/truncate-utf8.ts +17 -0
  934. package/src/tools/truncate.ts +202 -0
  935. package/src/tools/verify/frontend.ts +685 -0
  936. package/src/tools/verify/index.ts +66 -0
  937. package/src/tools/verify/scripts.ts +108 -0
  938. package/src/tools/web-fetch.ts +777 -0
  939. package/src/tools/worker-evidence.ts +215 -0
  940. package/src/tools/write.ts +52 -0
  941. package/src/utils/exif-orientation.ts +192 -0
  942. package/src/utils/git.ts +24 -0
  943. package/src/utils/image-resize.ts +148 -0
  944. package/src/utils/photon.ts +103 -0
  945. package/src/worker/control-lane.ts +22 -0
  946. package/src/worker/entry.ts +257 -0
  947. package/src/worker/event-projection.ts +56 -0
  948. package/src/worker/heartbeat.ts +24 -0
  949. package/src/worker/ledger-mirror.ts +95 -0
  950. package/src/worker/ndjson.ts +40 -0
  951. package/src/worker/protocol.ts +529 -0
  952. package/src/worker/resource-facts.ts +79 -0
  953. package/src/worker/runtime-registry.ts +12 -0
  954. package/src/worker/spec-contract.ts +654 -0
  955. package/src/worker/stdin-demux.ts +316 -0
  956. package/dist/acp-UMLFVA3F.js +0 -92
  957. package/dist/chunk-262G75JS.js +0 -35
  958. package/dist/chunk-5LDRNKX2.js +0 -1063
  959. package/dist/chunk-67MTHP2E.js +0 -135
  960. package/dist/chunk-GOTUR54M.js +0 -9
  961. package/dist/chunk-TPOCL34A.js +0 -2876
  962. package/dist/chunk-XV4ZJ6ZM.js +0 -3177
  963. package/dist/clio-KIQ5SNDS.js +0 -53
  964. package/dist/configure-G4E3A2PG.js +0 -27
  965. package/dist/doctor-M5HJJZOL.js +0 -61
  966. package/dist/domains/agents/builtins/architect.md +0 -33
  967. package/dist/domains/agents/builtins/coder.md +0 -31
  968. package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
  969. package/dist/domains/agents/builtins/debugger.md +0 -30
  970. package/dist/domains/agents/builtins/documenter.md +0 -31
  971. package/dist/domains/agents/builtins/git-master.md +0 -30
  972. package/dist/domains/agents/builtins/provenance.md +0 -30
  973. package/dist/domains/agents/builtins/researcher.md +0 -71
  974. package/dist/domains/agents/builtins/scout.md +0 -42
  975. package/dist/domains/agents/builtins/tester.md +0 -31
  976. package/dist/domains/agents/builtins/verifier.md +0 -30
  977. package/dist/domains/agents/builtins/wiki-writer.md +0 -41
  978. package/dist/fleet-preflight-CLIAX7YR.js +0 -21
  979. package/dist/preload-KZVHET2B.js +0 -11
  980. package/dist/version-ROZ6CZKH.js +0 -16
  981. package/skills/git/commit-crafting/SKILL.md +0 -79
  982. package/skills/git/commit-crafting/evals.md +0 -92
  983. package/skills/git/create-pr/SKILL.md +0 -116
  984. package/skills/git/create-pr/evals.md +0 -114
  985. package/skills/git/investigate-issue/SKILL.md +0 -139
  986. package/skills/git/investigate-issue/evals.md +0 -94
  987. package/skills/git/review-changes/SKILL.md +0 -103
  988. 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
+ };