@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
@@ -3,10 +3,10 @@ import path from "node:path";
3
3
  import { Type } from "typebox";
4
4
  import { artifactDefaultPath, CLIO_ARTIFACT_DIR } from "../core/artifact-paths.js";
5
5
  import { ToolNames } from "../core/tool-names.js";
6
+ import { StringEnum } from "../engine/ai.js";
6
7
  import { withFileMutationQueue } from "./file-mutation-queue.js";
7
8
  import { resolveToCwd } from "./path-utils.js";
8
9
  import type { ToolResult, ToolSpec } from "./registry.js";
9
- import { stringEnum } from "./string-enum.js";
10
10
 
11
11
  /**
12
12
  * The artifact tool: terminal document writers. kind=plan|review|report writes
@@ -85,7 +85,7 @@ export function createArtifactTool(deps: ArtifactToolDeps = {}): ToolSpec {
85
85
  name: ToolNames.Artifact,
86
86
  description: `Write a named artifact: kind=plan|review|report writes a terminal Markdown document and completes the turn. Without an explicit path it lands in ${CLIO_ARTIFACT_DIR}/ (PLAN.md, REVIEW.md, REPORT.md); pass path only when the user asked for a file at a specific place.`,
87
87
  parameters: Type.Object({
88
- kind: stringEnum(ARTIFACT_KINDS, "Artifact kind."),
88
+ kind: StringEnum(ARTIFACT_KINDS, { description: "Artifact kind." }),
89
89
  content: Type.String({ description: "Full Markdown body." }),
90
90
  title: Type.Optional(Type.String({ description: "Document title." })),
91
91
  path: Type.Optional(Type.String({ description: "Override the default artifact path." })),
@@ -5,6 +5,7 @@ import { Type } from "typebox";
5
5
  import { ToolNames } from "../core/tool-names.js";
6
6
  import { clioStateDir } from "../core/xdg.js";
7
7
  import { type AutonomyExposure, DEFAULT_AUTONOMY_EXPOSURE } from "../domains/safety/autonomy.js";
8
+ import { StringEnum } from "../engine/ai.js";
8
9
  import type {
9
10
  AskUserToolPolicy,
10
11
  AskUserTranscriptAnswer,
@@ -14,7 +15,6 @@ import type {
14
15
  ToolResult,
15
16
  ToolSpec,
16
17
  } from "./registry.js";
17
- import { stringEnum } from "./string-enum.js";
18
18
 
19
19
  export const ASK_USER_OTHER_LABEL = "Other (type your answer)";
20
20
 
@@ -75,16 +75,15 @@ export interface AskUserToolDeps {
75
75
 
76
76
  export const askUserParameters = Type.Object({
77
77
  action: Type.Optional(
78
- stringEnum(
79
- ["ask", "complete"],
80
- "ask presents a round of questions; complete (exactly once) records decisions before final prose.",
81
- ),
78
+ StringEnum(["ask", "complete"], {
79
+ description: "ask presents a round of questions; complete (exactly once) records decisions before final prose.",
80
+ }),
82
81
  ),
83
82
  mode: Type.Optional(
84
- stringEnum(
85
- ["round", "single_question"],
86
- "Caps how many questions this call may carry. single_question accepts exactly 1 and rejects the call otherwise (interviews); round accepts 1 to 4 tightly related confirmations. Default is round.",
87
- ),
83
+ StringEnum(["round", "single_question"], {
84
+ description:
85
+ "Caps how many questions this call may carry. single_question accepts exactly 1 and rejects the call otherwise (interviews); round accepts 1 to 4 tightly related confirmations. Default is round.",
86
+ }),
88
87
  ),
89
88
  questions: Type.Optional(
90
89
  Type.Array(
@@ -118,10 +117,10 @@ export const askUserParameters = Type.Object({
118
117
  ),
119
118
  summary: Type.Optional(Type.String({ description: "Short closeout summary for action=complete." })),
120
119
  exposure: Type.Optional(
121
- stringEnum(
122
- ["local", "outward"],
123
- "Blast radius of this gate. local (default) stays inside the workspace. outward means answering it publishes or sends something the operator cannot take back (filing an issue or PR, posting a comment, pushing, releasing); at autonomy auto-edit an outward gate parks for the operator instead of being answered automatically.",
124
- ),
120
+ StringEnum(["local", "outward"], {
121
+ description:
122
+ "Blast radius of this gate. local (default) stays inside the workspace. outward means answering it publishes or sends something the operator cannot take back (filing an issue or PR, posting a comment, pushing, releasing); at autonomy auto-edit an outward gate parks for the operator instead of being answered automatically.",
123
+ }),
125
124
  ),
126
125
  });
127
126
 
@@ -558,6 +557,17 @@ export async function finalizeAskUserInterview(
558
557
  await persistAskUserTranscript(policy, options);
559
558
  }
560
559
 
560
+ /** Settle a turn-owned interview, then hand its immutable policy to one durable producer. */
561
+ export async function finalizeAskUserInterviewForHost(
562
+ policy: AskUserToolPolicy,
563
+ reason: string,
564
+ options?: ToolInvokeOptions,
565
+ onFinalized?: (policy: AskUserToolPolicy) => void,
566
+ ): Promise<void> {
567
+ await finalizeAskUserInterview(policy, reason, options);
568
+ onFinalized?.(policy);
569
+ }
570
+
561
571
  async function defaultAskUserHandler(): Promise<AskUserResult> {
562
572
  return cancelledAskUserResult();
563
573
  }
