@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,271 @@
1
+ import { type ToolName, ToolNames } from "../core/tool-names.js";
2
+ import { OBSERVATION_POLICY_SLACK_BYTES, OBSERVE_SELF_CAPS } from "./observation.js";
3
+ import { toolPresentationPolicy } from "./presentation.js";
4
+ import { readMaxBytes } from "./read.js";
5
+ import type { ToolMetadata, ToolSourceInfo, ToolSpec } from "./registry.js";
6
+
7
+ function withSourceInfo<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
8
+ return { ...spec, sourceInfo };
9
+ }
10
+
11
+ function withMetadata<T extends ToolSpec>(spec: T, metadata: ToolMetadata): T {
12
+ return { ...spec, metadata };
13
+ }
14
+
15
+ // Registry-backstop caps derive from the OBSERVE self-caps in
16
+ // src/tools/observation.ts: policy cap = self cap + slack, so a tool's own
17
+ // envelope notice (with its exact continuation call) survives shaping instead
18
+ // of being cut again and replaced by a generic hint. The 16KB summary
19
+ // policies are the explicit overrides for tools whose output is inherently
20
+ // aggregate (shell, verification runs, git, dispatch receipts, web pages).
21
+ const policyCap = (selfCapBytes: number): number => selfCapBytes + OBSERVATION_POLICY_SLACK_BYTES;
22
+
23
+ const observePolicy = (selfCapBytes: number, followUpHint: string) =>
24
+ ({ kind: "bounded", maxBytes: policyCap(selfCapBytes), followUpHint }) satisfies ToolMetadata["resultSizePolicy"];
25
+
26
+ const summaryPolicy = (followUpHint: string) =>
27
+ ({ kind: "summary", maxBytes: 16_384, followUpHint }) satisfies ToolMetadata["resultSizePolicy"];
28
+
29
+ const exactMutationPolicy = {
30
+ kind: "exact",
31
+ maxBytes: 8_192,
32
+ followUpHint: "Inspect the changed file or git diff for exact follow-up context.",
33
+ } satisfies ToolMetadata["resultSizePolicy"];
34
+
35
+ // Per-tool metadata, organized by plane. OBSERVE tools share the observation
36
+ // envelope, the turn budget pool, and derived policy caps; every other plane
37
+ // declares its posture explicitly.
38
+ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
39
+ // OBSERVE: read-class, parallel, envelope + shared turn budget.
40
+ [ToolNames.Read]: {
41
+ objective: "Read exact UTF-8 file content with line and byte bounds.",
42
+ uiLabel: "Read",
43
+ retrySafety: "idempotent",
44
+ resultSizePolicy: observePolicy(
45
+ readMaxBytes(),
46
+ "Use offset/limit or a narrower locate/search tool call to inspect omitted content.",
47
+ ),
48
+ costLatency: "local_fast",
49
+ },
50
+ [ToolNames.Grep]: {
51
+ objective: "Search file contents and return line-referenced matches.",
52
+ uiLabel: "Grep",
53
+ retrySafety: "idempotent",
54
+ resultSizePolicy: observePolicy(
55
+ OBSERVE_SELF_CAPS.grepContent,
56
+ "Refine the pattern, path, glob, context, or limit, or use mode=files, to inspect omitted matches.",
57
+ ),
58
+ costLatency: "local_medium",
59
+ },
60
+ [ToolNames.Find]: {
61
+ objective: "Find paths by glob pattern with optional mtime ordering.",
62
+ uiLabel: "Find",
63
+ retrySafety: "idempotent",
64
+ resultSizePolicy: observePolicy(
65
+ OBSERVE_SELF_CAPS.find,
66
+ "Refine the pattern, path, or limit to inspect omitted paths.",
67
+ ),
68
+ costLatency: "local_medium",
69
+ },
70
+ [ToolNames.Ls]: {
71
+ objective: "List directory entries.",
72
+ uiLabel: "List",
73
+ retrySafety: "idempotent",
74
+ resultSizePolicy: observePolicy(OBSERVE_SELF_CAPS.ls, "Raise limit or list a narrower directory."),
75
+ costLatency: "local_fast",
76
+ },
77
+ [ToolNames.CodeNav]: {
78
+ objective: "Navigate the codewiki index by symbol, path, entry points, outline, imports, or importers.",
79
+ uiLabel: "Nav",
80
+ retrySafety: "idempotent",
81
+ resultSizePolicy: observePolicy(OBSERVE_SELF_CAPS.codeNav, "Raise limit or use a narrower mode/query."),
82
+ costLatency: "local_fast",
83
+ promptHint:
84
+ "Use code_nav for indexed code navigation (modes: symbol, path, entries, outline, deps, dependents, wiki).",
85
+ },
86
+ [ToolNames.Context]: {
87
+ objective: "Return workspace, bundled-docs, or skill context.",
88
+ uiLabel: "Context",
89
+ retrySafety: "idempotent",
90
+ resultSizePolicy: observePolicy(
91
+ Math.max(OBSERVE_SELF_CAPS.contextDocs, OBSERVE_SELF_CAPS.contextSkills, OBSERVE_SELF_CAPS.contextWorkspace),
92
+ "Use a narrower query or scope to inspect omitted content.",
93
+ ),
94
+ costLatency: "local_fast",
95
+ promptHint:
96
+ 'Call context with scope="skills" to list installed and marketplace skills; when one matches the task, or the operator names a skill or asks how one works, suggest the operator run /skill <name> (a marketplace skill is offered for install) 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.',
97
+ },
98
+ [ToolNames.CredentialPresent]: {
99
+ objective: "Check whether a credential key is present without returning its value.",
100
+ uiLabel: "Credential",
101
+ retrySafety: "idempotent",
102
+ resultSizePolicy: {
103
+ kind: "exact",
104
+ maxBytes: 4_096,
105
+ followUpHint: "Use the boolean result only; never ask to print the credential value.",
106
+ },
107
+ costLatency: "local_fast",
108
+ },
109
+ // MUTATE: write-class, sequential, file-mutation queue.
110
+ [ToolNames.Write]: {
111
+ objective: "Write a complete UTF-8 file.",
112
+ uiLabel: "Write",
113
+ retrySafety: "not_retry_safe",
114
+ resultSizePolicy: exactMutationPolicy,
115
+ costLatency: "local_fast",
116
+ },
117
+ [ToolNames.Edit]: {
118
+ objective: "Apply exact text replacements to one file.",
119
+ uiLabel: "Edit",
120
+ retrySafety: "not_retry_safe",
121
+ resultSizePolicy: exactMutationPolicy,
122
+ costLatency: "local_fast",
123
+ },
124
+ // EXECUTE: the safe-exec spine (bash offloads its own overflow).
125
+ [ToolNames.Bash]: {
126
+ objective: "Execute an explicit shell command when narrower tools are insufficient.",
127
+ uiLabel: "Shell",
128
+ retrySafety: "unknown",
129
+ resultSizePolicy: summaryPolicy(
130
+ "Use a narrower command or a dedicated verification/read/search tool to inspect omitted output.",
131
+ ),
132
+ costLatency: "local_slow",
133
+ },
134
+ [ToolNames.Git]: {
135
+ objective: "Read-only git inspection: status, diff, or log.",
136
+ uiLabel: "Git",
137
+ retrySafety: "idempotent",
138
+ resultSizePolicy: summaryPolicy("Limit the diff/log to one path or fewer commits."),
139
+ costLatency: "local_fast",
140
+ },
141
+ [ToolNames.Verify]: {
142
+ objective: "Run declared verification checks (scripts or frontend artifacts).",
143
+ uiLabel: "Verify",
144
+ retrySafety: "retry_safe",
145
+ resultSizePolicy: summaryPolicy(
146
+ "Rerun the check with narrower args or inspect the named failing file/test directly.",
147
+ ),
148
+ costLatency: "local_slow",
149
+ },
150
+ // ORCHESTRATE: agent-class, receipts as evidence.
151
+ [ToolNames.Tasks]: {
152
+ objective: "Declare and track the session task board with evidence-carrying completions.",
153
+ uiLabel: "Tasks",
154
+ // A repeated plan/start/done lands on the same board state; a repeated
155
+ // add duplicates a task, so the surface as a whole is not retry safe.
156
+ retrySafety: "not_retry_safe",
157
+ resultSizePolicy: {
158
+ kind: "exact",
159
+ maxBytes: 8_192,
160
+ followUpHint: 'Call tasks with action="list" to re-read the board.',
161
+ },
162
+ costLatency: "local_fast",
163
+ promptHint:
164
+ '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. ' +
165
+ 'Mark one task active with "start" before working it, close it with "done" plus an evidence note ' +
166
+ '(what proves it works), and use "block" with a reason instead of silently stalling.',
167
+ },
168
+ [ToolNames.Ledger]: {
169
+ objective: "Coordinate with the peer workers of this dispatch through typed claims, findings, and reviews.",
170
+ uiLabel: "Ledger",
171
+ // A repeated post lands a second entry and spends another of the run's
172
+ // twenty posts, so the surface as a whole is not retry safe.
173
+ retrySafety: "not_retry_safe",
174
+ resultSizePolicy: {
175
+ kind: "exact",
176
+ maxBytes: 16_384,
177
+ followUpHint: 'Call ledger with action="read" and a since sequence to re-read only what is new.',
178
+ },
179
+ costLatency: "local_fast",
180
+ },
181
+ [ToolNames.Dispatch]: {
182
+ objective: "Dispatch bounded tasks to configured Clio workers.",
183
+ uiLabel: "Dispatch",
184
+ retrySafety: "not_retry_safe",
185
+ resultSizePolicy: summaryPolicy(
186
+ "Use the dispatch receipt paths or ask a narrower worker follow-up for omitted output.",
187
+ ),
188
+ costLatency: "agent",
189
+ promptHint:
190
+ "Call dispatch with list:true only when the operator asks about agents, workers, or the fleet; never use it to inventory direct tools.",
191
+ },
192
+ [ToolNames.Monitor]: {
193
+ objective: "Inspect dispatched runs: state, recent events, receipts.",
194
+ uiLabel: "Monitor",
195
+ retrySafety: "idempotent",
196
+ resultSizePolicy: summaryPolicy("Use monitor(mode=receipt) or read the receipt path for full details."),
197
+ costLatency: "local_fast",
198
+ },
199
+ [ToolNames.Steer]: {
200
+ objective: "Guide or cancel a running dispatched worker.",
201
+ uiLabel: "Steer",
202
+ retrySafety: "not_retry_safe",
203
+ resultSizePolicy: {
204
+ kind: "exact",
205
+ maxBytes: 4_096,
206
+ followUpHint: "Use monitor(mode=status) to confirm the run state after steering.",
207
+ },
208
+ costLatency: "local_fast",
209
+ },
210
+ // RETRIEVE: network-class.
211
+ [ToolNames.WebFetch]: {
212
+ objective: "Fetch HTTP(S) text for explicit external research.",
213
+ uiLabel: "Fetch",
214
+ retrySafety: "retry_safe",
215
+ resultSizePolicy: {
216
+ kind: "bounded",
217
+ maxBytes: 16_384,
218
+ followUpHint: "Fetch a narrower URL or lower max_bytes to inspect a specific section.",
219
+ },
220
+ costLatency: "network",
221
+ },
222
+ // INTERACT: operator dialogue.
223
+ [ToolNames.AskUser]: {
224
+ objective: "Ask the operator structured questions.",
225
+ uiLabel: "Ask",
226
+ retrySafety: "not_retry_safe",
227
+ resultSizePolicy: {
228
+ kind: "exact",
229
+ maxBytes: 20_000,
230
+ followUpHint: "Proceed with stated assumptions if the operator cancels or no UI is available.",
231
+ },
232
+ costLatency: "local_slow",
233
+ promptHint:
234
+ '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.',
235
+ },
236
+ // ARTIFACT: terminal writers.
237
+ [ToolNames.Artifact]: {
238
+ objective: "Write terminal plan/review/report documents that complete the turn.",
239
+ uiLabel: "Artifact",
240
+ retrySafety: "not_retry_safe",
241
+ resultSizePolicy: exactMutationPolicy,
242
+ costLatency: "local_fast",
243
+ },
244
+ };
245
+
246
+ /** Canonical, registry-owned prompt hints for an already-admitted tool set. */
247
+ export function toolPromptHintsForNames(names: ReadonlyArray<ToolName>): ReadonlyArray<{ tool: string; hint: string }> {
248
+ const seen = new Set<string>();
249
+ const hints: Array<{ tool: string; hint: string }> = [];
250
+ for (const name of [...names].sort()) {
251
+ if (seen.has(name)) continue;
252
+ seen.add(name);
253
+ const hint = TOOL_METADATA[name]?.promptHint?.trim();
254
+ if (hint) hints.push({ tool: name, hint });
255
+ }
256
+ return hints;
257
+ }
258
+
259
+ // Every builtin carries its transcript presentation on its metadata, resolved
260
+ // from the one declaration table in presentation.ts, so the registry and the
261
+ // live panel (which has no registry) answer the fold question identically.
262
+ function withBuiltinMetadata<T extends ToolSpec>(spec: T): T {
263
+ const metadata = TOOL_METADATA[spec.name];
264
+ return metadata
265
+ ? withMetadata(spec, { ...metadata, presentation: toolPresentationPolicy(spec.name, undefined) })
266
+ : spec;
267
+ }
268
+
269
+ export function builtin<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
270
+ return withBuiltinMetadata(withSourceInfo(spec, sourceInfo));
271
+ }
@@ -0,0 +1,29 @@
1
+ import { Type } from "typebox";
2
+ import { ToolNames } from "../../core/tool-names.js";
3
+ import { StringEnum } from "../../engine/ai.js";
4
+ import type { ToolSurface } from "../lazy-tool.js";
5
+
6
+ export const CODE_NAV_DEFAULT_LIMIT = 50;
7
+ export const CODE_NAV_DEFAULT_ENTRY_LIMIT = 25;
8
+ export const CODE_NAV_MAX_LIMIT = 200;
9
+
10
+ export const codeNavToolSurface = {
11
+ name: ToolNames.CodeNav,
12
+ description:
13
+ "Navigate the indexed codewiki: mode=symbol finds files by symbol, path finds files by glob/regex/substring, entries lists likely entry points, outline lists file symbols, deps lists imports, and dependents lists importers. mode=wiki without query lists generated Markdown wiki pages; with query it resolves a page id/title and returns its summary plus a path to open with read. For Clio's bundled product docs use context scope=docs.",
14
+ parameters: Type.Object({
15
+ mode: StringEnum(["symbol", "path", "entries", "outline", "deps", "dependents", "wiki"], {
16
+ description: "Lookup mode.",
17
+ }),
18
+ query: Type.Optional(
19
+ Type.String({ description: "Symbol name, indexed path/pattern/substring, or wiki page id/title." }),
20
+ ),
21
+ limit: Type.Optional(
22
+ Type.Number({
23
+ description: `Max results (default ${CODE_NAV_DEFAULT_LIMIT}, entries ${CODE_NAV_DEFAULT_ENTRY_LIMIT}, max ${CODE_NAV_MAX_LIMIT}).`,
24
+ }),
25
+ ),
26
+ }),
27
+ baseActionClass: "read",
28
+ executionMode: "parallel",
29
+ } satisfies ToolSurface;
@@ -1,8 +1,7 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { join, normalize } from "node:path";
3
- import { Type } from "typebox";
4
3
  import { ToolNames } from "../../core/tool-names.js";
