@skaile/workspaces 5.7.0 → 5.8.0

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 (399) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-K36CR52Q.js → asset-feeds-EYRZR4K5.js} +54 -30
  4. package/dist/asset-feeds-EYRZR4K5.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +9 -9
  6. package/dist/asset-manager/index.js +15 -15
  7. package/dist/asset-manager/installer.js +11 -11
  8. package/dist/asset-manager/renderers.js +10 -10
  9. package/dist/asset-manager/src/index.d.ts +268 -24
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/install-agent.d.ts +11 -0
  12. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  13. package/dist/asset-manager/src/installer.d.ts +2 -2
  14. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  15. package/dist/bridge/drivers/claude-sdk.js +147 -211
  16. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  17. package/dist/bridge/drivers/codex.js +90 -66
  18. package/dist/bridge/drivers/codex.js.map +1 -1
  19. package/dist/bridge/drivers/continue.js +14 -15
  20. package/dist/bridge/drivers/continue.js.map +1 -1
  21. package/dist/bridge/drivers/echo.js +4 -4
  22. package/dist/bridge/drivers/gemini.js +8 -8
  23. package/dist/bridge/drivers/goose.js +14 -15
  24. package/dist/bridge/drivers/goose.js.map +1 -1
  25. package/dist/bridge/drivers/omp.js +68 -104
  26. package/dist/bridge/drivers/omp.js.map +1 -1
  27. package/dist/bridge/drivers/opencode.js +14 -15
  28. package/dist/bridge/drivers/opencode.js.map +1 -1
  29. package/dist/bridge/drivers/qwen.js +8 -8
  30. package/dist/bridge/index.js +16 -17
  31. package/dist/bridge/src/codex/managed-driver.d.ts +13 -10
  32. package/dist/bridge/src/codex/managed-driver.d.ts.map +1 -1
  33. package/dist/bridge/src/drivers/_subprocess-cli.d.ts +12 -2
  34. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -1
  35. package/dist/bridge/src/drivers/claude-sdk.d.ts +37 -62
  36. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  37. package/dist/bridge/src/drivers/codex.d.ts +26 -10
  38. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  39. package/dist/bridge/src/drivers/continue.d.ts +2 -2
  40. package/dist/bridge/src/drivers/continue.d.ts.map +1 -1
  41. package/dist/bridge/src/drivers/gemini.d.ts +2 -2
  42. package/dist/bridge/src/drivers/gemini.d.ts.map +1 -1
  43. package/dist/bridge/src/drivers/goose.d.ts +2 -2
  44. package/dist/bridge/src/drivers/goose.d.ts.map +1 -1
  45. package/dist/bridge/src/drivers/omp.d.ts +24 -35
  46. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  47. package/dist/bridge/src/drivers/opencode.d.ts +2 -2
  48. package/dist/bridge/src/drivers/opencode.d.ts.map +1 -1
  49. package/dist/bridge/src/drivers/recovery-policy.d.ts +79 -0
  50. package/dist/bridge/src/drivers/recovery-policy.d.ts.map +1 -0
  51. package/dist/bridge/src/index.d.ts +1 -0
  52. package/dist/bridge/src/index.d.ts.map +1 -1
  53. package/dist/bridge/src/reconfigure-ledger.d.ts +117 -0
  54. package/dist/bridge/src/reconfigure-ledger.d.ts.map +1 -0
  55. package/dist/bridge/src/types.d.ts +57 -6
  56. package/dist/bridge/src/types.d.ts.map +1 -1
  57. package/dist/{chunk-WIEC3ZE4.js → chunk-2FRUUDZY.js} +5 -5
  58. package/dist/{chunk-WIEC3ZE4.js.map → chunk-2FRUUDZY.js.map} +1 -1
  59. package/dist/{chunk-O4Z7MAW7.js → chunk-2LWYNQK7.js} +3 -3
  60. package/dist/{chunk-O4Z7MAW7.js.map → chunk-2LWYNQK7.js.map} +1 -1
  61. package/dist/{chunk-OOLT6HGP.js → chunk-36AFURKZ.js} +7 -7
  62. package/dist/{chunk-OOLT6HGP.js.map → chunk-36AFURKZ.js.map} +1 -1
  63. package/dist/{chunk-DFFD4BFG.js → chunk-4MQS7CAF.js} +174 -86
  64. package/dist/chunk-4MQS7CAF.js.map +1 -0
  65. package/dist/{chunk-RNPHRRLG.js → chunk-4PTSR4UU.js} +3 -3
  66. package/dist/{chunk-RNPHRRLG.js.map → chunk-4PTSR4UU.js.map} +1 -1
  67. package/dist/{chunk-34C42MJX.js → chunk-6GRX5L6A.js} +5 -5
  68. package/dist/{chunk-34C42MJX.js.map → chunk-6GRX5L6A.js.map} +1 -1
  69. package/dist/{chunk-NFGRW3L7.js → chunk-7RGTAEG6.js} +3 -3
  70. package/dist/{chunk-NFGRW3L7.js.map → chunk-7RGTAEG6.js.map} +1 -1
  71. package/dist/{chunk-BTK7ECLH.js → chunk-AWQYXZVG.js} +15 -6
  72. package/dist/chunk-AWQYXZVG.js.map +1 -0
  73. package/dist/{chunk-XBSQ4KMC.js → chunk-B4X2N7JQ.js} +205 -3
  74. package/dist/chunk-B4X2N7JQ.js.map +1 -0
  75. package/dist/{chunk-FRHE7FFB.js → chunk-B6GIW55K.js} +5 -3
  76. package/dist/chunk-B6GIW55K.js.map +1 -0
  77. package/dist/{chunk-JLSCA5T5.js → chunk-BJNUNQAW.js} +3 -3
  78. package/dist/{chunk-JLSCA5T5.js.map → chunk-BJNUNQAW.js.map} +1 -1
  79. package/dist/{chunk-RVIZQ5XD.js → chunk-BTE2V4IW.js} +3 -3
  80. package/dist/{chunk-RVIZQ5XD.js.map → chunk-BTE2V4IW.js.map} +1 -1
  81. package/dist/{chunk-EB4XN3KE.js → chunk-CGT45WN7.js} +3 -3
  82. package/dist/{chunk-EB4XN3KE.js.map → chunk-CGT45WN7.js.map} +1 -1
  83. package/dist/{chunk-47ZD34KB.js → chunk-CIFS5K6T.js} +3 -3
  84. package/dist/{chunk-47ZD34KB.js.map → chunk-CIFS5K6T.js.map} +1 -1
  85. package/dist/{chunk-FAP63KV7.js → chunk-CKQEIY43.js} +4 -4
  86. package/dist/{chunk-FAP63KV7.js.map → chunk-CKQEIY43.js.map} +1 -1
  87. package/dist/{chunk-AVCUPPG6.js → chunk-EF7NPDDU.js} +4 -4
  88. package/dist/{chunk-AVCUPPG6.js.map → chunk-EF7NPDDU.js.map} +1 -1
  89. package/dist/chunk-EPBKISS5.js +84 -0
  90. package/dist/chunk-EPBKISS5.js.map +1 -0
  91. package/dist/{chunk-THEJJBOU.js → chunk-F2EKONM7.js} +3 -3
  92. package/dist/{chunk-THEJJBOU.js.map → chunk-F2EKONM7.js.map} +1 -1
  93. package/dist/{chunk-DMLDYFDS.js → chunk-F3RDEH5U.js} +7 -4
  94. package/dist/chunk-F3RDEH5U.js.map +1 -0
  95. package/dist/{chunk-SZWRPEF7.js → chunk-FTJJO3EM.js} +39 -29
  96. package/dist/chunk-FTJJO3EM.js.map +1 -0
  97. package/dist/{chunk-PSA6ONFB.js → chunk-FVJK4QWM.js} +4 -4
  98. package/dist/{chunk-PSA6ONFB.js.map → chunk-FVJK4QWM.js.map} +1 -1
  99. package/dist/{chunk-LBQ4BBX4.js → chunk-FZNG4V4J.js} +16 -30
  100. package/dist/chunk-FZNG4V4J.js.map +1 -0
  101. package/dist/{chunk-SWO25LTO.js → chunk-GB7WDMH2.js} +4 -4
  102. package/dist/{chunk-SWO25LTO.js.map → chunk-GB7WDMH2.js.map} +1 -1
  103. package/dist/{chunk-NARITJS2.js → chunk-GCICGXDD.js} +3 -3
  104. package/dist/{chunk-NARITJS2.js.map → chunk-GCICGXDD.js.map} +1 -1
  105. package/dist/{chunk-TTPSDC2G.js → chunk-GTILM2CI.js} +34 -13
  106. package/dist/chunk-GTILM2CI.js.map +1 -0
  107. package/dist/{chunk-EU3Q5AQ4.js → chunk-GXXFLBUQ.js} +23 -32
  108. package/dist/chunk-GXXFLBUQ.js.map +1 -0
  109. package/dist/{chunk-D5HOETOB.js → chunk-H7QUDDKH.js} +981 -126
  110. package/dist/chunk-H7QUDDKH.js.map +1 -0
  111. package/dist/{chunk-GIC3G5YG.js → chunk-HG34RNTK.js} +7 -13
  112. package/dist/chunk-HG34RNTK.js.map +1 -0
  113. package/dist/{chunk-LXY4BUA3.js → chunk-HYDRDNKN.js} +9 -5
  114. package/dist/chunk-HYDRDNKN.js.map +1 -0
  115. package/dist/{chunk-N6FBTXQ5.js → chunk-I6NLLJHZ.js} +2 -2
  116. package/dist/{chunk-N6FBTXQ5.js.map → chunk-I6NLLJHZ.js.map} +1 -1
  117. package/dist/{chunk-NWQB7UTY.js → chunk-IONAUNWB.js} +3 -3
  118. package/dist/{chunk-NWQB7UTY.js.map → chunk-IONAUNWB.js.map} +1 -1
  119. package/dist/{chunk-CT6NQSA4.js → chunk-ISHJITXJ.js} +3 -3
  120. package/dist/{chunk-CT6NQSA4.js.map → chunk-ISHJITXJ.js.map} +1 -1
  121. package/dist/chunk-IZCR27MU.js +60 -0
  122. package/dist/chunk-IZCR27MU.js.map +1 -0
  123. package/dist/{chunk-LCU5U5IW.js → chunk-JAKOMFC6.js} +67 -19
  124. package/dist/chunk-JAKOMFC6.js.map +1 -0
  125. package/dist/{chunk-VOOI7B2L.js → chunk-LEMHVDET.js} +86 -66
  126. package/dist/chunk-LEMHVDET.js.map +1 -0
  127. package/dist/{chunk-37FTLYFP.js → chunk-LNFKL23K.js} +3 -3
  128. package/dist/{chunk-37FTLYFP.js.map → chunk-LNFKL23K.js.map} +1 -1
  129. package/dist/{chunk-6UFFKMVC.js → chunk-LSXHED6I.js} +6 -6
  130. package/dist/{chunk-6UFFKMVC.js.map → chunk-LSXHED6I.js.map} +1 -1
  131. package/dist/{chunk-XUUYAS3Z.js → chunk-M3WPBTGJ.js} +3 -3
  132. package/dist/{chunk-XUUYAS3Z.js.map → chunk-M3WPBTGJ.js.map} +1 -1
  133. package/dist/{chunk-QZLWJETK.js → chunk-MGGFBZWA.js} +3 -3
  134. package/dist/{chunk-QZLWJETK.js.map → chunk-MGGFBZWA.js.map} +1 -1
  135. package/dist/{chunk-53MSCGR2.js → chunk-NPLPCRW5.js} +5 -5
  136. package/dist/{chunk-53MSCGR2.js.map → chunk-NPLPCRW5.js.map} +1 -1
  137. package/dist/{chunk-QCI6D7E4.js → chunk-NUELZWCF.js} +266 -170
  138. package/dist/chunk-NUELZWCF.js.map +1 -0
  139. package/dist/{chunk-BWZF2ZIF.js → chunk-OFBIWVCR.js} +3 -3
  140. package/dist/{chunk-BWZF2ZIF.js.map → chunk-OFBIWVCR.js.map} +1 -1
  141. package/dist/{chunk-IZLQ4GDO.js → chunk-P23M65LB.js} +43 -21
  142. package/dist/chunk-P23M65LB.js.map +1 -0
  143. package/dist/{chunk-G67BOI2J.js → chunk-PMECEZK3.js} +15 -9
  144. package/dist/chunk-PMECEZK3.js.map +1 -0
  145. package/dist/{chunk-GWXFSLBK.js → chunk-PTSGWKHR.js} +4 -4
  146. package/dist/{chunk-GWXFSLBK.js.map → chunk-PTSGWKHR.js.map} +1 -1
  147. package/dist/{chunk-OKGUDNDT.js → chunk-Q6E6FM7P.js} +35 -33
  148. package/dist/chunk-Q6E6FM7P.js.map +1 -0
  149. package/dist/{chunk-CWM3MYGX.js → chunk-QOP6KDFR.js} +8 -9
  150. package/dist/chunk-QOP6KDFR.js.map +1 -0
  151. package/dist/{chunk-O7VPNKYN.js → chunk-QVNRCDTV.js} +23 -7
  152. package/dist/chunk-QVNRCDTV.js.map +1 -0
  153. package/dist/{chunk-UX3K4RKE.js → chunk-S53LOR7B.js} +3 -3
  154. package/dist/{chunk-UX3K4RKE.js.map → chunk-S53LOR7B.js.map} +1 -1
  155. package/dist/{chunk-KNWCFEWU.js → chunk-SH5D7U7N.js} +20 -7
  156. package/dist/{chunk-KNWCFEWU.js.map → chunk-SH5D7U7N.js.map} +1 -1
  157. package/dist/{chunk-KM7XWC4Y.js → chunk-UAROCOXF.js} +3 -3
  158. package/dist/{chunk-KM7XWC4Y.js.map → chunk-UAROCOXF.js.map} +1 -1
  159. package/dist/{chunk-JMKB7IB4.js → chunk-UMVKJM4Q.js} +4 -4
  160. package/dist/chunk-UMVKJM4Q.js.map +1 -0
  161. package/dist/{chunk-HCYS7GFP.js → chunk-V2DXZYBB.js} +3 -3
  162. package/dist/{chunk-HCYS7GFP.js.map → chunk-V2DXZYBB.js.map} +1 -1
  163. package/dist/{chunk-IUUYRXT6.js → chunk-W5DWWE4Y.js} +4 -4
  164. package/dist/{chunk-IUUYRXT6.js.map → chunk-W5DWWE4Y.js.map} +1 -1
  165. package/dist/{chunk-FK6HPLQA.js → chunk-WTQ3TATB.js} +3 -3
  166. package/dist/{chunk-FK6HPLQA.js.map → chunk-WTQ3TATB.js.map} +1 -1
  167. package/dist/{chunk-7FJQT3GT.js → chunk-Y4N2NUZD.js} +4 -4
  168. package/dist/{chunk-7FJQT3GT.js.map → chunk-Y4N2NUZD.js.map} +1 -1
  169. package/dist/{chunk-6VRJH4MR.js → chunk-Y7QA2OLD.js} +6 -6
  170. package/dist/{chunk-6VRJH4MR.js.map → chunk-Y7QA2OLD.js.map} +1 -1
  171. package/dist/{chunk-74EEFB52.js → chunk-YSHVQGUS.js} +115 -27
  172. package/dist/chunk-YSHVQGUS.js.map +1 -0
  173. package/dist/{chunk-6C654TFI.js → chunk-ZAOGFXDO.js} +36 -8
  174. package/dist/chunk-ZAOGFXDO.js.map +1 -0
  175. package/dist/{chunk-MKLBK7HI.js → chunk-ZKSJMZKD.js} +17 -13
  176. package/dist/chunk-ZKSJMZKD.js.map +1 -0
  177. package/dist/cli/index.js +373 -188
  178. package/dist/cli/index.js.map +1 -1
  179. package/dist/cli/src/asset-feeds.d.ts +5 -2
  180. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  181. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  182. package/dist/cli/src/commands/catalog.d.ts +15 -2
  183. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  184. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  185. package/dist/cli/src/commands/library-index.d.ts +8 -0
  186. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  187. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  188. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  189. package/dist/cli/src/commands/outdated.d.ts +7 -2
  190. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  191. package/dist/cli/src/commands/project.d.ts +2 -0
  192. package/dist/cli/src/commands/project.d.ts.map +1 -1
  193. package/dist/cli/src/commands/publish-core.d.ts +10 -1
  194. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  195. package/dist/cli/src/commands/session.d.ts.map +1 -1
  196. package/dist/cli/src/commands/source.d.ts +14 -0
  197. package/dist/cli/src/commands/source.d.ts.map +1 -1
  198. package/dist/cli/src/commands/tree.d.ts.map +1 -1
  199. package/dist/cli/src/commands/update.d.ts.map +1 -1
  200. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  201. package/dist/cli/src/flow-discovery.d.ts +8 -5
  202. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  203. package/dist/cli/src/open-library.d.ts +0 -11
  204. package/dist/cli/src/open-library.d.ts.map +1 -1
  205. package/dist/cli/src/skill-checks.d.ts +11 -2
  206. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  207. package/dist/connectors/config.js +5 -5
  208. package/dist/connectors/index.js +25 -26
  209. package/dist/connectors/src/access-policy.d.ts +33 -0
  210. package/dist/connectors/src/access-policy.d.ts.map +1 -0
  211. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  212. package/dist/connectors/src/index.d.ts +2 -0
  213. package/dist/connectors/src/index.d.ts.map +1 -1
  214. package/dist/connectors-O6Y6VESP.js +44 -0
  215. package/dist/{connectors-SSOTIDHT.js.map → connectors-O6Y6VESP.js.map} +1 -1
  216. package/dist/connectors-shared/index.js +2 -2
  217. package/dist/core/index.js +8 -8
  218. package/dist/core/logging.js +1 -1
  219. package/dist/core/manifest.js +2 -2
  220. package/dist/core/models.js +1 -1
  221. package/dist/core/publish-manifest.js +2 -2
  222. package/dist/core/ref.js +1 -1
  223. package/dist/core/runtime-assets.js +5 -5
  224. package/dist/core/src/index.d.ts +3 -3
  225. package/dist/core/src/index.d.ts.map +1 -1
  226. package/dist/core/src/logging/config.d.ts +9 -1
  227. package/dist/core/src/logging/config.d.ts.map +1 -1
  228. package/dist/core/src/manifest.d.ts +11 -1
  229. package/dist/core/src/manifest.d.ts.map +1 -1
  230. package/dist/core/src/models.d.ts +14 -6
  231. package/dist/core/src/models.d.ts.map +1 -1
  232. package/dist/core/src/repo-manager.d.ts +41 -6
  233. package/dist/core/src/repo-manager.d.ts.map +1 -1
  234. package/dist/core/src/store.d.ts +16 -2
  235. package/dist/core/src/store.d.ts.map +1 -1
  236. package/dist/core/src/workspace-config.d.ts +10 -1
  237. package/dist/core/src/workspace-config.d.ts.map +1 -1
  238. package/dist/core/store.js +1 -1
  239. package/dist/core/workspace-config.js +4 -4
  240. package/dist/deploy/index.js +8 -8
  241. package/dist/discovery/index.js +5 -5
  242. package/dist/{ensure-sources-277VI7R3.js → ensure-sources-SKLNM4UZ.js} +18 -18
  243. package/dist/{ensure-sources-277VI7R3.js.map → ensure-sources-SKLNM4UZ.js.map} +1 -1
  244. package/dist/factory-assets/connectors/box.js +25 -26
  245. package/dist/factory-assets/connectors/deploy.js +25 -26
  246. package/dist/factory-assets/connectors/devserver.js +25 -26
  247. package/dist/factory-assets/connectors/flow/adapter.d.ts +6 -0
  248. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  249. package/dist/factory-assets/connectors/flow/adapter.js +25 -26
  250. package/dist/factory-assets/connectors/flow/contract/expression.d.ts +3 -0
  251. package/dist/factory-assets/connectors/flow/contract/expression.d.ts.map +1 -1
  252. package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts +1 -1
  253. package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts.map +1 -1
  254. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
  255. package/dist/factory-assets/connectors/flow/contract.js +4 -4
  256. package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts +4 -3
  257. package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts.map +1 -1
  258. package/dist/factory-assets/connectors/flow/engine/output-schema.d.ts +6 -1
  259. package/dist/factory-assets/connectors/flow/engine/output-schema.d.ts.map +1 -1
  260. package/dist/factory-assets/connectors/flow/engine.js +12 -12
  261. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  262. package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -3
  263. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  264. package/dist/factory-assets/connectors/flow/run-flow.js +27 -28
  265. package/dist/factory-assets/connectors/flow.js +25 -26
  266. package/dist/factory-assets/connectors/git/config.d.ts.map +1 -1
  267. package/dist/factory-assets/connectors/git.js +25 -26
  268. package/dist/factory-assets/connectors/gmail.js +25 -26
  269. package/dist/factory-assets/connectors/googledrive.js +25 -26
  270. package/dist/factory-assets/connectors/local.js +25 -26
  271. package/dist/factory-assets/connectors/mattermost.js +25 -26
  272. package/dist/factory-assets/connectors/memory.js +25 -26
  273. package/dist/factory-assets/connectors/minio.js +25 -26
  274. package/dist/factory-assets/connectors/postgres.js +25 -26
  275. package/dist/factory-assets/connectors/s3.js +25 -26
  276. package/dist/factory-assets/connectors/sharepoint.js +25 -26
  277. package/dist/factory-assets/connectors/sqlite.js +25 -26
  278. package/dist/factory-assets/connectors/static-server.js +25 -26
  279. package/dist/factory-assets/connectors/tunnel.js +25 -26
  280. package/dist/factory-assets/connectors/webdav.js +25 -26
  281. package/dist/factory-assets/connectors/xstate-store.js +25 -26
  282. package/dist/factory-assets/connectors/xstate.js +25 -26
  283. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +10 -7
  284. package/dist/{flows-J2UEU2QM.js → flows-CBYRSAGS.js} +13 -13
  285. package/dist/{flows-J2UEU2QM.js.map → flows-CBYRSAGS.js.map} +1 -1
  286. package/dist/{helpers-KC5O7CML.js → helpers-MWZDRBLD.js} +18 -18
  287. package/dist/{helpers-KC5O7CML.js.map → helpers-MWZDRBLD.js.map} +1 -1
  288. package/dist/library/index.js +12 -12
  289. package/dist/library/install.js +3 -3
  290. package/dist/library/src/index.d.ts +3 -1
  291. package/dist/library/src/index.d.ts.map +1 -1
  292. package/dist/library/src/local/scan-authoring-libraries.d.ts +43 -0
  293. package/dist/library/src/local/scan-authoring-libraries.d.ts.map +1 -0
  294. package/dist/library/src/manifest-writer.d.ts +26 -3
  295. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  296. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  297. package/dist/{library-publish-FGXF5TJO.js → library-publish-PICMDSB2.js} +73 -37
  298. package/dist/library-publish-PICMDSB2.js.map +1 -0
  299. package/dist/open-library-OG457THY.js +40 -0
  300. package/dist/{open-library-P3D337NH.js.map → open-library-OG457THY.js.map} +1 -1
  301. package/dist/open-registry-ZUZJ7MS7.js +32 -0
  302. package/dist/{open-registry-Z3P2X2AB.js.map → open-registry-ZUZJ7MS7.js.map} +1 -1
  303. package/dist/paths-FQ64OLJG.js +22 -0
  304. package/dist/{paths-JKEKXM52.js.map → paths-FQ64OLJG.js.map} +1 -1
  305. package/dist/{plugin-store-WI4MZJLP.js → plugin-store-MPAMD5OT.js} +10 -10
  306. package/dist/{plugin-store-WI4MZJLP.js.map → plugin-store-MPAMD5OT.js.map} +1 -1
  307. package/dist/project-2GFT5LEZ.js +41 -0
  308. package/dist/{project-WFUDVYNN.js.map → project-2GFT5LEZ.js.map} +1 -1
  309. package/dist/resolver/index.js +9 -9
  310. package/dist/runner/index.js +40 -41
  311. package/dist/runner/src/logging-bootstrap.d.ts +6 -0
  312. package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
  313. package/dist/runner/src/reconfigure-handler.d.ts +38 -17
  314. package/dist/runner/src/reconfigure-handler.d.ts.map +1 -1
  315. package/dist/runner/src/serve.d.ts.map +1 -1
  316. package/dist/runner/src/session-capability-wiring.d.ts +0 -2
  317. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  318. package/dist/sdk/asset-manager.js +15 -15
  319. package/dist/sdk/bridge.js +16 -17
  320. package/dist/sdk/core.js +8 -8
  321. package/dist/sdk/flow.js +12 -12
  322. package/dist/sdk/index.js +68 -45
  323. package/dist/sdk/index.js.map +1 -1
  324. package/dist/sdk/resolver.js +9 -9
  325. package/dist/sdk/runner.js +40 -41
  326. package/dist/sdk/session.js +2 -2
  327. package/dist/sdk/src/agent-session.d.ts +8 -0
  328. package/dist/sdk/src/agent-session.d.ts.map +1 -1
  329. package/dist/sdk/store.js +2 -1
  330. package/dist/sdk/types.js +1 -1
  331. package/dist/session/index.js +2 -2
  332. package/dist/{setup-RAMLTORM.js → setup-WHMCSIF2.js} +26 -27
  333. package/dist/setup-WHMCSIF2.js.map +1 -0
  334. package/dist/skills-TVO26Y4V.js +26 -0
  335. package/dist/{skills-EOHZ2DZ4.js.map → skills-TVO26Y4V.js.map} +1 -1
  336. package/dist/source-LKOFTOEK.js +41 -0
  337. package/dist/{source-FYVSFYEI.js.map → source-LKOFTOEK.js.map} +1 -1
  338. package/dist/{source-manifest-publish-4FPIPPLV.js → source-manifest-publish-L5J3QXER.js} +27 -27
  339. package/dist/{source-manifest-publish-4FPIPPLV.js.map → source-manifest-publish-L5J3QXER.js.map} +1 -1
  340. package/dist/store/index.js +2 -1
  341. package/dist/store/src/store.d.ts +8 -5
  342. package/dist/store/src/store.d.ts.map +1 -1
  343. package/dist/tui/index.js +40 -41
  344. package/dist/tui/index.js.map +1 -1
  345. package/dist/types/index.js +1 -1
  346. package/dist/types/manifests.js +1 -1
  347. package/dist/types/src/ask-slots.d.ts +68 -0
  348. package/dist/types/src/ask-slots.d.ts.map +1 -0
  349. package/dist/types/src/delivery.d.ts.map +1 -1
  350. package/dist/types/src/events.d.ts +29 -1
  351. package/dist/types/src/events.d.ts.map +1 -1
  352. package/dist/types/src/index.d.ts +1 -1
  353. package/dist/types/src/index.d.ts.map +1 -1
  354. package/dist/types/src/manifests/index.d.ts +1 -1
  355. package/dist/types/src/manifests/index.d.ts.map +1 -1
  356. package/dist/types/src/manifests/preset.d.ts +4 -0
  357. package/dist/types/src/manifests/preset.d.ts.map +1 -1
  358. package/dist/types/src/version.d.ts +12 -1
  359. package/dist/types/src/version.d.ts.map +1 -1
  360. package/dist/workspace-plugin/adapters/mcp.js +32 -33
  361. package/dist/workspace-plugin/adapters/omp.js +14 -14
  362. package/dist/workspace-plugin/index.js +2 -2
  363. package/package.json +1 -1
  364. package/dist/asset-feeds-K36CR52Q.js.map +0 -1
  365. package/dist/chunk-6C654TFI.js.map +0 -1
  366. package/dist/chunk-74EEFB52.js.map +0 -1
  367. package/dist/chunk-BTK7ECLH.js.map +0 -1
  368. package/dist/chunk-CWM3MYGX.js.map +0 -1
  369. package/dist/chunk-D5HOETOB.js.map +0 -1
  370. package/dist/chunk-DFFD4BFG.js.map +0 -1
  371. package/dist/chunk-DMLDYFDS.js.map +0 -1
  372. package/dist/chunk-EINLFFP6.js +0 -59
  373. package/dist/chunk-EINLFFP6.js.map +0 -1
  374. package/dist/chunk-EU3Q5AQ4.js.map +0 -1
  375. package/dist/chunk-FRHE7FFB.js.map +0 -1
  376. package/dist/chunk-G67BOI2J.js.map +0 -1
  377. package/dist/chunk-GIC3G5YG.js.map +0 -1
  378. package/dist/chunk-IZLQ4GDO.js.map +0 -1
  379. package/dist/chunk-JMKB7IB4.js.map +0 -1
  380. package/dist/chunk-LBQ4BBX4.js.map +0 -1
  381. package/dist/chunk-LCU5U5IW.js.map +0 -1
  382. package/dist/chunk-LXY4BUA3.js.map +0 -1
  383. package/dist/chunk-MKLBK7HI.js.map +0 -1
  384. package/dist/chunk-O7VPNKYN.js.map +0 -1
  385. package/dist/chunk-OKGUDNDT.js.map +0 -1
  386. package/dist/chunk-QCI6D7E4.js.map +0 -1
  387. package/dist/chunk-SZWRPEF7.js.map +0 -1
  388. package/dist/chunk-TTPSDC2G.js.map +0 -1
  389. package/dist/chunk-VOOI7B2L.js.map +0 -1
  390. package/dist/chunk-XBSQ4KMC.js.map +0 -1
  391. package/dist/connectors-SSOTIDHT.js +0 -45
  392. package/dist/library-publish-FGXF5TJO.js.map +0 -1
  393. package/dist/open-library-P3D337NH.js +0 -40
  394. package/dist/open-registry-Z3P2X2AB.js +0 -32
  395. package/dist/paths-JKEKXM52.js +0 -22
  396. package/dist/project-WFUDVYNN.js +0 -41
  397. package/dist/setup-RAMLTORM.js.map +0 -1
  398. package/dist/skills-EOHZ2DZ4.js +0 -26
  399. package/dist/source-FYVSFYEI.js +0 -41
