@iowarp/clio-coder 0.4.1 → 0.4.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 (437) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +404 -472
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-TMDQZDIG.js} +7 -7
  6. package/dist/{agents-HYWGBGQR.js → agents-5N5NG3XG.js} +28 -28
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-Z5CCBXKQ.js} +8 -9
  9. package/dist/{builtins-UJLMOVOV.js → builtins-K6TNDT24.js} +4 -4
  10. package/dist/{chunk-GVQJ5CCZ.js → chunk-2HFQNRV3.js} +7 -7
  11. package/dist/{chunk-QMXC4JB7.js → chunk-2NHR3NAY.js} +163 -1401
  12. package/dist/chunk-2X4RYJTJ.js +39 -0
  13. package/dist/{chunk-Y45G3AXC.js → chunk-2Z2IKEXI.js} +6 -10
  14. package/dist/{chunk-EIMVLWB3.js → chunk-34BHNEE3.js} +7 -3
  15. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  16. package/dist/chunk-3EBYEESD.js +314 -0
  17. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  18. package/dist/{chunk-AP73CFDC.js → chunk-3KIPBMUA.js} +2 -2
  19. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  20. package/dist/{chunk-VEGN6WIQ.js → chunk-462T4EGZ.js} +2 -2
  21. package/dist/{chunk-AFKWHWXF.js → chunk-4JDLP6ZS.js} +33 -16
  22. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  23. package/dist/{chunk-AKB4GYDL.js → chunk-54ODD65L.js} +5 -5
  24. package/dist/{chunk-BBTJOK6Y.js → chunk-5KW52TEP.js} +3 -3
  25. package/dist/{chunk-6CCS4G3W.js → chunk-5PFYMY2V.js} +2 -2
  26. package/dist/chunk-77QIVUZB.js +1334 -0
  27. package/dist/{chunk-7OBGU7UB.js → chunk-7BHIY2MW.js} +7 -13
  28. package/dist/{chunk-3QSOM6PA.js → chunk-AZ4WMN4W.js} +2 -2
  29. package/dist/{chunk-6NJQITNH.js → chunk-B74PXLU7.js} +6 -3
  30. package/dist/{chunk-R23Z6K6I.js → chunk-B7HM5Z7T.js} +15 -15
  31. package/dist/{chunk-R32CLGZ6.js → chunk-BO7Y52RY.js} +81 -20
  32. package/dist/{chunk-UEDMSP56.js → chunk-BYMNWQ7O.js} +123 -148
  33. package/dist/{chunk-ZJLUDYFY.js → chunk-CRFOIAX3.js} +4 -4
  34. package/dist/{chunk-2NM363SV.js → chunk-CYZW7JHJ.js} +7 -7
  35. package/dist/{chunk-6HMJX2VU.js → chunk-DYHAXKHD.js} +38 -10
  36. package/dist/{chunk-THYWACCR.js → chunk-DZAW46HP.js} +3 -3
  37. package/dist/{chunk-FYUN5KZ3.js → chunk-DZEK6CJN.js} +17 -17
  38. package/dist/{chunk-3I5NY75V.js → chunk-E7GT7O5N.js} +5 -5
  39. package/dist/{chunk-VKFQTNDV.js → chunk-F2I26BDK.js} +4 -4
  40. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  41. package/dist/{chunk-IXJT6DCX.js → chunk-FVDGR2ZL.js} +3 -3
  42. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  43. package/dist/{chunk-7EPLI7VL.js → chunk-HIICAHCJ.js} +2 -2
  44. package/dist/{chunk-E67WX76H.js → chunk-HKMD33FO.js} +29 -80
  45. package/dist/chunk-HLAFFSEK.js +360 -0
  46. package/dist/{chunk-UAPGZHYC.js → chunk-I64IFBLB.js} +9 -2
  47. package/dist/{chunk-XKA2ICR3.js → chunk-I66ZTYNP.js} +440 -175
  48. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  49. package/dist/{chunk-PVAMAVBB.js → chunk-IDNA72AH.js} +102 -2
  50. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  51. package/dist/{chunk-2VG7KLYV.js → chunk-IKSLQ4XV.js} +5460 -3241
  52. package/dist/{chunk-QKIFBZKT.js → chunk-IMXMHHMQ.js} +166 -25
  53. package/dist/{chunk-74YWRRU5.js → chunk-JBCS7CRR.js} +2 -2
  54. package/dist/{chunk-BDPT6GTK.js → chunk-JWJGP5DQ.js} +2 -2
  55. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  56. package/dist/chunk-KPXDY6QF.js +47 -0
  57. package/dist/{chunk-ABLSQ6JX.js → chunk-LJID3DYZ.js} +7 -1
  58. package/dist/{chunk-VKRH2TCS.js → chunk-M2DAX4F6.js} +2 -2
  59. package/dist/{chunk-6I5ILFOF.js → chunk-M2WXEHER.js} +2 -2
  60. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  61. package/dist/{chunk-N5UK64DP.js → chunk-MCMZMDAC.js} +2 -2
  62. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  63. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  64. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  65. package/dist/{chunk-HUAS7ITX.js → chunk-O3YUNJZ2.js} +13 -21
  66. package/dist/{chunk-MA3H6DM5.js → chunk-P75RZCJW.js} +25 -3
  67. package/dist/{chunk-IG7BCQBA.js → chunk-PGF63K6I.js} +2 -2
  68. package/dist/chunk-PJX3WQUQ.js +42 -0
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-Q4XWMHX6.js} +4 -6
  70. package/dist/{chunk-OJTRZGR3.js → chunk-QQLGQY2A.js} +8 -8
  71. package/dist/{chunk-J4HBWF6Y.js → chunk-RLYRBIYQ.js} +115 -20
  72. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  73. package/dist/{chunk-C537JADH.js → chunk-SSEYRH53.js} +6 -7
  74. package/dist/chunk-SZAA6XDG.js +30 -0
  75. package/dist/{chunk-MOPSG2X7.js → chunk-TPEQIQIE.js} +6 -6
  76. package/dist/{chunk-JA5QWE4Z.js → chunk-UBRFI4HS.js} +1879 -1650
  77. package/dist/{chunk-BTGG6BG2.js → chunk-UH347SHR.js} +154 -15
  78. package/dist/{chunk-5YHDIDBP.js → chunk-UH632ZYL.js} +2 -2
  79. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  80. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  81. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  82. package/dist/{chunk-UXN6JT4W.js → chunk-W4YEMFBX.js} +2 -2
  83. package/dist/{chunk-TD3PGPQA.js → chunk-W6NIE6OW.js} +2 -2
  84. package/dist/{chunk-TVH4ONAM.js → chunk-X7IARSHT.js} +3 -3
  85. package/dist/{chunk-PJJ6MY27.js → chunk-XE3PCIXH.js} +3 -3
  86. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  87. package/dist/{chunk-SCYB3HA4.js → chunk-XOXV5GKE.js} +51 -16
  88. package/dist/{chunk-QTFGO774.js → chunk-XQRY4DTA.js} +24 -11
  89. package/dist/{chunk-BJGUKIG4.js → chunk-YJISEZKC.js} +2 -2
  90. package/dist/{chunk-GPPB3JBE.js → chunk-ZGNYYXQ6.js} +2 -2
  91. package/dist/{chunk-SINK3QR6.js → chunk-ZNT2M6TG.js} +7 -7
  92. package/dist/{chunk-7RY5VZPH.js → chunk-ZW4HH5JJ.js} +6 -6
  93. package/dist/cli/index.js +33 -32
  94. package/dist/{clio-IT3G3VQH.js → clio-7VB377CC.js} +7 -7
  95. package/dist/{code-nav-RK6S7F6E.js → code-nav-YVLCYA7V.js} +85 -17
  96. package/dist/{config-3QZRWZJF.js → config-4HVOS65E.js} +88 -43
  97. package/dist/{configure-FL7Y3KJF.js → configure-PIWO7B24.js} +10 -10
  98. package/dist/{context-5HE7ODYK.js → context-IYEHL3WQ.js} +33 -31
  99. package/dist/{context-XNHL75JV.js → context-KQYIWPWT.js} +47 -34
  100. package/dist/{context-KYQFRVDC.js → context-N6ZE3LGJ.js} +11 -11
  101. package/dist/{context-clear-N545L53A.js → context-clear-G4OGZJDS.js} +33 -31
  102. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-BWLF6LJP.js} +7 -7
  103. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-2QQAITS3.js} +38 -38
  104. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  105. package/dist/{doctor-ZGPEGHIP.js → doctor-LHBD36VU.js} +23 -22
  106. package/dist/{eval-GXLL44RD.js → eval-C45FYRJ6.js} +21 -20
  107. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-6DEJPLBF.js} +2 -2
  108. package/dist/{evidence-HWLBRH3Q.js → evidence-6SHONYAF.js} +30 -28
  109. package/dist/{evolve-FTZBMNVW.js → evolve-KRKMV72X.js} +30 -28
  110. package/dist/{extensions-VHRBEID7.js → extensions-KPZ2UHBB.js} +5 -3
  111. package/dist/{fleet-CKZHJWZJ.js → fleet-IVTCKDHT.js} +62 -61
  112. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-EDWL3IT7.js} +5 -5
  113. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-YP3YEFGK.js} +4 -4
  114. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-ZFWKHY2M.js} +16 -14
  115. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-FVUNCBML.js} +31 -29
  116. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-UN5XED4R.js} +2 -2
  117. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-XOWC4HSX.js} +17 -15
  118. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-UN3SODEL.js} +30 -28
  119. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-TWHJKCN6.js} +31 -29
  120. package/dist/{init-5XQRBOFV.js → init-T2QORQ3Y.js} +50 -49
  121. package/dist/{interop-34TVO25M.js → interop-IN5I2A66.js} +5 -5
  122. package/dist/{library-3QY6KF57.js → library-LSCATDLZ.js} +15 -13
  123. package/dist/{memory-L4UTIIIW.js → memory-HYOKAGGJ.js} +31 -29
  124. package/dist/{models-ZVX3QOWE.js → models-2GPMFYCM.js} +22 -21
  125. package/dist/{monitor-CEKVSYTS.js → monitor-E4ASVUJH.js} +34 -32
  126. package/dist/{orchestrator-77BAP6BC.js → orchestrator-DDMPR3PY.js} +984 -583
  127. package/dist/{panes-7STHOAUJ.js → panes-E3RUXOW5.js} +4 -4
  128. package/dist/{panes-SHAUIRXY.js → panes-IXKLOKA2.js} +23 -8
  129. package/dist/{reset-EOLM7GVE.js → reset-OAQP3W4O.js} +4 -4
  130. package/dist/{resources-74GKTLSF.js → resources-OTRSN34L.js} +15 -13
  131. package/dist/{run-HBAUJNNZ.js → run-5DEYH5QK.js} +60 -59
  132. package/dist/{share-G3APVLVP.js → share-IHWTLO3M.js} +19 -15
  133. package/dist/{skills-35HHUKCR.js → skills-IYMXMKW4.js} +17 -15
  134. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-DROHSJAR.js} +36 -36
  135. package/dist/{skills-inventory-J357J34F.js → skills-inventory-D7X4L4ZX.js} +15 -13
  136. package/dist/{slash-commands-JZZCQA32.js → slash-commands-QBM7UZ3B.js} +21 -18
  137. package/dist/{steer-XAVHJM22.js → steer-Z5DO23FJ.js} +2 -2
  138. package/dist/{targets-DSM6CY3M.js → targets-P2FUC4IL.js} +25 -28
  139. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-YREJ3JX2.js} +5 -5
  140. package/dist/{tools-MKNWVPBH.js → tools-5B7RO6MV.js} +4 -4
  141. package/dist/{trace-ECQ7TIYZ.js → trace-YMGMUM6A.js} +55 -7
  142. package/dist/{upgrade-H7TOM7YL.js → upgrade-PXK3S2YM.js} +11 -9
  143. package/dist/{usage-X52N3IDJ.js → usage-ME5MPXGX.js} +36 -34
  144. package/dist/{verifiers-EJTVVSMA.js → verifiers-BVZ7IWOO.js} +5 -5
  145. package/dist/{verify-YJL6XET2.js → verify-5K7ZKQFC.js} +4 -4
  146. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  147. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-F5W5QTYY.js} +48 -47
  148. package/dist/{with-panes-OBOBFIIR.js → with-panes-BYOJCLAM.js} +51 -255
  149. package/dist/worker/entry.js +45 -30
  150. package/docs/README.md +176 -81
  151. package/docs/{acp.md → architecture/acp.md} +36 -20
  152. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  153. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  154. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  155. package/docs/architecture/artifact-versions.md +90 -0
  156. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  157. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  158. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  159. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  160. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  161. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  162. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  163. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  164. package/docs/{observability.md → architecture/observability.md} +26 -13
  165. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  166. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  167. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  168. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  169. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  170. package/docs/architecture/time-conventions.md +125 -0
  171. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  172. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  173. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  174. package/docs/{built-in-agents.md → guide/built-in-agents.md} +50 -34
  175. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +65 -60
  176. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +227 -289
  177. package/docs/guide/configuration-reference.md +1158 -0
  178. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -28
  179. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  180. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  181. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  182. package/docs/{glossary.md → guide/glossary.md} +14 -11
  183. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +44 -13
  184. package/docs/guide/panes-and-files.md +290 -0
  185. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  186. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  187. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  188. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  189. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  190. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  191. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  192. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  193. package/docs/process/documentation-coverage.md +100 -0
  194. package/docs/process/documentation-guide.md +187 -0
  195. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  196. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  197. package/docs/{evolution.md → process/evolution.md} +2 -2
  198. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  199. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  200. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  201. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  202. package/evals/README.md +2 -2
  203. package/package.json +9 -7
  204. package/skills/README.md +46 -37
  205. package/skills/coding/ast-grep/SKILL.md +2 -2
  206. package/skills/coding/coding-standards/SKILL.md +2 -2
  207. package/skills/coding/prototype/SKILL.md +2 -2
  208. package/skills/coding/tdd/SKILL.md +2 -2
  209. package/skills/context/context-handoff/SKILL.md +2 -2
  210. package/skills/context/context-prime/SKILL.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +2 -2
  212. package/skills/git/fix-issue/SKILL.md +3 -3
  213. package/skills/git/resolve-merge-conflicts/SKILL.md +2 -2
  214. package/skills/git/ship/SKILL.md +2 -2
  215. package/skills/git/worktree-create/SKILL.md +2 -2
  216. package/skills/git/worktree-merge/SKILL.md +2 -2
  217. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  218. package/skills/meta/clio-coder-dev/evals.md +3 -2
  219. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  220. package/skills/meta/clio-coder-test/evals.md +9 -4
  221. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  222. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  223. package/skills/meta/credentials/SKILL.md +2 -2
  224. package/skills/meta/find-skills/SKILL.md +2 -2
  225. package/skills/meta/herdr/SKILL.md +2 -2
  226. package/skills/meta/skill-craft/SKILL.md +22 -16
  227. package/skills/planning/architecture/SKILL.md +2 -2
  228. package/skills/planning/backlog/SKILL.md +2 -2
  229. package/skills/planning/prd/SKILL.md +2 -2
  230. package/skills/planning/product-intent/SKILL.md +2 -2
  231. package/skills/planning/tech-spec/SKILL.md +2 -2
  232. package/skills/registry.yaml +62 -62
  233. package/skills/research/arxiv-literature/SKILL.md +2 -2
  234. package/skills/research/experiment-protocol/SKILL.md +2 -2
  235. package/skills/research/scientific-debugging/SKILL.md +2 -2
  236. package/skills/research/scientific-modernization/SKILL.md +2 -2
  237. package/skills/skill-marketplace.json +62 -62
  238. package/skills/workflow/cut-it/SKILL.md +2 -2
  239. package/skills/workflow/design-council/SKILL.md +2 -2
  240. package/skills/workflow/grill-me/SKILL.md +2 -2
  241. package/skills/workflow/workflow-distiller/SKILL.md +2 -2
  242. package/src/cli/args.ts +2 -2
  243. package/src/cli/bootstrap-generate.ts +1 -1
  244. package/src/cli/config-inspect.ts +65 -12
  245. package/src/cli/configure.ts +0 -4
  246. package/src/cli/docs.ts +22 -14
  247. package/src/cli/doctor-naming.ts +5 -5
  248. package/src/cli/doctor-toolchain.ts +3 -3
  249. package/src/cli/eval.ts +1 -2
  250. package/src/cli/extensions.ts +2 -1
  251. package/src/cli/fleet.ts +1 -1
  252. package/src/cli/index.ts +2 -1
  253. package/src/cli/internal-dispatch.ts +3 -4
  254. package/src/cli/panes.ts +19 -5
  255. package/src/cli/run.ts +2 -2
  256. package/src/cli/share.ts +5 -1
  257. package/src/cli/skills-eval.ts +3 -3
  258. package/src/cli/targets.ts +2 -6
  259. package/src/cli/trace.ts +55 -4
  260. package/src/cli/wiki-generate.ts +1 -1
  261. package/src/core/artifact-paths.ts +1 -1
  262. package/src/core/bash-exec.ts +131 -86
  263. package/src/core/bus-events.ts +51 -6
  264. package/src/core/config.ts +5 -1
  265. package/src/core/defaults.ts +7 -4
  266. package/src/core/dispatch-outcome.ts +16 -0
  267. package/src/core/guardrails.ts +10 -49
  268. package/src/core/prompt-hint.ts +9 -0
  269. package/src/domains/agents/builtins/architect.md +2 -3
  270. package/src/domains/agents/builtins/coder.md +3 -2
  271. package/src/domains/agents/builtins/debugger.md +2 -2
  272. package/src/domains/agents/builtins/documenter.md +2 -2
  273. package/src/domains/agents/builtins/git-master.md +1 -1
  274. package/src/domains/agents/builtins/oracle.md +1 -1
  275. package/src/domains/agents/builtins/provenance.md +1 -1
  276. package/src/domains/agents/builtins/researcher.md +1 -1
  277. package/src/domains/agents/builtins/scout.md +1 -1
  278. package/src/domains/agents/builtins/tester.md +2 -2
  279. package/src/domains/agents/builtins/verifier.md +2 -2
  280. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  281. package/src/domains/agents/catalog.ts +12 -14
  282. package/src/domains/agents/contract.ts +2 -0
  283. package/src/domains/agents/extension.ts +23 -1
  284. package/src/domains/config/keybindings.ts +8 -0
  285. package/src/domains/context/extension.ts +0 -3
  286. package/src/domains/context/working-set/path-index.ts +1 -0
  287. package/src/domains/dispatch/capability-match.ts +10 -0
  288. package/src/domains/dispatch/extension.ts +105 -22
  289. package/src/domains/dispatch/host-verification.ts +435 -39
  290. package/src/domains/dispatch/intent-requirements.ts +10 -0
  291. package/src/domains/dispatch/intent.ts +18 -1
  292. package/src/domains/dispatch/path-scope.ts +235 -24
  293. package/src/domains/dispatch/run-event-journal.ts +4 -15
  294. package/src/domains/dispatch/state.ts +2 -3
  295. package/src/domains/dispatch/transport.ts +45 -21
  296. package/src/domains/dispatch/types.ts +55 -3
  297. package/src/domains/eval/artifacts/store.ts +5 -0
  298. package/src/domains/eval/store.ts +8 -1
  299. package/src/domains/evidence/trust-status.ts +10 -1
  300. package/src/domains/extensions/contract.ts +15 -1
  301. package/src/domains/extensions/discovery.ts +238 -41
  302. package/src/domains/extensions/extension.ts +105 -6
  303. package/src/domains/extensions/index.ts +24 -0
  304. package/src/domains/extensions/integrity.ts +189 -0
  305. package/src/domains/extensions/manager.ts +17 -1
  306. package/src/domains/extensions/resource-path.ts +27 -0
  307. package/src/domains/extensions/resources.ts +18 -38
  308. package/src/domains/extensions/snapshot-store.ts +39 -0
  309. package/src/domains/extensions/snapshot.ts +180 -0
  310. package/src/domains/extensions/state.ts +385 -57
  311. package/src/domains/extensions/types.ts +118 -1
  312. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  313. package/src/domains/lifecycle/migrations/index.ts +2 -0
  314. package/src/domains/lifecycle/naming-resources.ts +19 -4
  315. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  316. package/src/domains/middleware/contract.ts +26 -0
  317. package/src/domains/middleware/extension.ts +24 -24
  318. package/src/domains/middleware/hook-receipts.ts +27 -4
  319. package/src/domains/middleware/hooks-io.ts +65 -32
  320. package/src/domains/middleware/hooks.ts +64 -0
  321. package/src/domains/middleware/index.ts +28 -4
  322. package/src/domains/middleware/registrations.ts +326 -0
  323. package/src/domains/middleware/runtime.ts +28 -0
  324. package/src/domains/middleware/snapshot.ts +20 -7
  325. package/src/domains/mux/contract.ts +38 -0
  326. package/src/domains/mux/detect.ts +6 -13
  327. package/src/domains/mux/index.ts +1 -1
  328. package/src/domains/mux/operations.ts +44 -5
  329. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  330. package/src/domains/mux/yazi/session.ts +53 -4
  331. package/src/domains/mux/yazi/theme.ts +117 -17
  332. package/src/domains/observability/contract.ts +10 -11
  333. package/src/domains/observability/extension.ts +11 -3
  334. package/src/domains/observability/projection.ts +14 -90
  335. package/src/domains/observability/trace-store.ts +43 -7
  336. package/src/domains/prompts/compiler.ts +73 -53
  337. package/src/domains/prompts/contract.ts +15 -3
  338. package/src/domains/prompts/extension.ts +97 -9
  339. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  340. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  341. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  342. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  343. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  344. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  345. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  346. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  347. package/src/domains/providers/index.ts +1 -1
  348. package/src/domains/providers/model-runtime-capabilities.ts +85 -21
  349. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +669 -104
  350. package/src/domains/providers/runtime-resolution.ts +31 -0
  351. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  352. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  353. package/src/domains/providers/types/cost-provenance.ts +19 -0
  354. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  355. package/src/domains/resources/skills/loader.ts +16 -19
  356. package/src/domains/safety/call-target.ts +1 -1
  357. package/src/domains/safety/loop-detector.ts +7 -4
  358. package/src/domains/session/task-board.ts +10 -9
  359. package/src/domains/share/archive.ts +164 -7
  360. package/src/engine/acp/server.ts +62 -9
  361. package/src/engine/apis/llamacpp-residency.ts +3 -4
  362. package/src/engine/apis/lmstudio.ts +3 -3
  363. package/src/engine/apis/ollama-native.ts +6 -6
  364. package/src/engine/apis/openai-completions.ts +28 -25
  365. package/src/engine/apis/output-budget.ts +8 -18
  366. package/src/engine/apis/residency.ts +8 -27
  367. package/src/engine/gemma-channel-filter.ts +19 -0
  368. package/src/engine/loop-guard.ts +92 -12
  369. package/src/engine/worker-runtime.ts +40 -11
  370. package/src/engine/worker-tools.ts +3 -1
  371. package/src/entry/extension-hook-sources.ts +28 -0
  372. package/src/entry/extension-reload.ts +309 -0
  373. package/src/entry/orchestrator.ts +59 -35
  374. package/src/interactive/application-controller.ts +2 -1
  375. package/src/interactive/bus-notices.ts +8 -1
  376. package/src/interactive/chat-loop-messages.ts +3 -13
  377. package/src/interactive/chat-loop.ts +10 -1
  378. package/src/interactive/chat-panel.ts +36 -13
  379. package/src/interactive/chat-renderer.ts +71 -7
  380. package/src/interactive/dispatch-board.ts +6 -11
  381. package/src/interactive/footer/widgets.ts +13 -0
  382. package/src/interactive/interactive-application.ts +39 -4
  383. package/src/interactive/interactive-input-runtime.ts +4 -0
  384. package/src/interactive/interactive-presentation.ts +2 -2
  385. package/src/interactive/interactive-slash-runtime.ts +2 -0
  386. package/src/interactive/overlays/extensions.ts +9 -1
  387. package/src/interactive/overlays/help-reference.ts +13 -0
  388. package/src/interactive/overlays/settings.ts +27 -16
  389. package/src/interactive/panes-runtime.ts +111 -35
  390. package/src/interactive/prompt-cache-identity.ts +88 -0
  391. package/src/interactive/slash-commands.ts +129 -14
  392. package/src/interactive/stream-pacing-policy.ts +0 -23
  393. package/src/interactive/turn-context.ts +30 -15
  394. package/src/interactive/yazi-bridge.ts +60 -6
  395. package/src/tools/agent-tools.ts +30 -1
  396. package/src/tools/artifact.ts +2 -2
  397. package/src/tools/ask-user.ts +3 -3
  398. package/src/tools/bash.ts +1 -1
  399. package/src/tools/bootstrap.ts +4 -0
  400. package/src/tools/builtin-tool-catalog.ts +52 -22
  401. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  402. package/src/tools/codewiki/code-nav.ts +99 -13
  403. package/src/tools/context/docs-engine.ts +20 -7
  404. package/src/tools/context/index.ts +29 -12
  405. package/src/tools/core-bootstrap.ts +28 -6
  406. package/src/tools/credential-present.ts +1 -2
  407. package/src/tools/dispatch-arguments.ts +5 -1
  408. package/src/tools/dispatch-plan.ts +48 -4
  409. package/src/tools/dispatch-run-events.ts +1 -1
  410. package/src/tools/dispatch-schema.ts +338 -0
  411. package/src/tools/dispatch-types.ts +3 -0
  412. package/src/tools/dispatch.ts +9 -254
  413. package/src/tools/ledger.ts +3 -5
  414. package/src/tools/monitor-surface.ts +5 -13
  415. package/src/tools/observation.ts +4 -5
  416. package/src/tools/panes-surface.ts +4 -11
  417. package/src/tools/panes.ts +4 -2
  418. package/src/tools/policy.ts +15 -2
  419. package/src/tools/read.ts +5 -6
  420. package/src/tools/registry.ts +30 -7
  421. package/src/tools/result-shaping.ts +18 -14
  422. package/src/tools/steer-surface.ts +1 -1
  423. package/src/tools/tasks.ts +1 -1
  424. package/src/tools/truncate.ts +6 -5
  425. package/src/tools/verify/surface.ts +6 -12
  426. package/src/tools/web-fetch-surface.ts +1 -3
  427. package/dist/chunk-5QIAJV2D.js +0 -48
  428. package/dist/chunk-JZWT5J3Y.js +0 -814
  429. package/dist/chunk-K7VKOLQQ.js +0 -15
  430. package/dist/chunk-PMZCIOCJ.js +0 -25
  431. package/dist/chunk-SUW5DORT.js +0 -819
  432. package/dist/chunk-UOV2BYIW.js +0 -107
  433. package/dist/chunk-WR6U3OVP.js +0 -45
  434. package/docs/artifact-versions.md +0 -67
  435. package/docs/documentation-coverage.md +0 -46
  436. package/docs/documentation-guide.md +0 -167
  437. package/docs/time-conventions.md +0 -101