5
- import type { Codewiki, CodewikiFile, CodewikiSymbol } from "../../domains/context/codewiki/indexer.js";
4
+ import type { Codewiki, CodewikiFile, CodewikiSymbol } from "../../domains/context/codewiki/schema.js";
6
5
  import { listWikiPages } from "../../domains/context/wiki/layout.js";
7
6
  import { readWikiMeta } from "../../domains/context/wiki/meta.js";
8
7
  import { wikiCompletenessFromMeta, wikiStaleness } from "../../domains/context/wiki/staleness.js";
@@ -14,13 +13,15 @@ import {
14
13
  reserveObservation,
15
14
  } from "../observation.js";
16
15
  import type { ToolResult, ToolSpec } from "../registry.js";
17
- import { stringEnum } from "../string-enum.js";
16
+ import {
17
+ codeNavToolSurface,
18
+ CODE_NAV_DEFAULT_ENTRY_LIMIT as DEFAULT_ENTRY_LIMIT,
19
+ CODE_NAV_DEFAULT_LIMIT as DEFAULT_LIMIT,
20
+ CODE_NAV_MAX_LIMIT as MAX_LIMIT,
21
+ } from "./code-nav-surface.js";
18
22
  import { loadCodewikiForTool, renderJson } from "./shared.js";
