@iowarp/clio-coder 0.3.4 → 0.3.7

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 (376) hide show
  1. package/CHANGELOG.md +65 -2
  2. package/CONTRIBUTING.md +6 -6
  3. package/README.md +16 -5
  4. package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
  5. package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
  8. package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
  9. package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
  10. package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
  11. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  12. package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
  13. package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
  14. package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
  15. package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
  16. package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
  17. package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
  18. package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
  19. package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
  20. package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
  21. package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
  22. package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
  23. package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
  24. package/dist/chunk-DJNLUABN.js +843 -0
  25. package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
  26. package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
  27. package/dist/chunk-DQA7QLMD.js +123 -0
  28. package/dist/chunk-DR52UMZW.js +21 -0
  29. package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
  30. package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
  31. package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
  32. package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
  33. package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
  34. package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
  35. package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
  36. package/dist/chunk-GWS3VEIW.js +195 -0
  37. package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
  38. package/dist/chunk-HWUFFB6L.js +83 -0
  39. package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
  40. package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
  41. package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
  42. package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
  43. package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
  44. package/dist/chunk-KZ2H5X4G.js +1026 -0
  45. package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
  46. package/dist/chunk-LCGCVYZ4.js +57 -0
  47. package/dist/chunk-M4AKACEO.js +382 -0
  48. package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
  49. package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
  50. package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
  51. package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
  52. package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
  53. package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
  54. package/dist/chunk-PD3MESLB.js +242 -0
  55. package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
  56. package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
  57. package/dist/chunk-RVG5JXAL.js +41 -0
  58. package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
  59. package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
  60. package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
  61. package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
  62. package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
  63. package/dist/chunk-UND3GU2L.js +103 -0
  64. package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
  65. package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
  66. package/dist/chunk-UVDSQ6LW.js +472 -0
  67. package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
  68. package/dist/chunk-VREKEFLL.js +37 -0
  69. package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
  70. package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
  71. package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
  72. package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
  73. package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
  74. package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
  75. package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
  76. package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
  77. package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
  78. package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
  79. package/dist/cli/index.js +34 -32
  80. package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
  81. package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
  82. package/dist/codewiki/build-worker.js +4 -4
  83. package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
  84. package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
  85. package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
  86. package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
  87. package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
  88. package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
  89. package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
  90. package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
  91. package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
  92. package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
  93. package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
  94. package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
  95. package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
  96. package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
  97. package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
  98. package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
  99. package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
  100. package/dist/fleet-commands-ZFIWZSB3.js +70 -0
  101. package/dist/fleet-graph-Y6HPXIVF.js +125 -0
  102. package/dist/fleet-new-RDVJLHHH.js +48 -0
  103. package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
  104. package/dist/fleet-validate-BIYREGIK.js +79 -0
  105. package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
  106. package/dist/library-NJAHIGG4.js +217 -0
  107. package/dist/memory-OG6HOYKM.js +472 -0
  108. package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
  109. package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
  110. package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
  111. package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
  112. package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
  113. package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
  114. package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
  115. package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
  116. package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
  117. package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
  118. package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
  119. package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
  120. package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
  121. package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
  122. package/dist/verifiers-RLAHT27O.js +336 -0
  123. package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
  124. package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
  125. package/dist/worker/entry.js +98 -84
  126. package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
  127. package/docs/README.md +4 -3
  128. package/docs/acp.md +1 -1
  129. package/docs/alcf-provider.md +1 -1
  130. package/docs/architecture.md +2 -2
  131. package/docs/artifact-placement.md +1 -2
  132. package/docs/artifact-versions.md +10 -6
  133. package/docs/built-in-agents.md +26 -2
  134. package/docs/capacity-and-scheduling.md +1 -1
  135. package/docs/commands-and-modes.md +90 -8
  136. package/docs/configuration-and-targets.md +90 -2
  137. package/docs/context-engine.md +4 -2
  138. package/docs/context-working-set.md +4 -4
  139. package/docs/development-pipeline.md +1 -1
  140. package/docs/dispatch-architecture-rationale.md +1 -1
  141. package/docs/documentation-coverage.md +4 -4
  142. package/docs/documentation-guide.md +4 -4
  143. package/docs/eval-runner.md +1 -1
  144. package/docs/evals-internal.md +4 -45
  145. package/docs/evidence-and-memory.md +70 -10
  146. package/docs/evolution.md +1 -1
  147. package/docs/exit-codes-and-output.md +4 -1
  148. package/docs/extensions-and-sharing.md +6 -2
  149. package/docs/fleet-demo-runbook.md +2 -2
  150. package/docs/fleet-dispatch.md +224 -11
  151. package/docs/git-commit-provenance.md +2 -2
  152. package/docs/glossary.md +1 -1
  153. package/docs/installation-and-lifecycle.md +2 -2
  154. package/docs/middleware-and-components.md +20 -2
  155. package/docs/model-catalog.md +1 -1
  156. package/docs/observability.md +55 -8
  157. package/docs/proactive-memory.md +26 -16
  158. package/docs/prompt-envelope-and-tools.md +4 -2
  159. package/docs/provider-adapter-cookbook.md +1 -1
  160. package/docs/release-cut-checklist.md +83 -65
  161. package/docs/resource-library.md +59 -0
  162. package/docs/safety-model.md +29 -7
  163. package/docs/scientific-validation.md +3 -3
  164. package/docs/session-lifecycle.md +37 -1
  165. package/docs/skills-marketplace.md +16 -3
  166. package/docs/tool-usage.md +14 -7
  167. package/docs/trace-store.md +1 -1
  168. package/docs/troubleshooting.md +1 -1
  169. package/docs/tui-design.md +38 -4
  170. package/docs/worker-dispatch-mechanics.md +3 -3
  171. package/package.json +7 -4
  172. package/src/cli/agents.ts +2 -3
  173. package/src/cli/argv.ts +14 -1
  174. package/src/cli/fleet-commands.ts +37 -0
  175. package/src/cli/fleet-graph.ts +102 -0
  176. package/src/cli/fleet-new.ts +36 -0
  177. package/src/cli/fleet-preflight.ts +121 -0
  178. package/src/cli/fleet-validate.ts +30 -0
  179. package/src/cli/fleet.ts +188 -335
  180. package/src/cli/index.ts +4 -2
  181. package/src/cli/library.ts +190 -0
  182. package/src/cli/memory.ts +272 -10
  183. package/src/cli/modes/json-stream.ts +2 -2
  184. package/src/cli/modes/print.ts +12 -1
  185. package/src/cli/run.ts +22 -2
  186. package/src/cli/share.ts +13 -1
  187. package/src/cli/targets.ts +12 -3
  188. package/src/cli/usage.ts +160 -20
  189. package/src/core/bus-events.ts +7 -0
  190. package/src/core/commit-attribution.ts +4 -4
  191. package/src/core/config.ts +130 -0
  192. package/src/core/defaults.ts +81 -0
  193. package/src/core/response-model-id.ts +134 -0
  194. package/src/core/toml.ts +62 -0
  195. package/src/core/workspace-files.ts +0 -1
  196. package/src/domains/agents/builtins/architect.md +2 -1
  197. package/src/domains/agents/builtins/oracle.md +33 -0
  198. package/src/domains/agents/catalog.ts +18 -5
  199. package/src/domains/agents/fleet-contract.ts +278 -16
  200. package/src/domains/agents/index.ts +14 -0
  201. package/src/domains/agents/recipe.ts +54 -14
  202. package/src/domains/agents/result-contract.ts +242 -5
  203. package/src/domains/config/classify.ts +4 -0
  204. package/src/domains/context/bootstrap.ts +36 -27
  205. package/src/domains/context/project-metadata.ts +19 -63
  206. package/src/domains/context/prompt-context.ts +8 -0
  207. package/src/domains/context/working-set/policies/index.ts +3 -4
  208. package/src/domains/dispatch/active-route-planner.ts +14 -0
  209. package/src/domains/dispatch/backoff.ts +2 -1
  210. package/src/domains/dispatch/budget-envelope.ts +396 -0
  211. package/src/domains/dispatch/capability-match.ts +1 -0
  212. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  213. package/src/domains/dispatch/contract.ts +36 -0
  214. package/src/domains/dispatch/delegation-plan.ts +167 -0
  215. package/src/domains/dispatch/execution-plan.ts +76 -5
  216. package/src/domains/dispatch/execution-role.ts +3 -1
  217. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  218. package/src/domains/dispatch/extension.ts +339 -36
  219. package/src/domains/dispatch/fleet-gate.ts +14 -0
  220. package/src/domains/dispatch/fleet-plan.ts +63 -3
  221. package/src/domains/dispatch/fleet-run.ts +737 -0
  222. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  223. package/src/domains/dispatch/host-verification.ts +178 -0
  224. package/src/domains/dispatch/index.ts +38 -0
  225. package/src/domains/dispatch/intent.ts +159 -0
  226. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  227. package/src/domains/dispatch/receipt-integrity.ts +12 -4
  228. package/src/domains/dispatch/state.ts +37 -3
  229. package/src/domains/dispatch/types.ts +61 -9
  230. package/src/domains/dispatch/validation.ts +80 -6
  231. package/src/domains/dispatch/worker-spawn.ts +14 -3
  232. package/src/domains/eval/metrics/evidence.ts +0 -116
  233. package/src/domains/eval/metrics/invariants.ts +1 -1
  234. package/src/domains/eval/runners/clio-run.ts +1 -10
  235. package/src/domains/eval/runners/external-command.ts +2 -29
  236. package/src/domains/eval/schema/suite.ts +0 -7
  237. package/src/domains/eval/suites/run.ts +1 -7
  238. package/src/domains/evidence/trust-status.ts +10 -1
  239. package/src/domains/memory/index.ts +22 -0
  240. package/src/domains/memory/operations.ts +58 -1
  241. package/src/domains/memory/promotion.ts +281 -0
  242. package/src/domains/memory/prompt-section.ts +25 -5
  243. package/src/domains/memory/proposal.ts +51 -7
  244. package/src/domains/memory/task-bank.ts +3 -2
  245. package/src/domains/memory/task-memory-handoff.ts +181 -24
  246. package/src/domains/memory/task-memory-policy.ts +3 -1
  247. package/src/domains/memory/types.ts +37 -0
  248. package/src/domains/memory/validate.ts +178 -0
  249. package/src/domains/middleware/index.ts +15 -0
  250. package/src/domains/middleware/memory-intervention.ts +35 -25
  251. package/src/domains/middleware/runtime.ts +6 -0
  252. package/src/domains/middleware/skills-reminder.ts +19 -4
  253. package/src/domains/middleware/stalled-turn.ts +43 -1
  254. package/src/domains/middleware/types.ts +10 -0
  255. package/src/domains/middleware/watchdog.ts +281 -0
  256. package/src/domains/observability/contract.ts +9 -2
  257. package/src/domains/observability/cost.ts +31 -4
  258. package/src/domains/observability/extension.ts +2 -2
  259. package/src/domains/observability/index.ts +10 -0
  260. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  261. package/src/domains/providers/index.ts +3 -0
  262. package/src/domains/providers/model-discovery.ts +9 -0
  263. package/src/domains/providers/runtime-resolution.ts +38 -1
  264. package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
  265. package/src/domains/providers/types/context-window-slots.ts +18 -0
  266. package/src/domains/providers/types/runtime-descriptor.ts +3 -1
  267. package/src/domains/resources/index.ts +20 -0
  268. package/src/domains/resources/library.ts +326 -0
  269. package/src/domains/resources/skills/marketplace.ts +37 -12
  270. package/src/domains/safety/call-target.ts +211 -14
  271. package/src/domains/safety/decision-presentation.ts +268 -0
  272. package/src/domains/safety/redaction.ts +73 -0
  273. package/src/domains/session/context-ledger.ts +10 -1
  274. package/src/domains/session/decision-board.ts +4 -0
  275. package/src/domains/session/entries.ts +3 -0
  276. package/src/domains/session/handoff.ts +629 -0
  277. package/src/domains/session/history.ts +68 -19
  278. package/src/domains/session/usage.ts +24 -7
  279. package/src/domains/share/archive.ts +67 -2
  280. package/src/engine/acp/event-mapper.ts +7 -0
  281. package/src/engine/acp/server.ts +29 -2
  282. package/src/engine/apis/lmstudio.ts +25 -4
  283. package/src/engine/apis/openai-completions.ts +147 -22
  284. package/src/engine/claude/sdk-runtime.ts +8 -2
  285. package/src/engine/claude/tool-safety.ts +13 -0
  286. package/src/engine/loop-guard.ts +27 -3
  287. package/src/engine/worker-events.ts +4 -3
  288. package/src/engine/worker-runtime.ts +59 -54
  289. package/src/entry/orchestrator.ts +55 -1
  290. package/src/interactive/bus-notices.ts +26 -0
  291. package/src/interactive/chat-loop-messages.ts +22 -0
  292. package/src/interactive/chat-loop.ts +248 -1
  293. package/src/interactive/chat-renderer.ts +41 -3
  294. package/src/interactive/clio-editor.ts +44 -7
  295. package/src/interactive/context-overlay.ts +43 -5
  296. package/src/interactive/cost-overlay.ts +70 -11
  297. package/src/interactive/council-dispatch.ts +30 -0
  298. package/src/interactive/council-grid.ts +213 -0
  299. package/src/interactive/council.ts +99 -0
  300. package/src/interactive/dispatch-board.ts +471 -50
  301. package/src/interactive/fleet-run-preview.ts +307 -0
  302. package/src/interactive/footer/notifications.ts +219 -0
  303. package/src/interactive/footer/widgets.ts +13 -0
  304. package/src/interactive/handoff-round.ts +56 -0
  305. package/src/interactive/interactive-application.ts +49 -2
  306. package/src/interactive/interactive-event-projection.ts +9 -1
  307. package/src/interactive/interactive-input-runtime.ts +11 -1
  308. package/src/interactive/interactive-presentation.ts +11 -1
  309. package/src/interactive/interactive-slash-runtime.ts +52 -2
  310. package/src/interactive/interactive-subscriptions.ts +14 -2
  311. package/src/interactive/memory-overlay.ts +89 -4
  312. package/src/interactive/oracle.ts +179 -0
  313. package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
  314. package/src/interactive/overlay-frame.ts +5 -2
  315. package/src/interactive/overlay-general-openers.ts +230 -2
  316. package/src/interactive/overlay-key-routing.ts +58 -2
  317. package/src/interactive/overlay-lifecycle.ts +52 -5
  318. package/src/interactive/overlay-permission-lifecycle.ts +33 -8
  319. package/src/interactive/overlay-resource-openers.ts +11 -3
  320. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  321. package/src/interactive/overlay-transitions.ts +11 -0
  322. package/src/interactive/overlays/ask-user.ts +74 -30
  323. package/src/interactive/overlays/decisions.ts +3 -1
  324. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  325. package/src/interactive/overlays/handoff-review.ts +185 -0
  326. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  327. package/src/interactive/overlays/list-overlay.ts +168 -2
  328. package/src/interactive/overlays/settings.ts +101 -4
  329. package/src/interactive/overlays/side-question.ts +139 -0
  330. package/src/interactive/overlays/skills-hub.ts +401 -15
  331. package/src/interactive/permission-hint.ts +35 -0
  332. package/src/interactive/permission-overlay.ts +95 -45
  333. package/src/interactive/renderers/tool-execution.ts +19 -49
  334. package/src/interactive/session-last-turn.ts +8 -1
  335. package/src/interactive/session-usage-reseed.ts +36 -10
  336. package/src/interactive/side-question.ts +171 -0
  337. package/src/interactive/slash-commands.ts +434 -7
  338. package/src/interactive/slash-spec.ts +19 -6
  339. package/src/interactive/status/summary.ts +5 -0
  340. package/src/interactive/status/types.ts +5 -0
  341. package/src/interactive/terminal-lease.ts +1 -0
  342. package/src/interactive/theme/tokens.ts +30 -0
  343. package/src/interactive/turn-context.ts +96 -23
  344. package/src/interactive/turn-middleware.ts +16 -1
  345. package/src/interactive/turn-runtime.ts +37 -8
  346. package/src/interactive/turn-state.ts +3 -0
  347. package/src/interactive/watchdog-run.ts +75 -0
  348. package/src/interactive/worker-progress.ts +440 -0
  349. package/src/interactive/worker-share.ts +56 -1
  350. package/src/interactive/worker-stream.ts +58 -110
  351. package/src/tools/agent-tools.ts +28 -3
  352. package/src/tools/ask-user.ts +21 -1
  353. package/src/tools/bootstrap.ts +3 -0
  354. package/src/tools/compete-worktrees.ts +13 -79
  355. package/src/tools/context/index.ts +2 -2
  356. package/src/tools/dispatch-admission.ts +242 -8
  357. package/src/tools/dispatch-arguments.ts +65 -1
  358. package/src/tools/dispatch-event-text.ts +19 -0
  359. package/src/tools/dispatch-plan.ts +136 -6
  360. package/src/tools/dispatch-runner.ts +319 -13
  361. package/src/tools/dispatch-types.ts +20 -1
  362. package/src/tools/dispatch.ts +96 -3
  363. package/src/tools/monitor.ts +31 -0
  364. package/src/tools/profiles.ts +18 -4
  365. package/src/tools/registry.ts +15 -5
  366. package/src/tools/result-disposition.ts +156 -0
  367. package/src/tools/result-shaping.ts +59 -1
  368. package/src/tools/task-worktree.ts +238 -0
  369. package/src/tools/verify/authoring.ts +116 -55
  370. package/src/tools/verify/scripts.ts +62 -0
  371. package/src/tools/worker-evidence.ts +21 -1
  372. package/src/worker/spec-contract.ts +44 -3
  373. package/dist/chunk-EFADSJET.js +0 -18
  374. package/dist/chunk-HC4CLZ2Y.js +0 -68
  375. package/dist/memory-4ALKDJ4Q.js +0 -246
  376. package/src/domains/eval/metrics/chaos-stream.ts +0 -93