@@ -1,27 +1,19 @@
1
1
  ---
2
2
  id: operating.contract
3
3
  version: 1
4
- budgetTokens: 400
5
4
  description: Constitutional operating posture shared by every Clio prompt
6
5
  ---
7
6
 
8
7
  # Operating Contract
9
8
 
10
- Clio has one operating posture. There is no read-only posture or
11
- user-facing posture toggle.
9
+ Use tools when they materially help the task. Prefer a structured tool
10
+ over bash when one exists; for narrow file or symbol work, inspect
11
+ directly with the observe tools.
12
12
 
13
- Use the available tools when they materially help the current task.
14
- Prefer structured tools over bash when a structured tool exists. For
15
- narrow file or symbol work, inspect directly with structured observe
16
- tools. When a final report is requested but file
17
- modification is forbidden, put the report in the final assistant response;
18
- do not create a report artifact.
19
-
20
- Safety policy is authoritative for every tool call: allow decisions
21
- run normally; hard blocks (destructive git,
22
- protected artifacts, project or path policy violations) remain hard
23
- blocks. When a call is blocked or cancelled, pivot to a safer
24
- approach or explain the blocker. Do not retry the same blocked
13
+ Safety policy is authoritative for every tool call. Hard blocks
14
+ (destructive git, protected artifacts, project or path policy
15
+ violations) stay blocked: when a call is blocked or cancelled, pivot to
16
+ a safer approach or explain the blocker, and never retry the blocked
25
17
  action through another tool. After a loop guard blocks a repeated call,
