@iowarp/clio-coder 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/chunk-2VTFPG5O.js +48 -0
  12. package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4KLWL3UC.js +18 -0
  16. package/dist/chunk-4VP4KH3K.js +962 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  21. package/dist/chunk-65DEGPJ6.js +52 -0
  22. package/dist/chunk-6EJMN2Y3.js +17 -0
  23. package/dist/chunk-6EJV5X2W.js +16405 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6XLNIQDB.js +27 -0
  26. package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
  29. package/dist/chunk-7MNJORFF.js +22 -0
  30. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  31. package/dist/chunk-AGYYIBLL.js +1069 -0
  32. package/dist/chunk-AO4RKG4M.js +277 -0
  33. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  34. package/dist/chunk-ARBGF5F7.js +174 -0
  35. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  36. package/dist/chunk-CBCAPZAA.js +229 -0
  37. package/dist/chunk-CMZWFGD2.js +352 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
  42. package/dist/chunk-FCSXB6T2.js +338 -0
  43. package/dist/chunk-FJ3H4MN5.js +48 -0
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G2DE3C7R.js +644 -0
  46. package/dist/chunk-G4BMMOKF.js +182 -0
  47. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  48. package/dist/chunk-HC4CLZ2Y.js +68 -0
  49. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  50. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  51. package/dist/chunk-I4HZDVNP.js +73 -0
  52. package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
  53. package/dist/chunk-IKCO5N3L.js +162 -0
  54. package/dist/chunk-IR4CFBFN.js +56 -0
  55. package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
  56. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  57. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  58. package/dist/chunk-KJ5LWLOE.js +1077 -0
  59. package/dist/chunk-LBMZMYH2.js +285 -0
  60. package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/chunk-MAW544W2.js +1882 -0
  64. package/dist/chunk-MBS4V7ZP.js +217 -0
  65. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  66. package/dist/chunk-MNA4JGU4.js +255 -0
  67. package/dist/chunk-MQSRRFWA.js +3428 -0
  68. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  69. package/dist/chunk-OAO4GE4M.js +619 -0
  70. package/dist/chunk-OHHN2SO4.js +5135 -0
  71. package/dist/chunk-OKGUZO2U.js +34 -0
  72. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  73. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  74. package/dist/chunk-OQE5J4C6.js +73 -0
  75. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  76. package/dist/chunk-POHLU5DW.js +1186 -0
  77. package/dist/chunk-QKMUKYO7.js +4961 -0
  78. package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
  79. package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
  80. package/dist/chunk-SST6Z5JA.js +80 -0
  81. package/dist/chunk-STBPMHSX.js +2456 -0
  82. package/dist/chunk-T6YILFSB.js +80 -0
  83. package/dist/chunk-TZTZS7QK.js +227 -0
  84. package/dist/chunk-UOV2BYIW.js +107 -0
  85. package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
  86. package/dist/chunk-VAKQQHWR.js +434 -0
  87. package/dist/chunk-VG7TBQIY.js +128 -0
  88. package/dist/chunk-VJWL6YS5.js +244 -0
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-WMSVI4G2.js +2095 -0
  91. package/dist/chunk-WVO7V2QY.js +797 -0
  92. package/dist/chunk-X4RCMKVQ.js +641 -0
  93. package/dist/chunk-X75S7HFS.js +374 -0
  94. package/dist/chunk-XN3L4EYL.js +46 -0
  95. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  96. package/dist/chunk-YHZX5GEU.js +193 -0
  97. package/dist/chunk-YXLYO42X.js +91 -0
  98. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  99. package/dist/chunk-ZI647VB5.js +37 -0
  100. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-4LY5K2AC.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
  108. package/dist/configure-R6A64DHX.js +42 -0
  109. package/dist/context-5VKGUVJJ.js +866 -0
  110. package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
  111. package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
  126. package/dist/monitor-MEQA5C3I.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
  137. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
  143. package/dist/verify-G6V4D2G7.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +362 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +42 -6
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +173 -47
  444. package/src/interactive/chat-renderer.ts +262 -72
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +228 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +20 -2
  456. package/src/interactive/footer-panel.ts +2 -2
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +201 -17
  459. package/src/interactive/interactive-event-projection.ts +6 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +176 -114
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/decisions.ts +300 -0
  474. package/src/interactive/overlays/help-reference.ts +15 -10
  475. package/src/interactive/overlays/model-selector.ts +34 -16
  476. package/src/interactive/overlays/session-selector.ts +18 -0
  477. package/src/interactive/overlays/settings.ts +105 -17
  478. package/src/interactive/overlays/skills-hub.ts +4 -4
  479. package/src/interactive/overlays/tree-selector.ts +41 -6
  480. package/src/interactive/render-trace.ts +499 -90
  481. package/src/interactive/renderers/compaction-summary.ts +2 -2
  482. package/src/interactive/renderers/diff.ts +115 -104
  483. package/src/interactive/renderers/mermaid.ts +53 -0
  484. package/src/interactive/renderers/tool-execution.ts +386 -133
  485. package/src/interactive/renderers/worker-entry.ts +20 -4
  486. package/src/interactive/session-switch-settlement.ts +10 -0
  487. package/src/interactive/slash-autocomplete.ts +6 -114
  488. package/src/interactive/slash-commands.ts +135 -47
  489. package/src/interactive/slash-spec.ts +9 -38
  490. package/src/interactive/status/controller.ts +5 -1
  491. package/src/interactive/stdout-backpressure.ts +99 -0
  492. package/src/interactive/stream-pacer.ts +530 -0
  493. package/src/interactive/stream-pacing-policy.ts +66 -0
  494. package/src/interactive/tasks-overlay.ts +368 -14
  495. package/src/interactive/terminal-lease.ts +485 -0
  496. package/src/interactive/theme/tokens.ts +1 -1
  497. package/src/interactive/turn-context.ts +4 -3
  498. package/src/interactive/turn-persistence.ts +30 -13
  499. package/src/interactive/turn-queues.ts +12 -0
  500. package/src/interactive/turn-recovery.ts +25 -8
  501. package/src/interactive/turn-runtime.ts +79 -12
  502. package/src/interactive/turn-state.ts +10 -0
  503. package/src/interactive/view/artifacts.ts +114 -4
  504. package/src/interactive/view/view-overlay.ts +3 -0
  505. package/src/interactive/welcome-dashboard.ts +17 -16
  506. package/src/interactive/worker-receipts.ts +52 -3
  507. package/src/interactive/worker-stream.ts +5 -1
  508. package/src/tools/agent-tools.ts +23 -3
  509. package/src/tools/artifact.ts +2 -2
  510. package/src/tools/ask-user.ts +23 -13
  511. package/src/tools/bash.ts +30 -2
  512. package/src/tools/bootstrap.ts +34 -431
  513. package/src/tools/builtin-tool-catalog.ts +265 -0
  514. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  515. package/src/tools/codewiki/code-nav.ts +8 -22
  516. package/src/tools/codewiki/shared.ts +41 -38
  517. package/src/tools/context/docs-engine.ts +14 -3
  518. package/src/tools/context/index.ts +107 -28
  519. package/src/tools/context/surface.ts +19 -0
  520. package/src/tools/core-bootstrap.ts +168 -0
  521. package/src/tools/credential-present.ts +5 -5
  522. package/src/tools/dispatch-admission.ts +533 -0
  523. package/src/tools/dispatch-background.ts +54 -0
  524. package/src/tools/dispatch-event-text.ts +6 -0
  525. package/src/tools/dispatch-plan.ts +9 -4
  526. package/src/tools/dispatch-run-events.ts +238 -0
  527. package/src/tools/dispatch-runner.ts +2370 -0
  528. package/src/tools/dispatch-scout-admission.ts +295 -0
  529. package/src/tools/dispatch-types.ts +77 -0
  530. package/src/tools/dispatch.ts +67 -3161
  531. package/src/tools/find.ts +4 -2
  532. package/src/tools/grep.ts +2 -2
  533. package/src/tools/lazy-tool.ts +60 -0
  534. package/src/tools/ledger.ts +3 -3
  535. package/src/tools/monitor-surface.ts +36 -0
  536. package/src/tools/monitor.ts +2 -32
  537. package/src/tools/observers.ts +2 -2
  538. package/src/tools/registry.ts +39 -27
  539. package/src/tools/safe-exec.ts +2 -2
  540. package/src/tools/steer-surface.ts +17 -0
  541. package/src/tools/steer.ts +2 -13
  542. package/src/tools/tasks.ts +108 -11
  543. package/src/tools/truncate.ts +25 -184
  544. package/src/tools/verify/frontend.ts +3 -1
  545. package/src/tools/verify/index.ts +3 -38
  546. package/src/tools/verify/surface.ts +46 -0
  547. package/src/tools/web-fetch-surface.ts +23 -0
  548. package/src/tools/web-fetch.ts +2 -20
  549. package/src/tools/write.ts +7 -2
  550. package/src/worker/entry.ts +39 -2
  551. package/src/worker/spec-contract.ts +26 -5
  552. package/dist/chunk-7SS2CTV2.js +0 -61361
  553. package/dist/chunk-DKGKUHFA.js +0 -924
  554. package/dist/chunk-GEP36Y4X.js +0 -12796
  555. package/dist/chunk-XYWBQRDM.js +0 -137
  556. package/dist/clio-BZVGEUFJ.js +0 -58
  557. package/dist/configure-S7S6F6CL.js +0 -32
  558. package/docs/html/agents_blueprint.html +0 -936
  559. package/docs/html/alcf_blueprint.html +0 -324
  560. package/docs/html/architecture_blueprint.html +0 -850
  561. package/docs/html/commands_blueprint.html +0 -939
  562. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  563. package/docs/html/configuration_blueprint.html +0 -1080
  564. package/docs/html/context_blueprint.html +0 -603
  565. package/docs/html/documentation_blueprint.html +0 -832
  566. package/docs/html/environment_blueprint.html +0 -404
  567. package/docs/html/eval_blueprint.html +0 -743
  568. package/docs/html/evals_internal_blueprint.html +0 -190
  569. package/docs/html/evolution_blueprint.html +0 -674
  570. package/docs/html/extensions_blueprint.html +0 -2065
  571. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  572. package/docs/html/index.html +0 -919
  573. package/docs/html/lifecycle_blueprint.html +0 -723
  574. package/docs/html/memory_blueprint.html +0 -699
  575. package/docs/html/middleware_blueprint.html +0 -664
  576. package/docs/html/models_blueprint.html +0 -2366
  577. package/docs/html/observability_blueprint.html +0 -683
  578. package/docs/html/provider_adapter_blueprint.html +0 -245
  579. package/docs/html/safety_blueprint.html +0 -1386
  580. package/docs/html/shared.css +0 -571
  581. package/docs/html/shared.js +0 -143
  582. package/docs/html/skills_blueprint.html +0 -671
  583. package/docs/html/soak_blueprint.html +0 -182
  584. package/docs/html/tool_usage_blueprint.html +0 -350
  585. package/docs/html/tools_blueprint.html +0 -2249
  586. package/docs/html/trace_blueprint.html +0 -235
  587. package/docs/html/tui_design_blueprint.html +0 -374
  588. package/docs/html/validation_blueprint.html +0 -961
  589. package/docs/html/worker_dispatch_blueprint.html +0 -231
  590. package/src/core/release.ts +0 -2
  591. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  592. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  593. package/src/engine/apis/lmstudio-native.ts +0 -1438
  594. package/src/engine/apis/thinking-replay.ts +0 -11
  595. package/src/tools/string-enum.ts +0 -15
