@elie-laloum/outpost 4.2.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/README.md +13 -11
- package/SECURITY.md +2 -0
- package/dist/adapters/agents/antigravity-adapter.d.ts +3 -0
- package/dist/adapters/agents/antigravity-adapter.js +39 -0
- package/dist/adapters/agents/antigravity-adapter.js.map +1 -0
- package/dist/adapters/agents/antigravity-authentication.d.ts +2 -0
- package/dist/adapters/agents/antigravity-authentication.js +27 -0
- package/dist/adapters/agents/antigravity-authentication.js.map +1 -0
- package/dist/adapters/agents/antigravity-diagnostics.d.ts +1 -0
- package/dist/adapters/agents/antigravity-diagnostics.js +6 -0
- package/dist/adapters/agents/antigravity-diagnostics.js.map +1 -0
- package/dist/adapters/agents/antigravity-events.d.ts +2 -0
- package/dist/adapters/agents/antigravity-events.js +66 -0
- package/dist/adapters/agents/antigravity-events.js.map +1 -0
- package/dist/adapters/agents/antigravity-request.d.ts +5 -0
- package/dist/adapters/agents/antigravity-request.js +29 -0
- package/dist/adapters/agents/antigravity-request.js.map +1 -0
- package/dist/adapters/agents/antigravity.types.d.ts +7 -0
- package/dist/adapters/agents/antigravity.types.js +2 -0
- package/dist/adapters/agents/antigravity.types.js.map +1 -0
- package/dist/adapters/agents/authentication.constants.d.ts +23 -0
- package/dist/adapters/agents/authentication.constants.js +13 -0
- package/dist/adapters/agents/authentication.constants.js.map +1 -0
- package/dist/adapters/agents/authentication.d.ts +11 -0
- package/dist/adapters/agents/authentication.js +75 -0
- package/dist/adapters/agents/authentication.js.map +1 -0
- package/dist/adapters/agents/authentication.types.d.ts +20 -0
- package/dist/adapters/agents/authentication.types.js +2 -0
- package/dist/adapters/agents/authentication.types.js.map +1 -0
- package/dist/adapters/agents/claude-adapter.d.ts +2 -2
- package/dist/adapters/agents/claude-adapter.js +32 -2
- package/dist/adapters/agents/claude-adapter.js.map +1 -1
- package/dist/adapters/agents/claude-authentication.d.ts +2 -0
- package/dist/adapters/agents/claude-authentication.js +34 -0
- package/dist/adapters/agents/claude-authentication.js.map +1 -0
- package/dist/adapters/agents/claude-request.d.ts +2 -2
- package/dist/adapters/agents/claude-request.js +3 -3
- package/dist/adapters/agents/claude-request.js.map +1 -1
- package/dist/adapters/agents/cli-diagnostics.constants.d.ts +6 -6
- package/dist/adapters/agents/cli-diagnostics.constants.js +6 -6
- package/dist/adapters/agents/cli-diagnostics.constants.js.map +1 -1
- package/dist/adapters/agents/cli-diagnostics.d.ts +1 -0
- package/dist/adapters/agents/cli-diagnostics.js +11 -0
- package/dist/adapters/agents/cli-diagnostics.js.map +1 -1
- package/dist/adapters/agents/codex-adapter.d.ts +2 -2
- package/dist/adapters/agents/codex-adapter.js +19 -1
- package/dist/adapters/agents/codex-adapter.js.map +1 -1
- package/dist/adapters/agents/codex-authentication.d.ts +3 -0
- package/dist/adapters/agents/codex-authentication.js +47 -0
- package/dist/adapters/agents/codex-authentication.js.map +1 -0
- package/dist/adapters/agents/codex-provider.d.ts +2 -2
- package/dist/adapters/agents/codex-provider.js +1 -1
- package/dist/adapters/agents/codex-provider.js.map +1 -1
- package/dist/adapters/agents/codex-request.d.ts +2 -2
- package/dist/adapters/agents/codex-request.js +3 -3
- package/dist/adapters/agents/codex-request.js.map +1 -1
- package/dist/adapters/agents/copilot-adapter.d.ts +3 -0
- package/dist/adapters/agents/copilot-adapter.js +39 -0
- package/dist/adapters/agents/copilot-adapter.js.map +1 -0
- package/dist/adapters/agents/copilot-authentication.d.ts +2 -0
- package/dist/adapters/agents/copilot-authentication.js +45 -0
- package/dist/adapters/agents/copilot-authentication.js.map +1 -0
- package/dist/adapters/agents/copilot-diagnostics.d.ts +1 -0
- package/dist/adapters/agents/copilot-diagnostics.js +6 -0
- package/dist/adapters/agents/copilot-diagnostics.js.map +1 -0
- package/dist/adapters/agents/copilot-events.d.ts +2 -0
- package/dist/adapters/agents/copilot-events.js +50 -0
- package/dist/adapters/agents/copilot-events.js.map +1 -0
- package/dist/adapters/agents/copilot-request.d.ts +5 -0
- package/dist/adapters/agents/copilot-request.js +19 -0
- package/dist/adapters/agents/copilot-request.js.map +1 -0
- package/dist/adapters/agents/copilot.types.d.ts +6 -0
- package/dist/adapters/agents/copilot.types.js +2 -0
- package/dist/adapters/agents/copilot.types.js.map +1 -0
- package/dist/adapters/agents/event-decoder.d.ts +2 -2
- package/dist/adapters/agents/event-decoder.js +6 -5
- package/dist/adapters/agents/event-decoder.js.map +1 -1
- package/dist/adapters/agents/kimi-adapter.d.ts +3 -0
- package/dist/adapters/agents/kimi-adapter.js +35 -0
- package/dist/adapters/agents/kimi-adapter.js.map +1 -0
- package/dist/adapters/agents/kimi-authentication.d.ts +2 -0
- package/dist/adapters/agents/kimi-authentication.js +48 -0
- package/dist/adapters/agents/kimi-authentication.js.map +1 -0
- package/dist/adapters/agents/kimi-diagnostics.d.ts +1 -0
- package/dist/adapters/agents/kimi-diagnostics.js +6 -0
- package/dist/adapters/agents/kimi-diagnostics.js.map +1 -0
- package/dist/adapters/agents/kimi-events.d.ts +2 -0
- package/dist/adapters/agents/kimi-events.js +51 -0
- package/dist/adapters/agents/kimi-events.js.map +1 -0
- package/dist/adapters/agents/kimi-request.d.ts +5 -0
- package/dist/adapters/agents/kimi-request.js +28 -0
- package/dist/adapters/agents/kimi-request.js.map +1 -0
- package/dist/adapters/agents/kimi.types.d.ts +6 -0
- package/dist/adapters/agents/kimi.types.js +2 -0
- package/dist/adapters/agents/kimi.types.js.map +1 -0
- package/dist/adapters/agents/model-support.constants.d.ts +8 -0
- package/dist/adapters/agents/model-support.constants.js +28 -0
- package/dist/adapters/agents/model-support.constants.js.map +1 -0
- package/dist/adapters/agents/model-support.d.ts +4 -0
- package/dist/adapters/agents/model-support.js +11 -0
- package/dist/adapters/agents/model-support.js.map +1 -0
- package/dist/adapters/agents/protocol-fixtures.constants.d.ts +2 -2
- package/dist/adapters/agents/protocol-fixtures.constants.js +135 -9
- package/dist/adapters/agents/protocol-fixtures.constants.js.map +1 -1
- package/dist/adapters/agents/protocol-fixtures.types.d.ts +1 -0
- package/dist/adapters/agents/protocol-fixtures.types.js.map +1 -1
- package/dist/adapters/agents/protocol.d.ts +1 -0
- package/dist/adapters/agents/protocol.js +9 -0
- package/dist/adapters/agents/protocol.js.map +1 -1
- package/dist/adapters/agents/settings.types.d.ts +11 -3
- package/dist/adapters/agents/settings.types.js.map +1 -1
- package/dist/adapters/models/anthropic-model-provider.constants.d.ts +3 -0
- package/dist/adapters/models/anthropic-model-provider.constants.js +17 -0
- package/dist/adapters/models/anthropic-model-provider.constants.js.map +1 -0
- package/dist/adapters/models/anthropic-model-provider.d.ts +3 -0
- package/dist/adapters/models/anthropic-model-provider.js +31 -0
- package/dist/adapters/models/anthropic-model-provider.js.map +1 -0
- package/dist/adapters/models/anthropic-model-provider.types.d.ts +7 -0
- package/dist/adapters/models/anthropic-model-provider.types.js +2 -0
- package/dist/adapters/models/anthropic-model-provider.types.js.map +1 -0
- package/dist/adapters/models/anthropic-request.d.ts +4 -0
- package/dist/adapters/models/anthropic-request.js +81 -0
- package/dist/adapters/models/anthropic-request.js.map +1 -0
- package/dist/adapters/models/anthropic-response.d.ts +3 -0
- package/dist/adapters/models/anthropic-response.js +55 -0
- package/dist/adapters/models/anthropic-response.js.map +1 -0
- package/dist/adapters/models/anthropic-stream.d.ts +2 -0
- package/dist/adapters/models/anthropic-stream.js +96 -0
- package/dist/adapters/models/anthropic-stream.js.map +1 -0
- package/dist/adapters/models/http-provider.d.ts +3 -0
- package/dist/adapters/models/http-provider.js +113 -0
- package/dist/adapters/models/http-provider.js.map +1 -0
- package/dist/adapters/models/{openai-http.js → model-http.js} +1 -1
- package/dist/adapters/models/model-http.js.map +1 -0
- package/dist/adapters/models/model-protocol.types.d.ts +41 -0
- package/dist/adapters/models/model-protocol.types.js +2 -0
- package/dist/adapters/models/model-protocol.types.js.map +1 -0
- package/dist/adapters/models/model-request.d.ts +2 -0
- package/dist/adapters/models/model-request.js +18 -0
- package/dist/adapters/models/model-request.js.map +1 -0
- package/dist/adapters/models/model-response.d.ts +7 -0
- package/dist/adapters/models/model-response.js +41 -0
- package/dist/adapters/models/model-response.js.map +1 -0
- package/dist/adapters/models/{openai-compatible.constants.js → model.constants.js} +6 -1
- package/dist/adapters/models/model.constants.js.map +1 -0
- package/dist/adapters/models/openai-chat-stream.d.ts +2 -0
- package/dist/adapters/models/openai-chat-stream.js +66 -0
- package/dist/adapters/models/openai-chat-stream.js.map +1 -0
- package/dist/adapters/models/openai-chat.d.ts +4 -0
- package/dist/adapters/models/openai-chat.js +108 -0
- package/dist/adapters/models/openai-chat.js.map +1 -0
- package/dist/adapters/models/openai-model-provider.d.ts +3 -0
- package/dist/adapters/models/openai-model-provider.js +13 -0
- package/dist/adapters/models/openai-model-provider.js.map +1 -0
- package/dist/adapters/models/openai-model-provider.types.d.ts +4 -0
- package/dist/adapters/models/openai-model-provider.types.js +2 -0
- package/dist/adapters/models/openai-model-provider.types.js.map +1 -0
- package/dist/adapters/models/openai-protocols.d.ts +2 -0
- package/dist/adapters/models/openai-protocols.js +22 -0
- package/dist/adapters/models/openai-protocols.js.map +1 -0
- package/dist/adapters/models/openai-responses-stream.d.ts +2 -0
- package/dist/adapters/models/openai-responses-stream.js +35 -0
- package/dist/adapters/models/openai-responses-stream.js.map +1 -0
- package/dist/adapters/models/openai-responses.d.ts +4 -0
- package/dist/adapters/models/openai-responses.js +107 -0
- package/dist/adapters/models/openai-responses.js.map +1 -0
- package/dist/adapters/models/openai-usage.d.ts +3 -0
- package/dist/adapters/models/openai-usage.js +20 -0
- package/dist/adapters/models/openai-usage.js.map +1 -0
- package/dist/adapters/models/stop-reasons.constants.d.ts +4 -0
- package/dist/adapters/models/stop-reasons.constants.js +19 -0
- package/dist/adapters/models/stop-reasons.constants.js.map +1 -0
- package/dist/adapters/models/stream-events.d.ts +3 -0
- package/dist/adapters/models/stream-events.js +22 -0
- package/dist/adapters/models/stream-events.js.map +1 -0
- package/dist/adapters/tools/edit-tools.d.ts +2 -0
- package/dist/adapters/tools/edit-tools.js +84 -0
- package/dist/adapters/tools/edit-tools.js.map +1 -0
- package/dist/adapters/tools/file-tools.d.ts +2 -0
- package/dist/adapters/tools/file-tools.js +97 -0
- package/dist/adapters/tools/file-tools.js.map +1 -0
- package/dist/adapters/tools/git-tools.d.ts +2 -0
- package/dist/adapters/tools/git-tools.js +54 -0
- package/dist/adapters/tools/git-tools.js.map +1 -0
- package/dist/adapters/tools/sandbox-files.d.ts +10 -0
- package/dist/adapters/tools/sandbox-files.js +60 -0
- package/dist/adapters/tools/sandbox-files.js.map +1 -0
- package/dist/adapters/tools/search-tools.d.ts +2 -0
- package/dist/adapters/tools/search-tools.js +65 -0
- package/dist/adapters/tools/search-tools.js.map +1 -0
- package/dist/adapters/tools/shell-tools.d.ts +3 -0
- package/dist/adapters/tools/shell-tools.js +38 -0
- package/dist/adapters/tools/shell-tools.js.map +1 -0
- package/dist/adapters/tools/tools.constants.d.ts +11 -0
- package/dist/adapters/tools/tools.constants.js +17 -0
- package/dist/adapters/tools/tools.constants.js.map +1 -0
- package/dist/adapters/tools/tools.types.d.ts +41 -0
- package/dist/adapters/tools/tools.types.js +2 -0
- package/dist/adapters/tools/tools.types.js.map +1 -0
- package/dist/application/activity-watchdog.js +15 -2
- package/dist/application/activity-watchdog.js.map +1 -1
- package/dist/application/agent-authentication.d.ts +4 -0
- package/dist/application/agent-authentication.js +32 -0
- package/dist/application/agent-authentication.js.map +1 -0
- package/dist/application/agent-bootstrap.constants.d.ts +2 -5
- package/dist/application/agent-bootstrap.constants.js +29 -4
- package/dist/application/agent-bootstrap.constants.js.map +1 -1
- package/dist/application/agent-bootstrap.d.ts +2 -2
- package/dist/application/agent-bootstrap.js +35 -12
- package/dist/application/agent-bootstrap.js.map +1 -1
- package/dist/application/agent-bootstrap.types.d.ts +20 -0
- package/dist/application/agent-bootstrap.types.js +2 -0
- package/dist/application/agent-bootstrap.types.js.map +1 -0
- package/dist/application/agent-storage.d.ts +3 -2
- package/dist/application/agent-storage.js +9 -2
- package/dist/application/agent-storage.js.map +1 -1
- package/dist/application/agent-turn.d.ts +3 -3
- package/dist/application/agent-turn.js +7 -1
- package/dist/application/agent-turn.js.map +1 -1
- package/dist/application/attach.js +1 -0
- package/dist/application/attach.js.map +1 -1
- package/dist/application/credential-installer.constants.d.ts +1 -0
- package/dist/application/credential-installer.constants.js +22 -0
- package/dist/application/credential-installer.constants.js.map +1 -0
- package/dist/application/custom-turn.d.ts +5 -0
- package/dist/application/custom-turn.js +190 -0
- package/dist/application/custom-turn.js.map +1 -0
- package/dist/application/dispatch-observation.d.ts +3 -0
- package/dist/application/dispatch-observation.js +51 -0
- package/dist/application/dispatch-observation.js.map +1 -0
- package/dist/application/dispatch-observation.types.d.ts +5 -0
- package/dist/application/dispatch-observation.types.js +2 -0
- package/dist/application/dispatch-observation.types.js.map +1 -0
- package/dist/application/dispatch-validation.d.ts +2 -2
- package/dist/application/dispatch-validation.js.map +1 -1
- package/dist/application/dispatch.js +8 -3
- package/dist/application/dispatch.js.map +1 -1
- package/dist/application/doctor-agent.constants.d.ts +2 -8
- package/dist/application/doctor-agent.constants.js +40 -6
- package/dist/application/doctor-agent.constants.js.map +1 -1
- package/dist/application/doctor-agent.d.ts +2 -1
- package/dist/application/doctor-agent.js +11 -3
- package/dist/application/doctor-agent.js.map +1 -1
- package/dist/application/doctor-image.js +7 -9
- package/dist/application/doctor-image.js.map +1 -1
- package/dist/application/doctor-protocol.js +6 -6
- package/dist/application/doctor-protocol.js.map +1 -1
- package/dist/application/doctor-protocol.types.d.ts +1 -1
- package/dist/application/doctor-protocol.types.js.map +1 -1
- package/dist/application/doctor-sandbox.js +6 -9
- package/dist/application/doctor-sandbox.js.map +1 -1
- package/dist/application/doctor-sandbox.types.d.ts +2 -2
- package/dist/application/doctor-sandbox.types.js.map +1 -1
- package/dist/application/doctor.constants.d.ts +1 -1
- package/dist/application/doctor.constants.js +1 -1
- package/dist/application/doctor.constants.js.map +1 -1
- package/dist/application/doctor.js +12 -13
- package/dist/application/doctor.js.map +1 -1
- package/dist/application/doctor.types.d.ts +12 -4
- package/dist/application/doctor.types.js.map +1 -1
- package/dist/application/execution.d.ts +2 -2
- package/dist/application/execution.js +1 -1
- package/dist/application/execution.js.map +1 -1
- package/dist/application/execution.types.d.ts +9 -2
- package/dist/application/execution.types.js.map +1 -1
- package/dist/application/harness-context.d.ts +2 -0
- package/dist/application/harness-context.js +54 -0
- package/dist/application/harness-context.js.map +1 -0
- package/dist/application/harness-history.d.ts +3 -0
- package/dist/application/harness-history.js +17 -0
- package/dist/application/harness-history.js.map +1 -0
- package/dist/application/harness-hooks.d.ts +9 -0
- package/dist/application/harness-hooks.js +90 -0
- package/dist/application/harness-hooks.js.map +1 -0
- package/dist/application/harness-loop.d.ts +2 -0
- package/dist/application/harness-loop.js +132 -0
- package/dist/application/harness-loop.js.map +1 -0
- package/dist/application/harness.types.d.ts +55 -0
- package/dist/application/harness.types.js +2 -0
- package/dist/application/harness.types.js.map +1 -0
- package/dist/application/lifecycle.constants.d.ts +1 -1
- package/dist/application/lifecycle.constants.js +1 -1
- package/dist/application/lifecycle.constants.js.map +1 -1
- package/dist/application/outpost.types.d.ts +6 -7
- package/dist/application/outpost.types.js.map +1 -1
- package/dist/application/recovery-retention.js +65 -24
- package/dist/application/recovery-retention.js.map +1 -1
- package/dist/application/remote-download.js +1 -1
- package/dist/application/remote-download.js.map +1 -1
- package/dist/application/sandbox-agents.js +14 -5
- package/dist/application/sandbox-agents.js.map +1 -1
- package/dist/application/sandbox-attach.js +5 -2
- package/dist/application/sandbox-attach.js.map +1 -1
- package/dist/application/sandbox-dispatch.js +3 -5
- package/dist/application/sandbox-dispatch.js.map +1 -1
- package/dist/application/sandbox-provision.js +13 -10
- package/dist/application/sandbox-provision.js.map +1 -1
- package/dist/application/sandbox-session.types.d.ts +13 -8
- package/dist/application/sandbox-session.types.js.map +1 -1
- package/dist/application/sandbox.js +6 -3
- package/dist/application/sandbox.js.map +1 -1
- package/dist/application/speculation.js +1 -1
- package/dist/application/speculation.js.map +1 -1
- package/dist/application/speculation.types.d.ts +3 -3
- package/dist/application/speculation.types.js.map +1 -1
- package/dist/application/startup-recovery.js +1 -1
- package/dist/application/startup-recovery.js.map +1 -1
- package/dist/application/storage-reservation.js +9 -2
- package/dist/application/storage-reservation.js.map +1 -1
- package/dist/application/tasks.types.d.ts +2 -2
- package/dist/application/tasks.types.js.map +1 -1
- package/dist/application/tool-execution.d.ts +3 -0
- package/dist/application/tool-execution.js +211 -0
- package/dist/application/tool-execution.js.map +1 -0
- package/dist/cli/commands.js +4 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/doctor-command.js +11 -7
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/cli/init-authentication.d.ts +4 -1
- package/dist/cli/init-authentication.js +28 -34
- package/dist/cli/init-authentication.js.map +1 -1
- package/dist/cli/init-command.js +6 -6
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/main.constants.d.ts +54 -17
- package/dist/cli/main.constants.js +74 -12
- package/dist/cli/main.constants.js.map +1 -1
- package/dist/cli/recovery-command.js +1 -1
- package/dist/cli/recovery-command.js.map +1 -1
- package/dist/cli/scaffold-files.js +6 -5
- package/dist/cli/scaffold-files.js.map +1 -1
- package/dist/cli/scaffold-validation.js +26 -16
- package/dist/cli/scaffold-validation.js.map +1 -1
- package/dist/cli/scaffold.constants.d.ts +0 -1
- package/dist/cli/scaffold.constants.js +5 -2
- package/dist/cli/scaffold.constants.js.map +1 -1
- package/dist/cli/scaffold.js +8 -4
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/scaffold.types.d.ts +9 -3
- package/dist/cli/scaffold.types.js.map +1 -1
- package/dist/cli/starters.js +8 -10
- package/dist/cli/starters.js.map +1 -1
- package/dist/domain/agent-model.d.ts +3 -0
- package/dist/domain/agent-model.js +22 -0
- package/dist/domain/agent-model.js.map +1 -0
- package/dist/domain/agent.d.ts +4 -0
- package/dist/domain/agent.js +32 -0
- package/dist/domain/agent.js.map +1 -0
- package/dist/domain/agent.types.d.ts +105 -2
- package/dist/domain/agent.types.js.map +1 -1
- package/dist/domain/authentication.constants.d.ts +3 -0
- package/dist/domain/authentication.constants.js +11 -0
- package/dist/domain/authentication.constants.js.map +1 -0
- package/dist/domain/authentication.d.ts +3 -0
- package/dist/domain/authentication.js +22 -0
- package/dist/domain/authentication.js.map +1 -0
- package/dist/domain/authentication.types.d.ts +5 -0
- package/dist/domain/authentication.types.js +2 -0
- package/dist/domain/authentication.types.js.map +1 -0
- package/dist/domain/context.constants.d.ts +7 -0
- package/dist/domain/context.constants.js +8 -0
- package/dist/domain/context.constants.js.map +1 -0
- package/dist/domain/context.d.ts +4 -0
- package/dist/domain/context.js +81 -0
- package/dist/domain/context.js.map +1 -0
- package/dist/domain/context.types.d.ts +26 -0
- package/dist/domain/context.types.js +2 -0
- package/dist/domain/context.types.js.map +1 -0
- package/dist/domain/dispatch-telemetry.types.d.ts +12 -0
- package/dist/domain/dispatch-telemetry.types.js +2 -0
- package/dist/domain/dispatch-telemetry.types.js.map +1 -0
- package/dist/domain/errors.types.d.ts +1 -1
- package/dist/domain/errors.types.js.map +1 -1
- package/dist/domain/glob.d.ts +2 -0
- package/dist/domain/glob.js +25 -0
- package/dist/domain/glob.js.map +1 -0
- package/dist/domain/glob.types.d.ts +1 -0
- package/dist/domain/glob.types.js +2 -0
- package/dist/domain/glob.types.js.map +1 -0
- package/dist/domain/harness.constants.d.ts +11 -0
- package/dist/domain/harness.constants.js +24 -0
- package/dist/domain/harness.constants.js.map +1 -0
- package/dist/domain/harness.d.ts +2 -0
- package/dist/domain/harness.js +89 -0
- package/dist/domain/harness.js.map +1 -0
- package/dist/domain/harness.types.d.ts +60 -0
- package/dist/domain/harness.types.js +2 -0
- package/dist/domain/harness.types.js.map +1 -0
- package/dist/domain/hook.constants.d.ts +3 -0
- package/dist/domain/hook.constants.js +10 -0
- package/dist/domain/hook.constants.js.map +1 -0
- package/dist/domain/hook.d.ts +3 -0
- package/dist/domain/hook.js +25 -0
- package/dist/domain/hook.js.map +1 -0
- package/dist/domain/hook.types.d.ts +66 -0
- package/dist/domain/hook.types.js +2 -0
- package/dist/domain/hook.types.js.map +1 -0
- package/dist/domain/instructions.d.ts +3 -0
- package/dist/domain/instructions.js +25 -0
- package/dist/domain/instructions.js.map +1 -0
- package/dist/domain/model-messages.d.ts +5 -0
- package/dist/domain/model-messages.js +81 -0
- package/dist/domain/model-messages.js.map +1 -0
- package/dist/domain/model-messages.types.d.ts +6 -0
- package/dist/domain/model-messages.types.js +2 -0
- package/dist/domain/model-messages.types.js.map +1 -0
- package/dist/domain/model.constants.d.ts +4 -0
- package/dist/domain/model.constants.js +16 -0
- package/dist/domain/model.constants.js.map +1 -0
- package/dist/domain/model.types.d.ts +59 -2
- package/dist/domain/model.types.js.map +1 -1
- package/dist/domain/permissions.d.ts +3 -0
- package/dist/domain/permissions.js +92 -0
- package/dist/domain/permissions.js.map +1 -0
- package/dist/domain/permissions.types.d.ts +34 -0
- package/dist/domain/permissions.types.js +2 -0
- package/dist/domain/permissions.types.js.map +1 -0
- package/dist/domain/response.js +3 -2
- package/dist/domain/response.js.map +1 -1
- package/dist/domain/response.types.d.ts +12 -0
- package/dist/domain/response.types.js.map +1 -1
- package/dist/domain/skill.constants.d.ts +2 -0
- package/dist/domain/skill.constants.js +8 -0
- package/dist/domain/skill.constants.js.map +1 -0
- package/dist/domain/skill.d.ts +8 -0
- package/dist/domain/skill.js +79 -0
- package/dist/domain/skill.js.map +1 -0
- package/dist/domain/skill.types.d.ts +18 -0
- package/dist/domain/skill.types.js +2 -0
- package/dist/domain/skill.types.js.map +1 -0
- package/dist/domain/standard-schema.d.ts +6 -0
- package/dist/domain/standard-schema.js +45 -0
- package/dist/domain/standard-schema.js.map +1 -0
- package/dist/domain/tool-schema.d.ts +3 -0
- package/dist/domain/tool-schema.js +109 -0
- package/dist/domain/tool-schema.js.map +1 -0
- package/dist/domain/tool.constants.d.ts +4 -0
- package/dist/domain/tool.constants.js +36 -0
- package/dist/domain/tool.constants.js.map +1 -0
- package/dist/domain/tool.d.ts +4 -0
- package/dist/domain/tool.js +66 -0
- package/dist/domain/tool.js.map +1 -0
- package/dist/domain/tool.types.d.ts +62 -0
- package/dist/domain/tool.types.js +2 -0
- package/dist/domain/tool.types.js.map +1 -0
- package/dist/domain/transcript.d.ts +4 -0
- package/dist/domain/transcript.js +48 -0
- package/dist/domain/transcript.js.map +1 -0
- package/dist/domain/transcript.types.d.ts +15 -0
- package/dist/domain/transcript.types.js +2 -0
- package/dist/domain/transcript.types.js.map +1 -0
- package/dist/domain/workflow/workflow-state.js +13 -6
- package/dist/domain/workflow/workflow-state.js.map +1 -1
- package/dist/domain/workflow.d.ts +1 -1
- package/dist/domain/workflow.js.map +1 -1
- package/dist/domain/workflow.types.d.ts +4 -0
- package/dist/domain/workflow.types.js.map +1 -1
- package/dist/index.d.ts +35 -13
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/conversations/harness-store.d.ts +3 -0
- package/dist/infrastructure/conversations/harness-store.js +27 -0
- package/dist/infrastructure/conversations/harness-store.js.map +1 -0
- package/dist/infrastructure/conversations/harness-transcript.d.ts +2 -0
- package/dist/infrastructure/conversations/harness-transcript.js +50 -0
- package/dist/infrastructure/conversations/harness-transcript.js.map +1 -0
- package/dist/infrastructure/conversations/harness-transcript.types.d.ts +18 -0
- package/dist/infrastructure/conversations/harness-transcript.types.js +2 -0
- package/dist/infrastructure/conversations/harness-transcript.types.js.map +1 -0
- package/dist/infrastructure/conversations.d.ts +4 -1
- package/dist/infrastructure/conversations.js +3 -0
- package/dist/infrastructure/conversations.js.map +1 -1
- package/dist/infrastructure/conversations.types.d.ts +1 -0
- package/dist/infrastructure/conversations.types.js.map +1 -1
- package/dist/infrastructure/custom-reporter.d.ts +2 -0
- package/dist/infrastructure/custom-reporter.js +33 -0
- package/dist/infrastructure/custom-reporter.js.map +1 -0
- package/dist/infrastructure/custom-reporter.types.d.ts +13 -0
- package/dist/infrastructure/custom-reporter.types.js +2 -0
- package/dist/infrastructure/custom-reporter.types.js.map +1 -0
- package/dist/infrastructure/git/git.constants.d.ts +1 -1
- package/dist/infrastructure/git/git.constants.js +2 -0
- package/dist/infrastructure/git/git.constants.js.map +1 -1
- package/dist/infrastructure/host-credentials.constants.d.ts +1 -0
- package/dist/infrastructure/host-credentials.constants.js +2 -0
- package/dist/infrastructure/host-credentials.constants.js.map +1 -0
- package/dist/infrastructure/host-credentials.d.ts +4 -0
- package/dist/infrastructure/host-credentials.js +89 -0
- package/dist/infrastructure/host-credentials.js.map +1 -0
- package/dist/infrastructure/inspection-path.js +4 -3
- package/dist/infrastructure/inspection-path.js.map +1 -1
- package/dist/infrastructure/journal.constants.d.ts +1 -0
- package/dist/infrastructure/journal.constants.js +2 -0
- package/dist/infrastructure/journal.constants.js.map +1 -0
- package/dist/infrastructure/journal.js +7 -71
- package/dist/infrastructure/journal.js.map +1 -1
- package/dist/infrastructure/journal.types.d.ts +0 -2
- package/dist/infrastructure/journal.types.js.map +1 -1
- package/dist/infrastructure/local-transport.js +9 -4
- package/dist/infrastructure/local-transport.js.map +1 -1
- package/dist/infrastructure/opentelemetry-dispatch.d.ts +6 -0
- package/dist/infrastructure/opentelemetry-dispatch.js +70 -0
- package/dist/infrastructure/opentelemetry-dispatch.js.map +1 -0
- package/dist/infrastructure/opentelemetry.constants.d.ts +3 -0
- package/dist/infrastructure/opentelemetry.constants.js +3 -0
- package/dist/infrastructure/opentelemetry.constants.js.map +1 -1
- package/dist/infrastructure/opentelemetry.js +4 -0
- package/dist/infrastructure/opentelemetry.js.map +1 -1
- package/dist/infrastructure/opentelemetry.types.d.ts +3 -3
- package/dist/infrastructure/opentelemetry.types.js.map +1 -1
- package/dist/infrastructure/reporter.js +27 -2
- package/dist/infrastructure/reporter.js.map +1 -1
- package/dist/infrastructure/repository-transport.constants.d.ts +1 -0
- package/dist/infrastructure/repository-transport.constants.js +2 -0
- package/dist/infrastructure/repository-transport.constants.js.map +1 -0
- package/dist/infrastructure/repository-transport.d.ts +2 -0
- package/dist/infrastructure/repository-transport.js +9 -0
- package/dist/infrastructure/repository-transport.js.map +1 -0
- package/dist/infrastructure/resource-activity-inspection.js +22 -26
- package/dist/infrastructure/resource-activity-inspection.js.map +1 -1
- package/dist/infrastructure/resource-activity.constants.d.ts +0 -1
- package/dist/infrastructure/resource-activity.constants.js +0 -1
- package/dist/infrastructure/resource-activity.constants.js.map +1 -1
- package/dist/infrastructure/resource-activity.js +22 -85
- package/dist/infrastructure/resource-activity.js.map +1 -1
- package/dist/infrastructure/resource-activity.types.d.ts +2 -2
- package/dist/infrastructure/resource-activity.types.js.map +1 -1
- package/dist/infrastructure/settings.d.ts +1 -1
- package/dist/infrastructure/settings.js +3 -3
- package/dist/infrastructure/settings.js.map +1 -1
- package/dist/infrastructure/sse.d.ts +2 -0
- package/dist/infrastructure/sse.js +64 -0
- package/dist/infrastructure/sse.js.map +1 -0
- package/dist/infrastructure/sse.types.d.ts +4 -0
- package/dist/infrastructure/sse.types.js +2 -0
- package/dist/infrastructure/sse.types.js.map +1 -0
- package/dist/infrastructure/storage-inventory.constants.js +1 -0
- package/dist/infrastructure/storage-inventory.constants.js.map +1 -1
- package/dist/infrastructure/storage-inventory.types.d.ts +1 -1
- package/dist/infrastructure/storage-inventory.types.js.map +1 -1
- package/dist/infrastructure/storage-reservations.types.d.ts +0 -8
- package/dist/infrastructure/storage-reservations.types.js.map +1 -1
- package/dist/infrastructure/transport-conversations.d.ts +2 -2
- package/dist/infrastructure/transport-conversations.js +8 -1
- package/dist/infrastructure/transport-conversations.js.map +1 -1
- package/dist/infrastructure/transport-journal.js +2 -1
- package/dist/infrastructure/transport-journal.js.map +1 -1
- package/dist/infrastructure/transport-reservations.d.ts +1 -1
- package/dist/infrastructure/transport-reservations.js +14 -8
- package/dist/infrastructure/transport-reservations.js.map +1 -1
- package/dist/providers/agents.d.ts +9 -4
- package/dist/providers/agents.js +6 -3
- package/dist/providers/agents.js.map +1 -1
- package/dist/providers/daytona.d.ts +1 -1
- package/dist/providers/daytona.js +1 -1
- package/dist/providers/daytona.js.map +1 -1
- package/dist/providers/docker.d.ts +1 -1
- package/dist/providers/docker.js +1 -1
- package/dist/providers/docker.js.map +1 -1
- package/dist/providers/factories.d.ts +2 -2
- package/dist/providers/factories.js +3 -3
- package/dist/providers/factories.js.map +1 -1
- package/dist/providers/firecracker.d.ts +1 -1
- package/dist/providers/firecracker.js +1 -1
- package/dist/providers/firecracker.js.map +1 -1
- package/dist/providers/local.d.ts +1 -1
- package/dist/providers/local.js +1 -1
- package/dist/providers/local.js.map +1 -1
- package/dist/providers/podman.d.ts +1 -1
- package/dist/providers/podman.js +1 -1
- package/dist/providers/podman.js.map +1 -1
- package/dist/providers/vercel.d.ts +1 -1
- package/dist/providers/vercel.js +1 -1
- package/dist/providers/vercel.js.map +1 -1
- package/dist/providers/versions.constants.d.ts +3 -1
- package/dist/providers/versions.constants.js +3 -1
- package/dist/providers/versions.constants.js.map +1 -1
- package/package.json +3 -3
- package/dist/adapters/agents/gemini-adapter.d.ts +0 -3
- package/dist/adapters/agents/gemini-adapter.js +0 -15
- package/dist/adapters/agents/gemini-adapter.js.map +0 -1
- package/dist/adapters/agents/gemini-diagnostics.d.ts +0 -2
- package/dist/adapters/agents/gemini-diagnostics.js +0 -15
- package/dist/adapters/agents/gemini-diagnostics.js.map +0 -1
- package/dist/adapters/agents/gemini-events.d.ts +0 -2
- package/dist/adapters/agents/gemini-events.js +0 -50
- package/dist/adapters/agents/gemini-events.js.map +0 -1
- package/dist/adapters/agents/gemini-request.d.ts +0 -4
- package/dist/adapters/agents/gemini-request.js +0 -23
- package/dist/adapters/agents/gemini-request.js.map +0 -1
- package/dist/adapters/agents/gemini.types.d.ts +0 -6
- package/dist/adapters/agents/gemini.types.js +0 -2
- package/dist/adapters/agents/gemini.types.js.map +0 -1
- package/dist/adapters/models/openai-compatible.constants.js.map +0 -1
- package/dist/adapters/models/openai-compatible.d.ts +0 -3
- package/dist/adapters/models/openai-compatible.js +0 -78
- package/dist/adapters/models/openai-compatible.js.map +0 -1
- package/dist/adapters/models/openai-compatible.types.d.ts +0 -14
- package/dist/adapters/models/openai-compatible.types.js +0 -2
- package/dist/adapters/models/openai-compatible.types.js.map +0 -1
- package/dist/adapters/models/openai-http.js.map +0 -1
- package/dist/adapters/models/openai-request.d.ts +0 -4
- package/dist/adapters/models/openai-request.js +0 -46
- package/dist/adapters/models/openai-request.js.map +0 -1
- package/dist/adapters/models/openai-response.d.ts +0 -3
- package/dist/adapters/models/openai-response.js +0 -65
- package/dist/adapters/models/openai-response.js.map +0 -1
- package/dist/cli/init-authentication.constants.d.ts +0 -13
- package/dist/cli/init-authentication.constants.js +0 -10
- package/dist/cli/init-authentication.constants.js.map +0 -1
- package/dist/infrastructure/artifact-store.d.ts +0 -3
- package/dist/infrastructure/artifact-store.js +0 -110
- package/dist/infrastructure/artifact-store.js.map +0 -1
- package/dist/infrastructure/artifact-store.types.d.ts +0 -6
- package/dist/infrastructure/artifact-store.types.js +0 -2
- package/dist/infrastructure/artifact-store.types.js.map +0 -1
- package/dist/infrastructure/journal-retention.constants.d.ts +0 -4
- package/dist/infrastructure/journal-retention.constants.js +0 -5
- package/dist/infrastructure/journal-retention.constants.js.map +0 -1
- package/dist/infrastructure/journal-retention.d.ts +0 -2
- package/dist/infrastructure/journal-retention.js +0 -51
- package/dist/infrastructure/journal-retention.js.map +0 -1
- package/dist/infrastructure/storage-mutation-lock.constants.d.ts +0 -5
- package/dist/infrastructure/storage-mutation-lock.constants.js +0 -6
- package/dist/infrastructure/storage-mutation-lock.constants.js.map +0 -1
- package/dist/infrastructure/storage-mutation-lock.d.ts +0 -1
- package/dist/infrastructure/storage-mutation-lock.js +0 -21
- package/dist/infrastructure/storage-mutation-lock.js.map +0 -1
- package/dist/infrastructure/storage-reservations.constants.d.ts +0 -4
- package/dist/infrastructure/storage-reservations.constants.js +0 -5
- package/dist/infrastructure/storage-reservations.constants.js.map +0 -1
- package/dist/infrastructure/storage-reservations.d.ts +0 -2
- package/dist/infrastructure/storage-reservations.js +0 -150
- package/dist/infrastructure/storage-reservations.js.map +0 -1
- package/dist/infrastructure/workflow-checkpoint.d.ts +0 -3
- package/dist/infrastructure/workflow-checkpoint.js +0 -84
- package/dist/infrastructure/workflow-checkpoint.js.map +0 -1
- package/dist/infrastructure/workflow-checkpoint.types.d.ts +0 -6
- package/dist/infrastructure/workflow-checkpoint.types.js +0 -2
- package/dist/infrastructure/workflow-checkpoint.types.js.map +0 -1
- /package/dist/adapters/models/{openai-http.d.ts → model-http.d.ts} +0 -0
- /package/dist/adapters/models/{openai-compatible.constants.d.ts → model.constants.d.ts} +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { OutpostError } from "../domain/errors.js";
|
|
2
|
+
import { TOOL_PREVIEW_CHARACTERS, TOOL_RESULT_CHARACTERS, } from "../domain/harness.constants.js";
|
|
3
|
+
import { afterTool, beforeTool } from "./harness-hooks.js";
|
|
4
|
+
const toolEvents = new Set(["text", "warning", "raw"]);
|
|
5
|
+
export async function executeToolCalls(runtime, calls, step, loaded) {
|
|
6
|
+
const tools = new Map(runtime.tools.map((tool) => [tool.name, tool]));
|
|
7
|
+
const owners = new Map(runtime.agent.harness.skills.flatMap((skill) => skill.tools.map((tool) => [tool.name, skill.name])));
|
|
8
|
+
const locked = (name) => {
|
|
9
|
+
const skill = owners.get(name);
|
|
10
|
+
return skill === undefined || loaded.has(skill) ? undefined : skill;
|
|
11
|
+
};
|
|
12
|
+
const prepared = [];
|
|
13
|
+
for (const call of calls)
|
|
14
|
+
prepared.push(await prepareCall(runtime, tools, call, step, locked));
|
|
15
|
+
const outcomes = new Map();
|
|
16
|
+
for (const batch of batches(prepared)) {
|
|
17
|
+
const pending = [...batch.calls];
|
|
18
|
+
const limit = batch.concurrent
|
|
19
|
+
? runtime.agent.harness.toolExecution.concurrency
|
|
20
|
+
: 1;
|
|
21
|
+
await Promise.all(Array.from({ length: Math.min(limit, pending.length) }, async () => {
|
|
22
|
+
for (let next = pending.shift(); next; next = pending.shift())
|
|
23
|
+
outcomes.set(next.call.id, await executeCall(runtime, next));
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
const results = [];
|
|
27
|
+
for (const { call, outcome } of prepared)
|
|
28
|
+
results.push(await finish(runtime, call, outcome ?? outcomes.get(call.id), step));
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
async function prepareCall(runtime, tools, call, step, locked) {
|
|
32
|
+
runtime.signal.throwIfAborted();
|
|
33
|
+
runtime.emit({
|
|
34
|
+
kind: "tool",
|
|
35
|
+
name: call.name,
|
|
36
|
+
input: call.input,
|
|
37
|
+
callId: call.id,
|
|
38
|
+
});
|
|
39
|
+
const tool = tools.get(call.name);
|
|
40
|
+
if (!tool)
|
|
41
|
+
return { call, outcome: failed(`Unknown tool: ${call.name}`) };
|
|
42
|
+
const validated = await validate(tool, call.input, "Invalid input");
|
|
43
|
+
if ("outcome" in validated)
|
|
44
|
+
return { call, outcome: validated.outcome };
|
|
45
|
+
const skill = locked(tool.name);
|
|
46
|
+
if (skill)
|
|
47
|
+
return denied(runtime, call, `Load the ${skill} skill with load_skill before using ${tool.name}`);
|
|
48
|
+
const permitted = permission(runtime, tool, validated.value);
|
|
49
|
+
if (permitted)
|
|
50
|
+
return denied(runtime, call, permitted);
|
|
51
|
+
const decision = await beforeTool(runtime, { ...call, input: validated.value }, step);
|
|
52
|
+
if ("deny" in decision)
|
|
53
|
+
return denied(runtime, call, decision.deny);
|
|
54
|
+
if (decision.input === validated.value)
|
|
55
|
+
return { call, tool, input: validated.value };
|
|
56
|
+
const revised = await validate(tool, decision.input, "Hook produced invalid input");
|
|
57
|
+
if ("outcome" in revised)
|
|
58
|
+
return { call, outcome: revised.outcome };
|
|
59
|
+
const revisedPermission = permission(runtime, tool, revised.value);
|
|
60
|
+
if (revisedPermission)
|
|
61
|
+
return denied(runtime, call, revisedPermission);
|
|
62
|
+
return { call, tool, input: revised.value };
|
|
63
|
+
}
|
|
64
|
+
async function validate(tool, input, label) {
|
|
65
|
+
const validation = await tool.validate(input);
|
|
66
|
+
if ("issues" in validation)
|
|
67
|
+
return {
|
|
68
|
+
outcome: failed(`${label} for ${tool.name}: ${validation.issues}`),
|
|
69
|
+
};
|
|
70
|
+
return { value: validation.value };
|
|
71
|
+
}
|
|
72
|
+
function permission(runtime, tool, input) {
|
|
73
|
+
const permissions = runtime.agent.harness.permissions;
|
|
74
|
+
if (!permissions)
|
|
75
|
+
return undefined;
|
|
76
|
+
const decision = permissions.evaluate(tool.name, tool.resources(input));
|
|
77
|
+
return decision.allowed ? undefined : decision.reason;
|
|
78
|
+
}
|
|
79
|
+
function denied(runtime, call, reason) {
|
|
80
|
+
runtime.emit({
|
|
81
|
+
kind: "tool-denied",
|
|
82
|
+
callId: call.id,
|
|
83
|
+
name: call.name,
|
|
84
|
+
reason,
|
|
85
|
+
});
|
|
86
|
+
return { call, outcome: failed(`Denied: ${reason}`) };
|
|
87
|
+
}
|
|
88
|
+
async function finish(runtime, call, outcome, step) {
|
|
89
|
+
const final = await afterTool(runtime, call, outcome, step, normalized);
|
|
90
|
+
const content = final.content.length > TOOL_RESULT_CHARACTERS
|
|
91
|
+
? `${final.content.slice(0, TOOL_RESULT_CHARACTERS)}\n[truncated ${final.content.length - TOOL_RESULT_CHARACTERS} characters]`
|
|
92
|
+
: final.content;
|
|
93
|
+
runtime.emit({
|
|
94
|
+
kind: "tool-result",
|
|
95
|
+
callId: call.id,
|
|
96
|
+
name: call.name,
|
|
97
|
+
isError: final.isError,
|
|
98
|
+
preview: content.slice(0, TOOL_PREVIEW_CHARACTERS),
|
|
99
|
+
characters: final.content.length,
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
type: "tool-result",
|
|
103
|
+
callId: call.id,
|
|
104
|
+
content,
|
|
105
|
+
...(final.isError ? { isError: true } : {}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function batches(calls) {
|
|
109
|
+
const grouped = [];
|
|
110
|
+
for (const prepared of calls) {
|
|
111
|
+
if (prepared.outcome)
|
|
112
|
+
continue;
|
|
113
|
+
const concurrent = prepared.tool.readOnly;
|
|
114
|
+
const last = grouped.at(-1);
|
|
115
|
+
if (last?.concurrent && concurrent) {
|
|
116
|
+
grouped[grouped.length - 1] = {
|
|
117
|
+
concurrent,
|
|
118
|
+
calls: [...last.calls, prepared],
|
|
119
|
+
};
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
grouped.push({ concurrent, calls: [prepared] });
|
|
123
|
+
}
|
|
124
|
+
return grouped;
|
|
125
|
+
}
|
|
126
|
+
async function executeCall(runtime, prepared) {
|
|
127
|
+
try {
|
|
128
|
+
return normalized(await runTool(runtime, prepared));
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
runtime.signal.throwIfAborted();
|
|
132
|
+
if (runtime.agent.harness.toolExecution.onError === "fail")
|
|
133
|
+
throw error;
|
|
134
|
+
return failed(error instanceof Error ? error.message : String(error));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function runTool(runtime, { call, tool, input }) {
|
|
138
|
+
const { deadlineMs } = runtime.agent.harness.toolExecution;
|
|
139
|
+
const controller = new AbortController();
|
|
140
|
+
const signal = AbortSignal.any([runtime.signal, controller.signal]);
|
|
141
|
+
const timer = setTimeout(() => controller.abort(new OutpostError("timeout", `Tool ${call.name} timed out after ${deadlineMs} ms`)), deadlineMs);
|
|
142
|
+
const release = runtime.hold();
|
|
143
|
+
const aborted = new Promise((_, reject) => {
|
|
144
|
+
const fail = () => reject(signal.reason);
|
|
145
|
+
if (signal.aborted)
|
|
146
|
+
fail();
|
|
147
|
+
signal.addEventListener("abort", fail, { once: true });
|
|
148
|
+
});
|
|
149
|
+
const execution = Promise.resolve().then(() => tool.execute(input, {
|
|
150
|
+
sandbox: scopedLease(runtime.sandbox, signal),
|
|
151
|
+
signal,
|
|
152
|
+
callId: call.id,
|
|
153
|
+
model: runtime.agent.model,
|
|
154
|
+
observe(event) {
|
|
155
|
+
signal.throwIfAborted();
|
|
156
|
+
if (!toolEvents.has(event?.kind))
|
|
157
|
+
throw new OutpostError("configuration", "Tools may only report text, warning or raw events");
|
|
158
|
+
runtime.emit(event);
|
|
159
|
+
},
|
|
160
|
+
}));
|
|
161
|
+
execution.catch(() => undefined);
|
|
162
|
+
aborted.catch(() => undefined);
|
|
163
|
+
try {
|
|
164
|
+
return await Promise.race([execution, aborted]);
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
clearTimeout(timer);
|
|
168
|
+
controller.abort(new OutpostError("aborted", "Tool call ended"));
|
|
169
|
+
release();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function scopedLease(lease, signal) {
|
|
173
|
+
const combine = (own) => own ? AbortSignal.any([own, signal]) : signal;
|
|
174
|
+
return {
|
|
175
|
+
root: lease.root,
|
|
176
|
+
home: lease.home,
|
|
177
|
+
invoke: (command) => {
|
|
178
|
+
signal.throwIfAborted();
|
|
179
|
+
return lease.invoke({ ...command, signal: combine(command.signal) });
|
|
180
|
+
},
|
|
181
|
+
upload: (source, destination, settings = {}) => {
|
|
182
|
+
signal.throwIfAborted();
|
|
183
|
+
return lease.upload(source, destination, {
|
|
184
|
+
...settings,
|
|
185
|
+
signal: combine(settings.signal),
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
download: (source, destination, settings = {}) => {
|
|
189
|
+
signal.throwIfAborted();
|
|
190
|
+
return lease.download(source, destination, {
|
|
191
|
+
...settings,
|
|
192
|
+
signal: combine(settings.signal),
|
|
193
|
+
});
|
|
194
|
+
},
|
|
195
|
+
release: () => lease.release(),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function normalized(output) {
|
|
199
|
+
if (typeof output === "string")
|
|
200
|
+
return { content: output, isError: false };
|
|
201
|
+
if (output === null ||
|
|
202
|
+
typeof output !== "object" ||
|
|
203
|
+
typeof output.content !== "string" ||
|
|
204
|
+
(output.isError !== undefined && typeof output.isError !== "boolean"))
|
|
205
|
+
throw new OutpostError("configuration", "Tools must return text or { content, isError }");
|
|
206
|
+
return { content: output.content, isError: output.isError ?? false };
|
|
207
|
+
}
|
|
208
|
+
function failed(message) {
|
|
209
|
+
return { content: message, isError: true };
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=tool-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../src/application/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { OutpostError } from \"../domain/errors.ts\";\nimport {\n TOOL_PREVIEW_CHARACTERS,\n TOOL_RESULT_CHARACTERS,\n} from \"../domain/harness.constants.ts\";\nimport type {\n ModelToolCallBlock,\n ModelToolResultBlock,\n} from \"../domain/model.types.ts\";\nimport type { SandboxLease } from \"../domain/sandbox.types.ts\";\nimport type {\n HarnessTool,\n HarnessToolEvent,\n ToolOutput,\n} from \"../domain/tool.types.ts\";\nimport { afterTool, beforeTool } from \"./harness-hooks.ts\";\nimport type {\n HarnessRuntime,\n PreparedCall,\n ToolCallBatch,\n ToolOutcome,\n ValidatedInput,\n} from \"./harness.types.ts\";\n\nconst toolEvents: ReadonlySet<string> = new Set([\"text\", \"warning\", \"raw\"]);\n\nexport async function executeToolCalls(\n runtime: HarnessRuntime,\n calls: readonly ModelToolCallBlock[],\n step: number,\n loaded: ReadonlySet<string>,\n): Promise<readonly ModelToolResultBlock[]> {\n const tools = new Map(runtime.tools.map((tool) => [tool.name, tool]));\n const owners = new Map(\n runtime.agent.harness.skills.flatMap((skill) =>\n skill.tools.map((tool) => [tool.name, skill.name] as const),\n ),\n );\n const locked = (name: string) => {\n const skill = owners.get(name);\n return skill === undefined || loaded.has(skill) ? undefined : skill;\n };\n const prepared: PreparedCall[] = [];\n for (const call of calls)\n prepared.push(await prepareCall(runtime, tools, call, step, locked));\n const outcomes = new Map<string, ToolOutcome>();\n for (const batch of batches(prepared)) {\n const pending = [...batch.calls];\n const limit = batch.concurrent\n ? runtime.agent.harness.toolExecution.concurrency\n : 1;\n await Promise.all(\n Array.from({ length: Math.min(limit, pending.length) }, async () => {\n for (let next = pending.shift(); next; next = pending.shift())\n outcomes.set(next.call.id, await executeCall(runtime, next));\n }),\n );\n }\n const results: ModelToolResultBlock[] = [];\n for (const { call, outcome } of prepared)\n results.push(\n await finish(runtime, call, outcome ?? outcomes.get(call.id)!, step),\n );\n return results;\n}\n\nasync function prepareCall(\n runtime: HarnessRuntime,\n tools: ReadonlyMap<string, HarnessTool>,\n call: ModelToolCallBlock,\n step: number,\n locked: (name: string) => string | undefined,\n): Promise<PreparedCall> {\n runtime.signal.throwIfAborted();\n runtime.emit({\n kind: \"tool\",\n name: call.name,\n input: call.input,\n callId: call.id,\n });\n const tool = tools.get(call.name);\n if (!tool) return { call, outcome: failed(`Unknown tool: ${call.name}`) };\n const validated = await validate(tool, call.input, \"Invalid input\");\n if (\"outcome\" in validated) return { call, outcome: validated.outcome };\n const skill = locked(tool.name);\n if (skill)\n return denied(\n runtime,\n call,\n `Load the ${skill} skill with load_skill before using ${tool.name}`,\n );\n const permitted = permission(runtime, tool, validated.value);\n if (permitted) return denied(runtime, call, permitted);\n const decision = await beforeTool(\n runtime,\n { ...call, input: validated.value },\n step,\n );\n if (\"deny\" in decision) return denied(runtime, call, decision.deny);\n if (decision.input === validated.value)\n return { call, tool, input: validated.value };\n const revised = await validate(\n tool,\n decision.input,\n \"Hook produced invalid input\",\n );\n if (\"outcome\" in revised) return { call, outcome: revised.outcome };\n const revisedPermission = permission(runtime, tool, revised.value);\n if (revisedPermission) return denied(runtime, call, revisedPermission);\n return { call, tool, input: revised.value };\n}\n\nasync function validate(\n tool: HarnessTool,\n input: unknown,\n label: string,\n): Promise<ValidatedInput> {\n const validation = await tool.validate(input);\n if (\"issues\" in validation)\n return {\n outcome: failed(`${label} for ${tool.name}: ${validation.issues}`),\n };\n return { value: validation.value };\n}\n\nfunction permission(\n runtime: HarnessRuntime,\n tool: HarnessTool,\n input: unknown,\n): string | undefined {\n const permissions = runtime.agent.harness.permissions;\n if (!permissions) return undefined;\n const decision = permissions.evaluate(tool.name, tool.resources(input));\n return decision.allowed ? undefined : decision.reason;\n}\n\nfunction denied(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n reason: string,\n): PreparedCall {\n runtime.emit({\n kind: \"tool-denied\",\n callId: call.id,\n name: call.name,\n reason,\n });\n return { call, outcome: failed(`Denied: ${reason}`) };\n}\n\nasync function finish(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n outcome: ToolOutcome,\n step: number,\n): Promise<ModelToolResultBlock> {\n const final = await afterTool(runtime, call, outcome, step, normalized);\n const content =\n final.content.length > TOOL_RESULT_CHARACTERS\n ? `${final.content.slice(0, TOOL_RESULT_CHARACTERS)}\\n[truncated ${final.content.length - TOOL_RESULT_CHARACTERS} characters]`\n : final.content;\n runtime.emit({\n kind: \"tool-result\",\n callId: call.id,\n name: call.name,\n isError: final.isError,\n preview: content.slice(0, TOOL_PREVIEW_CHARACTERS),\n characters: final.content.length,\n });\n return {\n type: \"tool-result\",\n callId: call.id,\n content,\n ...(final.isError ? { isError: true } : {}),\n };\n}\n\nfunction batches(calls: readonly PreparedCall[]): readonly ToolCallBatch[] {\n const grouped: ToolCallBatch[] = [];\n for (const prepared of calls) {\n if (prepared.outcome) continue;\n const concurrent = prepared.tool!.readOnly;\n const last = grouped.at(-1);\n if (last?.concurrent && concurrent) {\n grouped[grouped.length - 1] = {\n concurrent,\n calls: [...last.calls, prepared],\n };\n continue;\n }\n grouped.push({ concurrent, calls: [prepared] });\n }\n return grouped;\n}\n\nasync function executeCall(\n runtime: HarnessRuntime,\n prepared: PreparedCall,\n): Promise<ToolOutcome> {\n try {\n return normalized(await runTool(runtime, prepared));\n } catch (error) {\n runtime.signal.throwIfAborted();\n if (runtime.agent.harness.toolExecution.onError === \"fail\") throw error;\n return failed(error instanceof Error ? error.message : String(error));\n }\n}\n\nasync function runTool(\n runtime: HarnessRuntime,\n { call, tool, input }: PreparedCall,\n): Promise<ToolOutput> {\n const { deadlineMs } = runtime.agent.harness.toolExecution;\n const controller = new AbortController();\n const signal = AbortSignal.any([runtime.signal, controller.signal]);\n const timer = setTimeout(\n () =>\n controller.abort(\n new OutpostError(\n \"timeout\",\n `Tool ${call.name} timed out after ${deadlineMs} ms`,\n ),\n ),\n deadlineMs,\n );\n const release = runtime.hold();\n const aborted = new Promise<never>((_, reject) => {\n const fail = () => reject(signal.reason);\n if (signal.aborted) fail();\n signal.addEventListener(\"abort\", fail, { once: true });\n });\n const execution = Promise.resolve().then(() =>\n tool!.execute(input, {\n sandbox: scopedLease(runtime.sandbox, signal),\n signal,\n callId: call.id,\n model: runtime.agent.model,\n observe(event: HarnessToolEvent) {\n signal.throwIfAborted();\n if (!toolEvents.has(event?.kind))\n throw new OutpostError(\n \"configuration\",\n \"Tools may only report text, warning or raw events\",\n );\n runtime.emit(event);\n },\n }),\n );\n execution.catch(() => undefined);\n aborted.catch(() => undefined);\n try {\n return await Promise.race([execution, aborted]);\n } finally {\n clearTimeout(timer);\n controller.abort(new OutpostError(\"aborted\", \"Tool call ended\"));\n release();\n }\n}\n\nfunction scopedLease(lease: SandboxLease, signal: AbortSignal): SandboxLease {\n const combine = (own?: AbortSignal) =>\n own ? AbortSignal.any([own, signal]) : signal;\n return {\n root: lease.root,\n home: lease.home,\n invoke: (command) => {\n signal.throwIfAborted();\n return lease.invoke({ ...command, signal: combine(command.signal) });\n },\n upload: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.upload(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n download: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.download(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n release: () => lease.release(),\n };\n}\n\nfunction normalized(output: ToolOutput): ToolOutcome {\n if (typeof output === \"string\") return { content: output, isError: false };\n if (\n output === null ||\n typeof output !== \"object\" ||\n typeof output.content !== \"string\" ||\n (output.isError !== undefined && typeof output.isError !== \"boolean\")\n )\n throw new OutpostError(\n \"configuration\",\n \"Tools must return text or { content, isError }\",\n );\n return { content: output.content, isError: output.isError ?? false };\n}\n\nfunction failed(message: string): ToolOutcome {\n return { content: message, isError: true };\n}\n"]}
|
package/dist/cli/commands.js
CHANGED
|
@@ -28,7 +28,7 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
28
28
|
for (const key of definition.options) {
|
|
29
29
|
const configuration = cliOptions[key];
|
|
30
30
|
const short = "short" in configuration ? `-${configuration.short}, ` : "";
|
|
31
|
-
command.addOption(new Option(`${short}--${key}${configuration.type === "string" ? " <value>" : ""}`, configuration.description));
|
|
31
|
+
command.addOption(new Option(`${short}--${key === "sandboxProvider" ? "sandbox-provider" : key}${configuration.type === "string" ? " <value>" : ""}`, configuration.description));
|
|
32
32
|
}
|
|
33
33
|
if (name === "init")
|
|
34
34
|
command.addOption(new Option("--no-build", "Skip automatic container image build").default(undefined));
|
|
@@ -38,7 +38,9 @@ export async function runCli(args = process.argv.slice(2)) {
|
|
|
38
38
|
for (const option of command.options) {
|
|
39
39
|
const value = parsed[option.attributeName()];
|
|
40
40
|
if (typeof value === "string" || typeof value === "boolean")
|
|
41
|
-
values[option.long
|
|
41
|
+
values[option.long === "--sandbox-provider"
|
|
42
|
+
? "sandboxProvider"
|
|
43
|
+
: option.long.replace(/^--(?:no-)?/, "")] = value;
|
|
42
44
|
}
|
|
43
45
|
await handlers[path[0]]({
|
|
44
46
|
values: values,
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA0B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,YAAY,EAAE;SACd,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAyC;QACrD,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,eAAe;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;oBACrD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,SAAS,CACf,IAAI,MAAM,CACR,GAAG,KAAK,KAAK,GAAG,GAAG,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command, CommanderError, Option } from \"commander\";\nimport { recoveryCommand } from \"./recovery-command.ts\";\nimport { doctorCommand } from \"./doctor-command.ts\";\nimport { imageCommand } from \"./image-command.ts\";\nimport { initializeCommand } from \"./init-command.ts\";\nimport { cliOptions, commandOptions } from \"./main.constants.ts\";\nimport type { CliCommand, CliValues } from \"./main.types.ts\";\n\nexport async function runCli(\n args: readonly string[] = process.argv.slice(2),\n): Promise<void> {\n const program = new Command()\n .name(\"outpost\")\n .description(\"Outpost — sandboxed coding agents and workflows\")\n .exitOverride()\n .configureOutput({ writeErr: () => {} });\n const handlers: Readonly<Record<string, CliCommand>> = {\n init: initializeCommand,\n doctor: doctorCommand,\n image: imageCommand,\n recovery: recoveryCommand,\n };\n for (const [name, definition] of Object.entries(commandOptions)) {\n const path = name.split(\" \");\n let command = program;\n for (const part of path) {\n command =\n command.commands.find((item) => item.name() === part) ??\n command.command(part);\n }\n command.description(definition.description);\n for (const key of definition.options) {\n const configuration = cliOptions[key];\n const short = \"short\" in configuration ? `-${configuration.short}, ` : \"\";\n command.addOption(\n new Option(\n `${short}--${key === \"sandboxProvider\" ? \"sandbox-provider\" : key}${configuration.type === \"string\" ? \" <value>\" : \"\"}`,\n configuration.description,\n ),\n );\n }\n if (name === \"init\")\n command.addOption(\n new Option(\n \"--no-build\",\n \"Skip automatic container image build\",\n ).default(undefined),\n );\n command.action(async () => {\n const values: Record<string, string | boolean> = {};\n const parsed = command.opts<Record<string, unknown>>();\n for (const option of command.options) {\n const value = parsed[option.attributeName()];\n if (typeof value === \"string\" || typeof value === \"boolean\")\n values[\n option.long === \"--sandbox-provider\"\n ? \"sandboxProvider\"\n : option.long!.replace(/^--(?:no-)?/, \"\")\n ] = value;\n }\n await handlers[path[0]!]!({\n values: values as CliValues,\n positionals: path,\n });\n });\n }\n for (const command of program.commands.filter(\n (item) => item.commands.length,\n )) {\n command.allowExcessArguments().action(() => {\n throw new Error(`Unknown command. Run outpost ${command.name()} --help.`);\n });\n }\n try {\n await program.parseAsync(args.length ? [...args] : [\"--help\"], {\n from: \"user\",\n });\n } catch (error) {\n if (error instanceof CommanderError && error.exitCode === 0) return;\n throw error;\n }\n}\n"]}
|
|
@@ -1,28 +1,32 @@
|
|
|
1
|
+
import { doctorAgents } from "../application/doctor-agent.constants.js";
|
|
1
2
|
import { doctorDefaults, providerDiagnostics, } from "../application/doctor.constants.js";
|
|
2
3
|
import { diagnose } from "../application/doctor.js";
|
|
3
4
|
import { invariant } from "../domain/errors.js";
|
|
4
5
|
function isProvider(value) {
|
|
5
6
|
return Object.hasOwn(providerDiagnostics, value);
|
|
6
7
|
}
|
|
8
|
+
function isAgent(value) {
|
|
9
|
+
return Object.hasOwn(doctorAgents, value);
|
|
10
|
+
}
|
|
7
11
|
export async function doctorCommand({ values, positionals }, execute, write = (text) => {
|
|
8
12
|
process.stdout.write(text);
|
|
9
13
|
}) {
|
|
10
|
-
invariant(positionals.length === 1, "Usage: outpost doctor [--provider NAME] [--agent NAME] [--image NAME] [--json]");
|
|
14
|
+
invariant(positionals.length === 1, "Usage: outpost doctor [--sandbox-provider NAME] [--agent NAME] [--image NAME] [--json]");
|
|
11
15
|
for (const key of Object.keys(values))
|
|
12
|
-
invariant(["
|
|
13
|
-
const
|
|
16
|
+
invariant(["sandboxProvider", "agent", "image", "json"].includes(key), `Unsupported doctor option: --${key}`);
|
|
17
|
+
const sandboxProvider = values.sandboxProvider ?? doctorDefaults.sandboxProvider;
|
|
14
18
|
const agent = values.agent ?? doctorDefaults.agent;
|
|
15
|
-
invariant(isProvider(
|
|
16
|
-
invariant(agent
|
|
19
|
+
invariant(isProvider(sandboxProvider), "Unknown provider. Choose docker, podman, local, vercel or daytona.");
|
|
20
|
+
invariant(isAgent(agent), `Unknown agent. Choose ${Object.keys(doctorAgents).join(", ")}.`);
|
|
17
21
|
const report = await diagnose({
|
|
18
|
-
|
|
22
|
+
sandboxProvider,
|
|
19
23
|
agent,
|
|
20
24
|
...(values.image !== undefined ? { image: values.image } : {}),
|
|
21
25
|
}, execute);
|
|
22
26
|
if (values.json)
|
|
23
27
|
write(`${JSON.stringify(report, null, 2)}\n`);
|
|
24
28
|
else {
|
|
25
|
-
write(`Outpost doctor — ${report.scope === "host" ? "host checks" : "host and image checks"} (${
|
|
29
|
+
write(`Outpost doctor — ${report.scope === "host" ? "host checks" : "host and image checks"} (${sandboxProvider}, ${agent})\n`);
|
|
26
30
|
write(`Provider contract: ${report.placement}; interactive terminal: ${report.interactiveTerminal ? "supported" : "unsupported"}. Workflow execution is not tested.\n`);
|
|
27
31
|
if (report.image)
|
|
28
32
|
write(`Image: ${report.image}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"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","sourcesContent":["import { doctorAgents } from \"../application/doctor-agent.constants.ts\";\nimport {\n doctorDefaults,\n providerDiagnostics,\n} from \"../application/doctor.constants.ts\";\nimport { diagnose } from \"../application/doctor.ts\";\nimport type {\n DoctorAgent,\n DoctorProvider,\n} from \"../application/doctor.types.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport type { Executor } from \"../infrastructure/process.types.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\n\nfunction isProvider(value: string): value is DoctorProvider {\n return Object.hasOwn(providerDiagnostics, value);\n}\nfunction isAgent(value: string): value is DoctorAgent {\n return Object.hasOwn(doctorAgents, value);\n}\nexport async function doctorCommand(\n { values, positionals }: CliInvocation,\n execute?: Executor,\n write: (text: string) => void = (text) => {\n process.stdout.write(text);\n },\n): Promise<void> {\n invariant(\n positionals.length === 1,\n \"Usage: outpost doctor [--sandbox-provider NAME] [--agent NAME] [--image NAME] [--json]\",\n );\n for (const key of Object.keys(values))\n invariant(\n [\"sandboxProvider\", \"agent\", \"image\", \"json\"].includes(key),\n `Unsupported doctor option: --${key}`,\n );\n const sandboxProvider =\n values.sandboxProvider ?? doctorDefaults.sandboxProvider;\n const agent = values.agent ?? doctorDefaults.agent;\n invariant(\n isProvider(sandboxProvider),\n \"Unknown provider. Choose docker, podman, local, vercel or daytona.\",\n );\n invariant(\n isAgent(agent),\n `Unknown agent. Choose ${Object.keys(doctorAgents).join(\", \")}.`,\n );\n const report = await diagnose(\n {\n sandboxProvider,\n agent,\n ...(values.image !== undefined ? { image: values.image } : {}),\n },\n execute,\n );\n if (values.json) write(`${JSON.stringify(report, null, 2)}\\n`);\n else {\n write(\n `Outpost doctor — ${report.scope === \"host\" ? \"host checks\" : \"host and image checks\"} (${sandboxProvider}, ${agent})\\n`,\n );\n write(\n `Provider contract: ${report.placement}; interactive terminal: ${report.interactiveTerminal ? \"supported\" : \"unsupported\"}. Workflow execution is not tested.\\n`,\n );\n if (report.image) write(`Image: ${report.image}\\n`);\n for (const check of report.checks)\n write(\n `[${check.status.toUpperCase()}] ${check.id}${check.version ? ` ${check.version}` : \"\"}${check.referenceVersion ? ` (pinned: ${check.referenceVersion})` : \"\"}: ${check.message}\\n`,\n );\n write(\n report.hasFailures\n ? \"Diagnostic checks found failures.\\n\"\n : \"No blocking check failed; warnings and skipped checks still need review.\\n\",\n );\n }\n if (report.hasFailures) process.exitCode = 1;\n}\n"]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentAuthentication } from "../domain/agent.types.ts";
|
|
2
|
+
import type { AuthenticationChoice, InitOptions } from "./scaffold.types.ts";
|
|
3
|
+
export declare function authenticationChoice(options: InitOptions): AuthenticationChoice;
|
|
2
4
|
export declare function authenticationEnvironment(options: InitOptions): string;
|
|
3
5
|
export declare function authenticationInstructions(options: InitOptions): string;
|
|
6
|
+
export declare function authenticationSetting(options: InitOptions): AgentAuthentication;
|
|
4
7
|
export declare function authenticationSource(options: InitOptions): string;
|
|
@@ -1,43 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { invariant } from "../domain/errors.js";
|
|
2
|
+
import { authenticationChoices } from "./main.constants.js";
|
|
3
|
+
export function authenticationChoice(options) {
|
|
4
|
+
const agent = options.agent ?? "codex";
|
|
5
|
+
const value = options.authentication ?? (options.baseUrl ? "usage" : "account");
|
|
6
|
+
const choices = Object.hasOwn(authenticationChoices, agent)
|
|
7
|
+
? authenticationChoices[agent]
|
|
8
|
+
: [];
|
|
9
|
+
const choice = choices.find((candidate) => candidate.value === value);
|
|
10
|
+
invariant(choice, `Authentication for ${agent} must be ${choices.map((candidate) => candidate.value).join(", ") || "one of its supported forms"}`);
|
|
11
|
+
return choice;
|
|
12
|
+
}
|
|
2
13
|
export function authenticationEnvironment(options) {
|
|
3
14
|
if (options.baseUrl)
|
|
4
15
|
return `${options.apiKeyEnvironment ?? "OPENAI_API_KEY"}=\n`;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (options.authentication === "oauth-token")
|
|
8
|
-
return "CLAUDE_CODE_OAUTH_TOKEN=\n";
|
|
9
|
-
return authenticationRecipes[options.agent ?? "codex"].environment;
|
|
16
|
+
const { variable } = authenticationChoice(options);
|
|
17
|
+
return variable ? `${variable}=\n` : "";
|
|
10
18
|
}
|
|
11
19
|
export function authenticationInstructions(options) {
|
|
12
|
-
if (options.
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
if (options.baseUrl)
|
|
21
|
+
return `Set ${options.apiKeyEnvironment ?? "OPENAI_API_KEY"} in the workflow .env or parent environment for the custom Responses provider.`;
|
|
22
|
+
return authenticationChoice(options).instructions;
|
|
23
|
+
}
|
|
24
|
+
export function authenticationSetting(options) {
|
|
25
|
+
const { value, variable } = authenticationChoice(options);
|
|
26
|
+
if (value !== "account-token")
|
|
27
|
+
return value;
|
|
28
|
+
invariant(variable, "Account tokens require a declared variable");
|
|
29
|
+
return { account: { variable } };
|
|
19
30
|
}
|
|
20
31
|
export function authenticationSource(options) {
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return `const seed = await readFile(resolve(process.env.CODEX_HOME || resolve(homedir(), ".codex"), "auth.json"), "utf8");
|
|
26
|
-
try { JSON.parse(seed); } catch { throw new Error("Invalid Codex authentication file. Run codex login again with file credential storage."); }
|
|
27
|
-
const authentication = { sandboxReady: [{ executable: "node", arguments: ["-e", ${JSON.stringify(authenticationRecipes.codex.seed)}], stdin: seed }] };`;
|
|
28
|
-
}
|
|
29
|
-
const key = authenticationEnvironment(options).trim().replace("=", "");
|
|
30
|
-
const conflict = agent === "claude"
|
|
31
|
-
? key === "ANTHROPIC_API_KEY"
|
|
32
|
-
? "CLAUDE_CODE_OAUTH_TOKEN"
|
|
33
|
-
: "ANTHROPIC_API_KEY"
|
|
34
|
-
: undefined;
|
|
35
|
-
const check = `if (!variables[${JSON.stringify(key)}]) throw new Error(${JSON.stringify(`Missing ${key}. Configure the workflow .env or parent environment before starting a sandbox.`)});`;
|
|
36
|
-
const guard = conflict
|
|
37
|
-
? `\nif (variables[${JSON.stringify(conflict)}]) throw new Error("Conflicting Claude authentication methods. Keep only the selected credential in the workflow environment.");`
|
|
38
|
-
: "";
|
|
39
|
-
if (agent !== "codex" || options.baseUrl)
|
|
40
|
-
return `${check}${guard}\nconst authentication = {};`;
|
|
41
|
-
return `${check}\nconst authentication = { sandboxReady: [{ executable: "node", arguments: ["-e", ${JSON.stringify(authenticationRecipes.codex.login)}], stdin: variables.OPENAI_API_KEY }] };`;
|
|
32
|
+
const setting = authenticationSetting(options);
|
|
33
|
+
if (typeof setting === "string")
|
|
34
|
+
return JSON.stringify(setting);
|
|
35
|
+
return `{ account: { variable: ${JSON.stringify(authenticationChoice(options).variable)} } }`;
|
|
42
36
|
}
|
|
43
37
|
//# sourceMappingURL=init-authentication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-authentication.js","sourceRoot":"","sources":["../../src/cli/init-authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init-authentication.js","sourceRoot":"","sources":["../../src/cli/init-authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,UAAU,oBAAoB,CAClC,OAAoB;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC;IACvC,MAAM,KAAK,GACT,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,OAAO,GAAoC,MAAM,CAAC,MAAM,CAC5D,qBAAqB,EACrB,KAAK,CACN;QACC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACtE,SAAS,CACP,MAAM,EACN,sBAAsB,KAAK,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAA4B,EAAE,CAChI,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,KAAK,CAAC;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAoB;IAC7D,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,OAAO,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,gFAAgF,CAAC;IAC9I,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAoB;IAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,0BAA0B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAChG,CAAC","sourcesContent":["import type { AgentAuthentication } from \"../domain/agent.types.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport { authenticationChoices } from \"./main.constants.ts\";\nimport type { AuthenticationChoice, InitOptions } from \"./scaffold.types.ts\";\n\nexport function authenticationChoice(\n options: InitOptions,\n): AuthenticationChoice {\n const agent = options.agent ?? \"codex\";\n const value =\n options.authentication ?? (options.baseUrl ? \"usage\" : \"account\");\n const choices: readonly AuthenticationChoice[] = Object.hasOwn(\n authenticationChoices,\n agent,\n )\n ? authenticationChoices[agent]\n : [];\n const choice = choices.find((candidate) => candidate.value === value);\n invariant(\n choice,\n `Authentication for ${agent} must be ${choices.map((candidate) => candidate.value).join(\", \") || \"one of its supported forms\"}`,\n );\n return choice;\n}\n\nexport function authenticationEnvironment(options: InitOptions): string {\n if (options.baseUrl)\n return `${options.apiKeyEnvironment ?? \"OPENAI_API_KEY\"}=\\n`;\n const { variable } = authenticationChoice(options);\n return variable ? `${variable}=\\n` : \"\";\n}\n\nexport function authenticationInstructions(options: InitOptions): string {\n if (options.baseUrl)\n return `Set ${options.apiKeyEnvironment ?? \"OPENAI_API_KEY\"} in the workflow .env or parent environment for the custom Responses provider.`;\n return authenticationChoice(options).instructions;\n}\n\nexport function authenticationSetting(\n options: InitOptions,\n): AgentAuthentication {\n const { value, variable } = authenticationChoice(options);\n if (value !== \"account-token\") return value;\n invariant(variable, \"Account tokens require a declared variable\");\n return { account: { variable } };\n}\n\nexport function authenticationSource(options: InitOptions): string {\n const setting = authenticationSetting(options);\n if (typeof setting === \"string\") return JSON.stringify(setting);\n return `{ account: { variable: ${JSON.stringify(authenticationChoice(options).variable)} } }`;\n}\n"]}
|
package/dist/cli/init-command.js
CHANGED
|
@@ -16,8 +16,8 @@ export async function initializeCommand({ values, }) {
|
|
|
16
16
|
delete options["api-key-env"];
|
|
17
17
|
if (!values.yes &&
|
|
18
18
|
!process.stdin.isTTY &&
|
|
19
|
-
(!values.agent || !values.
|
|
20
|
-
throw new Error("Headless initialization requires --yes for defaults, or --agent and --provider.");
|
|
19
|
+
(!values.agent || !values.sandboxProvider))
|
|
20
|
+
throw new Error("Headless initialization requires --yes for defaults, or --agent and --sandbox-provider.");
|
|
21
21
|
if (!values.yes && process.stdin.isTTY) {
|
|
22
22
|
intro("Create an Outpost workflow");
|
|
23
23
|
for (const question of initializationQuestions) {
|
|
@@ -36,7 +36,7 @@ export async function initializeCommand({ values, }) {
|
|
|
36
36
|
}
|
|
37
37
|
const settings = await projectSettings(resolve(values.directory ?? process.cwd()), options);
|
|
38
38
|
const choices = Object.entries(authenticationChoices).find(([name]) => name === options.agent)?.[1];
|
|
39
|
-
invariant(choices, "Choose codex, claude or
|
|
39
|
+
invariant(choices, "Choose codex, claude, antigravity, copilot or kimi");
|
|
40
40
|
const questions = [
|
|
41
41
|
{
|
|
42
42
|
key: "manager",
|
|
@@ -47,8 +47,8 @@ export async function initializeCommand({ values, }) {
|
|
|
47
47
|
{
|
|
48
48
|
key: "authentication",
|
|
49
49
|
message: "Agent authentication",
|
|
50
|
-
options:
|
|
51
|
-
initialValue: "
|
|
50
|
+
options: choices.map(({ value, label }) => ({ value, label })),
|
|
51
|
+
initialValue: options.baseUrl === undefined ? "account" : "usage",
|
|
52
52
|
},
|
|
53
53
|
];
|
|
54
54
|
for (const question of questions) {
|
|
@@ -63,7 +63,7 @@ export async function initializeCommand({ values, }) {
|
|
|
63
63
|
options[question.key] = value;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
options.build ??= ["docker", "podman"].includes(String(options.
|
|
66
|
+
options.build ??= ["docker", "podman"].includes(String(options.sandboxProvider ?? "docker"));
|
|
67
67
|
const progress = !values.yes && process.stdin.isTTY ? spinner() : undefined;
|
|
68
68
|
progress?.start(options.build
|
|
69
69
|
? "Creating project and building its container image"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,MAAM,GACQ;IACd,MAAM,OAAO,GAA4B,MAAM,CAAC,WAAW,CACzD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACzE,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,SAAS;QACrC,OAAO,CAAC,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,IACE,CAAC,MAAM,CAAC,GAAG;QACX,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QACpB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport { resolve } from \"node:path\";\nimport {\n cancel,\n intro,\n isCancel,\n outro,\n select,\n spinner,\n} from \"@clack/prompts\";\nimport { projectSettings } from \"./project-settings.ts\";\nimport { authenticationInstructions } from \"./init-authentication.ts\";\nimport { supportedManagers } from \"./scaffold.constants.ts\";\nimport {\n initializationQuestions,\n authenticationChoices,\n} from \"./main.constants.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\nimport { initialize } from \"./scaffold.ts\";\nimport type { InitOptions } from \"./scaffold.types.ts\";\n\nexport async function initializeCommand({\n values,\n}: CliInvocation): Promise<void> {\n const options: Record<string, unknown> = Object.fromEntries(\n Object.entries(values).filter(([key]) => ![\"help\", \"yes\"].includes(key)),\n );\n if (values[\"base-url\"] !== undefined) options.baseUrl = values[\"base-url\"];\n if (values[\"api-key-env\"] !== undefined)\n options.apiKeyEnvironment = values[\"api-key-env\"];\n delete options[\"base-url\"];\n delete options[\"api-key-env\"];\n if (\n !values.yes &&\n !process.stdin.isTTY &&\n (!values.agent || !values.sandboxProvider)\n )\n throw new Error(\n \"Headless initialization requires --yes for defaults, or --agent and --sandbox-provider.\",\n );\n if (!values.yes && process.stdin.isTTY) {\n intro(\"Create an Outpost workflow\");\n for (const question of initializationQuestions) {\n if (options[question.key] !== undefined) continue;\n const value = await select({\n message: question.message,\n options: question.choices.map((value) => ({ value, label: value })),\n });\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n const settings = await projectSettings(\n resolve(values.directory ?? process.cwd()),\n options as InitOptions,\n );\n const choices = Object.entries(authenticationChoices).find(\n ([name]) => name === options.agent,\n )?.[1];\n invariant(choices, \"Choose codex, claude, antigravity, copilot or kimi\");\n const questions = [\n {\n key: \"manager\",\n message: \"Package manager\",\n options: supportedManagers.map((value) => ({ value, label: value })),\n initialValue: settings.manager,\n },\n {\n key: \"authentication\",\n message: \"Agent authentication\",\n options: choices.map(({ value, label }) => ({ value, label })),\n initialValue: options.baseUrl === undefined ? \"account\" : \"usage\",\n },\n ];\n for (const question of questions) {\n if (options[question.key] !== undefined) continue;\n const value = await select(question);\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n }\n options.build ??= [\"docker\", \"podman\"].includes(\n String(options.sandboxProvider ?? \"docker\"),\n );\n const progress = !values.yes && process.stdin.isTTY ? spinner() : undefined;\n progress?.start(\n options.build\n ? \"Creating project and building its container image\"\n : \"Creating project\",\n );\n let result;\n try {\n result = await initialize(options as InitOptions);\n } catch (error) {\n progress?.stop(\"Initialization failed\");\n throw error;\n }\n progress?.stop(\"Project ready\");\n const installation = options.install\n ? \"\"\n : \"Install project dependencies with your selected package manager before running.\\n\";\n const message = `Initialized ${result.files.length} files in ${resolve(values.directory ?? process.cwd())}.\\n${authenticationInstructions(options as InitOptions)}\\n${installation}Run: ${result.run}`;\n if (!values.yes && process.stdin.isTTY) outro(message);\n else process.stdout.write(`${message}\\n`);\n}\n"]}
|