@@ -1,29 +1,30 @@
1
1
  import { formatDroppedToolsNotice, filterInProcessMcpServerTools, checkToolPropertyKeys } from '../../chunk-X5O56UO4.js';
2
- import { scrubPoisonedTranscript, transcriptStoreForRuntime, resolveClaudeConfigDir, claudeEndpointMode, buildClaudeEndpointEnv } from '../../chunk-UX3K4RKE.js';
3
- import { scopeReconfigureModel } from '../../chunk-EINLFFP6.js';
4
- import { dispatchCapability } from '../../chunk-NARITJS2.js';
5
- import { fetchProviderModels } from '../../chunk-GWXFSLBK.js';
6
- import { AuthError, stripRunnerPrivateEnv, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable, AccountUnavailableError, isLongContextEntitlementRejection, LONG_CONTEXT_CREDITS_API_ERROR } from '../../chunk-XBSQ4KMC.js';
2
+ import { freshBudget, isFirstAttempt, spend, isSpent, decide, isAvailable } from '../../chunk-IZCR27MU.js';
3
+ import { AskSlots } from '../../chunk-EPBKISS5.js';
4
+ import { scrubPoisonedTranscript, transcriptStoreForRuntime, resolveClaudeConfigDir, claudeEndpointMode, buildClaudeEndpointEnv } from '../../chunk-S53LOR7B.js';
5
+ import { dispatchCapability } from '../../chunk-GCICGXDD.js';
6
+ import { fetchProviderModels } from '../../chunk-PTSGWKHR.js';
7
+ import { ReconfigureLedger, AuthError, stripRunnerPrivateEnv, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable, AccountUnavailableError, isLongContextEntitlementRejection, LONG_CONTEXT_CREDITS_API_ERROR } from '../../chunk-B4X2N7JQ.js';
7
8
  import { agentExecRequested, wrapAgentCommand, resolveAgentExec } from '../../chunk-YROR332M.js';