26
18
  do not retry it or a syntactic variant: synthesize, delegate narrowly,
27
19
  use another source, or mark the claim unverified.
@@ -1,42 +1,40 @@
1
1
  ---
2
2
  id: operating.delegation
3
3
  version: 1
4
- budgetTokens: 620
5
4
  description: Coordinator delegation and receipt discipline; rendered only when dispatch is on the surface
6
5
  ---
7
6
 
8
7
  # Delegation
9
8
 
10
- You coordinate a fleet of Clio agents through the dispatch tool. You
11
- plan, route, and synthesize work across turns.
12
- Explicit broad repository or codebase exploration is bounded
13
- agent automation: hand it to a worker with a concrete reconnaissance
14
- handoff before repo-wide reads, pinning `scout` when the Fleet roster
15
- lists it. Use dispatch for other bounded fleet work with a clear
16
- handoff. A sealed run
17
- receipt is the durable record for delegated work. Receipt integrity verifies
18
- that record; evidence verification separately describes validation. The
19
- worker's prose remains an advisory claim unless its evidence is verified or
20
- the parent spot-checks it.
21
- A successful reconnaissance receipt is an index. Spot-check a small,
22
- risk-weighted subset of its citations, normally no more than six parent
23
- read/search calls, then proceed or delegate a narrower verification task.
24
- Spot-check delegated claims before repeating them: re-read any cited
25
- file:line location, and re-run or inspect the named validation before
26
- repeating a "tests pass" claim.
27
- Parent spot-checking is not independent specialist confirmation. Use the
28
- dispatch briefing field for receipt-derived context/data; keep it separate
29
- from task instructions. Collect detached runs before final synthesis.
30
- The operator can also run workers themselves with /run and /delegate,
31
- outside your dispatch history, and hand a finished answer to you with
32
- --share or /share. Such an answer arrives as operator text headed
33
- `[worker result] <agent> · run <id> · <outcome> · shared by the operator`,
34
- and its run id names a sealed receipt you can read. Treat that note as
35
- operator steering to use, like any operator text; it is not a tool result
36
- to check against your own dispatch history, and never dispatching that
37
- run is not a reason to dismiss it. Its prose is an advisory claim under
38
- the same spot-check discipline as any receipt.
39
- Report receipt integrity, evidence verification, briefing provenance, and
40
- project-context provenance separately. Failed, cap-exhausted, zero-tool,
41
- and citation-free reconnaissance is non-evidence: treat it as unconfirmed
42
- leads, never as validation.
9
+ You coordinate Clio workers through the dispatch tool. Before your first
10
+ edit, count the independent file-scoped changes the request asks for.
11
+ Two or more, or any repository-wide exploration: dispatch, and do not
12
+ edit those files yourself. One narrow change: do it yourself.
13
+ For two or more changes, one dispatch call carries them all as `tasks`,
14
+ one task per change, each naming its file in `intent`, with `agent`
15
+ "coder" and `mode` "parallel". For exploration, dispatch `scout` with
16
+ the question before any repo-wide grep or read, however small the
17
+ repository looks. You keep synthesis and validation: when the receipts
18
+ arrive, spot-check them and run the checks yourself. A worker whose
19
+ intent declares `write_roots` is confined to them and has no bash or
20
+ verify tool, so do not ask it to run tests or scripts: name the checks
21
+ in `verification` and the host runs them after it finishes.
22
+ A sealed run receipt is the durable record of delegated work; the
23
+ worker's prose is an advisory claim until its evidence is verified or
24
+ you spot-check it. Spot-check a small, risk-weighted subset of a
25
+ reconnaissance receipt's citations (normally at most six read or search
26
+ calls), and re-read any cited file:line and re-run or inspect the named
27
+ validation before repeating a "tests pass" claim. Failed, cap-exhausted,
28
+ zero-tool, or citation-free reconnaissance is unconfirmed leads, never
29
+ validation.
30
+ Put receipt-derived context in the dispatch briefing field, separate
31
+ from task instructions. Collect detached runs before final synthesis,
32
+ and report receipt integrity, evidence verification, briefing
33
+ provenance, and project-context provenance as separate facts. Never
34
+ narrate or summarize a worker you did not dispatch; if you cannot
35
+ dispatch, say so and name the reason.
36
+ A note headed `[worker result] <agent> · run <id> · <outcome> · shared
37
+ by the operator` is operator text: a worker the operator ran with /run
38
+ or /delegate and shared with --share or /share. Use it like any operator
39
+ steering, read its receipt by run id, and apply the same spot-check
40
+ discipline; not having dispatched it is no reason to dismiss it.
@@ -1,33 +1,19 @@
1
1
  ---
