@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
@@ -1,12 +1,13 @@
1
1
  import { type Dirent, readdirSync } from "node:fs";
2
2
  import path from "node:path";
3
- import { Type } from "typebox";
4
3
  import { SKILL_SUGGESTION_ANCHOR } from "../../core/skill-activation.js";
5
4
  import { ToolNames } from "../../core/tool-names.js";
6
5
  import {
7
6
  checkSkillDrift,
7
+ discoverMarketplaceSkills,
8
8
  type LoadSkillsInput,
9
9
  loadSkills,
10
+ type MarketplaceSkill,
10
11
  modelVisibleSkills,
11
12
  type Skill,
12
13
  } from "../../domains/resources/index.js";
@@ -19,9 +20,9 @@ import {
19
20
  reserveObservation,
20
21
  } from "../observation.js";
21
22
  import type { ToolInvokeOptions, ToolResult, ToolSpec } from "../registry.js";
22
- import { stringEnum } from "../string-enum.js";
23
23
  import { truncateHead } from "../truncate.js";
24
24
  import { listDocsCorpus, searchDocs } from "./docs-engine.js";
25
+ import { contextToolSurface } from "./surface.js";
25
26
 
26
27
  /**
27
28
  * The context tool: one OBSERVE entry point for material about the working
@@ -49,6 +50,13 @@ export interface ContextToolDeps {
49
50
  >;
50
51
  /** Absent in worker registries without a session; scope=workspace errors cleanly. */
51
52
  workspace?: ContextWorkspaceDeps;
53
+ /**
54
+ * Whether scope=skills may list marketplace entries beside installed
55
+ * skills. Worker registries set false: a worker can neither install a
56
+ * skill nor address the operator who could, so installable rows would only
57
+ * invite a load the pending-skill policy rejects. Undefined means true.
58
+ */
59
+ skillMarketplace?: boolean;
52
60
  }
53
61
 