@@ -1,5 +1,6 @@
1
1
  import type { TargetStatus } from "./contract.js";
2
2
  import { listKnownModelsForRuntime } from "./support.js";
3
+ import type { ContextWindowSlots } from "./types/context-window-slots.js";
3
4
 
4
5
  export type ProviderModelSource = "configured" | "live" | "catalog" | "default";
5
6
 
@@ -45,6 +46,14 @@ export function loadedContextWindowForModel(
45
46
  return typeof reported === "number" && Number.isFinite(reported) && reported > 0 ? reported : null;
46
47
  }
47
48
 
49
+ /** How the server splits its KV budget for this model, when the probe saw it split. */
50
+ export function contextSlotsForModel(
51
+ status: DiscoveryStatus | null | undefined,
52
+ modelId: string,
53
+ ): ContextWindowSlots | null {
54
+ return status?.discoveredModelStates?.[modelId]?.contextSlots ?? null;
55
+ }
56
+
48
57
  /**
49
58
  * Residency as one view, so the planner and the "not resident" notice cannot
50
59
  * disagree about the same model. A reported loaded window settles it whatever
@@ -5,7 +5,7 @@ import { getCatalogModelForRuntime, resolveCostProvenance } from "./catalog.js";
5
5
  import type { ProvidersContract, TargetStatus } from "./contract.js";
6
6
  import { isDispatchEligibleRuntime, isOrchestratorEligibleRuntime, isTargetEligibleRuntime } from "./eligibility.js";
7
7
  import { probeCapabilitiesForModel, resolveModelCapabilities } from "./model-capabilities.js";
8
- import { hasLiveModelCatalog, loadedContextWindowForModel } from "./model-discovery.js";
8
+ import { contextSlotsForModel, hasLiveModelCatalog, loadedContextWindowForModel } from "./model-discovery.js";
9
9
  import {
10
10
  type ReasoningClass,
11
11
  type ResolvedModelRuntimeCapabilities,
@@ -14,6 +14,7 @@ import {
14
14
  resolveTargetRuntimeCapabilities,
15
15
  } from "./model-runtime-capabilities.js";
16
16
  import type { CapabilityFlags, ThinkingLevel } from "./types/capability-flags.js";
17
+ import type { ContextWindowSlots } from "./types/context-window-slots.js";
17
18
  import type { CostProvenance } from "./types/cost-provenance.js";
18
19
  import type { KnowledgeBase } from "./types/knowledge-base.js";
19
20
  import type {
@@ -52,6 +53,12 @@ export interface ContextWindowDetails {
52
53
  effectiveContextWindow: number;
53
54
  /** Where `effectiveContextWindow` came from. */