19
23
 
20
24
  const REGEX_SYNTAX_HINTS = /\.\*|\.\+|\^|\$|\\[dDwWsSbB]|\(\?:|\(\?=|\(\?!/;
21
- const DEFAULT_LIMIT = 50;
22
- const DEFAULT_ENTRY_LIMIT = 25;
23
- const MAX_LIMIT = 200;
24
25
 
25
26
  interface NavIndex {
26
27
  filesById: Map<string, CodewikiFile>;
@@ -485,22 +486,7 @@ function parseLimit(value: unknown, fallback: number): number {
485
486
  }
486
487
 
487
488
  export const codeNavTool: ToolSpec = {
488
- name: ToolNames.CodeNav,
489
- description:
490
- "Navigate the indexed codewiki: mode=symbol finds files by symbol, path finds files by glob/regex/substring, entries lists likely entry points, outline lists file symbols, deps lists imports, and dependents lists importers. mode=wiki without query lists generated Markdown wiki pages; with query it resolves a page id/title and returns its summary plus a path to open with read. For Clio's bundled product docs use context scope=docs.",
491
- parameters: Type.Object({
492
- mode: stringEnum(["symbol", "path", "entries", "outline", "deps", "dependents", "wiki"], "Lookup mode."),
493
- query: Type.Optional(
494
- Type.String({ description: "Symbol name, indexed path/pattern/substring, or wiki page id/title." }),
495
- ),
496
- limit: Type.Optional(
497
- Type.Number({
498
- description: `Max results (default ${DEFAULT_LIMIT}, entries ${DEFAULT_ENTRY_LIMIT}, max ${MAX_LIMIT}).`,
499
- }),
500
- ),
501
- }),
502
- baseActionClass: "read",
503
- executionMode: "parallel",
489
+ ...codeNavToolSurface,
504
490
  async run(args, options): Promise<ToolResult> {
505
491
  const mode = typeof args.mode === "string" ? args.mode : "";
506
492
  const loaded = await loadCodewikiForTool();
@@ -1,20 +1,14 @@
1
1
  import { statSync } from "node:fs";
2
- import {
3
- buildCodewiki,
4
- type Codewiki,
5
- codewikiNeedsBackfill,
6
- codewikiPath,
7
- readCodewiki,
8
- syncCodewiki,
9
- writeCodewiki,
10
- } from "../../domains/context/codewiki/indexer.js";
11
- import { computeFingerprint, isStale } from "../../domains/context/fingerprint.js";
2
+ import { codewikiPath, readCodewiki } from "../../domains/context/codewiki/artifact.js";
3
+ import { coordinateCodewikiWrite } from "../../domains/context/codewiki/coordinator.js";
4
+ import type { Codewiki } from "../../domains/context/codewiki/schema.js";
12
5
  import { readClioState, writeClioState } from "../../domains/context/state.js";
13
- import { detectProjectType } from "../../domains/session/workspace/project-type.js";
14
6
 
15
7
  const CODEWIKI_ARTIFACT_CACHE_LIMIT = 4;
16
8
 
17
9
  interface CodewikiArtifactIdentity {
10
+ dev: bigint;
11
+ ino: bigint;
18
12
  mtimeNs: bigint;
19
13
  size: bigint;
20
14
  }
@@ -30,14 +24,14 @@ function codewikiArtifactIdentity(cwd: string): CodewikiArtifactIdentity | null
30
24
  try {
31
25
  const stats = statSync(codewikiPath(cwd), { bigint: true });
32
26
  if (!stats.isFile()) return null;
33
- return { mtimeNs: stats.mtimeNs, size: stats.size };
27
+ return { dev: stats.dev, ino: stats.ino, mtimeNs: stats.mtimeNs, size: stats.size };
34
28
  } catch {
35
29
  return null;
36
30
  }
37
31
  }
38
32
 
39
33
  function sameArtifactIdentity(a: CodewikiArtifactIdentity, b: CodewikiArtifactIdentity): boolean {
40
- return a.mtimeNs === b.mtimeNs && a.size === b.size;
34
+ return a.dev === b.dev && a.ino === b.ino && a.mtimeNs === b.mtimeNs && a.size === b.size;
41
35
  }
42
36
 
43
37
  function rememberCodewikiArtifact(cwd: string, identity: CodewikiArtifactIdentity, codewiki: Codewiki): void {
@@ -75,35 +69,44 @@ function readCodewikiForTool(cwd: string): Codewiki | null {
75
69
  export async function loadCodewikiForTool(
76
70
  cwd: string = process.cwd(),
77
71
  ): Promise<{ ok: true; codewiki: Codewiki } | { ok: false; message: string }> {
78
- const codewiki = readCodewikiForTool(cwd);
79
- const state = readClioState(cwd);
80
- if (codewiki && !codewikiNeedsBackfill(codewiki)) {
81
- const fingerprint = computeFingerprint(cwd, codewiki);
82
- if (state && !isStale(state.fingerprint, fingerprint)) return { ok: true, codewiki };
83
- }
84
72
  try {
85
73
  const generatedAt = new Date().toISOString();
86
- const projectType = detectProjectType(cwd);
87
- const rebuilt = codewiki
88
- ? await syncCodewiki(cwd, codewiki)
89
- : await buildCodewiki({ cwd, language: projectType, generatedAt });
74
+ const coordinated = await coordinateCodewikiWrite(
75
+ cwd,
76
+ (current, workspace) => {
77
+ const language = readClioState(workspace)?.projectType ?? current?.language;
78
+ return {
79
+ kind: "ensure",
80
+ cwd,
81
+ ...(language ? { language } : {}),
82
+ current,
83
+ previous: readClioState(workspace)?.fingerprint ?? null,
84
+ };
85
+ },
86
+ {
87
+ readCurrent: (workspace) => readCodewikiForTool(workspace) ?? undefined,
88
+ afterCommit: ({ codewiki: committed, fingerprint, changed }, workspace) => {
89
+ const prev = readClioState(workspace);
90
+ if (!changed && prev) return;
91
+ writeClioState(workspace, {
92
+ version: 1,
93
+ projectType: prev?.projectType ?? committed.language,
94
+ fingerprint,
95
+ codewikiVersion: committed.version,
96
+ ...(prev?.contextSources ? { contextSources: prev.contextSources } : {}),
97
+ ...(prev?.contextSourceHash ? { contextSourceHash: prev.contextSourceHash } : {}),
98
+ ...(prev?.lastBootstrap ? { lastBootstrap: prev.lastBootstrap } : {}),
99
+ ...(prev?.lastInitAt ? { lastInitAt: prev.lastInitAt } : {}),
100
+ lastSessionAt: prev?.lastSessionAt ?? generatedAt,
101
+ lastIndexedAt: generatedAt,
102
+ });
103
+ },
104
+ },
105
+ );
106
+ if (!coordinated) throw new Error("codewiki coordinator did not admit the demand build");
90
107
  // Not cached here: a post-write stat could pair a concurrent writer's identity
91
108
  // with this object. The next call re-reads once and caches from a clean stat.
92
- writeCodewiki(cwd, rebuilt);
93
- const prev = state;
94
- writeClioState(cwd, {
95
- version: 1,
96
- projectType: prev?.projectType ?? projectType,
97
- fingerprint: computeFingerprint(cwd, rebuilt),
98
- codewikiVersion: rebuilt.version,
99
- ...(prev?.contextSources ? { contextSources: prev.contextSources } : {}),
100
- ...(prev?.contextSourceHash ? { contextSourceHash: prev.contextSourceHash } : {}),
101
- ...(prev?.lastBootstrap ? { lastBootstrap: prev.lastBootstrap } : {}),
102
- ...(prev?.lastInitAt ? { lastInitAt: prev.lastInitAt } : {}),
103
- lastSessionAt: prev?.lastSessionAt ?? generatedAt,
104
- lastIndexedAt: generatedAt,
105
- });
106
- return { ok: true, codewiki: rebuilt };
109
+ return { ok: true, codewiki: coordinated.codewiki };
107
110
  } catch (err) {
108
111
  const msg = err instanceof Error ? err.message : String(err);
109
112
  return { ok: false, message: `codewiki unavailable. run /context refresh to rebuild it. ${msg}` };
@@ -1,5 +1,5 @@
1
1
  import { existsSync, readdirSync, readFileSync } from "node:fs";
2
- import { basename, join } from "node:path";
2
+ import { basename, join, resolve } from "node:path";
3
3
  import { resolvePackageRoot } from "../../core/package-root.js";
4
4
 
5
5
  // Deterministic, dependency-free retrieval over Clio's bundled human docs,
@@ -323,7 +323,18 @@ function buildDocumentFrequency(sections: ReadonlyArray<IndexedSection>): Map<st
323
323
  function loadDocsIndex(): { ok: true; index: DocsIndex } | { ok: false; message: string } {
324
324
  let root: string;
325
325
  try {
326
- root = resolvePackageRoot();
326
+ // resolvePackageRoot() caches its answer for the life of the process, so
327
+ // once any caller has resolved it, a later CLIO_CODER_PACKAGE_ROOT change
328
+ // (a test fixture, most commonly) has no effect on that cached value.
329
+ // Reading the override directly here, rather than trusting the shared
330
+ // cache, keeps this module's notion of "docs root" live even when it
331
+ // isn't the first thing in the process to have resolved a package root.
332
+ const override = process.env.CLIO_CODER_PACKAGE_ROOT?.trim();
333
+ if (override) {
334
+ root = resolve(override);
335
+ } else {
336
+ root = resolvePackageRoot();
337
+ }
327
338
  } catch (err) {
328
339
  return { ok: false, message: err instanceof Error ? err.message : String(err) };
329
340
  }
@@ -536,7 +547,7 @@ function resultPayload(index: DocsIndex, plan: QueryPlan, scored: ReadonlyArray<
536
547
  results,
537
548
  followUp:
538
549
  results.length > 0
539
- ? "Cited files are Clio's bundled docs, not workspace paths; never read or search for them as files. For more depth, run another context scope=docs query with more specific terms."
550
+ ? "Cited files are Clio's bundled docs: read them from the installed documentation path named in your prompt, never by searching the workspace for them. For more depth, run another context scope=docs query with more specific terms."
540
551
  : "Try Clio vocabulary such as target, autonomy, dispatch, evidence, middleware, context, validation, install, or model catalog.",
541
552
  };
542
553
  }