2
2
  id: operating.skills
3
3
  version: 1
4
- budgetTokens: 340
5
4
  description: Coordinator skill suggestion discipline; rendered only when context is on the surface
6
5
  ---
7
6
 
8
7
  # Skills
9
8
 
10
- Skills package proven workflows. Some are installed; the rest sit in a
11
- marketplace the operator installs from, and context (scope="skills") is
12
- the one authoritative listing of both — never guess the inventory or
13
- search the repository for a skill file. The catalog spans git delivery
14
- (filing, fixing, and shipping issues), planning (intent, PRD, backlog,
15
- architecture, sprint slicing), coding practice (TDD, standards,
16
- prototyping), context priming and handoff, research workflows, and
17
- plan-stress-testing debates. When a task lands in one of those shapes,
18
- call context (scope="skills") first and match it against the catalog.
19
- Suggest the best match to the operator as /skill <name> — the sequence
20
- in order when skills compose — and let the operator decide before
21
- grinding through that workflow bare; a marketplace match is suggested
22
- the same way, and /skill <name> offers the install. When the operator
23
- names a skill or asks how one works, answer from that same listing.
24
- When a [Marketplace] reminder names an uninstalled skill for the
25
- current request, first check the installed side with context
26
- (scope="skills"); only if nothing installed serves and the named skill
27
- truly fits, put the install question to the operator with ask_user
28
- using exactly the four options the reminder states, then continue the
29
- task in the same turn. The harness performs any consented install;
30
- never install a skill yourself, and never offer one no reminder named.
31
- Only an explicit operator request activates a skill; never load one on
32
- your own. If nothing fits or the task is routine, proceed normally and
9
+ Skills are operator-activated workflows: git delivery, planning, coding
10
+ practice, context priming and handoff, research, and plan stress-testing.
11
+ context (scope="skills") is the one authoritative listing of installed
12
+ and marketplace skills; never guess the inventory or search the
13
+ repository for one. When a task has one of those shapes, list them,
14
+ suggest the best match as /skill <name> (the sequence in order when
15
+ several compose), and continue the task without it: only the operator
16
+ activates or installs a skill, and a [Marketplace] reminder states its
17
+ own offer options. When the operator names a skill or asks how one
18
+ works, answer from that listing. If nothing fits, proceed normally and
33
19
  suggest nothing.