54
55
  contextWindowSource: ContextWindowSource;
56
+ /**
57
+ * Present when the probed window is a per-request share of the server's
58
+ * KV budget (llama.cpp `--ctx-size` over `--parallel` slots), so the
59
+ * operator surfaces can render `196,608 (786,432 / 4 slots)`.
60
+ */
61
+ contextWindowSlots: ContextWindowSlots | null;
55
62
  /** The window is below what this kind of work wants. An actionable degradation. */
56
63
  warning: string | null;
57
64
  /** The window is a placeholder rather than something the target reported. */
@@ -406,6 +413,8 @@ export function resolveRuntimeTarget(
406
413
  providers.knowledgeBase,
407
414
  probedContextWindow,
408
415
  loadedContextWindow,
416
+ undefined,
417
+ contextSlotsForModel(status, wireModelId),
409
418
  );
410
419
  capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
411
420
  if (contextWindowDetails.warning) {
@@ -513,6 +522,7 @@ export function refineRuntimeTargetWithModelHints(
513
522
  // hand the planner the declared window back on the first refinement.
514
523
  target.contextWindowDetails.loadedContextWindow,
515
524
  modelHintContextWindow,
525
+ target.contextWindowDetails.contextWindowSlots,
516
526
  );
517
527
  capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
518
528
 
@@ -582,6 +592,21 @@ export function runtimeResolutionWarnings(diagnostics: ReadonlyArray<RuntimeReso
582
592
  return diagnostics.filter((entry) => entry.severity === "warning").map((entry) => entry.message);
583
593
  }
584
594
 
595
+ /**
596
+ * The warnings a surface that prints its own thinking-clamp line should
597
+ * announce. `thinking-coerced` and `thinking-<kind>` are the two halves of
598
+ * that one line, so when the resolved thinking carries a notice they are
599
+ * dropped here: an always-on model printed three lines saying one thing
600
+ * (issue #191). With no notice, a bare coercion is still worth a line.
601
+ */
602
+ export function runtimeResolutionWarningsBesideThinkingNotice(
603
+ diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>,
604
+ thinkingNotice: string,
605
+ ): string[] {
606
+ if (thinkingNotice.trim().length === 0) return runtimeResolutionWarnings(diagnostics);
607
+ return runtimeResolutionWarnings(diagnostics.filter((entry) => !entry.code.startsWith("thinking-")));
608
+ }
609
+
585
610
  /**
586
611
  * Minimum context Clio is built for, applied to every tier rather than only to
587
612
  * local-native. A hosted target that reports less than this is as unable to
@@ -623,6 +648,7 @@ export function resolveContextWindowDetails(
623
648
  probedContextWindow: number | null,
624
649
  loadedContextWindow: number | null = null,
625
650
  modelHintContextWindow?: number,
651
+ probedContextSlots: ContextWindowSlots | null = null,
626
652
  ): ContextWindowDetails {
627
653
  const catalogModel = getCatalogModelForRuntime(runtime.id, wireModelId);
628
654
  const kbHit = knowledgeBase?.lookup(wireModelId) ?? null;
@@ -707,6 +733,16 @@ export function resolveContextWindowDetails(
707
733
  `Run 'clio-coder targets --probe' to read the real one.`;
708
734
  }
709
735
 
736
+ // The split explains the probed number and nothing else: once an override
737
+ // or a loaded window decides the figure, `786,432 / 4 slots` no longer
738
+ // describes it.
739
+ const contextWindowSlots =
740
+ source === "probe" &&
741
+ probedContextSlots !== null &&
742
+ Math.floor(probedContextSlots.totalContextSize / probedContextSlots.slots) === effective
743
+ ? probedContextSlots
744
+ : null;
745
+
710
746
  return {
711
747
  declaredContextWindow,
712
748
  probedContextWindow,
@@ -714,6 +750,7 @@ export function resolveContextWindowDetails(
714
750
  desiredContextWindow: desired,
715
751
  effectiveContextWindow: effective,
716
752
  contextWindowSource: source,
753
+ contextWindowSlots,
717
754
  warning,
718
755
  provenanceNotice,
719
756
  };
@@ -1,5 +1,6 @@
1
1
  import { probeHttp, probeJson } from "../../probe/http.js";
2
2
  import type { CapabilityFlags } from "../../types/capability-flags.js";
3
+ import { type ContextWindowSlots, formatContextWindowSlots } from "../../types/context-window-slots.js";
3
4
  import type { ProbeContext, ProbeModelStatus, ProbeResult } from "../../types/runtime-descriptor.js";
4
5
  import type { TargetDescriptor } from "../../types/target-descriptor.js";
5
6
 
@@ -88,7 +89,15 @@ export async function probeOpenAIModelCatalog(
88
89
  // A reported loaded context is itself the residency answer: nothing
89
90
  // serves a window for a model it has not loaded.
90
91
  (loadedContext !== undefined ? { state: "loaded" as const } : undefined);
91
- if (state) modelStates[row.id] = loadedContext === undefined ? state : { ...state, contextLength: loadedContext };
92
+ // The slot split rides on the load-state record because it is the same
93
+ // kind of fact: how this server is serving this model. A row with no
94
+ // recognized state still gets one, as `unknown`, so the split is kept
95
+ // without claiming residency the server did not report.
96
+ const contextSlots = contextSlotsFromEntry(row) ?? (detailRow ? contextSlotsFromEntry(detailRow) : undefined);
97
+ const withSlots = contextSlots ? { ...(state ?? { state: "unknown" as const }), contextSlots } : state;
98
+ if (withSlots) {
99
+ modelStates[row.id] = loadedContext === undefined ? withSlots : { ...withSlots, contextLength: loadedContext };
100
+ }
92
101
  }
93
102
  return { models, modelCapabilities, modelStates };
94
103
  }
@@ -159,7 +168,15 @@ function normalizeModelState(raw: string | undefined): ProbeModelStatus["state"]
159
168
  if (!value) return undefined;
160
169
  if (value === "loaded" || value === "ready" || value === "running" || value === "active") return "loaded";
161
170
  if (value === "loading" || value === "pending" || value === "queued" || value === "starting") return "loading";
162
- if (value === "unloaded" || value === "not-loaded" || value === "idle" || value === "stopped") return "unloaded";
171
+ if (
172
+ value === "unloaded" ||
173
+ value === "not-loaded" ||
174
+ value === "idle" ||
175
+ value === "sleeping" ||
176
+ value === "stopped"
177
+ ) {
178
+ return "unloaded";
179
+ }
163
180
  if (value === "failed" || value === "error" || value === "errored") return "failed";
164
181
  if (value === "unknown") return "unknown";
165
182
  return undefined;
@@ -203,12 +220,16 @@ function statusArgsFromEntry(row: Record<string, unknown>): string[] {
203
220
  return argsFromStatus(status);
204
221
  }
205
222
 
223
+ function contextSlotsFromEntry(row: Record<string, unknown>): ContextWindowSlots | undefined {
224
+ return llamaCppRequestContextWindow(parseLlamaCppServerFlags(statusArgsFromEntry(row)))?.slots;
225
+ }
226
+
206
227
  function capabilitiesFromOpenAIModelEntry(row: Record<string, unknown>): Partial<CapabilityFlags> {
207
228
  const caps: Partial<CapabilityFlags> = {};
208
229
  const meta = nestedRecord(row, "meta");
209
230
  const flags = parseLlamaCppServerFlags(statusArgsFromEntry(row));
210
231
  const contextWindow =
211
- positiveNumber(flags.contextSize) ??
232
+ llamaCppRequestContextWindow(flags)?.contextWindow ??
212
233
  firstPositiveNumber(row, [
213
234
  // What is actually loaded outranks what the model could support: a
214
235
  // model served at 8k out of a possible 262k has an 8k window today,
@@ -310,10 +331,43 @@ export interface LlamaCppServerFlags {
310
331
  topK?: number;
311
332
  nGpuLayers?: number;
312
333
  parallel?: number;
334
+ /** `--kv-unified` / `-kvu` true, `--no-kv-unified` false, absent when neither was given. */
335
+ kvUnified?: boolean;
313
336
  mmproj?: string;
314
337
  chatTemplateKwargs?: string;
315
338
  }
