@skaile/workspaces 0.29.1 → 0.31.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 (475) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/{asset-feeds-2V7LZIG7.js → asset-feeds-6HZDZEIT.js} +14 -13
  3. package/dist/asset-feeds-6HZDZEIT.js.map +1 -0
  4. package/dist/asset-manager/index.js +12 -12
  5. package/dist/asset-manager/installer.js +11 -11
  6. package/dist/asset-manager/renderers.js +2 -2
  7. package/dist/asset-manager/src/index.d.ts +27 -0
  8. package/dist/asset-manager/src/index.d.ts.map +1 -1
  9. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts +1 -2
  11. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  12. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  13. package/dist/bridge/drivers/claude-sdk.js +354 -224
  14. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  15. package/dist/bridge/drivers/codex.js +3 -3
  16. package/dist/bridge/drivers/codex.js.map +1 -1
  17. package/dist/bridge/drivers/continue.js +4 -4
  18. package/dist/bridge/drivers/echo.js +2 -2
  19. package/dist/bridge/drivers/echo.js.map +1 -1
  20. package/dist/bridge/drivers/gemini.js +5 -5
  21. package/dist/bridge/drivers/goose.js +4 -4
  22. package/dist/bridge/drivers/omp.js +3 -3
  23. package/dist/bridge/drivers/opencode.js +4 -4
  24. package/dist/bridge/drivers/qwen.js +5 -5
  25. package/dist/bridge/index.js +4 -4
  26. package/dist/bridge/src/drivers/claude-sdk.d.ts +68 -0
  27. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  28. package/dist/bridge/src/drivers/echo.d.ts +1 -1
  29. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  30. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  31. package/dist/bridge/src/normalizer.d.ts +5 -0
  32. package/dist/bridge/src/normalizer.d.ts.map +1 -1
  33. package/dist/{chunk-LDUNTZB6.js → chunk-26L2B6P6.js} +2 -2
  34. package/dist/{chunk-LDUNTZB6.js.map → chunk-26L2B6P6.js.map} +1 -1
  35. package/dist/{chunk-DVMSGGCM.js → chunk-45RKEHPX.js} +158 -108
  36. package/dist/chunk-45RKEHPX.js.map +1 -0
  37. package/dist/{chunk-2FS4FPZ7.js → chunk-4AGIEU7V.js} +44 -62
  38. package/dist/chunk-4AGIEU7V.js.map +1 -0
  39. package/dist/{chunk-SF4GWVR5.js → chunk-4CRKROS5.js} +86 -55
  40. package/dist/chunk-4CRKROS5.js.map +1 -0
  41. package/dist/{chunk-ZONCCO5N.js → chunk-4R6DROGN.js} +30 -32
  42. package/dist/chunk-4R6DROGN.js.map +1 -0
  43. package/dist/{chunk-MBOR7D65.js → chunk-67MFR5LS.js} +3 -3
  44. package/dist/{chunk-MBOR7D65.js.map → chunk-67MFR5LS.js.map} +1 -1
  45. package/dist/{chunk-7GWYRVAX.js → chunk-6LW7Q53Z.js} +162 -165
  46. package/dist/chunk-6LW7Q53Z.js.map +1 -0
  47. package/dist/{chunk-QMONOHXT.js → chunk-74UKG2LA.js} +3 -3
  48. package/dist/{chunk-QMONOHXT.js.map → chunk-74UKG2LA.js.map} +1 -1
  49. package/dist/{chunk-AKSR434V.js → chunk-7FLLPKX3.js} +79 -56
  50. package/dist/chunk-7FLLPKX3.js.map +1 -0
  51. package/dist/{chunk-BZ2JU7IP.js → chunk-7KOBITAP.js} +5 -5
  52. package/dist/{chunk-BZ2JU7IP.js.map → chunk-7KOBITAP.js.map} +1 -1
  53. package/dist/{chunk-JIQLLZ65.js → chunk-7MANNJ3U.js} +534 -235
  54. package/dist/chunk-7MANNJ3U.js.map +1 -0
  55. package/dist/{chunk-7R6W5EQR.js → chunk-ACXLKNIM.js} +2 -2
  56. package/dist/{chunk-7R6W5EQR.js.map → chunk-ACXLKNIM.js.map} +1 -1
  57. package/dist/{chunk-UIZKIUC6.js → chunk-BRBOC53X.js} +3 -3
  58. package/dist/chunk-BRBOC53X.js.map +1 -0
  59. package/dist/{chunk-FWHOU3CX.js → chunk-CBIPUBUS.js} +6 -6
  60. package/dist/{chunk-FWHOU3CX.js.map → chunk-CBIPUBUS.js.map} +1 -1
  61. package/dist/{chunk-3QQSSRYN.js → chunk-DKAV43NI.js} +430 -346
  62. package/dist/chunk-DKAV43NI.js.map +1 -0
  63. package/dist/{chunk-M4KLIEIJ.js → chunk-G247J4MC.js} +3 -3
  64. package/dist/chunk-G247J4MC.js.map +1 -0
  65. package/dist/{chunk-TV72ZJYN.js → chunk-GXC3TYMQ.js} +60 -47
  66. package/dist/chunk-GXC3TYMQ.js.map +1 -0
  67. package/dist/{chunk-IERB3UXJ.js → chunk-H5YXL4KI.js} +83 -69
  68. package/dist/chunk-H5YXL4KI.js.map +1 -0
  69. package/dist/{chunk-2NOE4AGD.js → chunk-HH62ECJ7.js} +3 -3
  70. package/dist/{chunk-2NOE4AGD.js.map → chunk-HH62ECJ7.js.map} +1 -1
  71. package/dist/{chunk-QDJKE557.js → chunk-HRKB2ATT.js} +64 -64
  72. package/dist/chunk-HRKB2ATT.js.map +1 -0
  73. package/dist/{chunk-MLJKA3S6.js → chunk-IENYMRZ6.js} +1711 -1497
  74. package/dist/chunk-IENYMRZ6.js.map +1 -0
  75. package/dist/{chunk-24UIWON4.js → chunk-JB35MVBN.js} +167 -156
  76. package/dist/chunk-JB35MVBN.js.map +1 -0
  77. package/dist/{chunk-5YO3H5Q4.js → chunk-KY5NY7LB.js} +3 -3
  78. package/dist/chunk-KY5NY7LB.js.map +1 -0
  79. package/dist/{chunk-MIH45XPY.js → chunk-LA2YSXEE.js} +1974 -1919
  80. package/dist/chunk-LA2YSXEE.js.map +1 -0
  81. package/dist/{chunk-IEJ5IOC3.js → chunk-LFDZYCEO.js} +4 -2
  82. package/dist/chunk-LFDZYCEO.js.map +1 -0
  83. package/dist/{chunk-72IA6BTP.js → chunk-MWAEOCU7.js} +9 -9
  84. package/dist/{chunk-72IA6BTP.js.map → chunk-MWAEOCU7.js.map} +1 -1
  85. package/dist/{chunk-5V5KZQIC.js → chunk-NGE6PALH.js} +4 -4
  86. package/dist/{chunk-5V5KZQIC.js.map → chunk-NGE6PALH.js.map} +1 -1
  87. package/dist/{chunk-PAYAFNXG.js → chunk-NGJ6E344.js} +104 -74
  88. package/dist/chunk-NGJ6E344.js.map +1 -0
  89. package/dist/{chunk-UBCZVONU.js → chunk-NQC7ZUXE.js} +3 -3
  90. package/dist/{chunk-UBCZVONU.js.map → chunk-NQC7ZUXE.js.map} +1 -1
  91. package/dist/{chunk-ZEKWHJBB.js → chunk-OEXA7BBK.js} +3 -3
  92. package/dist/{chunk-ZEKWHJBB.js.map → chunk-OEXA7BBK.js.map} +1 -1
  93. package/dist/{chunk-5RBPPBEK.js → chunk-P72K36PU.js} +4 -4
  94. package/dist/{chunk-5RBPPBEK.js.map → chunk-P72K36PU.js.map} +1 -1
  95. package/dist/{chunk-OTFG5Q7H.js → chunk-QF6LBS2C.js} +4594 -4480
  96. package/dist/chunk-QF6LBS2C.js.map +1 -0
  97. package/dist/{chunk-HK5FRWG6.js → chunk-R6O6YWU7.js} +2 -2
  98. package/dist/{chunk-HK5FRWG6.js.map → chunk-R6O6YWU7.js.map} +1 -1
  99. package/dist/{chunk-PRLD7EXG.js → chunk-SBGHNXJD.js} +2 -2
  100. package/dist/{chunk-PRLD7EXG.js.map → chunk-SBGHNXJD.js.map} +1 -1
  101. package/dist/{chunk-CMG3GJ6B.js → chunk-VO7QQ76S.js} +4 -4
  102. package/dist/{chunk-CMG3GJ6B.js.map → chunk-VO7QQ76S.js.map} +1 -1
  103. package/dist/{chunk-Z3XXKR5E.js → chunk-WDMH4UMD.js} +4 -6
  104. package/dist/chunk-WDMH4UMD.js.map +1 -0
  105. package/dist/{chunk-W7W66MDZ.js → chunk-X46FY45B.js} +44 -42
  106. package/dist/chunk-X46FY45B.js.map +1 -0
  107. package/dist/{chunk-JKNWJ64A.js → chunk-XGCXFX7X.js} +2 -2
  108. package/dist/{chunk-JKNWJ64A.js.map → chunk-XGCXFX7X.js.map} +1 -1
  109. package/dist/{chunk-FQHHCICT.js → chunk-XVDXGQ55.js} +226 -226
  110. package/dist/chunk-XVDXGQ55.js.map +1 -0
  111. package/dist/{chunk-OKRUTSG7.js → chunk-ZDKJHQY2.js} +2 -2
  112. package/dist/{chunk-OKRUTSG7.js.map → chunk-ZDKJHQY2.js.map} +1 -1
  113. package/dist/{chunk-LD4QIVBY.js → chunk-ZM7UOJR2.js} +3 -3
  114. package/dist/{chunk-LD4QIVBY.js.map → chunk-ZM7UOJR2.js.map} +1 -1
  115. package/dist/cli/index.js +2811 -2662
  116. package/dist/cli/index.js.map +1 -1
  117. package/dist/cli/src/asset-feeds.d.ts +0 -9
  118. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  119. package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -1
  120. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  121. package/dist/cli/src/commands/config.d.ts.map +1 -1
  122. package/dist/cli/src/commands/deploy.d.ts.map +1 -1
  123. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  124. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  125. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  126. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  127. package/dist/cli/src/commands/project.d.ts +1 -1
  128. package/dist/cli/src/commands/project.d.ts.map +1 -1
  129. package/dist/cli/src/commands/show.d.ts.map +1 -1
  130. package/dist/cli/src/commands/source.d.ts.map +1 -1
  131. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  132. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  133. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  134. package/dist/cli/src/open-registry.d.ts.map +1 -1
  135. package/dist/cli/src/plugin-store/index.d.ts +4 -6
  136. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  137. package/dist/cli/src/plugin-store/paths.d.ts +0 -2
  138. package/dist/cli/src/plugin-store/paths.d.ts.map +1 -1
  139. package/dist/cli/src/setup.d.ts.map +1 -1
  140. package/dist/connectors/config.js +9 -9
  141. package/dist/connectors/index.js +12 -12
  142. package/dist/connectors/rclone.js +2 -2
  143. package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
  144. package/dist/connectors/src/connector-registry.d.ts.map +1 -1
  145. package/dist/connectors/src/connector-types.d.ts +1 -1
  146. package/dist/connectors/src/connector-types.d.ts.map +1 -1
  147. package/dist/connectors/src/index.d.ts +5 -5
  148. package/dist/connectors/src/index.d.ts.map +1 -1
  149. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  150. package/dist/{connectors-PTCSHCHZ.js → connectors-DY7UBBV5.js} +3 -3
  151. package/dist/{connectors-PTCSHCHZ.js.map → connectors-DY7UBBV5.js.map} +1 -1
  152. package/dist/connectors-shared/src/index.d.ts +1 -1
  153. package/dist/connectors-shared/src/index.d.ts.map +1 -1
  154. package/dist/core/index.js +8 -8
  155. package/dist/core/logging.js +1 -1
  156. package/dist/core/manifest.js +2 -2
  157. package/dist/core/models.js +1 -1
  158. package/dist/core/publish-manifest.js +2 -2
  159. package/dist/core/runtime-assets.js +5 -5
  160. package/dist/core/src/lock.d.ts +0 -9
  161. package/dist/core/src/lock.d.ts.map +1 -1
  162. package/dist/core/src/logging/create-logger.d.ts.map +1 -1
  163. package/dist/core/src/logging/index.d.ts +11 -11
  164. package/dist/core/src/logging/index.d.ts.map +1 -1
  165. package/dist/core/src/logging/log-store.d.ts.map +1 -1
  166. package/dist/core/src/logging/sinks/no-op-sink.d.ts.map +1 -1
  167. package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -1
  168. package/dist/core/src/manifest.d.ts.map +1 -1
  169. package/dist/core/src/models.d.ts +6 -0
  170. package/dist/core/src/models.d.ts.map +1 -1
  171. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  172. package/dist/core/src/repo-manager.d.ts +0 -12
  173. package/dist/core/src/repo-manager.d.ts.map +1 -1
  174. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  175. package/dist/core/src/store.d.ts +1 -1
  176. package/dist/core/src/store.d.ts.map +1 -1
  177. package/dist/core/src/walker.d.ts.map +1 -1
  178. package/dist/core/src/workspace-config.d.ts +8 -27
  179. package/dist/core/src/workspace-config.d.ts.map +1 -1
  180. package/dist/core/store.js +1 -1
  181. package/dist/core/workspace-config.js +4 -4
  182. package/dist/deploy/index.js +8 -8
  183. package/dist/discovery/index.js +6 -6
  184. package/dist/discovery/src/asset-kind-registry.d.ts +1 -1
  185. package/dist/discovery/src/asset-kind-registry.d.ts.map +1 -1
  186. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  187. package/dist/discovery/src/discover-manifest.d.ts +1 -1
  188. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  189. package/dist/discovery/src/discover.d.ts +30 -3
  190. package/dist/discovery/src/discover.d.ts.map +1 -1
  191. package/dist/discovery/src/domains.d.ts +144 -0
  192. package/dist/discovery/src/domains.d.ts.map +1 -0
  193. package/dist/discovery/src/index.d.ts +9 -7
  194. package/dist/discovery/src/index.d.ts.map +1 -1
  195. package/dist/discovery/src/source-config.d.ts +1 -1
  196. package/dist/discovery/src/source-config.d.ts.map +1 -1
  197. package/dist/discovery/src/tree-entries.d.ts +13 -1
  198. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  199. package/dist/ensure-sources-JWBUVDW6.js +84 -0
  200. package/dist/ensure-sources-JWBUVDW6.js.map +1 -0
  201. package/dist/factory-assets/connectors/deploy/adapter.d.ts +1 -1
  202. package/dist/factory-assets/connectors/deploy/adapter.d.ts.map +1 -1
  203. package/dist/factory-assets/connectors/deploy.js +12 -12
  204. package/dist/factory-assets/connectors/devserver/adapter.d.ts +1 -1
  205. package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -1
  206. package/dist/factory-assets/connectors/devserver.js +12 -12
  207. package/dist/factory-assets/connectors/flow/adapter.d.ts +16 -2
  208. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  209. package/dist/factory-assets/connectors/flow/adapter.js +12 -12
  210. package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -1
  211. package/dist/factory-assets/connectors/flow/engine/index.d.ts +3 -3
  212. package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
  213. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  214. package/dist/factory-assets/connectors/flow/index.d.ts +1 -1
  215. package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
  216. package/dist/factory-assets/connectors/flow/run-flow.js +15 -15
  217. package/dist/factory-assets/connectors/flow.js +12 -12
  218. package/dist/factory-assets/connectors/git/driver.d.ts +32 -0
  219. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  220. package/dist/factory-assets/connectors/git.js +12 -12
  221. package/dist/factory-assets/connectors/gmail/adapter.d.ts +1 -1
  222. package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
  223. package/dist/factory-assets/connectors/gmail.js +12 -12
  224. package/dist/factory-assets/connectors/googledrive.js +12 -12
  225. package/dist/factory-assets/connectors/local/driver.d.ts +1 -2
  226. package/dist/factory-assets/connectors/local/driver.d.ts.map +1 -1
  227. package/dist/factory-assets/connectors/local.js +12 -12
  228. package/dist/factory-assets/connectors/mattermost/adapter.d.ts +1 -1
  229. package/dist/factory-assets/connectors/mattermost/adapter.d.ts.map +1 -1
  230. package/dist/factory-assets/connectors/mattermost.js +12 -12
  231. package/dist/factory-assets/connectors/memory/adapter.d.ts.map +1 -1
  232. package/dist/factory-assets/connectors/memory.js +12 -12
  233. package/dist/factory-assets/connectors/minio/adapter.d.ts +1 -1
  234. package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
  235. package/dist/factory-assets/connectors/minio.js +12 -12
  236. package/dist/factory-assets/connectors/postgres/adapter.d.ts +6 -1
  237. package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
  238. package/dist/factory-assets/connectors/postgres.js +12 -12
  239. package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
  240. package/dist/factory-assets/connectors/s3.js +12 -12
  241. package/dist/factory-assets/connectors/sharepoint.js +12 -12
  242. package/dist/factory-assets/connectors/sqlite/adapter.d.ts +1 -1
  243. package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
  244. package/dist/factory-assets/connectors/sqlite.js +12 -12
  245. package/dist/factory-assets/connectors/static-server/adapter.d.ts +6 -1
  246. package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -1
  247. package/dist/factory-assets/connectors/static-server.js +12 -12
  248. package/dist/factory-assets/connectors/tunnel/adapter.d.ts +1 -1
  249. package/dist/factory-assets/connectors/tunnel/adapter.d.ts.map +1 -1
  250. package/dist/factory-assets/connectors/tunnel.js +12 -12
  251. package/dist/factory-assets/connectors/webdav.js +12 -12
  252. package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
  253. package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
  254. package/dist/factory-assets/connectors/xstate-store/adapter.d.ts +7 -0
  255. package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -1
  256. package/dist/factory-assets/connectors/xstate-store.js +12 -12
  257. package/dist/factory-assets/connectors/xstate.js +12 -12
  258. package/dist/flows-T6RCRKCX.js +7 -0
  259. package/dist/{flows-L3GHQD7F.js.map → flows-T6RCRKCX.js.map} +1 -1
  260. package/dist/library/index.js +13 -13
  261. package/dist/library/install.js +9 -9
  262. package/dist/library/src/config.d.ts +2 -2
  263. package/dist/library/src/config.d.ts.map +1 -1
  264. package/dist/library/src/index.d.ts +27 -27
  265. package/dist/library/src/index.d.ts.map +1 -1
  266. package/dist/library/src/install/index.d.ts +2 -2
  267. package/dist/library/src/install/index.d.ts.map +1 -1
  268. package/dist/library/src/install/install-from-manifest.d.ts +0 -21
  269. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  270. package/dist/library/src/knowledge/index.d.ts +2 -2
  271. package/dist/library/src/knowledge/index.d.ts.map +1 -1
  272. package/dist/library/src/knowledge/knowledge-kind-provider.d.ts.map +1 -1
  273. package/dist/library/src/local/library.d.ts +2 -2
  274. package/dist/library/src/local/library.d.ts.map +1 -1
  275. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  276. package/dist/library/src/pin-resolver.d.ts.map +1 -1
  277. package/dist/library/src/preset/apply.d.ts +2 -2
  278. package/dist/library/src/preset/apply.d.ts.map +1 -1
  279. package/dist/library/src/preset/index.d.ts +10 -10
  280. package/dist/library/src/preset/index.d.ts.map +1 -1
  281. package/dist/library/src/preset/parse.d.ts.map +1 -1
  282. package/dist/library/src/preset/resolve-item.d.ts +1 -1
  283. package/dist/library/src/preset/resolve-item.d.ts.map +1 -1
  284. package/dist/library/src/preset/upgrade.d.ts +1 -1
  285. package/dist/library/src/preset/upgrade.d.ts.map +1 -1
  286. package/dist/library/src/remote/index.d.ts +5 -5
  287. package/dist/library/src/remote/index.d.ts.map +1 -1
  288. package/dist/library/src/remote/remote-catalog-source.d.ts +1 -1
  289. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  290. package/dist/library/src/remote/rest-catalog-source.d.ts +1 -1
  291. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  292. package/dist/library/src/sync/driver.d.ts +1 -1
  293. package/dist/library/src/sync/driver.d.ts.map +1 -1
  294. package/dist/library/src/sync/git-driver.d.ts +1 -1
  295. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  296. package/dist/library/src/sync/local-driver.d.ts +1 -1
  297. package/dist/library/src/sync/local-driver.d.ts.map +1 -1
  298. package/dist/library/src/workspace-config.d.ts +0 -9
  299. package/dist/library/src/workspace-config.d.ts.map +1 -1
  300. package/dist/open-library-ZXTSUPBJ.js +23 -0
  301. package/dist/{open-library-3VJY74LQ.js.map → open-library-ZXTSUPBJ.js.map} +1 -1
  302. package/dist/paths-F7RHQUFL.js +15 -0
  303. package/dist/{paths-CE66L3AL.js.map → paths-F7RHQUFL.js.map} +1 -1
  304. package/dist/plugin-registry/src/targets.d.ts +2 -3
  305. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  306. package/dist/{plugin-store-GL5VKYUA.js → plugin-store-BC3I36HA.js} +11 -14
  307. package/dist/plugin-store-BC3I36HA.js.map +1 -0
  308. package/dist/plugins/index.js +1 -1
  309. package/dist/plugins/src/asset-kind-registry.d.ts +1 -1
  310. package/dist/plugins/src/asset-kind-registry.d.ts.map +1 -1
  311. package/dist/plugins/src/catalog-source.d.ts +5 -0
  312. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  313. package/dist/plugins/src/index.d.ts +5 -5
  314. package/dist/plugins/src/index.d.ts.map +1 -1
  315. package/dist/{provider-GAWKFQ3T.js → provider-ZPT443IX.js} +18 -16
  316. package/dist/provider-ZPT443IX.js.map +1 -0
  317. package/dist/resolver/index.js +1 -1
  318. package/dist/resolver/src/preamble.d.ts.map +1 -1
  319. package/dist/runner/index.js +17 -17
  320. package/dist/runner/src/builtin-capabilities.d.ts +12 -0
  321. package/dist/runner/src/builtin-capabilities.d.ts.map +1 -1
  322. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  323. package/dist/runner/src/compaction/index.d.ts +0 -4
  324. package/dist/runner/src/compaction/index.d.ts.map +1 -1
  325. package/dist/runner/src/compaction/orchestrator.d.ts +23 -2
  326. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  327. package/dist/runner/src/composition/compile.d.ts.map +1 -1
  328. package/dist/runner/src/composition/index.d.ts +4 -4
  329. package/dist/runner/src/composition/index.d.ts.map +1 -1
  330. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  331. package/dist/runner/src/composition/types.d.ts +2 -2
  332. package/dist/runner/src/composition/types.d.ts.map +1 -1
  333. package/dist/runner/src/config.d.ts +2 -2
  334. package/dist/runner/src/config.d.ts.map +1 -1
  335. package/dist/runner/src/define-capability.d.ts +1 -1
  336. package/dist/runner/src/define-capability.d.ts.map +1 -1
  337. package/dist/runner/src/external-mcp.d.ts.map +1 -1
  338. package/dist/runner/src/index.d.ts +9 -9
  339. package/dist/runner/src/index.d.ts.map +1 -1
  340. package/dist/runner/src/logging-bootstrap.d.ts +1 -1
  341. package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
  342. package/dist/runner/src/manifest.d.ts.map +1 -1
  343. package/dist/runner/src/recipe-resolver.d.ts +32 -0
  344. package/dist/runner/src/recipe-resolver.d.ts.map +1 -1
  345. package/dist/runner/src/resource-handler.d.ts.map +1 -1
  346. package/dist/runner/src/resources.d.ts.map +1 -1
  347. package/dist/runner/src/runner-capabilities.d.ts +25 -0
  348. package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
  349. package/dist/runner/src/serve.d.ts.map +1 -1
  350. package/dist/runner/src/session-builder.d.ts.map +1 -1
  351. package/dist/sdk/asset-manager.js +12 -12
  352. package/dist/sdk/bridge.js +4 -4
  353. package/dist/sdk/core.js +8 -8
  354. package/dist/sdk/flow.js +9 -9
  355. package/dist/sdk/index.js +92 -76
  356. package/dist/sdk/index.js.map +1 -1
  357. package/dist/sdk/resolver.js +1 -1
  358. package/dist/sdk/runner.js +17 -17
  359. package/dist/sdk/session.js +1 -1
  360. package/dist/sdk/src/agent-session.d.ts +8 -0
  361. package/dist/sdk/src/agent-session.d.ts.map +1 -1
  362. package/dist/sdk/src/factory.d.ts.map +1 -1
  363. package/dist/sdk/src/index.d.ts +2 -2
  364. package/dist/sdk/src/index.d.ts.map +1 -1
  365. package/dist/sdk/store.js +1 -1
  366. package/dist/sdk/telemetry.js +1 -1
  367. package/dist/secrets/index.js +2 -2
  368. package/dist/secrets/src/index.d.ts +8 -8
  369. package/dist/secrets/src/index.d.ts.map +1 -1
  370. package/dist/secrets/src/lifecycle.d.ts +1 -2
  371. package/dist/secrets/src/lifecycle.d.ts.map +1 -1
  372. package/dist/secrets/src/providers/env.d.ts +1 -1
  373. package/dist/secrets/src/providers/env.d.ts.map +1 -1
  374. package/dist/secrets/src/providers/local.d.ts +1 -1
  375. package/dist/secrets/src/providers/local.d.ts.map +1 -1
  376. package/dist/secrets/src/router.d.ts +1 -1
  377. package/dist/secrets/src/router.d.ts.map +1 -1
  378. package/dist/session/index.js +1 -1
  379. package/dist/session/src/mentions.d.ts.map +1 -1
  380. package/dist/{sessions-2IUX4P3P.js → sessions-DICDEONJ.js} +3 -3
  381. package/dist/{sessions-2IUX4P3P.js.map → sessions-DICDEONJ.js.map} +1 -1
  382. package/dist/{setup-4YMN2BDU.js → setup-FQ3DE6J6.js} +198 -175
  383. package/dist/setup-FQ3DE6J6.js.map +1 -0
  384. package/dist/skills-BMI6H7HI.js +7 -0
  385. package/dist/{skills-6HJ3WINN.js.map → skills-BMI6H7HI.js.map} +1 -1
  386. package/dist/store/index.js +1 -1
  387. package/dist/store/src/index.d.ts +1 -1
  388. package/dist/store/src/index.d.ts.map +1 -1
  389. package/dist/store/src/resource-client.d.ts +1 -1
  390. package/dist/store/src/resource-client.d.ts.map +1 -1
  391. package/dist/store/src/vue.d.ts.map +1 -1
  392. package/dist/store/vue.js.map +1 -1
  393. package/dist/store-client-27YYEWMM.js +15 -0
  394. package/dist/{store-client-BCP5LCAZ.js.map → store-client-27YYEWMM.js.map} +1 -1
  395. package/dist/telemetry/index.js +1 -1
  396. package/dist/telemetry/src/context.d.ts.map +1 -1
  397. package/dist/telemetry/src/index.d.ts +3 -3
  398. package/dist/telemetry/src/index.d.ts.map +1 -1
  399. package/dist/telemetry/src/otel/gen-ai.d.ts +1 -1
  400. package/dist/telemetry/src/otel/gen-ai.d.ts.map +1 -1
  401. package/dist/telemetry/src/otel/provider.d.ts.map +1 -1
  402. package/dist/transport/src/index.d.ts +1 -1
  403. package/dist/transport/src/index.d.ts.map +1 -1
  404. package/dist/tui/index.js +251 -218
  405. package/dist/tui/index.js.map +1 -1
  406. package/dist/tui/src/index.d.ts +2 -2
  407. package/dist/tui/src/index.d.ts.map +1 -1
  408. package/dist/tui/src/repl-renderer.d.ts.map +1 -1
  409. package/dist/tui/src/repl-session.d.ts +1 -1
  410. package/dist/tui/src/repl-session.d.ts.map +1 -1
  411. package/dist/tui/src/repl.d.ts.map +1 -1
  412. package/dist/types/manifests.js +1 -1
  413. package/dist/types/src/envelope.d.ts +1 -1
  414. package/dist/types/src/envelope.d.ts.map +1 -1
  415. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  416. package/dist/types/src/manifests/connector.d.ts.map +1 -1
  417. package/dist/types/src/manifests/contract.d.ts.map +1 -1
  418. package/dist/types/src/manifests/index.d.ts +16 -16
  419. package/dist/types/src/manifests/index.d.ts.map +1 -1
  420. package/dist/types/src/manifests/mcp-server.d.ts.map +1 -1
  421. package/dist/types/src/manifests/mount.d.ts.map +1 -1
  422. package/dist/types/src/manifests/persona.d.ts.map +1 -1
  423. package/dist/types/src/manifests/preset.d.ts +0 -18
  424. package/dist/types/src/manifests/preset.d.ts.map +1 -1
  425. package/dist/types/src/manifests/prompt.d.ts.map +1 -1
  426. package/dist/types/src/manifests/ruleset.d.ts.map +1 -1
  427. package/dist/types/src/manifests/skill.d.ts.map +1 -1
  428. package/dist/validator-VF5M764T.js +5 -0
  429. package/dist/{validator-47SQUW3J.js.map → validator-VF5M764T.js.map} +1 -1
  430. package/dist/workspace-plugin/adapters/mcp.js +6 -6
  431. package/dist/workspace-plugin/adapters/omp.js +76 -69
  432. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  433. package/dist/workspace-plugin/index.js +2 -2
  434. package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
  435. package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
  436. package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -1
  437. package/dist/workspace-plugin/src/tools/sessions.d.ts.map +1 -1
  438. package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
  439. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  440. package/package.json +1 -2
  441. package/dist/asset-feeds-2V7LZIG7.js.map +0 -1
  442. package/dist/chunk-24UIWON4.js.map +0 -1
  443. package/dist/chunk-2FS4FPZ7.js.map +0 -1
  444. package/dist/chunk-3QQSSRYN.js.map +0 -1
  445. package/dist/chunk-5YO3H5Q4.js.map +0 -1
  446. package/dist/chunk-7GWYRVAX.js.map +0 -1
  447. package/dist/chunk-AKSR434V.js.map +0 -1
  448. package/dist/chunk-DVMSGGCM.js.map +0 -1
  449. package/dist/chunk-FQHHCICT.js.map +0 -1
  450. package/dist/chunk-IEJ5IOC3.js.map +0 -1
  451. package/dist/chunk-IERB3UXJ.js.map +0 -1
  452. package/dist/chunk-JIQLLZ65.js.map +0 -1
  453. package/dist/chunk-M4KLIEIJ.js.map +0 -1
  454. package/dist/chunk-MIH45XPY.js.map +0 -1
  455. package/dist/chunk-MLJKA3S6.js.map +0 -1
  456. package/dist/chunk-OTFG5Q7H.js.map +0 -1
  457. package/dist/chunk-PAYAFNXG.js.map +0 -1
  458. package/dist/chunk-QDJKE557.js.map +0 -1
  459. package/dist/chunk-SF4GWVR5.js.map +0 -1
  460. package/dist/chunk-TV72ZJYN.js.map +0 -1
  461. package/dist/chunk-UIZKIUC6.js.map +0 -1
  462. package/dist/chunk-W7W66MDZ.js.map +0 -1
  463. package/dist/chunk-Z3XXKR5E.js.map +0 -1
  464. package/dist/chunk-ZONCCO5N.js.map +0 -1
  465. package/dist/ensure-sources-BNSRO5G7.js +0 -74
  466. package/dist/ensure-sources-BNSRO5G7.js.map +0 -1
  467. package/dist/flows-L3GHQD7F.js +0 -7
  468. package/dist/open-library-3VJY74LQ.js +0 -23
  469. package/dist/paths-CE66L3AL.js +0 -15
  470. package/dist/plugin-store-GL5VKYUA.js.map +0 -1
  471. package/dist/provider-GAWKFQ3T.js.map +0 -1
  472. package/dist/setup-4YMN2BDU.js.map +0 -1
  473. package/dist/skills-6HJ3WINN.js +0 -7
  474. package/dist/store-client-BCP5LCAZ.js +0 -15
  475. package/dist/validator-47SQUW3J.js +0 -5
