managed-deepagents 0.4.2 → 0.4.3-dev.95
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/README.md +78 -35
- package/dist/channels/assistant-text.js +1 -1
- package/dist/channels/assistant-text.js.map +1 -1
- package/dist/channels/binding.d.ts.map +1 -1
- package/dist/channels/binding.js +3 -1
- package/dist/channels/binding.js.map +1 -1
- package/dist/channels/index.d.ts +7 -8
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +6 -5
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/manifest.d.ts +7 -4
- package/dist/channels/manifest.d.ts.map +1 -1
- package/dist/channels/messaging-registry.d.ts +21 -0
- package/dist/channels/messaging-registry.d.ts.map +1 -0
- package/dist/channels/messaging-registry.js +50 -0
- package/dist/channels/messaging-registry.js.map +1 -0
- package/dist/channels/registry-types.d.ts +1 -1
- package/dist/channels/registry.d.ts +4 -3
- package/dist/channels/registry.d.ts.map +1 -1
- package/dist/channels/registry.js +5 -6
- package/dist/channels/registry.js.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +4 -1
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +3 -1
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/slack/adapter.d.ts +1 -2
- package/dist/channels/slack/adapter.d.ts.map +1 -1
- package/dist/channels/slack/adapter.js +0 -2
- package/dist/channels/slack/adapter.js.map +1 -1
- package/dist/channels/slack/http.d.ts +7 -39
- package/dist/channels/slack/http.d.ts.map +1 -1
- package/dist/channels/slack/http.js +64 -122
- package/dist/channels/slack/http.js.map +1 -1
- package/dist/channels/slack/index.d.ts +94 -8
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +144 -6
- package/dist/channels/slack/index.js.map +1 -1
- package/dist/channels/slack/normalize.d.ts +6 -4
- package/dist/channels/slack/normalize.d.ts.map +1 -1
- package/dist/channels/slack/normalize.js +61 -28
- package/dist/channels/slack/normalize.js.map +1 -1
- package/dist/channels/slack/transport.d.ts.map +1 -1
- package/dist/channels/slack/transport.js +3 -2
- package/dist/channels/slack/transport.js.map +1 -1
- package/dist/channels/store.d.ts +14 -0
- package/dist/channels/store.d.ts.map +1 -1
- package/dist/channels/store.js +41 -27
- package/dist/channels/store.js.map +1 -1
- package/dist/connectors/marketplace/catalog.d.ts +96 -0
- package/dist/connectors/marketplace/catalog.d.ts.map +1 -0
- package/dist/connectors/marketplace/catalog.js +213 -0
- package/dist/connectors/marketplace/catalog.js.map +1 -0
- package/dist/connectors/marketplace/fleet-mcp.d.ts +62 -0
- package/dist/connectors/marketplace/fleet-mcp.d.ts.map +1 -0
- package/dist/connectors/marketplace/fleet-mcp.js +215 -0
- package/dist/connectors/marketplace/fleet-mcp.js.map +1 -0
- package/dist/connectors/marketplace/index.d.ts +31 -0
- package/dist/connectors/marketplace/index.d.ts.map +1 -0
- package/dist/connectors/marketplace/index.js +39 -0
- package/dist/connectors/marketplace/index.js.map +1 -0
- package/dist/connectors/marketplace/load.d.ts +14 -0
- package/dist/connectors/marketplace/load.d.ts.map +1 -0
- package/dist/connectors/marketplace/load.js +206 -0
- package/dist/connectors/marketplace/load.js.map +1 -0
- package/dist/connectors/mcp/index.d.ts +13 -20
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +92 -112
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/connectors/mcp/load.d.ts.map +1 -1
- package/dist/connectors/mcp/load.js +16 -40
- package/dist/connectors/mcp/load.js.map +1 -1
- package/dist/connectors/slack/index.d.ts +24 -0
- package/dist/connectors/slack/index.d.ts.map +1 -0
- package/dist/connectors/slack/index.js +64 -0
- package/dist/connectors/slack/index.js.map +1 -0
- package/dist/connectors/tool-selection.d.ts +55 -0
- package/dist/connectors/tool-selection.d.ts.map +1 -0
- package/dist/connectors/tool-selection.js +112 -0
- package/dist/connectors/tool-selection.js.map +1 -0
- package/dist/connectors/toolserver/catalog.d.ts +326 -0
- package/dist/connectors/toolserver/catalog.d.ts.map +1 -0
- package/dist/connectors/toolserver/catalog.js +415 -0
- package/dist/connectors/toolserver/catalog.js.map +1 -0
- package/dist/connectors/toolserver/connectors.d.ts +698 -0
- package/dist/connectors/toolserver/connectors.d.ts.map +1 -0
- package/dist/connectors/toolserver/connectors.js +13 -0
- package/dist/connectors/toolserver/connectors.js.map +1 -0
- package/dist/connectors/toolserver/index.d.ts +142 -0
- package/dist/connectors/toolserver/index.d.ts.map +1 -0
- package/dist/connectors/toolserver/index.js +105 -0
- package/dist/connectors/toolserver/index.js.map +1 -0
- package/dist/connectors/toolserver/integrations.d.ts +103 -0
- package/dist/connectors/toolserver/integrations.d.ts.map +1 -0
- package/dist/connectors/toolserver/integrations.js +288 -0
- package/dist/connectors/toolserver/integrations.js.map +1 -0
- package/dist/connectors/toolserver/load.d.ts +55 -0
- package/dist/connectors/toolserver/load.d.ts.map +1 -0
- package/dist/connectors/toolserver/load.js +289 -0
- package/dist/connectors/toolserver/load.js.map +1 -0
- package/dist/define-deep-agent.d.ts.map +1 -1
- package/dist/define-deep-agent.js +9 -3
- package/dist/define-deep-agent.js.map +1 -1
- package/dist/extension.d.ts +69 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +108 -0
- package/dist/extension.js.map +1 -0
- package/dist/identity/actor-subject.d.ts +60 -0
- package/dist/identity/actor-subject.d.ts.map +1 -0
- package/dist/identity/actor-subject.js +107 -0
- package/dist/identity/actor-subject.js.map +1 -0
- package/dist/identity/byo-oauth.d.ts +105 -0
- package/dist/identity/byo-oauth.d.ts.map +1 -0
- package/dist/identity/byo-oauth.js +190 -0
- package/dist/identity/byo-oauth.js.map +1 -0
- package/dist/identity/claims.d.ts +16 -0
- package/dist/identity/claims.d.ts.map +1 -0
- package/dist/identity/claims.js +33 -0
- package/dist/identity/claims.js.map +1 -0
- package/dist/identity/connect-inference.d.ts +37 -0
- package/dist/identity/connect-inference.d.ts.map +1 -0
- package/dist/identity/connect-inference.js +53 -0
- package/dist/identity/connect-inference.js.map +1 -0
- package/dist/identity/connect-provider-types.d.ts +35 -6
- package/dist/identity/connect-provider-types.d.ts.map +1 -1
- package/dist/identity/connect-provider-types.js +3 -1
- package/dist/identity/connect-provider-types.js.map +1 -1
- package/dist/identity/connect-provider.d.ts +9 -4
- package/dist/identity/connect-provider.d.ts.map +1 -1
- package/dist/identity/connect-provider.js +39 -13
- package/dist/identity/connect-provider.js.map +1 -1
- package/dist/identity/credential-resolvers.d.ts +33 -0
- package/dist/identity/credential-resolvers.d.ts.map +1 -0
- package/dist/identity/credential-resolvers.js +62 -0
- package/dist/identity/credential-resolvers.js.map +1 -0
- package/dist/identity/define-fleet-connect.d.ts +53 -0
- package/dist/identity/define-fleet-connect.d.ts.map +1 -0
- package/dist/identity/define-fleet-connect.js +76 -0
- package/dist/identity/define-fleet-connect.js.map +1 -0
- package/dist/identity/fleet-connect-hint.d.ts +41 -0
- package/dist/identity/fleet-connect-hint.d.ts.map +1 -0
- package/dist/identity/fleet-connect-hint.js +190 -0
- package/dist/identity/fleet-connect-hint.js.map +1 -0
- package/dist/identity/fleet-connect.d.ts +93 -0
- package/dist/identity/fleet-connect.d.ts.map +1 -0
- package/dist/identity/fleet-connect.js +256 -0
- package/dist/identity/fleet-connect.js.map +1 -0
- package/dist/identity/fleet-integration-connect.d.ts +32 -0
- package/dist/identity/fleet-integration-connect.d.ts.map +1 -0
- package/dist/identity/fleet-integration-connect.js +35 -0
- package/dist/identity/fleet-integration-connect.js.map +1 -0
- package/dist/identity/fleet.d.ts +56 -0
- package/dist/identity/fleet.d.ts.map +1 -0
- package/dist/identity/fleet.js +131 -0
- package/dist/identity/fleet.js.map +1 -0
- package/dist/identity/github/connect-http.d.ts +8 -4
- package/dist/identity/github/connect-http.d.ts.map +1 -1
- package/dist/identity/github/connect-http.js +32 -15
- package/dist/identity/github/connect-http.js.map +1 -1
- package/dist/identity/github/credentials-store.d.ts +10 -10
- package/dist/identity/github/credentials-store.d.ts.map +1 -1
- package/dist/identity/github/credentials-store.js +62 -49
- package/dist/identity/github/credentials-store.js.map +1 -1
- package/dist/identity/github/credentials.d.ts +16 -13
- package/dist/identity/github/credentials.d.ts.map +1 -1
- package/dist/identity/github/credentials.js +43 -23
- package/dist/identity/github/credentials.js.map +1 -1
- package/dist/identity/github/index.d.ts +1 -4
- package/dist/identity/github/index.d.ts.map +1 -1
- package/dist/identity/github/index.js +0 -3
- package/dist/identity/github/index.js.map +1 -1
- package/dist/identity/github/oauth.d.ts +18 -20
- package/dist/identity/github/oauth.d.ts.map +1 -1
- package/dist/identity/github/oauth.js +90 -109
- package/dist/identity/github/oauth.js.map +1 -1
- package/dist/identity/google/connect-http.d.ts +37 -0
- package/dist/identity/google/connect-http.d.ts.map +1 -0
- package/dist/identity/google/connect-http.js +42 -0
- package/dist/identity/google/connect-http.js.map +1 -0
- package/dist/identity/google/index.d.ts +7 -0
- package/dist/identity/google/index.d.ts.map +1 -0
- package/dist/identity/google/index.js +6 -0
- package/dist/identity/google/index.js.map +1 -0
- package/dist/identity/google/oauth.d.ts +22 -0
- package/dist/identity/google/oauth.d.ts.map +1 -0
- package/dist/identity/google/oauth.js +48 -0
- package/dist/identity/google/oauth.js.map +1 -0
- package/dist/identity/index.d.ts +40 -64
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +104 -243
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/linkedin/connect-http.d.ts +37 -0
- package/dist/identity/linkedin/connect-http.d.ts.map +1 -0
- package/dist/identity/linkedin/connect-http.js +41 -0
- package/dist/identity/linkedin/connect-http.js.map +1 -0
- package/dist/identity/linkedin/index.d.ts +7 -0
- package/dist/identity/linkedin/index.d.ts.map +1 -0
- package/dist/identity/linkedin/index.js +6 -0
- package/dist/identity/linkedin/index.js.map +1 -0
- package/dist/identity/linkedin/oauth.d.ts +22 -0
- package/dist/identity/linkedin/oauth.d.ts.map +1 -0
- package/dist/identity/linkedin/oauth.js +47 -0
- package/dist/identity/linkedin/oauth.js.map +1 -0
- package/dist/identity/loopback.d.ts +27 -2
- package/dist/identity/loopback.d.ts.map +1 -1
- package/dist/identity/loopback.js +61 -8
- package/dist/identity/loopback.js.map +1 -1
- package/dist/identity/marketplace/connect-hint.d.ts +31 -0
- package/dist/identity/marketplace/connect-hint.d.ts.map +1 -0
- package/dist/identity/marketplace/connect-hint.js +59 -0
- package/dist/identity/marketplace/connect-hint.js.map +1 -0
- package/dist/identity/marketplace/connect.d.ts +51 -0
- package/dist/identity/marketplace/connect.d.ts.map +1 -0
- package/dist/identity/marketplace/connect.js +88 -0
- package/dist/identity/marketplace/connect.js.map +1 -0
- package/dist/identity/marketplace/index.d.ts +9 -0
- package/dist/identity/marketplace/index.d.ts.map +1 -0
- package/dist/identity/marketplace/index.js +9 -0
- package/dist/identity/marketplace/index.js.map +1 -0
- package/dist/identity/microsoft/connect-http.d.ts +38 -0
- package/dist/identity/microsoft/connect-http.d.ts.map +1 -0
- package/dist/identity/microsoft/connect-http.js +42 -0
- package/dist/identity/microsoft/connect-http.js.map +1 -0
- package/dist/identity/microsoft/index.d.ts +7 -0
- package/dist/identity/microsoft/index.d.ts.map +1 -0
- package/dist/identity/microsoft/index.js +6 -0
- package/dist/identity/microsoft/index.js.map +1 -0
- package/dist/identity/microsoft/oauth.d.ts +24 -0
- package/dist/identity/microsoft/oauth.d.ts.map +1 -0
- package/dist/identity/microsoft/oauth.js +65 -0
- package/dist/identity/microsoft/oauth.js.map +1 -0
- package/dist/identity/oauth-env.d.ts +43 -0
- package/dist/identity/oauth-env.d.ts.map +1 -0
- package/dist/identity/oauth-env.js +66 -0
- package/dist/identity/oauth-env.js.map +1 -0
- package/dist/identity/oauth-tickets.d.ts +37 -0
- package/dist/identity/oauth-tickets.d.ts.map +1 -0
- package/dist/identity/oauth-tickets.js +114 -0
- package/dist/identity/oauth-tickets.js.map +1 -0
- package/dist/identity/options.d.ts +35 -0
- package/dist/identity/options.d.ts.map +1 -0
- package/dist/identity/options.js +80 -0
- package/dist/identity/options.js.map +1 -0
- package/dist/identity/slack/connect-http.d.ts +6 -4
- package/dist/identity/slack/connect-http.d.ts.map +1 -1
- package/dist/identity/slack/connect-http.js +27 -17
- package/dist/identity/slack/connect-http.js.map +1 -1
- package/dist/identity/slack/index.d.ts +1 -2
- package/dist/identity/slack/index.d.ts.map +1 -1
- package/dist/identity/slack/index.js +1 -2
- package/dist/identity/slack/index.js.map +1 -1
- package/dist/identity/slack/links.d.ts +18 -17
- package/dist/identity/slack/links.d.ts.map +1 -1
- package/dist/identity/slack/links.js +75 -61
- package/dist/identity/slack/links.js.map +1 -1
- package/dist/identity/slack/oauth.d.ts +3 -35
- package/dist/identity/slack/oauth.d.ts.map +1 -1
- package/dist/identity/slack/oauth.js +9 -115
- package/dist/identity/slack/oauth.js.map +1 -1
- package/dist/identity/supabase.js +9 -9
- package/dist/identity/supabase.js.map +1 -1
- package/dist/identity/types.d.ts +91 -54
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/identity/x/connect-http.d.ts +38 -0
- package/dist/identity/x/connect-http.d.ts.map +1 -0
- package/dist/identity/x/connect-http.js +41 -0
- package/dist/identity/x/connect-http.js.map +1 -0
- package/dist/identity/x/index.d.ts +6 -0
- package/dist/identity/x/index.d.ts.map +1 -0
- package/dist/identity/x/index.js +5 -0
- package/dist/identity/x/index.js.map +1 -0
- package/dist/index.d.ts +9 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -11
- package/dist/index.js.map +1 -1
- package/dist/ingress/index.d.ts +52 -0
- package/dist/ingress/index.d.ts.map +1 -0
- package/dist/ingress/index.js +139 -0
- package/dist/ingress/index.js.map +1 -0
- package/dist/memory/define-memory.d.ts +39 -0
- package/dist/memory/define-memory.d.ts.map +1 -0
- package/dist/memory/define-memory.js +78 -0
- package/dist/memory/define-memory.js.map +1 -0
- package/dist/memory/index.d.ts +9 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +8 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/instructions-middleware.d.ts +74 -0
- package/dist/memory/instructions-middleware.d.ts.map +1 -0
- package/dist/memory/instructions-middleware.js +115 -0
- package/dist/memory/instructions-middleware.js.map +1 -0
- package/dist/memory/slices.d.ts +21 -0
- package/dist/memory/slices.d.ts.map +1 -0
- package/dist/memory/slices.js +61 -0
- package/dist/memory/slices.js.map +1 -0
- package/dist/memory/types.d.ts +71 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +10 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/namespaces.d.ts +262 -0
- package/dist/namespaces.d.ts.map +1 -0
- package/dist/namespaces.js +101 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/runtime/auth.d.ts +46 -32
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +234 -125
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/backend.d.ts +1 -1
- package/dist/runtime/backend.d.ts.map +1 -1
- package/dist/runtime/backend.js +26 -5
- package/dist/runtime/backend.js.map +1 -1
- package/dist/runtime/channel.d.ts +91 -0
- package/dist/runtime/channel.d.ts.map +1 -0
- package/dist/runtime/channel.js +98 -0
- package/dist/runtime/channel.js.map +1 -0
- package/dist/runtime/connector.d.ts +66 -23
- package/dist/runtime/connector.d.ts.map +1 -1
- package/dist/runtime/connector.js +67 -27
- package/dist/runtime/connector.js.map +1 -1
- package/dist/runtime/cors.d.ts +12 -3
- package/dist/runtime/cors.d.ts.map +1 -1
- package/dist/runtime/cors.js +23 -5
- package/dist/runtime/cors.js.map +1 -1
- package/dist/runtime/credentials.d.ts +8 -8
- package/dist/runtime/credentials.d.ts.map +1 -1
- package/dist/runtime/credentials.js +46 -23
- package/dist/runtime/credentials.js.map +1 -1
- package/dist/runtime/http.d.ts +46 -0
- package/dist/runtime/http.d.ts.map +1 -0
- package/dist/runtime/http.js +53 -0
- package/dist/runtime/http.js.map +1 -0
- package/dist/runtime/identity-http.d.ts +13 -20
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +158 -75
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +12 -28
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +35 -72
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +89 -225
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +92 -61
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/memory/index.d.ts +0 -2
- package/dist/runtime/memory/index.d.ts.map +1 -1
- package/dist/runtime/memory/index.js +0 -2
- package/dist/runtime/memory/index.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts +4 -12
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +9 -20
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/recursion-limit.d.ts +22 -0
- package/dist/runtime/recursion-limit.d.ts.map +1 -0
- package/dist/runtime/recursion-limit.js +46 -0
- package/dist/runtime/recursion-limit.js.map +1 -0
- package/dist/runtime/sandbox-manager.d.ts +60 -3
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +326 -26
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/sandbox-stream-retry.d.ts +18 -0
- package/dist/runtime/sandbox-stream-retry.d.ts.map +1 -0
- package/dist/runtime/sandbox-stream-retry.js +90 -0
- package/dist/runtime/sandbox-stream-retry.js.map +1 -0
- package/dist/runtime/setup-script.d.ts.map +1 -1
- package/dist/runtime/setup-script.js +16 -2
- package/dist/runtime/setup-script.js.map +1 -1
- package/dist/runtime/types.d.ts +16 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/validated-token.d.ts +9 -14
- package/dist/runtime/validated-token.d.ts.map +1 -1
- package/dist/runtime/validated-token.js +79 -106
- package/dist/runtime/validated-token.js.map +1 -1
- package/dist/sandbox.d.ts +17 -42
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +11 -32
- package/dist/sandbox.js.map +1 -1
- package/dist/schedules.js +8 -9
- package/dist/schedules.js.map +1 -1
- package/dist/types.d.ts +4 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +22 -29
- package/dist/channels/collect.d.ts +0 -26
- package/dist/channels/collect.d.ts.map +0 -1
- package/dist/channels/collect.js +0 -42
- package/dist/channels/collect.js.map +0 -1
- package/dist/channels/github/adapter-core.d.ts +0 -6
- package/dist/channels/github/adapter-core.d.ts.map +0 -1
- package/dist/channels/github/adapter-core.js +0 -27
- package/dist/channels/github/adapter-core.js.map +0 -1
- package/dist/channels/github/adapter.d.ts +0 -16
- package/dist/channels/github/adapter.d.ts.map +0 -1
- package/dist/channels/github/adapter.js +0 -52
- package/dist/channels/github/adapter.js.map +0 -1
- package/dist/channels/github/define.d.ts +0 -198
- package/dist/channels/github/define.d.ts.map +0 -1
- package/dist/channels/github/define.js +0 -166
- package/dist/channels/github/define.js.map +0 -1
- package/dist/channels/github/http.d.ts +0 -25
- package/dist/channels/github/http.d.ts.map +0 -1
- package/dist/channels/github/http.js +0 -147
- package/dist/channels/github/http.js.map +0 -1
- package/dist/channels/github/index.d.ts +0 -12
- package/dist/channels/github/index.d.ts.map +0 -1
- package/dist/channels/github/index.js +0 -10
- package/dist/channels/github/index.js.map +0 -1
- package/dist/channels/github/normalize.d.ts +0 -32
- package/dist/channels/github/normalize.d.ts.map +0 -1
- package/dist/channels/github/normalize.js +0 -152
- package/dist/channels/github/normalize.js.map +0 -1
- package/dist/channels/github/source-thread.d.ts +0 -24
- package/dist/channels/github/source-thread.d.ts.map +0 -1
- package/dist/channels/github/source-thread.js +0 -54
- package/dist/channels/github/source-thread.js.map +0 -1
- package/dist/channels/github/transport.d.ts +0 -19
- package/dist/channels/github/transport.d.ts.map +0 -1
- package/dist/channels/github/transport.js +0 -92
- package/dist/channels/github/transport.js.map +0 -1
- package/dist/channels/plugin.d.ts +0 -61
- package/dist/channels/plugin.d.ts.map +0 -1
- package/dist/channels/plugin.js +0 -80
- package/dist/channels/plugin.js.map +0 -1
- package/dist/channels/slack/define.d.ts +0 -74
- package/dist/channels/slack/define.d.ts.map +0 -1
- package/dist/channels/slack/define.js +0 -160
- package/dist/channels/slack/define.js.map +0 -1
- package/dist/connectors/github/index.d.ts +0 -78
- package/dist/connectors/github/index.d.ts.map +0 -1
- package/dist/connectors/github/index.js +0 -106
- package/dist/connectors/github/index.js.map +0 -1
- package/dist/connectors/github/sandbox.d.ts +0 -54
- package/dist/connectors/github/sandbox.d.ts.map +0 -1
- package/dist/connectors/github/sandbox.js +0 -515
- package/dist/connectors/github/sandbox.js.map +0 -1
- package/dist/connectors/langsmith/index.d.ts +0 -385
- package/dist/connectors/langsmith/index.d.ts.map +0 -1
- package/dist/connectors/langsmith/index.js +0 -431
- package/dist/connectors/langsmith/index.js.map +0 -1
- package/dist/connectors/langsmith/routes.d.ts +0 -247
- package/dist/connectors/langsmith/routes.d.ts.map +0 -1
- package/dist/connectors/langsmith/routes.js +0 -1182
- package/dist/connectors/langsmith/routes.js.map +0 -1
- package/dist/runtime/memory/seed.d.ts +0 -21
- package/dist/runtime/memory/seed.d.ts.map +0 -1
- package/dist/runtime/memory/seed.js +0 -160
- package/dist/runtime/memory/seed.js.map +0 -1
- package/dist/runtime/memory/user-repo.d.ts +0 -19
- package/dist/runtime/memory/user-repo.d.ts.map +0 -1
- package/dist/runtime/memory/user-repo.js +0 -57
- package/dist/runtime/memory/user-repo.js.map +0 -1
|
@@ -1,16 +1,43 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
1
2
|
import { hasSandboxConnectors, runConnectorSandboxHooks, } from "./connector.js";
|
|
2
3
|
import { runSetupScript } from "./setup-script.js";
|
|
4
|
+
import { isSandboxStreamError } from "./sandbox-stream-retry.js";
|
|
3
5
|
/**
|
|
4
6
|
* Created sandboxes, keyed by scope, reused for the lifetime of this runtime
|
|
5
7
|
* process. Storing the in-flight promise dedupes concurrent runs and guarantees
|
|
6
8
|
* `setup.sh` is executed only once per newly created sandbox.
|
|
7
9
|
*/
|
|
8
10
|
const managedSandboxes = new Map();
|
|
11
|
+
/** Host box names that must not be re-adopted after invalidate until recreate. */
|
|
12
|
+
const invalidatedSandboxNames = new Set();
|
|
13
|
+
/** Host box name for a resolved backend instance (survives cache replacement). */
|
|
14
|
+
const backendHostNames = new WeakMap();
|
|
15
|
+
/**
|
|
16
|
+
* Separator between the deployment name and the identity digest in a managed
|
|
17
|
+
* sandbox name.
|
|
18
|
+
*
|
|
19
|
+
* Doubled so one deployment's prefix can never match another's name:
|
|
20
|
+
* `agent--<digest>` is not matched by the `agent-staging--` prefix. Mirrors the
|
|
21
|
+
* `--u--` / `--t--` convention used for Context Hub child repos, and must stay
|
|
22
|
+
* in sync with `SANDBOX_NAME_SEPARATOR` in the CLI.
|
|
23
|
+
*/
|
|
24
|
+
const SANDBOX_NAME_SEPARATOR = "--";
|
|
25
|
+
/** Hex characters of the identity digest kept in a sandbox name. */
|
|
26
|
+
const SANDBOX_DIGEST_LENGTH = 12;
|
|
27
|
+
/** Sandbox statuses that can be adopted as-is. */
|
|
28
|
+
const ADOPTABLE_STATUS = new Set(["ready", "running"]);
|
|
29
|
+
/** Sandbox status for one that is stopped but restartable. */
|
|
30
|
+
const STOPPED_STATUS = "stopped";
|
|
9
31
|
const defaultLangSmithSandboxClientLoader = async () => {
|
|
10
32
|
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
11
33
|
return (await dynamicImport("langsmith/sandbox"));
|
|
12
34
|
};
|
|
13
35
|
let langSmithSandboxClientLoader = defaultLangSmithSandboxClientLoader;
|
|
36
|
+
const defaultLangSmithSandboxBackendLoader = async () => {
|
|
37
|
+
const { LangSmithSandbox } = await import("deepagents");
|
|
38
|
+
return LangSmithSandbox;
|
|
39
|
+
};
|
|
40
|
+
let langSmithSandboxBackendLoader = defaultLangSmithSandboxBackendLoader;
|
|
14
41
|
/**
|
|
15
42
|
* Resolve (and cache) the scoped LangSmith sandbox backend for this run,
|
|
16
43
|
* provisioning it with `setup.sh` the first time it is created.
|
|
@@ -30,7 +57,14 @@ export function resolveManagedSandbox(sandbox, setupScript, config, options) {
|
|
|
30
57
|
syncChain: Promise.resolve(),
|
|
31
58
|
freshlyCreated: true,
|
|
32
59
|
ready: Promise.resolve().then(async () => {
|
|
33
|
-
const backend = await createLangSmithSandbox(sandbox, setupScript, config, options, "create");
|
|
60
|
+
const { backend, hostName } = await createLangSmithSandbox(sandbox, setupScript, config, options, "create", key);
|
|
61
|
+
created.hostName = hostName;
|
|
62
|
+
const id = backend.id;
|
|
63
|
+
created.backendId =
|
|
64
|
+
typeof id === "string" && id.trim() ? id.trim() : undefined;
|
|
65
|
+
if (hostName) {
|
|
66
|
+
backendHostNames.set(backend, hostName);
|
|
67
|
+
}
|
|
34
68
|
created.syncedThreads.add(threadKey);
|
|
35
69
|
return backend;
|
|
36
70
|
}),
|
|
@@ -90,45 +124,168 @@ export function sandboxScopeKey(sandbox, config) {
|
|
|
90
124
|
/** Clear the process-level sandbox cache. Test-only. */
|
|
91
125
|
export function clearManagedSandboxCacheForTests() {
|
|
92
126
|
managedSandboxes.clear();
|
|
127
|
+
invalidatedSandboxNames.clear();
|
|
93
128
|
}
|
|
94
129
|
/**
|
|
95
|
-
* Drop a cached sandbox
|
|
96
|
-
*
|
|
130
|
+
* Drop a cached sandbox and delete its Host box so recreate cannot adopt it.
|
|
131
|
+
*
|
|
132
|
+
* Process-cache clear alone is not enough under deploy: names are deterministic
|
|
133
|
+
* per scope, so the next resolve would re-adopt the same broken box. Mark the
|
|
134
|
+
* name blocked (delete can lag) and best-effort `deleteSandbox`.
|
|
135
|
+
*
|
|
136
|
+
* When `expectedBackendId` / `expectedHostName` are set, only pop the cache
|
|
137
|
+
* entry if it still refers to that failing sandbox. A concurrent sibling may
|
|
138
|
+
* already have replaced it — deleting the replacement would strand the healthy
|
|
139
|
+
* recreate.
|
|
97
140
|
*/
|
|
98
|
-
export function invalidateManagedSandbox(sandbox, config) {
|
|
99
|
-
|
|
141
|
+
export async function invalidateManagedSandbox(sandbox, config, setupScriptOrOptions) {
|
|
142
|
+
const options = typeof setupScriptOrOptions === "string" ||
|
|
143
|
+
setupScriptOrOptions === undefined
|
|
144
|
+
? { setupScript: setupScriptOrOptions }
|
|
145
|
+
: setupScriptOrOptions;
|
|
146
|
+
const { setupScript, expectedBackendId, expectedHostName } = options;
|
|
147
|
+
const key = sandboxScopeKey(sandbox, config);
|
|
148
|
+
const names = new Set();
|
|
149
|
+
let popCache = true;
|
|
150
|
+
let entry = managedSandboxes.get(key);
|
|
151
|
+
if (entry !== undefined &&
|
|
152
|
+
(expectedBackendId !== undefined || expectedHostName !== undefined)) {
|
|
153
|
+
const matches = (expectedBackendId !== undefined &&
|
|
154
|
+
entry.backendId === expectedBackendId) ||
|
|
155
|
+
(expectedBackendId === undefined &&
|
|
156
|
+
expectedHostName !== undefined &&
|
|
157
|
+
entry.hostName === expectedHostName);
|
|
158
|
+
if (!matches) {
|
|
159
|
+
popCache = false;
|
|
160
|
+
// Safe to delete the failing box only when the replacement uses a
|
|
161
|
+
// different Host name (unique-suffix path).
|
|
162
|
+
if (expectedHostName &&
|
|
163
|
+
entry.hostName &&
|
|
164
|
+
expectedHostName !== entry.hostName) {
|
|
165
|
+
names.add(expectedHostName);
|
|
166
|
+
}
|
|
167
|
+
entry = undefined;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (popCache) {
|
|
171
|
+
managedSandboxes.delete(key);
|
|
172
|
+
}
|
|
173
|
+
if (entry?.hostName) {
|
|
174
|
+
names.add(entry.hostName);
|
|
175
|
+
}
|
|
176
|
+
if (expectedHostName && popCache) {
|
|
177
|
+
names.add(expectedHostName);
|
|
178
|
+
}
|
|
179
|
+
if (popCache &&
|
|
180
|
+
expectedBackendId === undefined &&
|
|
181
|
+
expectedHostName === undefined) {
|
|
182
|
+
try {
|
|
183
|
+
const computed = hostSandboxNameFor(sandbox, config, setupScript);
|
|
184
|
+
if (computed) {
|
|
185
|
+
names.add(computed);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Still clear the cache even if naming fails (e.g. missing thread_id).
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (names.size === 0) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
for (const name of names) {
|
|
196
|
+
invalidatedSandboxNames.add(name);
|
|
197
|
+
}
|
|
198
|
+
await Promise.all([...names].map((name) => deleteHostSandbox(sandbox, name)));
|
|
199
|
+
}
|
|
200
|
+
/** Host box name recorded for a resolved backend instance. */
|
|
201
|
+
export function managedSandboxHostName(backend) {
|
|
202
|
+
return backendHostNames.get(backend);
|
|
100
203
|
}
|
|
101
204
|
/** True when a sandbox API error is worth invalidating + recreating once. */
|
|
102
205
|
export function isTransientSandboxError(error) {
|
|
206
|
+
// Never-started stream race is also recreate-safe (and retried in place first
|
|
207
|
+
// by executeWithStreamRetry during provision). Truncated HTTP bodies and
|
|
208
|
+
// peer-closed errors are recreate-only — do not replay in place.
|
|
209
|
+
if (isSandboxStreamError(error)) {
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
103
212
|
const message = error instanceof Error
|
|
104
213
|
? `${error.name}: ${error.message}`
|
|
105
214
|
: typeof error === "string"
|
|
106
215
|
? error
|
|
107
216
|
: String(error);
|
|
108
|
-
return /LangSmithSandboxError|HTTP 502|Bad Gateway|HTTP 503|HTTP 504|ECONNRESET|ETIMEDOUT|sandbox.*(not found|gone|unavailable|terminated)/i.test(message);
|
|
217
|
+
return /LangSmithSandboxError|HTTP 502|Bad Gateway|HTTP 503|HTTP 504|ECONNRESET|ETIMEDOUT|peer closed connection without sending complete message body|incomplete chunked read|sandbox.*(not found|gone|unavailable|terminated)/i.test(message);
|
|
109
218
|
}
|
|
110
219
|
/** Override the LangSmith SDK loader. Test-only. */
|
|
111
220
|
export function setLangSmithSandboxClientLoaderForTests(loader) {
|
|
112
221
|
langSmithSandboxClientLoader = loader ?? defaultLangSmithSandboxClientLoader;
|
|
113
222
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
223
|
+
/** Override the DeepAgents LangSmith backend wrapper. Test-only. */
|
|
224
|
+
export function setLangSmithSandboxBackendForTests(backend) {
|
|
225
|
+
langSmithSandboxBackendLoader = backend
|
|
226
|
+
? async () => backend
|
|
227
|
+
: defaultLangSmithSandboxBackendLoader;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Deployment this runtime belongs to, used to name the sandboxes it creates so
|
|
231
|
+
* `mda delete` can find them again.
|
|
232
|
+
*
|
|
233
|
+
* `MDA_DEPLOYMENT_NAME` is injected by `mda deploy`; `LANGSMITH_DEPLOYMENT_NAME`
|
|
234
|
+
* is the platform's own value and is preferred when present. Undefined under
|
|
235
|
+
* local `mda dev`, where sandboxes stay unnamed and LangSmith generates a name.
|
|
236
|
+
*/
|
|
237
|
+
export function managedDeploymentName() {
|
|
238
|
+
return (stringOption(process.env.LANGSMITH_DEPLOYMENT_NAME) ??
|
|
239
|
+
stringOption(process.env.MDA_DEPLOYMENT_NAME));
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Deterministic sandbox name for a deployment, sandbox scope, and provisioning
|
|
243
|
+
* recipe.
|
|
244
|
+
*
|
|
245
|
+
* The inputs are digested rather than embedded because the scope key carries
|
|
246
|
+
* thread and assistant UUIDs; a short digest keeps the name clear of any length
|
|
247
|
+
* limit while staying stable across container restarts, which is what lets a
|
|
248
|
+
* restarted deployment re-adopt its sandbox instead of leaking it.
|
|
249
|
+
*
|
|
250
|
+
* Provisioning is part of the identity so that editing `setup.sh` or switching
|
|
251
|
+
* snapshots produces a different name. An adopted sandbox skips provisioning, so
|
|
252
|
+
* without this a redeploy would silently leave existing threads on the old
|
|
253
|
+
* environment.
|
|
254
|
+
*/
|
|
255
|
+
export function managedSandboxName(deployment, scopeKey, provisioning = {}) {
|
|
256
|
+
const digest = createHash("sha256")
|
|
257
|
+
.update(scopeKey)
|
|
258
|
+
.update("\0")
|
|
259
|
+
.update(provisioningFingerprint(provisioning))
|
|
260
|
+
.digest("hex")
|
|
261
|
+
.slice(0, SANDBOX_DIGEST_LENGTH);
|
|
262
|
+
return `${deployment}${SANDBOX_NAME_SEPARATOR}${digest}`;
|
|
263
|
+
}
|
|
264
|
+
/** Stable string for a provisioning recipe, insensitive to option ordering. */
|
|
265
|
+
function provisioningFingerprint(provisioning) {
|
|
266
|
+
const createOptions = Object.entries(provisioning.createOptions ?? {}).sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));
|
|
267
|
+
return JSON.stringify([createOptions, provisioning.setupScript ?? ""]);
|
|
268
|
+
}
|
|
269
|
+
async function createLangSmithSandbox(sandbox, setupScript, config, options, mode, scopeKey) {
|
|
270
|
+
const { backend, adopted, hostName } = await createLangSmithSandboxBackend(sandbox, scopeKey, setupScript);
|
|
119
271
|
await runConnectorSandboxHooks(options?.connectors, {
|
|
120
272
|
backend,
|
|
121
|
-
|
|
273
|
+
// An adopted sandbox already ran create-time provisioning in an earlier
|
|
274
|
+
// process, so treat it as a reuse for connector purposes.
|
|
275
|
+
mode: adopted ? "reuse" : mode,
|
|
122
276
|
config,
|
|
123
277
|
identity: options?.identity,
|
|
124
278
|
});
|
|
125
|
-
|
|
279
|
+
// Only a new sandbox needs `setup.sh`: an adopted one ran this exact script
|
|
280
|
+
// already, since a changed script yields a different sandbox name.
|
|
281
|
+
if (!adopted && setupScript && setupScript.trim().length > 0) {
|
|
126
282
|
await runSetupScript(backend, setupScript);
|
|
127
283
|
}
|
|
128
|
-
return backend;
|
|
284
|
+
return { backend, hostName };
|
|
129
285
|
}
|
|
130
|
-
|
|
131
|
-
const { scope: _scope, apiKey
|
|
286
|
+
function sandboxCreateOptions(sandbox) {
|
|
287
|
+
const { scope: _scope, apiKey: _apiKey, defaultTimeout: _defaultTimeout, templateName, snapshotId, ...resolvedCreateOptions } = sandbox.options ?? {};
|
|
288
|
+
const createSandboxOptions = resolvedCreateOptions;
|
|
132
289
|
if (snapshotId && templateName) {
|
|
133
290
|
throw new Error("snapshotId and templateName are mutually exclusive. Pass only one creation source.");
|
|
134
291
|
}
|
|
@@ -138,12 +295,162 @@ async function createLangSmithSandboxBackend(sandbox) {
|
|
|
138
295
|
if (snapshotId) {
|
|
139
296
|
createSandboxOptions.snapshotId = snapshotId;
|
|
140
297
|
}
|
|
298
|
+
return createSandboxOptions;
|
|
299
|
+
}
|
|
300
|
+
function hostSandboxNameFor(sandbox, config, setupScript) {
|
|
301
|
+
const deployment = managedDeploymentName();
|
|
302
|
+
if (!deployment) {
|
|
303
|
+
return undefined;
|
|
304
|
+
}
|
|
305
|
+
return managedSandboxName(deployment, sandboxScopeKey(sandbox, config), {
|
|
306
|
+
createOptions: sandboxCreateOptions(sandbox),
|
|
307
|
+
setupScript,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
async function sandboxClientFor(sandbox) {
|
|
311
|
+
const { SandboxClient } = await langSmithSandboxClientLoader();
|
|
312
|
+
const apiKey = stringOption(sandbox.options?.apiKey) ??
|
|
313
|
+
stringOption(process.env.LANGSMITH_API_KEY);
|
|
314
|
+
return new SandboxClient(apiKey ? { apiKey } : undefined);
|
|
315
|
+
}
|
|
316
|
+
async function deleteHostSandbox(sandbox, name) {
|
|
317
|
+
try {
|
|
318
|
+
const client = await sandboxClientFor(sandbox);
|
|
319
|
+
if (typeof client.deleteSandbox !== "function") {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
await client.deleteSandbox(name);
|
|
323
|
+
console.info(`[mda] sandbox invalidate: deleted name=${JSON.stringify(name)}`);
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
const label = error instanceof Error
|
|
327
|
+
? `${error.name}: ${error.message}`
|
|
328
|
+
: String(error);
|
|
329
|
+
console.warn(`[mda] sandbox invalidate: delete failed name=${JSON.stringify(name)} err=${label}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
async function createLangSmithSandboxBackend(sandbox, scopeKey, setupScript) {
|
|
333
|
+
const { apiKey = process.env.LANGSMITH_API_KEY, defaultTimeout } = sandbox.options ?? {};
|
|
334
|
+
const createSandboxOptions = sandboxCreateOptions(sandbox);
|
|
141
335
|
const { SandboxClient } = await langSmithSandboxClientLoader();
|
|
142
336
|
const sdkOptions = stringOption(apiKey);
|
|
143
337
|
const client = new SandboxClient(sdkOptions ? { apiKey: sdkOptions } : undefined);
|
|
144
|
-
const
|
|
145
|
-
const
|
|
146
|
-
|
|
338
|
+
const deployment = managedDeploymentName();
|
|
339
|
+
const sandboxName = deployment
|
|
340
|
+
? managedSandboxName(deployment, scopeKey, {
|
|
341
|
+
createOptions: createSandboxOptions,
|
|
342
|
+
setupScript,
|
|
343
|
+
})
|
|
344
|
+
: undefined;
|
|
345
|
+
const { sandbox: langSmithSandbox, adopted } = await resolveSandboxInstance(client, createSandboxOptions, sandboxName);
|
|
346
|
+
const resolved = langSmithSandbox;
|
|
347
|
+
const hostName = stringOption(resolved.name) ?? sandboxName;
|
|
348
|
+
console.info(`[mda] sandbox resolve: ${adopted ? "adopted" : "created"} ` +
|
|
349
|
+
`name=${JSON.stringify(hostName ?? null)} ` +
|
|
350
|
+
`id=${JSON.stringify(resolved.id ?? null)} ` +
|
|
351
|
+
`scope=${JSON.stringify(scopeKey)}`);
|
|
352
|
+
const Backend = await langSmithSandboxBackendLoader();
|
|
353
|
+
return {
|
|
354
|
+
backend: new Backend({
|
|
355
|
+
sandbox: langSmithSandbox,
|
|
356
|
+
defaultTimeout,
|
|
357
|
+
}),
|
|
358
|
+
adopted,
|
|
359
|
+
hostName,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Adopt this deployment's existing sandbox for `name`, or create it.
|
|
364
|
+
*
|
|
365
|
+
* Names are deterministic per scope, so a redeployed or restarted container
|
|
366
|
+
* finds the sandbox its predecessor created instead of stranding it until the
|
|
367
|
+
* idle TTL fires. When `name` is undefined (local dev) this is a plain create.
|
|
368
|
+
*/
|
|
369
|
+
async function resolveSandboxInstance(client, createSandboxOptions, name) {
|
|
370
|
+
if (!name) {
|
|
371
|
+
return {
|
|
372
|
+
sandbox: await client.createSandbox(createSandboxOptions),
|
|
373
|
+
adopted: false,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
// After invalidate, refuse to adopt the same Host name even if delete lags —
|
|
377
|
+
// otherwise recreate loops on the broken box that just failed provision.
|
|
378
|
+
const existing = await adoptSandbox(client, name);
|
|
379
|
+
if (existing !== undefined && !invalidatedSandboxNames.has(name)) {
|
|
380
|
+
return { sandbox: existing, adopted: true };
|
|
381
|
+
}
|
|
382
|
+
try {
|
|
383
|
+
const created = await client.createSandbox({
|
|
384
|
+
...createSandboxOptions,
|
|
385
|
+
name,
|
|
386
|
+
});
|
|
387
|
+
invalidatedSandboxNames.delete(name);
|
|
388
|
+
return { sandbox: created, adopted: false };
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
if (!isSandboxNameConflict(error)) {
|
|
392
|
+
throw error;
|
|
393
|
+
}
|
|
394
|
+
// Either a concurrent container won the create race, or an unusable sandbox
|
|
395
|
+
// (failed, mid-delete) still holds the name. Never adopt a name we just
|
|
396
|
+
// invalidated — fall through to a unique suffix instead.
|
|
397
|
+
if (!invalidatedSandboxNames.has(name)) {
|
|
398
|
+
const winner = await adoptSandbox(client, name);
|
|
399
|
+
if (winner !== undefined) {
|
|
400
|
+
return { sandbox: winner, adopted: true };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// Keep the deployment prefix so teardown still finds this sandbox.
|
|
404
|
+
const created = await client.createSandbox({
|
|
405
|
+
...createSandboxOptions,
|
|
406
|
+
name: `${name}-${sandboxNameSuffix()}`,
|
|
407
|
+
});
|
|
408
|
+
invalidatedSandboxNames.delete(name);
|
|
409
|
+
return { sandbox: created, adopted: false };
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Return the existing sandbox for `name` when it is usable, else undefined.
|
|
414
|
+
*
|
|
415
|
+
* Best-effort by design: this runs on the sandbox hot path, so a lookup failure
|
|
416
|
+
* falls back to creating rather than failing the run.
|
|
417
|
+
*/
|
|
418
|
+
async function adoptSandbox(client, name) {
|
|
419
|
+
if (typeof client.getSandbox !== "function") {
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
let existing;
|
|
423
|
+
try {
|
|
424
|
+
existing = await client.getSandbox(name);
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
return undefined;
|
|
428
|
+
}
|
|
429
|
+
if (existing === undefined || existing === null) {
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
432
|
+
const status = stringOption(existing.status)?.toLowerCase();
|
|
433
|
+
// No status reported: assume the SDK handed back a usable sandbox.
|
|
434
|
+
if (status === undefined || ADOPTABLE_STATUS.has(status)) {
|
|
435
|
+
return existing;
|
|
436
|
+
}
|
|
437
|
+
if (status === STOPPED_STATUS && typeof client.startSandbox === "function") {
|
|
438
|
+
try {
|
|
439
|
+
return (await client.startSandbox(name)) ?? existing;
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
return undefined;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
return undefined;
|
|
446
|
+
}
|
|
447
|
+
/** True when a create failed because the sandbox name is already taken. */
|
|
448
|
+
function isSandboxNameConflict(error) {
|
|
449
|
+
const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
|
|
450
|
+
return /409|conflict|already exists|already in use|duplicate/i.test(message);
|
|
451
|
+
}
|
|
452
|
+
function sandboxNameSuffix() {
|
|
453
|
+
return randomBytes(4).toString("hex");
|
|
147
454
|
}
|
|
148
455
|
function threadSyncKey(sandbox, config) {
|
|
149
456
|
const scope = sandbox.options?.scope ?? "thread";
|
|
@@ -158,13 +465,6 @@ function threadSyncKey(sandbox, config) {
|
|
|
158
465
|
}
|
|
159
466
|
return sandboxScopeKey(sandbox, config);
|
|
160
467
|
}
|
|
161
|
-
function providerKey(provider) {
|
|
162
|
-
const providerId = provider.providerId;
|
|
163
|
-
if (typeof providerId === "string" && providerId.trim()) {
|
|
164
|
-
return providerId.trim();
|
|
165
|
-
}
|
|
166
|
-
return typeof provider.name === "string" ? provider.name.trim() : "";
|
|
167
|
-
}
|
|
168
468
|
function threadIdFromConfig(config) {
|
|
169
469
|
const threadId = configValue(config, "thread_id");
|
|
170
470
|
if (threadId === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-manager.js","sourceRoot":"","sources":["../../src/runtime/sandbox-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox-manager.js","sourceRoot":"","sources":["../../src/runtime/sandbox-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry sandbox `execute` when the command stream dies before start.
|
|
3
|
+
*
|
|
4
|
+
* LangSmith sandboxes can return HTTP 201 / accept uploads while the websocket
|
|
5
|
+
* command channel is not ready yet. The first `execute` then fails with
|
|
6
|
+
* `Command stream ended before 'started' message`. Cold GitHub provision and
|
|
7
|
+
* `setup.sh` hit this path immediately after create; retrying the same execute
|
|
8
|
+
* with backoff is cheaper (and more reliable) than throwing away the box.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isSandboxStreamError(error: unknown): boolean;
|
|
11
|
+
export declare function executeWithStreamRetry<T>(execute: (command: string) => Promise<T> | T, command: string, options?: {
|
|
12
|
+
/** Fixed operation name for Host logs. Never pass command contents. */
|
|
13
|
+
label?: string;
|
|
14
|
+
attempts?: number;
|
|
15
|
+
baseDelayMs?: number;
|
|
16
|
+
sleep?: (ms: number) => Promise<void>;
|
|
17
|
+
}): Promise<T>;
|
|
18
|
+
//# sourceMappingURL=sandbox-stream-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-stream-retry.d.ts","sourceRoot":"","sources":["../../src/runtime/sandbox-stream-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoB5D;AAED,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,GACL,OAAO,CAAC,CAAC,CAAC,CAsDZ"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry sandbox `execute` when the command stream dies before start.
|
|
3
|
+
*
|
|
4
|
+
* LangSmith sandboxes can return HTTP 201 / accept uploads while the websocket
|
|
5
|
+
* command channel is not ready yet. The first `execute` then fails with
|
|
6
|
+
* `Command stream ended before 'started' message`. Cold GitHub provision and
|
|
7
|
+
* `setup.sh` hit this path immediately after create; retrying the same execute
|
|
8
|
+
* with backoff is cheaper (and more reliable) than throwing away the box.
|
|
9
|
+
*/
|
|
10
|
+
const STREAM_EXECUTE_ATTEMPTS = 6;
|
|
11
|
+
// Cold boxes often need several seconds after HTTP 201 before the websocket
|
|
12
|
+
// command channel is ready — a 1s base burned through attempts too quickly.
|
|
13
|
+
const STREAM_EXECUTE_BASE_DELAY_MS = 2_000;
|
|
14
|
+
// Only the "never started" race is safe to retry in place. Broader transport
|
|
15
|
+
// errors (bare SandboxOperationError, truncated HTTP bodies) can arrive after
|
|
16
|
+
// the command began or finished — those belong on the invalidate/recreate path.
|
|
17
|
+
const STREAM_NEVER_STARTED_RE = /Command stream ended before ['"]started['"] message/i;
|
|
18
|
+
const STREAM_NEVER_STARTED_NAMES = new Set([
|
|
19
|
+
"_StreamEndedBeforeStarted",
|
|
20
|
+
"StreamEndedBeforeStarted",
|
|
21
|
+
]);
|
|
22
|
+
function errorLabel(error) {
|
|
23
|
+
if (error instanceof Error) {
|
|
24
|
+
return `${error.name}: ${error.message}`;
|
|
25
|
+
}
|
|
26
|
+
return String(error);
|
|
27
|
+
}
|
|
28
|
+
export function isSandboxStreamError(error) {
|
|
29
|
+
if (error instanceof Error && STREAM_NEVER_STARTED_NAMES.has(error.name)) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (error !== null &&
|
|
33
|
+
typeof error === "object" &&
|
|
34
|
+
STREAM_NEVER_STARTED_NAMES.has(error.constructor?.name ?? "")) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
const message = error instanceof Error
|
|
38
|
+
? `${error.name}: ${error.message}`
|
|
39
|
+
: typeof error === "string"
|
|
40
|
+
? error
|
|
41
|
+
: String(error);
|
|
42
|
+
return STREAM_NEVER_STARTED_RE.test(message);
|
|
43
|
+
}
|
|
44
|
+
export async function executeWithStreamRetry(execute, command, options = {}) {
|
|
45
|
+
const attempts = options.attempts ?? STREAM_EXECUTE_ATTEMPTS;
|
|
46
|
+
const baseDelayMs = options.baseDelayMs ?? STREAM_EXECUTE_BASE_DELAY_MS;
|
|
47
|
+
const sleep = options.sleep ??
|
|
48
|
+
((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
49
|
+
if (attempts < 1) {
|
|
50
|
+
throw new Error("attempts must be >= 1");
|
|
51
|
+
}
|
|
52
|
+
let lastError;
|
|
53
|
+
const op = options.label?.trim() || "execute";
|
|
54
|
+
const started = Date.now();
|
|
55
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
56
|
+
const attemptStarted = Date.now();
|
|
57
|
+
try {
|
|
58
|
+
const result = await execute(command);
|
|
59
|
+
if (attempt > 0) {
|
|
60
|
+
console.warn(`[mda] sandbox stream execute recovered after ${attempt + 1} attempt(s) ` +
|
|
61
|
+
`(${((Date.now() - started) / 1000).toFixed(1)}s total) op=${JSON.stringify(op)}`);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
lastError = error;
|
|
67
|
+
const elapsedAttempt = (Date.now() - attemptStarted) / 1000;
|
|
68
|
+
if (!isSandboxStreamError(error)) {
|
|
69
|
+
console.warn(`[mda] sandbox execute failed (not stream-retryable) ` +
|
|
70
|
+
`attempt=${attempt + 1}/${attempts} elapsed=${elapsedAttempt.toFixed(1)}s ` +
|
|
71
|
+
`op=${JSON.stringify(op)} err=${errorLabel(error)}`);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
if (attempt >= attempts - 1) {
|
|
75
|
+
console.warn(`[mda] sandbox stream execute exhausted retries ` +
|
|
76
|
+
`attempts=${attempts} elapsed=${((Date.now() - started) / 1000).toFixed(1)}s ` +
|
|
77
|
+
`op=${JSON.stringify(op)} err=${errorLabel(error)}`);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
const delayMs = baseDelayMs * 2 ** attempt;
|
|
81
|
+
console.warn(`[mda] sandbox stream not ready; retrying execute ` +
|
|
82
|
+
`attempt=${attempt + 1}/${attempts} elapsed=${elapsedAttempt.toFixed(1)}s ` +
|
|
83
|
+
`sleep=${(delayMs / 1000).toFixed(1)}s op=${JSON.stringify(op)} ` +
|
|
84
|
+
`err=${errorLabel(error)}`);
|
|
85
|
+
await sleep(delayMs);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
throw lastError;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=sandbox-stream-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-stream-retry.js","sourceRoot":"","sources":["../../src/runtime/sandbox-stream-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-script.d.ts","sourceRoot":"","sources":["../../src/runtime/setup-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-script.d.ts","sourceRoot":"","sources":["../../src/runtime/setup-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAO5E;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,QAAQ,CAAC,GACnD,IAAI,CAON"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { executeWithStreamRetry } from "./sandbox-stream-retry.js";
|
|
1
2
|
/** Absolute path the provisioning script is uploaded to inside the sandbox. */
|
|
2
3
|
const SETUP_REMOTE_PATH = "/tmp/mda-setup.sh";
|
|
3
4
|
/**
|
|
@@ -8,13 +9,24 @@ const SETUP_REMOTE_PATH = "/tmp/mda-setup.sh";
|
|
|
8
9
|
* by path; otherwise it is run inline (see {@link runSetupScriptInline}).
|
|
9
10
|
*/
|
|
10
11
|
export async function runSetupScript(backend, script) {
|
|
12
|
+
const sandboxId = "id" in backend && typeof backend.id === "string"
|
|
13
|
+
? backend.id
|
|
14
|
+
: null;
|
|
11
15
|
if (typeof backend.uploadFiles === "function") {
|
|
16
|
+
console.info(`[mda] sandbox setup.sh: uploading script ` +
|
|
17
|
+
`sandbox_id=${JSON.stringify(sandboxId)} path=${SETUP_REMOTE_PATH}`);
|
|
12
18
|
await backend.uploadFiles([
|
|
13
19
|
[SETUP_REMOTE_PATH, new TextEncoder().encode(script)],
|
|
14
20
|
]);
|
|
15
|
-
|
|
21
|
+
console.info(`[mda] sandbox setup.sh: starting execute ` +
|
|
22
|
+
`sandbox_id=${JSON.stringify(sandboxId)} ` +
|
|
23
|
+
`cmd=${JSON.stringify(`bash ${SETUP_REMOTE_PATH}`)}`);
|
|
24
|
+
// Fresh sandboxes often reject the first websocket execute; retry in place.
|
|
25
|
+
assertSetupSucceeded(await executeWithStreamRetry((command) => backend.execute(command), `bash ${SETUP_REMOTE_PATH}`, { label: "setup.sh" }));
|
|
16
26
|
return;
|
|
17
27
|
}
|
|
28
|
+
console.info(`[mda] sandbox setup.sh: starting inline execute ` +
|
|
29
|
+
`sandbox_id=${JSON.stringify(sandboxId)}`);
|
|
18
30
|
await runSetupScriptInline(backend, script);
|
|
19
31
|
}
|
|
20
32
|
/**
|
|
@@ -24,7 +36,9 @@ export async function runSetupScript(backend, script) {
|
|
|
24
36
|
* conform to the execute surface but do not expose upload support.
|
|
25
37
|
*/
|
|
26
38
|
export async function runSetupScriptInline(backend, script) {
|
|
27
|
-
assertSetupSucceeded(await backend.execute(script
|
|
39
|
+
assertSetupSucceeded(await executeWithStreamRetry((command) => backend.execute(command), script, {
|
|
40
|
+
label: "setup.sh (inline)",
|
|
41
|
+
}));
|
|
28
42
|
}
|
|
29
43
|
export function assertSetupSucceeded(result) {
|
|
30
44
|
if (typeof result.exitCode === "number" && result.exitCode !== 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-script.js","sourceRoot":"","sources":["../../src/runtime/setup-script.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAiC,EACjC,MAAc;IAEd,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,OAAO,CAAC,WAAW,CAAC;YACxB,CAAC,iBAAiB,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACtD,CAAC,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"setup-script.js","sourceRoot":"","sources":["../../src/runtime/setup-script.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,+EAA+E;AAC/E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAiC,EACjC,MAAc;IAEd,MAAM,SAAS,GACb,IAAI,IAAI,OAAO,IAAI,OAAQ,OAA4B,CAAC,EAAE,KAAK,QAAQ;QACrE,CAAC,CAAE,OAA0B,CAAC,EAAE;QAChC,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CACV,2CAA2C;YACzC,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,iBAAiB,EAAE,CACtE,CAAC;QACF,MAAM,OAAO,CAAC,WAAW,CAAC;YACxB,CAAC,iBAAiB,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACtD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CACV,2CAA2C;YACzC,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG;YAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,iBAAiB,EAAE,CAAC,EAAE,CACvD,CAAC;QACF,4EAA4E;QAC5E,oBAAoB,CAClB,MAAM,sBAAsB,CAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EACrC,QAAQ,iBAAiB,EAAE,EAC3B,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB,CACF,CAAC;QACF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,CACV,kDAAkD;QAChD,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAC5C,CAAC;IACF,MAAM,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAiC,EACjC,MAAc;IAEd,oBAAoB,CAClB,MAAM,sBAAsB,CAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EACrC,MAAM,EACN;QACE,KAAK,EAAE,mBAAmB;KAC3B,CACF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAoD;IAEpD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,0CAA0C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC"}
|