316
339
 
340
+ export interface LlamaCppRequestContextWindow {
341
+ /** What one request can use. */
342
+ contextWindow: number;
343
+ /** Present when `contextWindow` is a quotient of the server's total. */
344
+ slots?: ContextWindowSlots;
345
+ }
346
+
347
+ /**
348
+ * The window one request actually gets from a llama.cpp server.
349
+ *
350
+ * `--ctx-size` is the total KV budget of the process. Without `--kv-unified`
351
+ * the server splits it evenly across `--parallel` slots, so a router started
352
+ * with `--ctx-size 786432 --parallel 4 --no-kv-unified` admits 196,608 tokens
353
+ * per request while reporting 786,432 as its context size. Reading the total
354
+ * as the window armed autocompact at a number the server would never admit
355
+ * and walked a long session into a hard context failure with the meter at
356
+ * 25% (issue #187). With `--kv-unified` every slot shares one sequence and
357
+ * the total is the window.
358
+ */
359
+ export function llamaCppRequestContextWindow(flags: LlamaCppServerFlags): LlamaCppRequestContextWindow | undefined {
360
+ const total = positiveNumber(flags.contextSize);
361
+ if (total === undefined) return undefined;
362
+ const parallel = positiveNumber(flags.parallel);
363
+ if (parallel === undefined || parallel <= 1 || flags.kvUnified === true) return { contextWindow: Math.floor(total) };
364
+ const slots = Math.floor(parallel);
365
+ return {
366
+ contextWindow: Math.floor(total / slots),
367
+ slots: { totalContextSize: Math.floor(total), slots },
368
+ };
369
+ }
370
+
317
371
  export interface LlamaCppStatusEnrichment {
318
372
  discoveredCapabilities?: Partial<CapabilityFlags>;
319
373
  modelId?: string;
@@ -329,22 +383,37 @@ function argsFromStatus(status: unknown): string[] {
329
383
  return [];
330
384
  }
331
385
 
332
- function valueAfter(args: ReadonlyArray<string>, flag: string): string | undefined {
333
- const index = args.indexOf(flag);
334
- if (index < 0) return undefined;
335
- const value = args[index + 1];
336
- return value && !value.startsWith("--") ? value : undefined;
386
+ /** `-1` is a value (`--reasoning-budget -1`); `-np` and `--jinja` are flags. */
387
+ function looksLikeFlag(token: string): boolean {
388
+ return token.startsWith("-") && Number.isNaN(Number(token));
337
389
  }
338
390
 
339
- function numberFlag(args: ReadonlyArray<string>, flag: string): number | undefined {
340
- const value = valueAfter(args, flag);
391
+ /**
392
+ * The value after the first of `flags` present, or undefined. A token that
393
+ * reads as the next flag is not a value, which is how boolean flags read as
394
+ * present-without-value. Short spellings (`-c`, `-np`) come after the long
395
+ * one so the long form wins when both are given.
396
+ */
397
+ function valueAfter(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): string | undefined {
398
+ for (const flag of flags) {
399
+ const index = args.indexOf(flag);
400
+ if (index < 0) continue;
401
+ const value = args[index + 1];
402
+ return value && !looksLikeFlag(value) ? value : undefined;
403
+ }
404
+ return undefined;
405
+ }
406
+
407
+ function numberFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): number | undefined {
408
+ const value = valueAfter(args, ...flags);
341
409
  if (value === undefined) return undefined;
342
410
  const parsed = Number(value);
343
411
  return Number.isFinite(parsed) ? parsed : undefined;
344
412
  }
345
413
 
346
- function booleanFlag(args: ReadonlyArray<string>, flag: string): boolean | undefined {
347
- if (!args.includes(flag)) return undefined;
414
+ function booleanFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): boolean | undefined {
415
+ const flag = flags.find((candidate) => args.includes(candidate));
416
+ if (flag === undefined) return undefined;
348
417
  const value = valueAfter(args, flag);
349
418
  if (value === undefined) return true;
350
419
  const normalized = value.toLowerCase();
@@ -353,9 +422,9 @@ function booleanFlag(args: ReadonlyArray<string>, flag: string): boolean | undef
353
422
  return undefined;
354
423
  }
355
424
 
356
- function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
425
+ export function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
357
426
  const flags: LlamaCppServerFlags = {};
358
- const ctxSize = numberFlag(args, "--ctx-size");
427
+ const ctxSize = numberFlag(args, "--ctx-size", "-c");
359
428
  if (ctxSize !== undefined) flags.contextSize = ctxSize;
360
429
  const maxTokens = numberFlag(args, "--n-predict");
361
430
  if (maxTokens !== undefined) flags.maxTokens = maxTokens;
@@ -375,8 +444,14 @@ function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFl
375
444
  if (topK !== undefined) flags.topK = topK;
376
445
  const nGpuLayers = numberFlag(args, "--n-gpu-layers");
377
446
  if (nGpuLayers !== undefined) flags.nGpuLayers = nGpuLayers;
378
- const parallel = numberFlag(args, "--parallel");
447
+ const parallel = numberFlag(args, "--parallel", "-np");
379
448
  if (parallel !== undefined) flags.parallel = parallel;
449
+ // The negative spelling is its own flag, and the last one given wins, which
450
+ // is how llama.cpp itself resolves a repeated boolean option.
451
+ const kvUnifiedAt = Math.max(args.lastIndexOf("--kv-unified"), args.lastIndexOf("-kvu"));
452
+ const noKvUnifiedAt = args.lastIndexOf("--no-kv-unified");
453
+ if (noKvUnifiedAt > kvUnifiedAt) flags.kvUnified = false;
454
+ else if (kvUnifiedAt >= 0) flags.kvUnified = booleanFlag(args, "--kv-unified", "-kvu") ?? true;
380
455
  const cacheTypeK = valueAfter(args, "--cache-type-k");
381
456
  if (cacheTypeK) flags.cacheTypeK = cacheTypeK;
382
457
  const cacheTypeV = valueAfter(args, "--cache-type-v");
@@ -418,7 +493,8 @@ export async function probeLlamaCppModelStatus(
418
493
  if (args.length === 0) return { notes: statusNotes(selected.id, selected.status) };
419
494
  const flags = parseLlamaCppServerFlags(args);
420
495
  const caps: Partial<CapabilityFlags> = {};
421
- if (flags.contextSize !== undefined && flags.contextSize > 0) caps.contextWindow = flags.contextSize;
496
+ const window = llamaCppRequestContextWindow(flags);
497
+ if (window !== undefined) caps.contextWindow = window.contextWindow;
422
498
  if (flags.maxTokens !== undefined && flags.maxTokens > 0) caps.maxTokens = flags.maxTokens;
423
499
  if (flags.reasoning === true || flags.reasoningBudget !== undefined) caps.reasoning = true;
424
500
  if (flags.mmproj) caps.vision = true;
@@ -426,6 +502,11 @@ export async function probeLlamaCppModelStatus(
426
502
  const enrichment: LlamaCppStatusEnrichment = { modelId: selected.id, serverFlags: flags };
427
503
  if (Object.keys(caps).length > 0) enrichment.discoveredCapabilities = caps;
428
504
  const notes = statusNotes(selected.id, selected.status);
505
+ if (window?.slots) {
506
+ notes.push(
507
+ `${selected.id} context window ${formatContextWindowSlots(window.contextWindow, window.slots)}: --ctx-size is split across --parallel slots without --kv-unified`,
508
+ );
509
+ }
429
510
  if (notes.length > 0) enrichment.notes = notes;
430
511
  return enrichment;
431
512
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A server that shares one KV budget across request slots serves each request
3
+ * a quotient of it. llama.cpp splits `--ctx-size` evenly across `--parallel`
4
+ * slots unless `--kv-unified`, so a router started with `--ctx-size 786432
5
+ * --parallel 4 --no-kv-unified` admits 196,608 tokens per request. The total
6
+ * and the slot count are kept beside the quotient so the operator surfaces can
7
+ * say where the number came from.
8
+ */
9
+ export interface ContextWindowSlots {
10
+ totalContextSize: number;
11
+ slots: number;
12
+ }
13
+
14
+ /** `196,608 (786,432 / 4 slots)`: the per-request window with its derivation. */
15
+ export function formatContextWindowSlots(contextWindow: number, slots: ContextWindowSlots): string {
16
+ const format = (n: number): string => Math.round(n).toLocaleString("en-US");
17
+ return `${format(contextWindow)} (${format(slots.totalContextSize)} / ${slots.slots} slots)`;
18
+ }
@@ -1,6 +1,6 @@
1
1
  import type { Api, Model } from "../../../engine/types.js";
2
-
3
2
  import type { CapabilityFlags } from "./capability-flags.js";
3
+ import type { ContextWindowSlots } from "./context-window-slots.js";
4
4
  import type { CompleteOptions, CompletionChunk, EmbedResult, InfillOptions, RerankResult } from "./inference.js";
5
5
  import type { KnowledgeBaseHit } from "./knowledge-base.js";
6
6
  import type { TargetDescriptor } from "./target-descriptor.js";
@@ -61,6 +61,8 @@ export type ProbeModelLoadState = "loaded" | "loading" | "unloaded" | "failed" |
61
61
  export interface ProbeModelStatus {
62
62
  state: ProbeModelLoadState;
63
63
  detail?: string;
64
+ /** The per-request window is `totalContextSize / slots`; absent when the server does not split. */
65
+ contextSlots?: ContextWindowSlots;
64
66
  /**
65
67
  * Context the runtime has this model loaded at, when it reports one. LM
66
68
  * Studio serves a loaded instance at whatever window it was opened with,
@@ -18,6 +18,24 @@ export function createResourcesDomainModule(options: ResourceLoaderOptions = {})
18
18
  export type { ResourceDiagnostic, ResourceScope, ResourceSourceInfo } from "./collision.js";
19
19
  export { resolveResourceCollisions } from "./collision.js";
20
20
  export type { ResourceList, ResourcesContract } from "./contract.js";
21
+ export {
22
+ classifyLibraryRequirements,
23
+ confirmLibraryRemote,
24
+ discoverLibrary,
25
+ installLibraryPlan,
26
+ type LibraryCommandRunner,
27
+ type LibraryDiscoveryResult,
28
+ type LibraryEntry,
29
+ type LibraryInstallPlan,
30
+ type LibraryRequirementStatus,
31
+ libraryEntryInstalled,
32
+ libraryEntryPin,
33
+ libraryEntryRef,
34
+ libraryInstallPath,
35
+ planLibraryInstall,
36
+ resolveLibraryRequirements,
37
+ syncLibrary,
38
+ } from "./library.js";
21
39
  export { createResourcesLoader, type ResourceLoaderOptions } from "./loader.js";
22
40
  export { ResourcesManifest } from "./manifest.js";
23
41
  export {
@@ -61,6 +79,8 @@ export {
61
79
  discoverMarketplaceSkills,
62
80
  getMarketplaceSkills,
63
81
  installSkill,
82
+ type LibraryEntryKind,
83
+ type LibraryRequirementRef,
64
84
  MARKETPLACE_UNCONFIGURED,
65
85
  type MarketplaceDiscoveryResult,
66
86
  type MarketplaceSkill,