@iowarp/clio-coder 0.3.1 → 0.3.2

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 (595) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/chunk-2VTFPG5O.js +48 -0
  12. package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4KLWL3UC.js +18 -0
  16. package/dist/chunk-4VP4KH3K.js +962 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  21. package/dist/chunk-65DEGPJ6.js +52 -0
  22. package/dist/chunk-6EJMN2Y3.js +17 -0
  23. package/dist/chunk-6EJV5X2W.js +16405 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6XLNIQDB.js +27 -0
  26. package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
  29. package/dist/chunk-7MNJORFF.js +22 -0
  30. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  31. package/dist/chunk-AGYYIBLL.js +1069 -0
  32. package/dist/chunk-AO4RKG4M.js +277 -0
  33. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  34. package/dist/chunk-ARBGF5F7.js +174 -0
  35. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  36. package/dist/chunk-CBCAPZAA.js +229 -0
  37. package/dist/chunk-CMZWFGD2.js +352 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
  42. package/dist/chunk-FCSXB6T2.js +338 -0
  43. package/dist/chunk-FJ3H4MN5.js +48 -0
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G2DE3C7R.js +644 -0
  46. package/dist/chunk-G4BMMOKF.js +182 -0
  47. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  48. package/dist/chunk-HC4CLZ2Y.js +68 -0
  49. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  50. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  51. package/dist/chunk-I4HZDVNP.js +73 -0
  52. package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
  53. package/dist/chunk-IKCO5N3L.js +162 -0
  54. package/dist/chunk-IR4CFBFN.js +56 -0
  55. package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
  56. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  57. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  58. package/dist/chunk-KJ5LWLOE.js +1077 -0
  59. package/dist/chunk-LBMZMYH2.js +285 -0
  60. package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/chunk-MAW544W2.js +1882 -0
  64. package/dist/chunk-MBS4V7ZP.js +217 -0
  65. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  66. package/dist/chunk-MNA4JGU4.js +255 -0
  67. package/dist/chunk-MQSRRFWA.js +3428 -0
  68. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  69. package/dist/chunk-OAO4GE4M.js +619 -0
  70. package/dist/chunk-OHHN2SO4.js +5135 -0
  71. package/dist/chunk-OKGUZO2U.js +34 -0
  72. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  73. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  74. package/dist/chunk-OQE5J4C6.js +73 -0
  75. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  76. package/dist/chunk-POHLU5DW.js +1186 -0
  77. package/dist/chunk-QKMUKYO7.js +4961 -0
  78. package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
  79. package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
  80. package/dist/chunk-SST6Z5JA.js +80 -0
  81. package/dist/chunk-STBPMHSX.js +2456 -0
  82. package/dist/chunk-T6YILFSB.js +80 -0
  83. package/dist/chunk-TZTZS7QK.js +227 -0
  84. package/dist/chunk-UOV2BYIW.js +107 -0
  85. package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
  86. package/dist/chunk-VAKQQHWR.js +434 -0
  87. package/dist/chunk-VG7TBQIY.js +128 -0
  88. package/dist/chunk-VJWL6YS5.js +244 -0
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-WMSVI4G2.js +2095 -0
  91. package/dist/chunk-WVO7V2QY.js +797 -0
  92. package/dist/chunk-X4RCMKVQ.js +641 -0
  93. package/dist/chunk-X75S7HFS.js +374 -0
  94. package/dist/chunk-XN3L4EYL.js +46 -0
  95. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  96. package/dist/chunk-YHZX5GEU.js +193 -0
  97. package/dist/chunk-YXLYO42X.js +91 -0
  98. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  99. package/dist/chunk-ZI647VB5.js +37 -0
  100. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-4LY5K2AC.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
  108. package/dist/configure-R6A64DHX.js +42 -0
  109. package/dist/context-5VKGUVJJ.js +866 -0
  110. package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
  111. package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
  126. package/dist/monitor-MEQA5C3I.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
  137. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
  143. package/dist/verify-G6V4D2G7.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +362 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +42 -6
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +173 -47
  444. package/src/interactive/chat-renderer.ts +262 -72
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +228 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +20 -2
  456. package/src/interactive/footer-panel.ts +2 -2
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +201 -17
  459. package/src/interactive/interactive-event-projection.ts +6 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +176 -114
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/decisions.ts +300 -0
  474. package/src/interactive/overlays/help-reference.ts +15 -10
  475. package/src/interactive/overlays/model-selector.ts +34 -16
  476. package/src/interactive/overlays/session-selector.ts +18 -0
  477. package/src/interactive/overlays/settings.ts +105 -17
  478. package/src/interactive/overlays/skills-hub.ts +4 -4
  479. package/src/interactive/overlays/tree-selector.ts +41 -6
  480. package/src/interactive/render-trace.ts +499 -90
  481. package/src/interactive/renderers/compaction-summary.ts +2 -2
  482. package/src/interactive/renderers/diff.ts +115 -104
  483. package/src/interactive/renderers/mermaid.ts +53 -0
  484. package/src/interactive/renderers/tool-execution.ts +386 -133
  485. package/src/interactive/renderers/worker-entry.ts +20 -4
  486. package/src/interactive/session-switch-settlement.ts +10 -0
  487. package/src/interactive/slash-autocomplete.ts +6 -114
  488. package/src/interactive/slash-commands.ts +135 -47
  489. package/src/interactive/slash-spec.ts +9 -38
  490. package/src/interactive/status/controller.ts +5 -1
  491. package/src/interactive/stdout-backpressure.ts +99 -0
  492. package/src/interactive/stream-pacer.ts +530 -0
  493. package/src/interactive/stream-pacing-policy.ts +66 -0
  494. package/src/interactive/tasks-overlay.ts +368 -14
  495. package/src/interactive/terminal-lease.ts +485 -0
  496. package/src/interactive/theme/tokens.ts +1 -1
  497. package/src/interactive/turn-context.ts +4 -3
  498. package/src/interactive/turn-persistence.ts +30 -13
  499. package/src/interactive/turn-queues.ts +12 -0
  500. package/src/interactive/turn-recovery.ts +25 -8
  501. package/src/interactive/turn-runtime.ts +79 -12
  502. package/src/interactive/turn-state.ts +10 -0
  503. package/src/interactive/view/artifacts.ts +114 -4
  504. package/src/interactive/view/view-overlay.ts +3 -0
  505. package/src/interactive/welcome-dashboard.ts +17 -16
  506. package/src/interactive/worker-receipts.ts +52 -3
  507. package/src/interactive/worker-stream.ts +5 -1
  508. package/src/tools/agent-tools.ts +23 -3
  509. package/src/tools/artifact.ts +2 -2
  510. package/src/tools/ask-user.ts +23 -13
  511. package/src/tools/bash.ts +30 -2
  512. package/src/tools/bootstrap.ts +34 -431
  513. package/src/tools/builtin-tool-catalog.ts +265 -0
  514. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  515. package/src/tools/codewiki/code-nav.ts +8 -22
  516. package/src/tools/codewiki/shared.ts +41 -38
  517. package/src/tools/context/docs-engine.ts +14 -3
  518. package/src/tools/context/index.ts +107 -28
  519. package/src/tools/context/surface.ts +19 -0
  520. package/src/tools/core-bootstrap.ts +168 -0
  521. package/src/tools/credential-present.ts +5 -5
  522. package/src/tools/dispatch-admission.ts +533 -0
  523. package/src/tools/dispatch-background.ts +54 -0
  524. package/src/tools/dispatch-event-text.ts +6 -0
  525. package/src/tools/dispatch-plan.ts +9 -4
  526. package/src/tools/dispatch-run-events.ts +238 -0
  527. package/src/tools/dispatch-runner.ts +2370 -0
  528. package/src/tools/dispatch-scout-admission.ts +295 -0
  529. package/src/tools/dispatch-types.ts +77 -0
  530. package/src/tools/dispatch.ts +67 -3161
  531. package/src/tools/find.ts +4 -2
  532. package/src/tools/grep.ts +2 -2
  533. package/src/tools/lazy-tool.ts +60 -0
  534. package/src/tools/ledger.ts +3 -3
  535. package/src/tools/monitor-surface.ts +36 -0
  536. package/src/tools/monitor.ts +2 -32
  537. package/src/tools/observers.ts +2 -2
  538. package/src/tools/registry.ts +39 -27
  539. package/src/tools/safe-exec.ts +2 -2
  540. package/src/tools/steer-surface.ts +17 -0
  541. package/src/tools/steer.ts +2 -13
  542. package/src/tools/tasks.ts +108 -11
  543. package/src/tools/truncate.ts +25 -184
  544. package/src/tools/verify/frontend.ts +3 -1
  545. package/src/tools/verify/index.ts +3 -38
  546. package/src/tools/verify/surface.ts +46 -0
  547. package/src/tools/web-fetch-surface.ts +23 -0
  548. package/src/tools/web-fetch.ts +2 -20
  549. package/src/tools/write.ts +7 -2
  550. package/src/worker/entry.ts +39 -2
  551. package/src/worker/spec-contract.ts +26 -5
  552. package/dist/chunk-7SS2CTV2.js +0 -61361
  553. package/dist/chunk-DKGKUHFA.js +0 -924
  554. package/dist/chunk-GEP36Y4X.js +0 -12796
  555. package/dist/chunk-XYWBQRDM.js +0 -137
  556. package/dist/clio-BZVGEUFJ.js +0 -58
  557. package/dist/configure-S7S6F6CL.js +0 -32
  558. package/docs/html/agents_blueprint.html +0 -936
  559. package/docs/html/alcf_blueprint.html +0 -324
  560. package/docs/html/architecture_blueprint.html +0 -850
  561. package/docs/html/commands_blueprint.html +0 -939
  562. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  563. package/docs/html/configuration_blueprint.html +0 -1080
  564. package/docs/html/context_blueprint.html +0 -603
  565. package/docs/html/documentation_blueprint.html +0 -832
  566. package/docs/html/environment_blueprint.html +0 -404
  567. package/docs/html/eval_blueprint.html +0 -743
  568. package/docs/html/evals_internal_blueprint.html +0 -190
  569. package/docs/html/evolution_blueprint.html +0 -674
  570. package/docs/html/extensions_blueprint.html +0 -2065
  571. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  572. package/docs/html/index.html +0 -919
  573. package/docs/html/lifecycle_blueprint.html +0 -723
  574. package/docs/html/memory_blueprint.html +0 -699
  575. package/docs/html/middleware_blueprint.html +0 -664
  576. package/docs/html/models_blueprint.html +0 -2366
  577. package/docs/html/observability_blueprint.html +0 -683
  578. package/docs/html/provider_adapter_blueprint.html +0 -245
  579. package/docs/html/safety_blueprint.html +0 -1386
  580. package/docs/html/shared.css +0 -571
  581. package/docs/html/shared.js +0 -143
  582. package/docs/html/skills_blueprint.html +0 -671
  583. package/docs/html/soak_blueprint.html +0 -182
  584. package/docs/html/tool_usage_blueprint.html +0 -350
  585. package/docs/html/tools_blueprint.html +0 -2249
  586. package/docs/html/trace_blueprint.html +0 -235
  587. package/docs/html/tui_design_blueprint.html +0 -374
  588. package/docs/html/validation_blueprint.html +0 -961
  589. package/docs/html/worker_dispatch_blueprint.html +0 -231
  590. package/src/core/release.ts +0 -2
  591. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  592. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  593. package/src/engine/apis/lmstudio-native.ts +0 -1438
  594. package/src/engine/apis/thinking-replay.ts +0 -11
  595. package/src/tools/string-enum.ts +0 -15