package/src/tools/bash.ts CHANGED
@@ -21,6 +21,28 @@ interface ShapedBashOutput {
21
21
  details?: ToolResultDetails;
22
22
  }
23
23
 
24
+ /** Bound a cumulative live snapshot without writing an offload file per tick. */
25
+ function shapeBashProgress(rawOutput: string): ToolResult {
26
+ const truncation = truncateTail(rawOutput, {
27
+ maxLines: DEFAULT_MAX_LINES,
28
+ maxBytes: BASH_DISPLAY_MAX_BYTES - BASH_TAIL_NOTE_RESERVE,
29
+ });
30
+ const bytes = Buffer.byteLength(rawOutput, "utf8");
31
+ return {
32
+ kind: "ok",
33
+ output: truncation.content,
34
+ details: {
35
+ resultSize: {
36
+ bytes,
37
+ shownBytes: truncation.outputBytes,
38
+ maxBytes: BASH_DISPLAY_MAX_BYTES,
39
+ truncated: truncation.truncated,
40
+ policy: "tail",
41
+ },
42
+ },
43
+ };
44
+ }
45
+
24
46
  // Tail-truncate the combined output for display, spilling the full output to a
25
47
  // scratch file first when it overflows the display cap. Setting
26
48
  // `details.resultSize.offloadPath` tells the registry result-shaper to leave
@@ -132,11 +154,17 @@ export const bashTool: ToolSpec = {
132
154
  }
133
155
  const timeout = typeof args.timeout_ms === "number" && args.timeout_ms > 0 ? args.timeout_ms : 300_000;
