@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.
- package/CHANGELOG.md +63 -0
- package/dist/{asset-feeds-2V7LZIG7.js → asset-feeds-6HZDZEIT.js} +14 -13
- package/dist/asset-feeds-6HZDZEIT.js.map +1 -0
- package/dist/asset-manager/index.js +12 -12
- package/dist/asset-manager/installer.js +11 -11
- package/dist/asset-manager/renderers.js +2 -2
- package/dist/asset-manager/src/index.d.ts +27 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +1 -2
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +354 -224
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +3 -3
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +4 -4
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +5 -5
- package/dist/bridge/drivers/goose.js +4 -4
- package/dist/bridge/drivers/omp.js +3 -3
- package/dist/bridge/drivers/opencode.js +4 -4
- package/dist/bridge/drivers/qwen.js +5 -5
- package/dist/bridge/index.js +4 -4
- package/dist/bridge/src/drivers/claude-sdk.d.ts +68 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/echo.d.ts +1 -1
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
- package/dist/bridge/src/error-classifier.d.ts.map +1 -1
- package/dist/bridge/src/normalizer.d.ts +5 -0
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/{chunk-LDUNTZB6.js → chunk-26L2B6P6.js} +2 -2
- package/dist/{chunk-LDUNTZB6.js.map → chunk-26L2B6P6.js.map} +1 -1
- package/dist/{chunk-DVMSGGCM.js → chunk-45RKEHPX.js} +158 -108
- package/dist/chunk-45RKEHPX.js.map +1 -0
- package/dist/{chunk-2FS4FPZ7.js → chunk-4AGIEU7V.js} +44 -62
- package/dist/chunk-4AGIEU7V.js.map +1 -0
- package/dist/{chunk-SF4GWVR5.js → chunk-4CRKROS5.js} +86 -55
- package/dist/chunk-4CRKROS5.js.map +1 -0
- package/dist/{chunk-ZONCCO5N.js → chunk-4R6DROGN.js} +30 -32
- package/dist/chunk-4R6DROGN.js.map +1 -0
- package/dist/{chunk-MBOR7D65.js → chunk-67MFR5LS.js} +3 -3
- package/dist/{chunk-MBOR7D65.js.map → chunk-67MFR5LS.js.map} +1 -1
- package/dist/{chunk-7GWYRVAX.js → chunk-6LW7Q53Z.js} +162 -165
- package/dist/chunk-6LW7Q53Z.js.map +1 -0
- package/dist/{chunk-QMONOHXT.js → chunk-74UKG2LA.js} +3 -3
- package/dist/{chunk-QMONOHXT.js.map → chunk-74UKG2LA.js.map} +1 -1
- package/dist/{chunk-AKSR434V.js → chunk-7FLLPKX3.js} +79 -56
- package/dist/chunk-7FLLPKX3.js.map +1 -0
- package/dist/{chunk-BZ2JU7IP.js → chunk-7KOBITAP.js} +5 -5
- package/dist/{chunk-BZ2JU7IP.js.map → chunk-7KOBITAP.js.map} +1 -1
- package/dist/{chunk-JIQLLZ65.js → chunk-7MANNJ3U.js} +534 -235
- package/dist/chunk-7MANNJ3U.js.map +1 -0
- package/dist/{chunk-7R6W5EQR.js → chunk-ACXLKNIM.js} +2 -2
- package/dist/{chunk-7R6W5EQR.js.map → chunk-ACXLKNIM.js.map} +1 -1
- package/dist/{chunk-UIZKIUC6.js → chunk-BRBOC53X.js} +3 -3
- package/dist/chunk-BRBOC53X.js.map +1 -0
- package/dist/{chunk-FWHOU3CX.js → chunk-CBIPUBUS.js} +6 -6
- package/dist/{chunk-FWHOU3CX.js.map → chunk-CBIPUBUS.js.map} +1 -1
- package/dist/{chunk-3QQSSRYN.js → chunk-DKAV43NI.js} +430 -346
- package/dist/chunk-DKAV43NI.js.map +1 -0
- package/dist/{chunk-M4KLIEIJ.js → chunk-G247J4MC.js} +3 -3
- package/dist/chunk-G247J4MC.js.map +1 -0
- package/dist/{chunk-TV72ZJYN.js → chunk-GXC3TYMQ.js} +60 -47
- package/dist/chunk-GXC3TYMQ.js.map +1 -0
- package/dist/{chunk-IERB3UXJ.js → chunk-H5YXL4KI.js} +83 -69
- package/dist/chunk-H5YXL4KI.js.map +1 -0
- package/dist/{chunk-2NOE4AGD.js → chunk-HH62ECJ7.js} +3 -3
- package/dist/{chunk-2NOE4AGD.js.map → chunk-HH62ECJ7.js.map} +1 -1
- package/dist/{chunk-QDJKE557.js → chunk-HRKB2ATT.js} +64 -64
- package/dist/chunk-HRKB2ATT.js.map +1 -0
- package/dist/{chunk-MLJKA3S6.js → chunk-IENYMRZ6.js} +1711 -1497
- package/dist/chunk-IENYMRZ6.js.map +1 -0
- package/dist/{chunk-24UIWON4.js → chunk-JB35MVBN.js} +167 -156
- package/dist/chunk-JB35MVBN.js.map +1 -0
- package/dist/{chunk-5YO3H5Q4.js → chunk-KY5NY7LB.js} +3 -3
- package/dist/chunk-KY5NY7LB.js.map +1 -0
- package/dist/{chunk-MIH45XPY.js → chunk-LA2YSXEE.js} +1974 -1919
- package/dist/chunk-LA2YSXEE.js.map +1 -0
- package/dist/{chunk-IEJ5IOC3.js → chunk-LFDZYCEO.js} +4 -2
- package/dist/chunk-LFDZYCEO.js.map +1 -0
- package/dist/{chunk-72IA6BTP.js → chunk-MWAEOCU7.js} +9 -9
- package/dist/{chunk-72IA6BTP.js.map → chunk-MWAEOCU7.js.map} +1 -1
- package/dist/{chunk-5V5KZQIC.js → chunk-NGE6PALH.js} +4 -4
- package/dist/{chunk-5V5KZQIC.js.map → chunk-NGE6PALH.js.map} +1 -1
- package/dist/{chunk-PAYAFNXG.js → chunk-NGJ6E344.js} +104 -74
- package/dist/chunk-NGJ6E344.js.map +1 -0
- package/dist/{chunk-UBCZVONU.js → chunk-NQC7ZUXE.js} +3 -3
- package/dist/{chunk-UBCZVONU.js.map → chunk-NQC7ZUXE.js.map} +1 -1
- package/dist/{chunk-ZEKWHJBB.js → chunk-OEXA7BBK.js} +3 -3
- package/dist/{chunk-ZEKWHJBB.js.map → chunk-OEXA7BBK.js.map} +1 -1
- package/dist/{chunk-5RBPPBEK.js → chunk-P72K36PU.js} +4 -4
- package/dist/{chunk-5RBPPBEK.js.map → chunk-P72K36PU.js.map} +1 -1
- package/dist/{chunk-OTFG5Q7H.js → chunk-QF6LBS2C.js} +4594 -4480
- package/dist/chunk-QF6LBS2C.js.map +1 -0
- package/dist/{chunk-HK5FRWG6.js → chunk-R6O6YWU7.js} +2 -2
- package/dist/{chunk-HK5FRWG6.js.map → chunk-R6O6YWU7.js.map} +1 -1
- package/dist/{chunk-PRLD7EXG.js → chunk-SBGHNXJD.js} +2 -2
- package/dist/{chunk-PRLD7EXG.js.map → chunk-SBGHNXJD.js.map} +1 -1
- package/dist/{chunk-CMG3GJ6B.js → chunk-VO7QQ76S.js} +4 -4
- package/dist/{chunk-CMG3GJ6B.js.map → chunk-VO7QQ76S.js.map} +1 -1
- package/dist/{chunk-Z3XXKR5E.js → chunk-WDMH4UMD.js} +4 -6
- package/dist/chunk-WDMH4UMD.js.map +1 -0
- package/dist/{chunk-W7W66MDZ.js → chunk-X46FY45B.js} +44 -42
- package/dist/chunk-X46FY45B.js.map +1 -0
- package/dist/{chunk-JKNWJ64A.js → chunk-XGCXFX7X.js} +2 -2
- package/dist/{chunk-JKNWJ64A.js.map → chunk-XGCXFX7X.js.map} +1 -1
- package/dist/{chunk-FQHHCICT.js → chunk-XVDXGQ55.js} +226 -226
- package/dist/chunk-XVDXGQ55.js.map +1 -0
- package/dist/{chunk-OKRUTSG7.js → chunk-ZDKJHQY2.js} +2 -2
- package/dist/{chunk-OKRUTSG7.js.map → chunk-ZDKJHQY2.js.map} +1 -1
- package/dist/{chunk-LD4QIVBY.js → chunk-ZM7UOJR2.js} +3 -3
- package/dist/{chunk-LD4QIVBY.js.map → chunk-ZM7UOJR2.js.map} +1 -1
- package/dist/cli/index.js +2811 -2662
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +0 -9
- package/dist/cli/src/asset-feeds.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/deploy.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/show.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/ensure-sources.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts.map +1 -1
- package/dist/cli/src/open-registry.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +4 -6
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/paths.d.ts +0 -2
- package/dist/cli/src/plugin-store/paths.d.ts.map +1 -1
- package/dist/cli/src/setup.d.ts.map +1 -1
- package/dist/connectors/config.js +9 -9
- package/dist/connectors/index.js +12 -12
- package/dist/connectors/rclone.js +2 -2
- package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
- package/dist/connectors/src/connector-registry.d.ts.map +1 -1
- package/dist/connectors/src/connector-types.d.ts +1 -1
- package/dist/connectors/src/connector-types.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +5 -5
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/{connectors-PTCSHCHZ.js → connectors-DY7UBBV5.js} +3 -3
- package/dist/{connectors-PTCSHCHZ.js.map → connectors-DY7UBBV5.js.map} +1 -1
- package/dist/connectors-shared/src/index.d.ts +1 -1
- package/dist/connectors-shared/src/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -8
- package/dist/core/logging.js +1 -1
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/lock.d.ts +0 -9
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/logging/create-logger.d.ts.map +1 -1
- package/dist/core/src/logging/index.d.ts +11 -11
- package/dist/core/src/logging/index.d.ts.map +1 -1
- package/dist/core/src/logging/log-store.d.ts.map +1 -1
- package/dist/core/src/logging/sinks/no-op-sink.d.ts.map +1 -1
- package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +6 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +0 -12
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/runtime-assets.d.ts.map +1 -1
- package/dist/core/src/store.d.ts +1 -1
- package/dist/core/src/store.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +8 -27
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/store.js +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +8 -8
- package/dist/discovery/index.js +6 -6
- package/dist/discovery/src/asset-kind-registry.d.ts +1 -1
- package/dist/discovery/src/asset-kind-registry.d.ts.map +1 -1
- package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
- package/dist/discovery/src/discover-manifest.d.ts +1 -1
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
- package/dist/discovery/src/discover.d.ts +30 -3
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/domains.d.ts +144 -0
- package/dist/discovery/src/domains.d.ts.map +1 -0
- package/dist/discovery/src/index.d.ts +9 -7
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +1 -1
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts +13 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/ensure-sources-JWBUVDW6.js +84 -0
- package/dist/ensure-sources-JWBUVDW6.js.map +1 -0
- package/dist/factory-assets/connectors/deploy/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/deploy/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/deploy.js +12 -12
- package/dist/factory-assets/connectors/devserver/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/devserver.js +12 -12
- package/dist/factory-assets/connectors/flow/adapter.d.ts +16 -2
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/adapter.js +12 -12
- package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/index.d.ts +3 -3
- package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +9 -9
- package/dist/factory-assets/connectors/flow/index.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +15 -15
- package/dist/factory-assets/connectors/flow.js +12 -12
- package/dist/factory-assets/connectors/git/driver.d.ts +32 -0
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +12 -12
- package/dist/factory-assets/connectors/gmail/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/gmail.js +12 -12
- package/dist/factory-assets/connectors/googledrive.js +12 -12
- package/dist/factory-assets/connectors/local/driver.d.ts +1 -2
- package/dist/factory-assets/connectors/local/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/local.js +12 -12
- package/dist/factory-assets/connectors/mattermost/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/mattermost/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/mattermost.js +12 -12
- package/dist/factory-assets/connectors/memory/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/memory.js +12 -12
- package/dist/factory-assets/connectors/minio/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/minio.js +12 -12
- package/dist/factory-assets/connectors/postgres/adapter.d.ts +6 -1
- package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/postgres.js +12 -12
- package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/s3.js +12 -12
- package/dist/factory-assets/connectors/sharepoint.js +12 -12
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/sqlite.js +12 -12
- package/dist/factory-assets/connectors/static-server/adapter.d.ts +6 -1
- package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/static-server.js +12 -12
- package/dist/factory-assets/connectors/tunnel/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/tunnel/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/tunnel.js +12 -12
- package/dist/factory-assets/connectors/webdav.js +12 -12
- package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts +7 -0
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store.js +12 -12
- package/dist/factory-assets/connectors/xstate.js +12 -12
- package/dist/flows-T6RCRKCX.js +7 -0
- package/dist/{flows-L3GHQD7F.js.map → flows-T6RCRKCX.js.map} +1 -1
- package/dist/library/index.js +13 -13
- package/dist/library/install.js +9 -9
- package/dist/library/src/config.d.ts +2 -2
- package/dist/library/src/config.d.ts.map +1 -1
- package/dist/library/src/index.d.ts +27 -27
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/install/index.d.ts +2 -2
- package/dist/library/src/install/index.d.ts.map +1 -1
- package/dist/library/src/install/install-from-manifest.d.ts +0 -21
- package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
- package/dist/library/src/knowledge/index.d.ts +2 -2
- package/dist/library/src/knowledge/index.d.ts.map +1 -1
- package/dist/library/src/knowledge/knowledge-kind-provider.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +2 -2
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/store-paths.d.ts.map +1 -1
- package/dist/library/src/pin-resolver.d.ts.map +1 -1
- package/dist/library/src/preset/apply.d.ts +2 -2
- package/dist/library/src/preset/apply.d.ts.map +1 -1
- package/dist/library/src/preset/index.d.ts +10 -10
- package/dist/library/src/preset/index.d.ts.map +1 -1
- package/dist/library/src/preset/parse.d.ts.map +1 -1
- package/dist/library/src/preset/resolve-item.d.ts +1 -1
- package/dist/library/src/preset/resolve-item.d.ts.map +1 -1
- package/dist/library/src/preset/upgrade.d.ts +1 -1
- package/dist/library/src/preset/upgrade.d.ts.map +1 -1
- package/dist/library/src/remote/index.d.ts +5 -5
- package/dist/library/src/remote/index.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/driver.d.ts +1 -1
- package/dist/library/src/sync/driver.d.ts.map +1 -1
- package/dist/library/src/sync/git-driver.d.ts +1 -1
- package/dist/library/src/sync/git-driver.d.ts.map +1 -1
- package/dist/library/src/sync/local-driver.d.ts +1 -1
- package/dist/library/src/sync/local-driver.d.ts.map +1 -1
- package/dist/library/src/workspace-config.d.ts +0 -9
- package/dist/library/src/workspace-config.d.ts.map +1 -1
- package/dist/open-library-ZXTSUPBJ.js +23 -0
- package/dist/{open-library-3VJY74LQ.js.map → open-library-ZXTSUPBJ.js.map} +1 -1
- package/dist/paths-F7RHQUFL.js +15 -0
- package/dist/{paths-CE66L3AL.js.map → paths-F7RHQUFL.js.map} +1 -1
- package/dist/plugin-registry/src/targets.d.ts +2 -3
- package/dist/plugin-registry/src/targets.d.ts.map +1 -1
- package/dist/{plugin-store-GL5VKYUA.js → plugin-store-BC3I36HA.js} +11 -14
- package/dist/plugin-store-BC3I36HA.js.map +1 -0
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/src/asset-kind-registry.d.ts +1 -1
- package/dist/plugins/src/asset-kind-registry.d.ts.map +1 -1
- package/dist/plugins/src/catalog-source.d.ts +5 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/plugins/src/index.d.ts +5 -5
- package/dist/plugins/src/index.d.ts.map +1 -1
- package/dist/{provider-GAWKFQ3T.js → provider-ZPT443IX.js} +18 -16
- package/dist/provider-ZPT443IX.js.map +1 -0
- package/dist/resolver/index.js +1 -1
- package/dist/resolver/src/preamble.d.ts.map +1 -1
- package/dist/runner/index.js +17 -17
- package/dist/runner/src/builtin-capabilities.d.ts +12 -0
- package/dist/runner/src/builtin-capabilities.d.ts.map +1 -1
- package/dist/runner/src/capability-registry.d.ts.map +1 -1
- package/dist/runner/src/compaction/index.d.ts +0 -4
- package/dist/runner/src/compaction/index.d.ts.map +1 -1
- package/dist/runner/src/compaction/orchestrator.d.ts +23 -2
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/composition/compile.d.ts.map +1 -1
- package/dist/runner/src/composition/index.d.ts +4 -4
- package/dist/runner/src/composition/index.d.ts.map +1 -1
- package/dist/runner/src/composition/resolve.d.ts.map +1 -1
- package/dist/runner/src/composition/types.d.ts +2 -2
- package/dist/runner/src/composition/types.d.ts.map +1 -1
- package/dist/runner/src/config.d.ts +2 -2
- package/dist/runner/src/config.d.ts.map +1 -1
- package/dist/runner/src/define-capability.d.ts +1 -1
- package/dist/runner/src/define-capability.d.ts.map +1 -1
- package/dist/runner/src/external-mcp.d.ts.map +1 -1
- package/dist/runner/src/index.d.ts +9 -9
- package/dist/runner/src/index.d.ts.map +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
- package/dist/runner/src/manifest.d.ts.map +1 -1
- package/dist/runner/src/recipe-resolver.d.ts +32 -0
- package/dist/runner/src/recipe-resolver.d.ts.map +1 -1
- package/dist/runner/src/resource-handler.d.ts.map +1 -1
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/runner-capabilities.d.ts +25 -0
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +12 -12
- package/dist/sdk/bridge.js +4 -4
- package/dist/sdk/core.js +8 -8
- package/dist/sdk/flow.js +9 -9
- package/dist/sdk/index.js +92 -76
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +1 -1
- package/dist/sdk/runner.js +17 -17
- package/dist/sdk/session.js +1 -1
- package/dist/sdk/src/agent-session.d.ts +8 -0
- package/dist/sdk/src/agent-session.d.ts.map +1 -1
- package/dist/sdk/src/factory.d.ts.map +1 -1
- package/dist/sdk/src/index.d.ts +2 -2
- package/dist/sdk/src/index.d.ts.map +1 -1
- package/dist/sdk/store.js +1 -1
- package/dist/sdk/telemetry.js +1 -1
- package/dist/secrets/index.js +2 -2
- package/dist/secrets/src/index.d.ts +8 -8
- package/dist/secrets/src/index.d.ts.map +1 -1
- package/dist/secrets/src/lifecycle.d.ts +1 -2
- package/dist/secrets/src/lifecycle.d.ts.map +1 -1
- package/dist/secrets/src/providers/env.d.ts +1 -1
- package/dist/secrets/src/providers/env.d.ts.map +1 -1
- package/dist/secrets/src/providers/local.d.ts +1 -1
- package/dist/secrets/src/providers/local.d.ts.map +1 -1
- package/dist/secrets/src/router.d.ts +1 -1
- package/dist/secrets/src/router.d.ts.map +1 -1
- package/dist/session/index.js +1 -1
- package/dist/session/src/mentions.d.ts.map +1 -1
- package/dist/{sessions-2IUX4P3P.js → sessions-DICDEONJ.js} +3 -3
- package/dist/{sessions-2IUX4P3P.js.map → sessions-DICDEONJ.js.map} +1 -1
- package/dist/{setup-4YMN2BDU.js → setup-FQ3DE6J6.js} +198 -175
- package/dist/setup-FQ3DE6J6.js.map +1 -0
- package/dist/skills-BMI6H7HI.js +7 -0
- package/dist/{skills-6HJ3WINN.js.map → skills-BMI6H7HI.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/index.d.ts +1 -1
- package/dist/store/src/index.d.ts.map +1 -1
- package/dist/store/src/resource-client.d.ts +1 -1
- package/dist/store/src/resource-client.d.ts.map +1 -1
- package/dist/store/src/vue.d.ts.map +1 -1
- package/dist/store/vue.js.map +1 -1
- package/dist/store-client-27YYEWMM.js +15 -0
- package/dist/{store-client-BCP5LCAZ.js.map → store-client-27YYEWMM.js.map} +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/src/context.d.ts.map +1 -1
- package/dist/telemetry/src/index.d.ts +3 -3
- package/dist/telemetry/src/index.d.ts.map +1 -1
- package/dist/telemetry/src/otel/gen-ai.d.ts +1 -1
- package/dist/telemetry/src/otel/gen-ai.d.ts.map +1 -1
- package/dist/telemetry/src/otel/provider.d.ts.map +1 -1
- package/dist/transport/src/index.d.ts +1 -1
- package/dist/transport/src/index.d.ts.map +1 -1
- package/dist/tui/index.js +251 -218
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/index.d.ts +2 -2
- package/dist/tui/src/index.d.ts.map +1 -1
- package/dist/tui/src/repl-renderer.d.ts.map +1 -1
- package/dist/tui/src/repl-session.d.ts +1 -1
- package/dist/tui/src/repl-session.d.ts.map +1 -1
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/envelope.d.ts +1 -1
- package/dist/types/src/envelope.d.ts.map +1 -1
- package/dist/types/src/manifests/agent.d.ts.map +1 -1
- package/dist/types/src/manifests/connector.d.ts.map +1 -1
- package/dist/types/src/manifests/contract.d.ts.map +1 -1
- package/dist/types/src/manifests/index.d.ts +16 -16
- package/dist/types/src/manifests/index.d.ts.map +1 -1
- package/dist/types/src/manifests/mcp-server.d.ts.map +1 -1
- package/dist/types/src/manifests/mount.d.ts.map +1 -1
- package/dist/types/src/manifests/persona.d.ts.map +1 -1
- package/dist/types/src/manifests/preset.d.ts +0 -18
- package/dist/types/src/manifests/preset.d.ts.map +1 -1
- package/dist/types/src/manifests/prompt.d.ts.map +1 -1
- package/dist/types/src/manifests/ruleset.d.ts.map +1 -1
- package/dist/types/src/manifests/skill.d.ts.map +1 -1
- package/dist/validator-VF5M764T.js +5 -0
- package/dist/{validator-47SQUW3J.js.map → validator-VF5M764T.js.map} +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +6 -6
- package/dist/workspace-plugin/adapters/omp.js +76 -69
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +2 -2
- package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/sessions.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
- package/package.json +1 -2
- package/dist/asset-feeds-2V7LZIG7.js.map +0 -1
- package/dist/chunk-24UIWON4.js.map +0 -1
- package/dist/chunk-2FS4FPZ7.js.map +0 -1
- package/dist/chunk-3QQSSRYN.js.map +0 -1
- package/dist/chunk-5YO3H5Q4.js.map +0 -1
- package/dist/chunk-7GWYRVAX.js.map +0 -1
- package/dist/chunk-AKSR434V.js.map +0 -1
- package/dist/chunk-DVMSGGCM.js.map +0 -1
- package/dist/chunk-FQHHCICT.js.map +0 -1
- package/dist/chunk-IEJ5IOC3.js.map +0 -1
- package/dist/chunk-IERB3UXJ.js.map +0 -1
- package/dist/chunk-JIQLLZ65.js.map +0 -1
- package/dist/chunk-M4KLIEIJ.js.map +0 -1
- package/dist/chunk-MIH45XPY.js.map +0 -1
- package/dist/chunk-MLJKA3S6.js.map +0 -1
- package/dist/chunk-OTFG5Q7H.js.map +0 -1
- package/dist/chunk-PAYAFNXG.js.map +0 -1
- package/dist/chunk-QDJKE557.js.map +0 -1
- package/dist/chunk-SF4GWVR5.js.map +0 -1
- package/dist/chunk-TV72ZJYN.js.map +0 -1
- package/dist/chunk-UIZKIUC6.js.map +0 -1
- package/dist/chunk-W7W66MDZ.js.map +0 -1
- package/dist/chunk-Z3XXKR5E.js.map +0 -1
- package/dist/chunk-ZONCCO5N.js.map +0 -1
- package/dist/ensure-sources-BNSRO5G7.js +0 -74
- package/dist/ensure-sources-BNSRO5G7.js.map +0 -1
- package/dist/flows-L3GHQD7F.js +0 -7
- package/dist/open-library-3VJY74LQ.js +0 -23
- package/dist/paths-CE66L3AL.js +0 -15
- package/dist/plugin-store-GL5VKYUA.js.map +0 -1
- package/dist/provider-GAWKFQ3T.js.map +0 -1
- package/dist/setup-4YMN2BDU.js.map +0 -1
- package/dist/skills-6HJ3WINN.js +0 -7
- package/dist/store-client-BCP5LCAZ.js +0 -15
- 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-
|
|
4
|
-
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
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.
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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: "
|
|
883
|
-
|
|
930
|
+
type: "tool_call",
|
|
931
|
+
name: tc.name,
|
|
932
|
+
tool: { name: tc.name },
|
|
933
|
+
input: tc.input
|
|
884
934
|
});
|
|
885
935
|
}
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
this.
|
|
915
|
-
|
|
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
|
// ---------------------------------------------------------------------------
|