@iowarp/clio-coder 0.3.3 → 0.3.6

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 (370) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/CONTRIBUTING.md +7 -7
  3. package/README.md +3 -3
  4. package/dist/{acp-P2AQILE2.js → acp-2BEHC4DL.js} +9 -8
  5. package/dist/{agents-72W3BI7I.js → agents-LNNFTM53.js} +29 -24
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-5TWEIYDN.js → auth-KXXFI2VS.js} +14 -10
  8. package/dist/{chunk-GGXXDWE4.js → chunk-22NAGB7X.js} +2 -2
  9. package/dist/{chunk-YCWGATWI.js → chunk-24I7BN55.js} +2 -2
  10. package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
  11. package/dist/chunk-3BPUFZDL.js +37 -0
  12. package/dist/chunk-43AOLP7E.js +375 -0
  13. package/dist/{chunk-ZDOOVTXZ.js → chunk-4OC57DA6.js} +27 -4
  14. package/dist/{chunk-6SGHMWE3.js → chunk-5JGRAMKL.js} +5 -5
  15. package/dist/{chunk-V6RTAOC2.js → chunk-6US73PDB.js} +572 -51
  16. package/dist/{chunk-5UFT4SUX.js → chunk-6XXKFVSN.js} +3 -3
  17. package/dist/{chunk-A3CYT5EX.js → chunk-AD2SYQYC.js} +55 -2
  18. package/dist/chunk-AOCYTWAV.js +449 -0
  19. package/dist/chunk-CFGTUFWB.js +67 -0
  20. package/dist/chunk-CJUB2JJ2.js +1478 -0
  21. package/dist/{chunk-FNTMWMX5.js → chunk-CKXWIANG.js} +14 -12
  22. package/dist/{chunk-PIWWS5BL.js → chunk-CYQKWTG3.js} +63 -78
  23. package/dist/{chunk-LZSJBIVT.js → chunk-DJVECN66.js} +271 -762
  24. package/dist/{chunk-CBCAPZAA.js → chunk-E25LMLRW.js} +2 -2
  25. package/dist/{chunk-ZWMF7253.js → chunk-E2ER4LJF.js} +304 -9
  26. package/dist/{chunk-STBPMHSX.js → chunk-EKY57CSP.js} +51 -84
  27. package/dist/{chunk-DUYJ5IO6.js → chunk-EYPA3EGJ.js} +12 -4
  28. package/dist/{chunk-M6SHUN7Q.js → chunk-FO5ZOVUY.js} +2 -2
  29. package/dist/chunk-FYYLNIL5.js +313 -0
  30. package/dist/{chunk-OQ33BKR3.js → chunk-G7MUEIGA.js} +3 -60
  31. package/dist/chunk-GEYXPTRF.js +613 -0
  32. package/dist/chunk-GOXNB3AO.js +261 -0
  33. package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
  34. package/dist/chunk-HWUFFB6L.js +83 -0
  35. package/dist/{chunk-4XUGQOHA.js → chunk-K7T3E2SR.js} +15 -8
  36. package/dist/chunk-K7VKOLQQ.js +15 -0
  37. package/dist/{chunk-UFIIWP2H.js → chunk-KHSFENX2.js} +8 -8
  38. package/dist/{chunk-BMEMKKIT.js → chunk-KOHPCX4K.js} +2 -2
  39. package/dist/chunk-LCGCVYZ4.js +57 -0
  40. package/dist/chunk-LL4KHSZI.js +22 -0
  41. package/dist/{chunk-PAJK6MAQ.js → chunk-LYF7OHWH.js} +42 -15
  42. package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
  43. package/dist/{chunk-5UUP6MWO.js → chunk-MV3K5QF2.js} +5 -436
  44. package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
  45. package/dist/{chunk-TZK7PACC.js → chunk-NILBFAPG.js} +14 -8
  46. package/dist/chunk-ODFEOB4F.js +1082 -0
  47. package/dist/{chunk-AGYYIBLL.js → chunk-OH3TOQTB.js} +6 -2
  48. package/dist/chunk-OZNBF4L3.js +23 -0
  49. package/dist/{chunk-DSELYM6W.js → chunk-PBTHKCPN.js} +30 -10
  50. package/dist/{verify-375KUB3Y.js → chunk-PCZJO5TI.js} +127 -42
  51. package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
  52. package/dist/{chunk-SRDMMSEP.js → chunk-QM3F2GKX.js} +1063 -1645
  53. package/dist/{chunk-X6IAEBZR.js → chunk-QNQHSOLF.js} +7 -7
  54. package/dist/{chunk-OC7FIQPC.js → chunk-R46L2BIR.js} +10 -7
  55. package/dist/{chunk-2TLUCQVG.js → chunk-RD5U66HV.js} +3 -3
  56. package/dist/{chunk-6N5PTWMY.js → chunk-RY3LY4J5.js} +50 -13
  57. package/dist/{chunk-OKGUZO2U.js → chunk-SPULKLCF.js} +4 -3
  58. package/dist/{chunk-OOJYHWRB.js → chunk-TSHXZTOQ.js} +6 -5
  59. package/dist/chunk-TZSKNMZG.js +434 -0
  60. package/dist/{chunk-7MNJORFF.js → chunk-UL3WSD3F.js} +6 -1
  61. package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
  62. package/dist/{chunk-COU2UHX6.js → chunk-VEZEGCGW.js} +170 -2
  63. package/dist/chunk-W6GROXXM.js +69 -0
  64. package/dist/{chunk-OAO4GE4M.js → chunk-WHGPSPT5.js} +2 -2
  65. package/dist/chunk-WHJYKASB.js +677 -0
  66. package/dist/{chunk-ORBHGJC5.js → chunk-WR67VIZY.js} +3 -3
  67. package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
  68. package/dist/{chunk-TZTZS7QK.js → chunk-XE2VEJHX.js} +5 -3
  69. package/dist/{chunk-LM5TQCJZ.js → chunk-XF5N4U5A.js} +8 -7
  70. package/dist/{chunk-LWLEKMDQ.js → chunk-XXQNGV4M.js} +1073 -552
  71. package/dist/{chunk-KZWTDYJF.js → chunk-XYDYPRZI.js} +7 -7
  72. package/dist/chunk-ZGVHUX3M.js +66 -0
  73. package/dist/{chunk-LW6DSM3M.js → chunk-ZRGEBJ4T.js} +1192 -1119
  74. package/dist/{chunk-2DJ2KNFG.js → chunk-ZXF4XRKW.js} +202 -40
  75. package/dist/chunk-ZZMN5OM4.js +122 -0
  76. package/dist/cli/index.js +34 -30
  77. package/dist/{clio-JOU4FXVA.js → clio-M2KGYUFZ.js} +7 -6
  78. package/dist/{code-nav-7AX6FYE6.js → code-nav-GQNL7XA6.js} +8 -6
  79. package/dist/codewiki/build-worker.js +4 -4
  80. package/dist/{components-KELWS457.js → components-5TTYYX6G.js} +3 -3
  81. package/dist/{config-XCDVKR23.js → config-XUUYQIWO.js} +47 -35
  82. package/dist/{configure-4GAP54ZW.js → configure-IHJ7YOMV.js} +18 -15
  83. package/dist/{context-77FM5DV5.js → context-74JLXAWD.js} +18 -10
  84. package/dist/{context-4UOGGLQ5.js → context-75MIWW3U.js} +41 -29
  85. package/dist/{context-5VKGUVJJ.js → context-ZQ7SIFJV.js} +85 -9
  86. package/dist/{context-clear-XXJRLCJJ.js → context-clear-GYKWNUML.js} +41 -29
  87. package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
  88. package/dist/context-working-set-UX5KEP4J.js +1553 -0
  89. package/dist/{dispatch-runner-QPRDDBDX.js → dispatch-runner-GIJBHNFL.js} +47 -32
  90. package/dist/{docs-2C2LTVT2.js → docs-6FZSCG5B.js} +3 -3
  91. package/dist/{doctor-HR46URBJ.js → doctor-SVJ5BZCW.js} +12 -12
  92. package/dist/{eval-XSSNATB4.js → eval-CG6LLBLD.js} +54 -238
  93. package/dist/{evidence-6HG2PY2B.js → evidence-ZYFIEN42.js} +57 -28
  94. package/dist/{evolve-K7YU3NCY.js → evolve-QGEXEMDW.js} +36 -25
  95. package/dist/{extensions-QVDOHDGJ.js → extensions-ADGNCJJD.js} +3 -3
  96. package/dist/{fleet-VY3HHKN6.js → fleet-S5R4ZOQY.js} +73 -44
  97. package/dist/{fleet-preflight-DDN536IT.js → fleet-preflight-BHSNPBMH.js} +3 -3
  98. package/dist/{init-JYGXI3FK.js → init-5DRU55YR.js} +49 -37
  99. package/dist/memory-7YKKR6UC.js +467 -0
  100. package/dist/{models-I5QWSEOM.js → models-ZPOLRU2C.js} +24 -21
  101. package/dist/{monitor-GE4ID3IA.js → monitor-US5F5YGZ.js} +73 -46
  102. package/dist/{orchestrator-EM5MC3HM.js → orchestrator-E2AL4T5N.js} +1624 -1007
  103. package/dist/{paths-UXLN5YYZ.js → paths-E7KYAQWE.js} +3 -3
  104. package/dist/{reset-L2FQEE3E.js → reset-KZ652EK6.js} +6 -5
  105. package/dist/{run-ZU3QMZPZ.js → run-SRNBKDWD.js} +76 -54
  106. package/dist/{share-S5BZQC5I.js → share-CGZE33UP.js} +7 -6
  107. package/dist/{skills-X5VXCRNQ.js → skills-S2X4DLY5.js} +4 -4
  108. package/dist/{skills-eval-WKIHWTHR.js → skills-eval-W2GGIC4R.js} +40 -29
  109. package/dist/{targets-SNCPI2NR.js → targets-54SWINWB.js} +28 -23
  110. package/dist/{terminal-lease-BNAHVHBS.js → terminal-lease-SAIF2OGY.js} +6 -4
  111. package/dist/{uninstall-FZCQCDKC.js → uninstall-BVLWXKBT.js} +3 -3
  112. package/dist/{upgrade-JQHHPQ4K.js → upgrade-JKAR27XC.js} +20 -19
  113. package/dist/{usage-OR4O5SMZ.js → usage-MSAWCLX4.js} +79 -36
  114. package/dist/verifiers-NCBTHHN2.js +1220 -0
  115. package/dist/verify-X5HDROLA.js +25 -0
  116. package/dist/{wiki-generate-UEXP2ARI.js → wiki-generate-GUSOQ6ZP.js} +50 -37
  117. package/dist/worker/entry.js +90 -70
  118. package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
  119. package/docs/README.md +8 -7
  120. package/docs/acp.md +1 -1
  121. package/docs/alcf-provider.md +1 -1
  122. package/docs/architecture.md +2 -2
  123. package/docs/artifact-placement.md +1 -2
  124. package/docs/artifact-versions.md +1 -1
  125. package/docs/built-in-agents.md +1 -1
  126. package/docs/capacity-and-scheduling.md +1 -1
  127. package/docs/commands-and-modes.md +60 -26
  128. package/docs/config-knobs-audit.md +1 -2
  129. package/docs/configuration-and-targets.md +26 -1
  130. package/docs/context-engine.md +67 -13
  131. package/docs/context-working-set.md +194 -0
  132. package/docs/development-pipeline.md +1 -1
  133. package/docs/documentation-coverage.md +6 -6
  134. package/docs/documentation-guide.md +7 -6
  135. package/docs/environment-variables.md +2 -1
  136. package/docs/eval-runner.md +1 -1
  137. package/docs/evals-internal.md +4 -32
  138. package/docs/evidence-and-memory.md +139 -7
  139. package/docs/evolution.md +1 -1
  140. package/docs/exit-codes-and-output.md +1 -1
  141. package/docs/extensions-and-sharing.md +2 -2
  142. package/docs/fleet-dispatch.md +49 -8
  143. package/docs/glossary.md +21 -1
  144. package/docs/installation-and-lifecycle.md +2 -2
  145. package/docs/middleware-and-components.md +19 -2
  146. package/docs/model-catalog.md +7 -9
  147. package/docs/observability.md +4 -4
  148. package/docs/proactive-memory.md +26 -16
  149. package/docs/prompt-envelope-and-tools.md +7 -5
  150. package/docs/provider-adapter-cookbook.md +1 -1
  151. package/docs/release-cut-checklist.md +43 -40
  152. package/docs/safety-model.md +49 -8
  153. package/docs/scientific-validation.md +21 -3
  154. package/docs/session-lifecycle.md +3 -3
  155. package/docs/skills-marketplace.md +1 -1
  156. package/docs/tool-usage.md +79 -12
  157. package/docs/trace-store.md +1 -1
  158. package/docs/troubleshooting.md +1 -1
  159. package/docs/tui-design.md +38 -4
  160. package/docs/worker-dispatch-mechanics.md +11 -1
  161. package/package.json +13 -13
  162. package/skills/meta/clio-test/SKILL.md +20 -17
  163. package/skills/meta/clio-test/evals.md +3 -3
  164. package/skills/meta/clio-test/references/harness.md +35 -6
  165. package/skills/meta/clio-test/references/test-map.md +20 -10
  166. package/skills/registry.yaml +2 -2
  167. package/skills/skill-marketplace.json +1 -1
  168. package/src/cli/agents.ts +2 -3
  169. package/src/cli/argv.ts +14 -1
  170. package/src/cli/context-working-set.ts +513 -0
  171. package/src/cli/context.ts +8 -0
  172. package/src/cli/evidence.ts +20 -2
  173. package/src/cli/fleet.ts +15 -0
  174. package/src/cli/index.ts +5 -1
  175. package/src/cli/memory.ts +272 -10
  176. package/src/cli/modes/json-stream.ts +2 -2
  177. package/src/cli/modes/print.ts +12 -1
  178. package/src/cli/run.ts +22 -2
  179. package/src/cli/targets.ts +12 -3
  180. package/src/cli/usage.ts +55 -7
  181. package/src/cli/verifiers.ts +325 -0
  182. package/src/core/bash-exec.ts +39 -14
  183. package/src/core/bus-events.ts +22 -4
  184. package/src/core/config.ts +54 -0
  185. package/src/core/defaults.ts +50 -3
  186. package/src/core/response-model-id.ts +134 -0
  187. package/src/core/toml.ts +62 -0
  188. package/src/core/verification-scripts.ts +6 -0
  189. package/src/core/workspace-files.ts +0 -1
  190. package/src/domains/agents/builtins/architect.md +1 -1
  191. package/src/domains/agents/builtins/verifier.md +3 -0
  192. package/src/domains/agents/catalog.ts +5 -4
  193. package/src/domains/agents/recipe.ts +54 -14
  194. package/src/domains/agents/result-contract.ts +7 -4
  195. package/src/domains/config/classify.ts +1 -0
  196. package/src/domains/context/bootstrap.ts +36 -27
  197. package/src/domains/context/project-metadata.ts +19 -63
  198. package/src/domains/context/prompt-context.ts +8 -0
  199. package/src/domains/context/working-set/contract.ts +161 -0
  200. package/src/domains/context/working-set/defaults.ts +28 -0
  201. package/src/domains/context/working-set/engine.ts +203 -0
  202. package/src/domains/context/working-set/fold.ts +62 -0
  203. package/src/domains/context/working-set/horizon.ts +38 -0
  204. package/src/domains/context/working-set/marker.ts +103 -0
  205. package/src/domains/context/working-set/path-index.ts +436 -0
  206. package/src/domains/context/working-set/payload.ts +152 -0
  207. package/src/domains/context/working-set/policies/age-horizon.ts +55 -0
  208. package/src/domains/context/working-set/policies/index.ts +20 -0
  209. package/src/domains/context/working-set/policies/structural.ts +160 -0
  210. package/src/domains/context/working-set/project.ts +132 -0
  211. package/src/domains/context/working-set/protect.ts +109 -0
  212. package/src/domains/context/working-set/recall.ts +177 -0
  213. package/src/domains/context/working-set/replay/controls.ts +112 -0
  214. package/src/domains/context/working-set/replay/load-clio.ts +199 -0
  215. package/src/domains/context/working-set/replay/metrics.ts +185 -0
  216. package/src/domains/context/working-set/replay/reference-graph.ts +79 -0
  217. package/src/domains/context/working-set/replay/report.ts +139 -0
  218. package/src/domains/context/working-set/replay/runner.ts +325 -0
  219. package/src/domains/context/working-set/replay/synthetic.ts +422 -0
  220. package/src/domains/context/working-set/replay/trace.ts +21 -0
  221. package/src/domains/context/working-set/visible.ts +54 -0
  222. package/src/domains/dispatch/budget-envelope.ts +396 -0
  223. package/src/domains/dispatch/contract.ts +2 -0
  224. package/src/domains/dispatch/extension.ts +81 -27
  225. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  226. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  227. package/src/domains/dispatch/state.ts +1 -0
  228. package/src/domains/dispatch/types.ts +10 -3
  229. package/src/domains/dispatch/validation.ts +14 -0
  230. package/src/domains/dispatch/worker-spawn.ts +14 -3
  231. package/src/domains/eval/metrics/evidence.ts +0 -116
  232. package/src/domains/eval/metrics/invariants.ts +1 -1
  233. package/src/domains/eval/runners/clio-run.ts +1 -10
  234. package/src/domains/eval/runners/external-command.ts +2 -29
  235. package/src/domains/eval/schema/suite.ts +0 -7
  236. package/src/domains/eval/suites/run.ts +1 -7
  237. package/src/domains/evidence/build.ts +112 -45
  238. package/src/domains/evidence/eval.ts +24 -7
  239. package/src/domains/evidence/index.ts +53 -0
  240. package/src/domains/evidence/ordering.ts +12 -0
  241. package/src/domains/evidence/run-trust.ts +221 -0
  242. package/src/domains/evidence/store.ts +46 -6
  243. package/src/domains/evidence/trust-status.ts +854 -0
  244. package/src/domains/evidence/types.ts +26 -0
  245. package/src/domains/memory/index.ts +22 -0
  246. package/src/domains/memory/operations.ts +58 -1
  247. package/src/domains/memory/promotion.ts +281 -0
  248. package/src/domains/memory/prompt-section.ts +25 -5
  249. package/src/domains/memory/proposal.ts +51 -7
  250. package/src/domains/memory/task-bank.ts +3 -2
  251. package/src/domains/memory/task-memory-handoff.ts +181 -24
  252. package/src/domains/memory/task-memory-policy.ts +3 -1
  253. package/src/domains/memory/types.ts +37 -0
  254. package/src/domains/memory/validate.ts +178 -0
  255. package/src/domains/middleware/memory-intervention.ts +38 -25
  256. package/src/domains/middleware/runtime.ts +6 -0
  257. package/src/domains/middleware/skills-reminder.ts +19 -4
  258. package/src/domains/middleware/stalled-turn.ts +208 -5
  259. package/src/domains/middleware/types.ts +10 -0
  260. package/src/domains/observability/contract.ts +6 -1
  261. package/src/domains/observability/cost.ts +20 -4
  262. package/src/domains/observability/extension.ts +2 -2
  263. package/src/domains/providers/index.ts +3 -0
  264. package/src/domains/providers/model-discovery.ts +9 -0
  265. package/src/domains/providers/runtime-resolution.ts +38 -1
  266. package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
  267. package/src/domains/providers/types/context-window-slots.ts +18 -0
  268. package/src/domains/providers/types/runtime-descriptor.ts +3 -1
  269. package/src/domains/safety/autonomy.ts +1 -1
  270. package/src/domains/safety/call-target.ts +211 -14
  271. package/src/domains/safety/decision-presentation.ts +268 -0
  272. package/src/domains/safety/default-path-policy.ts +8 -0
  273. package/src/domains/safety/finish-contract.ts +4 -3
  274. package/src/domains/safety/policy-engine.ts +48 -6
  275. package/src/domains/safety/redaction.ts +73 -0
  276. package/src/domains/session/compaction/compact.ts +23 -1
  277. package/src/domains/session/compaction/cut-point.ts +2 -0
  278. package/src/domains/session/compaction/tokens.ts +16 -1
  279. package/src/domains/session/context-ledger.ts +12 -1
  280. package/src/domains/session/decision-board.ts +4 -0
  281. package/src/domains/session/entries.ts +110 -1
  282. package/src/domains/session/history.ts +68 -19
  283. package/src/domains/session/manager.ts +9 -2
  284. package/src/domains/session/migrations/index.ts +22 -3
  285. package/src/domains/session/usage.ts +24 -7
  286. package/src/engine/acp/event-mapper.ts +7 -0
  287. package/src/engine/acp/server.ts +32 -2
  288. package/src/engine/agent.ts +18 -1
  289. package/src/engine/apis/lmstudio.ts +25 -4
  290. package/src/engine/apis/openai-completions.ts +147 -22
  291. package/src/engine/claude/sdk-runtime.ts +8 -2
  292. package/src/engine/claude/tool-safety.ts +13 -0
  293. package/src/engine/loop-guard.ts +27 -3
  294. package/src/engine/session.ts +9 -3
  295. package/src/engine/worker-events.ts +4 -3
  296. package/src/engine/worker-runtime.ts +59 -54
  297. package/src/entry/orchestrator.ts +34 -5
  298. package/src/interactive/chat-loop-messages.ts +40 -6
  299. package/src/interactive/chat-loop.ts +13 -0
  300. package/src/interactive/chat-panel.ts +17 -1
  301. package/src/interactive/chat-renderer.ts +49 -24
  302. package/src/interactive/clio-editor.ts +44 -7
  303. package/src/interactive/context-meter.ts +10 -0
  304. package/src/interactive/context-overlay.ts +120 -7
  305. package/src/interactive/context-recall-command.ts +110 -0
  306. package/src/interactive/cost-overlay.ts +39 -8
  307. package/src/interactive/dispatch-board.ts +212 -35
  308. package/src/interactive/footer/widgets.ts +13 -0
  309. package/src/interactive/interactive-application.ts +6 -1
  310. package/src/interactive/interactive-input-runtime.ts +11 -1
  311. package/src/interactive/interactive-presentation.ts +11 -1
  312. package/src/interactive/interactive-slash-runtime.ts +37 -1
  313. package/src/interactive/memory-overlay.ts +89 -4
  314. package/src/interactive/model-session-replay.ts +21 -0
  315. package/src/interactive/overlay-ask-user-lifecycle.ts +1 -1
  316. package/src/interactive/overlay-frame.ts +5 -2
  317. package/src/interactive/overlay-general-openers.ts +46 -1
  318. package/src/interactive/overlay-key-routing.ts +41 -1
  319. package/src/interactive/overlay-lifecycle.ts +11 -4
  320. package/src/interactive/overlay-permission-lifecycle.ts +23 -8
  321. package/src/interactive/overlay-session-lifecycle.ts +8 -4
  322. package/src/interactive/overlay-transitions.ts +11 -0
  323. package/src/interactive/overlays/ask-user.ts +74 -30
  324. package/src/interactive/overlays/decisions.ts +3 -1
  325. package/src/interactive/permission-hint.ts +35 -0
  326. package/src/interactive/permission-overlay.ts +95 -45
  327. package/src/interactive/renderers/tool-execution.ts +37 -51
  328. package/src/interactive/session-last-turn.ts +8 -1
  329. package/src/interactive/session-transcript.ts +2 -2
  330. package/src/interactive/session-usage-reseed.ts +36 -10
  331. package/src/interactive/slash-commands.ts +31 -4
  332. package/src/interactive/status/summary.ts +5 -0
  333. package/src/interactive/status/types.ts +5 -0
  334. package/src/interactive/terminal-lease.ts +1 -0
  335. package/src/interactive/turn-context.ts +333 -110
  336. package/src/interactive/turn-middleware.ts +7 -6
  337. package/src/interactive/turn-runtime.ts +37 -8
  338. package/src/interactive/turn-state.ts +3 -0
  339. package/src/interactive/worker-progress.ts +440 -0
  340. package/src/interactive/worker-stream.ts +51 -110
  341. package/src/tools/agent-tools.ts +39 -7
  342. package/src/tools/ask-user.ts +21 -1
  343. package/src/tools/bash.ts +144 -82
  344. package/src/tools/builtin-tool-catalog.ts +11 -5
  345. package/src/tools/context/index.ts +107 -5
  346. package/src/tools/context/surface.ts +3 -2
  347. package/src/tools/core-bootstrap.ts +21 -0
  348. package/src/tools/dispatch-arguments.ts +8 -0
  349. package/src/tools/dispatch-event-text.ts +19 -0
  350. package/src/tools/dispatch-runner.ts +9 -7
  351. package/src/tools/dispatch.ts +24 -1
  352. package/src/tools/monitor.ts +43 -20
  353. package/src/tools/registry.ts +72 -10
  354. package/src/tools/result-disposition.ts +706 -0
  355. package/src/tools/result-shaping.ts +321 -20
  356. package/src/tools/safe-exec.ts +2 -0
  357. package/src/tools/verify/authoring.ts +1120 -0
  358. package/src/tools/verify/catalog.ts +346 -0
  359. package/src/tools/verify/index.ts +13 -3
  360. package/src/tools/verify/scripts.ts +135 -37
  361. package/src/tools/verify/surface.ts +9 -5
  362. package/src/tools/worker-evidence.ts +54 -12
  363. package/src/worker/spec-contract.ts +43 -3
  364. package/dist/chunk-J7CWMCQD.js +0 -255
  365. package/dist/chunk-T6YILFSB.js +0 -80
  366. package/dist/chunk-VAKQQHWR.js +0 -434
  367. package/dist/chunk-VPAYEGVX.js +0 -184
  368. package/dist/chunk-XBXAASKX.js +0 -18
  369. package/dist/memory-WFZMGYHX.js +0 -236
  370. package/src/domains/eval/metrics/chaos-stream.ts +0 -93
