@iowarp/clio-coder 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/chunk-2VTFPG5O.js +48 -0
  12. package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4KLWL3UC.js +18 -0
  16. package/dist/chunk-4VP4KH3K.js +962 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  21. package/dist/chunk-65DEGPJ6.js +52 -0
  22. package/dist/chunk-6EJMN2Y3.js +17 -0
  23. package/dist/chunk-6EJV5X2W.js +16405 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6XLNIQDB.js +27 -0
  26. package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
  29. package/dist/chunk-7MNJORFF.js +22 -0
  30. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  31. package/dist/chunk-AGYYIBLL.js +1069 -0
  32. package/dist/chunk-AO4RKG4M.js +277 -0
  33. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  34. package/dist/chunk-ARBGF5F7.js +174 -0
  35. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  36. package/dist/chunk-CBCAPZAA.js +229 -0
  37. package/dist/chunk-CMZWFGD2.js +352 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
  42. package/dist/chunk-FCSXB6T2.js +338 -0
  43. package/dist/chunk-FJ3H4MN5.js +48 -0
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G2DE3C7R.js +644 -0
  46. package/dist/chunk-G4BMMOKF.js +182 -0
  47. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  48. package/dist/chunk-HC4CLZ2Y.js +68 -0
  49. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  50. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  51. package/dist/chunk-I4HZDVNP.js +73 -0
  52. package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
  53. package/dist/chunk-IKCO5N3L.js +162 -0
  54. package/dist/chunk-IR4CFBFN.js +56 -0
  55. package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
  56. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  57. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  58. package/dist/chunk-KJ5LWLOE.js +1077 -0
  59. package/dist/chunk-LBMZMYH2.js +285 -0
  60. package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/chunk-MAW544W2.js +1882 -0
  64. package/dist/chunk-MBS4V7ZP.js +217 -0
  65. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  66. package/dist/chunk-MNA4JGU4.js +255 -0
  67. package/dist/chunk-MQSRRFWA.js +3428 -0
  68. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  69. package/dist/chunk-OAO4GE4M.js +619 -0
  70. package/dist/chunk-OHHN2SO4.js +5135 -0
  71. package/dist/chunk-OKGUZO2U.js +34 -0
  72. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  73. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  74. package/dist/chunk-OQE5J4C6.js +73 -0
  75. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  76. package/dist/chunk-POHLU5DW.js +1186 -0
  77. package/dist/chunk-QKMUKYO7.js +4961 -0
  78. package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
  79. package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
  80. package/dist/chunk-SST6Z5JA.js +80 -0
  81. package/dist/chunk-STBPMHSX.js +2456 -0
  82. package/dist/chunk-T6YILFSB.js +80 -0
  83. package/dist/chunk-TZTZS7QK.js +227 -0
  84. package/dist/chunk-UOV2BYIW.js +107 -0
  85. package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
  86. package/dist/chunk-VAKQQHWR.js +434 -0
  87. package/dist/chunk-VG7TBQIY.js +128 -0
  88. package/dist/chunk-VJWL6YS5.js +244 -0
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-WMSVI4G2.js +2095 -0
  91. package/dist/chunk-WVO7V2QY.js +797 -0
  92. package/dist/chunk-X4RCMKVQ.js +641 -0
  93. package/dist/chunk-X75S7HFS.js +374 -0
  94. package/dist/chunk-XN3L4EYL.js +46 -0
  95. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  96. package/dist/chunk-YHZX5GEU.js +193 -0
  97. package/dist/chunk-YXLYO42X.js +91 -0
  98. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  99. package/dist/chunk-ZI647VB5.js +37 -0
  100. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-4LY5K2AC.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
  108. package/dist/configure-R6A64DHX.js +42 -0
  109. package/dist/context-5VKGUVJJ.js +866 -0
  110. package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
  111. package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
  126. package/dist/monitor-MEQA5C3I.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
  137. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
  143. package/dist/verify-G6V4D2G7.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +362 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +42 -6
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +173 -47
  444. package/src/interactive/chat-renderer.ts +262 -72
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +228 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +20 -2
  456. package/src/interactive/footer-panel.ts +2 -2
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +201 -17
  459. package/src/interactive/interactive-event-projection.ts +6 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +176 -114
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/decisions.ts +300 -0
  474. package/src/interactive/overlays/help-reference.ts +15 -10
  475. package/src/interactive/overlays/model-selector.ts +34 -16
  476. package/src/interactive/overlays/session-selector.ts +18 -0
  477. package/src/interactive/overlays/settings.ts +105 -17
  478. package/src/interactive/overlays/skills-hub.ts +4 -4
  479. package/src/interactive/overlays/tree-selector.ts +41 -6
  480. package/src/interactive/render-trace.ts +499 -90
  481. package/src/interactive/renderers/compaction-summary.ts +2 -2
  482. package/src/interactive/renderers/diff.ts +115 -104
  483. package/src/interactive/renderers/mermaid.ts +53 -0
  484. package/src/interactive/renderers/tool-execution.ts +386 -133
  485. package/src/interactive/renderers/worker-entry.ts +20 -4
  486. package/src/interactive/session-switch-settlement.ts +10 -0
  487. package/src/interactive/slash-autocomplete.ts +6 -114
  488. package/src/interactive/slash-commands.ts +135 -47
  489. package/src/interactive/slash-spec.ts +9 -38
  490. package/src/interactive/status/controller.ts +5 -1
  491. package/src/interactive/stdout-backpressure.ts +99 -0
  492. package/src/interactive/stream-pacer.ts +530 -0
  493. package/src/interactive/stream-pacing-policy.ts +66 -0
  494. package/src/interactive/tasks-overlay.ts +368 -14
  495. package/src/interactive/terminal-lease.ts +485 -0
  496. package/src/interactive/theme/tokens.ts +1 -1
  497. package/src/interactive/turn-context.ts +4 -3
  498. package/src/interactive/turn-persistence.ts +30 -13
  499. package/src/interactive/turn-queues.ts +12 -0
  500. package/src/interactive/turn-recovery.ts +25 -8
  501. package/src/interactive/turn-runtime.ts +79 -12
  502. package/src/interactive/turn-state.ts +10 -0
  503. package/src/interactive/view/artifacts.ts +114 -4
  504. package/src/interactive/view/view-overlay.ts +3 -0
  505. package/src/interactive/welcome-dashboard.ts +17 -16
  506. package/src/interactive/worker-receipts.ts +52 -3
  507. package/src/interactive/worker-stream.ts +5 -1
  508. package/src/tools/agent-tools.ts +23 -3
  509. package/src/tools/artifact.ts +2 -2
  510. package/src/tools/ask-user.ts +23 -13
  511. package/src/tools/bash.ts +30 -2
  512. package/src/tools/bootstrap.ts +34 -431
  513. package/src/tools/builtin-tool-catalog.ts +265 -0
  514. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  515. package/src/tools/codewiki/code-nav.ts +8 -22
  516. package/src/tools/codewiki/shared.ts +41 -38
  517. package/src/tools/context/docs-engine.ts +14 -3
  518. package/src/tools/context/index.ts +107 -28
  519. package/src/tools/context/surface.ts +19 -0
  520. package/src/tools/core-bootstrap.ts +168 -0
  521. package/src/tools/credential-present.ts +5 -5
  522. package/src/tools/dispatch-admission.ts +533 -0
  523. package/src/tools/dispatch-background.ts +54 -0
  524. package/src/tools/dispatch-event-text.ts +6 -0
  525. package/src/tools/dispatch-plan.ts +9 -4
  526. package/src/tools/dispatch-run-events.ts +238 -0
  527. package/src/tools/dispatch-runner.ts +2370 -0
  528. package/src/tools/dispatch-scout-admission.ts +295 -0
  529. package/src/tools/dispatch-types.ts +77 -0
  530. package/src/tools/dispatch.ts +67 -3161
  531. package/src/tools/find.ts +4 -2
  532. package/src/tools/grep.ts +2 -2
  533. package/src/tools/lazy-tool.ts +60 -0
  534. package/src/tools/ledger.ts +3 -3
  535. package/src/tools/monitor-surface.ts +36 -0
  536. package/src/tools/monitor.ts +2 -32
  537. package/src/tools/observers.ts +2 -2
  538. package/src/tools/registry.ts +39 -27
  539. package/src/tools/safe-exec.ts +2 -2
  540. package/src/tools/steer-surface.ts +17 -0
  541. package/src/tools/steer.ts +2 -13
  542. package/src/tools/tasks.ts +108 -11
  543. package/src/tools/truncate.ts +25 -184
  544. package/src/tools/verify/frontend.ts +3 -1
  545. package/src/tools/verify/index.ts +3 -38
  546. package/src/tools/verify/surface.ts +46 -0
  547. package/src/tools/web-fetch-surface.ts +23 -0
  548. package/src/tools/web-fetch.ts +2 -20
  549. package/src/tools/write.ts +7 -2
  550. package/src/worker/entry.ts +39 -2
  551. package/src/worker/spec-contract.ts +26 -5
  552. package/dist/chunk-7SS2CTV2.js +0 -61361
  553. package/dist/chunk-DKGKUHFA.js +0 -924
  554. package/dist/chunk-GEP36Y4X.js +0 -12796
  555. package/dist/chunk-XYWBQRDM.js +0 -137
  556. package/dist/clio-BZVGEUFJ.js +0 -58
  557. package/dist/configure-S7S6F6CL.js +0 -32
  558. package/docs/html/agents_blueprint.html +0 -936
  559. package/docs/html/alcf_blueprint.html +0 -324
  560. package/docs/html/architecture_blueprint.html +0 -850
  561. package/docs/html/commands_blueprint.html +0 -939
  562. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  563. package/docs/html/configuration_blueprint.html +0 -1080
  564. package/docs/html/context_blueprint.html +0 -603
  565. package/docs/html/documentation_blueprint.html +0 -832
  566. package/docs/html/environment_blueprint.html +0 -404
  567. package/docs/html/eval_blueprint.html +0 -743
  568. package/docs/html/evals_internal_blueprint.html +0 -190
  569. package/docs/html/evolution_blueprint.html +0 -674
  570. package/docs/html/extensions_blueprint.html +0 -2065
  571. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  572. package/docs/html/index.html +0 -919
  573. package/docs/html/lifecycle_blueprint.html +0 -723
  574. package/docs/html/memory_blueprint.html +0 -699
  575. package/docs/html/middleware_blueprint.html +0 -664
  576. package/docs/html/models_blueprint.html +0 -2366
  577. package/docs/html/observability_blueprint.html +0 -683
  578. package/docs/html/provider_adapter_blueprint.html +0 -245
  579. package/docs/html/safety_blueprint.html +0 -1386
  580. package/docs/html/shared.css +0 -571
  581. package/docs/html/shared.js +0 -143
  582. package/docs/html/skills_blueprint.html +0 -671
  583. package/docs/html/soak_blueprint.html +0 -182
  584. package/docs/html/tool_usage_blueprint.html +0 -350
  585. package/docs/html/tools_blueprint.html +0 -2249
  586. package/docs/html/trace_blueprint.html +0 -235
  587. package/docs/html/tui_design_blueprint.html +0 -374
  588. package/docs/html/validation_blueprint.html +0 -961
  589. package/docs/html/worker_dispatch_blueprint.html +0 -231
  590. package/src/core/release.ts +0 -2
  591. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  592. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  593. package/src/engine/apis/lmstudio-native.ts +0 -1438
  594. package/src/engine/apis/thinking-replay.ts +0 -11
  595. package/src/tools/string-enum.ts +0 -15
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: ast-grep
3
+ description: Use when a code search needs structure, not text — "find all async functions without error handling", "find calls with this argument shape", "find X inside Y" — or when grep returns too much noise to filter. Writes and tests ast-grep rules, then scans the codebase. Search only; never rewrites code. Not for plain string or filename lookups; use grep or find.
4
+ version: 0.1.0
5
+ license: Apache-2.0
6
+ allowed-tools:
7
+ - bash
8
+ - read
9
+ - write
10
+ - grep
11
+ - ls
12
+ clio:
13
+ registry-id: iowarp/clio-coder
14
+ source-url: https://github.com/iowarp/clio-coder/tree/main/skills/coding/ast-grep
15
+ audit: pass
16
+ provenance: adapted
17
+ origin: https://github.com/coleam00/skills/tree/main/.claude/skills/ast-grep
18
+ eval-status: scenarios-recorded
19
+ model-size: any
20
+ agents:
21
+ - main
22
+ ---
23
+
24
+ # ast-grep Structural Search
25
+
26
+ Translate a structural question into an ast-grep rule, prove the rule on a
27
+ tiny example, then scan the real codebase. Never scan first: an untested rule
28
+ that returns nothing tells you nothing.
29
+
30
+ Search only. Never use `--update-all` / `-U` / `--rewrite`; when matches need
31
+ changing, report them and edit through the normal edit tools.
32
+
33
+ ## Step 0 — Check the binary
34
+
35
+ ```bash
36
+ command -v ast-grep || command -v sg
37
+ ```
38
+
39
+ If neither exists, say ast-grep is not installed (`cargo install ast-grep` or
40
+ the platform package) and stop. Some installs expose only `sg`; use whichever
41
+ resolved.
42
+
43
+ ## Step 1 — Pin down the question
44
+
45
+ Before writing any rule, state: the target language; the structure to match;
46
+ what must be included and excluded. If the request is ambiguous on any of
47
+ these, ask one clarifying question instead of guessing.
48
+
49
+ ## Step 2 — Write a minimal example
50
+
51
+ Write the smallest code snippet that MUST match (and, when exclusions matter,
52
+ one that must NOT match) to a scratch file, e.g. `/tmp/astgrep-example.js`.
53
+ This is the rule's test fixture.
54
+
55
+ ## Step 3 — Write the rule, simplest first
56
+
57
+ Escalate only when the simpler form fails:
58
+
59
+ 1. `pattern` alone for direct shapes: `console.log($ARG)`.
60
+ 2. `kind` plus relational rules (`has`, `inside`) for context: "function
61
+ containing await".
62
+ 3. Composite rules (`all`, `any`, `not`) for logic: "has await but no
63
+ try-catch".
64
+
65
+ Non-negotiable: every relational rule (`has`, `inside`) carries
66
+ `stopBy: end`, or traversal stops at the first non-matching child and the
67
+ rule silently under-matches.
68
+
69
+ ```yaml
70
+ # /tmp/astgrep-rule.yml
71
+ id: async-no-trycatch
72
+ language: javascript
73
+ rule:
74
+ all:
75
+ - kind: function_declaration
76
+ - has: {pattern: await $EXPR, stopBy: end}
77
+ - not:
78
+ has: {pattern: 'try { $$$ } catch ($E) { $$$ }', stopBy: end}
79
+ ```
80
+
81
+ Full syntax (atomic, relational, composite rules, metavariables, `constraints`,
82
+ `utils`): read `references/rule_reference.md` when the rule needs more than
83
+ the three forms above.
84
+
85
+ ## Step 4 — Test against the example
86
+
87
+ ```bash
88
+ ast-grep scan --rule /tmp/astgrep-rule.yml /tmp/astgrep-example.js
89
+ ```
90
+
91
+ Prefer a rule file over `--inline-rules`: inline YAML in shell needs `$VAR`
92
+ escaped as `\$VAR` (or single quotes), and quoting errors look exactly like
93
+ non-matches.
94
+
95
+ The rule must match the positive example and miss the negative one before
96
+ you scan anything real. When it does not, debug in this order:
97
+
98
+ 1. Strip the rule to its simplest positive key; re-add parts one at a time.
99
+ 2. Confirm every `has`/`inside` has `stopBy: end`.
100
+ 3. Dump the tree to check node kinds — never guess a `kind` name:
101
+
102
+ ```bash
103
+ ast-grep run --pattern '<target code>' --lang javascript --debug-query=cst
104
+ ```
105
+
106
+ (`cst` = every node; `ast` = named nodes only; `pattern` = how ast-grep
107
+ parsed your pattern.)
108
+
109
+ ## Step 5 — Scan the codebase
110
+
111
+ Simple one-node patterns skip the rule file:
112
+
113
+ ```bash
114
+ ast-grep run --pattern 'console.log($ARG)' --lang javascript .
115
+ ```
116
+
117
+ Rule-based scans:
118
+
119
+ ```bash
120
+ ast-grep scan --rule /tmp/astgrep-rule.yml <path>
121
+ ```
122
+
123
+ Add `--json` when the output feeds further processing. Report matches as
124
+ `path:line` with a one-line reading of each; do not paste raw JSON at the
125
+ user. Done when the reported matches answer the Step 1 question and false
126
+ positives you noticed are either excluded by the rule or called out. Delete
127
+ the scratch files.
128
+
129
+ ## Red flags
130
+
131
+ - Scanning the codebase with a rule never proven on an example.
132
+ - A `has`/`inside` without `stopBy: end`.
133
+ - A guessed `kind` name instead of a `--debug-query=cst` dump.
134
+ - Any rewrite flag: this skill only reads.
135
+ - Falling back to grep halfway because rule debugging felt slow — fix the
136
+ rule with Step 4; that is the job.
@@ -0,0 +1,56 @@
1
+ # Evals — ast-grep
2
+
3
+ Baseline scenarios (run a subagent WITHOUT the skill to capture the gap, then
4
+ WITH the skill to confirm it closes). Rubric is pass/fail per bullet. Status:
5
+ written at port time, not yet executed (`eval-status: untested`).
6
+
7
+ ## S1 — structural search with context
8
+ Setup: find async functions that await something but have no error
9
+ handling.
10
+
11
+ Fixture:
12
+ ```bash
13
+ mkdir -p src
14
+ printf 'async function fetchUser(id) {\n const res = await fetch("api" + id);\n return res.json();\n}\n\nmodule.exports = { fetchUser };\n' > src/users.js
15
+ printf 'async function fetchSafe(url) {\n try {\n const res = await fetch(url);\n return await res.json();\n } catch (err) {\n return null;\n }\n}\n\nmodule.exports = { fetchSafe };\n' > src/safe.js
16
+ printf 'function plainSync(a, b) {\n return a + b;\n}\n\nmodule.exports = { plainSync };\n' > src/plain.js
17
+ ```
18
+
19
+ Expected:
20
+ - Writes a positive and a negative example file before any repo scan.
21
+ - Rule uses `kind` + `has`/`not` with `stopBy: end` on every relational rule.
22
+ - Tests the rule on the examples first; scans the repo only after it passes.
23
+ - Reports matches as path:line, not raw JSON.
24
+
25
+ ## S2 — unknown node kind
26
+ Setup: rule fails to match the example. Prompt continues from S1.
27
+ Expected:
28
+ - Uses `--debug-query=cst` to read the real node kinds; does not guess.
29
+ - Simplifies the rule and re-adds parts instead of abandoning to grep.
30
+
31
+ ## S3 — rewrite temptation
32
+ Setup: user asks "find and fix all console.log calls".
33
+ Expected:
34
+ - Uses ast-grep for the find only; never passes `-U`/`--update-all`.
35
+ - Applies changes through the ordinary edit tools after reading matches.
36
+
37
+ ## Baseline failure modes to watch for (RED)
38
+ - Scanning the whole repo with an untested rule and reporting "no matches".
39
+ - Missing `stopBy: end`, silently under-matching.
40
+ - Escaping errors in `--inline-rules` read as "pattern doesn't match".
41
+ - Guessed `kind:` names that do not exist in the grammar.
42
+
43
+ ## Smoke record (2026-08-13)
44
+
45
+ One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
46
+ (30B local, llamacpp on mini), full-auto sandbox. NOT SMOKED: ast-grep binary absent on the eval host (2026-08-13). Needs the binary, then a re-run.
47
+
48
+ Follow-up (2026-08-13): the durable fix considered here was a typed read-only
49
+ `ast_grep` tool in `src/tools`, which would drop the binary dependency from the
50
+ skill body and let read-only recipes such as `scout` bind structural search
51
+ directly. Not built: a new tool is a new entry in the canonical tool surface,
52
+ which means a name reserved in `core/tool-names.ts`, an action class and
53
+ concurrency rule, admission and profile entries, and prompt-prefix cost paid by
54
+ every run whether or not anyone searches structurally. That is a tool-surface
55
+ decision, not skill-catalog cleanup. Until then the skill stays
56
+ `scenarios-recorded` and its first step is the binary check it already has.
@@ -0,0 +1,297 @@
1
+ # ast-grep Rule Reference
2
+
3
+ This document provides comprehensive documentation for ast-grep rule syntax, covering all rule types and metavariables.
4
+
5
+ ## Introduction to ast-grep Rules
6
+
7
+ ast-grep rules are declarative specifications for matching and filtering Abstract Syntax Tree (AST) nodes. They enable structural code search and analysis by defining conditions an AST node must meet to be matched.
8
+
9
+ ### Rule Categories
10
+
11
+ ast-grep rules are categorized into three types:
12
+
13
+ * **Atomic Rules**: Match individual AST nodes based on intrinsic properties like code patterns (`pattern`), node type (`kind`), or text content (`regex`).
14
+ * **Relational Rules**: Define conditions based on a target node's position or relationship to other nodes (e.g., `inside`, `has`, `precedes`, `follows`).
15
+ * **Composite Rules**: Combine other rules using logical operations (AND, OR, NOT) to form complex matching criteria (e.g., `all`, `any`, `not`, `matches`).
16
+
17
+ ## Anatomy of an ast-grep Rule Object
18
+
19
+ The ast-grep rule object is the core configuration unit defining how ast-grep identifies and filters AST nodes. It's typically written in YAML format.
20
+
21
+ ### General Structure
22
+
23
+ Every field within an ast-grep Rule Object is optional, but at least one "positive" key (e.g., `kind`, `pattern`) must be present.
24
+
25
+ A node matches a rule if it satisfies all fields defined within that rule object, implying an implicit logical AND operation.
26
+
27
+ For rules using metavariables that depend on prior matching, explicit `all` composite rules are recommended to guarantee execution order.
28
+
29
+ ### Rule Object Properties
30
+
31
+ | Property | Type | Category | Purpose | Example |
32
+ | :--- | :--- | :--- | :--- | :--- |
33
+ | `pattern` | String or Object | Atomic | Matches AST node by code pattern. | `pattern: console.log($ARG)` |
34
+ | `kind` | String | Atomic | Matches AST node by its kind name. | `kind: call_expression` |
35
+ | `regex` | String | Atomic | Matches node's text by Rust regex. | `regex: ^[a-z]+$` |
36
+ | `nthChild` | number, string, Object | Atomic | Matches nodes by their index within parent's children. | `nthChild: 1` |
37
+ | `range` | RangeObject | Atomic | Matches node by character-based start/end positions. | `range: { start: { line: 0, column: 0 }, end: { line: 0, column: 10 } }` |
38
+ | `inside` | Object | Relational | Target node must be inside node matching sub-rule. | `inside: { pattern: class $C { $$$ }, stopBy: end }` |
39
+ | `has` | Object | Relational | Target node must have descendant matching sub-rule. | `has: { pattern: await $EXPR, stopBy: end }` |
40
+ | `precedes` | Object | Relational | Target node must appear before node matching sub-rule. | `precedes: { pattern: return $VAL }` |
41
+ | `follows` | Object | Relational | Target node must appear after node matching sub-rule. | `follows: { pattern: import $M from '$P' }` |
42
+ | `all` | Array<Rule> | Composite | Matches if all sub-rules match. | `all: [ { kind: call_expression }, { pattern: foo($A) } ]` |
43
+ | `any` | Array<Rule> | Composite | Matches if any sub-rules match. | `any: [ { pattern: foo() }, { pattern: bar() } ]` |
44
+ | `not` | Object | Composite | Matches if sub-rule does not match. | `not: { pattern: console.log($ARG) }` |
45
+ | `matches` | String | Composite | Matches if predefined utility rule matches. | `matches: my-utility-rule-id` |
46
+
47
+ ## Atomic Rules
48
+
49
+ Atomic rules match individual AST nodes based on their intrinsic properties.
50
+
51
+ ### pattern: String and Object Forms
52
+
53
+ The `pattern` rule matches a single AST node based on a code pattern.
54
+
55
+ **String Pattern**: Directly matches using ast-grep's pattern syntax with metavariables.
56
+
57
+ ```yaml
58
+ pattern: console.log($ARG)
59
+ ```
60
+
61
+ **Object Pattern**: Offers granular control for ambiguous patterns or specific contexts.
62
+
63
+ * `selector`: Pinpoints a specific part of the parsed pattern to match.
64
+ ```yaml
65
+ pattern:
66
+ selector: field_definition
67
+ context: class { $F }
68
+ ```
69
+
70
+ * `context`: Provides surrounding code context for correct parsing.
71
+
72
+ * `strictness`: Modifies the pattern's matching algorithm (`cst`, `smart`, `ast`, `relaxed`, `signature`).
73
+ ```yaml
74
+ pattern:
75
+ context: foo($BAR)
76
+ strictness: relaxed
77
+ ```
78
+
79
+ ### kind: Matching by Node Type
80
+
81
+ The `kind` rule matches an AST node by its `tree_sitter_node_kind` name, derived from the language's Tree-sitter grammar. Useful for targeting constructs like `call_expression` or `function_declaration`.
82
+
83
+ ```yaml
84
+ kind: call_expression
85
+ ```
86
+
87
+ ### regex: Text-Based Node Matching
88
+
89
+ The `regex` rule matches the entire text content of an AST node using a Rust regular expression. It's not a "positive" rule, meaning it matches any node whose text satisfies the regex, regardless of its structural kind.
90
+
91
+ ### nthChild: Positional Node Matching
92
+
93
+ The `nthChild` rule finds nodes by their 1-based index within their parent's children list, counting only named nodes by default.
94
+
95
+ * `number`: Matches the exact nth child. Example: `nthChild: 1`
96
+ * `string`: Matches positions using An+B formula. Example: `2n+1`
97
+ * `Object`: Provides granular control:
98
+ * `position`: `number` or An+B string.
99
+ * `reverse`: `true` to count from the end.
100
+ * `ofRule`: An ast-grep rule to filter the sibling list before counting.
101
+
102
+ ### range: Position-Based Node Matching
103
+
104
+ The `range` rule matches an AST node based on its character-based start and end positions. A `RangeObject` defines `start` and `end` fields, each with 0-based `line` and `column`. `start` is inclusive, `end` is exclusive.
105
+
106
+ ## Relational Rules
107
+
108
+ Relational rules filter targets based on their position relative to other AST nodes. They can include `stopBy` and `field` options.
109
+
110
+ ### inside: Matching Within a Parent Node
111
+
112
+ Requires the target node to be inside another node matching the `inside` sub-rule.
113
+
114
+ ```yaml
115
+ inside:
116
+ pattern: class $C { $$$ }
117
+ stopBy: end
118
+ ```
119
+
120
+ ### has: Matching with a Descendant Node
121
+
122
+ Requires the target node to have a descendant node matching the `has` sub-rule.
123
+
124
+ ```yaml
125
+ has:
126
+ pattern: await $EXPR
127
+ stopBy: end
128
+ ```
129
+
130
+ ### precedes and follows: Sequential Node Matching
131
+
132
+ * `precedes`: Target node must appear before a node matching the `precedes` sub-rule.
133
+ * `follows`: Target node must appear after a node matching the `follows` sub-rule.
134
+
135
+ Both include `stopBy` but not `field`.
136
+
137
+ ### stopBy and field: Refining Relational Searches
138
+
139
+ **stopBy**: Controls search termination for relational rules.
140
+
141
+ * `"neighbor"` (default): Stops when immediate surrounding node doesn't match.
142
+ * `"end"`: Searches to the end of the direction (root for `inside`, leaf for `has`).
143
+ * `Rule object`: Stops when a surrounding node matches the provided rule (inclusive).
144
+
145
+ **field**: Specifies a sub-node within the target node that should match the relational rule. Only for `inside` and `has`.
146
+
147
+ **Best Practice**: When unsure, always use `stopBy: end` to ensure the search goes to the end of the direction.
148
+
149
+ ## Composite Rules
150
+
151
+ Composite rules combine atomic and relational rules using logical operations.
152
+
153
+ ### all: Conjunction (AND) of Rules
154
+
155
+ Matches a node only if all sub-rules in the list match. Guarantees order of rule matching, important for metavariables.
156
+
157
+ ```yaml
158
+ all:
159
+ - kind: call_expression
160
+ - pattern: console.log($ARG)
161
+ ```
162
+
163
+ ### any: Disjunction (OR) of Rules
164
+
165
+ Matches a node if any sub-rules in the list match.
166
+
167
+ ```yaml
168
+ any:
169
+ - pattern: console.log($ARG)
170
+ - pattern: console.warn($ARG)
171
+ - pattern: console.error($ARG)
172
+ ```
173
+
174
+ ### not: Negation (NOT) of a Rule
175
+
176
+ Matches a node if the single sub-rule does not match.
177
+
178
+ ```yaml
179
+ not:
180
+ pattern: console.log($ARG)
181
+ ```
182
+
183
+ ### matches: Rule Reuse and Utility Rules
184
+
185
+ Takes a rule-id string, matching if the referenced utility rule matches. Enables rule reuse and recursive rules.
186
+
187
+ ## Metavariables
188
+
189
+ Metavariables are placeholders in patterns to match dynamic content in the AST.
190
+
191
+ ### $VAR: Single Named Node Capture
192
+
193
+ Captures a single named node in the AST.
194
+
195
+ * **Valid**: `$META`, `$META_VAR`, `$_`
196
+ * **Invalid**: `$invalid`, `$123`, `$KEBAB-CASE`
197
+ * **Example**: `console.log($GREETING)` matches `console.log('Hello World')`.
198
+ * **Reuse**: `$A == $A` matches `a == a` but not `a == b`.
199
+
200
+ ### $$VAR: Single Unnamed Node Capture
201
+
202
+ Captures a single unnamed node (e.g., operators, punctuation).
203
+
204
+ **Example**: To match the operator in `a + b`, use `$$OP`.
205
+
206
+ ```yaml
207
+ rule:
208
+ kind: binary_expression
209
+ has:
210
+ field: operator
211
+ pattern: $$OP
212
+ ```
213
+
214
+ ### $$$MULTI_META_VARIABLE: Multi-Node Capture
215
+
216
+ Matches zero or more AST nodes (non-greedy). Useful for variable numbers of arguments or statements.
217
+
218
+ * **Example**: `console.log($$$)` matches `console.log()`, `console.log('hello')`, and `console.log('debug:', key, value)`.
219
+ * **Example**: `function $FUNC($$$ARGS) { $$$ }` matches functions with varying parameters/statements.
220
+
221
+ ### Non-Capturing Metavariables (_VAR)
222
+
223
+ Metavariables starting with an underscore (`_`) are not captured. They can match different content even if named identically, optimizing performance.
224
+
225
+ * **Example**: `$_FUNC($_FUNC)` matches `test(a)` and `testFunc(1 + 1)`.
226
+
227
+ ### Important Considerations for Metavariable Detection
228
+
229
+ * **Syntax Matching**: Only exact metavariable syntax (e.g., `$A`, `$$B`, `$$$C`) is recognized.
230
+ * **Exclusive Content**: Metavariable text must be the only text within an AST node.
231
+ * **Non-working**: `obj.on$EVENT`, `"Hello $WORLD"`, `a $OP b`, `$jq`.
232
+
233
+ The ast-grep playground is useful for debugging patterns and visualizing metavariables.
234
+
235
+ ## Common Patterns and Examples
236
+
237
+ ### Finding Functions with Specific Content
238
+
239
+ Find functions that contain await expressions:
240
+
241
+ ```yaml
242
+ rule:
243
+ kind: function_declaration
244
+ has:
245
+ pattern: await $EXPR
246
+ stopBy: end
247
+ ```
248
+
249
+ ### Finding Code Inside Specific Contexts
250
+
251
+ Find console.log calls inside class methods:
252
+
253
+ ```yaml
254
+ rule:
255
+ pattern: console.log($$$)
256
+ inside:
257
+ kind: method_definition
258
+ stopBy: end
259
+ ```
260
+
261
+ ### Combining Multiple Conditions
262
+
263
+ Find async functions that use await but don't have try-catch:
264
+
265
+ ```yaml
266
+ rule:
267
+ all:
268
+ - kind: function_declaration
269
+ - has:
270
+ pattern: await $EXPR
271
+ stopBy: end
272
+ - not:
273
+ has:
274
+ pattern: try { $$$ } catch ($E) { $$$ }
275
+ stopBy: end
276
+ ```
277
+
278
+ ### Matching Multiple Alternatives
279
+
280
+ Find any type of console method call:
281
+
282
+ ```yaml
283
+ rule:
284
+ any:
285
+ - pattern: console.log($$$)
286
+ - pattern: console.warn($$$)
287
+ - pattern: console.error($$$)
288
+ - pattern: console.debug($$$)
289
+ ```
290
+
291
+ ## Troubleshooting Tips
292
+
293
+ 1. **Rule doesn't match**: Use `dump_syntax_tree` to see the actual AST structure
294
+ 2. **Relational rule issues**: Ensure `stopBy: end` is set for deep searches
295
+ 3. **Wrong node kind**: Check the language's Tree-sitter grammar for correct kind names
296
+ 4. **Metavariable not working**: Ensure it's the only content in its AST node
297
+ 5. **Pattern too complex**: Break it down into simpler sub-rules using `all`
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: coding-standards
3
+ description: "Use when writing or refactoring TypeScript and the project has not pinned its own conflicting standards — new modules, error-handling design, schema parsing, module boundaries — or when another skill needs a TypeScript standards reference. Correct-by-construction rules: errors as values, parse don't validate, illegal states unrepresentable, deep modules, functional core / imperative shell."
4
+ version: 0.1.0
5
+ license: Apache-2.0
6
+ allowed-tools:
7
+ - read
8
+ - grep
9
+ clio:
10
+ registry-id: iowarp/clio-coder
11
+ source-url: https://github.com/iowarp/clio-coder/tree/main/skills/coding/coding-standards
12
+ audit: pass
13
+ provenance: adapted
14
+ origin: https://github.com/dmmulroy/skills/tree/main/coding-standards
15
+ eval-status: smoke-checked
16
+ model-size: any
17
+ provisional: true
18
+ agents:
19
+ - main
20
+ - coder
21
+ ---
22
+
23
+ # Coding Standards (TypeScript, correct-by-construction)
24
+
25
+ Reference, not a workflow. Apply to new and refactored code. When rules
26
+ pull in different directions: correctness and debuggability first, then
27
+ these standards, then compatible project conventions; contain incompatible
28
+ existing patterns at the nearest boundary instead of copying them into new
29
+ code, and never rewrite unrelated old code without an explicit migration
30
+ request. **The host project's own documented standards always win over
31
+ this file.**
32
+
33
+ ## Errors
34
+
35
+ - Expected failures are values in the return type, as custom tagged
36
+ errors; callers handle or return them upward, and the outermost boundary
37
+ translates them (HTTP response, exit code, retry decision). Use the
38
+ repo's established result mechanism; absent one, a small local tagged
39
+ union `{_tag: "ok"|"err", ...}` suffices.
40
+ - Promise rejection is throwing. Catch unclassified third-party rejections
41
+ inside the owning adapter and translate before they cross its boundary.
42
+ - Throw only for defects: violated invariants, impossible branches,
43
+ not-yet-implemented paths. A missing config value is an expected startup
44
+ failure, not a defect.
45
+ - Custom errors carry: a stable `_tag` (`as const`), a useful message,
46
+ structured context fields, optional `cause: unknown`. Keep error unions
47
+ precise at module boundaries; broad `AppError` types belong only near
48
+ entrypoints and rendering.
49
+
50
+ ## Parse, don't validate
51
+
52
+ - Boundary code turns `unknown` input into domain types before it enters
53
+ inner code; inner code never re-checks what a parser proved.
54
+ - `parseX(input): Result<X, ParseXError>` for untrusted input; `makeX` for
55
+ smart construction from typed pieces; `isX` for predicates. A function
56
+ returning a refined value is a parser — do not name it `validateX`.
57
+ - Schema libraries are boundary parsers, not validators sprinkled through
58
+ core logic; use the repo's established one. Never pass a schema-inferred
59
+ transport shape through the application.
60
+ - Brand types where a mix-up is realistic: IDs (`UserId` vs `OrgId`),
61
+ parsed strings (`EmailAddress`), units (`Milliseconds`, `Bytes`).
62
+ Construct branded values only through their parser.
63
+
64
+ ## Illegal states unrepresentable
65
+
66
+ - Lifecycle states are tagged unions, not boolean fields:
67
+ `{_tag:"Draft"|...}` beats `{isSent, isPaid, sentAt?, paidAt?}`.
68
+ - No behavior-controlling boolean parameters: `createUser(input,
69
+ {emailVerification:"skip"})`, never `createUser(input, true)`.
70
+ - Push optionality outward: branch or parse before calling, not
71
+ `undefined` checks inside every callee. `Partial<T>` is not an
72
+ application input unless partiality is the domain concept.
73
+
74
+ ## Modules
75
+
76
+ - Three responsibilities, not three mandatory layers: **domain** (meaning,
77
+ invariants, pure transitions — no I/O, no ambient time or randomness),
78
+ **application service** (policy and effect ordering through narrow,
79
+ application-owned ports), **adapter** (one boundary's technology and
80
+ translation; raw external types never leak out of it). Wire concrete
81
+ adapters to ports at the composition root only.
82
+ - Deep modules: substantial behavior behind a low-burden interface.
83
+ Deletion test: removing a module that makes complexity disappear was
84
+ pass-through waste; removing one that spreads complexity across callers
85
+ was earning its keep.
86
+ - Audit existing adapters/services before creating one: reuse as-is,
87
+ extend if cohesive, create new only when reuse would couple wrongly.
88
+
89
+ ## Testing
90
+
91
+ - Prefer, in order: end-to-end through real public entrypoints;
92
+ integration through real seams; property tests for pure domain modules;
93
+ unit tests of meaningful behavior.
94
+ - Never module-mock (`vi.mock`/`jest.mock`). Real seams: injected
95
+ interfaces, local DB substitutes, in-memory or fake adapters.
96
+ - Assert observable outcomes (returned value, persisted state, emitted
97
+ event), not call sequences. Tests never bypass parsers or invariants.
98
+
99
+ ## Style and safety
100
+
101
+ - Strict compiler settings (`strict`, `noUncheckedIndexedAccess`,
102
+ `exactOptionalPropertyTypes`). Immutable by default (`readonly`,
103
+ `ReadonlyArray`); mutation stays localized behind precise interfaces.
104
+ - No `any`, no `!`, no `as` casts (`as const` is fine). The rare
105
+ justified cast carries a `// SAFETY:` comment explaining why the
106
+ invariant holds and why the type system cannot express it.
107
+ - Direct imports from owning files; no barrel layers by default. Precise
108
+ file names (`email-address.ts`), never `utils.ts`/`helpers.ts`.
109
+ - Parse env/config at startup into typed config; no `process.env` reads
110
+ scattered through the app; no import-time side effects outside true
111
+ entrypoints. Secrets live in `Redacted`-style wrappers, unwrapped only
112
+ at the adapter that needs the raw value, and never appear in errors,
113
+ logs, or traces.
@@ -0,0 +1,34 @@
1
+ # Evals — coding-standards
2
+
3
+ Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
4
+ bullet. Status: written at port time, not yet executed (`eval-status:
5
+ untested`); skill is marked provisional.
6
+
7
+ ## S1 — new TypeScript module
8
+ Prompt: "add a module that parses and stores webhook payloads."
9
+ Expected:
10
+ - Payload parsed at the boundary into a domain type; `unknown` never
11
+ travels inward.
12
+ - Expected failures are tagged error values in return types, not throws.
13
+ - No `any`, `!`, or bare `as` casts; state modeled as a tagged union.
14
+
15
+ ## S2 — host-repo conflict
16
+ Setup: repo's own instruction file mandates exceptions for error flow.
17
+ Expected:
18
+ - Host standard wins; skill's preference contained at the boundary, not
19
+ imposed.
20
+
21
+ ## S3 — test style
22
+ Prompt: "test the new module."
23
+ Expected:
24
+ - Real seams; no vi.mock/jest.mock; assertions on observable outcomes.
25
+
26
+ ## Baseline failure modes to watch for (RED)
27
+ - Thrown errors for expected failures in new code.
28
+ - Boolean-flag APIs and `Partial<T>` inputs.
29
+ - Module mocks and spy-sequence assertions.
30
+
31
+ ## Smoke record (2026-08-13)
32
+
33
+ One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
34
+ (30B local, llamacpp on mini), full-auto sandbox. PASS (smoke). Skill loaded and produced its standards plan; judge emitted no parseable bullets (judge truncation, not a skill failure).