134
156
  try {
135
- const result = await runBashCommand(args.command, {
157
+ const runOptions: Parameters<typeof runBashCommand>[1] = {
136
158
  cwd,
137
159
  timeoutMs: timeout,
138
160
  ...(options?.signal === undefined ? {} : { signal: options.signal }),
139
- });
161
+ };
162
+ if (options?.onUpdate !== undefined) {
163
+ runOptions.onUpdate = (progress) => {
164
+ options.onUpdate?.(shapeBashProgress(combineBashOutput(progress)));
165
+ };
166
+ }
167
+ const result = await runBashCommand(args.command, runOptions);
140
168
  const { error, aborted, timedOut, outputCapped } = result;
141
169
  if (aborted) {
142
170
  return { kind: "error", message: "bash: command aborted" };
@@ -1,441 +1,42 @@
1
1
  import type { SafeEventBus } from "../core/event-bus.js";
2
- import { type ToolName, ToolNames } from "../core/tool-names.js";
3
2
  import type { AgentSpec } from "../domains/agents/spec.js";
4
3
  import type { DispatchContract } from "../domains/dispatch/contract.js";
5
4
  import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
6
- import type { LoadSkillsInput } from "../domains/resources/index.js";
7
5
  import type { AutonomyLevel } from "../domains/safety/autonomy.js";
8
- import type { SessionContract } from "../domains/session/contract.js";
9
- import { createTaskBoardStore, type TaskBoardStore } from "../domains/session/task-board.js";
10
- import { probeWorkspace } from "../domains/session/workspace/index.js";
11
- import type { AgentLedgerPort } from "../worker/protocol.js";
12
- import { createArtifactTool } from "./artifact.js";
13
- import { type AskUserHandler, createAskUserTool } from "./ask-user.js";
14
- import { bashTool } from "./bash.js";
15
- import { codeNavTool } from "./codewiki/code-nav.js";
16
- import { createContextTool } from "./context/index.js";
17
- import { credentialPresentTool } from "./credential-present.js";
18
- import { createDispatchRunEventRegistry, createDispatchTool, type DispatchBackgroundRegistry } from "./dispatch.js";
19
- import { editTool } from "./edit.js";
20
- import { findTool } from "./find.js";
21
- import { grepTool } from "./grep.js";
22
- import { createLedgerTool } from "./ledger.js";
23
- import { lsTool } from "./ls.js";
24
- import { createMonitorTool } from "./monitor.js";
25
- import { networkToolsDisabled } from "./network-policy.js";
26
- import { OBSERVATION_POLICY_SLACK_BYTES, OBSERVE_SELF_CAPS } from "./observation.js";
27
- import { assertBuiltinToolPolicy } from "./policy.js";
28
- import { readMaxBytes, readTool } from "./read.js";
29
- import type { ToolMetadata, ToolRegistry, ToolSourceInfo, ToolSpec } from "./registry.js";
30
- import { gitTool } from "./safe-exec.js";
31
- import { createSteerTool } from "./steer.js";
32
- import { createTasksTool } from "./tasks.js";
33
- import { verifyTool } from "./verify/index.js";
34
- import { webFetchTool } from "./web-fetch.js";
35
- import { writeTool } from "./write.js";
6
+ import { builtin, toolPromptHintsForNames } from "./builtin-tool-catalog.js";
7
+ import { assertRegisteredBuiltinTools, type CoreToolBootstrapDeps, registerCoreTools } from "./core-bootstrap.js";
8
+ import { createDispatchRunEventRegistry, createDispatchTool } from "./dispatch.js";
9
+ import type { DispatchBackgroundRegistry } from "./dispatch-background.js";
10
+ import { lazyTool } from "./lazy-tool.js";
11
+ import { monitorToolSurface } from "./monitor-surface.js";
12
+ import type { ToolRegistry } from "./registry.js";
13
+ import { steerToolSurface } from "./steer-surface.js";
36
14
 
37
- export interface ToolBootstrapDeps {
38
- session?: SessionContract;
15
+ export { toolPromptHintsForNames };
16
+
17
+ export interface ToolBootstrapDeps extends CoreToolBootstrapDeps {
39
18
  dispatch?: DispatchContract;
40
19
  bus?: SafeEventBus;
41
- askUser?: AskUserHandler;
42
- /**
43
- * Shared task-board store so the tool, the turn-end nudge, and the TUI all
44
- * read one board. Absent (workers, headless without a session) the tool
45
- * gets a private in-memory board without ledger persistence.
46
- */
47
- taskBoard?: TaskBoardStore;
48
- /**
49
- * The run's agent-ledger port. The ledger tool is registered unconditionally
50
- * because attestedToolSignature signs the names a bare registry produces and
51
- * a conditional registration would drift that signature; only the injected
52
- * port varies, and its absence is what makes the tool answer that this run
53
- * has no coordination ledger.
54
- */
55
- agentLedger?: AgentLedgerPort;
56
- /** Agent fleet catalog renderer for the dispatch tool's list action. */
57
20
  getAgentCatalog?: () => string;
58
21
  getAgentSpecs?: () => ReadonlyArray<AgentSpec>;
59
- /** Strict recipe facts the dispatch tool derives each request's execution role from. */
60
22
  getAgentRoleFacts?: AgentRoleFactsResolver;
61
- /** Session-effective autonomy for dispatch plan provenance and compete winner handling. */
62
23
  getAutonomy?: () => AutonomyLevel;
63
- /** Scheduling cost ceiling recorded on dispatch plan provenance. */
64
24
  getCostCeilingUsd?: () => number;
65
- /**
66
- * Operator-initiated attach-to-detach conversion of a running dispatch. Only
67
- * the interactive composition root wires it, because only that process has a
68
- * keypress to fire the control with.
69
- */
70
25
  dispatchBackground?: DispatchBackgroundRegistry;
71
- getSkillLoaderOptions?: () => Pick<
72
- LoadSkillsInput,
73
- "trustProjectCompatRoots" | "disableDiscovery" | "explicitSkillPaths"
74
- >;
75
- }
76
-
77
- function withSourceInfo<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
78
- return { ...spec, sourceInfo };
79
- }
80
-
81
- function withMetadata<T extends ToolSpec>(spec: T, metadata: ToolMetadata): T {
82
- return { ...spec, metadata };
83
- }
84
-
85
- // Registry-backstop caps derive from the OBSERVE self-caps in
86
- // src/tools/observation.ts: policy cap = self cap + slack, so a tool's own
87
- // envelope notice (with its exact continuation call) survives shaping instead
88
- // of being cut again and replaced by a generic hint. The 16KB summary
89
- // policies are the explicit overrides for tools whose output is inherently
90
- // aggregate (shell, verification runs, git, dispatch receipts, web pages).
91
- const policyCap = (selfCapBytes: number): number => selfCapBytes + OBSERVATION_POLICY_SLACK_BYTES;
92
-
93
- const observePolicy = (selfCapBytes: number, followUpHint: string) =>
94
- ({ kind: "bounded", maxBytes: policyCap(selfCapBytes), followUpHint }) satisfies ToolMetadata["resultSizePolicy"];
95
-
96
- const summaryPolicy = (followUpHint: string) =>
97
- ({ kind: "summary", maxBytes: 16_384, followUpHint }) satisfies ToolMetadata["resultSizePolicy"];
98
-
99
- const exactMutationPolicy = {
100
- kind: "exact",
101
- maxBytes: 8_192,
102
- followUpHint: "Inspect the changed file or git diff for exact follow-up context.",
103
- } satisfies ToolMetadata["resultSizePolicy"];
104
-
105
- // Per-tool metadata, organized by plane. OBSERVE tools share the observation
106
- // envelope, the turn budget pool, and derived policy caps; every other plane
107
- // declares its posture explicitly.
108
- const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
109
- // OBSERVE: read-class, parallel, envelope + shared turn budget.
110
- [ToolNames.Read]: {
111
- objective: "Read exact UTF-8 file content with line and byte bounds.",
112
- uiLabel: "Read",
113
- retrySafety: "idempotent",
114
- resultSizePolicy: observePolicy(
115
- readMaxBytes(),
116
- "Use offset/limit or a narrower locate/search tool call to inspect omitted content.",
117
- ),
118
- costLatency: "local_fast",
119
- },
120
- [ToolNames.Grep]: {
121
- objective: "Search file contents and return line-referenced matches.",
122
- uiLabel: "Grep",
123
- retrySafety: "idempotent",
124
- resultSizePolicy: observePolicy(
125
- OBSERVE_SELF_CAPS.grepContent,
126
- "Refine the pattern, path, glob, context, or limit, or use mode=files, to inspect omitted matches.",
127
- ),
128
- costLatency: "local_medium",
129
- },
130
- [ToolNames.Find]: {
131
- objective: "Find paths by glob pattern with optional mtime ordering.",
132
- uiLabel: "Find",
133
- retrySafety: "idempotent",
134
- resultSizePolicy: observePolicy(
135
- OBSERVE_SELF_CAPS.find,
136
- "Refine the pattern, path, or limit to inspect omitted paths.",
137
- ),
138
- costLatency: "local_medium",
139
- },
140
- [ToolNames.Ls]: {
141
- objective: "List directory entries.",
142
- uiLabel: "List",
143
- retrySafety: "idempotent",
144
- resultSizePolicy: observePolicy(OBSERVE_SELF_CAPS.ls, "Raise limit or list a narrower directory."),
145
- costLatency: "local_fast",
146
- },
147
- [ToolNames.CodeNav]: {
148
- objective: "Navigate the codewiki index by symbol, path, entry points, outline, imports, or importers.",
149
- uiLabel: "Nav",
150
- retrySafety: "idempotent",
151
- resultSizePolicy: observePolicy(OBSERVE_SELF_CAPS.codeNav, "Raise limit or use a narrower mode/query."),
152
- costLatency: "local_fast",
153
- promptHint:
154
- "Use code_nav for indexed code navigation (modes: symbol, path, entries, outline, deps, dependents, wiki).",
155
- },
156
- [ToolNames.Context]: {
157
- objective: "Return workspace, bundled-docs, or skill context.",
158
- uiLabel: "Context",
159
- retrySafety: "idempotent",
160
- resultSizePolicy: observePolicy(
161
- Math.max(OBSERVE_SELF_CAPS.contextDocs, OBSERVE_SELF_CAPS.contextSkills, OBSERVE_SELF_CAPS.contextWorkspace),
162
- "Use a narrower query or scope to inspect omitted content.",
163
- ),
164
- costLatency: "local_fast",
165
- promptHint:
166
- 'Call context with scope="skills" to list available skills; when one matches the task, suggest the operator run /skill:<name> and never load it uninvited. When the user message carries a skill request, first load that skill via context (scope="skills", name=<skill>) before doing anything else.',
167
- },
168
- [ToolNames.CredentialPresent]: {
169
- objective: "Check whether a credential key is present without returning its value.",
170
- uiLabel: "Credential",
171
- retrySafety: "idempotent",
172
- resultSizePolicy: {
173
- kind: "exact",
174
- maxBytes: 4_096,
175
- followUpHint: "Use the boolean result only; never ask to print the credential value.",
176
- },
177
- costLatency: "local_fast",
178
- },
179
- // MUTATE: write-class, sequential, file-mutation queue.
180
- [ToolNames.Write]: {
181
- objective: "Write a complete UTF-8 file.",
182
- uiLabel: "Write",
183
- retrySafety: "not_retry_safe",
184
- resultSizePolicy: exactMutationPolicy,
185
- costLatency: "local_fast",
186
- },
187
- [ToolNames.Edit]: {
188
- objective: "Apply exact text replacements to one file.",
189
- uiLabel: "Edit",
190
- retrySafety: "not_retry_safe",
191
- resultSizePolicy: exactMutationPolicy,
192
- costLatency: "local_fast",
193
- },
194
- // EXECUTE: the safe-exec spine (bash offloads its own overflow).
195
- [ToolNames.Bash]: {
196
- objective: "Execute an explicit shell command when narrower tools are insufficient.",
197
- uiLabel: "Shell",
198
- retrySafety: "unknown",
199
- resultSizePolicy: summaryPolicy(
200
- "Use a narrower command or a dedicated verification/read/search tool to inspect omitted output.",
201
- ),
202
- costLatency: "local_slow",
203
- },
204
- [ToolNames.Git]: {
205
- objective: "Read-only git inspection: status, diff, or log.",
206
- uiLabel: "Git",
207
- retrySafety: "idempotent",
208
- resultSizePolicy: summaryPolicy("Limit the diff/log to one path or fewer commits."),
209
- costLatency: "local_fast",
210
- },
211
- [ToolNames.Verify]: {
212
- objective: "Run declared verification checks (scripts or frontend artifacts).",
213
- uiLabel: "Verify",
214
- retrySafety: "retry_safe",
215
- resultSizePolicy: summaryPolicy(
216
- "Rerun the check with narrower args or inspect the named failing file/test directly.",
217
- ),
218
- costLatency: "local_slow",
219
- },
220
- // ORCHESTRATE: agent-class, receipts as evidence.
221
- [ToolNames.Tasks]: {
222
- objective: "Declare and track the session task board with evidence-carrying completions.",
223
- uiLabel: "Tasks",
224
- // A repeated plan/start/done lands on the same board state; a repeated
225
- // add duplicates a task, so the surface as a whole is not retry safe.
226
- retrySafety: "not_retry_safe",
227
- resultSizePolicy: {
228
- kind: "exact",
229
- maxBytes: 8_192,
230
- followUpHint: 'Call tasks with action="list" to re-read the board.',
231
- },
232
- costLatency: "local_fast",
233
- promptHint:
234
- 'When a request contains three or more distinct steps, declare the board before your first edit: tasks action="plan" with a title and the task list. ' +
235
- 'Mark one task active with "start" before working it, close it with "done" plus an evidence note ' +
236
- '(what proves it works), and use "block" with a reason instead of silently stalling.',
237
- },
238
- [ToolNames.Ledger]: {
239
- objective: "Coordinate with the peer workers of this dispatch through typed claims, findings, and reviews.",
240
- uiLabel: "Ledger",
241
- // A repeated post lands a second entry and spends another of the run's
242
- // twenty posts, so the surface as a whole is not retry safe.
243
- retrySafety: "not_retry_safe",
244
- resultSizePolicy: {
245
- kind: "exact",
246
- maxBytes: 16_384,
247
- followUpHint: 'Call ledger with action="read" and a since sequence to re-read only what is new.',
248
- },
249
- costLatency: "local_fast",
250
- },
251
- [ToolNames.Dispatch]: {
252
- objective: "Dispatch bounded tasks to configured Clio workers.",
253
- uiLabel: "Dispatch",
254
- retrySafety: "not_retry_safe",
255
- resultSizePolicy: summaryPolicy(
256
- "Use the dispatch receipt paths or ask a narrower worker follow-up for omitted output.",
257
- ),
258
- costLatency: "agent",
259
- promptHint:
260
- "Call dispatch with list:true only when the operator asks about agents, workers, or the fleet; never use it to inventory direct tools.",
261
- },
262
- [ToolNames.Monitor]: {
263
- objective: "Inspect dispatched runs: state, recent events, receipts.",
264
- uiLabel: "Monitor",
265
- retrySafety: "idempotent",
266
- resultSizePolicy: summaryPolicy("Use monitor(mode=receipt) or read the receipt path for full details."),
267
- costLatency: "local_fast",
268
- },
269
- [ToolNames.Steer]: {
270
- objective: "Guide or cancel a running dispatched worker.",
271
- uiLabel: "Steer",
272
- retrySafety: "not_retry_safe",
273
- resultSizePolicy: {
274
- kind: "exact",
275
- maxBytes: 4_096,
276
- followUpHint: "Use monitor(mode=status) to confirm the run state after steering.",
277
- },
278
- costLatency: "local_fast",
279
- },
280
- // RETRIEVE: network-class.
281
- [ToolNames.WebFetch]: {
282
- objective: "Fetch HTTP(S) text for explicit external research.",
283
- uiLabel: "Fetch",
284
- retrySafety: "retry_safe",
285
- resultSizePolicy: {
286
- kind: "bounded",
287
- maxBytes: 16_384,
288
- followUpHint: "Fetch a narrower URL or lower max_bytes to inspect a specific section.",
289
- },
290
- costLatency: "network",
291
- },
292
- // INTERACT: operator dialogue.
293
- [ToolNames.AskUser]: {
294
- objective: "Ask the operator structured questions.",
295
- uiLabel: "Ask",
296
- retrySafety: "not_retry_safe",
297
- resultSizePolicy: {
298
- kind: "exact",
299
- maxBytes: 20_000,
300
- followUpHint: "Proceed with stated assumptions if the operator cancels or no UI is available.",
301
- },
302
- costLatency: "local_slow",
303
- promptHint:
304
- 'Use ask_user only when blocked on a decision the request does not answer; never ask about anything the operator already stated. One question per round in interview workflows, up to four tightly related questions otherwise, recommended option first. Finish with action="complete" and a compact decisions array before final prose. If cancelled, continue with defaults and do not ask again.',
305
- },
306
- // ARTIFACT: terminal writers.
307
- [ToolNames.Artifact]: {
308
- objective: "Write terminal plan/review/report documents that complete the turn.",
309
- uiLabel: "Artifact",
310
- retrySafety: "not_retry_safe",
311
- resultSizePolicy: exactMutationPolicy,
312
- costLatency: "local_fast",
313
- },
314
- };
315
-
316
- /** Canonical, registry-owned prompt hints for an already-admitted tool set. */
317
- export function toolPromptHintsForNames(names: ReadonlyArray<ToolName>): ReadonlyArray<{ tool: string; hint: string }> {
318
- const seen = new Set<string>();
319
- const hints: Array<{ tool: string; hint: string }> = [];
320
- for (const name of [...names].sort()) {
321
- if (seen.has(name)) continue;
322
- seen.add(name);
323
- const hint = TOOL_METADATA[name]?.promptHint?.trim();
324
- if (hint) hints.push({ tool: name, hint });
325
- }
326
- return hints;
327
- }
328
-
329
- function withBuiltinMetadata<T extends ToolSpec>(spec: T): T {
330
- const metadata = TOOL_METADATA[spec.name];
331
- return metadata ? withMetadata(spec, metadata) : spec;
332
- }
333
-
334
- function builtin<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
335
- return withBuiltinMetadata(withSourceInfo(spec, sourceInfo));
336
26
  }