@@ -1,6 +1,6 @@
1
1
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
2
-
3
2
  import type { OAuthLoginCallbacks } from "../../../engine/oauth.js";
3
+ import type { AuthOperationOptions } from "../../../engine/types.js";
4
4
  import type { RuntimeAuth, RuntimeDescriptor } from "../types/runtime-descriptor.js";
5
5
  import type { TargetDescriptor } from "../types/target-descriptor.js";
6
6
 
@@ -39,7 +39,10 @@ export interface LockResult<T> {
39
39
 
40
40
  export interface AuthStorageBackend {
41
41
  withLock<T>(fn: (current: string | undefined) => LockResult<T>): T;
42
- withLockAsync<T>(fn: (current: string | undefined) => Promise<LockResult<T>>): Promise<T>;
42
+ withLockAsync<T>(
43
+ fn: (current: string | undefined) => Promise<LockResult<T>>,
44
+ options?: AuthOperationOptions,
45
+ ): Promise<T>;
43
46
  /** Where the store lives, for error text. Absent for non-file backends. */
44
47
  describe?(): string;
45
48
  }
@@ -246,7 +249,12 @@ function serializeStorageData(data: AuthStorageData): string {
246
249
  });
247
250
  }
248
251
 
249
- export function resolveAuthTarget(target: TargetDescriptor, runtime: RuntimeDescriptor): AuthTarget {
252
+ export type RuntimeAuthMetadata = Pick<
253
+ RuntimeDescriptor,
254
+ "id" | "auth" | "tier" | "credentialsEnvVar" | "oauthProviderId"
255
+ >;
256
+
257
+ export function resolveAuthTarget(target: TargetDescriptor, runtime: RuntimeAuthMetadata): AuthTarget {
250
258
  const providerId =
251
259
  target.auth?.oauthProfile?.trim() || target.auth?.apiKeyRef?.trim() || runtime.oauthProviderId || runtime.id;
252
260
  const authTarget: AuthTarget = {
@@ -268,7 +276,7 @@ export function resolveRuntimeAuthTarget(runtime: RuntimeDescriptor): AuthTarget
268
276
  return target;
269
277
  }
270
278
 
271
- export function targetRequiresAuth(target: TargetDescriptor, runtime: RuntimeDescriptor): boolean {
279
+ export function targetRequiresAuth(target: TargetDescriptor, runtime: RuntimeAuthMetadata): boolean {
272
280
  if (runtime.auth === "oauth") return true;
273
281
  if (runtime.auth !== "api-key") return false;
274
282
  if (target.auth?.apiKeyEnvVar || target.auth?.apiKeyRef || target.auth?.oauthProfile) return true;
@@ -371,6 +379,34 @@ export class AuthStorage {
371
379
  delete this.data[providerId];
372
380
  }
373
381
 
382
+ renameProvider(fromProviderId: string, toProviderId: string, options: { keepSource?: boolean } = {}): void {
383
+ this.backend.withLock((current) => {
384
+ const read = readStorageData(current);
385
+ const source = read.data[fromProviderId];
386
+ // A rename with nothing to rename writes nothing, so a file this parser
387
+ // could not fully read is in no danger from it. Refusing on damage before
388
+ // establishing that turned a hand-edited credentials.yaml into a
389
+ // permanent `clio-coder upgrade` failure: the lmstudio-native migration
390
+ // calls this on every upgrade, and it failed even on homes that had never
391
+ // held an lmstudio-native credential.
392
+ if (!source) {
393
+ // Adopt the fresh view only when it is the whole file. A damaged read
394
+ // yields an empty view, and adopting that would report stored
395
+ // credentials as gone.
396
+ if (read.damage === null) this.data = read.data;
397
+ return { result: undefined };
398
+ }
399
+ // Past here the rename rewrites the whole file, so a partially readable
400
+ // one would be serialized back with the unread entries dropped.
401
+ if (read.damage !== null) throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
402
+ if (!read.data[toProviderId]) read.data[toProviderId] = source;
403
+ if (options.keepSource !== true) delete read.data[fromProviderId];
404
+ this.data = read.data;
405
+ this.damage = null;
406
+ return { result: undefined, next: serializeStorageData(read.data) };
407
+ });
408
+ }
409
+
374
410
  listStored(): ReadonlyArray<{ providerId: string; type: AuthCredential["type"]; updatedAt: string }> {
375
411
  return Object.entries(this.data)
376
412
  .map(([providerId, credential]) => ({
@@ -486,41 +522,51 @@ export class AuthStorage {
486
522
 
487
523
  private async refreshOAuthCredentialWithLock(
488
524
  providerId: string,
525
+ signal: AbortSignal,
489
526
  ): Promise<{ apiKey: string; credential: OAuthCredential } | null> {
490
- return this.backend.withLockAsync(async (current) => {
491
- const read = readStorageData(current);
492
- if (read.damage !== null) {
493
- this.damage = read.damage;
494
- throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
495
- }
496
- const currentData = read.data;
497
- this.data = currentData;
498
- this.damage = null;
499
- const stored = currentData[providerId];
500
- if (stored?.type !== "oauth") {
501
- return { result: null };
502
- }
503
- if (Date.now() < stored.expires) {
504
- return { result: { apiKey: await getOAuthApiKey(providerId, stored), credential: stored } };
505
- }
506
- const refreshed = await refreshOAuthCredentials(providerId, stored);
507
- const next: OAuthCredential = {
508
- type: "oauth",
509
- ...refreshed,
510
- updatedAt: nowIso(),
511
- };
512
- const merged: AuthStorageData = { ...currentData, [providerId]: next };
513
- this.data = merged;
514
- return {
515
- result: { apiKey: await getOAuthApiKey(providerId, next), credential: next },
516
- next: serializeStorageData(merged),
517
- };
518
- });
527
+ let latestData: AuthStorageData | undefined;
528
+ const result = await this.backend.withLockAsync(
529
+ async (current) => {
530
+ const read = readStorageData(current);
531
+ if (read.damage !== null) {
532
+ this.damage = read.damage;
533
+ throw new AuthStorageDamagedError(read.damage, this.backend.describe?.());
534
+ }
535
+ const currentData = read.data;
536
+ latestData = currentData;
537
+ const stored = currentData[providerId];
538
+ if (stored?.type !== "oauth") {
539
+ return { result: null };
540
+ }
541
+ if (Date.now() < stored.expires) {
542
+ return { result: { apiKey: await getOAuthApiKey(providerId, stored), credential: stored } };
543
+ }
544
+ const refreshed = await refreshOAuthCredentials(providerId, stored, signal);
545
+ const next: OAuthCredential = {
546
+ type: "oauth",
547
+ ...refreshed,
548
+ updatedAt: nowIso(),
549
+ };
550
+ const merged: AuthStorageData = { ...currentData, [providerId]: next };
551
+ latestData = merged;
552
+ return {
553
+ result: { apiKey: await getOAuthApiKey(providerId, next), credential: next },
554
+ next: serializeStorageData(merged),
555
+ };
556
+ },
557
+ { signal },
558
+ );
559
+ // Adopt the view only after the backend has committed it. Pi 0.84's
560
+ // CredentialStore.modify pattern prevents a cancellation between refresh
561
+ // and persistence from making memory advertise a token disk never received.
562
+ if (latestData) this.data = latestData;
563
+ this.damage = null;
564
+ return result;
519
565
  }
520
566
 
521
567
  async resolveApiKey(
522
568
  providerId: string,
523
- opts?: { targetId?: string; explicitEnvVar?: string; includeFallback?: boolean },
569
+ opts?: { targetId?: string; explicitEnvVar?: string; includeFallback?: boolean; signal?: AbortSignal },
524
570
  ): Promise<AuthResolution> {
525
571
  if (opts?.targetId) {
526
572
  const override = this.runtimeOverrides.get(opts.targetId);
@@ -571,7 +617,10 @@ export class AuthStorage {
571
617
  };
572
618
  }
573
619
  try {
574
- const refreshed = await this.refreshOAuthCredentialWithLock(providerId);
620
+ const refreshed = await this.refreshOAuthCredentialWithLock(
621
+ providerId,
622
+ opts?.signal ?? new AbortController().signal,
623
+ );
575
624
  if (refreshed) {
576
625
  return {
577
626
  providerId,
@@ -582,7 +631,8 @@ export class AuthStorage {
582
631
  apiKey: refreshed.apiKey,
583
632
  };
584
633
  }
585
- } catch {
634
+ } catch (error) {
635
+ if (opts?.signal?.aborted) throw opts.signal.reason ?? error;
586
636
  // A refusal already recorded its reason on this.damage; a refresh that
587
637
  // failed for any other reason is answered by re-reading the store below.
588
638
  this.reload();
@@ -642,9 +692,18 @@ export class AuthStorage {
642
692
  };
643
693
  }
644
694
 
645
- resolveForTarget(target: AuthTarget, opts?: { includeFallback?: boolean }): Promise<AuthResolution> {
646
- const args: { targetId?: string; explicitEnvVar?: string; includeFallback?: boolean } = {};
695
+ resolveForTarget(
696
+ target: AuthTarget,
697
+ opts?: { includeFallback?: boolean; signal?: AbortSignal },
698
+ ): Promise<AuthResolution> {
699
+ const args: {
700
+ targetId?: string;
701
+ explicitEnvVar?: string;
702
+ includeFallback?: boolean;
703
+ signal?: AbortSignal;
704
+ } = {};
647
705
  if (opts?.includeFallback !== undefined) args.includeFallback = opts.includeFallback;
706
+ if (opts?.signal !== undefined) args.signal = opts.signal;
648
707
  if (target.explicitEnvVar) args.explicitEnvVar = target.explicitEnvVar;
649
708
  if (target.targetId) args.targetId = target.targetId;
650
709
  return this.resolveApiKey(target.providerId, args);
@@ -4,10 +4,11 @@ import type { CapabilityFlags } from "./types/capability-flags.js";
4
4
  * Layer capability sources onto a runtime's defaults, weakest first.
5
5
  *
6
6
  * A probe is what the server currently reports; a knowledge-base entry is what
7
- * an operator wrote down about a specific model. The written entry wins, because
8
- * a hand-authored `model-catalog.d` file exists precisely to correct metadata a
9
- * server gets wrong, and losing to the probe would leave no per-model escape
10
- * hatch at all. A target-level override still outranks both.
7
+ * an operator wrote down about a specific model. The written entry wins for
8
+ * descriptive capabilities because a hand-authored `model-catalog.d` file is
9
+ * the per-model escape hatch for incorrect server metadata. Context and output
10
+ * limits are deployment facts, so a live probe overrides the model's maximums.
11
+ * A target-level override still outranks every source.
11
12
  */
12
13
  export function mergeCapabilities(
13
14
  base: CapabilityFlags,
@@ -18,10 +19,17 @@ export function mergeCapabilities(
18
19
  const merged: Record<string, unknown> = { ...base };
19
20
  applyLayer(merged, probe);
20
21
  applyLayer(merged, kb);
22
+ applyDeploymentLimits(merged, probe);
21
23
  applyLayer(merged, userOverride);
22
24
  return merged as unknown as CapabilityFlags;
23
25
  }
24
26
 
27
+ function applyDeploymentLimits(target: Record<string, unknown>, probe: Partial<CapabilityFlags> | null): void {
28
+ if (!probe) return;
29
+ if (probe.contextWindow !== undefined) target.contextWindow = probe.contextWindow;
30
+ if (probe.maxTokens !== undefined) target.maxTokens = probe.maxTokens;
31
+ }
32
+
25
33
  /**
26
34
  * Whether a model may drive an agent role (orchestrator, dispatched worker).
27
35
  *
@@ -1,8 +1,9 @@
1
1
  import type { OAuthLoginCallbacks } from "../../engine/oauth.js";
2
+ import type { AuthOperationOptions } from "../../engine/types.js";
2
3
  import type { AuthCredential, AuthResolution, AuthStatus } from "./auth/index.js";
3
4
  import type { CapabilityFlags } from "./types/capability-flags.js";
4
5
  import type { KnowledgeBase } from "./types/knowledge-base.js";
5
- import type { ProbeModelStatus, RuntimeDescriptor } from "./types/runtime-descriptor.js";
6
+ import type { ProbeModelStatus, ProbeSurfaceMap, RuntimeDescriptor } from "./types/runtime-descriptor.js";
6
7
  import type { TargetDescriptor } from "./types/target-descriptor.js";
7
8
 
8
9
  /**
@@ -54,6 +55,8 @@ export interface TargetStatus {
54
55
  probeModelId?: string | null;
55
56
  /** Diagnostic notes from the last probe (e.g. wire-model mismatch warnings). */
56
57
  probeNotes?: ReadonlyArray<string>;
58
+ /** Inference and management surfaces selected by the last successful probe. */
59
+ probeSurfaces?: Readonly<ProbeSurfaceMap>;
57
60
  /** Ids returned by the last successful probeModels() call. */
58
61
  discoveredModels: ReadonlyArray<string>;
59
62
  /**
@@ -85,8 +88,12 @@ export interface ProvidersContract {
85
88
  /** Live liveness + probeModels sweep. */
86
89
  probeAllLive(): Promise<void>;
87
90
 
88
- /** Probe a single target live. Null when the id is not in settings.targets. */
89
- probeTarget(id: string): Promise<TargetStatus | null>;
91
+ /**
92
+ * Probe a single target live. Null when the id is not in settings.targets.
93
+ * `reasoning: false` skips an inference-based reasoning-capability probe while
94
+ * retaining the target's liveness and model-catalog checks.
95
+ */
96
+ probeTarget(id: string, options?: { reasoning?: boolean }): Promise<TargetStatus | null>;
90
97
 
91
98
  /** Clear in-memory live connection state for a configured target. */
92
99
  disconnectTarget(id: string): TargetStatus | null;
@@ -114,7 +121,11 @@ export interface ProvidersContract {
114
121
  */
115
122
  auth: {
116
123
  statusForTarget(target: TargetDescriptor, runtime: RuntimeDescriptor): AuthStatus;
117
- resolveForTarget(target: TargetDescriptor, runtime: RuntimeDescriptor): Promise<AuthResolution>;
124
+ resolveForTarget(
125
+ target: TargetDescriptor,
126
+ runtime: RuntimeDescriptor,
127
+ options?: AuthOperationOptions,
128
+ ): Promise<AuthResolution>;
118
129
  getStored(providerId: string): AuthCredential | null;
119
130
  listStored(): ReadonlyArray<{ providerId: string; type: AuthCredential["type"]; updatedAt: string }>;
120
131
  setApiKey(providerId: string, key: string): void;
@@ -157,6 +157,7 @@ export interface ProbeMerge {
157
157
  probeModelCapabilities: NonNullable<TargetStatus["probeModelCapabilities"]> | null;
158
158
  probeModelId: NonNullable<TargetStatus["probeModelId"]> | null;
159
159
  probeNotes?: ReadonlyArray<string>;
160
+ probeSurfaces?: NonNullable<TargetStatus["probeSurfaces"]>;
160
161
  }
161
162
 
162
163
  /**
@@ -185,6 +186,7 @@ export function mergeProbeResult(
185
186
  : ((preservePrevious ? previous.probeModelId : null) ?? null);
186
187
  const probeNotes =
187
188
  probe?.notes && probe.notes.length > 0 ? probe.notes : preservePrevious ? previous.probeNotes : undefined;
189
+ const probeSurfaces = probe?.surfaces ?? (preservePrevious ? previous.probeSurfaces : undefined);
188
190
  const discoveredModels = uniqueModels(
189
191
  probe?.models ?? (preservePrevious ? previous.discoveredModels : undefined) ?? desc.knownModels ?? [],
190
192
  );
@@ -198,6 +200,7 @@ export function mergeProbeResult(
198
200
  probeModelId,
199
201
  };
200
202
  if (probeNotes && probeNotes.length > 0) merge.probeNotes = probeNotes;
203
+ if (probeSurfaces && Object.keys(probeSurfaces).length > 0) merge.probeSurfaces = probeSurfaces;
201
204
  return merge;
202
205
  }
203
206
 
@@ -282,6 +285,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
282
285
  discoveredModelStates: previous?.discoveredModelStates ?? null,
283
286
  };
284
287
  if (previous?.probeNotes && previous.probeNotes.length > 0) out.probeNotes = previous.probeNotes;
288
+ if (previous?.probeSurfaces) out.probeSurfaces = previous.probeSurfaces;
285
289
  return out;
286
290
  }
287
291
  const availability = availabilityFor(desc, target, authStatusFor);
@@ -315,10 +319,15 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
315
319
  discoveredModelStates: merge.discoveredModelStates,
316
320
  };
317
321
  if (merge.probeNotes && merge.probeNotes.length > 0) out.probeNotes = merge.probeNotes;
322
+ if (merge.probeSurfaces) out.probeSurfaces = merge.probeSurfaces;
318
323
  return out;
319
324
  }
320
325
 
321
- async function probeTargetInternal(target: TargetDescriptor, live: boolean): Promise<TargetStatus> {
326
+ async function probeTargetInternal(
327
+ target: TargetDescriptor,
328
+ live: boolean,
329
+ options?: { reasoning?: boolean },
330
+ ): Promise<TargetStatus> {
322
331
  const previous = statuses.get(target.id);
323
332
  const desc = registry.get(target.runtime);
324
333
  if (!desc) {
@@ -347,7 +356,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
347
356
  // model discovery is best-effort; keep probe as-is.
348
357
  }
349
358
  }
350
- if (probeResult.ok && typeof desc.probeReasoning === "function") {
359
+ if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
351
360
  const settings = readConfig();
352
361
  const orchestratorTarget = settings.orchestrator.target === target.id ? settings.orchestrator.model : null;
353
362
  const candidateModelId = orchestratorTarget ?? target.defaultModel ?? null;
@@ -460,11 +469,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
460
469
  },
461
470
  probeAll,
462
471
  probeAllLive,
463
- async probeTarget(id) {
472
+ async probeTarget(id, options) {
464
473
  const settings = readConfig();
465
474
  const target = settings.targets.find((ep) => ep.id === id);
466
475
  if (!target) return null;
467
- return probeTargetInternal(target, true);
476
+ return probeTargetInternal(target, true, options);
468
477
  },
469
478
  disconnectTarget(id) {
470
479
  const settings = readConfig();
@@ -492,11 +501,14 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
492
501
  }
493
502
  return authStore.statusForTarget(resolveAuthTarget(target, runtime), { includeFallback: false });
494
503
  },
495
- resolveForTarget(target, runtime) {
504
+ resolveForTarget(target, runtime, options) {
496
505
  if (!targetRequiresAuth(target, runtime)) {
497
506
  return Promise.resolve(authNotRequiredStatus(resolveAuthTarget(target, runtime).providerId));
498
507
  }
499
- return authStore.resolveForTarget(resolveAuthTarget(target, runtime), { includeFallback: false });
508
+ return authStore.resolveForTarget(resolveAuthTarget(target, runtime), {
509
+ includeFallback: false,
510
+ ...(options?.signal ? { signal: options.signal } : {}),
511
+ });
500
512
  },
501
513
  getStored(providerId) {
502
514
  return authStore.get(providerId) ?? null;
@@ -325,7 +325,12 @@ export function effectiveThinkingLevel(
325
325
  const fallback = available[0] ?? "off";
326
326
  if (!configured) return fallback;
327
327
  if (available.includes(configured)) return configured;
328
- if ((configured === "high" || configured === "xhigh") && available.includes("high")) return "high";
328
+ // Catalog effort maps intentionally stop at xhigh; `max` must clamp to that
329
+ // supported ceiling instead of falling through to the generic low fallback.
330
+ if (configured === "max" && available.includes("xhigh")) return "xhigh";
331
+ if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
332
+ return "high";
333
+ }
329
334
  if (configured === "medium" && available.includes("medium")) return "medium";
330
335
  if (configured !== "off" && available.includes("low")) return "low";
331
336
  if (configured === "off" && !available.includes("off") && available.includes("low")) return "low";
@@ -359,7 +364,9 @@ export function thinkingLevelFromChoiceLabel(value: string): ThinkingLevel | nul
359
364
  return null;
360
365
  }
361
366
 
362
- function acceptsBudgetTokensField(input: Pick<ResolveRuntimeCapabilitiesInput, "apiFamily" | "capabilities">): boolean {
367
+ function acceptsBudgetTokensField(
368
+ input: Pick<ResolveRuntimeCapabilitiesInput, "runtimeId" | "apiFamily" | "capabilities">,
369
+ ): boolean {
363
370
  const format = input.capabilities.thinkingFormat;
364
371
  if (format === "anthropic-extended") {
365
372
  return (
@@ -369,12 +376,13 @@ function acceptsBudgetTokensField(input: Pick<ResolveRuntimeCapabilitiesInput, "
369
376
  );
370
377
  }
371
378
  if (input.apiFamily !== "openai-completions") return false;
379
+ if (input.runtimeId === "vllm") return true;
372
380
  return format === "openrouter" || format === "zai";
373
381
  }
374
382
 
375
383
  function resolveBudgetEnforcement(
376
384
  mechanism: ThinkingMechanism,
377
- input: Pick<ResolveRuntimeCapabilitiesInput, "apiFamily" | "capabilities">,
385
+ input: Pick<ResolveRuntimeCapabilitiesInput, "runtimeId" | "apiFamily" | "capabilities">,
378
386
  ): ThinkingBudgetEnforcement {
379
387
  if (mechanism !== "budget-tokens") return "none";
380
388
  return acceptsBudgetTokensField(input) ? "enforced" : "informational";
@@ -483,7 +491,7 @@ function resolveThinkingCapability(
483
491
  * while llama.cpp did the reverse. Sending the wrong spelling reads as "no
484
492
  * preference" to the server, so the model keeps reasoning at every dial.
485
493
  */
486
- const REASONING_EFFORT_ON_OFF_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio-native", "lmstudio"]);
494
+ const REASONING_EFFORT_ON_OFF_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
487
495
 
488
496
  /** `none` is LM Studio's documented off value; on-off models have no finer dial than `low`. */
489
497
  function onOffReasoningEffort(thinkingActive: boolean): string {
@@ -499,6 +507,9 @@ function resolveRequestCapability(
499
507
  if (thinking.mechanism === "effort-levels" && thinking.effort) {
500
508
  request.reasoningEffort = thinking.effort;
501
509
  }
510
+ if (thinking.mechanism === "effort-levels" && !thinking.thinkingActive) {
511
+ request.chatTemplateKwargs = { ...(request.chatTemplateKwargs ?? {}), enable_thinking: false };
512
+ }
502
513
  if (thinking.mechanism === "budget-tokens" && thinking.budgetTokens !== undefined) {
503
514
  request.budgetTokens = thinking.budgetTokens;
504
515
  }