@@ -0,0 +1,661 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ receiptEvidenceLabels,
4
+ workerTextLabel,
5
+ workerTextNonEvidenceNotices
6
+ } from "./chunk-6N5PTWMY.js";
7
+ import {
8
+ monitorToolSurface
9
+ } from "./chunk-FJ3H4MN5.js";
10
+ import {
11
+ COST_NOT_MEASURED,
12
+ costAggregateForAmount,
13
+ formatCostAggregate
14
+ } from "./chunk-WVO7V2QY.js";
15
+ import "./chunk-HC4CLZ2Y.js";
16
+ import "./chunk-HFSBBKSQ.js";
17
+ import {
18
+ UNVERIFIABLE_RECEIPT_VERIFICATION,
19
+ renderAgentLedgerBoard
20
+ } from "./chunk-6EJV5X2W.js";
21
+ import "./chunk-4BJ5BYCE.js";
22
+ import "./chunk-QKMUKYO7.js";
23
+ import {
24
+ verifyReceiptIntegrity
25
+ } from "./chunk-AGYYIBLL.js";
26
+ import "./chunk-OOJYHWRB.js";
27
+ import "./chunk-TXOTCRLG.js";
28
+ import "./chunk-G4BMMOKF.js";
29
+ import {
30
+ isTerminalRunEnvelope
31
+ } from "./chunk-MQSRRFWA.js";
32
+ import "./chunk-STBPMHSX.js";
33
+ import "./chunk-GGXXDWE4.js";
34
+ import "./chunk-5UUP6MWO.js";
35
+ import "./chunk-CMZWFGD2.js";
36
+ import "./chunk-I4HZDVNP.js";
37
+ import "./chunk-7MNJORFF.js";
38
+ import "./chunk-OQE5J4C6.js";
39
+ import "./chunk-ECH6PKUQ.js";
40
+ import "./chunk-T6YILFSB.js";
41
+ import "./chunk-VAKQQHWR.js";
42
+ import {
43
+ truncateUtf8
44
+ } from "./chunk-6XLNIQDB.js";
45
+ import "./chunk-5B2AEOW5.js";
46
+ import "./chunk-CGKSTWHD.js";
47
+ import "./chunk-YHZX5GEU.js";
48
+ import "./chunk-EKMEHE4H.js";
49
+ import "./chunk-LZSJBIVT.js";
50
+ import "./chunk-A3CYT5EX.js";
51
+ import "./chunk-ZDOOVTXZ.js";
52
+ import "./chunk-4VP4KH3K.js";
53
+ import "./chunk-M6SHUN7Q.js";
54
+ import "./chunk-R346GLFC.js";
55
+ import "./chunk-X75S7HFS.js";
56
+ import {
57
+ sleep
58
+ } from "./chunk-FQ4SKYE4.js";
59
+ import "./chunk-IKCO5N3L.js";
60
+ import "./chunk-3I7MS7N2.js";
61
+ import "./chunk-IHXBNWMM.js";
62
+ import "./chunk-SST6Z5JA.js";
63
+ import "./chunk-4ZG3XFUR.js";
64
+ import "./chunk-APJ265NV.js";
65
+ import "./chunk-FCSXB6T2.js";
66
+ import "./chunk-YXLYO42X.js";
67
+ import "./chunk-BNAZZHFG.js";
68
+ import "./chunk-6EJMN2Y3.js";
69
+ import "./chunk-WEPFGWHJ.js";
70
+ import "./chunk-OQ33BKR3.js";
71
+ import "./chunk-7CR24IG7.js";
72
+ import "./chunk-IWHMRKLL.js";
73
+ import {
74
+ init_esm_shims
75
+ } from "./chunk-3R73A4XB.js";
76
+
77
+ // src/tools/monitor.ts
78
+ init_esm_shims();
79
+ import { readFileSync } from "node:fs";
80
+ var LIST_LIMIT = 20;
81
+ var PEEK_MAX_BYTES = 8 * 1024;
82
+ var RECEIPT_MAX_BYTES = 14 * 1024;
83
+ var WAIT_POLL_MS = 250;
84
+ var WAIT_DEFAULT_TIMEOUT_MS = 6e4;
85
+ var WAIT_MAX_TIMEOUT_MS = 10 * 6e4;
86
+ var COLLECT_TEXT_BYTES = 2e3;
87
+ var COLLECT_TIMEOUT_NOTICE = 'collect never blocks; timeout_ms is ignored \u2014 block on one run with mode="wait".';
88
+ function runLine(run) {
89
+ const state = run.outcome ?? run.status;
90
+ const receipt = run.receiptPath ?? "n/a";
91
+ return `- ${run.id} agent=${run.agentId} state=${state} node=${run.node?.id ?? "local"} started=${run.startedAt} tokens=${run.tokenCount} receipt=${receipt}`;
92
+ }
93
+ function listRuns(deps, options) {
94
+ let runs;
95
+ try {
96
+ runs = deps.dispatch.listRuns();
97
+ } catch (err) {
98
+ return { kind: "error", message: `monitor: ${err instanceof Error ? err.message : String(err)}` };
99
+ }
100
+ const sessionId = options?.sessionId ?? null;
101
+ const sessionRuns = sessionId !== null ? runs.filter((run) => run.sessionId === sessionId) : [];
102
+ const scoped = sessionRuns.length > 0 ? sessionRuns : runs;
103
+ const scopeNote = sessionRuns.length > 0 ? "this session" : "all sessions";
104
+ const shown = scoped.slice(0, LIST_LIMIT);
105
+ if (shown.length === 0) {
106
+ return { kind: "ok", output: "No dispatched runs recorded.", details: { mode: "list", runCount: 0 } };
107
+ }
108
+ const lines = [`dispatched runs (${scopeNote}, newest first, ${shown.length} of ${scoped.length}):`];
109
+ for (const run of shown) lines.push(runLine(run));
110
+ lines.push("", 'Use monitor(run_id=<id>) for state, mode="peek" for recent output, mode="receipt" for the receipt.');
111
+ return {
112
+ kind: "ok",
113
+ output: lines.join("\n"),
114
+ details: {
115
+ mode: "list",
116
+ runCount: scoped.length,
117
+ runs: shown.map((run) => ({ runId: run.id, agentId: run.agentId, state: run.outcome ?? run.status }))
118
+ }
119
+ };
120
+ }
121
+ function runStatus(deps, runId) {
122
+ const requestedRun = deps.dispatch.getRun(runId);
123
+ const rootRunId = requestedRun?.lineage?.rootRunId ?? runId;
124
+ const assignment = deps.dispatch.assignments?.getStored(rootRunId) ?? null;
125
+ const resolvedRunId = assignment?.terminalRunId ?? runId;
126
+ const run = deps.dispatch.getRun(resolvedRunId) ?? requestedRun;
127
+ if (!run && !assignment) return { kind: "error", message: `monitor: unknown run or assignment '${runId}'` };
128
+ if (!run) return { kind: "error", message: `monitor: assignment '${runId}' has no available attempt` };
129
+ const live = deps.dispatch.snapshot().running.find((entry) => entry.lineage.rootRunId === rootRunId) ?? null;
130
+ const reroutes = run.reroutes !== void 0 && run.reroutes.length > 0 ? ` reroutes=${run.reroutes.map((hop) => `${hop.fromNode}>${hop.toNode}`).join(",")}` : "";
131
+ const lines = [
132
+ ...assignment ? [
133
+ `assignment ${assignment.assignmentId} status=${assignment.status} terminal=${assignment.terminalRunId ?? "pending"}`,
134
+ `attempts: ${assignment.attempts.join(", ") || "none finalized"}`
135
+ ] : [],
136
+ `run ${run.id} (${run.agentId})`,
137
+ `state: ${run.status}${run.outcome ? ` outcome=${run.outcome}` : ""}${run.outcomeDetail ? ` detail=${run.outcomeDetail}` : ""}`,
138
+ `target=${run.targetId} model=${run.wireModelId} runtime=${run.runtimeKind} node=${run.node?.id ?? "local"}${reroutes}`,
139
+ `started=${run.startedAt} ended=${run.endedAt ?? "n/a"} exit=${run.exitCode ?? "n/a"}`,
140
+ `tokens=${run.tokenCount} cost=${formatCostAggregate(costAggregateForAmount(run.costUsd, run.costProvenance)) ?? COST_NOT_MEASURED} receipt=${run.receiptPath ?? "n/a"}`
141
+ ];
142
+ if (live) {
143
+ lines.push(
144
+ `live: phase=${live.outcomePhase} heartbeat=${live.heartbeat} elapsed=${Math.round(live.elapsedMs / 1e3)}s tokens=${live.tokens.total}`
145
+ );
146
+ }
147
+ return {
148
+ kind: "ok",
149
+ output: lines.join("\n"),
150
+ details: {
151
+ mode: "status",
152
+ ...assignment ? {
153
+ assignmentId: assignment.assignmentId,
154
+ assignmentStatus: assignment.status,
155
+ attemptRunIds: [...assignment.attempts],
156
+ terminalRunId: assignment.terminalRunId
157
+ } : {},
158
+ runId: run.id,
159
+ agentId: run.agentId,
160
+ status: run.status,
161
+ outcome: run.outcome ?? null,
162
+ exitCode: run.exitCode,
163
+ tokenCount: run.tokenCount,
164
+ costUsd: run.costUsd,
165
+ costProvenance: run.costProvenance ?? "unknown",
166
+ receiptPath: run.receiptPath,
167
+ running: live !== null
168
+ }
169
+ };
170
+ }
171
+ function runPeek(deps, runId) {
172
+ const run = deps.dispatch.getRun(runId);
173
+ const tail = deps.runEvents?.eventTail(runId) ?? null;
174
+ if (!tail || tail.entries.length === 0) {
175
+ if (!run) return { kind: "error", message: `monitor: unknown run '${runId}'` };
176
+ return {
177
+ kind: "ok",
178
+ output: `No buffered events for run ${runId} in this process. Use mode="receipt" for the stored receipt or mode="status" for run state.`,
179
+ details: { mode: "peek", runId, eventCount: 0 }
180
+ };
181
+ }
182
+ const rendered = tail.entries.map((entry) => `${entry.at} ${entry.type}${entry.detail ? `: ${entry.detail}` : ""}`);
183
+ let body = rendered.join("\n");
184
+ let dropped = 0;
185
+ while (Buffer.byteLength(body, "utf8") > PEEK_MAX_BYTES && dropped < rendered.length - 1) {
186
+ dropped += 1;
187
+ body = rendered.slice(dropped).join("\n");
188
+ }
189
+ const lines = [
190
+ `recent events for run ${runId} (${tail.agentId}), newest last${dropped > 0 ? `, ${dropped} older omitted` : ""}:`,
191
+ body
192
+ ];
193
+ return {
194
+ kind: "ok",
195
+ output: lines.join("\n"),
196
+ details: { mode: "peek", runId, eventCount: tail.entries.length, omitted: dropped }
197
+ };
198
+ }
199
+ var TOOLS_MAX_CALL_LINES = 60;
200
+ var TOOLS_MAX_BYTES = 8 * 1024;
201
+ var TOOLS_ARGUMENTS_CHARS = 160;
202
+ var TOOL_CALL_EVENT_TYPES = /* @__PURE__ */ new Set([
203
+ "clio_tool_finish",
204
+ "clio_permission_resolved",
205
+ "clio_permission_escalated"
206
+ ]);
207
+ function toolCallLines(entries) {
208
+ const lines = [];
209
+ for (const entry of entries) {
210
+ const detailed = entry.detail !== void 0 && entry.detail.length > 0;
211
+ if (!TOOL_CALL_EVENT_TYPES.has(entry.type) && !(entry.type === "tool_execution_end" && detailed)) continue;
212
+ lines.push(` ${entry.at} ${entry.type}${detailed ? `: ${entry.detail}` : ""}`);
213
+ }
214
+ return lines;
215
+ }
216
+ function receiptToolLines(receipt) {
217
+ const lines = [];
218
+ const activity = receipt.toolActivity;
219
+ if (activity) {
220
+ lines.push(
221
+ ` totals: calls=${activity.calls} succeeded=${activity.succeeded} failed=${activity.failed} blocked=${activity.blocked} mutating_succeeded=${activity.mutatingSucceeded}`
222
+ );
223
+ } else {
224
+ lines.push(` totals: calls=${receipt.toolCalls}`);
225
+ }
226
+ for (const stat of receipt.toolStats) {
227
+ lines.push(
228
+ ` ${stat.tool}: count=${stat.count} ok=${stat.ok} errors=${stat.errors} blocked=${stat.blocked} total_ms=${stat.totalDurationMs}`
229
+ );
230
+ }
231
+ for (const attempt of receipt.safety?.blockedAttempts ?? []) {
232
+ const parts = [
233
+ ` blocked: ${attempt.tool}`,
234
+ attempt.actionClass !== void 0 ? `class=${attempt.actionClass}` : "",
235
+ attempt.ruleId !== void 0 ? `rule=${attempt.ruleId}` : "",
236
+ attempt.reasonCode !== void 0 ? `reason_code=${attempt.reasonCode}` : ""
237
+ ].filter((part) => part.length > 0);
238
+ lines.push(parts.join(" "));
239
+ }
240
+ for (const entry of receipt.delegation?.toolCallLog ?? []) {
241
+ let rendered;
242
+ try {
243
+ rendered = truncateUtf8(JSON.stringify(entry.arguments), TOOLS_ARGUMENTS_CHARS, "\u2026");
244
+ } catch {
245
+ rendered = "(arguments not serializable)";
246
+ }
247
+ lines.push(` ${entry.timestamp} ${entry.tool} ${entry.decision} args=${rendered}`);
248
+ }
249
+ return lines;
250
+ }
251
+ function runTools(deps, runId) {
252
+ const requestedRun = deps.dispatch.getRun(runId);
253
+ const rootRunId = requestedRun?.lineage?.rootRunId ?? runId;
254
+ const assignment = deps.dispatch.assignments?.getStored(rootRunId) ?? null;
255
+ const resolvedRunId = assignment?.terminalRunId ?? runId;
256
+ const run = deps.dispatch.getRun(resolvedRunId) ?? requestedRun ?? null;
257
+ if (run === null && assignment === null) return { kind: "error", message: `monitor: unknown run '${runId}'` };
258
+ const tail = deps.runEvents?.eventTail(resolvedRunId) ?? null;
259
+ const callLines = tail ? toolCallLines(tail.entries) : [];
260
+ const evidence = durableRunEvidence(run);
261
+ const receiptLines = evidence.receipt !== null ? receiptToolLines(evidence.receipt) : [];
262
+ const lines = [`tool calls for run ${resolvedRunId}${run ? ` (${run.agentId})` : ""}:`];
263
+ let omitted = 0;
264
+ if (callLines.length > 0) {
265
+ const shown = callLines.length > TOOLS_MAX_CALL_LINES ? callLines.slice(-TOOLS_MAX_CALL_LINES) : callLines;
266
+ omitted = callLines.length - shown.length;
267
+ lines.push(
268
+ `executed calls from this process's event buffer (newest last, ${shown.length} of ${callLines.length}${omitted > 0 ? `, ${omitted} older omitted` : ""}):`,
269
+ ...shown
270
+ );
271
+ } else {
272
+ lines.push(
273
+ tail === null ? "executed calls: no event buffer for this run in this process (it ran in another process, or its tail was evicted)." : "executed calls: the event buffer holds no tool-call events for this run."
274
+ );
275
+ }
276
+ if (receiptLines.length > 0) {
277
+ lines.push("receipt totals (integrity verified):", ...receiptLines);
278
+ } else if (evidence.integrityNote !== null) {
279
+ lines.push(`receipt totals: unavailable. ${evidence.integrityNote}`);
280
+ }
281
+ lines.push(
282
+ "note: the event buffer records tool name and outcome, not command arguments; absent argv is not evidence that no command ran."
283
+ );
284
+ const body = truncateUtf8(lines.join("\n"), TOOLS_MAX_BYTES, "\n[tool list truncated]");
285
+ return {
286
+ kind: "ok",
287
+ output: body,
288
+ details: {
289
+ mode: "tools",
290
+ runId: resolvedRunId,
291
+ callCount: callLines.length,
292
+ omitted,
293
+ bufferAvailable: tail !== null,
294
+ receiptAvailable: evidence.receipt !== null,
295
+ ...evidence.receipt !== null ? {
296
+ toolCalls: evidence.receipt.toolCalls,
297
+ toolActivity: evidence.receipt.toolActivity ?? null,
298
+ toolStats: evidence.receipt.toolStats
299
+ } : {}
300
+ }
301
+ };
302
+ }
303
+ function runReceipt(deps, runId) {
304
+ const run = deps.dispatch.getRun(runId);
305
+ if (!run) return { kind: "error", message: `monitor: unknown run '${runId}'` };
306
+ if (!run.receiptPath) {
307
+ return {
308
+ kind: "error",
309
+ message: `monitor: run '${runId}' has no stored receipt (state=${run.outcome ?? run.status}); try mode="status" or mode="peek"`
310
+ };
311
+ }
312
+ let raw;
313
+ try {
314
+ raw = readFileSync(run.receiptPath, "utf8");
315
+ } catch (err) {
316
+ return {
317
+ kind: "error",
318
+ message: `monitor: cannot read receipt ${run.receiptPath}: ${err instanceof Error ? err.message : String(err)}`
319
+ };
320
+ }
321
+ const body = truncateUtf8(raw, RECEIPT_MAX_BYTES, `
322
+ [receipt truncated; read ${run.receiptPath} for the rest]`);
323
+ let receipt = null;
324
+ let receiptIntegrity;
325
+ try {
326
+ receipt = JSON.parse(raw);
327
+ receiptIntegrity = verifyReceiptIntegrity(receipt, run);
328
+ } catch (err) {
329
+ receiptIntegrity = {
330
+ ok: false,
331
+ reason: `receipt invalid: ${err instanceof Error ? err.message : String(err)}`
332
+ };
333
+ }
334
+ return {
335
+ kind: "ok",
336
+ output: body,
337
+ details: {
338
+ mode: "receipt",
339
+ runId,
340
+ receiptPath: run.receiptPath,
341
+ receiptIntegrity,
342
+ ...receipt !== null && receiptIntegrity.ok ? {
343
+ evidenceVerification: receipt.verification,
344
+ briefing: receipt.briefing ?? null,
345
+ projectContext: receipt.projectContext ?? null
346
+ } : {}
347
+ }
348
+ };
349
+ }
350
+ function unavailableRunEvidence(reason, note, integrityFailure = false) {
351
+ return {
352
+ receipt: null,
353
+ output: null,
354
+ verification: UNVERIFIABLE_RECEIPT_VERIFICATION,
355
+ integrity: { ok: false, reason },
356
+ integrityNote: note,
357
+ integrityFailure
358
+ };
359
+ }
360
+ function durableRunEvidence(run) {
361
+ if (!run) {
362
+ return unavailableRunEvidence(
363
+ "run ledger envelope unavailable",
364
+ "receipt integrity unavailable: the run ledger envelope is missing; worker text cannot be authenticated."
365
+ );
366
+ }
367
+ if (!run.receiptPath) {
368
+ return unavailableRunEvidence(
369
+ "receipt unavailable",
370
+ "receipt integrity unavailable: no stored receipt; worker text is unavailable and validation is unknown."
371
+ );
372
+ }
373
+ let receipt;
374
+ try {
375
+ receipt = JSON.parse(readFileSync(run.receiptPath, "utf8"));
376
+ } catch (err) {
377
+ const detail = err instanceof Error ? err.message : String(err);
378
+ return unavailableRunEvidence(
379
+ `receipt unreadable: ${detail}`,
380
+ `receipt integrity unavailable: cannot read or parse ${run.receiptPath} (${detail}); worker text is unavailable and validation is unknown.`
381
+ );
382
+ }
383
+ let integrity;
384
+ try {
385
+ integrity = verifyReceiptIntegrity(receipt, run);
386
+ } catch (err) {
387
+ const detail = err instanceof Error ? err.message : String(err);
388
+ return unavailableRunEvidence(
389
+ `receipt invalid: ${detail}`,
390
+ `receipt integrity failed: invalid receipt (${detail}); worker text is withheld as untrusted and validation is unknown.`,
391
+ true
392
+ );
393
+ }
394
+ if (!integrity.ok) {
395
+ return unavailableRunEvidence(
396
+ integrity.reason,
397
+ `receipt integrity failed: ${integrity.reason}; worker text is withheld as untrusted and validation is unknown.`,
398
+ true
399
+ );
400
+ }
401
+ return {
402
+ receipt,
403
+ output: receipt.output ?? null,
404
+ verification: receipt.verification,
405
+ integrity,
406
+ integrityNote: null,
407
+ integrityFailure: false
408
+ };
409
+ }
410
+ async function runWait(deps, runId, timeoutMs, signal) {
411
+ const startedAt = performance.now();
412
+ let run = deps.dispatch.getRun(runId);
413
+ if (!run) return { kind: "error", message: `monitor: unknown run '${runId}'` };
414
+ const rootRunId = run.lineage?.rootRunId ?? runId;
415
+ let assignment = deps.dispatch.assignments?.getStored(rootRunId) ?? null;
416
+ while (assignment?.status === "running" || assignment === null && !isTerminalRunEnvelope(run)) {
417
+ if (signal?.aborted) return { kind: "error", message: "monitor: wait aborted" };
418
+ const elapsed = Math.round(performance.now() - startedAt);
419
+ if (elapsed >= timeoutMs) {
420
+ return {
421
+ kind: "ok",
422
+ output: `wait timed out after ${timeoutMs}ms: ${assignment ? "assignment" : "run"} ${runId} is still ${assignment?.status ?? run.status} and keeps running normally. Wait again or collect later. Only steer(action="cancel") if the result is no longer needed \u2014 cancelling discards its work.`,
423
+ details: {
424
+ mode: "wait",
425
+ runId,
426
+ timedOut: true,
427
+ state: assignment?.status ?? run.status,
428
+ waitedMs: elapsed
429
+ }
430
+ };
431
+ }
432
+ await sleep(Math.min(WAIT_POLL_MS, timeoutMs - elapsed));
433
+ assignment = deps.dispatch.assignments?.getStored(rootRunId) ?? null;
434
+ const resolvedRunId = assignment?.terminalRunId ?? runId;
435
+ run = deps.dispatch.getRun(resolvedRunId) ?? run;
436
+ if (!run) return { kind: "error", message: `monitor: run '${runId}' disappeared from the ledger while waiting` };
437
+ }
438
+ const status = runStatus(deps, runId);
439
+ if (status.kind !== "ok") return status;
440
+ const waitedMs = Math.round(performance.now() - startedAt);
441
+ return {
442
+ kind: "ok",
443
+ output: `wait complete after ${waitedMs}ms:
444
+ ${status.output}`,
445
+ details: { ...status.details, mode: "wait", timedOut: false, waitedMs }
446
+ };
447
+ }
448
+ function failedIntegrityReason(integrity) {
449
+ return integrity.ok ? "verification result unavailable" : integrity.reason;
450
+ }
451
+ function collectRunLine(row) {
452
+ const run = row.run;
453
+ const lines = run ? [
454
+ `- ${run.id} agent=${run.agentId} state=${run.outcome ?? run.status} node=${run.node?.id ?? "local"} exit=${run.exitCode ?? "n/a"} tokens=${run.tokenCount} cost=${formatCostAggregate(costAggregateForAmount(run.costUsd, run.costProvenance)) ?? COST_NOT_MEASURED} receipt=${run.receiptPath ?? "n/a"}${run.outcomeDetail ? ` detail=${run.outcomeDetail}` : ""}`
455
+ ] : [`- ${row.runId} agent=${row.agentId} state=missing (ledger row pruned; receipt may still exist)`];
456
+ if (row.assignmentId !== null) {
457
+ lines.unshift(
458
+ `- assignment=${row.assignmentId} status=${row.assignmentStatus ?? "unknown"} terminal=${row.runId}`,
459
+ ` attempts=${row.attemptRunIds.join(",") || "none"}`
460
+ );
461
+ }
462
+ if (row.evidence.receipt !== null) {
463
+ lines.push(
464
+ ...receiptEvidenceLabels(row.evidence.receipt, row.evidence.verification, row.evidence.integrity).map(
465
+ (label) => ` ${label}`
466
+ )
467
+ );
468
+ } else {
469
+ const reason = failedIntegrityReason(row.evidence.integrity);
470
+ lines.push(
471
+ row.evidence.integrityFailure ? ` RECEIPT INTEGRITY FAILED for ${row.runId} (${reason}); stored receipt fields and worker text are untrusted.` : ` receipt_integrity=unavailable reason=${JSON.stringify(reason)}`
472
+ );
473
+ }
474
+ if (row.evidence.integrityNote) lines.push(` ${row.evidence.integrityNote}`);
475
+ lines.push(` ${workerTextLabel(row.evidence.verification)}`);
476
+ const output = row.evidence.output;
477
+ if (output) {
478
+ const capped = truncateUtf8(output.text, COLLECT_TEXT_BYTES, "...");
479
+ const qualifier = output.state === "partial" ? " (partial; the run did not complete this message)" : "";
480
+ const truncatedNote = output.truncated ? ` (stored output truncated; full text was ${output.bytes} bytes)` : "";
481
+ lines.push(` agent output${qualifier}${truncatedNote}:`, ...capped.split("\n").map((line) => ` ${line}`));
482
+ if (row.evidence.receipt) {
483
+ lines.push(
484
+ ...workerTextNonEvidenceNotices(row.evidence.receipt, row.evidence.verification, output.text).map(
485
+ (notice) => ` ${notice}`
486
+ )
487
+ );
488
+ }
489
+ } else if (row.evidence.integrity.ok) {
490
+ lines.push(" (no assistant text captured)");
491
+ }
492
+ return lines;
493
+ }
494
+ function resolveCollectRow(deps, originalRunId, agentId) {
495
+ const original = deps.dispatch.getRun(originalRunId);
496
+ const rootRunId = original?.lineage?.rootRunId ?? originalRunId;
497
+ const assignment = deps.dispatch.assignments?.getStored(rootRunId) ?? null;
498
+ const runId = assignment?.terminalRunId ?? originalRunId;
499
+ const run = deps.dispatch.getRun(runId) ?? original;
500
+ return {
501
+ runId,
502
+ assignmentId: assignment?.assignmentId ?? null,
503
+ attemptRunIds: assignment?.attempts ?? [originalRunId],
504
+ assignmentStatus: assignment?.status ?? null,
505
+ agentId: run?.agentId ?? agentId,
506
+ run
507
+ };
508
+ }
509
+ async function runCollect(deps, batchId, runIds, timeoutWasPassed) {
510
+ let rows;
511
+ let scope;
512
+ let ledgerId = null;
513
+ if (batchId.length > 0) {
514
+ const detached = deps.dispatch.detached;
515
+ if (!detached) return { kind: "error", message: "monitor: no detached batch records are available in this context" };
516
+ const record = detached.get(batchId);
517
+ if (!record) return { kind: "error", message: `monitor: unknown batch '${batchId}'` };
518
+ ledgerId = record.ledgerId ?? null;
519
+ rows = record.runs.map((entry) => resolveCollectRow(deps, entry.assignmentId, entry.agentId));
520
+ scope = `batch ${batchId}${record.collectedAt !== null ? " (already collected)" : ""}`;
521
+ } else {
522
+ rows = runIds.map((runId) => resolveCollectRow(deps, runId, "unknown"));
523
+ scope = `${rows.length} run(s)`;
524
+ }
525
+ const pending = rows.filter((row) => {
526
+ if (row.assignmentStatus === null) return row.run !== null && !isTerminalRunEnvelope(row.run);
527
+ return row.assignmentStatus === "running";
528
+ });
529
+ if (pending.length > 0) {
530
+ const lines2 = [
531
+ `collect pending: ${pending.length} of ${rows.length} run(s) still in flight for ${scope}`,
532
+ ...rows.map((row) => {
533
+ const state = row.run === null ? "missing" : row.run.outcome ?? row.run.status;
534
+ return `- ${row.assignmentId ?? row.runId} agent=${row.agentId} state=${row.assignmentStatus ?? state}`;
535
+ }),
536
+ "",
537
+ 'Collect again later, or block on a single run with mode="wait".',
538
+ ...timeoutWasPassed ? ["", COLLECT_TIMEOUT_NOTICE] : []
539
+ ];
540
+ return {
541
+ kind: "ok",
542
+ output: lines2.join("\n"),
543
+ details: {
544
+ mode: "collect",
545
+ ...batchId.length > 0 ? { batchId } : {},
546
+ complete: false,
547
+ pendingCount: pending.length,
548
+ runCount: rows.length,
549
+ pendingRunIds: pending.map((row) => row.assignmentId ?? row.runId)
550
+ }
551
+ };
552
+ }
553
+ const failed = rows.filter(
554
+ (row) => row.run === null || row.run.exitCode !== 0 || row.run.outcome !== void 0 && row.run.outcome !== "succeeded" && row.run.outcome !== null
555
+ );
556
+ const missing = rows.filter((row) => row.run === null);
557
+ const board = ledgerId === null ? null : renderAgentLedgerBoard(ledgerId);
558
+ let collected = false;
559
+ if (batchId.length > 0) {
560
+ try {
561
+ const marked = await deps.dispatch.detached?.markCollected(batchId);
562
+ collected = marked !== null && marked !== void 0;
563
+ } catch {
564
+ collected = false;
565
+ }
566
+ }
567
+ const collectedRows = rows.map((row) => ({ ...row, evidence: durableRunEvidence(row.run) }));
568
+ const lines = [
569
+ `collect complete for ${scope}: total=${rows.length} failed=${failed.length}${missing.length > 0 ? ` missing=${missing.length}` : ""}`,
570
+ ...collectedRows.flatMap((row) => collectRunLine(row)),
571
+ ...board !== null ? ["", board] : [],
572
+ ...batchId.length > 0 && !collected ? ["", "note: the batch record could not be marked collected; it stays open for a later collect."] : [],
573
+ ...timeoutWasPassed ? ["", COLLECT_TIMEOUT_NOTICE] : []
574
+ ];
575
+ return {
576
+ kind: "ok",
577
+ output: lines.join("\n"),
578
+ details: {
579
+ mode: "collect",
580
+ ...batchId.length > 0 ? { batchId, collected } : {},
581
+ ...board !== null ? { agentLedgerBoard: board } : {},
582
+ complete: true,
583
+ runCount: rows.length,
584
+ failedCount: failed.length,
585
+ runs: collectedRows.map((row) => {
586
+ const output = row.evidence.output;
587
+ return {
588
+ runId: row.runId,
589
+ ...row.assignmentId !== null ? {
590
+ assignmentId: row.assignmentId,
591
+ assignmentStatus: row.assignmentStatus,
592
+ attemptRunIds: [...row.attemptRunIds],
593
+ terminalRunId: row.runId
594
+ } : {},
595
+ agentId: row.agentId,
596
+ state: row.run === null ? "missing" : row.run.outcome ?? row.run.status,
597
+ exitCode: row.run?.exitCode ?? null,
598
+ receiptPath: row.run?.receiptPath ?? null,
599
+ receiptIntegrity: row.evidence.integrity,
600
+ evidenceVerification: row.evidence.verification,
601
+ briefing: row.evidence.receipt?.briefing ?? null,
602
+ projectContext: row.evidence.receipt?.projectContext ?? null,
603
+ ...output ? { output: { state: output.state, bytes: output.bytes, truncated: output.truncated } } : {}
604
+ };
605
+ })
606
+ }
607
+ };
608
+ }
609
+ function createMonitorTool(deps) {
610
+ return {
611
+ ...monitorToolSurface,
612
+ async run(args, options) {
613
+ const explicitRunId = typeof args.run_id === "string" ? args.run_id.trim() : "";
614
+ const rawRunIds = Array.isArray(args.run_ids) ? args.run_ids : null;
615
+ const singletonRunId = rawRunIds?.length === 1 && typeof rawRunIds[0] === "string" ? rawRunIds[0].trim() : "";
616
+ const runId = explicitRunId.length > 0 ? explicitRunId : singletonRunId;
617
+ const mode = typeof args.mode === "string" ? args.mode : runId.length > 0 ? "status" : "list";
618
+ if (mode !== "status" && mode !== "peek" && mode !== "receipt" && mode !== "list" && mode !== "wait" && mode !== "collect" && mode !== "tools") {
619
+ return {
620
+ kind: "error",
621
+ message: `monitor: mode must be status, peek, receipt, list, wait, collect, or tools; got '${mode}'`
622
+ };
623
+ }
624
+ if (mode === "list") return listRuns(deps, options);
625
+ if (mode === "collect") {
626
+ const batchId = typeof args.batch_id === "string" ? args.batch_id.trim() : "";
627
+ const runIds = rawRunIds ? rawRunIds.filter((entry) => typeof entry === "string" && entry.trim().length > 0) : [];
628
+ if (batchId.length === 0 && runIds.length === 0) {
629
+ return { kind: "error", message: "monitor: mode=collect requires batch_id or a non-empty run_ids array" };
630
+ }
631
+ return runCollect(deps, batchId, runIds, Object.hasOwn(args, "timeout_ms"));
632
+ }
633
+ if (runId.length === 0) {
634
+ if (rawRunIds !== null) {
635
+ const entryLabel = rawRunIds.length === 1 ? "entry" : "entries";
636
+ return {
637
+ kind: "error",
638
+ message: `monitor: mode=${mode} observes one run; got run_ids with ${rawRunIds.length} ${entryLabel} \u2014 pass run_id=<one id>, or use mode=collect run_ids=[...] for a batch`
639
+ };
640
+ }
641
+ return {
642
+ kind: "error",
643
+ message: `monitor: mode=${mode} observes one run and needs run_id; call monitor(mode="list") first to see the run ids this session knows about`
644
+ };
645
+ }
646
+ if (mode === "wait") {
647
+ const rawTimeout = typeof args.timeout_ms === "number" && Number.isFinite(args.timeout_ms) ? args.timeout_ms : NaN;
648
+ const timeoutMs = Number.isFinite(rawTimeout) && rawTimeout > 0 ? Math.min(Math.floor(rawTimeout), WAIT_MAX_TIMEOUT_MS) : WAIT_DEFAULT_TIMEOUT_MS;
649
+ return runWait(deps, runId, timeoutMs, options?.signal);
650
+ }
651
+ if (mode === "status") return runStatus(deps, runId);
652
+ if (mode === "peek") return runPeek(deps, runId);
653
+ if (mode === "tools") return runTools(deps, runId);
654
+ return runReceipt(deps, runId);
655
+ }
656
+ };
657
+ }
658
+ export {
659
+ createMonitorTool
660
+ };
661
+ //# sourceMappingURL=monitor-MEQA5C3I.js.map