@@ -1,9 +1,9 @@
1
1
  import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
2
2
  import { fetchProviderModels } from '../../chunk-BMQKMOQY.js';
3
- import { AuthError, classifyClaudeSdkError } from '../../chunk-PAYAFNXG.js';
4
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-ZEKWHJBB.js';
3
+ import { AuthError, classifyClaudeSdkError } from '../../chunk-NGJ6E344.js';
4
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-OEXA7BBK.js';
5
5
  import '../../chunk-6E6PKKAD.js';
6
- import '../../chunk-24UIWON4.js';
6
+ import '../../chunk-JB35MVBN.js';
7
7
  import '../../chunk-NSBPE2FW.js';
8
8
  import { spawnSync } from 'child_process';
9
9
  import { existsSync, readFileSync, readdirSync, writeFileSync, renameSync } from 'fs';
@@ -235,6 +235,8 @@ var ClaudeSdkDriver = class extends AgentDriver {
235
235
  sdk = null;
236
236
  toolIdToName = /* @__PURE__ */ new Map();
237
237
  prevText = "";
238
+ /** Set once the streaming text of the current message classifies as a self-healable auth render. */
239
+ suppressingAuthStream = false;
238
240
  /** Active query — may stay alive between turns if streamInput works. */
239
241
  query = null;
240
242
  /** Resolves when the current turn completes. */
@@ -336,6 +338,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
336
338
  if (isFirstAttempt) this._lastTokens = null;
337
339
  this.running = true;
338
340
  this.prevText = "";
341
+ this.suppressingAuthStream = false;
339
342
  this.turnCompleted = false;
340
343
  const turnPromise = new Promise((resolve, reject) => {
341
344
  this.turnResolve = resolve;
@@ -360,115 +363,24 @@ var ClaudeSdkDriver = class extends AgentDriver {
360
363
  const errMsg = err instanceof Error ? err.message : String(err);
361
364
  const isStaleResume = !_budget.staleResume && /No conversation found with session ID/i.test(errMsg);
362
365
  if (isStaleResume) {
363
- const staleId = this.config.resumeSessionId || this.sessionId || "unknown";
364
- this.log.warn("stale Claude Code session, retrying with a fresh session", { staleId });
365
- this.emit("agent-event", {
366
- type: "resume_failed",
367
- resumeSessionId: staleId,
368
- reason: "jsonl_lost"
369
- });
370
- this.emit("agent-event", {
371
- type: "error",
372
- error: "Claude Code session state was lost (likely a prior crash). Restarting with a fresh session \u2014 previous conversation context is not available.",
373
- fatal: false
374
- });
375
- this.sessionId = "";
376
- this.hasSession = false;
377
- this.query = null;
378
- this.config.resumeSessionId = void 0;
379
- this.turnResolve = null;
380
- this.turnReject = null;
381
- this.running = false;
366
+ this.prepareStaleResumeRetry();
382
367
  retrying = true;
383
368
  return this.prompt(message, { ..._budget, staleResume: true });
384
369
  }
385
370
  const isPoisonedHistory = !_budget.poison && /invalid_request_error/i.test(errMsg) && /media[_ ]?type|could not process image|image exceeds|cache_control/i.test(errMsg);
386
371
  const poisonSessionId = this.config.resumeSessionId || this.sessionId;
387
372
  if (isPoisonedHistory && poisonSessionId) {
388
- const scrub = scrubPoisonedTranscript({
389
- configDir: this.resolveClaudeConfigDir(),
390
- sessionId: poisonSessionId,
391
- log: this.log
392
- });
393
- if (scrub.changed) {
394
- this.log.warn("scrubbed poisoned Claude Code transcript, retrying resume", {
395
- sessionId: poisonSessionId,
396
- corrected: scrub.corrected,
397
- stubbed: scrub.stubbed,
398
- cacheStripped: scrub.cacheStripped
399
- });
400
- this.emit("agent-event", {
401
- type: "resume_failed",
402
- resumeSessionId: poisonSessionId,
403
- reason: "jsonl_poisoned"
404
- });
405
- const plural = (n) => n === 1 ? "" : "s";
406
- const repairs = [];
407
- if (scrub.corrected > 0)
408
- repairs.push(`${scrub.corrected} media type${plural(scrub.corrected)} corrected`);
409
- if (scrub.stubbed > 0)
410
- repairs.push(`${scrub.stubbed} image${plural(scrub.stubbed)} removed`);
411
- if (scrub.cacheStripped > 0)
412
- repairs.push(
413
- `${scrub.cacheStripped} malformed block${plural(scrub.cacheStripped)} cleaned`
414
- );
415
- this.emit("agent-event", {
416
- type: "error",
417
- error: `Recovered corrupt data in the conversation history (${repairs.join(", ")}). Retrying \u2014 earlier context is preserved.`,
418
- fatal: false
419
- });
420
- this.query = null;
421
- this.turnResolve = null;
422
- this.turnReject = null;
423
- this.running = false;
373
+ if (this.attemptPoisonScrubRetry(poisonSessionId)) {
424
374
  retrying = true;
425
375
  return this.prompt(message, { ..._budget, poison: true });
426
376
  }
427
- this.log.warn("poisoned-transcript error but scrub found nothing to repair", {
428
- sessionId: poisonSessionId,
429
- filePath: scrub.filePath
430
- });
431
377
  }
432
378
  const isAuthError = err instanceof AuthError && !_budget.auth;
433
379
  if (isAuthError && this.config.onAuthError) {
434
- this.log.info("auth error caught; invoking onAuthError refresh callback");
435
- let refreshed = false;
436
- try {
437
- const mint = await this.config.onAuthError({
438
- configId: this.config.aiProviderConfigId ?? ""
439
- });
440
- refreshed = mint.ok;
441
- if (!mint.ok) {
442
- this.log.info("onAuthError reported refresh failure; surfacing AuthError", {
443
- code: mint.code
444
- });
445
- }
446
- } catch (refreshErr) {
447
- this.log.warn("onAuthError callback threw; surfacing original AuthError", {
448
- error: refreshErr instanceof Error ? refreshErr.message : String(refreshErr)
449
- });
450
- }
451
- if (refreshed) {
452
- this.log.info("credentials refreshed; retrying prompt");
453
- this.query = null;
454
- this.turnResolve = null;
455
- this.turnReject = null;
456
- this.running = false;
380
+ if (await this.attemptAuthSelfHeal(err)) {
457
381
  retrying = true;
458
382
  return this.prompt(message, { ..._budget, auth: true });
459
383
  }
460
- try {
461
- this.emit("agent-event", {
462
- type: "error",
463
- error: err.message,
464
- detail: err.detail
465
- });
466
- } catch (emitErr) {
467
- this.log.warn(
468
- "agent-event listener threw during deferred auth-error surfacing; suppressing",
469
- { error: emitErr instanceof Error ? emitErr.message : String(emitErr) }
470
- );
471
- }
472
384
  }
473
385
  throw err;
474
386
  } finally {
@@ -479,6 +391,133 @@ var ClaudeSdkDriver = class extends AgentDriver {
479
391
  }
480
392
  }
481
393
  }
394
+ /**
395
+ * Side-effects of the stale-resume recovery path: emit the resume-outcome and
396
+ * non-fatal error events, then reset session state so the recursive prompt()
397
+ * starts a fresh session. The caller owns the decision to recurse — this only
398
+ * performs the state mutation, never control flow.
399
+ */
400
+ prepareStaleResumeRetry() {
401
+ const staleId = this.config.resumeSessionId || this.sessionId || "unknown";
402
+ this.log.warn("stale Claude Code session, retrying with a fresh session", { staleId });
403
+ this.emit("agent-event", {
404
+ type: "resume_failed",
405
+ resumeSessionId: staleId,
406
+ reason: "jsonl_lost"
407
+ });
408
+ this.emit("agent-event", {
409
+ type: "error",
410
+ error: "Claude Code session state was lost (likely a prior crash). Restarting with a fresh session \u2014 previous conversation context is not available.",
411
+ fatal: false
412
+ });
413
+ this.sessionId = "";
414
+ this.hasSession = false;
415
+ this.query = null;
416
+ this.config.resumeSessionId = void 0;
417
+ this.turnResolve = null;
418
+ this.turnReject = null;
419
+ this.running = false;
420
+ }
421
+ /**
422
+ * Side-effects of the poisoned-transcript recovery path: scrub the on-disk
423
+ * transcript and, when something was repaired, emit recovery events and reset
424
+ * query state. Returns `true` when the scrub changed the transcript (the
425
+ * caller should recurse) and `false` otherwise. The caller owns the decision
426
+ * to recurse — this only performs the scrub + state mutation, never control
427
+ * flow.
428
+ */
429
+ attemptPoisonScrubRetry(poisonSessionId) {
430
+ const scrub = scrubPoisonedTranscript({
431
+ configDir: this.resolveClaudeConfigDir(),
432
+ sessionId: poisonSessionId,
433
+ log: this.log
434
+ });
435
+ if (scrub.changed) {
436
+ this.log.warn("scrubbed poisoned Claude Code transcript, retrying resume", {
437
+ sessionId: poisonSessionId,
438
+ corrected: scrub.corrected,
439
+ stubbed: scrub.stubbed,
440
+ cacheStripped: scrub.cacheStripped
441
+ });
442
+ this.emit("agent-event", {
443
+ type: "resume_failed",
444
+ resumeSessionId: poisonSessionId,
445
+ reason: "jsonl_poisoned"
446
+ });
447
+ const plural = (n) => n === 1 ? "" : "s";
448
+ const repairs = [];
449
+ if (scrub.corrected > 0)
450
+ repairs.push(`${scrub.corrected} media type${plural(scrub.corrected)} corrected`);
451
+ if (scrub.stubbed > 0) repairs.push(`${scrub.stubbed} image${plural(scrub.stubbed)} removed`);
452
+ if (scrub.cacheStripped > 0)
453
+ repairs.push(
454
+ `${scrub.cacheStripped} malformed block${plural(scrub.cacheStripped)} cleaned`
455
+ );
456
+ this.emit("agent-event", {
457
+ type: "error",
458
+ error: `Recovered corrupt data in the conversation history (${repairs.join(", ")}). Retrying \u2014 earlier context is preserved.`,
459
+ fatal: false
460
+ });
461
+ this.query = null;
462
+ this.turnResolve = null;
463
+ this.turnReject = null;
464
+ this.running = false;
465
+ return true;
466
+ }
467
+ this.log.warn("poisoned-transcript error but scrub found nothing to repair", {
468
+ sessionId: poisonSessionId,
469
+ filePath: scrub.filePath
470
+ });
471
+ return false;
472
+ }
473
+ /**
474
+ * Side-effects of the auth-error recovery path: invoke the `onAuthError`
475
+ * refresh callback. On success, reset query state and return `true` (the
476
+ * caller should recurse). On failure, emit the deferred `agent-event: error`
477
+ * (paired with the deferral in {@link failTurn}) and return `false`. The
478
+ * caller owns the decision to recurse and the subsequent rethrow — this only
479
+ * performs the refresh + state mutation, never control flow.
480
+ */
481
+ async attemptAuthSelfHeal(err) {
482
+ this.log.info("auth error caught; invoking onAuthError refresh callback");
483
+ let refreshed = false;
484
+ try {
485
+ const mint = await this.config.onAuthError({
486
+ configId: this.config.aiProviderConfigId ?? ""
487
+ });
488
+ refreshed = mint.ok;
489
+ if (!mint.ok) {
490
+ this.log.info("onAuthError reported refresh failure; surfacing AuthError", {
491
+ code: mint.code
492
+ });
493
+ }
494
+ } catch (refreshErr) {
495
+ this.log.warn("onAuthError callback threw; surfacing original AuthError", {
496
+ error: refreshErr instanceof Error ? refreshErr.message : String(refreshErr)
497
+ });
498
+ }
499
+ if (refreshed) {
500
+ this.log.info("credentials refreshed; retrying prompt");
501
+ this.query = null;
502
+ this.turnResolve = null;
503
+ this.turnReject = null;
504
+ this.running = false;
505
+ return true;
506
+ }
507
+ try {
508
+ this.emit("agent-event", {
509
+ type: "error",
510
+ error: err.message,
511
+ detail: err.detail
512
+ });
513
+ } catch (emitErr) {
514
+ this.log.warn(
515
+ "agent-event listener threw during deferred auth-error surfacing; suppressing",
516
+ { error: emitErr instanceof Error ? emitErr.message : String(emitErr) }
517
+ );
518
+ }
519
+ return false;
520
+ }
482
521
  /**
483
522
  * Resolve the Claude Code config directory — the parent of `projects/` — from
484
523
  * the driver config, the process environment, or the `~/.claude` default.
@@ -714,42 +753,54 @@ var ClaudeSdkDriver = class extends AgentDriver {
714
753
  try {
715
754
  for await (const msg of this.query) {
716
755
  if (this.abortController?.signal.aborted) break;
717
- const sessionId = "session_id" in msg ? msg.session_id : void 0;
718
- if (sessionId) {
719
- if (!this.hasSession) {
720
- this.hasSession = true;
721
- this.log.debug("session id assigned", { sessionId });
722
- }
723
- this.sessionId = sessionId;
724
- }
756
+ this.captureSessionId(msg);
725
757
  this.handleSdkMessage(msg);
726
758
  if (msg.type === "result" && !msg.is_error) {
727
759
  this.completeTurn();
728
760
  }
729
761
  }
730
762
  } catch (err) {
731
- const error = err instanceof Error ? err : new Error(String(err));
732
- if (error.name === "AbortError" || this.abortController?.signal.aborted) {
733
- this.log.info("aborted");
734
- } else {
735
- const detail = classifyClaudeSdkError({
736
- errors: [error.message],
737
- oauthCredential: this.usingOauthCredential
738
- });
739
- this.log.error("consumer error", {
740
- message: error.message,
741
- category: detail.category,
742
- retryable: detail.retryable
743
- });
744
- const surfaced = detail.category === "auth" ? new AuthError(detail) : error;
745
- this.failTurn(surfaced, detail);
746
- }
763
+ this.handleConsumerError(err);
747
764
  } finally {
748
765
  this.log.debug("query generator ended");
749
766
  this.completeTurn();
750
767
  this.query = null;
751
768
  }
752
769
  }
770
+ /** Capture the SDK session id from a message (first one assigns hasSession). */
771
+ captureSessionId(msg) {
772
+ const sessionId = "session_id" in msg ? msg.session_id : void 0;
773
+ if (sessionId) {
774
+ if (!this.hasSession) {
775
+ this.hasSession = true;
776
+ this.log.debug("session id assigned", { sessionId });
777
+ }
778
+ this.sessionId = sessionId;
779
+ }
780
+ }
781
+ /**
782
+ * Handle an error thrown by the query's async generator. Aborts are logged
783
+ * silently; everything else is classified and routed through {@link failTurn}
784
+ * (auth-shaped failures promoted to {@link AuthError}).
785
+ */
786
+ handleConsumerError(err) {
787
+ const error = err instanceof Error ? err : new Error(String(err));
788
+ if (error.name === "AbortError" || this.abortController?.signal.aborted) {
789
+ this.log.info("aborted");
790
+ return;
791
+ }
792
+ const detail = classifyClaudeSdkError({
793
+ errors: [error.message],
794
+ oauthCredential: this.usingOauthCredential
795
+ });
796
+ this.log.error("consumer error", {
797
+ message: error.message,
798
+ category: detail.category,
799
+ retryable: detail.retryable
800
+ });
801
+ const surfaced = detail.category === "auth" ? new AuthError(detail) : error;
802
+ this.failTurn(surfaced, detail);
803
+ }
753
804
  /**
754
805
  * Signal the current turn as done — idempotent per turn.
755
806
  *
@@ -834,6 +885,23 @@ var ClaudeSdkDriver = class extends AgentDriver {
834
885
  // Message handling
835
886
  // ---------------------------------------------------------------------------
836
887
  handleSdkMessage(msg) {
888
+ if (this.handleRateLimitEvent(msg)) return;
889
+ if (msg.type === "assistant") {
890
+ this.handleAssistantMessage(msg);
891
+ } else if (msg.type === "stream_event") {
892
+ this.handleStreamEvent(msg);
893
+ } else if (msg.type === "user") {
894
+ this.handleUserMessage(msg);
895
+ } else if (msg.type === "result") {
896
+ this.handleResultMessage(msg);
897
+ }
898
+ }
899
+ /**
900
+ * Surface subscription rate-limit telemetry as a structured warning log.
901
+ * Returns `true` when the message was a rate-limit event (and fully handled),
902
+ * so the caller can stop dispatching.
903
+ */
904
+ handleRateLimitEvent(msg) {
837
905
  const maybeRateLimit = msg;
838
906
  if (maybeRateLimit.type === "rate_limit_event" && maybeRateLimit.rate_limit_info) {
839
907
  const info = maybeRateLimit.rate_limit_info;
@@ -843,115 +911,177 @@ var ClaudeSdkDriver = class extends AgentDriver {
843
911
  utilization: info.utilization,
844
912
  resetsAt: info.resetsAt
845
913
  });
846
- return;
914
+ return true;
847
915
  }
848
- if (msg.type === "assistant") {
849
- const agentMsg = this.mapAssistantMessage(msg);
850
- this.emit("agent-event", { type: "message_start", message: agentMsg });
851
- if (agentMsg.toolCalls) {
852
- for (const tc of agentMsg.toolCalls) {
853
- this.emit("agent-event", {
854
- type: "tool_call",
855
- name: tc.name,
856
- tool: { name: tc.name },
857
- input: tc.input
858
- });
859
- }
860
- }
916
+ return false;
917
+ }
918
+ handleAssistantMessage(msg) {
919
+ const agentMsg = this.mapAssistantMessage(msg);
920
+ if (this.isSuppressibleAuthRender(agentMsg)) {
921
+ this.log.info("suppressing SDK auth-error assistant text; self-heal will retry");
861
922
  this.prevText = "";
862
- this.emit("agent-event", { type: "message_end", message: agentMsg });
863
- } else if (msg.type === "stream_event") {
864
- const event = msg.event;
865
- if (event?.type === "content_block_delta" && event.delta?.type === "text_delta" && event.delta.text) {
866
- const delta = event.delta.text;
867
- this.prevText += delta;
868
- const agentMsg = {
869
- role: "assistant",
870
- content: [{ type: "text", text: this.prevText }]
871
- };
872
- this.emit("agent-event", {
873
- type: "message_update",
874
- message: agentMsg,
875
- _textDelta: delta
876
- });
877
- }
878
- } else if (msg.type === "user") {
879
- const toolResults = this.mapToolResults(msg);
880
- for (const result of toolResults) {
923
+ this.suppressingAuthStream = false;
924
+ return;
925
+ }
926
+ this.emit("agent-event", { type: "message_start", message: agentMsg });
927
+ if (agentMsg.toolCalls) {
928
+ for (const tc of agentMsg.toolCalls) {
881
929
  this.emit("agent-event", {
882
- type: "tool_execution_end",
883
- toolName: result.toolName
930
+ type: "tool_call",
931
+ name: tc.name,
932
+ tool: { name: tc.name },
933
+ input: tc.input
884
934
  });
885
935
  }
886
- if (toolResults.length > 0) {
887
- this.emit("agent-event", { type: "turn_end", toolResults });
888
- }
889
- } else if (msg.type === "result") {
890
- const usage = msg.usage;
891
- if (usage) {
892
- const tokens = {};
893
- if (typeof usage.input_tokens === "number") tokens.inputTokens = usage.input_tokens;
894
- if (typeof usage.output_tokens === "number") tokens.outputTokens = usage.output_tokens;
895
- if (typeof usage.cache_read_input_tokens === "number")
896
- tokens.cacheReadTokens = usage.cache_read_input_tokens;
897
- if (typeof usage.cache_creation_input_tokens === "number")
898
- tokens.cacheCreationTokens = usage.cache_creation_input_tokens;
899
- this._lastTokens = tokens;
900
- }
901
- const modelUsage = msg.modelUsage;
902
- if (modelUsage) {
903
- const first = Object.values(modelUsage)[0];
904
- if (first?.contextWindow) this._contextWindow = first.contextWindow;
905
- }
906
- if (msg.subtype === "success" && !msg.is_error) {
907
- if (msg.result) {
908
- const agentMsg = {
909
- role: "assistant",
910
- content: msg.result
911
- };
912
- this.emit("agent-event", { type: "message_end", message: agentMsg });
913
- }
914
- this.emit("agent-event", {
915
- type: "result",
916
- subtype: msg.subtype,
917
- summary: msg.result ?? "Task completed",
918
- costUsd: msg.total_cost_usd ?? 0,
919
- ...this._lastTokens ? { tokens: this._lastTokens } : {}
920
- });
921
- } else {
922
- const looseMsg = msg;
923
- const errors = looseMsg.errors?.length ? looseMsg.errors : [];
924
- if (looseMsg.is_error) {
925
- const detail = classifyClaudeSdkError({
926
- errors,
927
- terminalReason: msg.terminal_reason,
928
- subtype: msg.subtype,
929
- oauthCredential: this.usingOauthCredential
930
- });
931
- this.log.error("turn ended with error", {
932
- subtype: msg.subtype,
933
- terminalReason: msg.terminal_reason,
934
- errorsCount: errors.length,
935
- category: detail.category,
936
- retryable: detail.retryable
937
- });
938
- const errorText = errors.join("; ") || `Agent stopped: ${msg.subtype}`;
939
- if (detail.category === "auth") {
940
- this.failTurn(new AuthError({ ...detail, message: errorText }), detail);
941
- } else if (errors.length > 0) {
942
- this.emit("agent-event", {
943
- type: "error",
944
- error: errorText,
945
- detail
946
- });
947
- }
948
- }
949
- this.emit("agent-event", {
950
- type: "result",
951
- subtype: msg.subtype,
952
- errors
953
- });
936
+ }
937
+ this.prevText = "";
938
+ this.suppressingAuthStream = false;
939
+ this.emit("agent-event", { type: "message_end", message: agentMsg });
940
+ }
941
+ // True when this assistant text is the SDK's render of a 401 about to be self-healed.
942
+ isSuppressibleAuthRender(msg) {
943
+ if (this.authSelfHealUsed || this.config.onAuthError == null) return false;
944
+ if (msg.toolCalls && msg.toolCalls.length > 0) return false;
945
+ const text = typeof msg.content === "string" ? msg.content : msg.content.filter((b) => b.type === "text" && typeof b.text === "string").map((b) => b.text).join("");
946
+ return this.textIsAuthRender(text);
947
+ }
948
+ // Cheap substring pre-filter keeps the full classifier off the hot path of
949
+ // every assistant message / stream delta; only auth-shaped text pays for it.
950
+ textIsAuthRender(text) {
951
+ const lower = text.trim().toLowerCase();
952
+ if (!lower) return false;
953
+ if (!lower.includes("auth") && !lower.includes("401") && !lower.includes("login")) {
954
+ return false;
955
+ }
956
+ return classifyClaudeSdkError({ errors: [text], oauthCredential: this.usingOauthCredential }).category === "auth";
957
+ }
958
+ handleStreamEvent(msg) {
959
+ const event = msg.event;
960
+ if (event?.type === "content_block_delta" && event.delta?.type === "text_delta" && event.delta.text) {
961
+ const delta = event.delta.text;
962
+ this.prevText += delta;
963
+ if (!this.suppressingAuthStream && this.textIsAuthRender(this.prevText)) {
964
+ this.suppressingAuthStream = true;
965
+ this.log.info("suppressing SDK auth-error stream; self-heal will retry");
954
966
  }
967
+ if (this.suppressingAuthStream) return;
968
+ const agentMsg = {
969
+ role: "assistant",
970
+ content: [{ type: "text", text: this.prevText }]
971
+ };
972
+ this.emit("agent-event", {
973
+ type: "message_update",
974
+ message: agentMsg,
975
+ _textDelta: delta
976
+ });
977
+ }
978
+ }
979
+ handleUserMessage(msg) {
980
+ const toolResults = this.mapToolResults(msg);
981
+ for (const result of toolResults) {
982
+ this.emit("agent-event", {
983
+ type: "tool_execution_end",
984
+ toolName: result.toolName
985
+ });
986
+ }
987
+ if (toolResults.length > 0) {
988
+ this.emit("agent-event", { type: "turn_end", toolResults });
989
+ }
990
+ }
991
+ handleResultMessage(msg) {
992
+ this.captureResultUsage(msg);
993
+ if (msg.subtype === "success" && !msg.is_error) {
994
+ this.handleSuccessResult(msg);
995
+ } else {
996
+ this.handleErrorResult(msg);
997
+ }
998
+ }
999
+ /**
1000
+ * Capture token usage + context-window size from a result message.
1001
+ * Anthropic separates fresh prompt input from cached/cache-creation
1002
+ * tokens — surface all four to consumers that want a complete picture.
1003
+ */
1004
+ captureResultUsage(msg) {
1005
+ const usage = msg.usage;
1006
+ if (usage) {
1007
+ const tokens = {};
1008
+ if (typeof usage.input_tokens === "number") tokens.inputTokens = usage.input_tokens;
1009
+ if (typeof usage.output_tokens === "number") tokens.outputTokens = usage.output_tokens;
1010
+ if (typeof usage.cache_read_input_tokens === "number")
1011
+ tokens.cacheReadTokens = usage.cache_read_input_tokens;
1012
+ if (typeof usage.cache_creation_input_tokens === "number")
1013
+ tokens.cacheCreationTokens = usage.cache_creation_input_tokens;
1014
+ this._lastTokens = tokens;
1015
+ }
1016
+ const modelUsage = msg.modelUsage;
1017
+ if (modelUsage) {
1018
+ const first = Object.values(modelUsage)[0];
1019
+ if (first?.contextWindow) this._contextWindow = first.contextWindow;
1020
+ }
1021
+ }
1022
+ /** Emit the message_end (if any) + success result event for a clean turn. */
1023
+ handleSuccessResult(msg) {
1024
+ if (msg.result) {
1025
+ const agentMsg = {
1026
+ role: "assistant",
1027
+ content: msg.result
1028
+ };
1029
+ this.emit("agent-event", { type: "message_end", message: agentMsg });
1030
+ }
1031
+ this.emit("agent-event", {
1032
+ type: "result",
1033
+ subtype: msg.subtype,
1034
+ summary: msg.result ?? "Task completed",
1035
+ costUsd: msg.total_cost_usd ?? 0,
1036
+ ...this._lastTokens ? { tokens: this._lastTokens } : {}
1037
+ });
1038
+ }
1039
+ /**
1040
+ * Handle the non-clean branch (legacy `SDKResultError`, or a `success`
1041
+ * subtype carrying `is_error: true`). Read via the loose shape since the
1042
+ * second case omits `errors` on the typed variant. See devlog note
1043
+ * 2026-06-08-claude-sdk-error-result-handling.
1044
+ */
1045
+ handleErrorResult(msg) {
1046
+ const looseMsg = msg;
1047
+ const errors = looseMsg.errors?.length ? looseMsg.errors : [];
1048
+ if (looseMsg.is_error) {
1049
+ this.handleResultErrorPayload(msg, errors);
1050
+ }
1051
+ this.emit("agent-event", {
1052
+ type: "result",
1053
+ subtype: msg.subtype,
1054
+ errors
1055
+ });
1056
+ }
1057
+ /**
1058
+ * Classify + route an `is_error` result payload: auth-shaped errors throw
1059
+ * via `failTurn`; populated non-auth errors surface a normal `error` event;
1060
+ * empty errors defer to the consumer-error catch.
1061
+ */
1062
+ handleResultErrorPayload(msg, errors) {
1063
+ const detail = classifyClaudeSdkError({
1064
+ errors,
1065
+ terminalReason: msg.terminal_reason,
1066
+ subtype: msg.subtype,
1067
+ oauthCredential: this.usingOauthCredential
1068
+ });
1069
+ this.log.error("turn ended with error", {
1070
+ subtype: msg.subtype,
1071
+ terminalReason: msg.terminal_reason,
1072
+ errorsCount: errors.length,
1073
+ category: detail.category,
1074
+ retryable: detail.retryable
1075
+ });
1076
+ const errorText = errors.join("; ") || `Agent stopped: ${msg.subtype}`;
1077
+ if (detail.category === "auth") {
1078
+ this.failTurn(new AuthError({ ...detail, message: errorText }), detail);
1079
+ } else if (errors.length > 0) {
1080
+ this.emit("agent-event", {
1081
+ type: "error",
1082
+ error: errorText,
1083
+ detail
1084
+ });
955
1085
  }
956
1086
  }
957
1087
  // ---------------------------------------------------------------------------