@iowarp/clio-coder 0.3.1 → 0.3.3

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 (601) hide show
  1. package/CHANGELOG.md +233 -373
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.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-2DJ2KNFG.js +2095 -0
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
  12. package/dist/chunk-2VTFPG5O.js +48 -0
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4VP4KH3K.js +962 -0
  16. package/dist/chunk-4XUGQOHA.js +797 -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-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
  21. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  22. package/dist/chunk-65DEGPJ6.js +52 -0
  23. package/dist/chunk-6EJMN2Y3.js +17 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6SGHMWE3.js +277 -0
  26. package/dist/chunk-6XLNIQDB.js +27 -0
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/chunk-7MNJORFF.js +22 -0
  29. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  30. package/dist/chunk-AGYYIBLL.js +1069 -0
  31. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  32. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  33. package/dist/chunk-CBCAPZAA.js +229 -0
  34. package/dist/chunk-CMZWFGD2.js +352 -0
  35. package/dist/chunk-COU2UHX6.js +400 -0
  36. package/dist/chunk-DSELYM6W.js +1077 -0
  37. package/dist/chunk-DUYJ5IO6.js +644 -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-FCSXB6T2.js +338 -0
  42. package/dist/chunk-FJ3H4MN5.js +48 -0
  43. package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G4BMMOKF.js +182 -0
  46. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  47. package/dist/chunk-HC4CLZ2Y.js +68 -0
  48. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  49. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  50. package/dist/chunk-I4HZDVNP.js +73 -0
  51. package/dist/chunk-IKCO5N3L.js +162 -0
  52. package/dist/chunk-IR4CFBFN.js +56 -0
  53. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  54. package/dist/chunk-J7CWMCQD.js +255 -0
  55. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  56. package/dist/chunk-KZWTDYJF.js +217 -0
  57. package/dist/chunk-LBMZMYH2.js +285 -0
  58. package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
  59. package/dist/chunk-LW6DSM3M.js +5135 -0
  60. package/dist/chunk-LWLEKMDQ.js +3482 -0
  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-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  64. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  65. package/dist/chunk-OAO4GE4M.js +619 -0
  66. package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
  67. package/dist/chunk-OKGUZO2U.js +34 -0
  68. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  69. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  70. package/dist/chunk-OQE5J4C6.js +73 -0
  71. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  72. package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
  73. package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
  74. package/dist/chunk-POHLU5DW.js +1186 -0
  75. package/dist/chunk-QKMUKYO7.js +4961 -0
  76. package/dist/chunk-SRDMMSEP.js +16405 -0
  77. package/dist/chunk-SST6Z5JA.js +80 -0
  78. package/dist/chunk-STBPMHSX.js +2456 -0
  79. package/dist/chunk-T6YILFSB.js +80 -0
  80. package/dist/chunk-TZK7PACC.js +174 -0
  81. package/dist/chunk-TZTZS7QK.js +227 -0
  82. package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
  83. package/dist/chunk-UOV2BYIW.js +107 -0
  84. package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
  85. package/dist/chunk-VAKQQHWR.js +434 -0
  86. package/dist/chunk-VG7TBQIY.js +128 -0
  87. package/dist/chunk-VJWL6YS5.js +244 -0
  88. package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-X4RCMKVQ.js +641 -0
  91. package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
  92. package/dist/chunk-XBXAASKX.js +18 -0
  93. package/dist/chunk-XN3L4EYL.js +46 -0
  94. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  95. package/dist/chunk-YHZX5GEU.js +193 -0
  96. package/dist/chunk-YXLYO42X.js +91 -0
  97. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  98. package/dist/chunk-ZI647VB5.js +37 -0
  99. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  100. package/dist/chunk-ZWMF7253.js +1882 -0
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-JOU4FXVA.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-XCDVKR23.js} +92 -55
  108. package/dist/configure-4GAP54ZW.js +42 -0
  109. package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
  110. package/dist/context-5VKGUVJJ.js +866 -0
  111. package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
  126. package/dist/monitor-GE4ID3IA.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
  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-ZU3QMZPZ.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
  137. package/dist/terminal-lease-BNAHVHBS.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-JQHHPQ4K.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
  143. package/dist/verify-375KUB3Y.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.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 +387 -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 +45 -9
  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 +715 -278
  444. package/src/interactive/chat-renderer.ts +306 -85
  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 +253 -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 +42 -22
  456. package/src/interactive/footer-panel.ts +8 -3
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +203 -17
  459. package/src/interactive/interactive-event-projection.ts +18 -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 +184 -117
  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/ask-user.ts +146 -24
  474. package/src/interactive/overlays/decisions.ts +300 -0
  475. package/src/interactive/overlays/help-reference.ts +15 -10
  476. package/src/interactive/overlays/model-selector.ts +34 -16
  477. package/src/interactive/overlays/session-selector.ts +18 -0
  478. package/src/interactive/overlays/settings.ts +105 -17
  479. package/src/interactive/overlays/skills-hub.ts +4 -4
  480. package/src/interactive/overlays/tree-selector.ts +41 -6
  481. package/src/interactive/render-trace.ts +499 -90
  482. package/src/interactive/renderers/compaction-summary.ts +2 -2
  483. package/src/interactive/renderers/diff.ts +115 -104
  484. package/src/interactive/renderers/mermaid.ts +53 -0
  485. package/src/interactive/renderers/tool-execution.ts +516 -168
  486. package/src/interactive/renderers/worker-entry.ts +20 -4
  487. package/src/interactive/session-switch-settlement.ts +10 -0
  488. package/src/interactive/slash-autocomplete.ts +6 -114
  489. package/src/interactive/slash-commands.ts +135 -47
  490. package/src/interactive/slash-spec.ts +9 -38
  491. package/src/interactive/status/controller.ts +5 -1
  492. package/src/interactive/status/index.ts +12 -1
  493. package/src/interactive/status/reasoning.ts +87 -0
  494. package/src/interactive/status/summary.ts +13 -2
  495. package/src/interactive/stdout-backpressure.ts +99 -0
  496. package/src/interactive/stream-pacer.ts +530 -0
  497. package/src/interactive/stream-pacing-policy.ts +66 -0
  498. package/src/interactive/tasks-overlay.ts +368 -14
  499. package/src/interactive/terminal-lease.ts +485 -0
  500. package/src/interactive/theme/tokens.ts +1 -1
  501. package/src/interactive/transcript-detail.ts +120 -0
  502. package/src/interactive/turn-context.ts +4 -3
  503. package/src/interactive/turn-persistence.ts +30 -13
  504. package/src/interactive/turn-queues.ts +12 -0
  505. package/src/interactive/turn-recovery.ts +25 -8
  506. package/src/interactive/turn-runtime.ts +79 -12
  507. package/src/interactive/turn-state.ts +10 -0
  508. package/src/interactive/view/artifacts.ts +114 -4
  509. package/src/interactive/view/view-overlay.ts +3 -0
  510. package/src/interactive/welcome-dashboard.ts +17 -16
  511. package/src/interactive/worker-receipts.ts +52 -3
  512. package/src/interactive/worker-stream.ts +5 -1
  513. package/src/tools/agent-tools.ts +23 -3
  514. package/src/tools/artifact.ts +2 -2
  515. package/src/tools/ask-user.ts +23 -13
  516. package/src/tools/bash.ts +30 -2
  517. package/src/tools/bootstrap.ts +34 -431
  518. package/src/tools/builtin-tool-catalog.ts +271 -0
  519. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  520. package/src/tools/codewiki/code-nav.ts +8 -22
  521. package/src/tools/codewiki/shared.ts +41 -38
  522. package/src/tools/context/docs-engine.ts +14 -3
  523. package/src/tools/context/index.ts +107 -28
  524. package/src/tools/context/surface.ts +19 -0
  525. package/src/tools/core-bootstrap.ts +168 -0
  526. package/src/tools/credential-present.ts +5 -5
  527. package/src/tools/dispatch-admission.ts +533 -0
  528. package/src/tools/dispatch-background.ts +54 -0
  529. package/src/tools/dispatch-event-text.ts +6 -0
  530. package/src/tools/dispatch-plan.ts +9 -4
  531. package/src/tools/dispatch-run-events.ts +238 -0
  532. package/src/tools/dispatch-runner.ts +2370 -0
  533. package/src/tools/dispatch-scout-admission.ts +295 -0
  534. package/src/tools/dispatch-types.ts +77 -0
  535. package/src/tools/dispatch.ts +67 -3161
  536. package/src/tools/find.ts +4 -2
  537. package/src/tools/grep.ts +2 -2
  538. package/src/tools/lazy-tool.ts +60 -0
  539. package/src/tools/ledger.ts +3 -3
  540. package/src/tools/monitor-surface.ts +36 -0
  541. package/src/tools/monitor.ts +2 -32
  542. package/src/tools/observers.ts +2 -2
  543. package/src/tools/presentation.ts +107 -0
  544. package/src/tools/registry.ts +45 -27
  545. package/src/tools/safe-exec.ts +2 -2
  546. package/src/tools/steer-surface.ts +17 -0
  547. package/src/tools/steer.ts +2 -13
  548. package/src/tools/tasks.ts +108 -11
  549. package/src/tools/truncate.ts +25 -184
  550. package/src/tools/verify/frontend.ts +3 -1
  551. package/src/tools/verify/index.ts +3 -38
  552. package/src/tools/verify/surface.ts +46 -0
  553. package/src/tools/web-fetch-surface.ts +23 -0
  554. package/src/tools/web-fetch.ts +2 -20
  555. package/src/tools/write.ts +7 -2
  556. package/src/worker/entry.ts +39 -2
  557. package/src/worker/spec-contract.ts +26 -5
  558. package/dist/chunk-7SS2CTV2.js +0 -61361
  559. package/dist/chunk-DKGKUHFA.js +0 -924
  560. package/dist/chunk-GEP36Y4X.js +0 -12796
  561. package/dist/chunk-XYWBQRDM.js +0 -137
  562. package/dist/clio-BZVGEUFJ.js +0 -58
  563. package/dist/configure-S7S6F6CL.js +0 -32
  564. package/docs/html/agents_blueprint.html +0 -936
  565. package/docs/html/alcf_blueprint.html +0 -324
  566. package/docs/html/architecture_blueprint.html +0 -850
  567. package/docs/html/commands_blueprint.html +0 -939
  568. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  569. package/docs/html/configuration_blueprint.html +0 -1080
  570. package/docs/html/context_blueprint.html +0 -603
  571. package/docs/html/documentation_blueprint.html +0 -832
  572. package/docs/html/environment_blueprint.html +0 -404
  573. package/docs/html/eval_blueprint.html +0 -743
  574. package/docs/html/evals_internal_blueprint.html +0 -190
  575. package/docs/html/evolution_blueprint.html +0 -674
  576. package/docs/html/extensions_blueprint.html +0 -2065
  577. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  578. package/docs/html/index.html +0 -919
  579. package/docs/html/lifecycle_blueprint.html +0 -723
  580. package/docs/html/memory_blueprint.html +0 -699
  581. package/docs/html/middleware_blueprint.html +0 -664
  582. package/docs/html/models_blueprint.html +0 -2366
  583. package/docs/html/observability_blueprint.html +0 -683
  584. package/docs/html/provider_adapter_blueprint.html +0 -245
  585. package/docs/html/safety_blueprint.html +0 -1386
  586. package/docs/html/shared.css +0 -571
  587. package/docs/html/shared.js +0 -143
  588. package/docs/html/skills_blueprint.html +0 -671
  589. package/docs/html/soak_blueprint.html +0 -182
  590. package/docs/html/tool_usage_blueprint.html +0 -350
  591. package/docs/html/tools_blueprint.html +0 -2249
  592. package/docs/html/trace_blueprint.html +0 -235
  593. package/docs/html/tui_design_blueprint.html +0 -374
  594. package/docs/html/validation_blueprint.html +0 -961
  595. package/docs/html/worker_dispatch_blueprint.html +0 -231
  596. package/src/core/release.ts +0 -2
  597. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  598. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  599. package/src/engine/apis/lmstudio-native.ts +0 -1438
  600. package/src/engine/apis/thinking-replay.ts +0 -11
  601. 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-4XUGQOHA.js";
15
+ import "./chunk-HC4CLZ2Y.js";
16
+ import "./chunk-HFSBBKSQ.js";
17
+ import {
18
+ UNVERIFIABLE_RECEIPT_VERIFICATION,
19
+ renderAgentLedgerBoard
20
+ } from "./chunk-SRDMMSEP.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-LWLEKMDQ.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-COU2UHX6.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-GE4ID3IA.js.map