@@ -0,0 +1,313 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ isProjectVerifierCheckId
4
+ } from "./chunk-UL3WSD3F.js";
5
+ import {
6
+ SAFE_EXEC_DEFAULT_TIMEOUT_MS,
7
+ resolveSafeCwd
8
+ } from "./chunk-VEZEGCGW.js";
9
+ import {
10
+ require_dist
11
+ } from "./chunk-APJ265NV.js";
12
+ import {
13
+ __toESM,
14
+ init_esm_shims
15
+ } from "./chunk-3R73A4XB.js";
16
+
17
+ // src/tools/verify/catalog.ts
18
+ init_esm_shims();
19
+ var import_yaml = __toESM(require_dist(), 1);
20
+ import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
21
+ import path from "node:path";
22
+
23
+ // src/domains/evidence/ordering.ts
24
+ init_esm_shims();
25
+ function compareCodepoints(left, right) {
26
+ return left < right ? -1 : left > right ? 1 : 0;
27
+ }
28
+
29
+ // src/tools/verify/catalog.ts
30
+ var PROJECT_VERIFIER_CATALOG_RELATIVE_PATH = ".clio-coder/verifiers.yaml";
31
+ var PROJECT_VERIFIER_CATALOG_VERSION = 1;
32
+ var PROJECT_VERIFIER_CATALOG_CAPS = Object.freeze({
33
+ fileBytes: 256 * 1024,
34
+ checks: 128,
35
+ idBytes: 64,
36
+ descriptionBytes: 512,
37
+ argvEntries: 64,
38
+ argumentBytes: 4096,
39
+ cwdBytes: 512,
40
+ timeoutMs: 9e5,
41
+ tags: 16,
42
+ tagBytes: 32
43
+ });
44
+ var ROOT_FIELDS = /* @__PURE__ */ new Set(["version", "checks"]);
45
+ var CHECK_FIELDS = /* @__PURE__ */ new Set(["id", "description", "command", "cwd", "timeoutMs", "tags"]);
46
+ var TAG_PATTERN = /^[a-z0-9][a-z0-9._-]*$/;
47
+ var SHELL_EXECUTABLES = /* @__PURE__ */ new Set([
48
+ "bash",
49
+ "cmd",
50
+ "command.com",
51
+ "dash",
52
+ "fish",
53
+ "ksh",
54
+ "powershell",
55
+ "pwsh",
56
+ "sh",
57
+ "tcsh",
58
+ "zsh"
59
+ ]);
60
+ function isRecord(value) {
61
+ return value !== null && typeof value === "object" && !Array.isArray(value);
62
+ }
63
+ function utf8Bytes(value) {
64
+ return Buffer.byteLength(value, "utf8");
65
+ }
66
+ function hasControlCharacter(value) {
67
+ for (let index = 0; index < value.length; index += 1) {
68
+ const code = value.charCodeAt(index);
69
+ if (code <= 31 || code === 127) return true;
70
+ }
71
+ return false;
72
+ }
73
+ function catalogDiagnostic(message) {
74
+ return { ok: false, reason: `${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH}: ${message}` };
75
+ }
76
+ function unknownFields(record, allowed) {
77
+ return Object.keys(record).filter((key) => !allowed.has(key)).sort(compareCodepoints);
78
+ }
79
+ function relativeCwd(workspaceRoot, resolved) {
80
+ const relative = path.relative(workspaceRoot, resolved);
81
+ return relative.length === 0 ? "." : relative.split(path.sep).join("/");
82
+ }
83
+ function safelyResolveCatalogCwd(rawCwd, workspaceRoot, location) {
84
+ if (path.isAbsolute(rawCwd) || path.win32.isAbsolute(rawCwd)) {
85
+ return new Error(`${location} must be repository-relative; absolute cwd '${rawCwd}' is not allowed`);
86
+ }
87
+ let resolved;
88
+ try {
89
+ resolved = resolveSafeCwd(rawCwd, workspaceRoot);
90
+ } catch {
91
+ return new Error(`${location} escapes the workspace root: '${rawCwd}'`);
92
+ }
93
+ let realCwd;
94
+ try {
95
+ const cwdStat = statSync(resolved);
96
+ if (!cwdStat.isDirectory()) return new Error(`${location} is not a directory: '${rawCwd}'`);
97
+ const realRoot = realpathSync(workspaceRoot);
98
+ realCwd = realpathSync(resolved);
99
+ resolveSafeCwd(realCwd, realRoot);
100
+ } catch (error) {
101
+ const message = error instanceof Error ? error.message : String(error);
102
+ if (message.includes("escapes workspace root")) {
103
+ return new Error(`${location} escapes the workspace root through a symbolic link: '${rawCwd}'`);
104
+ }
105
+ return new Error(`${location} cannot be resolved as a repository directory: '${rawCwd}' (${message})`);
106
+ }
107
+ return { declared: relativeCwd(workspaceRoot, resolved), execution: realCwd };
108
+ }
109
+ function resolveProjectVerifierExecutionCwd(rawCwd, workspaceRoot) {
110
+ const resolution = safelyResolveCatalogCwd(rawCwd, workspaceRoot, "project check cwd");
111
+ return resolution instanceof Error ? resolution : resolution.execution;
112
+ }
113
+ function validateId(value, location) {
114
+ if (typeof value !== "string" || value.length === 0) return new Error(`${location} must be a non-empty string`);
115
+ if (utf8Bytes(value) > PROJECT_VERIFIER_CATALOG_CAPS.idBytes) {
116
+ return new Error(`${location} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.idBytes}-byte cap`);
117
+ }
118
+ if (!isProjectVerifierCheckId(value)) {
119
+ return new Error(`${location} must match /^[a-z0-9][a-z0-9._:-]*$/`);
120
+ }
121
+ if (value === "frontend") return new Error(`${location} uses reserved built-in check id 'frontend'`);
122
+ return value;
123
+ }
124
+ function validateDescription(value, location) {
125
+ if (typeof value !== "string" || value.length === 0) return new Error(`${location} must be a non-empty string`);
126
+ if (value.trim() !== value || hasControlCharacter(value)) {
127
+ return new Error(`${location} must be trimmed, single-line text without control characters`);
128
+ }
129
+ if (utf8Bytes(value) > PROJECT_VERIFIER_CATALOG_CAPS.descriptionBytes) {
130
+ return new Error(`${location} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.descriptionBytes}-byte cap`);
131
+ }
132
+ return value;
133
+ }
134
+ function validateCommand(value, location) {
135
+ if (!Array.isArray(value) || value.length === 0) {
136
+ return new Error(`${location} must be a non-empty argv string array; shell command strings are not allowed`);
137
+ }
138
+ if (value.length > PROJECT_VERIFIER_CATALOG_CAPS.argvEntries) {
139
+ return new Error(`${location} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.argvEntries}-entry cap`);
140
+ }
141
+ const command = [];
142
+ for (const [index, entry] of value.entries()) {
143
+ const entryLocation = `${location}[${index}]`;
144
+ if (typeof entry !== "string" || entry.length === 0) {
145
+ return new Error(`${entryLocation} must be a non-empty string`);
146
+ }
147
+ if (entry.includes("\0")) return new Error(`${entryLocation} must not contain a NUL byte`);
148
+ if (utf8Bytes(entry) > PROJECT_VERIFIER_CATALOG_CAPS.argumentBytes) {
149
+ return new Error(`${entryLocation} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.argumentBytes}-byte cap`);
150
+ }
151
+ command.push(entry);
152
+ }
153
+ const executable = command[0] ?? "";
154
+ if (/\s/u.test(executable)) {
155
+ return new Error(`${location}[0] must be one executable token, not a shell command string`);
156
+ }
157
+ const executableName = path.basename(executable).toLowerCase().replace(/\.exe$/u, "");
158
+ if (SHELL_EXECUTABLES.has(executableName)) {
159
+ return new Error(`${location}[0] may not invoke shell executable '${executable}'`);
160
+ }
161
+ return command;
162
+ }
163
+ function validateTimeout(value, location) {
164
+ if (!Number.isInteger(value) || typeof value !== "number" || value <= 0) {
165
+ return new Error(`${location} must be a positive integer number of milliseconds`);
166
+ }
167
+ if (value > PROJECT_VERIFIER_CATALOG_CAPS.timeoutMs) {
168
+ return new Error(`${location} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.timeoutMs}ms cap`);
169
+ }
170
+ return value;
171
+ }
172
+ function validateTags(value, location) {
173
+ if (!Array.isArray(value)) return new Error(`${location} must be an array of bounded tag strings`);
174
+ if (value.length > PROJECT_VERIFIER_CATALOG_CAPS.tags) {
175
+ return new Error(`${location} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.tags}-tag cap`);
176
+ }
177
+ const tags = [];
178
+ const seen = /* @__PURE__ */ new Set();
179
+ for (const [index, entry] of value.entries()) {
180
+ const entryLocation = `${location}[${index}]`;
181
+ if (typeof entry !== "string" || entry.length === 0) {
182
+ return new Error(`${entryLocation} must be a non-empty string`);
183
+ }
184
+ if (utf8Bytes(entry) > PROJECT_VERIFIER_CATALOG_CAPS.tagBytes) {
185
+ return new Error(`${entryLocation} exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.tagBytes}-byte cap`);
186
+ }
187
+ if (!TAG_PATTERN.test(entry)) return new Error(`${entryLocation} must match /^[a-z0-9][a-z0-9._-]*$/`);
188
+ if (seen.has(entry)) return new Error(`${location} contains duplicate tag '${entry}'`);
189
+ seen.add(entry);
190
+ tags.push(entry);
191
+ }
192
+ return tags;
193
+ }
194
+ function sourcePathInsideWorkspace(catalogPath, workspaceRoot) {
195
+ try {
196
+ const realRoot = realpathSync(workspaceRoot);
197
+ const realCatalogPath = realpathSync(catalogPath);
198
+ resolveSafeCwd(realCatalogPath, realRoot);
199
+ return realCatalogPath;
200
+ } catch (error) {
201
+ const message = error instanceof Error ? error.message : String(error);
202
+ return new Error(`catalog file must resolve inside the workspace root (${message})`);
203
+ }
204
+ }
205
+ function loadProjectVerifierCatalog(workspaceRoot) {
206
+ const catalogPath = path.join(workspaceRoot, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH);
207
+ if (!existsSync(catalogPath)) return { ok: true, source: null };
208
+ const safeSourcePath = sourcePathInsideWorkspace(catalogPath, workspaceRoot);
209
+ if (safeSourcePath instanceof Error) return catalogDiagnostic(safeSourcePath.message);
210
+ let text;
211
+ try {
212
+ const stats = statSync(safeSourcePath);
213
+ if (!stats.isFile()) return catalogDiagnostic("catalog path must be a regular file");
214
+ if (stats.size > PROJECT_VERIFIER_CATALOG_CAPS.fileBytes) {
215
+ return catalogDiagnostic(`file exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.fileBytes}-byte cap`);
216
+ }
217
+ text = readFileSync(safeSourcePath, "utf8");
218
+ } catch (error) {
219
+ return catalogDiagnostic(`cannot read catalog (${error instanceof Error ? error.message : String(error)})`);
220
+ }
221
+ return parseProjectVerifierCatalogText(text, workspaceRoot, catalogPath);
222
+ }
223
+ function parseProjectVerifierCatalogText(text, workspaceRoot, catalogPath = path.join(workspaceRoot, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH)) {
224
+ const document = (0, import_yaml.parseDocument)(text, { prettyErrors: false, strict: true, uniqueKeys: true });
225
+ if (document.errors.length > 0) {
226
+ return catalogDiagnostic(`invalid YAML: ${document.errors.map((error) => error.message).join("; ")}`);
227
+ }
228
+ let parsed;
229
+ try {
230
+ parsed = document.toJS({ maxAliasCount: 0 });
231
+ } catch (error) {
232
+ return catalogDiagnostic(`invalid YAML: ${error instanceof Error ? error.message : String(error)}`);
233
+ }
234
+ if (!isRecord(parsed)) return catalogDiagnostic("root must be an object with version and checks fields");
235
+ const rootUnknown = unknownFields(parsed, ROOT_FIELDS);
236
+ if (rootUnknown.length > 0) return catalogDiagnostic(`root has unknown field(s): ${rootUnknown.join(", ")}`);
237
+ if (!Object.hasOwn(parsed, "version")) return catalogDiagnostic("root.version is required");
238
+ if (parsed.version !== PROJECT_VERIFIER_CATALOG_VERSION) {
239
+ return catalogDiagnostic(
240
+ `unsupported version ${JSON.stringify(parsed.version)}; supported version is ${PROJECT_VERIFIER_CATALOG_VERSION}`
241
+ );
242
+ }
243
+ if (!Object.hasOwn(parsed, "checks")) return catalogDiagnostic("root.checks is required");
244
+ if (!Array.isArray(parsed.checks)) return catalogDiagnostic("root.checks must be an array");
245
+ if (parsed.checks.length > PROJECT_VERIFIER_CATALOG_CAPS.checks) {
246
+ return catalogDiagnostic(`root.checks exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.checks}-check cap`);
247
+ }
248
+ const sourceRef = { kind: "project-catalog", path: catalogPath };
249
+ const checks = [];
250
+ const ids = /* @__PURE__ */ new Map();
251
+ for (const [index, value] of parsed.checks.entries()) {
252
+ const location = `checks[${index}]`;
253
+ if (!isRecord(value)) return catalogDiagnostic(`${location} must be an object`);
254
+ const checkUnknown = unknownFields(value, CHECK_FIELDS);
255
+ if (checkUnknown.length > 0) {
256
+ return catalogDiagnostic(`${location} has unknown field(s): ${checkUnknown.join(", ")}`);
257
+ }
258
+ for (const field of CHECK_FIELDS) {
259
+ if (!Object.hasOwn(value, field)) return catalogDiagnostic(`${location}.${field} is required`);
260
+ }
261
+ const id = validateId(value.id, `${location}.id`);
262
+ if (id instanceof Error) return catalogDiagnostic(id.message);
263
+ const duplicateIndex = ids.get(id);
264
+ if (duplicateIndex !== void 0) {
265
+ return catalogDiagnostic(`${location}.id duplicates '${id}' from checks[${duplicateIndex}].id`);
266
+ }
267
+ const description = validateDescription(value.description, `${location}.description`);
268
+ if (description instanceof Error) return catalogDiagnostic(description.message);
269
+ const command = validateCommand(value.command, `${location}.command`);
270
+ if (command instanceof Error) return catalogDiagnostic(command.message);
271
+ if (typeof value.cwd !== "string" || value.cwd.length === 0) {
272
+ return catalogDiagnostic(`${location}.cwd must be a non-empty repository-relative string`);
273
+ }
274
+ if (value.cwd.includes("\0")) return catalogDiagnostic(`${location}.cwd must not contain a NUL byte`);
275
+ if (utf8Bytes(value.cwd) > PROJECT_VERIFIER_CATALOG_CAPS.cwdBytes) {
276
+ return catalogDiagnostic(`${location}.cwd exceeds the ${PROJECT_VERIFIER_CATALOG_CAPS.cwdBytes}-byte cap`);
277
+ }
278
+ const cwdResolution = safelyResolveCatalogCwd(value.cwd, workspaceRoot, `${location}.cwd`);
279
+ if (cwdResolution instanceof Error) return catalogDiagnostic(cwdResolution.message);
280
+ const cwd = cwdResolution.declared;
281
+ const timeoutMs = validateTimeout(value.timeoutMs, `${location}.timeoutMs`);
282
+ if (timeoutMs instanceof Error) return catalogDiagnostic(timeoutMs.message);
283
+ const tags = validateTags(value.tags, `${location}.tags`);
284
+ if (tags instanceof Error) return catalogDiagnostic(tags.message);
285
+ ids.set(id, index);
286
+ checks.push({ id, description, command, cwd, timeoutMs, tags, source: { ...sourceRef } });
287
+ }
288
+ checks.sort((left, right) => compareCodepoints(left.id, right.id));
289
+ return { ok: true, source: { ...sourceRef, checks } };
290
+ }
291
+ function packageDeclaredCheck(id, packagePath, cwd, tags) {
292
+ return {
293
+ id,
294
+ description: `Run package.json script '${id}'.`,
295
+ command: ["npm", "run", id],
296
+ cwd,
297
+ timeoutMs: SAFE_EXEC_DEFAULT_TIMEOUT_MS,
298
+ tags,
299
+ source: { kind: "package.json", path: packagePath }
300
+ };
301
+ }
302
+
303
+ export {
304
+ compareCodepoints,
305
+ PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
306
+ PROJECT_VERIFIER_CATALOG_VERSION,
307
+ PROJECT_VERIFIER_CATALOG_CAPS,
308
+ resolveProjectVerifierExecutionCwd,
309
+ loadProjectVerifierCatalog,
310
+ parseProjectVerifierCatalogText,
311
+ packageDeclaredCheck
312
+ };
313
+ //# sourceMappingURL=chunk-FYYLNIL5.js.map
@@ -37,6 +37,7 @@ var BusChannels = {
37
37
  ContextActivity: "context.activity",
38
38
  ContextWarning: "context.warning",
39
39
  ContextPruned: "context.pruned",
40
+ ContextRecalled: "context.recalled",
40
41
  AgentStatusChanged: "agent.status.changed",
41
42
  RunAborted: "run.aborted",
42
43
  BudgetAlert: "budget.alert",
@@ -62,66 +63,8 @@ function isRunAbortedPayload(value) {
62
63
  return true;
63
64
  }
64
65
 
65
- // src/core/shared-bus.ts
66
- init_esm_shims();
67
-
68
- // src/core/event-bus.ts
69
- init_esm_shims();
70
- function reportListenerError(channel, error) {
71
- const message = error instanceof Error ? error.stack ?? error.message : String(error);
72
- console.error(`[clio:event-bus] Listener crashed on ${channel}: ${message}`);
73
- }
74
- function createSafeEventBus() {
75
- const registry = /* @__PURE__ */ new Map();
76
- const deliver = (channel, payload) => {
77
- const ls = registry.get(channel);
78
- if (!ls) return;
79
- for (const listener of [...ls]) {
80
- try {
81
- const result = listener(payload);
82
- if (result && typeof result.then === "function") {
83
- result.catch((error) => reportListenerError(channel, error));
84
- }
85
- } catch (error) {
86
- reportListenerError(channel, error);
87
- }
88
- }
89
- };
90
- const bus = {
91
- emit(channel, payload) {
92
- deliver(channel, payload);
93
- },
94
- on(channel, listener) {
95
- const set = registry.get(channel) ?? /* @__PURE__ */ new Set();
96
- set.add(listener);
97
- registry.set(channel, set);
98
- return () => {
99
- const current = registry.get(channel);
100
- if (!current) return;
101
- current.delete(listener);
102
- if (current.size === 0) registry.delete(channel);
103
- };
104
- },
105
- listeners(channel) {
106
- return [...registry.get(channel) ?? []];
107
- },
108
- clear() {
109
- registry.clear();
110
- }
111
- };
112
- return bus;
113
- }
114
-
115
- // src/core/shared-bus.ts
116
- var sharedBus = null;
117
- function getSharedBus() {
118
- if (!sharedBus) sharedBus = createSafeEventBus();
119
- return sharedBus;
120
- }
121
-
122
66
  export {
123
67
  BusChannels,
124
- isRunAbortedPayload,
125
- getSharedBus
68
+ isRunAbortedPayload
126
69
  };
127
- //# sourceMappingURL=chunk-OQ33BKR3.js.map
70
+ //# sourceMappingURL=chunk-G7MUEIGA.js.map