8
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger, entryCredentialValue, registryDriverConfig } from '../../chunk-BTK7ECLH.js';
9
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger, entryCredentialValue, registryDriverConfig } from '../../chunk-AWQYXZVG.js';
9
10
  import '../../chunk-6E6PKKAD.js';
10
- import { withActivityLabelShape } from '../../chunk-DMLDYFDS.js';
11
- import '../../chunk-FRHE7FFB.js';
12
- import '../../chunk-OOLT6HGP.js';
11
+ import { withActivityLabelShape } from '../../chunk-F3RDEH5U.js';
12
+ import '../../chunk-B6GIW55K.js';
13
+ import '../../chunk-36AFURKZ.js';
13
14
  import '../../chunk-4GY63JU6.js';
14
- import '../../chunk-SWO25LTO.js';
15
- import '../../chunk-G67BOI2J.js';
15
+ import '../../chunk-GB7WDMH2.js';
16
+ import '../../chunk-PMECEZK3.js';
16
17
  import '../../chunk-5BEFNLOR.js';
17
18
  import '../../chunk-A2ULN3KX.js';
18
- import '../../chunk-LCU5U5IW.js';
19
+ import '../../chunk-JAKOMFC6.js';
19
20
  import '../../chunk-L5VSIPQD.js';
