@elie-laloum/outpost 11.1.2 → 11.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +2 -1
- package/SECURITY.md +5 -1
- package/dist/adapters/agents/antigravity/antigravity-adapter.js +9 -0
- package/dist/adapters/agents/antigravity/antigravity-adapter.js.map +1 -1
- package/dist/adapters/agents/antigravity/antigravity-hook-plan.d.ts +3 -0
- package/dist/adapters/agents/antigravity/antigravity-hook-plan.js +39 -0
- package/dist/adapters/agents/antigravity/antigravity-hook-plan.js.map +1 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.constants.d.ts +3 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.constants.js +394 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.constants.js.map +1 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.d.ts +2 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.js +6 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.js.map +1 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.types.d.ts +114 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.types.js +2 -0
- package/dist/adapters/agents/antigravity/antigravity-hooks.types.js.map +1 -0
- package/dist/adapters/agents/antigravity/antigravity.types.d.ts +1 -0
- package/dist/adapters/agents/antigravity/antigravity.types.js.map +1 -1
- package/dist/adapters/agents/authentication.js +1 -0
- package/dist/adapters/agents/authentication.js.map +1 -1
- package/dist/adapters/agents/claude/claude-adapter.js +15 -0
- package/dist/adapters/agents/claude/claude-adapter.js.map +1 -1
- package/dist/adapters/agents/claude/claude-hook-plan.constants.d.ts +1 -0
- package/dist/adapters/agents/claude/claude-hook-plan.constants.js +20 -0
- package/dist/adapters/agents/claude/claude-hook-plan.constants.js.map +1 -0
- package/dist/adapters/agents/claude/claude-hook-plan.d.ts +4 -0
- package/dist/adapters/agents/claude/claude-hook-plan.js +60 -0
- package/dist/adapters/agents/claude/claude-hook-plan.js.map +1 -0
- package/dist/adapters/agents/claude/claude-hooks.constants.d.ts +3 -0
- package/dist/adapters/agents/claude/claude-hooks.constants.js +2968 -0
- package/dist/adapters/agents/claude/claude-hooks.constants.js.map +1 -0
- package/dist/adapters/agents/claude/claude-hooks.d.ts +2 -0
- package/dist/adapters/agents/claude/claude-hooks.js +6 -0
- package/dist/adapters/agents/claude/claude-hooks.js.map +1 -0
- package/dist/adapters/agents/claude/claude-hooks.types.d.ts +900 -0
- package/dist/adapters/agents/claude/claude-hooks.types.js +2 -0
- package/dist/adapters/agents/claude/claude-hooks.types.js.map +1 -0
- package/dist/adapters/agents/claude/claude-profile.d.ts +1 -0
- package/dist/adapters/agents/claude/claude-profile.js +23 -11
- package/dist/adapters/agents/claude/claude-profile.js.map +1 -1
- package/dist/adapters/agents/codex/codex-adapter.js +17 -1
- package/dist/adapters/agents/codex/codex-adapter.js.map +1 -1
- package/dist/adapters/agents/codex/codex-authentication.js +1 -0
- package/dist/adapters/agents/codex/codex-authentication.js.map +1 -1
- package/dist/adapters/agents/codex/codex-conversations.constants.d.ts +1 -0
- package/dist/adapters/agents/codex/codex-conversations.constants.js +2 -0
- package/dist/adapters/agents/codex/codex-conversations.constants.js.map +1 -0
- package/dist/adapters/agents/codex/codex-conversations.js +8 -5
- package/dist/adapters/agents/codex/codex-conversations.js.map +1 -1
- package/dist/adapters/agents/codex/codex-hook-plan.d.ts +3 -0
- package/dist/adapters/agents/codex/codex-hook-plan.js +72 -0
- package/dist/adapters/agents/codex/codex-hook-plan.js.map +1 -0
- package/dist/adapters/agents/codex/codex-hooks.constants.d.ts +3 -0
- package/dist/adapters/agents/codex/codex-hooks.constants.js +942 -0
- package/dist/adapters/agents/codex/codex-hooks.constants.js.map +1 -0
- package/dist/adapters/agents/codex/codex-hooks.d.ts +2 -0
- package/dist/adapters/agents/codex/codex-hooks.js +6 -0
- package/dist/adapters/agents/codex/codex-hooks.js.map +1 -0
- package/dist/adapters/agents/codex/codex-hooks.types.d.ts +255 -0
- package/dist/adapters/agents/codex/codex-hooks.types.js +2 -0
- package/dist/adapters/agents/codex/codex-hooks.types.js.map +1 -0
- package/dist/adapters/agents/codex/codex-provider.js +2 -2
- package/dist/adapters/agents/codex/codex-provider.js.map +1 -1
- package/dist/adapters/agents/copilot/copilot-adapter.js +14 -0
- package/dist/adapters/agents/copilot/copilot-adapter.js.map +1 -1
- package/dist/adapters/agents/copilot/copilot-hook-plan.d.ts +3 -0
- package/dist/adapters/agents/copilot/copilot-hook-plan.js +26 -0
- package/dist/adapters/agents/copilot/copilot-hook-plan.js.map +1 -0
- package/dist/adapters/agents/copilot/copilot-hooks.constants.d.ts +3 -0
- package/dist/adapters/agents/copilot/copilot-hooks.constants.js +528 -0
- package/dist/adapters/agents/copilot/copilot-hooks.constants.js.map +1 -0
- package/dist/adapters/agents/copilot/copilot-hooks.d.ts +2 -0
- package/dist/adapters/agents/copilot/copilot-hooks.js +6 -0
- package/dist/adapters/agents/copilot/copilot-hooks.js.map +1 -0
- package/dist/adapters/agents/copilot/copilot-hooks.types.d.ts +166 -0
- package/dist/adapters/agents/copilot/copilot-hooks.types.js +2 -0
- package/dist/adapters/agents/copilot/copilot-hooks.types.js.map +1 -0
- package/dist/adapters/agents/copilot/copilot.types.d.ts +1 -0
- package/dist/adapters/agents/copilot/copilot.types.js.map +1 -1
- package/dist/adapters/agents/hook-groups.d.ts +2 -0
- package/dist/adapters/agents/hook-groups.js +17 -0
- package/dist/adapters/agents/hook-groups.js.map +1 -0
- package/dist/adapters/agents/kimi/kimi-adapter.js +16 -1
- package/dist/adapters/agents/kimi/kimi-adapter.js.map +1 -1
- package/dist/adapters/agents/kimi/kimi-hook-plan.d.ts +3 -0
- package/dist/adapters/agents/kimi/kimi-hook-plan.js +33 -0
- package/dist/adapters/agents/kimi/kimi-hook-plan.js.map +1 -0
- package/dist/adapters/agents/kimi/kimi-hooks.constants.d.ts +3 -0
- package/dist/adapters/agents/kimi/kimi-hooks.constants.js +747 -0
- package/dist/adapters/agents/kimi/kimi-hooks.constants.js.map +1 -0
- package/dist/adapters/agents/kimi/kimi-hooks.d.ts +2 -0
- package/dist/adapters/agents/kimi/kimi-hooks.js +6 -0
- package/dist/adapters/agents/kimi/kimi-hooks.js.map +1 -0
- package/dist/adapters/agents/kimi/kimi-hooks.types.d.ts +226 -0
- package/dist/adapters/agents/kimi/kimi-hooks.types.js +2 -0
- package/dist/adapters/agents/kimi/kimi-hooks.types.js.map +1 -0
- package/dist/adapters/agents/kimi/kimi-request.js +2 -0
- package/dist/adapters/agents/kimi/kimi-request.js.map +1 -1
- package/dist/adapters/agents/kimi/kimi.constants.d.ts +1 -0
- package/dist/adapters/agents/kimi/kimi.constants.js +1 -0
- package/dist/adapters/agents/kimi/kimi.constants.js.map +1 -1
- package/dist/adapters/agents/kimi/kimi.types.d.ts +1 -0
- package/dist/adapters/agents/kimi/kimi.types.js.map +1 -1
- package/dist/adapters/agents/native-hooks.d.ts +4 -0
- package/dist/adapters/agents/native-hooks.js +63 -0
- package/dist/adapters/agents/native-hooks.js.map +1 -0
- package/dist/adapters/agents/native-hooks.types.d.ts +22 -0
- package/dist/adapters/agents/native-hooks.types.js +2 -0
- package/dist/adapters/agents/native-hooks.types.js.map +1 -0
- package/dist/adapters/agents/settings.types.d.ts +2 -0
- package/dist/adapters/agents/settings.types.js.map +1 -1
- package/dist/adapters/decisions/system-one-provider.constants.d.ts +1 -1
- package/dist/adapters/decisions/system-one-provider.constants.js +1 -1
- package/dist/adapters/decisions/system-one-provider.constants.js.map +1 -1
- package/dist/adapters/decisions/system-one-provider.js +8 -21
- package/dist/adapters/decisions/system-one-provider.js.map +1 -1
- package/dist/adapters/models/anthropic-model-provider.constants.d.ts +1 -0
- package/dist/adapters/models/anthropic-model-provider.constants.js +4 -0
- package/dist/adapters/models/anthropic-model-provider.constants.js.map +1 -1
- package/dist/adapters/models/anthropic-model-provider.js +7 -1
- package/dist/adapters/models/anthropic-model-provider.js.map +1 -1
- package/dist/adapters/models/http-failure.d.ts +3 -0
- package/dist/adapters/models/http-failure.js +43 -0
- package/dist/adapters/models/http-failure.js.map +1 -0
- package/dist/adapters/models/http-provider.js +14 -20
- package/dist/adapters/models/http-provider.js.map +1 -1
- package/dist/adapters/models/model-protocol.types.d.ts +1 -0
- package/dist/adapters/models/model-protocol.types.js.map +1 -1
- package/dist/adapters/models/model.constants.d.ts +2 -0
- package/dist/adapters/models/model.constants.js +17 -0
- package/dist/adapters/models/model.constants.js.map +1 -1
- package/dist/adapters/models/openai-chat-stream.js +3 -1
- package/dist/adapters/models/openai-chat-stream.js.map +1 -1
- package/dist/adapters/models/openai-responses.js +4 -0
- package/dist/adapters/models/openai-responses.js.map +1 -1
- package/dist/adapters/secrets/aws.js +5 -4
- package/dist/adapters/secrets/aws.js.map +1 -1
- package/dist/adapters/secrets/azure.constants.d.ts +1 -0
- package/dist/adapters/secrets/azure.constants.js +2 -0
- package/dist/adapters/secrets/azure.constants.js.map +1 -0
- package/dist/adapters/secrets/azure.js +2 -1
- package/dist/adapters/secrets/azure.js.map +1 -1
- package/dist/adapters/secrets/gcp.constants.d.ts +1 -0
- package/dist/adapters/secrets/gcp.constants.js +2 -0
- package/dist/adapters/secrets/gcp.constants.js.map +1 -0
- package/dist/adapters/secrets/gcp.js +11 -9
- package/dist/adapters/secrets/gcp.js.map +1 -1
- package/dist/adapters/secrets/infisical.js +3 -2
- package/dist/adapters/secrets/infisical.js.map +1 -1
- package/dist/adapters/secrets/onepassword.constants.d.ts +1 -0
- package/dist/adapters/secrets/onepassword.constants.js +2 -0
- package/dist/adapters/secrets/onepassword.constants.js.map +1 -0
- package/dist/adapters/secrets/onepassword.js +2 -1
- package/dist/adapters/secrets/onepassword.js.map +1 -1
- package/dist/adapters/secrets/secret-source.js +3 -1
- package/dist/adapters/secrets/secret-source.js.map +1 -1
- package/dist/adapters/secrets/vault-response.js +5 -5
- package/dist/adapters/secrets/vault-response.js.map +1 -1
- package/dist/adapters/secrets/vault.js +4 -3
- package/dist/adapters/secrets/vault.js.map +1 -1
- package/dist/adapters/testing/scripted-agent.d.ts +3 -1
- package/dist/adapters/testing/scripted-agent.js +3 -1
- package/dist/adapters/testing/scripted-agent.js.map +1 -1
- package/dist/adapters/tools/edit-tools.js +3 -3
- package/dist/adapters/tools/edit-tools.js.map +1 -1
- package/dist/adapters/tools/git-tools.js +16 -1
- package/dist/adapters/tools/git-tools.js.map +1 -1
- package/dist/adapters/tools/mcp-launcher.constants.d.ts +1 -1
- package/dist/adapters/tools/mcp-launcher.constants.js +29 -7
- package/dist/adapters/tools/mcp-launcher.constants.js.map +1 -1
- package/dist/adapters/tools/mcp-resources.js +5 -1
- package/dist/adapters/tools/mcp-resources.js.map +1 -1
- package/dist/adapters/tools/mcp.constants.d.ts +0 -6
- package/dist/adapters/tools/mcp.constants.js +0 -6
- package/dist/adapters/tools/mcp.constants.js.map +1 -1
- package/dist/adapters/tools/mcp.js +1 -0
- package/dist/adapters/tools/mcp.js.map +1 -1
- package/dist/adapters/tools/sandbox-files.constants.d.ts +1 -0
- package/dist/adapters/tools/sandbox-files.constants.js +17 -0
- package/dist/adapters/tools/sandbox-files.constants.js.map +1 -0
- package/dist/adapters/tools/sandbox-files.d.ts +1 -0
- package/dist/adapters/tools/sandbox-files.js +14 -1
- package/dist/adapters/tools/sandbox-files.js.map +1 -1
- package/dist/adapters/tools/tools.constants.js +1 -0
- package/dist/adapters/tools/tools.constants.js.map +1 -1
- package/dist/adapters/triggers/github-webhook.js +14 -11
- package/dist/adapters/triggers/github-webhook.js.map +1 -1
- package/dist/adapters/triggers/gitlab-webhook.js +16 -13
- package/dist/adapters/triggers/gitlab-webhook.js.map +1 -1
- package/dist/adapters/triggers/slack-request.js +10 -7
- package/dist/adapters/triggers/slack-request.js.map +1 -1
- package/dist/adapters/triggers/standard-webhook.js +10 -7
- package/dist/adapters/triggers/standard-webhook.js.map +1 -1
- package/dist/application/agent-authentication.js +4 -1
- package/dist/application/agent-authentication.js.map +1 -1
- package/dist/application/agent-turn.js +20 -5
- package/dist/application/agent-turn.js.map +1 -1
- package/dist/application/cli-hooks.constants.d.ts +2 -0
- package/dist/application/cli-hooks.constants.js +69 -0
- package/dist/application/cli-hooks.constants.js.map +1 -0
- package/dist/application/cli-hooks.d.ts +3 -0
- package/dist/application/cli-hooks.js +168 -0
- package/dist/application/cli-hooks.js.map +1 -0
- package/dist/application/cli-steering.js +33 -2
- package/dist/application/cli-steering.js.map +1 -1
- package/dist/application/custom-turn.js +10 -1
- package/dist/application/custom-turn.js.map +1 -1
- package/dist/application/diagnostic-probe.d.ts +1 -1
- package/dist/application/diagnostic-probe.js +7 -3
- package/dist/application/diagnostic-probe.js.map +1 -1
- package/dist/application/dispatch-observation.js +4 -0
- package/dist/application/dispatch-observation.js.map +1 -1
- package/dist/application/doctor-agent.d.ts +1 -1
- package/dist/application/doctor-agent.js +2 -2
- package/dist/application/doctor-agent.js.map +1 -1
- package/dist/application/doctor-deadline.d.ts +1 -0
- package/dist/application/doctor-deadline.js +10 -0
- package/dist/application/doctor-deadline.js.map +1 -0
- package/dist/application/doctor-image.js +9 -7
- package/dist/application/doctor-image.js.map +1 -1
- package/dist/application/doctor-sandbox.js +4 -4
- package/dist/application/doctor-sandbox.js.map +1 -1
- package/dist/application/doctor.constants.d.ts +2 -0
- package/dist/application/doctor.constants.js +2 -0
- package/dist/application/doctor.constants.js.map +1 -1
- package/dist/application/doctor.js +12 -8
- package/dist/application/doctor.js.map +1 -1
- package/dist/application/doctor.types.d.ts +2 -0
- package/dist/application/doctor.types.js.map +1 -1
- package/dist/application/file-sandbox.js +49 -11
- package/dist/application/file-sandbox.js.map +1 -1
- package/dist/application/harness-context.js +4 -2
- package/dist/application/harness-context.js.map +1 -1
- package/dist/application/harness-hook-transforms.d.ts +8 -0
- package/dist/application/harness-hook-transforms.js +115 -0
- package/dist/application/harness-hook-transforms.js.map +1 -0
- package/dist/application/harness-hooks.d.ts +5 -3
- package/dist/application/harness-hooks.js +37 -50
- package/dist/application/harness-hooks.js.map +1 -1
- package/dist/application/harness-loop.d.ts +2 -1
- package/dist/application/harness-loop.js +95 -21
- package/dist/application/harness-loop.js.map +1 -1
- package/dist/application/harness-subagent.d.ts +1 -1
- package/dist/application/harness-subagent.js +63 -12
- package/dist/application/harness-subagent.js.map +1 -1
- package/dist/application/harness.types.d.ts +3 -0
- package/dist/application/harness.types.js.map +1 -1
- package/dist/application/hook-invocation.d.ts +4 -0
- package/dist/application/hook-invocation.js +59 -0
- package/dist/application/hook-invocation.js.map +1 -0
- package/dist/application/queue-worker.js +51 -9
- package/dist/application/queue-worker.js.map +1 -1
- package/dist/application/queue-worker.types.d.ts +1 -0
- package/dist/application/queue-worker.types.js.map +1 -1
- package/dist/application/recipes/native-schemas.constants.js +1439 -218
- package/dist/application/recipes/native-schemas.constants.js.map +1 -1
- package/dist/application/recovery-inspection.js +4 -1
- package/dist/application/recovery-inspection.js.map +1 -1
- package/dist/application/remote-download.js +15 -5
- package/dist/application/remote-download.js.map +1 -1
- package/dist/application/remote-paths.d.ts +1 -0
- package/dist/application/remote-paths.js +7 -0
- package/dist/application/remote-paths.js.map +1 -0
- package/dist/application/remote-validation.js +40 -9
- package/dist/application/remote-validation.js.map +1 -1
- package/dist/application/remote-workspace.js +17 -2
- package/dist/application/remote-workspace.js.map +1 -1
- package/dist/application/repetition-watchdog.js +3 -1
- package/dist/application/repetition-watchdog.js.map +1 -1
- package/dist/application/sandbox-attach.js +38 -9
- package/dist/application/sandbox-attach.js.map +1 -1
- package/dist/application/sandbox-dispatch.js +7 -1
- package/dist/application/sandbox-dispatch.js.map +1 -1
- package/dist/application/schedules.js +2 -0
- package/dist/application/schedules.js.map +1 -1
- package/dist/application/secrets.js +4 -0
- package/dist/application/secrets.js.map +1 -1
- package/dist/application/tool-execution.js +28 -8
- package/dist/application/tool-execution.js.map +1 -1
- package/dist/application/transport-retention.js +3 -3
- package/dist/application/transport-retention.js.map +1 -1
- package/dist/application/workspace-fingerprint.d.ts +1 -0
- package/dist/application/workspace-fingerprint.js +19 -4
- package/dist/application/workspace-fingerprint.js.map +1 -1
- package/dist/cli/doctor-command.js +12 -2
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/cli/image.js +2 -0
- package/dist/cli/image.js.map +1 -1
- package/dist/cli/main.constants.d.ts +14 -2
- package/dist/cli/main.constants.js +27 -1
- package/dist/cli/main.constants.js.map +1 -1
- package/dist/cli/project-settings.js +7 -1
- package/dist/cli/project-settings.js.map +1 -1
- package/dist/cli/recipe-yaml.js +8 -0
- package/dist/cli/recipe-yaml.js.map +1 -1
- package/dist/cli/recovery-command.js +3 -0
- package/dist/cli/recovery-command.js.map +1 -1
- package/dist/cli/recovery-unlock-command.d.ts +2 -0
- package/dist/cli/recovery-unlock-command.js +19 -0
- package/dist/cli/recovery-unlock-command.js.map +1 -0
- package/dist/cli/scaffold-files.js +4 -1
- package/dist/cli/scaffold-files.js.map +1 -1
- package/dist/cli/scaffold-validation.js +3 -0
- package/dist/cli/scaffold-validation.js.map +1 -1
- package/dist/cli/scaffold.js +2 -0
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/domain/agent-hook.types.d.ts +28 -0
- package/dist/domain/agent-hook.types.js +2 -0
- package/dist/domain/agent-hook.types.js.map +1 -0
- package/dist/domain/agent-profile-hooks.d.ts +2 -0
- package/dist/domain/agent-profile-hooks.js +52 -0
- package/dist/domain/agent-profile-hooks.js.map +1 -0
- package/dist/domain/agent-profile-permissions.js +11 -1
- package/dist/domain/agent-profile-permissions.js.map +1 -1
- package/dist/domain/agent-profile.constants.d.ts +1 -0
- package/dist/domain/agent-profile.constants.js +9 -0
- package/dist/domain/agent-profile.constants.js.map +1 -1
- package/dist/domain/agent-profile.js +6 -1
- package/dist/domain/agent-profile.js.map +1 -1
- package/dist/domain/agent-profile.types.d.ts +11 -0
- package/dist/domain/agent-profile.types.js.map +1 -1
- package/dist/domain/agent.types.d.ts +2 -0
- package/dist/domain/agent.types.js.map +1 -1
- package/dist/domain/container-image.d.ts +1 -0
- package/dist/domain/container-image.js +8 -0
- package/dist/domain/container-image.js.map +1 -0
- package/dist/domain/context.constants.d.ts +1 -0
- package/dist/domain/context.constants.js +1 -0
- package/dist/domain/context.constants.js.map +1 -1
- package/dist/domain/context.js +6 -1
- package/dist/domain/context.js.map +1 -1
- package/dist/domain/egress.js +6 -1
- package/dist/domain/egress.js.map +1 -1
- package/dist/domain/glob.js +1 -1
- package/dist/domain/glob.js.map +1 -1
- package/dist/domain/harness.js +4 -1
- package/dist/domain/harness.js.map +1 -1
- package/dist/domain/hook-command.d.ts +2 -0
- package/dist/domain/hook-command.js +26 -0
- package/dist/domain/hook-command.js.map +1 -0
- package/dist/domain/hook-command.types.d.ts +7 -0
- package/dist/domain/hook-command.types.js +2 -0
- package/dist/domain/hook-command.types.js.map +1 -0
- package/dist/domain/hook-decision.d.ts +2 -0
- package/dist/domain/hook-decision.js +38 -0
- package/dist/domain/hook-decision.js.map +1 -0
- package/dist/domain/hook.constants.d.ts +3 -0
- package/dist/domain/hook.constants.js +31 -1
- package/dist/domain/hook.constants.js.map +1 -1
- package/dist/domain/hook.js +49 -5
- package/dist/domain/hook.js.map +1 -1
- package/dist/domain/hook.types.d.ts +82 -5
- package/dist/domain/hook.types.js.map +1 -1
- package/dist/domain/mcp-server.constants.d.ts +6 -0
- package/dist/domain/mcp-server.constants.js +6 -0
- package/dist/domain/mcp-server.constants.js.map +1 -1
- package/dist/domain/mcp-server.js +1 -0
- package/dist/domain/mcp-server.js.map +1 -1
- package/dist/domain/permissions.types.d.ts +1 -0
- package/dist/domain/permissions.types.js.map +1 -1
- package/dist/domain/pricing.js +4 -2
- package/dist/domain/pricing.js.map +1 -1
- package/dist/domain/redaction.js +6 -3
- package/dist/domain/redaction.js.map +1 -1
- package/dist/domain/secret-fault.d.ts +4 -0
- package/dist/domain/secret-fault.js +11 -0
- package/dist/domain/secret-fault.js.map +1 -0
- package/dist/domain/secrets.js +3 -2
- package/dist/domain/secrets.js.map +1 -1
- package/dist/domain/steering.js +2 -0
- package/dist/domain/steering.js.map +1 -1
- package/dist/domain/steering.types.d.ts +1 -1
- package/dist/domain/steering.types.js.map +1 -1
- package/dist/domain/transport.js +5 -1
- package/dist/domain/transport.js.map +1 -1
- package/dist/domain/trigger-payload.d.ts +4 -0
- package/dist/domain/trigger-payload.js +15 -0
- package/dist/domain/trigger-payload.js.map +1 -0
- package/dist/domain/workflow/checkpoint.js +19 -2
- package/dist/domain/workflow/checkpoint.js.map +1 -1
- package/dist/domain/workflow/retry.constants.d.ts +1 -0
- package/dist/domain/workflow/retry.constants.js +1 -0
- package/dist/domain/workflow/retry.constants.js.map +1 -1
- package/dist/domain/workflow/retry.js +6 -2
- package/dist/domain/workflow/retry.js.map +1 -1
- package/dist/domain/workflow/task-runner.js +5 -3
- package/dist/domain/workflow/task-runner.js.map +1 -1
- package/dist/domain/workflow/workflow-state.js +2 -1
- package/dist/domain/workflow/workflow-state.js.map +1 -1
- package/dist/domain/workflow.types.d.ts +1 -0
- package/dist/domain/workflow.types.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/conversations/transcript-store.js +32 -5
- package/dist/infrastructure/conversations/transcript-store.js.map +1 -1
- package/dist/infrastructure/files.d.ts +1 -0
- package/dist/infrastructure/files.js +8 -4
- package/dist/infrastructure/files.js.map +1 -1
- package/dist/infrastructure/git/integration-candidate.js +3 -2
- package/dist/infrastructure/git/integration-candidate.js.map +1 -1
- package/dist/infrastructure/git/lock-recovery.d.ts +3 -0
- package/dist/infrastructure/git/lock-recovery.js +58 -0
- package/dist/infrastructure/git/lock-recovery.js.map +1 -0
- package/dist/infrastructure/git/lock-recovery.types.d.ts +11 -0
- package/dist/infrastructure/git/lock-recovery.types.js +2 -0
- package/dist/infrastructure/git/lock-recovery.types.js.map +1 -0
- package/dist/infrastructure/git/managed-worktree.js +5 -8
- package/dist/infrastructure/git/managed-worktree.js.map +1 -1
- package/dist/infrastructure/git/verification-command.js +35 -30
- package/dist/infrastructure/git/verification-command.js.map +1 -1
- package/dist/infrastructure/git/workspace-lease.js +12 -5
- package/dist/infrastructure/git/workspace-lease.js.map +1 -1
- package/dist/infrastructure/hook-configuration.constants.d.ts +1 -0
- package/dist/infrastructure/hook-configuration.constants.js +59 -0
- package/dist/infrastructure/hook-configuration.constants.js.map +1 -0
- package/dist/infrastructure/hook-configuration.d.ts +3 -0
- package/dist/infrastructure/hook-configuration.js +16 -0
- package/dist/infrastructure/hook-configuration.js.map +1 -0
- package/dist/infrastructure/hook-configuration.types.d.ts +14 -0
- package/dist/infrastructure/hook-configuration.types.js +2 -0
- package/dist/infrastructure/hook-configuration.types.js.map +1 -0
- package/dist/infrastructure/http-transport.constants.d.ts +1 -0
- package/dist/infrastructure/http-transport.constants.js +14 -0
- package/dist/infrastructure/http-transport.constants.js.map +1 -0
- package/dist/infrastructure/http-transport.d.ts +7 -0
- package/dist/infrastructure/http-transport.js +19 -0
- package/dist/infrastructure/http-transport.js.map +1 -0
- package/dist/infrastructure/input-failure.d.ts +4 -0
- package/dist/infrastructure/input-failure.js +14 -0
- package/dist/infrastructure/input-failure.js.map +1 -0
- package/dist/infrastructure/inspection-file.d.ts +1 -0
- package/dist/infrastructure/inspection-file.js +8 -2
- package/dist/infrastructure/inspection-file.js.map +1 -1
- package/dist/infrastructure/local-transport.js +16 -11
- package/dist/infrastructure/local-transport.js.map +1 -1
- package/dist/infrastructure/process.constants.d.ts +1 -0
- package/dist/infrastructure/process.constants.js +1 -0
- package/dist/infrastructure/process.constants.js.map +1 -1
- package/dist/infrastructure/process.d.ts +1 -0
- package/dist/infrastructure/process.js +48 -8
- package/dist/infrastructure/process.js.map +1 -1
- package/dist/infrastructure/reservation-ledger.d.ts +2 -0
- package/dist/infrastructure/reservation-ledger.js +84 -0
- package/dist/infrastructure/reservation-ledger.js.map +1 -0
- package/dist/infrastructure/reservation-recovery.d.ts +4 -0
- package/dist/infrastructure/reservation-recovery.js +28 -0
- package/dist/infrastructure/reservation-recovery.js.map +1 -0
- package/dist/infrastructure/s3-tombstones.d.ts +3 -0
- package/dist/infrastructure/s3-tombstones.js +46 -0
- package/dist/infrastructure/s3-tombstones.js.map +1 -0
- package/dist/infrastructure/s3-tombstones.types.d.ts +6 -0
- package/dist/infrastructure/s3-tombstones.types.js +2 -0
- package/dist/infrastructure/s3-tombstones.types.js.map +1 -0
- package/dist/infrastructure/s3-transport.d.ts +2 -0
- package/dist/infrastructure/s3-transport.js +4 -2
- package/dist/infrastructure/s3-transport.js.map +1 -1
- package/dist/infrastructure/sse.js +6 -3
- package/dist/infrastructure/sse.js.map +1 -1
- package/dist/infrastructure/task-queue-bullmq-connection.d.ts +3 -0
- package/dist/infrastructure/task-queue-bullmq-connection.js +32 -0
- package/dist/infrastructure/task-queue-bullmq-connection.js.map +1 -0
- package/dist/infrastructure/task-queue-bullmq-connection.types.d.ts +8 -0
- package/dist/infrastructure/task-queue-bullmq-connection.types.js +2 -0
- package/dist/infrastructure/task-queue-bullmq-connection.types.js.map +1 -0
- package/dist/infrastructure/task-queue-bullmq-resources.js +21 -15
- package/dist/infrastructure/task-queue-bullmq-resources.js.map +1 -1
- package/dist/infrastructure/task-queue-bullmq-state.d.ts +1 -0
- package/dist/infrastructure/task-queue-bullmq-state.js +1 -0
- package/dist/infrastructure/task-queue-bullmq-state.js.map +1 -1
- package/dist/infrastructure/task-queue-bullmq.constants.d.ts +2 -1
- package/dist/infrastructure/task-queue-bullmq.constants.js +2 -1
- package/dist/infrastructure/task-queue-bullmq.constants.js.map +1 -1
- package/dist/infrastructure/task-queue-bullmq.js +10 -1
- package/dist/infrastructure/task-queue-bullmq.js.map +1 -1
- package/dist/infrastructure/task-queue.js +13 -4
- package/dist/infrastructure/task-queue.js.map +1 -1
- package/dist/infrastructure/transfer-copy.d.ts +1 -0
- package/dist/infrastructure/transfer-copy.js +16 -1
- package/dist/infrastructure/transfer-copy.js.map +1 -1
- package/dist/infrastructure/transport-archive.d.ts +3 -3
- package/dist/infrastructure/transport-archive.js +71 -48
- package/dist/infrastructure/transport-archive.js.map +1 -1
- package/dist/infrastructure/transport-archive.types.d.ts +3 -0
- package/dist/infrastructure/transport-archive.types.js.map +1 -1
- package/dist/infrastructure/transport-checkpoint.js +14 -4
- package/dist/infrastructure/transport-checkpoint.js.map +1 -1
- package/dist/infrastructure/transport-envelope.d.ts +1 -0
- package/dist/infrastructure/transport-envelope.js +22 -5
- package/dist/infrastructure/transport-envelope.js.map +1 -1
- package/dist/infrastructure/transport-reservations.constants.d.ts +2 -0
- package/dist/infrastructure/transport-reservations.constants.js +3 -0
- package/dist/infrastructure/transport-reservations.constants.js.map +1 -0
- package/dist/infrastructure/transport-reservations.d.ts +1 -2
- package/dist/infrastructure/transport-reservations.js +18 -22
- package/dist/infrastructure/transport-reservations.js.map +1 -1
- package/dist/infrastructure/transport-reservations.types.d.ts +23 -2
- package/dist/infrastructure/transport-reservations.types.js.map +1 -1
- package/dist/infrastructure/trigger-server.js +12 -9
- package/dist/infrastructure/trigger-server.js.map +1 -1
- package/dist/infrastructure/trigger-server.types.d.ts +1 -1
- package/dist/infrastructure/trigger-server.types.js.map +1 -1
- package/dist/infrastructure/workflow-checkpoint.constants.d.ts +1 -0
- package/dist/infrastructure/workflow-checkpoint.constants.js +1 -0
- package/dist/infrastructure/workflow-checkpoint.constants.js.map +1 -1
- package/dist/infrastructure/workspace-lock.constants.d.ts +2 -1
- package/dist/infrastructure/workspace-lock.constants.js +2 -1
- package/dist/infrastructure/workspace-lock.constants.js.map +1 -1
- package/dist/infrastructure/workspace-lock.js +48 -10
- package/dist/infrastructure/workspace-lock.js.map +1 -1
- package/dist/providers/cloud-cache.js +14 -9
- package/dist/providers/cloud-cache.js.map +1 -1
- package/dist/providers/cloud-cache.types.d.ts +1 -0
- package/dist/providers/cloud-cache.types.js.map +1 -1
- package/dist/providers/cloud-files.js +3 -4
- package/dist/providers/cloud-files.js.map +1 -1
- package/dist/providers/cloud-input.constants.d.ts +2 -2
- package/dist/providers/cloud-input.constants.js +2 -1
- package/dist/providers/cloud-input.constants.js.map +1 -1
- package/dist/providers/cloud-input.d.ts +2 -2
- package/dist/providers/cloud-input.js +14 -3
- package/dist/providers/cloud-input.js.map +1 -1
- package/dist/providers/container-command.js +30 -5
- package/dist/providers/container-command.js.map +1 -1
- package/dist/providers/container-egress.constants.d.ts +7 -0
- package/dist/providers/container-egress.constants.js +8 -0
- package/dist/providers/container-egress.constants.js.map +1 -0
- package/dist/providers/container-egress.d.ts +7 -0
- package/dist/providers/container-egress.js +101 -0
- package/dist/providers/container-egress.js.map +1 -0
- package/dist/providers/container-files.js +10 -11
- package/dist/providers/container-files.js.map +1 -1
- package/dist/providers/container-mounts.js +3 -0
- package/dist/providers/container-mounts.js.map +1 -1
- package/dist/providers/container-network.js +16 -1
- package/dist/providers/container-network.js.map +1 -1
- package/dist/providers/container-plan.js +7 -10
- package/dist/providers/container-plan.js.map +1 -1
- package/dist/providers/container-recovery.js +8 -3
- package/dist/providers/container-recovery.js.map +1 -1
- package/dist/providers/container.js +36 -5
- package/dist/providers/container.js.map +1 -1
- package/dist/providers/container.types.d.ts +1 -0
- package/dist/providers/container.types.js.map +1 -1
- package/dist/providers/daytona-command.constants.js +4 -1
- package/dist/providers/daytona-command.constants.js.map +1 -1
- package/dist/providers/daytona-command.js +39 -16
- package/dist/providers/daytona-command.js.map +1 -1
- package/dist/providers/daytona-files.js +5 -5
- package/dist/providers/daytona-files.js.map +1 -1
- package/dist/providers/daytona-output.js +11 -3
- package/dist/providers/daytona-output.js.map +1 -1
- package/dist/providers/daytona.js +11 -9
- package/dist/providers/daytona.js.map +1 -1
- package/dist/providers/egress/address.d.ts +3 -0
- package/dist/providers/egress/address.js +26 -0
- package/dist/providers/egress/address.js.map +1 -0
- package/dist/providers/egress/egress.constants.d.ts +22 -0
- package/dist/providers/egress/egress.constants.js +23 -0
- package/dist/providers/egress/egress.constants.js.map +1 -0
- package/dist/providers/egress/egress.types.d.ts +11 -0
- package/dist/providers/egress/egress.types.js +2 -0
- package/dist/providers/egress/egress.types.js.map +1 -0
- package/dist/providers/egress/firewall.d.ts +3 -0
- package/dist/providers/egress/firewall.js +29 -0
- package/dist/providers/egress/firewall.js.map +1 -0
- package/dist/providers/egress/main.d.ts +1 -0
- package/dist/providers/egress/main.js +90 -0
- package/dist/providers/egress/main.js.map +1 -0
- package/dist/providers/egress/policy.d.ts +5 -0
- package/dist/providers/egress/policy.js +54 -0
- package/dist/providers/egress/policy.js.map +1 -0
- package/dist/providers/egress/proxy.d.ts +2 -0
- package/dist/providers/egress/proxy.js +129 -0
- package/dist/providers/egress/proxy.js.map +1 -0
- package/dist/providers/egress/tls-hello.d.ts +1 -0
- package/dist/providers/egress/tls-hello.js +75 -0
- package/dist/providers/egress/tls-hello.js.map +1 -0
- package/dist/providers/firecracker-command.js +12 -6
- package/dist/providers/firecracker-command.js.map +1 -1
- package/dist/providers/local-files.d.ts +2 -0
- package/dist/providers/local-files.js +24 -0
- package/dist/providers/local-files.js.map +1 -0
- package/dist/providers/local.js +2 -20
- package/dist/providers/local.js.map +1 -1
- package/dist/providers/vercel-command.js +33 -9
- package/dist/providers/vercel-command.js.map +1 -1
- package/dist/providers/vercel.js +11 -9
- package/dist/providers/vercel.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/package.json +2 -2
- package/recipe-configuration.schema.json +2164 -35
- package/recipe.schema.json +2512 -404
|
@@ -27,7 +27,7 @@ export async function runTask(item, runtime) {
|
|
|
27
27
|
finish(item, "skipped");
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
const cache = item.cache
|
|
30
|
+
const cache = item.cache && state.attempts === 0 && state.rounds === undefined
|
|
31
31
|
? await lookupTaskCache(item, item.cache, runtime)
|
|
32
32
|
: undefined;
|
|
33
33
|
if (cache?.hit) {
|
|
@@ -73,6 +73,10 @@ export async function runTask(item, runtime) {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
async function complete(item, runtime, cache, value) {
|
|
76
|
+
if (runtime.options.checkpoint) {
|
|
77
|
+
checkpointValue(value);
|
|
78
|
+
value = structuredClone(value);
|
|
79
|
+
}
|
|
76
80
|
if (item.cache && cache && !cache.hit)
|
|
77
81
|
await storeTaskCache(item, item.cache, runtime, cache.fingerprint, value);
|
|
78
82
|
runtime.values.set(item, value);
|
|
@@ -112,8 +116,6 @@ async function perform(item, runtime, cache) {
|
|
|
112
116
|
taskSignal.throwIfAborted();
|
|
113
117
|
value = await item.perform(context(item, attempt, taskSignal));
|
|
114
118
|
taskSignal.throwIfAborted();
|
|
115
|
-
if (options.checkpoint)
|
|
116
|
-
checkpointValue(value);
|
|
117
119
|
completed = true;
|
|
118
120
|
}
|
|
119
121
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/domain/workflow/task-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { InputSuspension } from \"./input.ts\";\nimport { loopDefinition } from \"./loop-task.ts\";\nimport { runLoopTask } from \"./loop-runner.ts\";\nimport { checkpointValue } from \"./checkpoint-value.ts\";\nimport {\n WorkflowBudgetExceeded,\n WorkflowUsageUnavailable,\n WorkflowCostUnavailable,\n} from \"./budget.ts\";\nimport { awaitQuotaReset, pauseForQuota } from \"./quota-pause.ts\";\nimport { retryDelay, waitForRetry } from \"./retry.ts\";\nimport { lookupTaskCache, storeTaskCache } from \"./task-cache.ts\";\nimport { quotaFault } from \"../quota.ts\";\nimport { OutpostError } from \"../errors.ts\";\nimport type { Task, WorkflowExecutionState } from \"../workflow.types.ts\";\nimport type { TaskCacheLookup } from \"./task-cache.types.ts\";\n\nexport async function runTask(\n item: Task,\n runtime: WorkflowExecutionState,\n): Promise<void> {\n const {\n record,\n signal,\n context,\n emit,\n finish,\n errors,\n options,\n stop,\n values,\n } = runtime;\n const state = record(item);\n if (state.quota && !(await awaitQuotaReset(item, runtime, true))) return;\n state.status = \"active\";\n delete state.error;\n delete state.finishedAt;\n delete state.cacheHit;\n state.startedAt = new Date().toISOString();\n emit({ type: \"task\", key: item.key, status: \"active\", attempt: 0 });\n try {\n await runtime.persist();\n signal.throwIfAborted();\n if (item.condition && !(await item.condition(context(item, 0, signal)))) {\n signal.throwIfAborted();\n finish(item, \"skipped\");\n return;\n }\n const cache = item.cache\n ? await lookupTaskCache(item, item.cache, runtime)\n : undefined;\n if (cache?.hit) {\n values.set(item, cache.value);\n state.cacheHit = true;\n finish(item, \"done\");\n return;\n }\n while (true) {\n try {\n await perform(item, runtime, cache);\n return;\n } catch (error) {\n if (!(await pauseForQuota(item, runtime, error))) throw error;\n if (!(await awaitQuotaReset(item, runtime, false))) return;\n state.status = \"active\";\n delete state.finishedAt;\n emit({ type: \"task\", key: item.key, status: \"active\", attempt: 0 });\n await runtime.persist();\n }\n }\n } catch (error) {\n state.error = error instanceof Error ? error.message : String(error);\n if (\n signal.aborted ||\n ((error instanceof WorkflowBudgetExceeded ||\n error instanceof WorkflowUsageUnavailable ||\n error instanceof WorkflowCostUnavailable) &&\n runtime.accounting.exhausted)\n )\n finish(item, \"cancelled\");\n else {\n errors.push(error);\n finish(item, \"failed\");\n if (options.stopOnError !== false) stop.abort(error);\n }\n } finally {\n await runtime.persist();\n }\n}\n\nasync function complete(\n item: Task,\n runtime: WorkflowExecutionState,\n cache: TaskCacheLookup | undefined,\n value: unknown,\n): Promise<void> {\n if (item.cache && cache && !cache.hit)\n await storeTaskCache(item, item.cache, runtime, cache.fingerprint, value);\n runtime.values.set(item, value);\n runtime.finish(item, \"done\");\n}\n\nasync function perform(\n item: Task,\n runtime: WorkflowExecutionState,\n cache: TaskCacheLookup | undefined,\n): Promise<void> {\n const { record, signal, context, emit, finish, options } = runtime;\n const state = record(item);\n const loop = loopDefinition(item);\n if (loop) {\n const value = await runLoopTask(item, loop, runtime);\n signal.throwIfAborted();\n await complete(item, runtime, cache, value);\n return;\n }\n const limit = item.retry?.attempts ?? 1;\n const priorAttempts = state.attempts;\n for (let cycle = 1; cycle <= limit; cycle++) {\n const attempt = priorAttempts + cycle;\n signal.throwIfAborted();\n runtime.accounting.admit();\n state.attempts = attempt;\n emit({ type: \"attempt\", key: item.key, attempt });\n await runtime.persist();\n let delayMs = 0;\n let completed = false;\n let value: unknown;\n const deadline = new AbortController();\n const timer =\n item.timeoutMs === undefined\n ? undefined\n : setTimeout(\n () =>\n deadline.abort(\n new OutpostError(\"timeout\", `${item.key} timed out`, {\n key: item.key,\n timeoutMs: item.timeoutMs,\n }),\n ),\n item.timeoutMs,\n );\n const taskSignal = AbortSignal.any([signal, deadline.signal]);\n try {\n taskSignal.throwIfAborted();\n value = await item.perform(context(item, attempt, taskSignal));\n taskSignal.throwIfAborted();\n if (options.checkpoint) checkpointValue(value);\n completed = true;\n } catch (error) {\n runtime.closeAttempt(item);\n if (error instanceof InputSuspension && item.interaction) {\n state.interaction = error.interaction;\n finish(item, \"waiting-input\");\n emit({\n type: \"input-request\",\n key: item.key,\n status: \"waiting-input\",\n });\n return;\n }\n if (\n signal.aborted ||\n cycle === limit ||\n (options.onQuota && quotaFault(error)) ||\n item.retry?.accepts?.(error, attempt) === false\n )\n throw deadline.signal.aborted ? deadline.signal.reason : error;\n delayMs = retryDelay(item.retry, cycle, error);\n emit({ type: \"retry\", key: item.key, attempt, delayMs });\n } finally {\n runtime.closeAttempt(item);\n clearTimeout(timer);\n }\n if (completed) {\n await complete(item, runtime, cache, value);\n return;\n }\n await waitForRetry(delayMs, signal);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/domain/workflow/task-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { InputSuspension } from \"./input.ts\";\nimport { loopDefinition } from \"./loop-task.ts\";\nimport { runLoopTask } from \"./loop-runner.ts\";\nimport { checkpointValue } from \"./checkpoint-value.ts\";\nimport {\n WorkflowBudgetExceeded,\n WorkflowUsageUnavailable,\n WorkflowCostUnavailable,\n} from \"./budget.ts\";\nimport { awaitQuotaReset, pauseForQuota } from \"./quota-pause.ts\";\nimport { retryDelay, waitForRetry } from \"./retry.ts\";\nimport { lookupTaskCache, storeTaskCache } from \"./task-cache.ts\";\nimport { quotaFault } from \"../quota.ts\";\nimport { OutpostError } from \"../errors.ts\";\nimport type { Task, WorkflowExecutionState } from \"../workflow.types.ts\";\nimport type { TaskCacheLookup } from \"./task-cache.types.ts\";\n\nexport async function runTask(\n item: Task,\n runtime: WorkflowExecutionState,\n): Promise<void> {\n const {\n record,\n signal,\n context,\n emit,\n finish,\n errors,\n options,\n stop,\n values,\n } = runtime;\n const state = record(item);\n if (state.quota && !(await awaitQuotaReset(item, runtime, true))) return;\n state.status = \"active\";\n delete state.error;\n delete state.finishedAt;\n delete state.cacheHit;\n state.startedAt = new Date().toISOString();\n emit({ type: \"task\", key: item.key, status: \"active\", attempt: 0 });\n try {\n await runtime.persist();\n signal.throwIfAborted();\n if (item.condition && !(await item.condition(context(item, 0, signal)))) {\n signal.throwIfAborted();\n finish(item, \"skipped\");\n return;\n }\n const cache =\n item.cache && state.attempts === 0 && state.rounds === undefined\n ? await lookupTaskCache(item, item.cache, runtime)\n : undefined;\n if (cache?.hit) {\n values.set(item, cache.value);\n state.cacheHit = true;\n finish(item, \"done\");\n return;\n }\n while (true) {\n try {\n await perform(item, runtime, cache);\n return;\n } catch (error) {\n if (!(await pauseForQuota(item, runtime, error))) throw error;\n if (!(await awaitQuotaReset(item, runtime, false))) return;\n state.status = \"active\";\n delete state.finishedAt;\n emit({ type: \"task\", key: item.key, status: \"active\", attempt: 0 });\n await runtime.persist();\n }\n }\n } catch (error) {\n state.error = error instanceof Error ? error.message : String(error);\n if (\n signal.aborted ||\n ((error instanceof WorkflowBudgetExceeded ||\n error instanceof WorkflowUsageUnavailable ||\n error instanceof WorkflowCostUnavailable) &&\n runtime.accounting.exhausted)\n )\n finish(item, \"cancelled\");\n else {\n errors.push(error);\n finish(item, \"failed\");\n if (options.stopOnError !== false) stop.abort(error);\n }\n } finally {\n await runtime.persist();\n }\n}\n\nasync function complete(\n item: Task,\n runtime: WorkflowExecutionState,\n cache: TaskCacheLookup | undefined,\n value: unknown,\n): Promise<void> {\n if (runtime.options.checkpoint) {\n checkpointValue(value);\n value = structuredClone(value);\n }\n if (item.cache && cache && !cache.hit)\n await storeTaskCache(item, item.cache, runtime, cache.fingerprint, value);\n runtime.values.set(item, value);\n runtime.finish(item, \"done\");\n}\n\nasync function perform(\n item: Task,\n runtime: WorkflowExecutionState,\n cache: TaskCacheLookup | undefined,\n): Promise<void> {\n const { record, signal, context, emit, finish, options } = runtime;\n const state = record(item);\n const loop = loopDefinition(item);\n if (loop) {\n const value = await runLoopTask(item, loop, runtime);\n signal.throwIfAborted();\n await complete(item, runtime, cache, value);\n return;\n }\n const limit = item.retry?.attempts ?? 1;\n const priorAttempts = state.attempts;\n for (let cycle = 1; cycle <= limit; cycle++) {\n const attempt = priorAttempts + cycle;\n signal.throwIfAborted();\n runtime.accounting.admit();\n state.attempts = attempt;\n emit({ type: \"attempt\", key: item.key, attempt });\n await runtime.persist();\n let delayMs = 0;\n let completed = false;\n let value: unknown;\n const deadline = new AbortController();\n const timer =\n item.timeoutMs === undefined\n ? undefined\n : setTimeout(\n () =>\n deadline.abort(\n new OutpostError(\"timeout\", `${item.key} timed out`, {\n key: item.key,\n timeoutMs: item.timeoutMs,\n }),\n ),\n item.timeoutMs,\n );\n const taskSignal = AbortSignal.any([signal, deadline.signal]);\n try {\n taskSignal.throwIfAborted();\n value = await item.perform(context(item, attempt, taskSignal));\n taskSignal.throwIfAborted();\n completed = true;\n } catch (error) {\n runtime.closeAttempt(item);\n if (error instanceof InputSuspension && item.interaction) {\n state.interaction = error.interaction;\n finish(item, \"waiting-input\");\n emit({\n type: \"input-request\",\n key: item.key,\n status: \"waiting-input\",\n });\n return;\n }\n if (\n signal.aborted ||\n cycle === limit ||\n (options.onQuota && quotaFault(error)) ||\n item.retry?.accepts?.(error, attempt) === false\n )\n throw deadline.signal.aborted ? deadline.signal.reason : error;\n delayMs = retryDelay(item.retry, cycle, error);\n emit({ type: \"retry\", key: item.key, attempt, delayMs });\n } finally {\n runtime.closeAttempt(item);\n clearTimeout(timer);\n }\n if (completed) {\n await complete(item, runtime, cache, value);\n return;\n }\n await waitForRetry(delayMs, signal);\n }\n}\n"]}
|
|
@@ -203,7 +203,8 @@ export function workflowState(name, tasks, options, checkpoint) {
|
|
|
203
203
|
throw new Error(`${item.key}: undeclared dependency ${dependency.key}`);
|
|
204
204
|
if (!values.has(dependency))
|
|
205
205
|
throw new Error(`${dependency.key} has no successful value`);
|
|
206
|
-
|
|
206
|
+
const value = values.get(dependency);
|
|
207
|
+
return checkpoint ? structuredClone(value) : value;
|
|
207
208
|
},
|
|
208
209
|
};
|
|
209
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../../src/domain/workflow/workflow-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { interactionContext, immutableInput } from \"./input.ts\";\nimport { checkpointValue } from \"./checkpoint-value.ts\";\nimport { taskIdempotencyKey } from \"./idempotency.ts\";\nimport { createObservationHub } from \"../observation.ts\";\nimport { maxUsageReceiptsPerTask } from \"./usage-receipt.constants.ts\";\nimport { validateUsageReceipt } from \"./usage-receipt.ts\";\nimport type { Usage } from \"../agent.types.ts\";\nimport type { WorkflowCheckpointSession } from \"./checkpoint.types.ts\";\nimport type { WorkflowQuotaPause } from \"./quota-pause.types.ts\";\nimport { workflowAccounting } from \"./budget.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { OutpostError } from \"../errors.ts\";\nimport type {\n Task,\n TaskContext,\n TaskRecord,\n TaskStatus,\n WorkflowEvent,\n WorkflowExecutionState,\n WorkflowOptions,\n} from \"../workflow.types.ts\";\n\nexport function workflowState(\n name: string,\n tasks: readonly Task[],\n options: WorkflowOptions,\n checkpoint?: WorkflowCheckpointSession,\n): WorkflowExecutionState {\n const executionId = checkpoint?.initial?.executionId ?? randomUUID();\n const observation = (options.observation ?? createObservationHub()).child(\n { executionId },\n [\n {\n observe(value) {\n if (value.event.kind === \"workflow\")\n return options.telemetry?.observe(value.event.event);\n },\n },\n {\n observe(value) {\n if (value.event.kind === \"workflow\")\n return options.observe?.(value.event.event);\n },\n },\n ],\n options.redact,\n );\n const stop = new AbortController();\n const signal = options.signal\n ? AbortSignal.any([options.signal, stop.signal])\n : stop.signal;\n const values = new Map<Task, unknown>();\n const activeAttempts = new Map<Task, number>();\n const quotaResumes = new Map<Task, WorkflowQuotaPause>();\n const records = new Map<Task, TaskRecord>(\n tasks.map((item) => [\n item,\n { key: item.key, status: \"waiting\", attempts: 0 },\n ]),\n );\n const saved = checkpoint?.initial;\n if (saved) {\n const complete = saved.records.every((entry) =>\n [\"done\", \"skipped\"].includes(entry.status),\n );\n const settledPause =\n saved.records.some((entry) =>\n [\"paused\", \"rejected\", \"waiting-input\"].includes(entry.status),\n ) &&\n saved.records.every(\n (entry) =>\n [\"done\", \"skipped\", \"paused\", \"rejected\", \"waiting-input\"].includes(\n entry.status,\n ) ||\n (entry.status === \"waiting\" && entry.attempts === 0),\n );\n for (const item of tasks) {\n const entry = saved.records.find((entry) => entry.key === item.key)!;\n records.set(item, {\n ...entry,\n ...(entry.interaction\n ? { interaction: immutableInput(entry.interaction) }\n : {}),\n ...(entry.usageReceipts\n ? { usageReceipts: Object.freeze([...entry.usageReceipts]) }\n : {}),\n ...(entry.pause\n ? {\n pause: Object.freeze({\n ...entry.pause,\n actors: Object.freeze([...entry.pause.actors]),\n }),\n }\n : {}),\n ...(entry.decision\n ? { decision: Object.freeze({ ...entry.decision }) }\n : {}),\n ...(entry.quota ? { quota: Object.freeze({ ...entry.quota }) } : {}),\n status:\n [\"done\", \"paused\", \"rejected\", \"waiting-input\"].includes(\n entry.status,\n ) ||\n complete ||\n (settledPause && entry.status === \"skipped\")\n ? entry.status\n : \"waiting\",\n });\n if (entry.status === \"done\") {\n const output = saved.values[item.key]!;\n values.set(item, output.kind === \"json\" ? output.value : undefined);\n }\n }\n }\n const errors: unknown[] = [],\n observerErrors: unknown[] = [];\n for (const entry of records.values())\n if (entry.status === \"rejected\")\n errors.push(\n new OutpostError(\"rejected\", entry.error!, {\n key: entry.key,\n actor: entry.decision!.actor,\n reason: entry.decision!.reason,\n }),\n );\n const accounting = workflowAccounting(\n options.budget,\n (error) => {\n errors.push(error);\n emit({ type: \"budget-exceeded\" });\n if (error.dimension !== \"attempts\") stop.abort(error);\n },\n saved?.usage,\n );\n const record = (item: Task) => records.get(item)!;\n function emit(\n event: Omit<WorkflowEvent, \"executionId\" | \"workflow\" | \"timestamp\">,\n ): void {\n const notification: WorkflowEvent = {\n ...event,\n accounting: accounting.snapshot(),\n ...([\"start\", \"finish\"].includes(event.type)\n ? { tasks: [...records.values()].map((record) => ({ ...record })) }\n : {}),\n executionId,\n workflow: name,\n timestamp: new Date().toISOString(),\n };\n observation\n .child({\n ...(event.key ? { taskKey: event.key } : {}),\n ...(event.attempt === undefined ? {} : { attempt: event.attempt }),\n })\n .emit(\"workflow\", { kind: \"workflow\", event: notification });\n }\n function finish(item: Task, status: TaskStatus): void {\n Object.assign(record(item), {\n status,\n finishedAt: new Date().toISOString(),\n });\n emit({\n type: \"task\",\n key: item.key,\n status,\n attempt: record(item).attempts,\n ...(record(item).error ? { error: record(item).error } : {}),\n ...(record(item).startedAt\n ? { durationMs: Date.now() - Date.parse(record(item).startedAt!) }\n : {}),\n });\n }\n function context(\n item: Task,\n attempt: number,\n taskSignal: AbortSignal,\n ): TaskContext {\n if (attempt > 0) activeAttempts.set(item, attempt);\n function report(usage: Usage, receipt?: string): void {\n const current = record(item);\n if (\n attempt === 0 ||\n current.status !== \"active\" ||\n activeAttempts.get(item) !== attempt\n )\n throw new Error(\n \"Usage must be reported during its active task attempt\",\n );\n if (receipt !== undefined) {\n validateUsageReceipt(receipt);\n if (current.usageReceipts?.includes(receipt)) return;\n if ((current.usageReceipts?.length ?? 0) >= maxUsageReceiptsPerTask)\n throw new Error(\"Workflow usage receipt limit exceeded\");\n }\n const previousReceipts = current.usageReceipts;\n if (receipt !== undefined)\n current.usageReceipts = Object.freeze([\n ...(previousReceipts ?? []),\n receipt,\n ]);\n try {\n accounting.report(usage);\n } catch (error) {\n if (previousReceipts) current.usageReceipts = previousReceipts;\n else delete current.usageReceipts;\n throw error;\n }\n void runtime.persist().catch((error: unknown) => stop.abort(error));\n emit({\n type: \"usage\",\n key: item.key,\n attempt,\n usage: Object.freeze({ ...usage }),\n });\n }\n\n return {\n ...(item.interaction\n ? {\n interaction: interactionContext(\n item,\n runtime,\n attempt,\n taskSignal,\n () => activeAttempts.get(item) === attempt,\n ),\n }\n : {}),\n ...(attempt > 0 && quotaResumes.has(item)\n ? { quota: quotaResumes.get(item)! }\n : {}),\n ...(options.budget?.prices ? { prices: options.budget.prices } : {}),\n observation: observation.child({ taskKey: item.key, attempt }),\n signal: taskSignal,\n attempt,\n executionId,\n idempotencyKey: taskIdempotencyKey(executionId, item.key),\n checkpoint: () => runtime.persist(),\n ...(checkpoint?.workspaceResources\n ? {\n workspaceCheckpoint: {\n read: (key: string) => checkpoint.workspaceResources?.get(key),\n async write(\n key: string,\n description: import(\"./checkpoint.types.ts\").WorkflowJson,\n ) {\n if (!key.trim())\n throw new Error(\n \"Workspace checkpoint resource key must not be empty\",\n );\n checkpointValue(description);\n checkpoint.workspaceResources?.set(key, description);\n await runtime.persist();\n },\n },\n }\n : {}),\n reportUsage: (usage) => report(usage),\n reportUsageOnce: (receipt, usage) => {\n validateUsageReceipt(receipt);\n report(usage, receipt);\n },\n value<T>(dependency: Task<T>): T {\n if (!item.after.includes(dependency))\n throw new Error(\n `${item.key}: undeclared dependency ${dependency.key}`,\n );\n if (!values.has(dependency))\n throw new Error(`${dependency.key} has no successful value`);\n return values.get(dependency) as T;\n },\n };\n }\n\n const runtime: WorkflowExecutionState = {\n workflow: name,\n observation,\n async persist() {\n await checkpoint?.save(runtime);\n if (checkpoint) emit({ type: \"checkpoint\" });\n },\n executionId,\n accounting,\n closeAttempt(item) {\n activeAttempts.delete(item);\n quotaResumes.delete(item);\n },\n quotaResumes,\n stop,\n signal,\n values,\n records,\n errors,\n observerErrors,\n record,\n emit,\n finish,\n context,\n options,\n };\n return runtime;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow-state.js","sourceRoot":"","sources":["../../../src/domain/workflow/workflow-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { interactionContext, immutableInput } from \"./input.ts\";\nimport { checkpointValue } from \"./checkpoint-value.ts\";\nimport { taskIdempotencyKey } from \"./idempotency.ts\";\nimport { createObservationHub } from \"../observation.ts\";\nimport { maxUsageReceiptsPerTask } from \"./usage-receipt.constants.ts\";\nimport { validateUsageReceipt } from \"./usage-receipt.ts\";\nimport type { Usage } from \"../agent.types.ts\";\nimport type { WorkflowCheckpointSession } from \"./checkpoint.types.ts\";\nimport type { WorkflowQuotaPause } from \"./quota-pause.types.ts\";\nimport { workflowAccounting } from \"./budget.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { OutpostError } from \"../errors.ts\";\nimport type {\n Task,\n TaskContext,\n TaskRecord,\n TaskStatus,\n WorkflowEvent,\n WorkflowExecutionState,\n WorkflowOptions,\n} from \"../workflow.types.ts\";\n\nexport function workflowState(\n name: string,\n tasks: readonly Task[],\n options: WorkflowOptions,\n checkpoint?: WorkflowCheckpointSession,\n): WorkflowExecutionState {\n const executionId = checkpoint?.initial?.executionId ?? randomUUID();\n const observation = (options.observation ?? createObservationHub()).child(\n { executionId },\n [\n {\n observe(value) {\n if (value.event.kind === \"workflow\")\n return options.telemetry?.observe(value.event.event);\n },\n },\n {\n observe(value) {\n if (value.event.kind === \"workflow\")\n return options.observe?.(value.event.event);\n },\n },\n ],\n options.redact,\n );\n const stop = new AbortController();\n const signal = options.signal\n ? AbortSignal.any([options.signal, stop.signal])\n : stop.signal;\n const values = new Map<Task, unknown>();\n const activeAttempts = new Map<Task, number>();\n const quotaResumes = new Map<Task, WorkflowQuotaPause>();\n const records = new Map<Task, TaskRecord>(\n tasks.map((item) => [\n item,\n { key: item.key, status: \"waiting\", attempts: 0 },\n ]),\n );\n const saved = checkpoint?.initial;\n if (saved) {\n const complete = saved.records.every((entry) =>\n [\"done\", \"skipped\"].includes(entry.status),\n );\n const settledPause =\n saved.records.some((entry) =>\n [\"paused\", \"rejected\", \"waiting-input\"].includes(entry.status),\n ) &&\n saved.records.every(\n (entry) =>\n [\"done\", \"skipped\", \"paused\", \"rejected\", \"waiting-input\"].includes(\n entry.status,\n ) ||\n (entry.status === \"waiting\" && entry.attempts === 0),\n );\n for (const item of tasks) {\n const entry = saved.records.find((entry) => entry.key === item.key)!;\n records.set(item, {\n ...entry,\n ...(entry.interaction\n ? { interaction: immutableInput(entry.interaction) }\n : {}),\n ...(entry.usageReceipts\n ? { usageReceipts: Object.freeze([...entry.usageReceipts]) }\n : {}),\n ...(entry.pause\n ? {\n pause: Object.freeze({\n ...entry.pause,\n actors: Object.freeze([...entry.pause.actors]),\n }),\n }\n : {}),\n ...(entry.decision\n ? { decision: Object.freeze({ ...entry.decision }) }\n : {}),\n ...(entry.quota ? { quota: Object.freeze({ ...entry.quota }) } : {}),\n status:\n [\"done\", \"paused\", \"rejected\", \"waiting-input\"].includes(\n entry.status,\n ) ||\n complete ||\n (settledPause && entry.status === \"skipped\")\n ? entry.status\n : \"waiting\",\n });\n if (entry.status === \"done\") {\n const output = saved.values[item.key]!;\n values.set(item, output.kind === \"json\" ? output.value : undefined);\n }\n }\n }\n const errors: unknown[] = [],\n observerErrors: unknown[] = [];\n for (const entry of records.values())\n if (entry.status === \"rejected\")\n errors.push(\n new OutpostError(\"rejected\", entry.error!, {\n key: entry.key,\n actor: entry.decision!.actor,\n reason: entry.decision!.reason,\n }),\n );\n const accounting = workflowAccounting(\n options.budget,\n (error) => {\n errors.push(error);\n emit({ type: \"budget-exceeded\" });\n if (error.dimension !== \"attempts\") stop.abort(error);\n },\n saved?.usage,\n );\n const record = (item: Task) => records.get(item)!;\n function emit(\n event: Omit<WorkflowEvent, \"executionId\" | \"workflow\" | \"timestamp\">,\n ): void {\n const notification: WorkflowEvent = {\n ...event,\n accounting: accounting.snapshot(),\n ...([\"start\", \"finish\"].includes(event.type)\n ? { tasks: [...records.values()].map((record) => ({ ...record })) }\n : {}),\n executionId,\n workflow: name,\n timestamp: new Date().toISOString(),\n };\n observation\n .child({\n ...(event.key ? { taskKey: event.key } : {}),\n ...(event.attempt === undefined ? {} : { attempt: event.attempt }),\n })\n .emit(\"workflow\", { kind: \"workflow\", event: notification });\n }\n function finish(item: Task, status: TaskStatus): void {\n Object.assign(record(item), {\n status,\n finishedAt: new Date().toISOString(),\n });\n emit({\n type: \"task\",\n key: item.key,\n status,\n attempt: record(item).attempts,\n ...(record(item).error ? { error: record(item).error } : {}),\n ...(record(item).startedAt\n ? { durationMs: Date.now() - Date.parse(record(item).startedAt!) }\n : {}),\n });\n }\n function context(\n item: Task,\n attempt: number,\n taskSignal: AbortSignal,\n ): TaskContext {\n if (attempt > 0) activeAttempts.set(item, attempt);\n function report(usage: Usage, receipt?: string): void {\n const current = record(item);\n if (\n attempt === 0 ||\n current.status !== \"active\" ||\n activeAttempts.get(item) !== attempt\n )\n throw new Error(\n \"Usage must be reported during its active task attempt\",\n );\n if (receipt !== undefined) {\n validateUsageReceipt(receipt);\n if (current.usageReceipts?.includes(receipt)) return;\n if ((current.usageReceipts?.length ?? 0) >= maxUsageReceiptsPerTask)\n throw new Error(\"Workflow usage receipt limit exceeded\");\n }\n const previousReceipts = current.usageReceipts;\n if (receipt !== undefined)\n current.usageReceipts = Object.freeze([\n ...(previousReceipts ?? []),\n receipt,\n ]);\n try {\n accounting.report(usage);\n } catch (error) {\n if (previousReceipts) current.usageReceipts = previousReceipts;\n else delete current.usageReceipts;\n throw error;\n }\n void runtime.persist().catch((error: unknown) => stop.abort(error));\n emit({\n type: \"usage\",\n key: item.key,\n attempt,\n usage: Object.freeze({ ...usage }),\n });\n }\n\n return {\n ...(item.interaction\n ? {\n interaction: interactionContext(\n item,\n runtime,\n attempt,\n taskSignal,\n () => activeAttempts.get(item) === attempt,\n ),\n }\n : {}),\n ...(attempt > 0 && quotaResumes.has(item)\n ? { quota: quotaResumes.get(item)! }\n : {}),\n ...(options.budget?.prices ? { prices: options.budget.prices } : {}),\n observation: observation.child({ taskKey: item.key, attempt }),\n signal: taskSignal,\n attempt,\n executionId,\n idempotencyKey: taskIdempotencyKey(executionId, item.key),\n checkpoint: () => runtime.persist(),\n ...(checkpoint?.workspaceResources\n ? {\n workspaceCheckpoint: {\n read: (key: string) => checkpoint.workspaceResources?.get(key),\n async write(\n key: string,\n description: import(\"./checkpoint.types.ts\").WorkflowJson,\n ) {\n if (!key.trim())\n throw new Error(\n \"Workspace checkpoint resource key must not be empty\",\n );\n checkpointValue(description);\n checkpoint.workspaceResources?.set(key, description);\n await runtime.persist();\n },\n },\n }\n : {}),\n reportUsage: (usage) => report(usage),\n reportUsageOnce: (receipt, usage) => {\n validateUsageReceipt(receipt);\n report(usage, receipt);\n },\n value<T>(dependency: Task<T>): T {\n if (!item.after.includes(dependency))\n throw new Error(\n `${item.key}: undeclared dependency ${dependency.key}`,\n );\n if (!values.has(dependency))\n throw new Error(`${dependency.key} has no successful value`);\n const value = values.get(dependency) as T;\n return checkpoint ? structuredClone(value) : value;\n },\n };\n }\n\n const runtime: WorkflowExecutionState = {\n workflow: name,\n observation,\n async persist() {\n await checkpoint?.save(runtime);\n if (checkpoint) emit({ type: \"checkpoint\" });\n },\n executionId,\n accounting,\n closeAttempt(item) {\n activeAttempts.delete(item);\n quotaResumes.delete(item);\n },\n quotaResumes,\n stop,\n signal,\n values,\n records,\n errors,\n observerErrors,\n record,\n emit,\n finish,\n context,\n options,\n };\n return runtime;\n}\n"]}
|
|
@@ -30,6 +30,7 @@ export interface Retry {
|
|
|
30
30
|
readonly delayMs?: number;
|
|
31
31
|
readonly backoff?: "fixed" | "exponential";
|
|
32
32
|
readonly maxDelayMs?: number;
|
|
33
|
+
readonly maxRetryAfterMs?: number;
|
|
33
34
|
readonly jitter?: "none" | "full";
|
|
34
35
|
readonly accepts?: (error: unknown, attempt: number) => boolean;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.types.js","sourceRoot":"","sources":["../../src/domain/workflow.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ModelPriceTable } from \"./pricing.types.ts\";\nimport type {\n TaskInteraction,\n TaskInteractionContext,\n TaskInteractionRecord,\n WorkflowAnswer,\n WorkflowInputRequest,\n} from \"./workflow/input.types.ts\";\nimport type { LoopRoundRecord } from \"./workflow/loop-task.types.ts\";\nimport type {\n WorkflowQuotaPause,\n WorkflowQuotaPolicy,\n} from \"./workflow/quota-pause.types.ts\";\nimport type { ObservationHub } from \"./observation.types.ts\";\nimport type {\n WorkflowDecision,\n WorkflowDecisionVerifier,\n WorkflowDecisionRecord,\n WorkflowGate,\n WorkflowPauseRequest,\n} from \"./workflow/gates.types.ts\";\nimport type { WorkflowCheckpointOptions } from \"./workflow/checkpoint.types.ts\";\nimport type {\n TaskCacheOptions,\n TaskCacheOutcome,\n} from \"./workflow/task-cache.types.ts\";\nimport type { Usage } from \"./agent.types.ts\";\nimport type { FaultCode } from \"./errors.types.ts\";\nimport type {\n WorkflowAccounting,\n WorkflowBudget,\n WorkflowUsage,\n} from \"./workflow/budget.types.ts\";\n\nexport interface TaskContext {\n readonly workspaceCheckpoint?: import(\"./workflow/checkpoint.types.ts\").TaskWorkspaceCheckpoint;\n readonly prices?: ModelPriceTable;\n /** Quota pause resumed by this attempt; present only on the first attempt after it. */\n readonly quota?: WorkflowQuotaPause;\n readonly interaction?: TaskInteractionContext;\n readonly idempotencyKey: string;\n readonly observation?: ObservationHub;\n readonly signal: AbortSignal;\n readonly attempt: number;\n readonly executionId: string;\n reportUsage(usage: Usage): void;\n reportUsageOnce?(receipt: string, usage: Usage): void;\n checkpoint?(): Promise<void>;\n value<T>(dependency: Task<T>): T;\n}\n\nexport interface Retry {\n readonly attempts: number;\n readonly delayMs?: number;\n readonly backoff?: \"fixed\" | \"exponential\";\n readonly maxDelayMs?: number;\n readonly jitter?: \"none\" | \"full\";\n readonly accepts?: (error: unknown, attempt: number) => boolean;\n}\n\nexport interface Task<T = unknown> {\n readonly interaction?: TaskInteraction;\n readonly key: string;\n readonly gate?: WorkflowGate;\n readonly after: readonly Task[];\n readonly perform: (context: TaskContext) => T | Promise<T>;\n readonly condition?: (context: TaskContext) => boolean | Promise<boolean>;\n readonly retry?: Retry;\n readonly timeoutMs?: number;\n readonly cache?: TaskCacheOptions;\n}\n\nexport type TaskOptions<T> = Omit<Task<T>, \"after\"> & {\n readonly after?: readonly Task[];\n};\n\nexport type TaskStatus =\n | \"waiting-input\"\n | \"waiting\"\n | \"active\"\n | \"done\"\n | \"failed\"\n | \"skipped\"\n | \"cancelled\"\n | \"paused\"\n | \"rejected\";\n\nexport interface TaskRecord {\n cacheHit?: true;\n quota?: WorkflowQuotaPause;\n interaction?: TaskInteractionRecord;\n rounds?: readonly LoopRoundRecord[];\n usageReceipts?: readonly string[];\n pause?: WorkflowPauseRequest;\n decision?: WorkflowDecisionRecord;\n readonly key: string;\n status: TaskStatus;\n attempts: number;\n startedAt?: string;\n finishedAt?: string;\n error?: string;\n}\n\nexport interface WorkflowEvent {\n readonly tasks?: readonly Readonly<TaskRecord>[];\n readonly accounting?: WorkflowUsage;\n readonly terminationCode?: WorkflowTerminationCode;\n readonly executionId: string;\n readonly workflow: string;\n readonly timestamp: string;\n readonly type:\n | \"cache\"\n | \"quota\"\n | \"input-request\"\n | \"input-answer\"\n | \"loop\"\n | \"start\"\n | \"task\"\n | \"attempt\"\n | \"retry\"\n | \"usage\"\n | \"finish\"\n | \"gate\"\n | \"decision\"\n | \"checkpoint\"\n | \"resume\"\n | \"budget-exceeded\";\n readonly cache?: TaskCacheOutcome;\n readonly error?: string;\n readonly resetAt?: string;\n readonly round?: number;\n readonly phase?: \"attempt\" | \"check\" | \"complete\";\n readonly key?: string;\n readonly status?: TaskStatus;\n readonly attempt?: number;\n readonly usage?: Usage;\n readonly durationMs?: number;\n readonly delayMs?: number;\n}\n\nexport interface WorkflowTelemetry {\n observe(event: WorkflowEvent): void;\n}\n\nexport interface WorkflowOptions {\n readonly redact?: readonly RegExp[];\n readonly onQuota?: WorkflowQuotaPolicy;\n readonly answers?: readonly WorkflowAnswer[];\n readonly timeoutMs?: number;\n readonly observation?: ObservationHub;\n readonly decisionVerifier?: WorkflowDecisionVerifier;\n readonly decisions?: readonly WorkflowDecision[];\n readonly checkpoint?: WorkflowCheckpointOptions;\n readonly signal?: AbortSignal;\n readonly concurrency?: number;\n readonly budget?: WorkflowBudget;\n readonly stopOnError?: boolean;\n readonly telemetry?: WorkflowTelemetry;\n readonly observe?: (event: WorkflowEvent) => void;\n}\n\nexport type WorkflowTerminationCode =\n FaultCode | \"failed\" | \"usage-unavailable\";\n\nexport interface WorkflowResult {\n readonly terminationCode?: WorkflowTerminationCode;\n readonly inputRequests: readonly WorkflowInputRequest[];\n readonly executionId: string;\n readonly name: string;\n readonly status:\n \"done\" | \"failed\" | \"cancelled\" | \"paused\" | \"waiting-input\" | \"rejected\";\n readonly tasks: readonly Readonly<TaskRecord>[];\n readonly errors: readonly unknown[];\n readonly observerErrors: readonly unknown[];\n readonly usage: WorkflowUsage;\n value<T>(task: Task<T>): T;\n unwrap(): void;\n}\n\nexport interface Workflow {\n readonly name: string;\n readonly tasks: readonly Task[];\n start(options?: WorkflowOptions): Promise<WorkflowResult>;\n diagram(): string;\n}\n\nexport type WorkflowNotification = Omit<\n WorkflowEvent,\n \"executionId\" | \"workflow\" | \"timestamp\"\n>;\nexport interface WorkflowExecutionState {\n readonly workflow: string;\n readonly observation: ObservationHub;\n readonly executionId: string;\n readonly stop: AbortController;\n readonly signal: AbortSignal;\n readonly values: Map<Task, unknown>;\n readonly records: Map<Task, TaskRecord>;\n readonly errors: unknown[];\n readonly observerErrors: unknown[];\n readonly options: WorkflowOptions;\n readonly accounting: WorkflowAccounting;\n readonly quotaResumes: Map<Task, WorkflowQuotaPause>;\n persist(): Promise<void>;\n closeAttempt(task: Task): void;\n record(task: Task): TaskRecord;\n emit(event: WorkflowNotification): void;\n finish(task: Task, status: TaskStatus): void;\n context(task: Task, attempt: number, signal: AbortSignal): TaskContext;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow.types.js","sourceRoot":"","sources":["../../src/domain/workflow.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ModelPriceTable } from \"./pricing.types.ts\";\nimport type {\n TaskInteraction,\n TaskInteractionContext,\n TaskInteractionRecord,\n WorkflowAnswer,\n WorkflowInputRequest,\n} from \"./workflow/input.types.ts\";\nimport type { LoopRoundRecord } from \"./workflow/loop-task.types.ts\";\nimport type {\n WorkflowQuotaPause,\n WorkflowQuotaPolicy,\n} from \"./workflow/quota-pause.types.ts\";\nimport type { ObservationHub } from \"./observation.types.ts\";\nimport type {\n WorkflowDecision,\n WorkflowDecisionVerifier,\n WorkflowDecisionRecord,\n WorkflowGate,\n WorkflowPauseRequest,\n} from \"./workflow/gates.types.ts\";\nimport type { WorkflowCheckpointOptions } from \"./workflow/checkpoint.types.ts\";\nimport type {\n TaskCacheOptions,\n TaskCacheOutcome,\n} from \"./workflow/task-cache.types.ts\";\nimport type { Usage } from \"./agent.types.ts\";\nimport type { FaultCode } from \"./errors.types.ts\";\nimport type {\n WorkflowAccounting,\n WorkflowBudget,\n WorkflowUsage,\n} from \"./workflow/budget.types.ts\";\n\nexport interface TaskContext {\n readonly workspaceCheckpoint?: import(\"./workflow/checkpoint.types.ts\").TaskWorkspaceCheckpoint;\n readonly prices?: ModelPriceTable;\n /** Quota pause resumed by this attempt; present only on the first attempt after it. */\n readonly quota?: WorkflowQuotaPause;\n readonly interaction?: TaskInteractionContext;\n readonly idempotencyKey: string;\n readonly observation?: ObservationHub;\n readonly signal: AbortSignal;\n readonly attempt: number;\n readonly executionId: string;\n reportUsage(usage: Usage): void;\n reportUsageOnce?(receipt: string, usage: Usage): void;\n checkpoint?(): Promise<void>;\n value<T>(dependency: Task<T>): T;\n}\n\nexport interface Retry {\n readonly attempts: number;\n readonly delayMs?: number;\n readonly backoff?: \"fixed\" | \"exponential\";\n readonly maxDelayMs?: number;\n readonly maxRetryAfterMs?: number;\n readonly jitter?: \"none\" | \"full\";\n readonly accepts?: (error: unknown, attempt: number) => boolean;\n}\n\nexport interface Task<T = unknown> {\n readonly interaction?: TaskInteraction;\n readonly key: string;\n readonly gate?: WorkflowGate;\n readonly after: readonly Task[];\n readonly perform: (context: TaskContext) => T | Promise<T>;\n readonly condition?: (context: TaskContext) => boolean | Promise<boolean>;\n readonly retry?: Retry;\n readonly timeoutMs?: number;\n readonly cache?: TaskCacheOptions;\n}\n\nexport type TaskOptions<T> = Omit<Task<T>, \"after\"> & {\n readonly after?: readonly Task[];\n};\n\nexport type TaskStatus =\n | \"waiting-input\"\n | \"waiting\"\n | \"active\"\n | \"done\"\n | \"failed\"\n | \"skipped\"\n | \"cancelled\"\n | \"paused\"\n | \"rejected\";\n\nexport interface TaskRecord {\n cacheHit?: true;\n quota?: WorkflowQuotaPause;\n interaction?: TaskInteractionRecord;\n rounds?: readonly LoopRoundRecord[];\n usageReceipts?: readonly string[];\n pause?: WorkflowPauseRequest;\n decision?: WorkflowDecisionRecord;\n readonly key: string;\n status: TaskStatus;\n attempts: number;\n startedAt?: string;\n finishedAt?: string;\n error?: string;\n}\n\nexport interface WorkflowEvent {\n readonly tasks?: readonly Readonly<TaskRecord>[];\n readonly accounting?: WorkflowUsage;\n readonly terminationCode?: WorkflowTerminationCode;\n readonly executionId: string;\n readonly workflow: string;\n readonly timestamp: string;\n readonly type:\n | \"cache\"\n | \"quota\"\n | \"input-request\"\n | \"input-answer\"\n | \"loop\"\n | \"start\"\n | \"task\"\n | \"attempt\"\n | \"retry\"\n | \"usage\"\n | \"finish\"\n | \"gate\"\n | \"decision\"\n | \"checkpoint\"\n | \"resume\"\n | \"budget-exceeded\";\n readonly cache?: TaskCacheOutcome;\n readonly error?: string;\n readonly resetAt?: string;\n readonly round?: number;\n readonly phase?: \"attempt\" | \"check\" | \"complete\";\n readonly key?: string;\n readonly status?: TaskStatus;\n readonly attempt?: number;\n readonly usage?: Usage;\n readonly durationMs?: number;\n readonly delayMs?: number;\n}\n\nexport interface WorkflowTelemetry {\n observe(event: WorkflowEvent): void;\n}\n\nexport interface WorkflowOptions {\n readonly redact?: readonly RegExp[];\n readonly onQuota?: WorkflowQuotaPolicy;\n readonly answers?: readonly WorkflowAnswer[];\n readonly timeoutMs?: number;\n readonly observation?: ObservationHub;\n readonly decisionVerifier?: WorkflowDecisionVerifier;\n readonly decisions?: readonly WorkflowDecision[];\n readonly checkpoint?: WorkflowCheckpointOptions;\n readonly signal?: AbortSignal;\n readonly concurrency?: number;\n readonly budget?: WorkflowBudget;\n readonly stopOnError?: boolean;\n readonly telemetry?: WorkflowTelemetry;\n readonly observe?: (event: WorkflowEvent) => void;\n}\n\nexport type WorkflowTerminationCode =\n FaultCode | \"failed\" | \"usage-unavailable\";\n\nexport interface WorkflowResult {\n readonly terminationCode?: WorkflowTerminationCode;\n readonly inputRequests: readonly WorkflowInputRequest[];\n readonly executionId: string;\n readonly name: string;\n readonly status:\n \"done\" | \"failed\" | \"cancelled\" | \"paused\" | \"waiting-input\" | \"rejected\";\n readonly tasks: readonly Readonly<TaskRecord>[];\n readonly errors: readonly unknown[];\n readonly observerErrors: readonly unknown[];\n readonly usage: WorkflowUsage;\n value<T>(task: Task<T>): T;\n unwrap(): void;\n}\n\nexport interface Workflow {\n readonly name: string;\n readonly tasks: readonly Task[];\n start(options?: WorkflowOptions): Promise<WorkflowResult>;\n diagram(): string;\n}\n\nexport type WorkflowNotification = Omit<\n WorkflowEvent,\n \"executionId\" | \"workflow\" | \"timestamp\"\n>;\nexport interface WorkflowExecutionState {\n readonly workflow: string;\n readonly observation: ObservationHub;\n readonly executionId: string;\n readonly stop: AbortController;\n readonly signal: AbortSignal;\n readonly values: Map<Task, unknown>;\n readonly records: Map<Task, TaskRecord>;\n readonly errors: unknown[];\n readonly observerErrors: unknown[];\n readonly options: WorkflowOptions;\n readonly accounting: WorkflowAccounting;\n readonly quotaResumes: Map<Task, WorkflowQuotaPause>;\n persist(): Promise<void>;\n closeAttempt(task: Task): void;\n record(task: Task): TaskRecord;\n emit(event: WorkflowNotification): void;\n finish(task: Task, status: TaskStatus): void;\n context(task: Task, attempt: number, signal: AbortSignal): TaskContext;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { WatchdogOptions, RepetitionPolicy, StuckInstruction, StuckEvent, } from "./domain/watchdog.types.ts";
|
|
2
2
|
export { defineAgentProfile } from "./domain/agent-profile.ts";
|
|
3
|
-
export type { AgentProfile, AgentProfileOptions, AgentProfileTool, } from "./domain/agent-profile.types.ts";
|
|
3
|
+
export type { AgentProfile, AgentProfileOptions, AgentProfileHooks, AgentProfileTool, } from "./domain/agent-profile.types.ts";
|
|
4
4
|
export { createAgent } from "./domain/agent.ts";
|
|
5
5
|
export { defineHarnessSubagent } from "./domain/subagent.ts";
|
|
6
6
|
export type { HarnessSubagent, HarnessSubagentInput, HarnessSubagentOptions, } from "./domain/subagent.types.ts";
|
|
@@ -202,3 +202,17 @@ export type { GitWorkspaceSandboxOptions, GitDispatchRequest, } from "./applicat
|
|
|
202
202
|
export type { FileRunReport } from "./domain/run-report.types.ts";
|
|
203
203
|
export { inspectFileWorkspace, recoverFileWorkspace, } from "./application/file-workspace-recovery.ts";
|
|
204
204
|
export type { FileWorkspaceInspection, FileWorkspaceInspectionOptions, FileWorkspaceRecoveryOptions, } from "./application/file-workspace-recovery.types.ts";
|
|
205
|
+
export type { HookCommand } from "./domain/hook-command.types.ts";
|
|
206
|
+
export type { AgentHookContext } from "./domain/agent-hook.types.ts";
|
|
207
|
+
export { defineClaudeHook } from "./adapters/agents/claude/claude-hooks.ts";
|
|
208
|
+
export type { ClaudeHook, ClaudeHookOptions, ClaudeHookPhase, ClaudeHookEvents, ClaudeHookDecisions, } from "./adapters/agents/claude/claude-hooks.types.ts";
|
|
209
|
+
export { defineCodexHook } from "./adapters/agents/codex/codex-hooks.ts";
|
|
210
|
+
export type { CodexHook, CodexHookOptions, CodexHookPhase, CodexHookEvents, CodexHookDecisions, } from "./adapters/agents/codex/codex-hooks.types.ts";
|
|
211
|
+
export { defineCopilotHook } from "./adapters/agents/copilot/copilot-hooks.ts";
|
|
212
|
+
export type { CopilotHook, CopilotHookOptions, CopilotHookPhase, CopilotHookEvents, CopilotHookDecisions, } from "./adapters/agents/copilot/copilot-hooks.types.ts";
|
|
213
|
+
export { defineKimiHook } from "./adapters/agents/kimi/kimi-hooks.ts";
|
|
214
|
+
export type { KimiHook, KimiHookOptions, KimiHookPhase, KimiHookEvents, KimiHookDecisions, } from "./adapters/agents/kimi/kimi-hooks.types.ts";
|
|
215
|
+
export { defineAntigravityHook } from "./adapters/agents/antigravity/antigravity-hooks.ts";
|
|
216
|
+
export type { AntigravityHook, AntigravityHookOptions, AntigravityHookPhase, AntigravityHookEvents, AntigravityHookDecisions, } from "./adapters/agents/antigravity/antigravity-hooks.types.ts";
|
|
217
|
+
export { inspectStorageReservations, recoverStorageReservation, } from "./infrastructure/reservation-recovery.ts";
|
|
218
|
+
export type { StorageReservationRecord, StorageReservationInspection, StorageReservationRecoveryOptions, } from "./infrastructure/transport-reservations.types.ts";
|
package/dist/index.js
CHANGED
|
@@ -95,4 +95,10 @@ export { publishWorkspaceOutputs, inspectWorkspacePublication, recoverWorkspaceP
|
|
|
95
95
|
export { snapshotWorkspaceFiles, restoreWorkspaceFiles, } from "./infrastructure/workspace-snapshot.js";
|
|
96
96
|
export { inspectWorkspacePathLocks, recoverWorkspacePathLock, } from "./infrastructure/workspace-lock.js";
|
|
97
97
|
export { inspectFileWorkspace, recoverFileWorkspace, } from "./application/file-workspace-recovery.js";
|
|
98
|
+
export { defineClaudeHook } from "./adapters/agents/claude/claude-hooks.js";
|
|
99
|
+
export { defineCodexHook } from "./adapters/agents/codex/codex-hooks.js";
|
|
100
|
+
export { defineCopilotHook } from "./adapters/agents/copilot/copilot-hooks.js";
|
|
101
|
+
export { defineKimiHook } from "./adapters/agents/kimi/kimi-hooks.js";
|
|
102
|
+
export { defineAntigravityHook } from "./adapters/agents/antigravity/antigravity-hooks.js";
|
|
103
|
+
export { inspectStorageReservations, recoverStorageReservation, } from "./infrastructure/reservation-recovery.js";
|
|
98
104
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type {\n WatchdogOptions,\n RepetitionPolicy,\n StuckInstruction,\n StuckEvent,\n} from \"./domain/watchdog.types.ts\";\nexport { defineAgentProfile } from \"./domain/agent-profile.ts\";\nexport type {\n AgentProfile,\n AgentProfileOptions,\n AgentProfileTool,\n} from \"./domain/agent-profile.types.ts\";\nexport { createAgent } from \"./domain/agent.ts\";\nexport { defineHarnessSubagent } from \"./domain/subagent.ts\";\nexport type {\n HarnessSubagent,\n HarnessSubagentInput,\n HarnessSubagentOptions,\n} from \"./domain/subagent.types.ts\";\nexport { createHarness } from \"./domain/harness.ts\";\nexport { defineMcpPrompt } from \"./domain/mcp-prompt.ts\";\nexport {\n defineHarnessContextStrategy,\n summarizeHistory,\n truncateToolResults,\n} from \"./domain/context.ts\";\nexport type {\n HarnessContextInput,\n HarnessContextResult,\n HarnessContextStrategy,\n HarnessContextStrategyOptions,\n SummarizeHistoryOptions,\n TruncateToolResultsOptions,\n} from \"./domain/context.types.ts\";\nexport { defineHarnessHook } from \"./domain/hook.ts\";\nexport { defineHarnessSkill } from \"./domain/skill.ts\";\nexport type {\n HarnessSkill,\n HarnessSkillOptions,\n} from \"./domain/skill.types.ts\";\nexport { defineHarnessInstructions } from \"./domain/instructions.ts\";\nexport { defineHarnessPermissions } from \"./domain/permissions.ts\";\nexport type {\n HarnessHook,\n HarnessHookContext,\n HarnessHookDecisions,\n HarnessHookEvents,\n HarnessHookInput,\n HarnessHookOptions,\n HarnessHookPhase,\n HarnessHookResult,\n HarnessToolResultView,\n} from \"./domain/hook.types.ts\";\nexport type {\n HarnessPermissionRule,\n HarnessPermissions,\n HarnessPermissionsOptions,\n PermissionDecision,\n PermissionEffect,\n ToolResources,\n} from \"./domain/permissions.types.ts\";\nexport { defineHarnessTool, defineHarnessToolset } from \"./domain/tool.ts\";\nexport { createHarnessEditTools } from \"./adapters/tools/edit-tools.ts\";\nexport { createHarnessFileTools } from \"./adapters/tools/file-tools.ts\";\nexport { createHarnessGitTools } from \"./adapters/tools/git-tools.ts\";\nexport { createHarnessSearchTools } from \"./adapters/tools/search-tools.ts\";\nexport { createHarnessShellTools } from \"./adapters/tools/shell-tools.ts\";\nexport type { ShellToolsOptions } from \"./adapters/tools/tools.types.ts\";\nexport type {\n AccountCredential,\n AgentAuthentication,\n Agent,\n AgentOptions,\n AgentHarness,\n CliHarness,\n CliAgent,\n CustomAgent,\n UsageCredential,\n} from \"./domain/agent.types.ts\";\nexport type {\n Harness,\n HarnessOptions,\n HarnessInstructionContext,\n HarnessMcpContext,\n HarnessInstructions,\n HarnessInstructionSource,\n HarnessInstructionsOption,\n HarnessLimits,\n HarnessToolExecution,\n} from \"./domain/harness.types.ts\";\nexport type {\n McpClientCredentials,\n McpHttpServer,\n McpServer,\n McpServers,\n McpStdioServer,\n McpToolFilter,\n} from \"./domain/mcp-server.types.ts\";\nexport type { McpPromptOptions } from \"./domain/mcp-prompt.types.ts\";\nexport type {\n HarnessTool,\n HarnessToolContext,\n HarnessToolEvent,\n HarnessToolOptions,\n HarnessToolset,\n HarnessToolsetOptions,\n JsonSchema,\n StandardJsonSchema,\n ToolOutput,\n ToolValidation,\n} from \"./domain/tool.types.ts\";\nexport { TransportConflict } from \"./domain/transport.ts\";\nexport type {\n Transport,\n TransportEntry,\n TransportObject,\n TransportReadOptions,\n TransportWriteOptions,\n TransportReference,\n TransportStoreOptions,\n} from \"./domain/transport.types.ts\";\nexport { createLocalTransport } from \"./infrastructure/local-transport.ts\";\nexport type { LocalTransportOptions } from \"./infrastructure/local-transport.types.ts\";\nexport { createArtifactStore } from \"./infrastructure/transport-artifact-store.ts\";\nexport type { ArtifactStoreOptions } from \"./infrastructure/transport-artifact-store.types.ts\";\nexport {\n createWorkflowCheckpointStore,\n recoverWorkflowCheckpoint,\n} from \"./infrastructure/transport-checkpoint.ts\";\nexport type { CheckpointRecoveryOptions } from \"./infrastructure/transport-checkpoint.types.ts\";\nexport { createTaskCacheStore } from \"./infrastructure/transport-task-cache.ts\";\nexport { repositoryFingerprint } from \"./application/repository-fingerprint.ts\";\nexport type { TaskCacheStoreOptions } from \"./infrastructure/transport-task-cache.types.ts\";\nexport { readJournal } from \"./infrastructure/transport-journal.ts\";\nexport type { ReadJournalOptions } from \"./infrastructure/transport-journal.types.ts\";\nexport { createReplayAgent, ReplayDivergence } from \"./domain/replay.ts\";\nexport type {\n RecordedCommit,\n RecordedIdentity,\n RecordedRevision,\n ReplayAgent,\n ReplayAgentOptions,\n ReplayDivergenceDetails,\n ReplayDivergenceKind,\n ReplayDivergencePolicy,\n ReplayFailure,\n ReplayTurn,\n ReplayDecisionEvent,\n WorkspaceCommitsEvent,\n} from \"./domain/replay.types.ts\";\nexport {\n conversations,\n createTransportConversations,\n} from \"./application/conversation-stores.ts\";\nexport type { TransportConversationOptions } from \"./infrastructure/transport-conversations.types.ts\";\nexport {\n archiveRecovery,\n materializeRecoveryArchive,\n} from \"./application/recovery-archive.ts\";\nexport type {\n RecoveryArchiveOptions,\n RecoveryArchiveRestoreOptions,\n} from \"./application/recovery-archive.types.ts\";\n\nexport {\n attach,\n createSandbox,\n dispatch,\n openWorkspace,\n} from \"./application/outpost.ts\";\n\nexport type {\n AttachOptions,\n AttachResult,\n ContinuationOptions,\n DispatchResult,\n Sandbox,\n SandboxOptions,\n WarmDispatchResult,\n Workspace,\n WorkspaceOptions,\n} from \"./application/outpost.ts\";\n\nexport type {\n DispatchOptions,\n Execution,\n Turn,\n} from \"./application/execution.ts\";\n\nexport {\n WorkflowFailure,\n WorkflowBudgetExceeded,\n WorkflowUsageUnavailable,\n defineTask,\n defineWorkflow,\n} from \"./domain/workflow.ts\";\n\nexport type {\n Retry,\n Task,\n TaskContext,\n TaskOptions,\n TaskRecord,\n TaskStatus,\n Workflow,\n WorkflowEvent,\n WorkflowOptions,\n WorkflowBudget,\n WorkflowUsage,\n WorkflowResult,\n WorkflowTerminationCode,\n WorkflowTelemetry,\n} from \"./domain/workflow.ts\";\n\nexport {\n defineAgentTask,\n defineCommandTask,\n defineIsolatedTask,\n defineIsolatedCommandTask,\n} from \"./application/tasks.ts\";\nexport type { QuotaResumePolicy } from \"./application/quota-resume.types.ts\";\nexport { defineRecipe } from \"./application/recipe.ts\";\nexport type {\n RecipeBindings,\n RecipeConfiguration,\n} from \"./application/recipe.types.ts\";\n\nexport {\n createAntigravityHarness,\n createClaudeHarness,\n createCodexHarness,\n createCopilotHarness,\n createKimiHarness,\n} from \"./providers/agents.ts\";\n\nexport { agentVersions } from \"./providers/versions.ts\";\n\nexport {\n createHarnessConversations,\n createSessionBundleConversations,\n createTranscriptConversations,\n} from \"./infrastructure/conversations.ts\";\nexport { createClaudeConversations } from \"./adapters/agents/claude/claude-conversations.ts\";\nexport { createCodexConversations } from \"./adapters/agents/codex/codex-conversations.ts\";\nexport { createCopilotConversations } from \"./adapters/agents/copilot/copilot-conversations.ts\";\nexport { createKimiConversations } from \"./adapters/agents/kimi/kimi-conversations.ts\";\nexport type { TranscriptConversationLayout } from \"./infrastructure/conversations/layout.types.ts\";\nexport type {\n SessionBundleFiles,\n SessionBundleHelpers,\n SessionBundleProfile,\n SessionBundleRelocation,\n} from \"./infrastructure/conversations/session-bundle.types.ts\";\n\nexport type {\n ConversationFormat,\n ConversationLocation,\n} from \"./infrastructure/conversations.ts\";\n\nexport type {\n AntigravitySettings,\n ClaudeSettings,\n CodexSettings,\n CodexModelProvider,\n CopilotSettings,\n KimiSettings,\n} from \"./providers/agents.ts\";\n\nexport {\n createMountedSandboxProvider,\n createRemoteSandboxProvider,\n} from \"./providers/factories.ts\";\n\nexport {\n ResponseError,\n defineJsonResponse,\n defineTextResponse,\n} from \"./domain/response.ts\";\n\nexport type { ResponseSpec, StandardValidator } from \"./domain/response.ts\";\n\nexport { OutpostError, recoveryDetails } from \"./domain/errors.ts\";\nexport type { DiffGuard } from \"./domain/diff-guard.types.ts\";\n\nexport type { FaultCode } from \"./domain/errors.ts\";\n\nexport { quotaFault } from \"./domain/quota.ts\";\nexport type { QuotaFault } from \"./domain/quota.types.ts\";\nexport { unavailableFault } from \"./domain/unavailable.ts\";\nexport { createFallbackAgent } from \"./domain/fallback-agent.ts\";\nexport type {\n DispatchAgent,\n FallbackAgent,\n FallbackAgentOptions,\n FallbackAttempt,\n FallbackCandidate,\n FallbackRecord,\n FallbackTrigger,\n} from \"./domain/fallback-agent.types.ts\";\nexport type { UnavailableFault } from \"./domain/unavailable.types.ts\";\nexport { createSteering } from \"./domain/steering.ts\";\nexport type {\n Steering,\n SteeringDelivery,\n SteeringMode,\n SteeringSendOptions,\n SteeringState,\n} from \"./domain/steering.types.ts\";\n\nexport type {\n AgentAdapter,\n AgentConfiguration,\n ConfigurationFile,\n HostConfiguration,\n AgentEvent,\n AgentInput,\n AgentLiveInput,\n AgentLiveRead,\n AgentLiveSession,\n AgentObservation,\n BranchPolicy,\n Channel,\n Command,\n CommandResult,\n Commit,\n ConversationContext,\n ConversationRecord,\n ConversationStore,\n NativeConversationStore,\n Disposal,\n LifecycleHooks,\n FileManifestEntry,\n FileTransfers,\n SandboxContext,\n SandboxLease,\n SandboxProvider,\n StageLimits,\n TransferOptions,\n Usage,\n Variables,\n Volume,\n WorkspaceRecord,\n} from \"./domain/ports.ts\";\n\nexport type { Brief, PromptVariables } from \"./domain/prompts.ts\";\n\nexport type { Logging } from \"./infrastructure/journal.ts\";\n\nexport { createCustomReporter } from \"./infrastructure/custom-reporter.ts\";\nexport type {\n CustomReporter,\n CustomReporterOptions,\n ReporterHandlers,\n} from \"./infrastructure/custom-reporter.types.ts\";\nexport type {\n DispatchTelemetry,\n DispatchTelemetrySession,\n DispatchTelemetryOutcome,\n} from \"./domain/dispatch-telemetry.types.ts\";\nexport { createReporter } from \"./infrastructure/reporter.ts\";\n\nexport type { ReporterOptions } from \"./infrastructure/reporter.ts\";\n\nexport type { VariableQuestion } from \"./application/interactive-brief.ts\";\n\nexport {\n planRecoveryRetention,\n pruneRecoveryRetention,\n assertRecoveryQuota,\n} from \"./application/recovery-retention.ts\";\nexport type {\n RecoveryRetentionPolicy,\n RecoveryRetentionOptions,\n RecoveryRetentionPlan,\n RecoveryRetentionEntry,\n RecoveryPruneResult,\n RecoveryQuotaOptions,\n} from \"./application/recovery-retention.types.ts\";\nexport { verifyRecoveryTransfer } from \"./application/recovery-verification.ts\";\nexport type {\n RecoveryVerification,\n RecoveryVerificationOptions,\n} from \"./application/recovery-verification.types.ts\";\n\nexport { diagnoseSandbox } from \"./application/doctor-sandbox.ts\";\nexport type {\n SandboxDiagnosticOptions,\n SandboxDiagnosticReport,\n DiagnosticCapability,\n} from \"./application/doctor-sandbox.types.ts\";\nexport type {\n DiagnosticCheck,\n DiagnosticStatus,\n DoctorAgent,\n} from \"./application/doctor.types.ts\";\nexport { diagnoseAgentProtocol } from \"./application/doctor-protocol.ts\";\nexport type { AgentProtocolReport } from \"./application/doctor-protocol.types.ts\";\n\nexport { reserveRecoveryStorage } from \"./application/storage-reservation.ts\";\nexport type { RecoveryStorageReservationOptions } from \"./application/storage-reservation.types.ts\";\nexport type {\n StorageReservation,\n StorageReservationOptions,\n} from \"./infrastructure/storage-reservations.types.ts\";\n\nexport {\n planRecoveryRestore,\n restoreRecoveryTransfer,\n} from \"./application/recovery-restore.ts\";\nexport type {\n RecoveryRestoreOptions,\n RecoveryRestorePlan,\n RecoveryRestoreResult,\n} from \"./application/recovery-restore.types.ts\";\n\nexport type {\n WorkflowCheckpoint,\n WorkflowCheckpointOptions,\n WorkflowCheckpointStore,\n WorkflowCheckpointLease,\n WorkflowCheckpointValue,\n WorkspaceCheckpointMetadata,\n TaskWorkspaceCheckpoint,\n WorkflowJson,\n} from \"./domain/workflow/checkpoint.types.ts\";\n\nexport {\n defineApprovalTask,\n definePauseTask,\n} from \"./domain/workflow/gates.ts\";\nexport type {\n WorkflowGate,\n WorkflowGateOptions,\n WorkflowPauseRequest,\n WorkflowDecision,\n WorkflowDecisionRecord,\n WorkflowDecisionProof,\n WorkflowDecisionVerification,\n WorkflowDecisionVerifier,\n} from \"./domain/workflow/gates.types.ts\";\nexport type {\n WorkflowQuotaPause,\n WorkflowQuotaPolicy,\n} from \"./domain/workflow/quota-pause.types.ts\";\n\nexport { inspectRecovery } from \"./application/recovery-inspection.ts\";\nexport type {\n RecoveryInspection,\n RecoveryInspectionOptions,\n} from \"./application/recovery-inspection.types.ts\";\nexport type {\n ResourceActivityRecord,\n ResourceInspection,\n ResourceInspectionEntry,\n ResourceOperation,\n ResourceOperationKind,\n ResourceOperationResult,\n ResourcePhase,\n} from \"./infrastructure/resource-activity.types.ts\";\n\nexport {\n defineBinaryArtifact,\n defineJsonArtifact,\n publishArtifact,\n readStoredArtifact,\n} from \"./domain/artifact.ts\";\nexport {\n defineArtifactTask,\n readArtifact,\n} from \"./application/artifact-tasks.ts\";\nexport type {\n ArtifactContract,\n ArtifactContractOptions,\n ArtifactIdentity,\n ArtifactProducer,\n ArtifactReference,\n ArtifactStore,\n JsonArtifactOptions,\n PublishArtifactOptions,\n ReadArtifactOptions,\n} from \"./domain/artifact.types.ts\";\nexport type { ArtifactTaskOptions } from \"./application/artifact-tasks.types.ts\";\n\nexport { createSqliteTaskQueue } from \"./infrastructure/task-queue.ts\";\nexport {\n serveTaskQueue,\n createHttpTaskQueue,\n} from \"./infrastructure/task-queue-http.ts\";\nexport { runQueueWorker } from \"./application/queue-worker.ts\";\nexport { defineQueuedTask } from \"./application/queued-task.ts\";\nexport type {\n QueueRequest,\n QueueResult,\n QueueQuota,\n QueueJob,\n QueueClaim,\n QueueLease,\n TaskQueue,\n DurableTaskQueue,\n} from \"./domain/task-queue.types.ts\";\nexport type {\n QueueServerOptions,\n QueueServer,\n QueueClientOptions,\n} from \"./infrastructure/task-queue-http.types.ts\";\nexport type {\n QueueHandlerContext,\n QueueHandler,\n QueueWorkerOptions,\n} from \"./application/queue-worker.types.ts\";\nexport type { QueuedTaskOptions } from \"./application/queued-task.types.ts\";\nexport { createCronSchedule } from \"./domain/cron.ts\";\nexport type { CronOptions, CronSchedule } from \"./domain/cron.types.ts\";\nexport type {\n TriggerJob,\n TriggerJobInput,\n} from \"./domain/trigger-job.types.ts\";\nexport { runSchedules } from \"./application/schedules.ts\";\nexport { serveTriggers } from \"./infrastructure/trigger-server.ts\";\nexport type {\n TriggerFailure,\n TriggerRoute,\n TriggerServer,\n TriggerServerOptions,\n} from \"./infrastructure/trigger-server.types.ts\";\nexport type {\n TriggerEvent,\n TriggerHttpRequest,\n TriggerOutcome,\n TriggerReply,\n TriggerSecret,\n TriggerSource,\n} from \"./domain/trigger.types.ts\";\nexport { createGithubWebhook } from \"./adapters/triggers/github-webhook.ts\";\nexport { createGitlabWebhook } from \"./adapters/triggers/gitlab-webhook.ts\";\nexport { createSlackSource } from \"./adapters/triggers/slack-request.ts\";\nexport { createStandardWebhook } from \"./adapters/triggers/standard-webhook.ts\";\nexport {\n commandIssued,\n labelAdded,\n} from \"./adapters/triggers/trigger-events.ts\";\nexport type {\n GithubWebhookOptions,\n GitlabSigningOptions,\n GitlabTokenOptions,\n GitlabWebhookOptions,\n SlackRequestOptions,\n StandardWebhookOptions,\n TriggerCommand,\n TriggerLabel,\n} from \"./adapters/triggers/triggers.types.ts\";\nexport { defineWorkflowJob } from \"./application/workflow-job.ts\";\nexport type {\n WorkflowJobCheckpoint,\n WorkflowJobContext,\n WorkflowJobOptions,\n WorkflowJobStartOptions,\n} from \"./application/workflow-job.types.ts\";\nexport type {\n RunSchedulesOptions,\n ScheduleFailure,\n TriggerSchedule,\n} from \"./application/schedules.types.ts\";\n\nexport type { EgressPolicy } from \"./domain/egress.types.ts\";\n\nexport { recoverSpeculation } from \"./infrastructure/speculation-store.ts\";\nexport type { SpeculationRecoveryOptions } from \"./infrastructure/speculation-store.types.ts\";\nexport { checkSpeculationIntegration } from \"./application/speculation-integration.ts\";\nexport { speculate } from \"./application/speculation.ts\";\nexport type {\n SpeculationDurability,\n SpeculationIntegration,\n SpeculationOptions,\n SpeculationResult,\n SpeculativeCandidate,\n SpeculativeCandidateResult,\n SpeculativeOutput,\n SpeculativeHostSnapshot,\n SpeculativeValidation,\n} from \"./application/speculation.types.ts\";\n\nexport { createOpenAIModelProvider } from \"./adapters/models/openai-model-provider.ts\";\nexport type { OpenAIModelProviderOptions } from \"./adapters/models/openai-model-provider.types.ts\";\nexport type {\n AgentModel,\n ModelContentBlock,\n ModelMessage,\n ModelProvider,\n ModelReasoning,\n ModelReasoningBlock,\n ModelRequest,\n ModelResult,\n ModelSpec,\n ModelStopReason,\n ModelStreamEvent,\n ModelTextBlock,\n ModelToolCallBlock,\n ModelToolResultBlock,\n ModelToolSpec,\n} from \"./domain/model.types.ts\";\nexport { createAnthropicModelProvider } from \"./adapters/models/anthropic-model-provider.ts\";\nexport type { AnthropicModelProviderOptions } from \"./adapters/models/anthropic-model-provider.types.ts\";\n\nexport { createObservationHub } from \"./domain/observation.ts\";\nexport type {\n Observation,\n ObservationScope,\n ObservationSource,\n ObservationEvent,\n OperationEvent,\n ObservationHub,\n ObservationHubOptions,\n ObservationSink,\n} from \"./domain/observation.types.ts\";\n\nexport {\n signWorkflowDecision,\n createEd25519DecisionVerifier,\n} from \"./infrastructure/workflow-decision-signature.ts\";\nexport type {\n WorkflowDecisionSigningOptions,\n WorkflowApproverKey,\n WorkflowDecisionVerifierOptions,\n} from \"./infrastructure/workflow-decision-signature.types.ts\";\n\nexport { defineInteractiveAgentTask } from \"./application/interactive-task.ts\";\nexport type {\n InteractiveAgentTaskOptions,\n InteractiveAgentResult,\n FileInteractiveAgentTaskOptions,\n FileInteractiveAgentResult,\n} from \"./application/interactive-task.types.ts\";\nexport type {\n WorkflowInputQuestion,\n WorkflowInputRequest,\n WorkflowAnswer,\n WorkflowAnswerRecord,\n TaskInteraction,\n TaskInteractionRecord,\n TaskInteractionContext,\n} from \"./domain/workflow/input.types.ts\";\nexport {\n defineLoopTask,\n LoopTaskExhausted,\n} from \"./domain/workflow/loop-task.ts\";\nexport type {\n TaskCacheAccessOptions,\n TaskCacheEntry,\n TaskCacheMode,\n TaskCacheOptions,\n TaskCacheOutcome,\n TaskCacheStore,\n} from \"./domain/workflow/task-cache.types.ts\";\nexport type {\n LoopCheckResult,\n LoopTaskContext,\n LoopTaskOptions,\n LoopRoundRecord,\n} from \"./domain/workflow/loop-task.types.ts\";\nexport { defineDecision } from \"./domain/decision.ts\";\nexport { decide } from \"./application/decision.ts\";\nexport { defineDecisionTask } from \"./application/decision-task.ts\";\nexport { createSystemOneDecisionProvider } from \"./adapters/decisions/system-one-provider.ts\";\nexport { defineHarnessModelRouting } from \"./domain/harness-routing.ts\";\nexport type {\n DecisionState,\n ChoiceQuestion,\n ScoreQuestion,\n NoulQuestion,\n DecisionQuestion,\n DecisionQuestions,\n DecisionOptions,\n Decision,\n ChoiceAnswer,\n ScoreAnswer,\n NoulAnswer,\n DecisionAnswer,\n DecisionAnswers,\n DecisionProviderResult,\n DecisionRequest,\n DecisionProvider,\n DecisionResult,\n DecideOptions,\n DecisionEvent,\n} from \"./domain/decision.types.ts\";\nexport type { DecisionTaskOptions } from \"./application/decision.types.ts\";\nexport type { SystemOneDecisionProviderOptions } from \"./adapters/decisions/system-one-provider.types.ts\";\nexport type {\n HarnessModelRoutingContext,\n HarnessModelRoutingOptions,\n HarnessModelRouting,\n RoutingQuestion,\n RoutingChoices,\n ModelRouteEvent,\n} from \"./domain/harness-routing.types.ts\";\nexport { createAgentConflictResolver } from \"./application/agent-conflict-resolver.ts\";\nexport type {\n AgentConflictResolverOptions,\n ConflictContext,\n ConflictResolution,\n ConflictResolver,\n IntegrationOptions,\n} from \"./application/conflict-resolution.types.ts\";\n\nexport { calculateUsageCost } from \"./domain/pricing.ts\";\nexport type {\n ModelPrice,\n ModelPriceTable,\n ModelUsage,\n UsageCost,\n} from \"./domain/pricing.types.ts\";\nexport { WorkflowCostUnavailable } from \"./domain/workflow/budget.ts\";\nexport { loadModelPrices } from \"./adapters/models/model-prices.ts\";\nexport type { ModelPricesOptions } from \"./adapters/models/model-prices.types.ts\";\n\nexport type {\n RunReport,\n RunReportOptions,\n RunReportDiff,\n RunReportFile,\n RunReportFailure,\n} from \"./domain/run-report.types.ts\";\nexport { createRunObserver } from \"./infrastructure/run-observer.ts\";\nexport { readRun, watchRun } from \"./infrastructure/run-reader.ts\";\nexport type {\n RunStatus,\n RunTask,\n RunPass,\n RunDispatch,\n RunError,\n RunSnapshot,\n RunEvent,\n RunObserverOptions,\n RunObserver,\n ReadRunOptions,\n WatchRunOptions,\n} from \"./domain/run.types.ts\";\nexport { changed } from \"./domain/lifecycle.ts\";\nexport { fromSecrets } from \"./application/secrets.ts\";\nexport type {\n SecretSource,\n SecretResolveOptions,\n FromSecretsOptions,\n} from \"./domain/secrets.types.ts\";\nexport type {\n ChangedCondition,\n LifecycleCommand,\n} from \"./domain/lifecycle.types.ts\";\nexport {\n createWorkspace,\n restoreFileWorkspace,\n workspaceFingerprint,\n} from \"./application/file-workspace.ts\";\nexport { prepareWorkspaceOutputs } from \"./application/workspace-output-baseline.ts\";\nexport {\n publishWorkspaceOutputs,\n inspectWorkspacePublication,\n recoverWorkspacePublication,\n} from \"./application/workspace-publication.ts\";\nexport {\n snapshotWorkspaceFiles,\n restoreWorkspaceFiles,\n} from \"./infrastructure/workspace-snapshot.ts\";\nexport type {\n FileWorkspace,\n FileWorkspaceOptions,\n GitWorkspace,\n GitWorkspaceOptions,\n CreatedWorkspace,\n FileWorkspaceRecoveryAuthorization,\n} from \"./application/file-workspace.types.ts\";\nexport type {\n FileSandbox,\n FileSandboxOptions,\n FileSandboxSettings,\n FileDispatchRequest,\n FileDispatchResult,\n FileAttachResult,\n} from \"./application/file-sandbox.types.ts\";\nexport type {\n WorkspaceSource,\n FileWorkspaceSource,\n GitWorkspaceSource,\n WorkspaceSession,\n FileWorkspaceRecord,\n WorkspaceRuntime,\n WorkspaceRuntimeOptions,\n WorkspaceRetention,\n WorkspaceInput,\n WorkspaceOutputOptions,\n WorkspacePublication,\n WorkspaceFileEntry,\n WorkspaceAllocationRecord,\n WorkspaceConversationArchive,\n WorkspaceOutputBaseline,\n} from \"./domain/file-workspace.types.ts\";\nexport type {\n FileSandboxContext,\n SandboxWorkspaces,\n} from \"./domain/sandbox.types.ts\";\nexport {\n inspectWorkspacePathLocks,\n recoverWorkspacePathLock,\n} from \"./infrastructure/workspace-lock.ts\";\nexport type { RestoreFileWorkspaceOptions } from \"./application/file-workspace.types.ts\";\nexport type {\n WorkspacePathLock,\n WorkspacePathRecoveryOptions,\n} from \"./infrastructure/workspace-lock.types.ts\";\nexport type {\n PublicationJournal,\n PublicationOperation,\n PublicationDirectory,\n PublicationRecoveryOptions,\n} from \"./application/workspace-publication.types.ts\";\nexport type {\n FileAgentTaskOptions,\n FileIsolatedTaskOptions,\n MixedIsolatedTaskOptions,\n MixedAgentTaskOptions,\n IsolatedCommandTaskOptions,\n FileIsolatedCommandRequest,\n} from \"./application/tasks.types.ts\";\nexport type { FileSelectionOptions } from \"./adapters/tools/tools.types.ts\";\nexport type {\n FileRecipeBindings,\n MixedRecipeBindings,\n FileRecipeConfiguration,\n} from \"./application/recipe.types.ts\";\nexport type {\n GitWorkspaceSandboxOptions,\n GitDispatchRequest,\n} from \"./application/file-workspace.types.ts\";\nexport type { FileRunReport } from \"./domain/run-report.types.ts\";\nexport {\n inspectFileWorkspace,\n recoverFileWorkspace,\n} from \"./application/file-workspace-recovery.ts\";\nexport type {\n FileWorkspaceInspection,\n FileWorkspaceInspectionOptions,\n FileWorkspaceRecoveryOptions,\n} from \"./application/file-workspace-recovery.types.ts\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type {\n WatchdogOptions,\n RepetitionPolicy,\n StuckInstruction,\n StuckEvent,\n} from \"./domain/watchdog.types.ts\";\nexport { defineAgentProfile } from \"./domain/agent-profile.ts\";\nexport type {\n AgentProfile,\n AgentProfileOptions,\n AgentProfileHooks,\n AgentProfileTool,\n} from \"./domain/agent-profile.types.ts\";\nexport { createAgent } from \"./domain/agent.ts\";\nexport { defineHarnessSubagent } from \"./domain/subagent.ts\";\nexport type {\n HarnessSubagent,\n HarnessSubagentInput,\n HarnessSubagentOptions,\n} from \"./domain/subagent.types.ts\";\nexport { createHarness } from \"./domain/harness.ts\";\nexport { defineMcpPrompt } from \"./domain/mcp-prompt.ts\";\nexport {\n defineHarnessContextStrategy,\n summarizeHistory,\n truncateToolResults,\n} from \"./domain/context.ts\";\nexport type {\n HarnessContextInput,\n HarnessContextResult,\n HarnessContextStrategy,\n HarnessContextStrategyOptions,\n SummarizeHistoryOptions,\n TruncateToolResultsOptions,\n} from \"./domain/context.types.ts\";\nexport { defineHarnessHook } from \"./domain/hook.ts\";\nexport { defineHarnessSkill } from \"./domain/skill.ts\";\nexport type {\n HarnessSkill,\n HarnessSkillOptions,\n} from \"./domain/skill.types.ts\";\nexport { defineHarnessInstructions } from \"./domain/instructions.ts\";\nexport { defineHarnessPermissions } from \"./domain/permissions.ts\";\nexport type {\n HarnessHook,\n HarnessHookContext,\n HarnessHookDecisions,\n HarnessHookEvents,\n HarnessHookInput,\n HarnessHookOptions,\n HarnessHookPhase,\n HarnessHookResult,\n HarnessToolResultView,\n} from \"./domain/hook.types.ts\";\nexport type {\n HarnessPermissionRule,\n HarnessPermissions,\n HarnessPermissionsOptions,\n PermissionDecision,\n PermissionEffect,\n ToolResources,\n} from \"./domain/permissions.types.ts\";\nexport { defineHarnessTool, defineHarnessToolset } from \"./domain/tool.ts\";\nexport { createHarnessEditTools } from \"./adapters/tools/edit-tools.ts\";\nexport { createHarnessFileTools } from \"./adapters/tools/file-tools.ts\";\nexport { createHarnessGitTools } from \"./adapters/tools/git-tools.ts\";\nexport { createHarnessSearchTools } from \"./adapters/tools/search-tools.ts\";\nexport { createHarnessShellTools } from \"./adapters/tools/shell-tools.ts\";\nexport type { ShellToolsOptions } from \"./adapters/tools/tools.types.ts\";\nexport type {\n AccountCredential,\n AgentAuthentication,\n Agent,\n AgentOptions,\n AgentHarness,\n CliHarness,\n CliAgent,\n CustomAgent,\n UsageCredential,\n} from \"./domain/agent.types.ts\";\nexport type {\n Harness,\n HarnessOptions,\n HarnessInstructionContext,\n HarnessMcpContext,\n HarnessInstructions,\n HarnessInstructionSource,\n HarnessInstructionsOption,\n HarnessLimits,\n HarnessToolExecution,\n} from \"./domain/harness.types.ts\";\nexport type {\n McpClientCredentials,\n McpHttpServer,\n McpServer,\n McpServers,\n McpStdioServer,\n McpToolFilter,\n} from \"./domain/mcp-server.types.ts\";\nexport type { McpPromptOptions } from \"./domain/mcp-prompt.types.ts\";\nexport type {\n HarnessTool,\n HarnessToolContext,\n HarnessToolEvent,\n HarnessToolOptions,\n HarnessToolset,\n HarnessToolsetOptions,\n JsonSchema,\n StandardJsonSchema,\n ToolOutput,\n ToolValidation,\n} from \"./domain/tool.types.ts\";\nexport { TransportConflict } from \"./domain/transport.ts\";\nexport type {\n Transport,\n TransportEntry,\n TransportObject,\n TransportReadOptions,\n TransportWriteOptions,\n TransportReference,\n TransportStoreOptions,\n} from \"./domain/transport.types.ts\";\nexport { createLocalTransport } from \"./infrastructure/local-transport.ts\";\nexport type { LocalTransportOptions } from \"./infrastructure/local-transport.types.ts\";\nexport { createArtifactStore } from \"./infrastructure/transport-artifact-store.ts\";\nexport type { ArtifactStoreOptions } from \"./infrastructure/transport-artifact-store.types.ts\";\nexport {\n createWorkflowCheckpointStore,\n recoverWorkflowCheckpoint,\n} from \"./infrastructure/transport-checkpoint.ts\";\nexport type { CheckpointRecoveryOptions } from \"./infrastructure/transport-checkpoint.types.ts\";\nexport { createTaskCacheStore } from \"./infrastructure/transport-task-cache.ts\";\nexport { repositoryFingerprint } from \"./application/repository-fingerprint.ts\";\nexport type { TaskCacheStoreOptions } from \"./infrastructure/transport-task-cache.types.ts\";\nexport { readJournal } from \"./infrastructure/transport-journal.ts\";\nexport type { ReadJournalOptions } from \"./infrastructure/transport-journal.types.ts\";\nexport { createReplayAgent, ReplayDivergence } from \"./domain/replay.ts\";\nexport type {\n RecordedCommit,\n RecordedIdentity,\n RecordedRevision,\n ReplayAgent,\n ReplayAgentOptions,\n ReplayDivergenceDetails,\n ReplayDivergenceKind,\n ReplayDivergencePolicy,\n ReplayFailure,\n ReplayTurn,\n ReplayDecisionEvent,\n WorkspaceCommitsEvent,\n} from \"./domain/replay.types.ts\";\nexport {\n conversations,\n createTransportConversations,\n} from \"./application/conversation-stores.ts\";\nexport type { TransportConversationOptions } from \"./infrastructure/transport-conversations.types.ts\";\nexport {\n archiveRecovery,\n materializeRecoveryArchive,\n} from \"./application/recovery-archive.ts\";\nexport type {\n RecoveryArchiveOptions,\n RecoveryArchiveRestoreOptions,\n} from \"./application/recovery-archive.types.ts\";\n\nexport {\n attach,\n createSandbox,\n dispatch,\n openWorkspace,\n} from \"./application/outpost.ts\";\n\nexport type {\n AttachOptions,\n AttachResult,\n ContinuationOptions,\n DispatchResult,\n Sandbox,\n SandboxOptions,\n WarmDispatchResult,\n Workspace,\n WorkspaceOptions,\n} from \"./application/outpost.ts\";\n\nexport type {\n DispatchOptions,\n Execution,\n Turn,\n} from \"./application/execution.ts\";\n\nexport {\n WorkflowFailure,\n WorkflowBudgetExceeded,\n WorkflowUsageUnavailable,\n defineTask,\n defineWorkflow,\n} from \"./domain/workflow.ts\";\n\nexport type {\n Retry,\n Task,\n TaskContext,\n TaskOptions,\n TaskRecord,\n TaskStatus,\n Workflow,\n WorkflowEvent,\n WorkflowOptions,\n WorkflowBudget,\n WorkflowUsage,\n WorkflowResult,\n WorkflowTerminationCode,\n WorkflowTelemetry,\n} from \"./domain/workflow.ts\";\n\nexport {\n defineAgentTask,\n defineCommandTask,\n defineIsolatedTask,\n defineIsolatedCommandTask,\n} from \"./application/tasks.ts\";\nexport type { QuotaResumePolicy } from \"./application/quota-resume.types.ts\";\nexport { defineRecipe } from \"./application/recipe.ts\";\nexport type {\n RecipeBindings,\n RecipeConfiguration,\n} from \"./application/recipe.types.ts\";\n\nexport {\n createAntigravityHarness,\n createClaudeHarness,\n createCodexHarness,\n createCopilotHarness,\n createKimiHarness,\n} from \"./providers/agents.ts\";\n\nexport { agentVersions } from \"./providers/versions.ts\";\n\nexport {\n createHarnessConversations,\n createSessionBundleConversations,\n createTranscriptConversations,\n} from \"./infrastructure/conversations.ts\";\nexport { createClaudeConversations } from \"./adapters/agents/claude/claude-conversations.ts\";\nexport { createCodexConversations } from \"./adapters/agents/codex/codex-conversations.ts\";\nexport { createCopilotConversations } from \"./adapters/agents/copilot/copilot-conversations.ts\";\nexport { createKimiConversations } from \"./adapters/agents/kimi/kimi-conversations.ts\";\nexport type { TranscriptConversationLayout } from \"./infrastructure/conversations/layout.types.ts\";\nexport type {\n SessionBundleFiles,\n SessionBundleHelpers,\n SessionBundleProfile,\n SessionBundleRelocation,\n} from \"./infrastructure/conversations/session-bundle.types.ts\";\n\nexport type {\n ConversationFormat,\n ConversationLocation,\n} from \"./infrastructure/conversations.ts\";\n\nexport type {\n AntigravitySettings,\n ClaudeSettings,\n CodexSettings,\n CodexModelProvider,\n CopilotSettings,\n KimiSettings,\n} from \"./providers/agents.ts\";\n\nexport {\n createMountedSandboxProvider,\n createRemoteSandboxProvider,\n} from \"./providers/factories.ts\";\n\nexport {\n ResponseError,\n defineJsonResponse,\n defineTextResponse,\n} from \"./domain/response.ts\";\n\nexport type { ResponseSpec, StandardValidator } from \"./domain/response.ts\";\n\nexport { OutpostError, recoveryDetails } from \"./domain/errors.ts\";\nexport type { DiffGuard } from \"./domain/diff-guard.types.ts\";\n\nexport type { FaultCode } from \"./domain/errors.ts\";\n\nexport { quotaFault } from \"./domain/quota.ts\";\nexport type { QuotaFault } from \"./domain/quota.types.ts\";\nexport { unavailableFault } from \"./domain/unavailable.ts\";\nexport { createFallbackAgent } from \"./domain/fallback-agent.ts\";\nexport type {\n DispatchAgent,\n FallbackAgent,\n FallbackAgentOptions,\n FallbackAttempt,\n FallbackCandidate,\n FallbackRecord,\n FallbackTrigger,\n} from \"./domain/fallback-agent.types.ts\";\nexport type { UnavailableFault } from \"./domain/unavailable.types.ts\";\nexport { createSteering } from \"./domain/steering.ts\";\nexport type {\n Steering,\n SteeringDelivery,\n SteeringMode,\n SteeringSendOptions,\n SteeringState,\n} from \"./domain/steering.types.ts\";\n\nexport type {\n AgentAdapter,\n AgentConfiguration,\n ConfigurationFile,\n HostConfiguration,\n AgentEvent,\n AgentInput,\n AgentLiveInput,\n AgentLiveRead,\n AgentLiveSession,\n AgentObservation,\n BranchPolicy,\n Channel,\n Command,\n CommandResult,\n Commit,\n ConversationContext,\n ConversationRecord,\n ConversationStore,\n NativeConversationStore,\n Disposal,\n LifecycleHooks,\n FileManifestEntry,\n FileTransfers,\n SandboxContext,\n SandboxLease,\n SandboxProvider,\n StageLimits,\n TransferOptions,\n Usage,\n Variables,\n Volume,\n WorkspaceRecord,\n} from \"./domain/ports.ts\";\n\nexport type { Brief, PromptVariables } from \"./domain/prompts.ts\";\n\nexport type { Logging } from \"./infrastructure/journal.ts\";\n\nexport { createCustomReporter } from \"./infrastructure/custom-reporter.ts\";\nexport type {\n CustomReporter,\n CustomReporterOptions,\n ReporterHandlers,\n} from \"./infrastructure/custom-reporter.types.ts\";\nexport type {\n DispatchTelemetry,\n DispatchTelemetrySession,\n DispatchTelemetryOutcome,\n} from \"./domain/dispatch-telemetry.types.ts\";\nexport { createReporter } from \"./infrastructure/reporter.ts\";\n\nexport type { ReporterOptions } from \"./infrastructure/reporter.ts\";\n\nexport type { VariableQuestion } from \"./application/interactive-brief.ts\";\n\nexport {\n planRecoveryRetention,\n pruneRecoveryRetention,\n assertRecoveryQuota,\n} from \"./application/recovery-retention.ts\";\nexport type {\n RecoveryRetentionPolicy,\n RecoveryRetentionOptions,\n RecoveryRetentionPlan,\n RecoveryRetentionEntry,\n RecoveryPruneResult,\n RecoveryQuotaOptions,\n} from \"./application/recovery-retention.types.ts\";\nexport { verifyRecoveryTransfer } from \"./application/recovery-verification.ts\";\nexport type {\n RecoveryVerification,\n RecoveryVerificationOptions,\n} from \"./application/recovery-verification.types.ts\";\n\nexport { diagnoseSandbox } from \"./application/doctor-sandbox.ts\";\nexport type {\n SandboxDiagnosticOptions,\n SandboxDiagnosticReport,\n DiagnosticCapability,\n} from \"./application/doctor-sandbox.types.ts\";\nexport type {\n DiagnosticCheck,\n DiagnosticStatus,\n DoctorAgent,\n} from \"./application/doctor.types.ts\";\nexport { diagnoseAgentProtocol } from \"./application/doctor-protocol.ts\";\nexport type { AgentProtocolReport } from \"./application/doctor-protocol.types.ts\";\n\nexport { reserveRecoveryStorage } from \"./application/storage-reservation.ts\";\nexport type { RecoveryStorageReservationOptions } from \"./application/storage-reservation.types.ts\";\nexport type {\n StorageReservation,\n StorageReservationOptions,\n} from \"./infrastructure/storage-reservations.types.ts\";\n\nexport {\n planRecoveryRestore,\n restoreRecoveryTransfer,\n} from \"./application/recovery-restore.ts\";\nexport type {\n RecoveryRestoreOptions,\n RecoveryRestorePlan,\n RecoveryRestoreResult,\n} from \"./application/recovery-restore.types.ts\";\n\nexport type {\n WorkflowCheckpoint,\n WorkflowCheckpointOptions,\n WorkflowCheckpointStore,\n WorkflowCheckpointLease,\n WorkflowCheckpointValue,\n WorkspaceCheckpointMetadata,\n TaskWorkspaceCheckpoint,\n WorkflowJson,\n} from \"./domain/workflow/checkpoint.types.ts\";\n\nexport {\n defineApprovalTask,\n definePauseTask,\n} from \"./domain/workflow/gates.ts\";\nexport type {\n WorkflowGate,\n WorkflowGateOptions,\n WorkflowPauseRequest,\n WorkflowDecision,\n WorkflowDecisionRecord,\n WorkflowDecisionProof,\n WorkflowDecisionVerification,\n WorkflowDecisionVerifier,\n} from \"./domain/workflow/gates.types.ts\";\nexport type {\n WorkflowQuotaPause,\n WorkflowQuotaPolicy,\n} from \"./domain/workflow/quota-pause.types.ts\";\n\nexport { inspectRecovery } from \"./application/recovery-inspection.ts\";\nexport type {\n RecoveryInspection,\n RecoveryInspectionOptions,\n} from \"./application/recovery-inspection.types.ts\";\nexport type {\n ResourceActivityRecord,\n ResourceInspection,\n ResourceInspectionEntry,\n ResourceOperation,\n ResourceOperationKind,\n ResourceOperationResult,\n ResourcePhase,\n} from \"./infrastructure/resource-activity.types.ts\";\n\nexport {\n defineBinaryArtifact,\n defineJsonArtifact,\n publishArtifact,\n readStoredArtifact,\n} from \"./domain/artifact.ts\";\nexport {\n defineArtifactTask,\n readArtifact,\n} from \"./application/artifact-tasks.ts\";\nexport type {\n ArtifactContract,\n ArtifactContractOptions,\n ArtifactIdentity,\n ArtifactProducer,\n ArtifactReference,\n ArtifactStore,\n JsonArtifactOptions,\n PublishArtifactOptions,\n ReadArtifactOptions,\n} from \"./domain/artifact.types.ts\";\nexport type { ArtifactTaskOptions } from \"./application/artifact-tasks.types.ts\";\n\nexport { createSqliteTaskQueue } from \"./infrastructure/task-queue.ts\";\nexport {\n serveTaskQueue,\n createHttpTaskQueue,\n} from \"./infrastructure/task-queue-http.ts\";\nexport { runQueueWorker } from \"./application/queue-worker.ts\";\nexport { defineQueuedTask } from \"./application/queued-task.ts\";\nexport type {\n QueueRequest,\n QueueResult,\n QueueQuota,\n QueueJob,\n QueueClaim,\n QueueLease,\n TaskQueue,\n DurableTaskQueue,\n} from \"./domain/task-queue.types.ts\";\nexport type {\n QueueServerOptions,\n QueueServer,\n QueueClientOptions,\n} from \"./infrastructure/task-queue-http.types.ts\";\nexport type {\n QueueHandlerContext,\n QueueHandler,\n QueueWorkerOptions,\n} from \"./application/queue-worker.types.ts\";\nexport type { QueuedTaskOptions } from \"./application/queued-task.types.ts\";\nexport { createCronSchedule } from \"./domain/cron.ts\";\nexport type { CronOptions, CronSchedule } from \"./domain/cron.types.ts\";\nexport type {\n TriggerJob,\n TriggerJobInput,\n} from \"./domain/trigger-job.types.ts\";\nexport { runSchedules } from \"./application/schedules.ts\";\nexport { serveTriggers } from \"./infrastructure/trigger-server.ts\";\nexport type {\n TriggerFailure,\n TriggerRoute,\n TriggerServer,\n TriggerServerOptions,\n} from \"./infrastructure/trigger-server.types.ts\";\nexport type {\n TriggerEvent,\n TriggerHttpRequest,\n TriggerOutcome,\n TriggerReply,\n TriggerSecret,\n TriggerSource,\n} from \"./domain/trigger.types.ts\";\nexport { createGithubWebhook } from \"./adapters/triggers/github-webhook.ts\";\nexport { createGitlabWebhook } from \"./adapters/triggers/gitlab-webhook.ts\";\nexport { createSlackSource } from \"./adapters/triggers/slack-request.ts\";\nexport { createStandardWebhook } from \"./adapters/triggers/standard-webhook.ts\";\nexport {\n commandIssued,\n labelAdded,\n} from \"./adapters/triggers/trigger-events.ts\";\nexport type {\n GithubWebhookOptions,\n GitlabSigningOptions,\n GitlabTokenOptions,\n GitlabWebhookOptions,\n SlackRequestOptions,\n StandardWebhookOptions,\n TriggerCommand,\n TriggerLabel,\n} from \"./adapters/triggers/triggers.types.ts\";\nexport { defineWorkflowJob } from \"./application/workflow-job.ts\";\nexport type {\n WorkflowJobCheckpoint,\n WorkflowJobContext,\n WorkflowJobOptions,\n WorkflowJobStartOptions,\n} from \"./application/workflow-job.types.ts\";\nexport type {\n RunSchedulesOptions,\n ScheduleFailure,\n TriggerSchedule,\n} from \"./application/schedules.types.ts\";\n\nexport type { EgressPolicy } from \"./domain/egress.types.ts\";\n\nexport { recoverSpeculation } from \"./infrastructure/speculation-store.ts\";\nexport type { SpeculationRecoveryOptions } from \"./infrastructure/speculation-store.types.ts\";\nexport { checkSpeculationIntegration } from \"./application/speculation-integration.ts\";\nexport { speculate } from \"./application/speculation.ts\";\nexport type {\n SpeculationDurability,\n SpeculationIntegration,\n SpeculationOptions,\n SpeculationResult,\n SpeculativeCandidate,\n SpeculativeCandidateResult,\n SpeculativeOutput,\n SpeculativeHostSnapshot,\n SpeculativeValidation,\n} from \"./application/speculation.types.ts\";\n\nexport { createOpenAIModelProvider } from \"./adapters/models/openai-model-provider.ts\";\nexport type { OpenAIModelProviderOptions } from \"./adapters/models/openai-model-provider.types.ts\";\nexport type {\n AgentModel,\n ModelContentBlock,\n ModelMessage,\n ModelProvider,\n ModelReasoning,\n ModelReasoningBlock,\n ModelRequest,\n ModelResult,\n ModelSpec,\n ModelStopReason,\n ModelStreamEvent,\n ModelTextBlock,\n ModelToolCallBlock,\n ModelToolResultBlock,\n ModelToolSpec,\n} from \"./domain/model.types.ts\";\nexport { createAnthropicModelProvider } from \"./adapters/models/anthropic-model-provider.ts\";\nexport type { AnthropicModelProviderOptions } from \"./adapters/models/anthropic-model-provider.types.ts\";\n\nexport { createObservationHub } from \"./domain/observation.ts\";\nexport type {\n Observation,\n ObservationScope,\n ObservationSource,\n ObservationEvent,\n OperationEvent,\n ObservationHub,\n ObservationHubOptions,\n ObservationSink,\n} from \"./domain/observation.types.ts\";\n\nexport {\n signWorkflowDecision,\n createEd25519DecisionVerifier,\n} from \"./infrastructure/workflow-decision-signature.ts\";\nexport type {\n WorkflowDecisionSigningOptions,\n WorkflowApproverKey,\n WorkflowDecisionVerifierOptions,\n} from \"./infrastructure/workflow-decision-signature.types.ts\";\n\nexport { defineInteractiveAgentTask } from \"./application/interactive-task.ts\";\nexport type {\n InteractiveAgentTaskOptions,\n InteractiveAgentResult,\n FileInteractiveAgentTaskOptions,\n FileInteractiveAgentResult,\n} from \"./application/interactive-task.types.ts\";\nexport type {\n WorkflowInputQuestion,\n WorkflowInputRequest,\n WorkflowAnswer,\n WorkflowAnswerRecord,\n TaskInteraction,\n TaskInteractionRecord,\n TaskInteractionContext,\n} from \"./domain/workflow/input.types.ts\";\nexport {\n defineLoopTask,\n LoopTaskExhausted,\n} from \"./domain/workflow/loop-task.ts\";\nexport type {\n TaskCacheAccessOptions,\n TaskCacheEntry,\n TaskCacheMode,\n TaskCacheOptions,\n TaskCacheOutcome,\n TaskCacheStore,\n} from \"./domain/workflow/task-cache.types.ts\";\nexport type {\n LoopCheckResult,\n LoopTaskContext,\n LoopTaskOptions,\n LoopRoundRecord,\n} from \"./domain/workflow/loop-task.types.ts\";\nexport { defineDecision } from \"./domain/decision.ts\";\nexport { decide } from \"./application/decision.ts\";\nexport { defineDecisionTask } from \"./application/decision-task.ts\";\nexport { createSystemOneDecisionProvider } from \"./adapters/decisions/system-one-provider.ts\";\nexport { defineHarnessModelRouting } from \"./domain/harness-routing.ts\";\nexport type {\n DecisionState,\n ChoiceQuestion,\n ScoreQuestion,\n NoulQuestion,\n DecisionQuestion,\n DecisionQuestions,\n DecisionOptions,\n Decision,\n ChoiceAnswer,\n ScoreAnswer,\n NoulAnswer,\n DecisionAnswer,\n DecisionAnswers,\n DecisionProviderResult,\n DecisionRequest,\n DecisionProvider,\n DecisionResult,\n DecideOptions,\n DecisionEvent,\n} from \"./domain/decision.types.ts\";\nexport type { DecisionTaskOptions } from \"./application/decision.types.ts\";\nexport type { SystemOneDecisionProviderOptions } from \"./adapters/decisions/system-one-provider.types.ts\";\nexport type {\n HarnessModelRoutingContext,\n HarnessModelRoutingOptions,\n HarnessModelRouting,\n RoutingQuestion,\n RoutingChoices,\n ModelRouteEvent,\n} from \"./domain/harness-routing.types.ts\";\nexport { createAgentConflictResolver } from \"./application/agent-conflict-resolver.ts\";\nexport type {\n AgentConflictResolverOptions,\n ConflictContext,\n ConflictResolution,\n ConflictResolver,\n IntegrationOptions,\n} from \"./application/conflict-resolution.types.ts\";\n\nexport { calculateUsageCost } from \"./domain/pricing.ts\";\nexport type {\n ModelPrice,\n ModelPriceTable,\n ModelUsage,\n UsageCost,\n} from \"./domain/pricing.types.ts\";\nexport { WorkflowCostUnavailable } from \"./domain/workflow/budget.ts\";\nexport { loadModelPrices } from \"./adapters/models/model-prices.ts\";\nexport type { ModelPricesOptions } from \"./adapters/models/model-prices.types.ts\";\n\nexport type {\n RunReport,\n RunReportOptions,\n RunReportDiff,\n RunReportFile,\n RunReportFailure,\n} from \"./domain/run-report.types.ts\";\nexport { createRunObserver } from \"./infrastructure/run-observer.ts\";\nexport { readRun, watchRun } from \"./infrastructure/run-reader.ts\";\nexport type {\n RunStatus,\n RunTask,\n RunPass,\n RunDispatch,\n RunError,\n RunSnapshot,\n RunEvent,\n RunObserverOptions,\n RunObserver,\n ReadRunOptions,\n WatchRunOptions,\n} from \"./domain/run.types.ts\";\nexport { changed } from \"./domain/lifecycle.ts\";\nexport { fromSecrets } from \"./application/secrets.ts\";\nexport type {\n SecretSource,\n SecretResolveOptions,\n FromSecretsOptions,\n} from \"./domain/secrets.types.ts\";\nexport type {\n ChangedCondition,\n LifecycleCommand,\n} from \"./domain/lifecycle.types.ts\";\nexport {\n createWorkspace,\n restoreFileWorkspace,\n workspaceFingerprint,\n} from \"./application/file-workspace.ts\";\nexport { prepareWorkspaceOutputs } from \"./application/workspace-output-baseline.ts\";\nexport {\n publishWorkspaceOutputs,\n inspectWorkspacePublication,\n recoverWorkspacePublication,\n} from \"./application/workspace-publication.ts\";\nexport {\n snapshotWorkspaceFiles,\n restoreWorkspaceFiles,\n} from \"./infrastructure/workspace-snapshot.ts\";\nexport type {\n FileWorkspace,\n FileWorkspaceOptions,\n GitWorkspace,\n GitWorkspaceOptions,\n CreatedWorkspace,\n FileWorkspaceRecoveryAuthorization,\n} from \"./application/file-workspace.types.ts\";\nexport type {\n FileSandbox,\n FileSandboxOptions,\n FileSandboxSettings,\n FileDispatchRequest,\n FileDispatchResult,\n FileAttachResult,\n} from \"./application/file-sandbox.types.ts\";\nexport type {\n WorkspaceSource,\n FileWorkspaceSource,\n GitWorkspaceSource,\n WorkspaceSession,\n FileWorkspaceRecord,\n WorkspaceRuntime,\n WorkspaceRuntimeOptions,\n WorkspaceRetention,\n WorkspaceInput,\n WorkspaceOutputOptions,\n WorkspacePublication,\n WorkspaceFileEntry,\n WorkspaceAllocationRecord,\n WorkspaceConversationArchive,\n WorkspaceOutputBaseline,\n} from \"./domain/file-workspace.types.ts\";\nexport type {\n FileSandboxContext,\n SandboxWorkspaces,\n} from \"./domain/sandbox.types.ts\";\nexport {\n inspectWorkspacePathLocks,\n recoverWorkspacePathLock,\n} from \"./infrastructure/workspace-lock.ts\";\nexport type { RestoreFileWorkspaceOptions } from \"./application/file-workspace.types.ts\";\nexport type {\n WorkspacePathLock,\n WorkspacePathRecoveryOptions,\n} from \"./infrastructure/workspace-lock.types.ts\";\nexport type {\n PublicationJournal,\n PublicationOperation,\n PublicationDirectory,\n PublicationRecoveryOptions,\n} from \"./application/workspace-publication.types.ts\";\nexport type {\n FileAgentTaskOptions,\n FileIsolatedTaskOptions,\n MixedIsolatedTaskOptions,\n MixedAgentTaskOptions,\n IsolatedCommandTaskOptions,\n FileIsolatedCommandRequest,\n} from \"./application/tasks.types.ts\";\nexport type { FileSelectionOptions } from \"./adapters/tools/tools.types.ts\";\nexport type {\n FileRecipeBindings,\n MixedRecipeBindings,\n FileRecipeConfiguration,\n} from \"./application/recipe.types.ts\";\nexport type {\n GitWorkspaceSandboxOptions,\n GitDispatchRequest,\n} from \"./application/file-workspace.types.ts\";\nexport type { FileRunReport } from \"./domain/run-report.types.ts\";\nexport {\n inspectFileWorkspace,\n recoverFileWorkspace,\n} from \"./application/file-workspace-recovery.ts\";\nexport type {\n FileWorkspaceInspection,\n FileWorkspaceInspectionOptions,\n FileWorkspaceRecoveryOptions,\n} from \"./application/file-workspace-recovery.types.ts\";\n\nexport type { HookCommand } from \"./domain/hook-command.types.ts\";\nexport type { AgentHookContext } from \"./domain/agent-hook.types.ts\";\nexport { defineClaudeHook } from \"./adapters/agents/claude/claude-hooks.ts\";\nexport type {\n ClaudeHook,\n ClaudeHookOptions,\n ClaudeHookPhase,\n ClaudeHookEvents,\n ClaudeHookDecisions,\n} from \"./adapters/agents/claude/claude-hooks.types.ts\";\nexport { defineCodexHook } from \"./adapters/agents/codex/codex-hooks.ts\";\nexport type {\n CodexHook,\n CodexHookOptions,\n CodexHookPhase,\n CodexHookEvents,\n CodexHookDecisions,\n} from \"./adapters/agents/codex/codex-hooks.types.ts\";\nexport { defineCopilotHook } from \"./adapters/agents/copilot/copilot-hooks.ts\";\nexport type {\n CopilotHook,\n CopilotHookOptions,\n CopilotHookPhase,\n CopilotHookEvents,\n CopilotHookDecisions,\n} from \"./adapters/agents/copilot/copilot-hooks.types.ts\";\nexport { defineKimiHook } from \"./adapters/agents/kimi/kimi-hooks.ts\";\nexport type {\n KimiHook,\n KimiHookOptions,\n KimiHookPhase,\n KimiHookEvents,\n KimiHookDecisions,\n} from \"./adapters/agents/kimi/kimi-hooks.types.ts\";\nexport { defineAntigravityHook } from \"./adapters/agents/antigravity/antigravity-hooks.ts\";\nexport type {\n AntigravityHook,\n AntigravityHookOptions,\n AntigravityHookPhase,\n AntigravityHookEvents,\n AntigravityHookDecisions,\n} from \"./adapters/agents/antigravity/antigravity-hooks.types.ts\";\n\nexport {\n inspectStorageReservations,\n recoverStorageReservation,\n} from \"./infrastructure/reservation-recovery.ts\";\nexport type {\n StorageReservationRecord,\n StorageReservationInspection,\n StorageReservationRecoveryOptions,\n} from \"./infrastructure/transport-reservations.types.ts\";\n"]}
|
|
@@ -2,9 +2,9 @@ import { redactTranscript } from "./redaction.js";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
|
-
import { dirname, join, posix, relative, resolve } from "node:path";
|
|
5
|
+
import { basename, dirname, join, posix, relative, resolve } from "node:path";
|
|
6
6
|
import { invariant, OutpostError } from "../../domain/errors.js";
|
|
7
|
-
import { safeDestination } from "../files.js";
|
|
7
|
+
import { inside, safeDestination } from "../files.js";
|
|
8
8
|
import { transcriptSearchBytes } from "./conversation.constants.js";
|
|
9
9
|
import { files } from "./files.js";
|
|
10
10
|
import { validId } from "./identity.js";
|
|
@@ -15,11 +15,17 @@ async function locateTranscript(layout, id, repository, home = homedir()) {
|
|
|
15
15
|
const expected = layout.preferredPath?.(id, repository, home);
|
|
16
16
|
if (expected && (await stat(expected).catch(() => undefined))?.isFile())
|
|
17
17
|
return { id, file: expected, format };
|
|
18
|
-
const
|
|
18
|
+
const matches = (await files(layout.searchRoot(home))).filter((file) => layout.matches(file, id));
|
|
19
|
+
const found = uniqueTranscript(matches, id);
|
|
19
20
|
if (found)
|
|
20
21
|
return { id, file: found, format };
|
|
21
22
|
throw new OutpostError("session", `Conversation ${id} was not found in native ${format} storage`, { id, repository });
|
|
22
23
|
}
|
|
24
|
+
function uniqueTranscript(matches, id) {
|
|
25
|
+
if (matches.length > 1)
|
|
26
|
+
throw new OutpostError("session", `Conversation ${id} has multiple native transcripts; select or reconcile the copies explicitly`, { id, files: matches });
|
|
27
|
+
return matches[0];
|
|
28
|
+
}
|
|
23
29
|
async function captureSidecars(id, remote, file, context) {
|
|
24
30
|
const { sandbox, staging, repository } = context;
|
|
25
31
|
const remoteSidecars = posix.join(posix.dirname(remote.replaceAll("\\", "/")), id, "subagents");
|
|
@@ -69,10 +75,31 @@ async function captureTranscript(layout, id, context) {
|
|
|
69
75
|
arguments: [search, "-type", "f", "-name", layout.pattern(id)],
|
|
70
76
|
retain: transcriptSearchBytes,
|
|
71
77
|
});
|
|
72
|
-
const
|
|
78
|
+
const matches = result.stdout.trim().split("\n").filter(Boolean);
|
|
79
|
+
const preferred = layout
|
|
80
|
+
.preferredPath?.(id, sandbox.root, sandbox.home)
|
|
81
|
+
?.replaceAll("\\", "/");
|
|
82
|
+
const remote = matches.find((file) => file.replaceAll("\\", "/") === preferred) ??
|
|
83
|
+
uniqueTranscript(matches, id);
|
|
73
84
|
if (result.status !== 0 || !remote)
|
|
74
85
|
throw new OutpostError("session", `Agent emitted conversation ${id} but its transcript is unavailable`, { id, search });
|
|
75
|
-
|
|
86
|
+
let file = layout.capturePath(id, repository, home, remote);
|
|
87
|
+
if (context.local) {
|
|
88
|
+
if (inside(layout.directory(repository, home), remote))
|
|
89
|
+
file = remote;
|
|
90
|
+
const [source, destination] = await Promise.all([
|
|
91
|
+
stat(remote),
|
|
92
|
+
stat(file).catch(() => undefined),
|
|
93
|
+
]);
|
|
94
|
+
if (resolve(file) === resolve(remote) ||
|
|
95
|
+
(destination &&
|
|
96
|
+
source.dev === destination.dev &&
|
|
97
|
+
source.ino === destination.ino)) {
|
|
98
|
+
if (!context.observation?.redacting)
|
|
99
|
+
return { id, file: remote, format: layout.format };
|
|
100
|
+
file = join(context.runtimeDirectory ?? join(repository, ".outpost"), "conversations", "native", encodeURIComponent(layout.format), id, basename(remote));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
76
103
|
await mkdir(staging, { recursive: true });
|
|
77
104
|
const temporary = join(staging, `${randomUUID()}.jsonl`);
|
|
78
105
|
await sandbox.download(remote, temporary);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-store.js","sourceRoot":"","sources":["../../../src/infrastructure/conversations/transcript-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { redactTranscript } from \"./redaction.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, posix, relative, resolve } from \"node:path\";\nimport type {\n ConversationContext,\n ConversationRecord,\n NativeConversationStore,\n} from \"../../domain/conversation.types.ts\";\nimport { invariant, OutpostError } from \"../../domain/errors.ts\";\nimport type { SandboxLease } from \"../../domain/sandbox.types.ts\";\nimport { safeDestination } from \"../files.ts\";\nimport { transcriptSearchBytes } from \"./conversation.constants.ts\";\nimport { files } from \"./files.ts\";\nimport { validId } from \"./identity.ts\";\nimport type { TranscriptConversationLayout } from \"./layout.types.ts\";\nimport { relocateTranscript } from \"./relocate.ts\";\n\nasync function locateTranscript(\n layout: TranscriptConversationLayout,\n id: string,\n repository: string,\n home = homedir(),\n): Promise<ConversationRecord> {\n validId(id);\n const { format } = layout;\n const expected = layout.preferredPath?.(id, repository, home);\n if (expected && (await stat(expected).catch(() => undefined))?.isFile())\n return { id, file: expected, format };\n const found = (await files(layout.searchRoot(home))).find((file) =>\n layout.matches(file, id),\n );\n if (found) return { id, file: found, format };\n throw new OutpostError(\n \"session\",\n `Conversation ${id} was not found in native ${format} storage`,\n { id, repository },\n );\n}\n\nasync function captureSidecars(\n id: string,\n remote: string,\n file: string,\n context: ConversationContext,\n): Promise<void> {\n const { sandbox, staging, repository } = context;\n const remoteSidecars = posix.join(\n posix.dirname(remote.replaceAll(\"\\\\\", \"/\")),\n id,\n \"subagents\",\n );\n const listed = context.local\n ? {\n status: 0,\n stdout: (await files(join(dirname(remote), id, \"subagents\"))).join(\n \"\\n\",\n ),\n }\n : await sandbox.invoke({\n executable: \"find\",\n arguments: [remoteSidecars, \"-type\", \"f\", \"-name\", \"*.jsonl\"],\n retain: transcriptSearchBytes,\n });\n if (listed.status !== 0) return;\n for (const child of listed.stdout.split(\"\\n\").filter(Boolean)) {\n try {\n const scratch = join(staging, `${randomUUID()}.jsonl`);\n await sandbox.download(child, scratch);\n const destination = await safeDestination(\n join(dirname(file), id, \"subagents\"),\n posix.relative(\n remoteSidecars.replaceAll(\"\\\\\", \"/\"),\n child.replaceAll(\"\\\\\", \"/\"),\n ),\n );\n await mkdir(dirname(destination), { recursive: true });\n try {\n await writeFile(\n destination,\n relocateTranscript(\n redactTranscript(\n await readFile(scratch, \"utf8\"),\n context.observation,\n ),\n resolve(repository),\n ),\n { mode: 0o600 },\n );\n } finally {\n await rm(scratch, { force: true });\n }\n } catch (cause) {\n context.warn?.(`Could not capture child transcript: ${String(cause)}`);\n }\n }\n}\n\nasync function captureTranscript(\n layout: TranscriptConversationLayout,\n id: string,\n context: ConversationContext,\n): Promise<ConversationRecord> {\n validId(id);\n const { sandbox, staging, repository } = context;\n const home = context.home ?? homedir();\n const search = layout.remoteSearchRoot(sandbox.home);\n const result = context.local\n ? {\n status: 0,\n stdout: (await locateTranscript(layout, id, sandbox.root, sandbox.home))\n .file,\n }\n : await sandbox.invoke({\n executable: \"find\",\n arguments: [search, \"-type\", \"f\", \"-name\", layout.pattern(id)],\n retain: transcriptSearchBytes,\n });\n const remote = result.stdout.trim().split(\"\\n\").filter(Boolean)[0];\n if (result.status !== 0 || !remote)\n throw new OutpostError(\n \"session\",\n `Agent emitted conversation ${id} but its transcript is unavailable`,\n { id, search },\n );\n const file = layout.capturePath(id, repository, home, remote);\n await mkdir(staging, { recursive: true });\n const temporary = join(staging, `${randomUUID()}.jsonl`);\n await sandbox.download(remote, temporary);\n await mkdir(dirname(file), { recursive: true });\n try {\n await writeFile(\n file,\n relocateTranscript(\n redactTranscript(\n await readFile(temporary, \"utf8\"),\n context.observation,\n ),\n resolve(repository),\n ),\n { mode: 0o600 },\n );\n } finally {\n await rm(temporary, { force: true });\n }\n if (layout.sidecars) await captureSidecars(id, remote, file, context);\n return { id, file, format: layout.format };\n}\n\nasync function uploadRelocated(\n file: string,\n target: string,\n sandbox: SandboxLease,\n staging: string,\n): Promise<void> {\n const temporary = join(staging, `${randomUUID()}.jsonl`);\n await mkdir(staging, { recursive: true });\n await writeFile(\n temporary,\n relocateTranscript(await readFile(file, \"utf8\"), sandbox.root),\n { mode: 0o600 },\n );\n try {\n await sandbox.upload(temporary, target);\n } finally {\n await rm(temporary, { force: true });\n }\n}\n\nasync function restoreTranscript(\n layout: TranscriptConversationLayout,\n record: ConversationRecord,\n { sandbox, staging }: ConversationContext,\n): Promise<void> {\n validId(record.id);\n const target = layout.remotePath(record.id, sandbox, record.file);\n await uploadRelocated(record.file, target, sandbox, staging);\n if (!layout.sidecars) return;\n const sidecars = join(dirname(record.file), record.id, \"subagents\");\n for (const file of await files(sidecars))\n await uploadRelocated(\n file,\n posix.join(\n posix.dirname(target),\n record.id,\n \"subagents\",\n relative(sidecars, file).replaceAll(\"\\\\\", \"/\"),\n ),\n sandbox,\n staging,\n );\n}\n\n/** Creates a native store for CLIs that keep one JSONL transcript per conversation. */\nexport function createTranscriptConversations(\n layout: TranscriptConversationLayout,\n): NativeConversationStore {\n const { format } = layout;\n invariant(\n typeof format === \"string\" && format.length > 0,\n \"Transcript layouts require a format name\",\n );\n return {\n name: format,\n format,\n locate: (id, repository, home) =>\n locateTranscript(layout, id, repository, home),\n capture: (id, context) => captureTranscript(layout, id, context),\n async restore(record, context) {\n invariant(\n record.format === format,\n \"Conversation format does not match its storage\",\n );\n if (\n context.local &&\n context.sandbox.root === context.repository &&\n record.reference === undefined\n )\n return;\n return restoreTranscript(layout, record, context);\n },\n directory: (repository, home) =>\n layout.directory(repository, home ?? homedir()),\n destination(id, sandbox, original) {\n validId(id);\n return layout.remotePath(id, sandbox, original);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"transcript-store.js","sourceRoot":"","sources":["../../../src/infrastructure/conversations/transcript-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { redactTranscript } from \"./redaction.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, posix, relative, resolve } from \"node:path\";\nimport type {\n ConversationContext,\n ConversationRecord,\n NativeConversationStore,\n} from \"../../domain/conversation.types.ts\";\nimport { invariant, OutpostError } from \"../../domain/errors.ts\";\nimport type { SandboxLease } from \"../../domain/sandbox.types.ts\";\nimport { inside, safeDestination } from \"../files.ts\";\nimport { transcriptSearchBytes } from \"./conversation.constants.ts\";\nimport { files } from \"./files.ts\";\nimport { validId } from \"./identity.ts\";\nimport type { TranscriptConversationLayout } from \"./layout.types.ts\";\nimport { relocateTranscript } from \"./relocate.ts\";\n\nasync function locateTranscript(\n layout: TranscriptConversationLayout,\n id: string,\n repository: string,\n home = homedir(),\n): Promise<ConversationRecord> {\n validId(id);\n const { format } = layout;\n const expected = layout.preferredPath?.(id, repository, home);\n if (expected && (await stat(expected).catch(() => undefined))?.isFile())\n return { id, file: expected, format };\n const matches = (await files(layout.searchRoot(home))).filter((file) =>\n layout.matches(file, id),\n );\n const found = uniqueTranscript(matches, id);\n if (found) return { id, file: found, format };\n throw new OutpostError(\n \"session\",\n `Conversation ${id} was not found in native ${format} storage`,\n { id, repository },\n );\n}\n\nfunction uniqueTranscript(\n matches: readonly string[],\n id: string,\n): string | undefined {\n if (matches.length > 1)\n throw new OutpostError(\n \"session\",\n `Conversation ${id} has multiple native transcripts; select or reconcile the copies explicitly`,\n { id, files: matches },\n );\n return matches[0];\n}\n\nasync function captureSidecars(\n id: string,\n remote: string,\n file: string,\n context: ConversationContext,\n): Promise<void> {\n const { sandbox, staging, repository } = context;\n const remoteSidecars = posix.join(\n posix.dirname(remote.replaceAll(\"\\\\\", \"/\")),\n id,\n \"subagents\",\n );\n const listed = context.local\n ? {\n status: 0,\n stdout: (await files(join(dirname(remote), id, \"subagents\"))).join(\n \"\\n\",\n ),\n }\n : await sandbox.invoke({\n executable: \"find\",\n arguments: [remoteSidecars, \"-type\", \"f\", \"-name\", \"*.jsonl\"],\n retain: transcriptSearchBytes,\n });\n if (listed.status !== 0) return;\n for (const child of listed.stdout.split(\"\\n\").filter(Boolean)) {\n try {\n const scratch = join(staging, `${randomUUID()}.jsonl`);\n await sandbox.download(child, scratch);\n const destination = await safeDestination(\n join(dirname(file), id, \"subagents\"),\n posix.relative(\n remoteSidecars.replaceAll(\"\\\\\", \"/\"),\n child.replaceAll(\"\\\\\", \"/\"),\n ),\n );\n await mkdir(dirname(destination), { recursive: true });\n try {\n await writeFile(\n destination,\n relocateTranscript(\n redactTranscript(\n await readFile(scratch, \"utf8\"),\n context.observation,\n ),\n resolve(repository),\n ),\n { mode: 0o600 },\n );\n } finally {\n await rm(scratch, { force: true });\n }\n } catch (cause) {\n context.warn?.(`Could not capture child transcript: ${String(cause)}`);\n }\n }\n}\n\nasync function captureTranscript(\n layout: TranscriptConversationLayout,\n id: string,\n context: ConversationContext,\n): Promise<ConversationRecord> {\n validId(id);\n const { sandbox, staging, repository } = context;\n const home = context.home ?? homedir();\n const search = layout.remoteSearchRoot(sandbox.home);\n const result = context.local\n ? {\n status: 0,\n stdout: (await locateTranscript(layout, id, sandbox.root, sandbox.home))\n .file,\n }\n : await sandbox.invoke({\n executable: \"find\",\n arguments: [search, \"-type\", \"f\", \"-name\", layout.pattern(id)],\n retain: transcriptSearchBytes,\n });\n const matches = result.stdout.trim().split(\"\\n\").filter(Boolean);\n const preferred = layout\n .preferredPath?.(id, sandbox.root, sandbox.home)\n ?.replaceAll(\"\\\\\", \"/\");\n const remote =\n matches.find((file) => file.replaceAll(\"\\\\\", \"/\") === preferred) ??\n uniqueTranscript(matches, id);\n if (result.status !== 0 || !remote)\n throw new OutpostError(\n \"session\",\n `Agent emitted conversation ${id} but its transcript is unavailable`,\n { id, search },\n );\n let file = layout.capturePath(id, repository, home, remote);\n if (context.local) {\n if (inside(layout.directory(repository, home), remote)) file = remote;\n const [source, destination] = await Promise.all([\n stat(remote),\n stat(file).catch(() => undefined),\n ]);\n if (\n resolve(file) === resolve(remote) ||\n (destination &&\n source.dev === destination.dev &&\n source.ino === destination.ino)\n ) {\n if (!context.observation?.redacting)\n return { id, file: remote, format: layout.format };\n file = join(\n context.runtimeDirectory ?? join(repository, \".outpost\"),\n \"conversations\",\n \"native\",\n encodeURIComponent(layout.format),\n id,\n basename(remote),\n );\n }\n }\n await mkdir(staging, { recursive: true });\n const temporary = join(staging, `${randomUUID()}.jsonl`);\n await sandbox.download(remote, temporary);\n await mkdir(dirname(file), { recursive: true });\n try {\n await writeFile(\n file,\n relocateTranscript(\n redactTranscript(\n await readFile(temporary, \"utf8\"),\n context.observation,\n ),\n resolve(repository),\n ),\n { mode: 0o600 },\n );\n } finally {\n await rm(temporary, { force: true });\n }\n if (layout.sidecars) await captureSidecars(id, remote, file, context);\n return { id, file, format: layout.format };\n}\n\nasync function uploadRelocated(\n file: string,\n target: string,\n sandbox: SandboxLease,\n staging: string,\n): Promise<void> {\n const temporary = join(staging, `${randomUUID()}.jsonl`);\n await mkdir(staging, { recursive: true });\n await writeFile(\n temporary,\n relocateTranscript(await readFile(file, \"utf8\"), sandbox.root),\n { mode: 0o600 },\n );\n try {\n await sandbox.upload(temporary, target);\n } finally {\n await rm(temporary, { force: true });\n }\n}\n\nasync function restoreTranscript(\n layout: TranscriptConversationLayout,\n record: ConversationRecord,\n { sandbox, staging }: ConversationContext,\n): Promise<void> {\n validId(record.id);\n const target = layout.remotePath(record.id, sandbox, record.file);\n await uploadRelocated(record.file, target, sandbox, staging);\n if (!layout.sidecars) return;\n const sidecars = join(dirname(record.file), record.id, \"subagents\");\n for (const file of await files(sidecars))\n await uploadRelocated(\n file,\n posix.join(\n posix.dirname(target),\n record.id,\n \"subagents\",\n relative(sidecars, file).replaceAll(\"\\\\\", \"/\"),\n ),\n sandbox,\n staging,\n );\n}\n\n/** Creates a native store for CLIs that keep one JSONL transcript per conversation. */\nexport function createTranscriptConversations(\n layout: TranscriptConversationLayout,\n): NativeConversationStore {\n const { format } = layout;\n invariant(\n typeof format === \"string\" && format.length > 0,\n \"Transcript layouts require a format name\",\n );\n return {\n name: format,\n format,\n locate: (id, repository, home) =>\n locateTranscript(layout, id, repository, home),\n capture: (id, context) => captureTranscript(layout, id, context),\n async restore(record, context) {\n invariant(\n record.format === format,\n \"Conversation format does not match its storage\",\n );\n if (\n context.local &&\n context.sandbox.root === context.repository &&\n record.reference === undefined\n )\n return;\n return restoreTranscript(layout, record, context);\n },\n directory: (repository, home) =>\n layout.directory(repository, home ?? homedir()),\n destination(id, sandbox, original) {\n validId(id);\n return layout.remotePath(id, sandbox, original);\n },\n };\n}\n"]}
|