337
27
 
338
28
  /**
339
- * Registers every tool on the supplied registry, grouped by plane. The
340
- * context tool gains its workspace scope only when a session contract is
341
- * supplied; dispatch/monitor/steer register only with a dispatch contract;
342
- * the RETRIEVE plane is omitted when the process asked to be hermetic
343
- * (tools/network-policy.ts), which is what makes a run without network a
344
- * surface the model never sees rather than a call it can make and have denied.
29
+ * Registers the stable core surface first, then the orchestrator-only dispatch
30
+ * controls in their canonical order. Worker registries call registerCoreTools
31
+ * directly so their boot graph never evaluates dispatch implementations.
345
32
  */
346
33
  export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps = {}): void {
347
- const includeNetworkTools = !networkToolsDisabled();
348
- registry.register({
349
- ...builtin(readTool, { path: "src/tools/read.ts", scope: "core" }),
350
- });
351
- registry.register({
352
- ...builtin(writeTool, { path: "src/tools/write.ts", scope: "core" }),
353
- });
354
- registry.register({
355
- ...builtin(editTool, { path: "src/tools/edit.ts", scope: "core" }),
356
- });
357
- registry.register({
358
- ...builtin(bashTool, { path: "src/tools/bash.ts", scope: "core" }),
359
- });
360
- registry.register({
361
- ...builtin(grepTool, { path: "src/tools/grep.ts", scope: "core" }),
362
- });
363
- registry.register({
364
- ...builtin(findTool, { path: "src/tools/find.ts", scope: "core" }),
365
- });
366
- registry.register({
367
- ...builtin(lsTool, { path: "src/tools/ls.ts", scope: "core" }),
368
- });
369
- if (includeNetworkTools) {
370
- registry.register({
371
- ...builtin(webFetchTool, { path: "src/tools/web-fetch.ts", scope: "core" }),
372
- });
373
- }
374
- registry.register({
375
- ...builtin(gitTool, { path: "src/tools/safe-exec.ts", scope: "core" }),
376
- });
377
- registry.register({
378
- ...builtin(verifyTool, { path: "src/tools/verify/index.ts", scope: "core" }),
379
- });
380
- registry.register({
381
- ...builtin(codeNavTool, { path: "src/tools/codewiki/code-nav.ts", scope: "core" }),
382
- });
383
- const skillToolDeps = {
384
- getCwd: () => deps.session?.current()?.cwd ?? process.cwd(),
385
- ...(deps.getSkillLoaderOptions ? { getSkillLoaderOptions: deps.getSkillLoaderOptions } : {}),
386
- };
387
- if (deps.askUser) {
388
- registry.register({
389
- ...builtin(createAskUserTool({ askUser: deps.askUser }), {
390
- path: "src/tools/ask-user.ts",
391
- scope: "core",
392
- }),
393
- });
394
- }
395
- registry.register({
396
- ...builtin(credentialPresentTool, { path: "src/tools/credential-present.ts", scope: "core" }),
397
- });
398
- const session = deps.session;
399
- registry.register({
400
- ...builtin(
401
- createContextTool({
402
- ...skillToolDeps,
403
- ...(session
404
- ? {
405
- workspace: {
406
- hasSession: () => session.current() !== null,
407
- getSnapshot: () => session.current()?.workspace ?? null,
408
- probeWorkspace: () => probeWorkspace(session.current()?.cwd ?? process.cwd()),
409
- saveSnapshot: (snap) => {
410
- const meta = session.current();
411
- if (meta) meta.workspace = snap;
412
- },
413
- },
414
- }
415
- : {}),
416
- }),
417
- { path: "src/tools/context/index.ts", scope: "core" },
418
- ),
419
- });
420
- registry.register({
421
- ...builtin(createArtifactTool({ getCwd: skillToolDeps.getCwd }), { path: "src/tools/artifact.ts", scope: "core" }),
422
- });
423
- registry.register({
424
- ...builtin(createLedgerTool(deps.agentLedger ? { agentLedger: deps.agentLedger } : {}), {
425
- path: "src/tools/ledger.ts",
426
- scope: "core",
427
- }),
428
- });
429
- registry.register({
430
- ...builtin(createTasksTool({ board: deps.taskBoard ?? createTaskBoardStore() }), {
431
- path: "src/tools/tasks.ts",
432
- scope: "core",
433
- }),
434
- });
34
+ const registration = registerCoreTools(registry, deps);
435
35
  if (deps.dispatch) {
36
+ const dispatch = deps.dispatch;
436
37
  const dispatchRunEvents = createDispatchRunEventRegistry();
437
38
  const dispatchToolDeps = {
438
- dispatch: deps.dispatch,
39
+ dispatch,
439
40
  runEvents: dispatchRunEvents,
440
41
  getAgentSpecs: deps.getAgentSpecs ?? (() => []),
441
42
  ...(deps.bus ? { bus: deps.bus } : {}),
@@ -452,23 +53,25 @@ export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps
452
53
  }),
453
54
  });