20
21
  import '../../chunk-CPSIPIX7.js';
21
- import '../../chunk-RVIZQ5XD.js';
22
+ import '../../chunk-BTE2V4IW.js';
22
23
  import '../../chunk-RVRB27AN.js';
23
- import '../../chunk-TTPSDC2G.js';
24
- import '../../chunk-O7VPNKYN.js';
24
+ import '../../chunk-GTILM2CI.js';
25
+ import '../../chunk-QVNRCDTV.js';
25
26
  import '../../chunk-ICSCSM5D.js';
26
- import '../../chunk-JMKB7IB4.js';
27
+ import '../../chunk-UMVKJM4Q.js';
27
28
  import { mergeRegistries, parseModelRef, isEntryEnabled, resolveEntryBaseUrl } from '../../chunk-MJHSLODD.js';
28
29
  import '../../chunk-C3CAXQMA.js';
29
30
  import { createLogger } from '../../chunk-BOFL7GIF.js';
@@ -305,9 +306,6 @@ if (typeof globalThis.require === "undefined") {
305
306
  }
306
307
  }
307
308
  var LIVE_SET_MODEL_TIMEOUT_MS = 5e3;
308
- function freshRetryBudget() {
309
- return { staleResume: false, poison: false, auth: false, queryEnded: false, limit: false };
310
- }
311
309
  function isSeatCapacityFailure(detail, subtype) {
312
310
  if (detail.category !== "rate_limit") return false;
313
311
  if (subtype === "error_max_budget_usd") return false;
@@ -357,10 +355,6 @@ function apiErrorExcerpt(text) {
357
355
  ).replace(/\b(access_token|api_key|token|key|sig|signature)=[^\s&"]+/gi, "$1=[redacted]").replace(/\b(sk-ant-|sk-)[A-Za-z0-9_-]{6,}/g, "[redacted]").replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, "[redacted]");
358
356
  return masked.length > API_ERROR_EXCERPT_MAX ? `${masked.slice(0, API_ERROR_EXCERPT_MAX)}\u2026` : masked;
359
357
  }
360
- var STALE_RESUME_PATTERN = /No conversation found with session ID/i;
361
- function isPoisonedHistoryError(message) {
362
- return /invalid_request_error/i.test(message) && /media[_ ]?type|could not process image|image exceeds|cache_control/i.test(message);
363
- }
364
358
  function snapshotProcessEnv() {
365
359
  const env = {};
366
360
  for (const [k, v] of Object.entries(process.env)) {
@@ -559,10 +553,6 @@ var ClaudeSdkDriver = class extends AgentDriver {
559
553
  * {@link shouldRecycleQuery}; reset on every fresh spawn.
560
554
  */
561
555
  lastNumTurns = null;
562
- /** What the resident query runs; `null` until the first spawn. */
563
- liveQueryConfig = null;
564
- /** A config change the resident query cannot take live: respawn at the next turn. */
565
- recycleForConfig = false;
566
556
  /**
567
557
  * The capability tool set the resident query's `skaile-capabilities` server
568
558
  * was built from ({@link capabilityToolsKey}); `null` without capability hooks.
@@ -571,8 +561,8 @@ var ClaudeSdkDriver = class extends AgentDriver {
571
561
  * respawn rebuilds the server — see {@link capabilityToolsChanged}.
572
562
  */
573
563
  liveCapabilityToolsKey = null;
574
- /** In-flight {@link syncLiveQueryConfig} chain, so switches apply in order. */
575
- liveConfigSync = null;
564
+ /** Owns the desired config, drift and ordering of live reconfigures. */
565
+ reconfig;
576
566
  /** {@link LIVE_SET_MODEL_TIMEOUT_MS}, as a field so tests can shorten it. */
577
567
  setModelTimeoutMs = LIVE_SET_MODEL_TIMEOUT_MS;
578
568
  /**
@@ -607,30 +597,24 @@ var ClaudeSdkDriver = class extends AgentDriver {
607
597
  */
608
598
  errorResultGraceTimer = null;
609
599
  /**
610
- * Mirror of the in-flight {@link prompt} call's auth retry budget: `false`
611
- * while the `onAuthError` self-heal is still available, `true` once it has
612
- * been spent. Read by {@link failTurn} to decide whether to defer the
613
- * `agent-event: error` emission for a self-healable auth error.
600
+ * The in-flight turn's recovery budget: which one-shot recoveries (stale
601
+ * resume, poison scrub, auth refresh, limit failover, query-ended replay) have
602
+ * been spent. Owned by the recovery policy; the single source for "was this
603
+ * kind already spent?" and "is it still available?".
614
604
  *
615
605
  * Set unconditionally at the top of every {@link runPrompt} attempt; never
616
- * reset elsewhere — the next call's set is the only legitimate transition.
617
- */
618
- authSelfHealUsed = false;
619
- /**
620
- * Mirror of the in-flight turn's seat-failover budget — same contract as
621
- * {@link authSelfHealUsed}, for the `onLimitBlocked` path.
622
- */
623
- limitFailoverUsed = false;
624
- /**
625
- * Mirror of the in-flight turn's stale-resume retry budget — same contract as
626
- * {@link authSelfHealUsed}, for the "No conversation found" fresh-session retry.
606
+ * reset elsewhere — the next attempt's set is the only legitimate transition.
627
607
  */
628
- staleResumeRetryUsed = false;
608
+ recoveryBudget = freshBudget();
629
609
  /**
630
- * Mirror of the in-flight turn's poisoned-transcript scrub budget — same
631
- * contract as {@link authSelfHealUsed}.
610
+ * The recovery policy's answer for the failure that rejected this attempt,
611
+ * recorded where the failure was classified ({@link failTurn}, or the
612
+ * dispatch-failure site in {@link consumeMessages}). {@link failTurn} defers
613
+ * the error event on it and {@link runPrompt}'s catch carries it out — the
614
+ * policy is never consulted a second time for the same failure. `null` until
615
+ * a failure is recorded; cleared at every attempt start and turn end.
632
616
  */
633
- poisonScrubUsed = false;
617
+ recoveryDecision = null;
634
618
  /**
635
619
  * Set when THIS attempt saw an upstream usage-limit rejection: either the
636
620
  * SDK's `rate_limit_event` telemetry with `status: "rejected"`, or an error
@@ -775,6 +759,13 @@ var ClaudeSdkDriver = class extends AgentDriver {
775
759
  constructor(config) {
776
760
  super();
777
761
  this.config = config;
762
+ this.reconfig = new ReconfigureLedger({
763
+ config: () => this.config,
764
+ isLive: () => this.query != null,
765
+ isIdle: () => !this.running,
766
+ applyLive: (delta, live) => this.applyLive(delta, live),
767
+ log: this.log
768
+ });
778
769
  }
779
770
  get runtimeSessionId() {
780
771
  return this.sessionId || void 0;
@@ -786,76 +777,35 @@ var ClaudeSdkDriver = class extends AgentDriver {
786
777
  * applies at the start of the next one, as omp does). A change it cannot take
787
778
  * live (thinking/effort, a model on another registry entry, a rejected or
788
779
  * timed-out `setModel`) recycles the query at the next turn boundary, so the
789
- * fresh CLI resumes with the new config.
780
+ * fresh CLI resumes with the new config. The {@link ReconfigureLedger} owns
781
+ * the scope rule, ordering and drift; {@link applyLive} is this driver's hook.
790
782
  */
791
783
  reconfigure(patch) {
792
- if (patch.model !== void 0) {
793
- const scope = scopeReconfigureModel({
794
- model: patch.model,
795
- modelRef: this.config.modelRef,
796
- registry: this.config.registry,
797
- roles: this.config.roles
798
- });
799
- if (scope.ok) {
800
- this.config.model = patch.model;
801
- if (scope.modelRef !== void 0) this.config.modelRef = scope.modelRef;
802
- } else {
803
- this.log.warn("model change refused; keeping the current model", {
804
- model: patch.model,
805
- providerId: scope.providerId
806
- });
807
- }
808
- }
809
- if (patch.thinking !== void 0) this.config.thinking = patch.thinking;
810
- if (patch.effort !== void 0) this.config.effort = patch.effort;
811
- if (this.query && !this.running) void this.syncLiveQueryConfig();
812
- }
813
- /** Whether the driver config moved away from what the resident query runs. */
814
- liveConfigDrifted() {
815
- const live = this.liveQueryConfig;
816
- if (!this.query || !live) return false;
817
- const { model, modelRef, thinking, effort } = this.config;
818
- return model !== live.model || modelRef !== live.modelRef || thinking !== live.thinking || effort !== live.effort;
819
- }
820
- /** Queue {@link applyConfigToLiveQuery} behind any switch still in flight. */
821
- syncLiveQueryConfig() {
822
- const next = (this.liveConfigSync ?? Promise.resolve()).then(
823
- () => this.applyConfigToLiveQuery()
824
- );
825
- this.liveConfigSync = next;
826
- void next.finally(() => {
827
- if (this.liveConfigSync === next) this.liveConfigSync = null;
828
- });
829
- return next;
784
+ return this.reconfig.reconfigure(patch);
830
785
  }
831
- /** Bring the resident query in line with the driver config. Never rejects. */
832
- async applyConfigToLiveQuery() {
786
+ /** Bring the resident query in line with a drifted config. Never rejects. */
787
+ async applyLive(delta, live) {
833
788
  const query = this.query;
834
- const live = this.liveQueryConfig;
835
- if (!query || !live || this.recycleForConfig || !this.liveConfigDrifted()) return;
836
- const { model, modelRef, thinking, effort } = this.config;
837
- const recycle = (reason, data = {}) => {
838
- this.recycleForConfig = true;
789
+ if (!query) return "respawn";
790
+ const respawn = (reason, data = {}) => {
839
791
  this.log.info("config change needs a fresh query; recycling at the next turn", {
840
792
  reason,
841
793
  ...data
842
794
  });
795
+ return "respawn";
843
796
  };
844
797
  try {
845
- if (thinking !== live.thinking || effort !== live.effort) {
846
- recycle("thinking_or_effort");
847
- return;
798
+ if (delta.thinking !== void 0 || delta.effort !== void 0) {
799
+ return respawn("thinking_or_effort");
848
800
  }
849
801
  const endpoint = this.resolveEndpoint();
850
802
  if (endpoint.providerId !== live.providerId) {
851
- recycle("provider_changed", { from: live.providerId, to: endpoint.providerId });
852
- return;
803
+ return respawn("provider_changed", { from: live.providerId, to: endpoint.providerId });
853
804
  }
854
- const providerModel = endpoint.model || model || "sonnet";
805
+ const providerModel = endpoint.model || this.config.model || "sonnet";
855
806
  if (providerModel !== live.providerModel) {
856
807
  if (this.inputStream == null || this.inputStream.ended || this.shouldRecycleQuery()) {
857
- recycle("query_due_for_recycle");
858
- return;
808
+ return respawn("query_due_for_recycle");
859
809
  }
860
810
  let timer;
861
811
  try {
@@ -871,17 +821,18 @@ var ClaudeSdkDriver = class extends AgentDriver {
871
821
  } finally {
872
822
  clearTimeout(timer);
873
823
  }
874
- if (this.query !== query) return;
824
+ if (this.query !== query) return "applied";
875
825
  this.log.info("switched the resident query's model", {
876
826
  from: live.providerModel,
877
827
  to: providerModel
878
828
  });
829
+ live.providerModel = providerModel;
879
830
  }
880
- Object.assign(live, { model, modelRef, providerModel });
831
+ return "applied";
881
832
  } catch (err) {
882
- if (this.query === query) {
883
- recycle("set_model_failed", { error: err instanceof Error ? err.message : String(err) });
884
- }
833
+ return respawn("set_model_failed", {
834
+ error: err instanceof Error ? err.message : String(err)
835
+ });
885
836
  }
886
837
  }
887
838
  getModel() {
@@ -920,7 +871,9 @@ var ClaudeSdkDriver = class extends AgentDriver {
920
871
  */
921
872
  prompt(message) {
922
873
  this.supersedePendingQuestion();
923
- const queuedPrompt = this.promptTail.then(() => this.runPrompt(message, freshRetryBudget()));
874
+ const queuedPrompt = this.promptTail.then(
875
+ () => this.runPrompt(message, freshBudget())
876
+ );
924
877
  this.promptTail = queuedPrompt.then(
925
878
  () => void 0,
926
879
  () => void 0
@@ -933,13 +886,11 @@ var ClaudeSdkDriver = class extends AgentDriver {
933
886
  * Retries recurse here rather than through {@link prompt}, so they cannot
934
887
  * enqueue behind themselves and deadlock.
935
888
  */
936
- async runPrompt(message, _budget) {
889
+ async runPrompt(message, budget) {
937
890
  if (this.killed) throw new Error(KILLED_TURN_MESSAGE);
938
891
  if (!this.sdk) await this.start();
939
- this.authSelfHealUsed = _budget.auth;
940
- this.limitFailoverUsed = _budget.limit;
941
- this.staleResumeRetryUsed = _budget.staleResume;
942
- this.poisonScrubUsed = _budget.poison;
892
+ this.recoveryBudget = budget;
893
+ this.recoveryDecision = null;
943
894
  this.limitRejectionSeen = false;
944
895
  this.limitTurnRejectedForFailover = false;
945
896
  this.providerResponseReported = false;
@@ -948,8 +899,8 @@ var ClaudeSdkDriver = class extends AgentDriver {
948
899
  this.deferredTurnError = null;
949
900
  this.heldFailoverResult = null;
950
901
  let retrying = false;
951
- const isFirstAttempt = !_budget.staleResume && !_budget.poison && !_budget.auth && !_budget.queryEnded && !_budget.limit;
952
- if (isFirstAttempt) {
902
+ const isFirstAttempt2 = isFirstAttempt(budget);
903
+ if (isFirstAttempt2) {
953
904
  this._lastTokens = null;
954
905
  this._lastContextTokens = null;
955
906
  this._lastModelUsage = null;
@@ -963,8 +914,8 @@ var ClaudeSdkDriver = class extends AgentDriver {
963
914
  this.lastApiErrorRender = null;
964
915
  this.turnCompleted = false;
965
916
  this.disarmErrorResultGrace();
966
- if (this.liveConfigSync || this.liveConfigDrifted()) await this.syncLiveQueryConfig();
967
- if (this.query && (this.inputStream == null || this.inputStream.ended || this.recycleForConfig || this.shouldRecycleQuery() || this.capabilityToolsChanged())) {
917
+ await this.reconfig.flushBeforeTurn();
918
+ if (this.query && (this.inputStream == null || this.inputStream.ended || this.reconfig.needsRespawn || this.shouldRecycleQuery() || this.capabilityToolsChanged())) {
968
919
  this.recycleQueryForNextTurn();
969
920
  }
970
921
  const turnPromise = new Promise((resolve, reject) => {
@@ -989,35 +940,33 @@ var ClaudeSdkDriver = class extends AgentDriver {
989
940
  await turnPromise;
990
941
  } catch (err) {
991
942
  if (this.killed) throw err;
992
- if (!_budget.queryEnded && err instanceof QueryEndedBeforeTurnError) {
943
+ const decision = this.recoveryDecision;
944
+ const attempt = decision && "attempt" in decision ? decision.attempt : null;
945
+ if (attempt === "query_ended_replay") {
993
946
  this.log.warn("turn was enqueued into an ending query; replaying on a fresh one");
994
947
  this.retractUnfinishedText();
995
948
  retrying = true;
996
- return this.runPrompt(message, { ..._budget, queryEnded: true });
949
+ return this.runPrompt(message, spend(budget, attempt));
997
950
  }
998
- const errMsg = err instanceof Error ? err.message : String(err);
999
- const isStaleResume = !_budget.staleResume && STALE_RESUME_PATTERN.test(errMsg);
1000
- if (isStaleResume) {
951
+ if (attempt === "stale_resume") {
1001
952
  this.prepareStaleResumeRetry();
1002
953
  retrying = true;
1003
- return this.runPrompt(message, { ..._budget, staleResume: true });
954
+ return this.runPrompt(message, spend(budget, attempt));
1004
955
  }
1005
- const isPoisonedHistory = !_budget.poison && isPoisonedHistoryError(errMsg);
1006
- const poisonSessionId = this.config.resumeSessionId || this.sessionId;
1007
- if (isPoisonedHistory && poisonSessionId) {
1008
- if (await this.attemptPoisonScrubRetry(poisonSessionId)) {
956
+ if (attempt === "poison_scrub") {
957
+ const poisonSessionId = this.config.resumeSessionId || this.sessionId;
958
+ if (poisonSessionId && await this.attemptPoisonScrubRetry(poisonSessionId)) {
1009
959
  retrying = true;
1010
- return this.runPrompt(message, { ..._budget, poison: true });
960
+ return this.runPrompt(message, spend(budget, attempt));
1011
961
  }
1012
962
  }
1013
- const authOwns = err instanceof AuthError && !_budget.auth && this.config.onAuthError != null;
1014
- if (authOwns) {
963
+ if (attempt === "auth_refresh" && err instanceof AuthError) {
1015
964
  if (await this.attemptAuthSelfHeal(err)) {
1016
965
  this.retractUnfinishedText();
1017
966
  retrying = true;
1018
- return this.runPrompt(message, { ..._budget, auth: true });
967
+ return this.runPrompt(message, spend(budget, attempt));
1019
968
  }
1020
- } else if (!_budget.limit && this.limitRejectionSeen && this.config.onLimitBlocked) {
969
+ } else if (attempt === "limit_failover") {
1021
970
  if (await this.attemptLimitFailover(err)) {
1022
971
  if (this.abortController?.signal.aborted) {
1023
972
  this.log.info("aborted during the seat failover; not replaying the prompt");
@@ -1030,7 +979,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
1030
979
  this.heldFailoverResult = null;
1031
980
  this.retractUnfinishedText();
1032
981
  retrying = true;
1033
- return this.runPrompt(message, { ..._budget, limit: true });
982
+ return this.runPrompt(message, spend(budget, attempt));
1034
983
  }
1035
984
  if (this.limitTurnRejectedForFailover) {
1036
985
  this.emitAgentEnd();
@@ -1050,6 +999,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
1050
999
  this.limitTurnRejectedForFailover = false;
1051
1000
  this.lastLimitInfo = null;
1052
1001
  this.deferredTurnError = null;
1002
+ this.recoveryDecision = null;
1053
1003
  this.heldFailoverResult = null;
1054
1004
  this.failoverUsageCarry = null;
1055
1005
  this.suppressedAuthRenderText = null;
@@ -1788,12 +1738,11 @@ var ClaudeSdkDriver = class extends AgentDriver {
1788
1738
  };
1789
1739
  if (apiKey) queryArgs.apiKey = apiKey;
1790
1740
  this.query = query(queryArgs);
1791
- this.recycleForConfig = false;
1792
- this.liveQueryConfig = {
1741
+ this.reconfig.setSnapshot({
1793
1742
  ...spawnConfig,
1794
1743
  providerId: endpoint.providerId,
1795
1744
  providerModel: String(options.model)
1796
- };
1745
+ });
1797
1746
  this.consumeMessages().catch((err) => {
1798
1747
  this.log.error("message loop terminated unexpectedly", err);
1799
1748
  });
@@ -1829,6 +1778,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
1829
1778
  resolve,
1830
1779
  originalInput: input,
1831
1780
  questionTexts,
1781
+ slots: new AskSlots(questionTexts),
1832
1782
  answers: {}
1833
1783
  };
1834
1784
  opts.signal.addEventListener(
@@ -1848,11 +1798,11 @@ var ClaudeSdkDriver = class extends AgentDriver {
1848
1798
  answerQuestion(answer, question) {
1849
1799
  const pending = this.pendingQuestion;
1850
1800
  if (!pending) return false;
1851
- const key = question !== void 0 && pending.questionTexts.includes(question) ? question : pending.questionTexts.find((q) => !Object.hasOwn(pending.answers, q));
1852
- if (key !== void 0) {
1853
- pending.answers[key] = answer;
1801
+ const { slot, complete } = pending.slots.answer(question);
1802
+ if (slot !== void 0) {
1803
+ pending.answers[slot] = answer;
1854
1804
  }
1855
- if (pending.questionTexts.every((q) => Object.hasOwn(pending.answers, q))) {
1805
+ if (complete) {
1856
1806
  this.pendingQuestion = null;
1857
1807
  this.lastSdkMessageAt = Date.now();
1858
1808
  pending.resolve({
@@ -2064,11 +2014,11 @@ var ClaudeSdkDriver = class extends AgentDriver {
2064
2014
  this.endInputStream();
2065
2015
  const neverDispatched = !this.turnCompleted && this.turnReject != null && !this.firstSdkMessageSeen && !this.abortController?.signal.aborted;
2066
2016
  if (neverDispatched) {
2067
- this.rejectTurnSilently(
2068
- new QueryEndedBeforeTurnError(
2069
- "The model process ended before this turn was dispatched."
2070
- )
2017
+ const neverDispatchedErr = new QueryEndedBeforeTurnError(
2018
+ "The model process ended before this turn was dispatched."
2071
2019
  );
2020
+ this.recoveryDecision = this.decideRecovery(neverDispatchedErr);
2021
+ this.rejectTurnSilently(neverDispatchedErr);
2072
2022
  } else {
2073
2023
  this.completeTurn();
2074
2024
  }
@@ -2101,7 +2051,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
2101
2051
  errors: [error.message],
2102
2052
  oauthCredential: this.usingOauthCredential
2103
2053
  });
2104
- const detail = rawDetail.category === "auth" && this.authSelfHealUsed ? reclassifyAuthAsAccountUnavailable(rawDetail) : rawDetail;
2054
+ const detail = rawDetail.category === "auth" && isSpent(this.recoveryBudget, "auth_refresh") ? reclassifyAuthAsAccountUnavailable(rawDetail) : rawDetail;
2105
2055
  this.log.error("consumer error", {
2106
2056
  message: error.message,
2107
2057
  category: detail.category,
@@ -2192,13 +2142,15 @@ var ClaudeSdkDriver = class extends AgentDriver {
2192
2142
  * caller transitions even if the listener chain misbehaves; the emit is
2193
2143
  * wrapped in try/catch so a listener failure cannot leak out.
2194
2144
  *
2195
- * Self-heal deferral: when the failure is an {@link AuthError} and the auth
2196
- * self-heal budget is still available (`!authSelfHealUsed`) AND the caller
2197
- * wired an `onAuthError` callback, the downstream `agent-event: error`
2198
- * emission is deferred. The rejected turn promise still travels to
2199
- * {@link prompt}'s catch block where the self-heal runs; if the retry
2200
- * succeeds the user never sees a 401, if the retry fails the second
2201
- * `failTurn` call (now with `authSelfHealUsed === true`) emits the error
2145
+ * Recovery deferral: the recovery policy is asked ONCE per failure
2146
+ * ({@link decideRecovery}) — unless the caller already decided and passes its
2147
+ * answer as `decided` — and the answer is recorded on the turn. When it names
2148
+ * an attempt, the downstream `agent-event: error` emission is deferred: the
2149
+ * rejected turn promise still travels to {@link runPrompt}'s catch, which
2150
+ * carries out that recorded attempt. If the attempt succeeds the user never
2151
+ * sees the failure (a 401 self-heal, a seat switch, a stale-resume replay);
2152
+ * if it declines, the catch emits the held-back error exactly once. A retry
2153
+ * that fails again is decided afresh against the spent budget, so it emits
2202
2154
  * normally. This stops the historical "401 flashes in the UI even though
2203
2155
  * self-heal worked" misbehaviour where the bridge emitted the error event
2204
2156
  * before the retry decision was known.
@@ -2207,7 +2159,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
2207
2159
  * § "Runner-side handling on 401" (the AI 401 mediation path that
2208
2160
  * exposed this hang).
2209
2161
  */
2210
- failTurn(err, detail) {
2162
+ failTurn(err, detail, decided) {
2211
2163
  this.disarmTurnStallWatchdog();
2212
2164
  this.disarmErrorResultGrace();
2213
2165
  const hadPendingTurn = this.turnReject != null;
@@ -2222,54 +2174,43 @@ var ClaudeSdkDriver = class extends AgentDriver {
2222
2174
  error: err.message,
2223
2175
  ...detail ? { detail } : {}
2224
2176
  };
2225
- const willSelfHeal = err instanceof AuthError && !this.authSelfHealUsed && this.config.onAuthError != null;
2226
- if (hadPendingTurn && willSelfHeal) {
2227
- this.log.info("deferring auth-error event; self-heal will attempt refresh");
2228
- this.deferredTurnError = event;
2229
- return;
2230
- }
2231
- if (hadPendingTurn && this.willRetryStaleResume(err.message)) {
2232
- this.log.info("deferring stale-resume error event; retrying on a fresh session");
2233
- this.deferredTurnError = event;
2234
- return;
2235
- }
2236
- if (hadPendingTurn && this.willFailoverOnLimit()) {
2237
- this.log.info("deferring limit error event; seat failover will be attempted");
2238
- this.deferredTurnError = event;
2239
- return;
2240
- }
2241
- if (hadPendingTurn && this.willAttemptPoisonScrub(err.message)) {
2242
- this.log.info("deferring poisoned-history error event; a transcript scrub will be attempted");
2243
- this.deferredTurnError = event;
2244
- return;
2177
+ if (hadPendingTurn) {
2178
+ const decision = decided ?? this.decideRecovery(err);
2179
+ this.recoveryDecision = decision;
2180
+ if ("attempt" in decision) {
2181
+ this.log.info("deferring turn error event; recovery attempt pending", {
2182
+ attempt: decision.attempt
2183
+ });
2184
+ this.deferredTurnError = event;
2185
+ return;
2186
+ }
2245
2187
  }
2246
2188
  this.emitTurnErrorEvent(event);
2247
2189
  }
2248
2190
  /**
2249
- * Whether a usage-limit block on the current attempt still has a seat
2250
- * failover available. Evaluated identically by {@link failTurn} (to decide
2251
- * whether to withhold the error event) and by {@link handleResultErrorPayload}
2252
- * (to decide whether to reject the turn at all) — one predicate so the two
2253
- * can never disagree and strand a deferred event.
2191
+ * Ask the recovery policy what to do about `err`. Called once per failure, by
2192
+ * the code that classifies it; the answer is recorded in
2193
+ * {@link recoveryDecision} and acted on by {@link runPrompt}'s catch.
2254
2194
  */
2255
- willFailoverOnLimit() {
2256
- return this.limitRejectionSeen && !this.limitFailoverUsed && this.config.onLimitBlocked != null;
2257
- }
2258
- /**
2259
- * Whether `message` is a lost-transcript resume failure that `runPrompt` will
2260
- * still retry on a fresh session. The same test `runPrompt`'s catch applies,
2261
- * so a deferred error is always followed by the retry that drops it.
2262
- */
2263
- willRetryStaleResume(message) {
2264
- return !this.staleResumeRetryUsed && STALE_RESUME_PATTERN.test(message);
2195
+ decideRecovery(err) {
2196
+ return decide(
2197
+ {
2198
+ message: err.message,
2199
+ authError: err instanceof AuthError,
2200
+ limitRejected: this.limitRejectionSeen,
2201
+ queryEnded: err instanceof QueryEndedBeforeTurnError
2202
+ },
2203
+ this.recoveryBudget,
2204
+ this.recoveryWiring()
2205
+ );
2265
2206
  }
2266
- /**
2267
- * Whether `runPrompt`'s catch will attempt a transcript scrub for `message`.
2268
- * The scrub may still find nothing, so unlike {@link willRetryStaleResume}
2269
- * the deferred error is not always dropped: `runPrompt` flushes it then.
2270
- */
2271
- willAttemptPoisonScrub(message) {
2272
- return !this.poisonScrubUsed && isPoisonedHistoryError(message) && Boolean(this.config.resumeSessionId || this.sessionId);
2207
+ /** Which host callbacks and session state a recovery could use right now. */
2208
+ recoveryWiring() {
2209
+ return {
2210
+ onAuthError: this.config.onAuthError != null,
2211
+ onLimitBlocked: this.config.onLimitBlocked != null,
2212
+ resumableSessionId: Boolean(this.config.resumeSessionId || this.sessionId)
2213
+ };
2273
2214
  }
2274
2215
  /** Emit one `agent-event: error`, swallowing a throwing listener. */
2275
2216
  emitTurnErrorEvent(event) {
@@ -2532,12 +2473,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
2532
2473
  * why that is forced: `_devlog/notes/2026-06-08-auth-error-text-suppress.md`.
2533
2474
  */
2534
2475
  isSuppressibleAuthRenderText(text) {
2535
- if (!this.authSelfHealAvailable()) return false;
2536
- return this.textIsAuthRender(text) && isCliAuthRenderText(text);
2537
- }
2538
- /** Whether a 401 on this attempt can still be self-healed and retried. */
2539
- authSelfHealAvailable() {
2540
- return !this.authSelfHealUsed && this.config.onAuthError != null;
2476
+ return this.textIsAuthRender(text) && isCliAuthRenderText(text) && isAvailable(this.recoveryBudget, "auth_refresh", this.recoveryWiring());
2541
2477
  }
2542
2478
  /**
2543
2479
  * Stash a dropped auth render as evidence for {@link handleResultErrorPayload}.
@@ -2550,7 +2486,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
2550
2486
  * qualifies; requiring a marker only the CLI itself emits keeps that prose out.
2551
2487
  */
2552
2488
  stashSuppressedAuthRender(text) {
2553
- if (!this.authSelfHealAvailable()) return;
2489
+ if (!isAvailable(this.recoveryBudget, "auth_refresh", this.recoveryWiring())) return;
2554
2490
  if (!isCliAuthRenderText(text)) return;
2555
2491
  this.suppressedAuthRenderText = text;
2556
2492
  }
@@ -2752,7 +2688,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
2752
2688
  subtype: msg.subtype,
2753
2689
  oauthCredential: this.usingOauthCredential
2754
2690
  });
2755
- const detail = rawDetail.category === "auth" && this.authSelfHealUsed ? reclassifyAuthAsAccountUnavailable(rawDetail) : rawDetail;
2691
+ const detail = rawDetail.category === "auth" && isSpent(this.recoveryBudget, "auth_refresh") ? reclassifyAuthAsAccountUnavailable(rawDetail) : rawDetail;
2756
2692
  this.log.error("turn ended with error", {
2757
2693
  subtype: msg.subtype,
2758
2694
  terminalReason: msg.terminal_reason,
@@ -2775,7 +2711,9 @@ var ClaudeSdkDriver = class extends AgentDriver {
2775
2711
  });
2776
2712
  }
2777
2713
  const errorText = effectiveErrors.join("; ") || `Agent stopped: ${msg.subtype}`;
2778
- if (this.turnReject != null && this.willRetryStaleResume(errorText)) {
2714
+ const failure = detail.category === "auth" ? new AuthError({ ...detail, message: errorText }) : detail.category === "account" ? new AccountUnavailableError({ ...detail, message: errorText }) : new Error(errorText);
2715
+ const decision = this.decideRecovery(failure);
2716
+ if (this.turnReject != null && "attempt" in decision && decision.attempt === "stale_resume") {
2779
2717
  const detached = this.query;
2780
2718
  this.query = null;
2781
2719
  this.endInputStream();
@@ -2783,16 +2721,14 @@ var ClaudeSdkDriver = class extends AgentDriver {
2783
2721
  detached?.close();
2784
2722
  } catch {
2785
2723
  }
2786
- this.failTurn(new Error(errorText), detail);
2724
+ this.failTurn(new Error(errorText), detail, decision);
2787
2725
  return true;
2788
2726
  }
2789
- if (detail.category === "auth") {
2790
- this.failTurn(new AuthError({ ...detail, message: errorText }), detail);
2791
- } else if (detail.category === "account") {
2792
- this.failTurn(new AccountUnavailableError({ ...detail, message: errorText }), detail);
2793
- } else if (this.willFailoverOnLimit()) {
2727
+ if (detail.category === "auth" || detail.category === "account") {
2728
+ this.failTurn(failure, detail, decision);
2729
+ } else if ("attempt" in decision && decision.attempt === "limit_failover") {
2794
2730
  this.limitTurnRejectedForFailover = true;
2795
- this.failTurn(new Error(errorText), detail);
2731
+ this.failTurn(failure, detail, decision);
2796
2732
  } else if (errors.length > 0) {
2797
2733
  this.emit("agent-event", {
2798
2734
  type: "error",