@@ -1,16 +1,9 @@
1
1
  ---
2
2
  id: operating.worker
3
3
  version: 1
4
- budgetTokens: 120
5
4
  description: Assigned-task contract for a bounded fleet worker
6
5
  ---
7
6
 
8
7
  # Assigned Task Contract
9
8
 
10
- The assigned task is authoritative. Role guidance is a persona, not a replacement task.
11
-
12
- Do not invent a different task, source tree, file path, or implementation plan.
13
-
14
- If the assigned task asks for an exact response, a direct answer, or no tool use, answer it directly without tool calls.
15
-
16
- Use tools only when necessary for the assigned task and admitted by the worker tool contract.
9
+ The assigned task is authoritative; role guidance is a persona, not a replacement. Do not invent a different task, source tree, file path, or implementation plan.
@@ -161,7 +161,7 @@ export {
161
161
  VALID_THINKING_LEVELS,
162
162
  } from "./types/capability-flags.js";
163
163
  export { type ContextWindowSlots, formatContextWindowSlots } from "./types/context-window-slots.js";
164
- export { type CostProvenance, normalizeCostProvenance } from "./types/cost-provenance.js";
164
+ export { type CostProvenance, normalizeCostProvenance, resolveCostProvenance } from "./types/cost-provenance.js";
165
165
  export type { KnowledgeBase, KnowledgeBaseEntry, KnowledgeBaseHit } from "./types/knowledge-base.js";