54
62
  function cwdFromDeps(deps?: ContextToolDeps): string {
@@ -187,14 +195,69 @@ function renderPendingSkillTask(name: string, options: ToolInvokeOptions | undef
187
195
  return lines;
188
196
  }
189
197
 
190
- function renderSkillsList(skills: ReadonlyArray<Skill>): string {
191
- if (skills.length === 0) return "No skills are installed.";
198
+ /**
199
+ * Marketplace rows the listing may show. Absent for every worker registry
200
+ * (`skillMarketplace: false`), when discovery is switched off for the run
201
+ * (a `--no-skills` run), and for a recipe-bound policy, whose
202
+ * context(scope=skills) admits exactly its bound names: none of these can
203
+ * install anything, so installable rows would only invite a load the policy
204
+ * rejects. Whatever discovery reports as broken stays out of the listing; the
205
+ * CLI and the hub carry those diagnostics.
206
+ */
207
+ function marketplaceRowsFor(
208
+ deps: ContextToolDeps,
209
+ installed: ReadonlyArray<Skill>,
210
+ options: ToolInvokeOptions | undefined,
211
+ ): MarketplaceSkill[] {
212
+ if (deps.skillMarketplace === false) return [];
213
+ if (deps.getSkillLoaderOptions?.().disableDiscovery === true) return [];
214
+ const policy = options?.pendingSkillPolicy;
215
+ if (policy && policyIsRecipeBound(policy)) return [];
216
+ const installedNames = new Set(installed.map((skill) => skill.name));
217
+ try {
218
+ return discoverMarketplaceSkills({ cwd: cwdFromDeps(deps) }).skills.filter(
219
+ (entry) => !installedNames.has(entry.name),
220
+ );
221
+ } catch {
222
+ return [];
223
+ }
224
+ }
225
+
226
+ function renderSkillsList(
227
+ skills: ReadonlyArray<Skill>,
228
+ marketplace: ReadonlyArray<MarketplaceSkill>,
229
+ marketplaceOffered: boolean,
230
+ ): string {
231
+ if (skills.length === 0 && marketplace.length === 0) {
232
+ // A registry that never offers the marketplace (a worker) must not
233
+ // claim none is configured; it simply has nothing to list.
234
+ return marketplaceOffered ? "No skills are installed and no marketplace is configured." : "No skills are installed.";
235
+ }
192
236
  const lines = [
193
- "Available skills. Match the current task against the descriptions below: when one fits, suggest the operator run /skill:<name>; when several compose, suggest the sequence in order. Skill bodies load only after an explicit operator request; never load one without it.",
237
+ "Available skills. Match the current task against the descriptions below: when one fits, suggest the operator run /skill <name>; when several compose, suggest the sequence in order. Skill bodies load only after an explicit operator request; never load one without it.",
194
238
  "",
195
239
  ];
196
- for (const skill of skills) {
197
- lines.push(`- ${skill.name} (${skill.scope}): ${skill.description}`);
240
+ if (skills.length > 0) {
241
+ lines.push("Installed:");
242
+ for (const skill of skills) {
243
+ lines.push(`- ${skill.name} (${skill.scope}): ${skill.description}`);
244
+ }
245
+ } else {
246
+ lines.push("Installed: none.");
247
+ }
248
+ if (marketplace.length > 0) {
249
+ // Installable rows are suggested exactly like installed ones: the
250
+ // operator's /skill <name> prompts to install before it runs, so the
251
+ // model's move is the same suggest-and-wait. Only the body is out of
252
+ // reach until then, which is why the description is all that appears.
253
+ lines.push(
254
+ "",
255
+ "Marketplace (not installed; /skill <name> offers to install, or `clio-coder skills install <name>`). Suggest these the same way when one matches; their bodies cannot be loaded until the operator installs them:",
256
+ );
257
+ for (const entry of marketplace) {
258
+ const category = entry.category ? ` [${entry.category}]` : "";
259
+ lines.push(`- ${entry.name}${category}: ${entry.description}`);
260
+ }
198
261
  }
199
262
  // Recency anchor with an exact reply shape: literal models act on an output
200
263
  // template where they skip conditional prose in the header.
@@ -237,17 +300,20 @@ function runWorkspaceScope(
237
300
  }
238
301
 
239
302
  function withSkillsPointer(deps: ContextToolDeps, snap: WorkspaceSnapshot): Record<string, unknown> {
240
- let count = 0;
303
+ let installed = 0;
304
+ let installable = 0;
241
305
  try {
242
306
  const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
243
- count = modelVisibleSkills(list.items).length;
307
+ const visible = modelVisibleSkills(list.items);
308
+ installed = visible.length;
309
+ installable = marketplaceRowsFor(deps, visible, undefined).length;
244
310
  } catch {
245
311
  return { ...snap };
246
312
  }
247
- if (count === 0) return { ...snap };
313
+ if (installed === 0 && installable === 0) return { ...snap };
248
314
  return {
249
315
  ...snap,
250
- skills: `Installed skills: ${count}. If one matches this task, list them with context(scope="skills") and suggest /skill:<name> to the operator; load only on operator request.`,
316
+ skills: `Skills: ${installed} installed, ${installable} installable from the marketplace. If one matches this task, or the operator names a skill, list them with context(scope="skills") and suggest /skill <name> to the operator; load only on operator request.`,
251
317
  };
252
318
  }
253
319
 
@@ -303,14 +369,28 @@ function runSkillsScope(
303
369
  if (name.length === 0) {
304
370
  const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
305
371
  const visible = modelVisibleSkills(list.items);
372
+ const marketplace = marketplaceRowsFor(deps, visible, options);
373
+ const rendered = renderSkillsList(visible, marketplace, deps.skillMarketplace !== false);
374
+ // The catalog is bounded but not small: the whole listing must fit the
375
+ // per-call cap like any observation, and a cut list says so instead of
376
+ // silently dropping the marketplace tail.
377
+ const truncation = truncateHead(rendered, { maxBytes: reservation.callCapBytes, maxLines: Number.MAX_SAFE_INTEGER });
378
+ const total = visible.length + marketplace.length;
306
379
  return finalizeObservation({
307
380
  tool: ToolNames.Context,
308
381
  unit: "entries",
309
- output: renderSkillsList(visible),
310
- shownCount: visible.length,
311
- totalCount: visible.length,
312
- truncated: false,
313
- details: { skills: visible.map((skill) => ({ name: skill.name, scope: skill.scope })) },
382
+ output: truncation.content,
383
+ ...(truncation.truncated ? { fullOutput: rendered } : {}),
384
+ shownCount: total,
385
+ totalCount: total,
386
+ truncated: truncation.truncated,
387
+ details: {
388
+ skills: visible.map((skill) => ({ name: skill.name, scope: skill.scope })),
389
+ marketplace: marketplace.map((entry) => ({
390
+ name: entry.name,
391
+ ...(entry.category ? { category: entry.category } : {}),
392
+ })),
393
+ },
314
394
  reservation,
315
395
  ...(options ? { options } : {}),
316
396
  });
@@ -321,6 +401,16 @@ function runSkillsScope(
321
401
  const visible = modelVisibleSkills(list.items);
322
402
  const skill = visible.find((item) => item.name === name);
323
403
  if (!skill) {
404
+ // A marketplace entry is a skill that exists and is not installed. Saying
405
+ // "unknown skill" about it denies the operator a thing the listing just
406
+ // offered; name the state and the one move that changes it.
407
+ const installable = marketplaceRowsFor(deps, visible, options).some((entry) => entry.name === name);
408
+ if (installable) {
409
+ return {
410
+ kind: "error",
411
+ message: `context: skill "${name}" is not installed; it is available in the marketplace. Ask the operator to run /skill ${name}, which offers to install it, and wait. Do not retry this load.`,
412
+ };
413
+ }
324
414
  const available = visible.map((item) => item.name).join(", ");
325
415
  const suffix = available.length > 0 ? ` Available skills: ${available}.` : " No skills are currently available.";
326
416
  return { kind: "error", message: `context: unknown skill "${name}".${suffix}` };
@@ -394,18 +484,7 @@ function runSkillsScope(
394
484
 
395
485
  export function createContextTool(deps: ContextToolDeps = {}): ToolSpec {
396
486
  return {
397
- name: ToolNames.Context,
398
- description:
399
- "Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists available skills or loads one by name. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
400
- parameters: Type.Object({
401
- scope: stringEnum(["workspace", "docs", "skills"], "Context source."),
402
- query: Type.Optional(Type.String({ description: "scope=docs: question or terms; omit to list the corpus." })),
403
- name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
404
- limit: Type.Optional(Type.Number({ description: "scope=docs: max sections (default 5, max 12)." })),
405
- include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
406
- }),
407
- baseActionClass: "read",
408
- executionMode: "parallel",
487
+ ...contextToolSurface,
409
488
  async run(args, options): Promise<ToolResult> {
410
489
  const scope = typeof args.scope === "string" ? args.scope : "";
411
490
  if (scope !== "workspace" && scope !== "docs" && scope !== "skills") {
@@ -0,0 +1,19 @@
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 contextToolSurface = {
7
+ name: ToolNames.Context,
8
+ description:
9
+ "Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
10
+ parameters: Type.Object({
11
+ scope: StringEnum(["workspace", "docs", "skills"], { description: "Context source." }),
12
+ query: Type.Optional(Type.String({ description: "scope=docs: question or terms; omit to list the corpus." })),
13
+ name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
14
+ limit: Type.Optional(Type.Number({ description: "scope=docs: max sections (default 5, max 12)." })),
15
+ include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
16
+ }),
17
+ baseActionClass: "read",
18
+ executionMode: "parallel",
19
+ } satisfies ToolSurface;
@@ -0,0 +1,168 @@
1
+ import type { LoadSkillsInput } from "../domains/resources/index.js";
2
+ import type { SessionContract } from "../domains/session/contract.js";
3
+ import { createTaskBoardStore, type TaskBoardStore } from "../domains/session/task-board.js";
4
+ import type { UserTasksStore } from "../domains/user-tasks/store.js";
5
+ import type { AgentLedgerPort } from "../worker/protocol.js";
6
+ import { createArtifactTool } from "./artifact.js";
7
+ import { type AskUserHandler, createAskUserTool } from "./ask-user.js";
8
+ import { bashTool } from "./bash.js";
9
+ import { builtin } from "./builtin-tool-catalog.js";
10
+ import { codeNavToolSurface } from "./codewiki/code-nav-surface.js";
11
+ import { contextToolSurface } from "./context/surface.js";
12
+ import { credentialPresentTool } from "./credential-present.js";
13
+ import { editTool } from "./edit.js";
14
+ import { findTool } from "./find.js";
15
+ import { grepTool } from "./grep.js";
16
+ import { lazyTool } from "./lazy-tool.js";
17
+ import { createLedgerTool } from "./ledger.js";
18
+ import { lsTool } from "./ls.js";
19
+ import { networkToolsDisabled } from "./network-policy.js";
20
+ import { assertBuiltinToolPolicy } from "./policy.js";
21
+ import { readTool } from "./read.js";
22
+ import type { ToolRegistry } from "./registry.js";
23
+ import { gitTool } from "./safe-exec.js";
24
+ import { createTasksTool } from "./tasks.js";
25
+ import { verifyToolSurface } from "./verify/surface.js";
26
+ import { webFetchToolSurface } from "./web-fetch-surface.js";
27
+ import { writeTool } from "./write.js";
28
+
29
+ export interface CoreToolBootstrapDeps {
30
+ session?: SessionContract;
31
+ askUser?: AskUserHandler;
32
+ taskBoard?: TaskBoardStore;
33
+ userTasks?: UserTasksStore;
34
+ agentLedger?: AgentLedgerPort;
35
+ getSkillLoaderOptions?: () => Pick<
36
+ LoadSkillsInput,
37
+ "trustProjectCompatRoots" | "disableDiscovery" | "explicitSkillPaths"
38
+ >;
39
+ skillMarketplace?: boolean;
40
+ }
41
+
42
+ export interface CoreToolRegistration {
43
+ includeNetworkTools: boolean;
44
+ includeSessionTools: boolean;
45
+ includeInteractiveTools: boolean;
46
+ }
47
+
48
+ export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstrapDeps = {}): CoreToolRegistration {
49
+ const includeNetworkTools = !networkToolsDisabled();
50
+ registry.register({
51
+ ...builtin(readTool, { path: "src/tools/read.ts", scope: "core" }),
52
+ });
53
+ registry.register({
54
+ ...builtin(writeTool, { path: "src/tools/write.ts", scope: "core" }),
55
+ });
56
+ registry.register({
57
+ ...builtin(editTool, { path: "src/tools/edit.ts", scope: "core" }),
58
+ });
59
+ registry.register({
60
+ ...builtin(bashTool, { path: "src/tools/bash.ts", scope: "core" }),
61
+ });
62
+ registry.register({
63
+ ...builtin(grepTool, { path: "src/tools/grep.ts", scope: "core" }),
64
+ });
65
+ registry.register({
66
+ ...builtin(findTool, { path: "src/tools/find.ts", scope: "core" }),
67
+ });
68
+ registry.register({
69
+ ...builtin(lsTool, { path: "src/tools/ls.ts", scope: "core" }),
70
+ });
71
+ if (includeNetworkTools) {
72
+ registry.register({
73
+ ...builtin(
74
+ lazyTool(webFetchToolSurface, async () => (await import("./web-fetch.js")).webFetchTool),
75
+ { path: "src/tools/web-fetch.ts", scope: "core" },
76
+ ),
77
+ });
78
+ }
79
+ registry.register({
80
+ ...builtin(gitTool, { path: "src/tools/safe-exec.ts", scope: "core" }),
81
+ });
82
+ registry.register({
83
+ ...builtin(
84
+ lazyTool(verifyToolSurface, async () => (await import("./verify/index.js")).verifyTool),
85
+ { path: "src/tools/verify/index.ts", scope: "core" },
86
+ ),
87
+ });
88
+ registry.register({
89
+ ...builtin(
90
+ lazyTool(codeNavToolSurface, async () => (await import("./codewiki/code-nav.js")).codeNavTool),
91
+ { path: "src/tools/codewiki/code-nav.ts", scope: "core" },
92
+ ),
93
+ });
94
+ const skillToolDeps = {
95
+ getCwd: () => deps.session?.current()?.cwd ?? process.cwd(),
96
+ ...(deps.getSkillLoaderOptions ? { getSkillLoaderOptions: deps.getSkillLoaderOptions } : {}),
97
+ ...(deps.skillMarketplace !== undefined ? { skillMarketplace: deps.skillMarketplace } : {}),
98
+ };
99
+ if (deps.askUser) {
100
+ registry.register({
101
+ ...builtin(createAskUserTool({ askUser: deps.askUser }), {
102
+ path: "src/tools/ask-user.ts",
103
+ scope: "core",
104
+ }),
105
+ });
106
+ }
107
+ registry.register({
108
+ ...builtin(credentialPresentTool, { path: "src/tools/credential-present.ts", scope: "core" }),
109
+ });
110
+ const session = deps.session;
111
+ registry.register({
112
+ ...builtin(
113
+ lazyTool(contextToolSurface, async () => {
114
+ const { createContextTool } = await import("./context/index.js");
115
+ if (!session) return createContextTool(skillToolDeps);
116
+ const { probeWorkspace } = await import("../domains/session/workspace/index.js");
117
+ return createContextTool({
118
+ ...skillToolDeps,
119
+ workspace: {
120
+ hasSession: () => session.current() !== null,
121
+ getSnapshot: () => session.current()?.workspace ?? null,
122
+ probeWorkspace: () => probeWorkspace(session.current()?.cwd ?? process.cwd()),
123
+ saveSnapshot: (snap) => {
124
+ const meta = session.current();
125
+ if (meta) meta.workspace = snap;
126
+ },
127
+ },
128
+ });
129
+ }),
130
+ { path: "src/tools/context/index.ts", scope: "core" },
131
+ ),
132
+ });
133
+ registry.register({
134
+ ...builtin(createArtifactTool({ getCwd: skillToolDeps.getCwd }), { path: "src/tools/artifact.ts", scope: "core" }),
135
+ });
136
+ registry.register({
137
+ ...builtin(createLedgerTool(deps.agentLedger ? { agentLedger: deps.agentLedger } : {}), {
138
+ path: "src/tools/ledger.ts",
139
+ scope: "core",
140
+ }),
141
+ });
142
+ registry.register({
143
+ ...builtin(
144
+ createTasksTool({
145
+ board: deps.taskBoard ?? createTaskBoardStore(),
146
+ ...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
147
+ getSessionId: () => deps.session?.current()?.id ?? null,
148
+ }),
149
+ {
150
+ path: "src/tools/tasks.ts",
151
+ scope: "core",
152
+ },
153
+ ),
154
+ });
155
+ return {
156
+ includeNetworkTools,
157
+ includeSessionTools: Boolean(session),
158
+ includeInteractiveTools: Boolean(deps.askUser),
159
+ };
160
+ }
161
+
162
+ export function assertRegisteredBuiltinTools(
163
+ registry: ToolRegistry,
164
+ registration: CoreToolRegistration,
165
+ includeDispatchTools: boolean,
166
+ ): void {
167
+ assertBuiltinToolPolicy(registry.listAll(), { ...registration, includeDispatchTools });
168
+ }
@@ -2,9 +2,9 @@ import { createReadStream } from "node:fs";
2
2
  import { createInterface } from "node:readline";
3
3
  import { Type } from "typebox";
4
4
  import { ToolNames } from "../core/tool-names.js";
5
+ import { StringEnum } from "../engine/ai.js";
5
6
  import { resolveReadPath } from "./path-utils.js";
6
7
  import type { ToolResult, ToolSpec } from "./registry.js";
7
- import { stringEnum } from "./string-enum.js";
8
8
 
9
9
  type CredentialPresenceSource = "auto" | "environment" | "file";
10
10
  type CredentialPresenceResultSource = "environment" | "file" | "both" | "none";
@@ -91,10 +91,10 @@ export const credentialPresentTool: ToolSpec = {
91
91
  parameters: Type.Object({
92
92
  name: Type.String({ description: "Credential key name, e.g. OPENAI_API_KEY." }),
93
93
  source: Type.Optional(
94
- stringEnum(
95
- ["auto", "environment", "env", "file"],
96
- "auto checks the environment and the file when file is supplied; environment/env checks only the process environment; file checks only the file.",
97
- ),
94
+ StringEnum(["auto", "environment", "env", "file"], {
95
+ description:
96
+ "auto checks the environment and the file when file is supplied; environment/env checks only the process environment; file checks only the file.",
97
+ }),
98
98
  ),
99
99
  file: Type.Optional(Type.String({ description: "Env-style file to check for NAME=, e.g. .env." })),
100
100
  }),