@strands-agents/sdk 1.3.0 → 1.5.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/README.md +16 -16
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +6 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/register-node-defaults.d.ts +2 -0
- package/dist/src/__fixtures__/register-node-defaults.d.ts.map +1 -0
- package/dist/src/__fixtures__/register-node-defaults.js +6 -0
- package/dist/src/__fixtures__/register-node-defaults.js.map +1 -0
- package/dist/src/__fixtures__/test-sandbox.node.d.ts +15 -0
- package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +1 -0
- package/dist/src/__fixtures__/test-sandbox.node.js +23 -0
- package/dist/src/__fixtures__/test-sandbox.node.js.map +1 -0
- package/dist/src/__tests__/default-slot.test.d.ts +2 -0
- package/dist/src/__tests__/default-slot.test.d.ts.map +1 -0
- package/dist/src/__tests__/default-slot.test.js +33 -0
- package/dist/src/__tests__/default-slot.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +14 -14
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/a2a/__tests__/async-lock.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/async-lock.test.js +137 -0
- package/dist/src/a2a/__tests__/async-lock.test.js.map +1 -0
- package/dist/src/a2a/__tests__/executor.test.js +146 -8
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
- package/dist/src/a2a/__tests__/server.test.js +20 -0
- package/dist/src/a2a/__tests__/server.test.js.map +1 -1
- package/dist/src/a2a/async-lock.d.ts +22 -0
- package/dist/src/a2a/async-lock.d.ts.map +1 -0
- package/dist/src/a2a/async-lock.js +38 -0
- package/dist/src/a2a/async-lock.js.map +1 -0
- package/dist/src/a2a/executor.d.ts +59 -24
- package/dist/src/a2a/executor.d.ts.map +1 -1
- package/dist/src/a2a/executor.js +209 -32
- package/dist/src/a2a/executor.js.map +1 -1
- package/dist/src/a2a/index.d.ts +1 -1
- package/dist/src/a2a/index.d.ts.map +1 -1
- package/dist/src/a2a/index.js +1 -1
- package/dist/src/a2a/index.js.map +1 -1
- package/dist/src/a2a/server.d.ts +18 -2
- package/dist/src/a2a/server.d.ts.map +1 -1
- package/dist/src/a2a/server.js +13 -2
- package/dist/src/a2a/server.js.map +1 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.js +107 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +195 -0
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +14 -0
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
- package/dist/src/agent/__tests__/tool-caller.test.d.ts +2 -0
- package/dist/src/agent/__tests__/tool-caller.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/tool-caller.test.js +459 -0
- package/dist/src/agent/__tests__/tool-caller.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +194 -4
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +599 -253
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/tool-caller.d.ts +149 -0
- package/dist/src/agent/tool-caller.d.ts.map +1 -0
- package/dist/src/agent/tool-caller.js +198 -0
- package/dist/src/agent/tool-caller.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/pin.test.js +119 -0
- package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +49 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +58 -0
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/pin-message.d.ts +45 -0
- package/dist/src/conversation-manager/pin-message.d.ts.map +1 -0
- package/dist/src/conversation-manager/pin-message.js +106 -0
- package/dist/src/conversation-manager/pin-message.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +7 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +27 -4
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +7 -0
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +18 -4
- package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
- package/dist/src/default-slot.d.ts +6 -0
- package/dist/src/default-slot.d.ts.map +1 -0
- package/dist/src/default-slot.js +18 -0
- package/dist/src/default-slot.js.map +1 -0
- package/dist/src/errors.d.ts +25 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +32 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +15 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.d.ts +2 -0
- package/dist/src/index.node.d.ts.map +1 -0
- package/dist/src/index.node.js +9 -0
- package/dist/src/index.node.js.map +1 -0
- package/dist/src/interrupt.d.ts +5 -1
- package/dist/src/interrupt.d.ts.map +1 -1
- package/dist/src/interrupt.js +6 -0
- package/dist/src/interrupt.js.map +1 -1
- package/dist/src/interventions/handler.d.ts +1 -2
- package/dist/src/interventions/handler.d.ts.map +1 -1
- package/dist/src/interventions/registry.d.ts +2 -0
- package/dist/src/interventions/registry.d.ts.map +1 -1
- package/dist/src/interventions/registry.js +4 -0
- package/dist/src/interventions/registry.js.map +1 -1
- package/dist/src/mcp.d.ts +20 -15
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +15 -8
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/memory/__tests__/memory-manager.test.d.ts +2 -0
- package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +1 -0
- package/dist/src/memory/__tests__/memory-manager.test.js +493 -0
- package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.js +637 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js +68 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +81 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +1 -0
- package/dist/src/memory/extraction/coordinator.d.ts +128 -0
- package/dist/src/memory/extraction/coordinator.d.ts.map +1 -0
- package/dist/src/memory/extraction/coordinator.js +245 -0
- package/dist/src/memory/extraction/coordinator.js.map +1 -0
- package/dist/src/memory/extraction/model-extractor.d.ts +32 -0
- package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -0
- package/dist/src/memory/extraction/model-extractor.js +118 -0
- package/dist/src/memory/extraction/model-extractor.js.map +1 -0
- package/dist/src/memory/extraction/resolve-extraction-config.d.ts +46 -0
- package/dist/src/memory/extraction/resolve-extraction-config.d.ts.map +1 -0
- package/dist/src/memory/extraction/resolve-extraction-config.js +59 -0
- package/dist/src/memory/extraction/resolve-extraction-config.js.map +1 -0
- package/dist/src/memory/extraction/triggers.d.ts +41 -0
- package/dist/src/memory/extraction/triggers.d.ts.map +1 -0
- package/dist/src/memory/extraction/triggers.js +59 -0
- package/dist/src/memory/extraction/triggers.js.map +1 -0
- package/dist/src/memory/extraction/types.d.ts +133 -0
- package/dist/src/memory/extraction/types.d.ts.map +1 -0
- package/dist/src/memory/extraction/types.js +19 -0
- package/dist/src/memory/extraction/types.js.map +1 -0
- package/dist/src/memory/index.d.ts +9 -0
- package/dist/src/memory/index.d.ts.map +1 -0
- package/dist/src/memory/index.js +5 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/memory/memory-manager.d.ts +131 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +404 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/memory/types.d.ts +213 -0
- package/dist/src/memory/types.d.ts.map +1 -0
- package/dist/src/memory/types.js +2 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.js +1207 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -0
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/custom-stages.test.js +97 -0
- package/dist/src/middleware/__tests__/custom-stages.test.js.map +1 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js +267 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +1 -0
- package/dist/src/middleware/__tests__/registry.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/registry.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/registry.test.js +525 -0
- package/dist/src/middleware/__tests__/registry.test.js.map +1 -0
- package/dist/src/middleware/index.d.ts +5 -0
- package/dist/src/middleware/index.d.ts.map +1 -0
- package/dist/src/middleware/index.js +3 -0
- package/dist/src/middleware/index.js.map +1 -0
- package/dist/src/middleware/registry.d.ts +58 -0
- package/dist/src/middleware/registry.d.ts.map +1 -0
- package/dist/src/middleware/registry.js +107 -0
- package/dist/src/middleware/registry.js.map +1 -0
- package/dist/src/middleware/stages.d.ts +138 -0
- package/dist/src/middleware/stages.d.ts.map +1 -0
- package/dist/src/middleware/stages.js +31 -0
- package/dist/src/middleware/stages.js.map +1 -0
- package/dist/src/middleware/types.d.ts +88 -0
- package/dist/src/middleware/types.d.ts.map +1 -0
- package/dist/src/middleware/types.js +2 -0
- package/dist/src/middleware/types.js.map +1 -0
- package/dist/src/models/__tests__/anthropic.test.js +37 -7
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +181 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +46 -3
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +7 -4
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +26 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +34 -9
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts.map +1 -1
- package/dist/src/models/defaults.js +2 -0
- package/dist/src/models/defaults.js.map +1 -1
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +7 -3
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/chat.test.js +2 -10
- package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
- package/dist/src/models/openai/__tests__/errors.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/errors.test.d.ts.map +1 -0
- package/dist/src/models/openai/__tests__/errors.test.js +30 -0
- package/dist/src/models/openai/__tests__/errors.test.js.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.js +8 -33
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
- package/dist/src/models/openai/errors.d.ts.map +1 -1
- package/dist/src/models/openai/errors.js +5 -3
- package/dist/src/models/openai/errors.js.map +1 -1
- package/dist/src/multiagent/__tests__/nodes.test.js +50 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +23 -2
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +18 -4
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/registry/__tests__/tool-registry.test.js +50 -1
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
- package/dist/src/registry/tool-registry.d.ts +13 -0
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +35 -1
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts +2 -0
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.browser.js +11 -0
- package/dist/src/sandbox/__tests__/default.test.browser.js.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.node.js +23 -0
- package/dist/src/sandbox/__tests__/default.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/docker.test.node.js +89 -0
- package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/errors.test.node.js +33 -0
- package/dist/src/sandbox/__tests__/errors.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +124 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js +298 -0
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.js +262 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -0
- package/dist/src/sandbox/base.d.ts +156 -0
- package/dist/src/sandbox/base.d.ts.map +1 -0
- package/dist/src/sandbox/base.js +97 -0
- package/dist/src/sandbox/base.js.map +1 -0
- package/dist/src/sandbox/constants.d.ts +25 -0
- package/dist/src/sandbox/constants.d.ts.map +1 -0
- package/dist/src/sandbox/constants.js +27 -0
- package/dist/src/sandbox/constants.js.map +1 -0
- package/dist/src/sandbox/default.d.ts +3 -0
- package/dist/src/sandbox/default.d.ts.map +1 -0
- package/dist/src/sandbox/default.js +3 -0
- package/dist/src/sandbox/default.js.map +1 -0
- package/dist/src/sandbox/docker.d.ts +38 -0
- package/dist/src/sandbox/docker.d.ts.map +1 -0
- package/dist/src/sandbox/docker.js +59 -0
- package/dist/src/sandbox/docker.js.map +1 -0
- package/dist/src/sandbox/errors.d.ts +26 -0
- package/dist/src/sandbox/errors.d.ts.map +1 -0
- package/dist/src/sandbox/errors.js +35 -0
- package/dist/src/sandbox/errors.js.map +1 -0
- package/dist/src/sandbox/index.d.ts +5 -0
- package/dist/src/sandbox/index.d.ts.map +1 -0
- package/dist/src/sandbox/index.js +4 -0
- package/dist/src/sandbox/index.js.map +1 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts +16 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts.map +1 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.js +83 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.js.map +1 -0
- package/dist/src/sandbox/posix-shell.d.ts +53 -0
- package/dist/src/sandbox/posix-shell.d.ts.map +1 -0
- package/dist/src/sandbox/posix-shell.js +116 -0
- package/dist/src/sandbox/posix-shell.js.map +1 -0
- package/dist/src/sandbox/ssh.d.ts +56 -0
- package/dist/src/sandbox/ssh.d.ts.map +1 -0
- package/dist/src/sandbox/ssh.js +119 -0
- package/dist/src/sandbox/ssh.js.map +1 -0
- package/dist/src/sandbox/stream-process.d.ts +32 -0
- package/dist/src/sandbox/stream-process.d.ts.map +1 -0
- package/dist/src/sandbox/stream-process.js +161 -0
- package/dist/src/sandbox/stream-process.js.map +1 -0
- package/dist/src/sandbox/types.d.ts +57 -0
- package/dist/src/sandbox/types.d.ts.map +1 -0
- package/dist/src/sandbox/types.js +8 -0
- package/dist/src/sandbox/types.js.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.js +11 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +10 -6
- package/dist/src/telemetry/meter.d.ts.map +1 -1
- package/dist/src/telemetry/meter.js +16 -3
- package/dist/src/telemetry/meter.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/messages.test.js +28 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +72 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/lifecycle-observer.d.ts +18 -0
- package/dist/src/types/lifecycle-observer.d.ts.map +1 -0
- package/dist/src/types/lifecycle-observer.js +2 -0
- package/dist/src/types/lifecycle-observer.js.map +1 -0
- package/dist/src/types/messages.d.ts +19 -3
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +9 -0
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts +2 -0
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts.map +1 -0
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js +358 -0
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js.map +1 -0
- package/dist/src/vended-interventions/hitl/hitl.d.ts +115 -0
- package/dist/src/vended-interventions/hitl/hitl.d.ts.map +1 -0
- package/dist/src/vended-interventions/hitl/hitl.js +138 -0
- package/dist/src/vended-interventions/hitl/hitl.js.map +1 -0
- package/dist/src/vended-interventions/hitl/index.d.ts +24 -0
- package/dist/src/vended-interventions/hitl/index.d.ts.map +1 -0
- package/dist/src/vended-interventions/hitl/index.js +23 -0
- package/dist/src/vended-interventions/hitl/index.js.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts +2 -0
- package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/handler.test.js +163 -0
- package/dist/src/vended-interventions/steering/__tests__/handler.test.js.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts +2 -0
- package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/llm.test.js +60 -0
- package/dist/src/vended-interventions/steering/__tests__/llm.test.js.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts +2 -0
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js +94 -0
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js.map +1 -0
- package/dist/src/vended-interventions/steering/handlers/handler.d.ts +64 -0
- package/dist/src/vended-interventions/steering/handlers/handler.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/handlers/handler.js +71 -0
- package/dist/src/vended-interventions/steering/handlers/handler.js.map +1 -0
- package/dist/src/vended-interventions/steering/handlers/llm.d.ts +72 -0
- package/dist/src/vended-interventions/steering/handlers/llm.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/handlers/llm.js +177 -0
- package/dist/src/vended-interventions/steering/handlers/llm.js.map +1 -0
- package/dist/src/vended-interventions/steering/index.d.ts +31 -0
- package/dist/src/vended-interventions/steering/index.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/index.js +32 -0
- package/dist/src/vended-interventions/steering/index.js.map +1 -0
- package/dist/src/vended-interventions/steering/providers/context-provider.d.ts +55 -0
- package/dist/src/vended-interventions/steering/providers/context-provider.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/providers/context-provider.js +8 -0
- package/dist/src/vended-interventions/steering/providers/context-provider.js.map +1 -0
- package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts +49 -0
- package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts.map +1 -0
- package/dist/src/vended-interventions/steering/providers/tool-ledger.js +75 -0
- package/dist/src/vended-interventions/steering/providers/tool-ledger.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +611 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +230 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +370 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +68 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +93 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/index.d.ts +1 -1
- package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts +4 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.js +29 -7
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/search.js +3 -5
- package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +29 -5
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +75 -11
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +736 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/goal/index.d.ts +21 -0
- package/dist/src/vended-plugins/goal/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/index.js +20 -0
- package/dist/src/vended-plugins/goal/index.js.map +1 -0
- package/dist/src/vended-plugins/goal/judge.d.ts +41 -0
- package/dist/src/vended-plugins/goal/judge.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/judge.js +92 -0
- package/dist/src/vended-plugins/goal/judge.js.map +1 -0
- package/dist/src/vended-plugins/goal/plugin.d.ts +214 -0
- package/dist/src/vended-plugins/goal/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/plugin.js +287 -0
- package/dist/src/vended-plugins/goal/plugin.js.map +1 -0
- package/dist/src/vended-plugins/index.d.ts +12 -0
- package/dist/src/vended-plugins/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/index.js +12 -0
- package/dist/src/vended-plugins/index.js.map +1 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +17 -7
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.d.ts +21 -7
- package/dist/src/vended-plugins/skills/agent-skills.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.js +144 -77
- package/dist/src/vended-plugins/skills/agent-skills.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +44 -4
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts +3 -24
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +9 -9
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/bash/index.d.ts +3 -1
- package/dist/src/vended-tools/bash/index.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/index.js +2 -1
- package/dist/src/vended-tools/bash/index.js.map +1 -1
- package/dist/src/vended-tools/bash/make-bash.d.ts +22 -0
- package/dist/src/vended-tools/bash/make-bash.d.ts.map +1 -0
- package/dist/src/vended-tools/bash/make-bash.js +40 -0
- package/dist/src/vended-tools/bash/make-bash.js.map +1 -0
- package/dist/src/vended-tools/bash/types.d.ts +1 -0
- package/dist/src/vended-tools/bash/types.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/types.js +2 -0
- package/dist/src/vended-tools/bash/types.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +83 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/file-editor/file-editor.d.ts +19 -10
- package/dist/src/vended-tools/file-editor/file-editor.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/file-editor.js +188 -218
- package/dist/src/vended-tools/file-editor/file-editor.js.map +1 -1
- package/dist/src/vended-tools/file-editor/index.d.ts +2 -1
- package/dist/src/vended-tools/file-editor/index.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/index.js +1 -1
- package/dist/src/vended-tools/file-editor/index.js.map +1 -1
- package/dist/src/vended-tools/index.d.ts +17 -0
- package/dist/src/vended-tools/index.d.ts.map +1 -0
- package/dist/src/vended-tools/index.js +17 -0
- package/dist/src/vended-tools/index.js.map +1 -0
- package/package.json +66 -15
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker sandbox — executes commands in a Docker container via `docker exec`.
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecuteOptions } from './base.js';
|
|
5
|
+
import { PosixShellSandbox } from './posix-shell.js';
|
|
6
|
+
import type { ExecutionResult, StreamChunk } from './types.js';
|
|
7
|
+
import type { Tool } from '../tools/tool.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for constructing a {@link DockerSandbox}.
|
|
10
|
+
*/
|
|
11
|
+
export interface DockerSandboxOptions {
|
|
12
|
+
/** ID or name of a running Docker container. */
|
|
13
|
+
container: string;
|
|
14
|
+
/**
|
|
15
|
+
* Working directory for executed commands. If omitted, no `-w` flag is set and
|
|
16
|
+
* commands run in the container's configured working directory.
|
|
17
|
+
*
|
|
18
|
+
* Set this to run elsewhere; the path must exist and be writable by the effective {@link user}.
|
|
19
|
+
*/
|
|
20
|
+
workingDir?: string;
|
|
21
|
+
/**
|
|
22
|
+
* User to run commands as, in `"uid"`, `"uid:gid"`, or `"name"` form. If omitted,
|
|
23
|
+
* no `--user` flag is set and commands run as the container's configured user.
|
|
24
|
+
*
|
|
25
|
+
* Set this to override the container's identity, e.g. `"root"` or `"1000:1000"`.
|
|
26
|
+
*/
|
|
27
|
+
user?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Execute commands in a Docker container via `docker exec`. */
|
|
30
|
+
export declare class DockerSandbox extends PosixShellSandbox {
|
|
31
|
+
readonly container: string;
|
|
32
|
+
readonly workingDir: string | undefined;
|
|
33
|
+
private readonly _user;
|
|
34
|
+
constructor(options: DockerSandboxOptions);
|
|
35
|
+
executeStreaming(command: string, options?: ExecuteOptions): AsyncGenerator<StreamChunk | ExecutionResult, void, undefined>;
|
|
36
|
+
getTools(): Tool[];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/sandbox/docker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAmB,MAAM,kBAAkB,CAAA;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAI5C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,gEAAgE;AAChE,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAE9B,OAAO,EAAE,oBAAoB;IAOlC,gBAAgB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;IAgCxD,QAAQ,IAAI,IAAI,EAAE;CAW5B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker sandbox — executes commands in a Docker container via `docker exec`.
|
|
3
|
+
*/
|
|
4
|
+
import { PosixShellSandbox, validateEnvKeys } from './posix-shell.js';
|
|
5
|
+
import { streamProcess } from './stream-process.js';
|
|
6
|
+
import { makeFileEditor, DEFAULT_FILE_EDITOR_DESCRIPTION } from '../vended-tools/file-editor/index.js';
|
|
7
|
+
import { makeBash, SANDBOX_BASH_DESCRIPTION } from '../vended-tools/bash/index.js';
|
|
8
|
+
/** Execute commands in a Docker container via `docker exec`. */
|
|
9
|
+
export class DockerSandbox extends PosixShellSandbox {
|
|
10
|
+
container;
|
|
11
|
+
workingDir;
|
|
12
|
+
_user;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
super();
|
|
15
|
+
this.container = options.container;
|
|
16
|
+
this.workingDir = options.workingDir;
|
|
17
|
+
this._user = options.user;
|
|
18
|
+
}
|
|
19
|
+
async *executeStreaming(command, options) {
|
|
20
|
+
const args = ['exec'];
|
|
21
|
+
// Unset user/cwd defer to the container's own configuration.
|
|
22
|
+
if (this._user !== undefined)
|
|
23
|
+
args.push('--user', this._user);
|
|
24
|
+
const cwd = options?.cwd ?? this.workingDir;
|
|
25
|
+
if (cwd !== undefined)
|
|
26
|
+
args.push('-w', cwd);
|
|
27
|
+
if (options?.env) {
|
|
28
|
+
validateEnvKeys(options.env);
|
|
29
|
+
for (const [key, val] of Object.entries(options.env)) {
|
|
30
|
+
// Values are passed as process argv (not through a shell), so no escaping is
|
|
31
|
+
// needed -- Docker stores them verbatim. This is why values aren't shell-quoted
|
|
32
|
+
// here, unlike the SSH backend which builds a shell command string.
|
|
33
|
+
args.push('-e', `${key}=${val}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// docker exec requires the container and command after all flags. Furthermore, '--'
|
|
37
|
+
// terminates flag parsing so the container is always treated as a positional argument.
|
|
38
|
+
// Without this, a name like '--privileged' would be parsed as a flag, overriding the
|
|
39
|
+
// exec options above.
|
|
40
|
+
args.push('--', this.container, 'sh', '-c', command);
|
|
41
|
+
yield* streamProcess('docker', args, {
|
|
42
|
+
timeout: options?.timeout,
|
|
43
|
+
signal: options?.signal,
|
|
44
|
+
enoentMessage: 'docker is not installed or not on PATH',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getTools() {
|
|
48
|
+
const cwd = this.workingDir ? ` Working directory: ${this.workingDir}.` : '';
|
|
49
|
+
return [
|
|
50
|
+
makeFileEditor(this, {
|
|
51
|
+
description: `${DEFAULT_FILE_EDITOR_DESCRIPTION} Files are in Docker container "${this.container}".`,
|
|
52
|
+
}),
|
|
53
|
+
makeBash(this, {
|
|
54
|
+
description: `${SANDBOX_BASH_DESCRIPTION} Runs in Docker container "${this.container}".${cwd}`,
|
|
55
|
+
}),
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/sandbox/docker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAA;AACtG,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAwBlF,gEAAgE;AAChE,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IACzC,SAAS,CAAQ;IACjB,UAAU,CAAoB;IACtB,KAAK,CAAoB;IAE1C,YAAY,OAA6B;QACvC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,CAAC,gBAAgB,CACrB,OAAe,EACf,OAAwB;QAExB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;QAErB,6DAA6D;QAC7D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAE7D,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QAC3C,IAAI,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAE3C,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,6EAA6E;gBAC7E,gFAAgF;gBAChF,oEAAoE;gBACpE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QAED,oFAAoF;QACpF,uFAAuF;QACvF,qFAAqF;QACrF,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAEpD,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;YACnC,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,aAAa,EAAE,wCAAwC;SACxD,CAAC,CAAA;IACJ,CAAC;IAEQ,QAAQ;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5E,OAAO;YACL,cAAc,CAAC,IAAI,EAAE;gBACnB,WAAW,EAAE,GAAG,+BAA+B,mCAAmC,IAAI,CAAC,SAAS,IAAI;aACrG,CAAC;YACF,QAAQ,CAAC,IAAI,EAAE;gBACb,WAAW,EAAE,GAAG,wBAAwB,8BAA8B,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE;aAC/F,CAAC;SACH,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error types for sandbox command and code execution.
|
|
3
|
+
*
|
|
4
|
+
* These are runtime throwables raised by sandbox execution; consumers can
|
|
5
|
+
* branch on them via `instanceof` to distinguish timeouts from aborts.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by sandbox execution when the configured `timeout` elapses.
|
|
9
|
+
*/
|
|
10
|
+
export declare class SandboxTimeoutError extends Error {
|
|
11
|
+
constructor(seconds: number);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Thrown by sandbox execution when the abort signal fires.
|
|
15
|
+
*/
|
|
16
|
+
export declare class SandboxAbortError extends Error {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Thrown by {@link Sandbox.listFiles} when the path does not exist, distinguishing
|
|
21
|
+
* genuine absence from permission or transport failures (which throw plain errors).
|
|
22
|
+
*/
|
|
23
|
+
export declare class SandboxPathNotFoundError extends Error {
|
|
24
|
+
constructor(path: string);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/sandbox/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,IAAI,EAAE,MAAM;CAIzB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error types for sandbox command and code execution.
|
|
3
|
+
*
|
|
4
|
+
* These are runtime throwables raised by sandbox execution; consumers can
|
|
5
|
+
* branch on them via `instanceof` to distinguish timeouts from aborts.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by sandbox execution when the configured `timeout` elapses.
|
|
9
|
+
*/
|
|
10
|
+
export class SandboxTimeoutError extends Error {
|
|
11
|
+
constructor(seconds) {
|
|
12
|
+
super(`Execution timed out after ${seconds} seconds`);
|
|
13
|
+
this.name = 'SandboxTimeoutError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Thrown by sandbox execution when the abort signal fires.
|
|
18
|
+
*/
|
|
19
|
+
export class SandboxAbortError extends Error {
|
|
20
|
+
constructor() {
|
|
21
|
+
super('Execution aborted');
|
|
22
|
+
this.name = 'SandboxAbortError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Thrown by {@link Sandbox.listFiles} when the path does not exist, distinguishing
|
|
27
|
+
* genuine absence from permission or transport failures (which throw plain errors).
|
|
28
|
+
*/
|
|
29
|
+
export class SandboxPathNotFoundError extends Error {
|
|
30
|
+
constructor(path) {
|
|
31
|
+
super(`Path not found: ${path}`);
|
|
32
|
+
this.name = 'SandboxPathNotFoundError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/sandbox/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,6BAA6B,OAAO,UAAU,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,IAAY;QACtB,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Sandbox, type ExecuteOptions } from './base.js';
|
|
2
|
+
export { PosixShellSandbox } from './posix-shell.js';
|
|
3
|
+
export type { StreamType, StreamChunk, FileInfo, OutputFile, ExecutionResult } from './types.js';
|
|
4
|
+
export { LANGUAGE_PATTERN } from './constants.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sandbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Sandbox } from './base.js';
|
|
2
|
+
import type { ExecuteOptions } from './base.js';
|
|
3
|
+
import type { ExecutionResult, FileInfo, StreamChunk } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Runs on the host with no isolation. Used as the default when no sandbox is configured.
|
|
6
|
+
*/
|
|
7
|
+
export declare class NotASandboxLocalEnvironment extends Sandbox {
|
|
8
|
+
private _resolvePath;
|
|
9
|
+
executeStreaming(command: string, options?: ExecuteOptions): AsyncGenerator<StreamChunk | ExecutionResult, void, undefined>;
|
|
10
|
+
executeCodeStreaming(code: string, language: string, options?: ExecuteOptions): AsyncGenerator<StreamChunk | ExecutionResult, void, undefined>;
|
|
11
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
12
|
+
writeFile(path: string, content: Uint8Array): Promise<void>;
|
|
13
|
+
removeFile(path: string): Promise<void>;
|
|
14
|
+
listFiles(path: string): Promise<FileInfo[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=not-a-sandbox-local-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-a-sandbox-local-environment.d.ts","sourceRoot":"","sources":["../../../src/sandbox/not-a-sandbox-local-environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAWxE;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,OAAO;IACtD,OAAO,CAAC,YAAY;IAIb,gBAAgB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;IAQ1D,oBAAoB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;IAqB3D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI3C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CA0BnD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { readFile, writeFile, unlink, mkdir, readdir, stat } from 'fs/promises';
|
|
2
|
+
import { dirname, isAbsolute, join } from 'path';
|
|
3
|
+
import { Sandbox } from './base.js';
|
|
4
|
+
import { LANGUAGE_PATTERN, shellQuote } from './constants.js';
|
|
5
|
+
import { SandboxPathNotFoundError } from './errors.js';
|
|
6
|
+
import { streamProcess } from './stream-process.js';
|
|
7
|
+
import { buildShellEnvPrefix } from './posix-shell.js';
|
|
8
|
+
/** Returns true if the error is a missing entry (ENOENT) or a non-directory path component (ENOTDIR). */
|
|
9
|
+
function isMissingPathError(error) {
|
|
10
|
+
if (error === null || typeof error !== 'object' || !('code' in error)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return error.code === 'ENOENT' || error.code === 'ENOTDIR';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Runs on the host with no isolation. Used as the default when no sandbox is configured.
|
|
17
|
+
*/
|
|
18
|
+
export class NotASandboxLocalEnvironment extends Sandbox {
|
|
19
|
+
_resolvePath(path) {
|
|
20
|
+
return isAbsolute(path) ? path : join(process.cwd(), path);
|
|
21
|
+
}
|
|
22
|
+
async *executeStreaming(command, options) {
|
|
23
|
+
const cwd = options?.cwd ?? process.cwd();
|
|
24
|
+
yield* streamProcess('sh', ['-c', `cd ${shellQuote(cwd)} && ${buildShellEnvPrefix(options?.env)}${command}`], {
|
|
25
|
+
timeout: options?.timeout,
|
|
26
|
+
signal: options?.signal,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async *executeCodeStreaming(code, language, options) {
|
|
30
|
+
if (!LANGUAGE_PATTERN.test(language)) {
|
|
31
|
+
throw new Error(`language parameter contains invalid characters: ${language}`);
|
|
32
|
+
}
|
|
33
|
+
const cwd = options?.cwd ?? process.cwd();
|
|
34
|
+
const encoded = btoa(Array.from(new TextEncoder().encode(code), (b) => String.fromCharCode(b)).join(''));
|
|
35
|
+
const eof = `STRANDS_EOF_${crypto.randomUUID().slice(0, 16)}`;
|
|
36
|
+
yield* streamProcess('sh', [
|
|
37
|
+
'-c',
|
|
38
|
+
`cd ${shellQuote(cwd)} && ${buildShellEnvPrefix(options?.env)}base64 -d << '${eof}' | ${language}\n${encoded}\n${eof}`,
|
|
39
|
+
], {
|
|
40
|
+
timeout: options?.timeout,
|
|
41
|
+
signal: options?.signal,
|
|
42
|
+
enoentMessage: `Language interpreter not found: ${language}`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async readFile(path) {
|
|
46
|
+
return readFile(this._resolvePath(path));
|
|
47
|
+
}
|
|
48
|
+
async writeFile(path, content) {
|
|
49
|
+
const fullPath = this._resolvePath(path);
|
|
50
|
+
await mkdir(dirname(fullPath), { recursive: true });
|
|
51
|
+
await writeFile(fullPath, content);
|
|
52
|
+
}
|
|
53
|
+
async removeFile(path) {
|
|
54
|
+
await unlink(this._resolvePath(path));
|
|
55
|
+
}
|
|
56
|
+
async listFiles(path) {
|
|
57
|
+
const fullPath = this._resolvePath(path);
|
|
58
|
+
let entries;
|
|
59
|
+
try {
|
|
60
|
+
entries = await readdir(fullPath, { withFileTypes: true });
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
// A missing path (or a file where a directory was expected) is non-existence;
|
|
64
|
+
// permission and other errors propagate so callers can surface them.
|
|
65
|
+
if (isMissingPathError(err)) {
|
|
66
|
+
throw new SandboxPathNotFoundError(path);
|
|
67
|
+
}
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
const results = [];
|
|
71
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
72
|
+
try {
|
|
73
|
+
const entryStat = await stat(join(fullPath, entry.name));
|
|
74
|
+
results.push({ name: entry.name, isDir: entryStat.isDirectory(), size: entryStat.size });
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
results.push({ name: entry.name });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return results;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=not-a-sandbox-local-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-a-sandbox-local-environment.js","sourceRoot":"","sources":["../../../src/sandbox/not-a-sandbox-local-environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell sandbox with default implementations for file and code operations.
|
|
3
|
+
*
|
|
4
|
+
* Subclasses only need to implement {@link PosixShellSandbox.executeStreaming} —
|
|
5
|
+
* all other operations are implemented by running shell commands through it.
|
|
6
|
+
* Use this for remote environments where only shell access is available
|
|
7
|
+
* (Docker containers, SSH connections, cloud runtimes).
|
|
8
|
+
*/
|
|
9
|
+
import { Sandbox } from './base.js';
|
|
10
|
+
import type { ExecuteOptions } from './base.js';
|
|
11
|
+
import type { ExecutionResult, FileInfo, StreamChunk } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Validate environment variable names against {@link ENV_KEY_PATTERN}.
|
|
14
|
+
* @throws If any key is not a valid POSIX environment variable name.
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateEnvKeys(env: Record<string, string>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Build a shell `export KEY=VALUE && ...` prefix for a command, or `''` when there are none.
|
|
19
|
+
* Keys are validated; values are {@link shellQuote}d. Used by shell-string backends (e.g. SSH);
|
|
20
|
+
* backends that set env via native flags (e.g. Docker's `-e`) call {@link validateEnvKeys} directly.
|
|
21
|
+
*
|
|
22
|
+
* Uses `export` rather than an `env KEY=VALUE` command wrapper so the variables are set in the
|
|
23
|
+
* shell itself and inherited by every stage of a pipeline. `executeCode` runs `base64 ... | <lang>`,
|
|
24
|
+
* and an `env` wrapper would only bind the left side of the pipe, never reaching the interpreter.
|
|
25
|
+
* The trailing `&&` keeps the surrounding `cd ... && <prefix><command>` chain fail-fast.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildShellEnvPrefix(env?: Record<string, string>): string;
|
|
28
|
+
/**
|
|
29
|
+
* Abstract sandbox that provides shell-based defaults for file and code operations.
|
|
30
|
+
* Assumes a POSIX-compatible shell (sh/bash) on the target.
|
|
31
|
+
*
|
|
32
|
+
* Subclasses only need to implement {@link executeStreaming}. The remaining
|
|
33
|
+
* operations — `executeCodeStreaming`, `readFile`, `writeFile`, `removeFile`,
|
|
34
|
+
* and `listFiles` — are implemented via shell commands piped through
|
|
35
|
+
* `executeStreaming`.
|
|
36
|
+
*
|
|
37
|
+
* Subclasses may override any method with a native implementation for
|
|
38
|
+
* better performance or to handle edge cases (e.g., binary-safe file
|
|
39
|
+
* transfer via Docker stdin pipes, or native API calls for cloud backends).
|
|
40
|
+
*
|
|
41
|
+
* Subclasses must apply `options.env` in `executeStreaming` or it has no effect:
|
|
42
|
+
* backends that build a shell-command string prepend {@link buildShellEnvPrefix};
|
|
43
|
+
* backends that set env via process flags (e.g. Docker's `-e`) call
|
|
44
|
+
* {@link validateEnvKeys} and pass the values directly.
|
|
45
|
+
*/
|
|
46
|
+
export declare abstract class PosixShellSandbox extends Sandbox {
|
|
47
|
+
executeCodeStreaming(code: string, language: string, options?: ExecuteOptions): AsyncGenerator<StreamChunk | ExecutionResult, void, undefined>;
|
|
48
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
49
|
+
writeFile(path: string, content: Uint8Array): Promise<void>;
|
|
50
|
+
removeFile(path: string): Promise<void>;
|
|
51
|
+
listFiles(path: string): Promise<FileInfo[]>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=posix-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posix-shell.d.ts","sourceRoot":"","sources":["../../../src/sandbox/posix-shell.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG/C,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAOxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,iBAAkB,SAAQ,OAAO;IAC9C,oBAAoB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;IAS3D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ3C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAyBnD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell sandbox with default implementations for file and code operations.
|
|
3
|
+
*
|
|
4
|
+
* Subclasses only need to implement {@link PosixShellSandbox.executeStreaming} —
|
|
5
|
+
* all other operations are implemented by running shell commands through it.
|
|
6
|
+
* Use this for remote environments where only shell access is available
|
|
7
|
+
* (Docker containers, SSH connections, cloud runtimes).
|
|
8
|
+
*/
|
|
9
|
+
import { Sandbox } from './base.js';
|
|
10
|
+
import { ENV_KEY_PATTERN, LANGUAGE_PATTERN, shellQuote } from './constants.js';
|
|
11
|
+
import { SandboxPathNotFoundError } from './errors.js';
|
|
12
|
+
/**
|
|
13
|
+
* Validate environment variable names against {@link ENV_KEY_PATTERN}.
|
|
14
|
+
* @throws If any key is not a valid POSIX environment variable name.
|
|
15
|
+
*/
|
|
16
|
+
export function validateEnvKeys(env) {
|
|
17
|
+
for (const key of Object.keys(env)) {
|
|
18
|
+
if (!ENV_KEY_PATTERN.test(key)) {
|
|
19
|
+
throw new Error(`Invalid environment variable name: ${key}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build a shell `export KEY=VALUE && ...` prefix for a command, or `''` when there are none.
|
|
25
|
+
* Keys are validated; values are {@link shellQuote}d. Used by shell-string backends (e.g. SSH);
|
|
26
|
+
* backends that set env via native flags (e.g. Docker's `-e`) call {@link validateEnvKeys} directly.
|
|
27
|
+
*
|
|
28
|
+
* Uses `export` rather than an `env KEY=VALUE` command wrapper so the variables are set in the
|
|
29
|
+
* shell itself and inherited by every stage of a pipeline. `executeCode` runs `base64 ... | <lang>`,
|
|
30
|
+
* and an `env` wrapper would only bind the left side of the pipe, never reaching the interpreter.
|
|
31
|
+
* The trailing `&&` keeps the surrounding `cd ... && <prefix><command>` chain fail-fast.
|
|
32
|
+
*/
|
|
33
|
+
export function buildShellEnvPrefix(env) {
|
|
34
|
+
if (!env || Object.keys(env).length === 0) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
validateEnvKeys(env);
|
|
38
|
+
const assignments = Object.entries(env).map(([k, v]) => `${k}=${shellQuote(v)}`);
|
|
39
|
+
return `export ${assignments.join(' ')} && `;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Abstract sandbox that provides shell-based defaults for file and code operations.
|
|
43
|
+
* Assumes a POSIX-compatible shell (sh/bash) on the target.
|
|
44
|
+
*
|
|
45
|
+
* Subclasses only need to implement {@link executeStreaming}. The remaining
|
|
46
|
+
* operations — `executeCodeStreaming`, `readFile`, `writeFile`, `removeFile`,
|
|
47
|
+
* and `listFiles` — are implemented via shell commands piped through
|
|
48
|
+
* `executeStreaming`.
|
|
49
|
+
*
|
|
50
|
+
* Subclasses may override any method with a native implementation for
|
|
51
|
+
* better performance or to handle edge cases (e.g., binary-safe file
|
|
52
|
+
* transfer via Docker stdin pipes, or native API calls for cloud backends).
|
|
53
|
+
*
|
|
54
|
+
* Subclasses must apply `options.env` in `executeStreaming` or it has no effect:
|
|
55
|
+
* backends that build a shell-command string prepend {@link buildShellEnvPrefix};
|
|
56
|
+
* backends that set env via process flags (e.g. Docker's `-e`) call
|
|
57
|
+
* {@link validateEnvKeys} and pass the values directly.
|
|
58
|
+
*/
|
|
59
|
+
export class PosixShellSandbox extends Sandbox {
|
|
60
|
+
async *executeCodeStreaming(code, language, options) {
|
|
61
|
+
if (!LANGUAGE_PATTERN.test(language)) {
|
|
62
|
+
throw new Error(`language parameter contains invalid characters: ${language}`);
|
|
63
|
+
}
|
|
64
|
+
const encoded = btoa(Array.from(new TextEncoder().encode(code), (b) => String.fromCharCode(b)).join(''));
|
|
65
|
+
const eof = `STRANDS_EOF_${crypto.randomUUID().slice(0, 16)}`;
|
|
66
|
+
yield* this.executeStreaming(`base64 -d << '${eof}' | ${language}\n${encoded}\n${eof}`, options);
|
|
67
|
+
}
|
|
68
|
+
async readFile(path) {
|
|
69
|
+
const result = await this.execute(`base64 < ${shellQuote(path)}`);
|
|
70
|
+
if (result.exitCode !== 0) {
|
|
71
|
+
throw new Error(result.stderr || `Failed to read file: ${path}`);
|
|
72
|
+
}
|
|
73
|
+
return Uint8Array.from(atob(result.stdout.replace(/\s/g, '')), (c) => c.charCodeAt(0));
|
|
74
|
+
}
|
|
75
|
+
async writeFile(path, content) {
|
|
76
|
+
const encoded = btoa(Array.from(content, (b) => String.fromCharCode(b)).join(''));
|
|
77
|
+
const quoted = shellQuote(path);
|
|
78
|
+
const eof = `STRANDS_EOF_${crypto.randomUUID().slice(0, 16)}`;
|
|
79
|
+
const cmd = `mkdir -p "$(dirname ${quoted})" && base64 -d << '${eof}' > ${quoted}\n${encoded}\n${eof}`;
|
|
80
|
+
const result = await this.execute(cmd);
|
|
81
|
+
if (result.exitCode !== 0) {
|
|
82
|
+
throw new Error(result.stderr || `Failed to write file: ${path}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async removeFile(path) {
|
|
86
|
+
const result = await this.execute(`rm ${shellQuote(path)}`);
|
|
87
|
+
if (result.exitCode !== 0) {
|
|
88
|
+
throw new Error(result.stderr || `Failed to remove file: ${path}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async listFiles(path) {
|
|
92
|
+
const quoted = shellQuote(path);
|
|
93
|
+
// Exit 77 distinguishes a missing directory from ls's own failures (locale-independent).
|
|
94
|
+
const result = await this.execute(`test -d ${quoted} || exit 77; env QUOTING_STYLE=literal ls -1ap ${quoted}`);
|
|
95
|
+
if (result.exitCode === 77) {
|
|
96
|
+
throw new SandboxPathNotFoundError(path);
|
|
97
|
+
}
|
|
98
|
+
if (result.exitCode !== 0) {
|
|
99
|
+
throw new Error(result.stderr || `Failed to list directory: ${path}`);
|
|
100
|
+
}
|
|
101
|
+
const entries = [];
|
|
102
|
+
for (const raw of result.stdout.split('\n')) {
|
|
103
|
+
const line = raw.replace(/\r$/, '');
|
|
104
|
+
if (!line || line === './' || line === '../') {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const isDir = line.endsWith('/');
|
|
108
|
+
const name = isDir ? line.slice(0, -1) : line;
|
|
109
|
+
if (name) {
|
|
110
|
+
entries.push({ name, isDir });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return entries;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=posix-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posix-shell.js","sourceRoot":"","sources":["../../../src/sandbox/posix-shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSH sandbox — executes commands on a remote host via OpenSSH.
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecuteOptions } from './base.js';
|
|
5
|
+
import { PosixShellSandbox } from './posix-shell.js';
|
|
6
|
+
import type { ExecutionResult, StreamChunk } from './types.js';
|
|
7
|
+
import type { Tool } from '../tools/tool.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for constructing an {@link SshSandbox}.
|
|
10
|
+
*/
|
|
11
|
+
export interface SshSandboxOptions {
|
|
12
|
+
/** SSH destination (e.g., `"user@host"`, `"192.168.1.10"`). */
|
|
13
|
+
host: string;
|
|
14
|
+
/** Working directory on the remote host. */
|
|
15
|
+
workingDir: string;
|
|
16
|
+
/** Path to SSH private key file. */
|
|
17
|
+
identityFile?: string;
|
|
18
|
+
/** SSH port. Defaults to 22. */
|
|
19
|
+
port?: number;
|
|
20
|
+
/** Additional SSH options passed as `-o` flags. */
|
|
21
|
+
sshOptions?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Allow connections to hosts with unknown or changed SSH keys.
|
|
24
|
+
*
|
|
25
|
+
* When `false` (default), uses `StrictHostKeyChecking=accept-new` — trusts on
|
|
26
|
+
* first connect but rejects if the key changes.
|
|
27
|
+
* When `true`, uses `StrictHostKeyChecking=no` — disables host key verification.
|
|
28
|
+
*/
|
|
29
|
+
allowUnknownHosts?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Bypass the SSH option allowlist.
|
|
32
|
+
*
|
|
33
|
+
* When `false` (default), unknown options throw at construction time.
|
|
34
|
+
* When `true`, all options are passed through without validation.
|
|
35
|
+
*/
|
|
36
|
+
allowUnsafeSshOptions?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Execute commands on a remote host via SSH.
|
|
40
|
+
*
|
|
41
|
+
* Stateless — each {@link executeStreaming} call spawns a fresh `ssh` process.
|
|
42
|
+
* All sessions use `BatchMode=yes` — interactive prompts are disabled and
|
|
43
|
+
* authentication must be key-based.
|
|
44
|
+
*/
|
|
45
|
+
export declare class SshSandbox extends PosixShellSandbox {
|
|
46
|
+
readonly host: string;
|
|
47
|
+
readonly workingDir: string;
|
|
48
|
+
private readonly _identityFile;
|
|
49
|
+
private readonly _port;
|
|
50
|
+
private readonly _allowUnknownHosts;
|
|
51
|
+
private readonly _sshOptions;
|
|
52
|
+
constructor(options: SshSandboxOptions);
|
|
53
|
+
executeStreaming(command: string, options?: ExecuteOptions): AsyncGenerator<StreamChunk | ExecutionResult, void, undefined>;
|
|
54
|
+
getTools(): Tool[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ssh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/sandbox/ssh.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAuB,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AA4C5C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,iBAAiB;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;gBAE1B,OAAO,EAAE,iBAAiB;IAmB/B,gBAAgB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;IAmCxD,QAAQ,IAAI,IAAI,EAAE;CAU5B"}
|