166
166
  export type {
167
167
  ProbeContext,
@@ -36,7 +36,7 @@ export interface AppliedThinking {
36
36
  mechanism: ThinkingMechanism;
37
37
  effort?: string;
38
38
  budgetTokens?: number;
39
- chatTemplateKwargs?: Record<string, boolean>;
39
+ chatTemplateKwargs?: Record<string, boolean | string | number>;
40
40
  noticeKind: AppliedThinkingNoticeKind;
41
41
  notice: string;
42
42
  }
@@ -53,7 +53,20 @@ export interface ResolvedRequestCapability {
53
53
  reasoningEffort?: string;
54
54
  budgetTokens?: number;
55
55
  budgetEnforcement: ThinkingBudgetEnforcement;
56
- chatTemplateKwargs?: Record<string, boolean | string>;
56
+ chatTemplateKwargs?: Record<string, boolean | string | number>;
57
+ /**
58
+ * Family-declared chat-template kwargs the runtime cannot carry. LM Studio
59
+ * ignores `chat_template_kwargs` for every family measured, so the keys are
60
+ * named here for the resolution diagnostics instead of riding in
61
+ * `chatTemplateKwargs` only to be deleted at the wire.
62
+ */
63
+ undeliverableChatTemplateKwargs?: UndeliverableChatTemplateKwargs;
64
+ }
65
+
66
+ export interface UndeliverableChatTemplateKwargs {
67
+ keys: string[];
68
+ /** True when the family entry itself marks the block `lmstudio: unsupported`. */
69
+ declaredUnsupported: boolean;
57
70
  }
58
71
 
59
72
  export interface ResolvedResponseCapability {
@@ -335,14 +348,15 @@ function supportedEffortLevels(
335
348
  ): ReadonlyArray<ThinkingLevel> {
336
349
  if (harmony) return HARMONY_LEVELS;
337
350
  const efforts = quirks?.thinking?.effortByLevel;
338
- if (!efforts) return baseLevels;
351
+ const byLevelValues = (quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs)?.byLevel?.values;
352
+ if (!efforts && !byLevelValues) return baseLevels;
339
353
  const out: ThinkingLevel[] = [];
340
354
  if (baseLevels.includes("off")) out.push("off");
341
- if (efforts.minimal !== undefined) out.push("minimal");
342
- if (efforts.low !== undefined) out.push("low");
343
- if (efforts.medium !== undefined) out.push("medium");
344
- if (efforts.high !== undefined) out.push("high");
345
- if (efforts.xhigh !== undefined) out.push("xhigh");
355
+ if (efforts?.minimal !== undefined || byLevelValues?.minimal !== undefined) out.push("minimal");
356
+ if (efforts?.low !== undefined || byLevelValues?.low !== undefined) out.push("low");
357
+ if (efforts?.medium !== undefined || byLevelValues?.medium !== undefined) out.push("medium");
358
+ if (efforts?.high !== undefined || byLevelValues?.high !== undefined) out.push("high");
359
+ if (efforts?.xhigh !== undefined || byLevelValues?.xhigh !== undefined) out.push("xhigh");
346
360
  return out.length > 0 ? out : baseLevels;
347
361
  }
348
362
 
@@ -525,27 +539,71 @@ function resolveThinkingCapability(
525
539
  }
526
540
 
527
541
  /**
528
- * Runtimes whose OpenAI-compatible surface reads the on-off thinking control
529
- * from `reasoning_effort` rather than `chat_template_kwargs.enable_thinking`.
530
- * Measured against the live fleet on 2026-08-11 with
531
- * `nvidia-nemotron-3.5-lightning-30b-a3b`: LM Studio suppressed reasoning
532
- * entirely for `reasoning_effort: "none"` and ignored `enable_thinking: false`,
533
- * while llama.cpp did the reverse. Sending the wrong spelling reads as "no
534
- * preference" to the server, so the model keeps reasoning at every dial.
542
+ * Runtimes whose OpenAI-compatible surface ignores `chat_template_kwargs`
543
+ * and reads every thinking control from `reasoning_effort`. Measured against
544
+ * dynamo (LM Studio) on 2026-08-11 with `nvidia-nemotron-3.5-lightning-30b-a3b`
545
+ * and again on 2026-09-02 across three mechanisms: `enable_thinking: false`
546
+ * left 26 reasoning tokens on qwen3.8-27b (effort-levels), 52 on
547
+ * gemma-4-26b-a4b-it (on-off) and 105 on nemotron-3.5-lightning (on-off),
548
+ * while `reasoning_effort: "none"` produced 0 on each; llama.cpp does the
549
+ * reverse. Sending the wrong spelling reads as "no preference" to the
550
+ * server, so the model keeps reasoning at every dial. The same runtime drops
551
+ * a family's own kwargs (#267) for the same reason, so those are reported as
552
+ * undeliverable rather than merged into the request (#268).
535
553
  */
536
- const REASONING_EFFORT_ON_OFF_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
554
+ const REASONING_EFFORT_ONLY_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
537
555
 
538
556
  /** `none` is LM Studio's documented off value; on-off models have no finer dial than `low`. */
539
557
  function onOffReasoningEffort(thinkingActive: boolean): string {
540
558
  return thinkingActive ? "low" : "none";
541
559
  }
542
560
 
561
+ function resolveFamilyChatTemplateKwargs(
562
+ quirks: LocalModelQuirks | undefined,
563
+ effectiveLevel: ThinkingLevel,
564
+ configuredLevel: ThinkingLevel,
565
+ ): Record<string, boolean | string | number> | undefined {
566
+ const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
567
+ if (!block) return undefined;
568
+ const out: Record<string, boolean | string | number> = {};
569
+ if (block.static) {
570
+ for (const [k, v] of Object.entries(block.static)) {
571
+ out[k] = v;
572
+ }
573
+ }
574
+ if (block.byLevel) {
575
+ const byLevel = block.byLevel;
576
+ const val = byLevel.values[effectiveLevel] ?? byLevel.values[configuredLevel];
577
+ if (val !== undefined) {
578
+ out[byLevel.key] = val;
579
+ }
580
+ }
581
+ return Object.keys(out).length > 0 ? out : undefined;
582
+ }
583
+
584
+ function familyKwargsDeclaredUnsupported(quirks: LocalModelQuirks | undefined, runtimeId: string): boolean {
585
+ if (runtimeId !== "lmstudio") return false;
586
+ const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
587
+ return block?.lmstudio === "unsupported" || block?.byLevel?.lmstudio === "unsupported";
588
+ }
589
+
543
590
  function resolveRequestCapability(
544
591
  thinking: ResolvedThinkingCapability,
545
592
  parser: ResponseParserKind,
546
593
  runtimeId: string,
594
+ quirks?: LocalModelQuirks,
547
595
  ): ResolvedRequestCapability {
548
596
  const request: ResolvedRequestCapability = { budgetEnforcement: thinking.budgetEnforcement };
597
+ const effortOnly = REASONING_EFFORT_ONLY_RUNTIMES.has(runtimeId);
598
+ const familyKwargs = resolveFamilyChatTemplateKwargs(quirks, thinking.effectiveLevel, thinking.configuredLevel);
599
+ if (familyKwargs && effortOnly) {
600
+ request.undeliverableChatTemplateKwargs = {
601
+ keys: Object.keys(familyKwargs),
602
+ declaredUnsupported: familyKwargsDeclaredUnsupported(quirks, runtimeId),
603
+ };
604
+ } else if (familyKwargs) {
605
+ request.chatTemplateKwargs = { ...familyKwargs };
606
+ }
549
607
  if (thinking.mechanism === "effort-levels" && thinking.effort) {
550
608
  request.reasoningEffort = thinking.effort;
551
609
  }
@@ -556,15 +614,21 @@ function resolveRequestCapability(
556
614
  request.budgetTokens = thinking.budgetTokens;
557
615
  }
558
616
  if (thinking.mechanism === "on-off" && thinking.chatTemplateKwargs) {
559
- request.chatTemplateKwargs = { ...thinking.chatTemplateKwargs };
560
- if (REASONING_EFFORT_ON_OFF_RUNTIMES.has(runtimeId)) {
561
- request.reasoningEffort = onOffReasoningEffort(thinking.thinkingActive);
562
- }
617
+ request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), ...thinking.chatTemplateKwargs };
563
618
  }
564
619
  if (parser === "harmony" && thinking.effort) {
565
620
  request.reasoningEffort = thinking.effort;
566
621
  request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), reasoning_effort: thinking.effort };
567
622
  }
623
+ // Every mechanism that means "off" has to reach an effort-only runtime as
624
+ // reasoning_effort "none": the template flag above is what llama.cpp reads
625
+ // and what LM Studio drops. An interactive session with thinking "off" had
626
+ // spent 37k reasoning tokens before the effort-levels case reached the
627
+ // wire, and on-off and budget-tokens families reasoned on the same way.
628
+ if (effortOnly && thinking.mechanism !== "none" && thinking.mechanism !== "always-on") {
629
+ if (!thinking.thinkingActive) request.reasoningEffort = onOffReasoningEffort(false);
630
+ else if (thinking.mechanism === "on-off") request.reasoningEffort = onOffReasoningEffort(true);
631
+ }
568
632
  return request;
569
633
  }
570
634
 
@@ -583,7 +647,7 @@ export function resolveModelRuntimeCapabilities(
583
647
  family,
584
648
  capabilities: input.capabilities,
585
649
  thinking,
586
- request: resolveRequestCapability(thinking, parser, input.runtimeId),
650
+ request: resolveRequestCapability(thinking, parser, input.runtimeId, quirks),
587
651
  response: {
588
652
  parser,
589
653
  stripTokenizerSentinels: true,