454
55
  registry.register({
455
- ...builtin(createMonitorTool({ dispatch: deps.dispatch, runEvents: dispatchRunEvents }), {
456
- path: "src/tools/monitor.ts",
457
- scope: "core",
458
- }),
56
+ ...builtin(
57
+ lazyTool(monitorToolSurface, async () =>
58
+ (await import("./monitor.js")).createMonitorTool({ dispatch, runEvents: dispatchRunEvents }),
59
+ ),
60
+ {
61
+ path: "src/tools/monitor.ts",
62
+ scope: "core",
63
+ },
64
+ ),
459
65
  });
460
66
  registry.register({
461
- ...builtin(createSteerTool({ dispatch: deps.dispatch }), {
462
- path: "src/tools/steer.ts",
463
- scope: "core",
464
- }),
67
+ ...builtin(
68
+ lazyTool(steerToolSurface, async () => (await import("./steer.js")).createSteerTool({ dispatch })),
69
+ {
70
+ path: "src/tools/steer.ts",
71
+ scope: "core",
72
+ },
73
+ ),
465
74
  });
466
75
  }
467
-
468
- assertBuiltinToolPolicy(registry.listAll(), {
469
- includeSessionTools: Boolean(session),
470
- includeDispatchTools: Boolean(deps.dispatch),
471
- includeInteractiveTools: Boolean(deps.askUser),
472
- includeNetworkTools,
473
- });
76
+ assertRegisteredBuiltinTools(registry, registration, Boolean(deps.dispatch));
474
77
  }