@intentic/sandbox-contract 1.248.0 → 1.250.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/dist/chores/chores.d.ts.map +1 -1
- package/dist/chores/chores.js.map +1 -1
- package/dist/chores/digest.d.ts.map +1 -1
- package/dist/chores/digest.js.map +1 -1
- package/dist/chores/extension-update.d.ts.map +1 -1
- package/dist/chores/extension-update.js.map +1 -1
- package/dist/chores/fix-deps.d.ts.map +1 -1
- package/dist/chores/fix-deps.js.map +1 -1
- package/dist/chores/index.d.ts +2 -2
- package/dist/chores/index.d.ts.map +1 -1
- package/dist/chores/index.js +1 -1
- package/dist/chores/index.js.map +1 -1
- package/dist/chores/probes.d.ts.map +1 -1
- package/dist/chores/probes.js.map +1 -1
- package/dist/chores/prompt.d.ts.map +1 -1
- package/dist/chores/prompt.js.map +1 -1
- package/dist/chores/stack.d.ts.map +1 -1
- package/dist/chores/stack.js.map +1 -1
- package/dist/chores/verdict.d.ts +7 -1
- package/dist/chores/verdict.d.ts.map +1 -1
- package/dist/chores/verdict.js +8 -0
- package/dist/chores/verdict.js.map +1 -1
- package/dist/contracts/accounts.contract.d.ts.map +1 -1
- package/dist/contracts/accounts.contract.js.map +1 -1
- package/dist/contracts/activity.contract.d.ts +1 -0
- package/dist/contracts/activity.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.d.ts +12 -205
- package/dist/contracts/agent.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.js +2 -1
- package/dist/contracts/agent.contract.js.map +1 -1
- package/dist/contracts/agents.contract.d.ts +228 -54
- package/dist/contracts/agents.contract.d.ts.map +1 -1
- package/dist/contracts/agents.contract.js +11 -2
- package/dist/contracts/agents.contract.js.map +1 -1
- package/dist/contracts/automations.contract.d.ts +35 -17
- package/dist/contracts/automations.contract.d.ts.map +1 -1
- package/dist/contracts/automations.contract.js +10 -1
- package/dist/contracts/automations.contract.js.map +1 -1
- package/dist/contracts/capabilities.contract.d.ts +0 -12
- package/dist/contracts/capabilities.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.js +1 -1
- package/dist/contracts/capabilities.contract.js.map +1 -1
- package/dist/contracts/chores.contract.d.ts.map +1 -1
- package/dist/contracts/chores.contract.js.map +1 -1
- package/dist/contracts/ci.contract.d.ts +9 -0
- package/dist/contracts/ci.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.js.map +1 -1
- package/dist/contracts/exit.contract.d.ts.map +1 -1
- package/dist/contracts/exit.contract.js +1 -1
- package/dist/contracts/exit.contract.js.map +1 -1
- package/dist/contracts/extensions.contract.d.ts.map +1 -1
- package/dist/contracts/extensions.contract.js.map +1 -1
- package/dist/contracts/git.contract.d.ts +45 -6
- package/dist/contracts/git.contract.d.ts.map +1 -1
- package/dist/contracts/git.contract.js +9 -9
- package/dist/contracts/git.contract.js.map +1 -1
- package/dist/contracts/host.contract.d.ts +2 -0
- package/dist/contracts/host.contract.d.ts.map +1 -1
- package/dist/contracts/host.contract.js.map +1 -1
- package/dist/contracts/intentic.contract.js +1 -1
- package/dist/contracts/intentic.contract.js.map +1 -1
- package/dist/contracts/logs.contract.d.ts.map +1 -1
- package/dist/contracts/logs.contract.js.map +1 -1
- package/dist/contracts/loops.contract.d.ts.map +1 -1
- package/dist/contracts/loops.contract.js.map +1 -1
- package/dist/contracts/personas.contract.d.ts +1 -0
- package/dist/contracts/personas.contract.d.ts.map +1 -1
- package/dist/contracts/personas.contract.js +1 -1
- package/dist/contracts/personas.contract.js.map +1 -1
- package/dist/contracts/providers.contract.d.ts.map +1 -1
- package/dist/contracts/providers.contract.js.map +1 -1
- package/dist/contracts/runner.contract.d.ts +97 -171
- package/dist/contracts/runner.contract.d.ts.map +1 -1
- package/dist/contracts/runner.contract.js +2 -2
- package/dist/contracts/runner.contract.js.map +1 -1
- package/dist/contracts/safety.contract.d.ts.map +1 -1
- package/dist/contracts/safety.contract.js +1 -1
- package/dist/contracts/safety.contract.js.map +1 -1
- package/dist/contracts/secrets.contract.d.ts.map +1 -1
- package/dist/contracts/secrets.contract.js.map +1 -1
- package/dist/contracts/sessions.contract.d.ts +2 -41
- package/dist/contracts/sessions.contract.d.ts.map +1 -1
- package/dist/contracts/sessions.contract.js +1 -1
- package/dist/contracts/sessions.contract.js.map +1 -1
- package/dist/contracts/settings.contract.d.ts +8 -18
- package/dist/contracts/settings.contract.d.ts.map +1 -1
- package/dist/contracts/settings.contract.js.map +1 -1
- package/dist/contracts/share.contract.d.ts.map +1 -1
- package/dist/contracts/share.contract.js.map +1 -1
- package/dist/contracts/skills.contract.d.ts +6 -0
- package/dist/contracts/skills.contract.d.ts.map +1 -1
- package/dist/contracts/skills.contract.js +13 -4
- package/dist/contracts/skills.contract.js.map +1 -1
- package/dist/contracts/system.contract.d.ts +49 -73
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/contracts/system.contract.js +12 -2
- package/dist/contracts/system.contract.js.map +1 -1
- package/dist/contracts/usage.contract.d.ts.map +1 -1
- package/dist/contracts/usage.contract.js.map +1 -1
- package/dist/contracts/vpn.contract.d.ts.map +1 -1
- package/dist/contracts/vpn.contract.js +1 -1
- package/dist/contracts/vpn.contract.js.map +1 -1
- package/dist/contracts/webext.contract.d.ts.map +1 -1
- package/dist/contracts/webext.contract.js.map +1 -1
- package/dist/contracts/workflows.contract.d.ts +7 -6
- package/dist/contracts/workflows.contract.d.ts.map +1 -1
- package/dist/contracts/workflows.contract.js +12 -3
- package/dist/contracts/workflows.contract.js.map +1 -1
- package/dist/contracts/workspace.contract.d.ts.map +1 -1
- package/dist/contracts/workspace.contract.js.map +1 -1
- package/dist/events/agent-events.d.ts +1237 -0
- package/dist/events/agent-events.d.ts.map +1 -0
- package/dist/events/agent-events.js +226 -0
- package/dist/events/agent-events.js.map +1 -0
- package/dist/events/cards.d.ts +404 -0
- package/dist/events/cards.d.ts.map +1 -0
- package/dist/events/cards.js +179 -0
- package/dist/events/cards.js.map +1 -0
- package/dist/events/resume.d.ts +23 -0
- package/dist/events/resume.d.ts.map +1 -0
- package/dist/events/resume.js +31 -0
- package/dist/events/resume.js.map +1 -0
- package/dist/events/system-events.d.ts +615 -0
- package/dist/events/system-events.d.ts.map +1 -0
- package/dist/events/system-events.js +64 -0
- package/dist/events/system-events.js.map +1 -0
- package/dist/events/transcript.d.ts +1755 -0
- package/dist/events/transcript.d.ts.map +1 -0
- package/dist/events/transcript.js +205 -0
- package/dist/events/transcript.js.map +1 -0
- package/dist/ids/conversation-ids.d.ts +8 -0
- package/dist/ids/conversation-ids.d.ts.map +1 -0
- package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
- package/dist/ids/conversation-ids.js.map +1 -0
- package/dist/ids/hostnames.d.ts.map +1 -0
- package/dist/ids/hostnames.js.map +1 -0
- package/dist/ids/session-names.d.ts.map +1 -0
- package/dist/ids/session-names.js.map +1 -0
- package/dist/ids/share-paths.d.ts.map +1 -0
- package/dist/ids/share-paths.js.map +1 -0
- package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
- package/dist/ids/tunnel-ids.d.ts.map +1 -0
- package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
- package/dist/ids/tunnel-ids.js.map +1 -0
- package/dist/index.d.ts +429 -450
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -46
- package/dist/index.js.map +1 -1
- package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
- package/dist/models/agent-catalog.d.ts.map +1 -0
- package/dist/models/agent-catalog.js.map +1 -0
- package/dist/models/agent-runtimes.d.ts.map +1 -0
- package/dist/models/agent-runtimes.js.map +1 -0
- package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
- package/dist/models/fast-tier.d.ts.map +1 -0
- package/dist/models/fast-tier.js.map +1 -0
- package/dist/models/model-order.d.ts.map +1 -0
- package/dist/{model-order.js → models/model-order.js} +2 -0
- package/dist/models/model-order.js.map +1 -0
- package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
- package/dist/models/model-pins.d.ts.map +1 -0
- package/dist/models/model-pins.js.map +1 -0
- package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
- package/dist/models/model-roles.d.ts.map +1 -0
- package/dist/{model-roles.js → models/model-roles.js} +0 -35
- package/dist/models/model-roles.js.map +1 -0
- package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
- package/dist/models/plan-pools.d.ts.map +1 -0
- package/dist/models/plan-pools.js.map +1 -0
- package/dist/models/prompt-complexity.d.ts.map +1 -0
- package/dist/models/prompt-complexity.js.map +1 -0
- package/dist/models/provider-specs.d.ts.map +1 -0
- package/dist/models/provider-specs.js.map +1 -0
- package/dist/policy/approvals-execution.d.ts.map +1 -0
- package/dist/policy/approvals-execution.js.map +1 -0
- package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
- package/dist/policy/batch-runs.d.ts.map +1 -0
- package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
- package/dist/policy/batch-runs.js.map +1 -0
- package/dist/policy/capability-env.d.ts.map +1 -0
- package/dist/policy/capability-env.js.map +1 -0
- package/dist/policy/capability-secrets.d.ts.map +1 -0
- package/dist/policy/capability-secrets.js.map +1 -0
- package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
- package/dist/policy/card-status.d.ts.map +1 -0
- package/dist/{card-status.js → policy/card-status.js} +1 -5
- package/dist/policy/card-status.js.map +1 -0
- package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
- package/dist/policy/command-classes.d.ts.map +1 -0
- package/dist/{command-classes.js → policy/command-classes.js} +48 -11
- package/dist/policy/command-classes.js.map +1 -0
- package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
- package/dist/policy/command-run.d.ts.map +1 -0
- package/dist/policy/command-run.js.map +1 -0
- package/dist/policy/control-scopes.d.ts +16 -0
- package/dist/policy/control-scopes.d.ts.map +1 -0
- package/dist/policy/control-scopes.js +26 -0
- package/dist/policy/control-scopes.js.map +1 -0
- package/dist/policy/credential-material.d.ts.map +1 -0
- package/dist/policy/credential-material.js.map +1 -0
- package/dist/policy/needs-action.d.ts.map +1 -0
- package/dist/policy/needs-action.js.map +1 -0
- package/dist/policy/output-fields.d.ts.map +1 -0
- package/dist/policy/output-fields.js.map +1 -0
- package/dist/policy/overlay-lint.d.ts.map +1 -0
- package/dist/policy/overlay-lint.js.map +1 -0
- package/dist/policy/owner-ticket.d.ts.map +1 -0
- package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
- package/dist/policy/owner-ticket.js.map +1 -0
- package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
- package/dist/policy/safety-policy.d.ts.map +1 -0
- package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
- package/dist/policy/safety-policy.js.map +1 -0
- package/dist/policy/search-globs.d.ts.map +1 -0
- package/dist/policy/search-globs.js.map +1 -0
- package/dist/protocol/container-requirements.d.ts +20 -0
- package/dist/protocol/container-requirements.d.ts.map +1 -0
- package/dist/protocol/container-requirements.js +23 -0
- package/dist/protocol/container-requirements.js.map +1 -0
- package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
- package/dist/protocol/host-protocol.d.ts.map +1 -0
- package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
- package/dist/protocol/host-protocol.js.map +1 -0
- package/dist/protocol/ingress-contract.d.ts.map +1 -0
- package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
- package/dist/protocol/ingress-contract.js.map +1 -0
- package/dist/protocol/ingress-protocol.d.ts.map +1 -0
- package/dist/protocol/ingress-protocol.js.map +1 -0
- package/dist/protocol/listener-protocol.d.ts.map +1 -0
- package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
- package/dist/protocol/listener-protocol.js.map +1 -0
- package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
- package/dist/protocol/peer-dial.d.ts.map +1 -0
- package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
- package/dist/protocol/peer-dial.js.map +1 -0
- package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
- package/dist/protocol/peer-mcp-server.js.map +1 -0
- package/dist/protocol/request-id.d.ts.map +1 -0
- package/dist/protocol/request-id.js.map +1 -0
- package/dist/protocol/routes.d.ts.map +1 -0
- package/dist/protocol/routes.js.map +1 -0
- package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
- package/dist/protocol/runner-protocol.d.ts.map +1 -0
- package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
- package/dist/protocol/runner-protocol.js.map +1 -0
- package/dist/protocol/sse.d.ts.map +1 -0
- package/dist/protocol/sse.js.map +1 -0
- package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
- package/dist/protocol/terminal-protocol.d.ts.map +1 -0
- package/dist/protocol/terminal-protocol.js.map +1 -0
- package/dist/protocol/webext-links.d.ts.map +1 -0
- package/dist/protocol/webext-links.js.map +1 -0
- package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
- package/dist/protocol/webext-protocol.d.ts.map +1 -0
- package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
- package/dist/protocol/webext-protocol.js.map +1 -0
- package/dist/schemas/activity.d.ts +2 -0
- package/dist/schemas/activity.d.ts.map +1 -1
- package/dist/schemas/activity.js +4 -0
- package/dist/schemas/activity.js.map +1 -1
- package/dist/schemas/agent.d.ts +16 -4
- package/dist/schemas/agent.d.ts.map +1 -1
- package/dist/schemas/agent.js +21 -4
- package/dist/schemas/agent.js.map +1 -1
- package/dist/schemas/agents.d.ts +17 -4
- package/dist/schemas/agents.d.ts.map +1 -1
- package/dist/schemas/agents.js +15 -4
- package/dist/schemas/agents.js.map +1 -1
- package/dist/schemas/approvals.d.ts.map +1 -1
- package/dist/schemas/approvals.js.map +1 -1
- package/dist/schemas/automations.d.ts +54 -28
- package/dist/schemas/automations.d.ts.map +1 -1
- package/dist/schemas/automations.js +26 -8
- package/dist/schemas/automations.js.map +1 -1
- package/dist/schemas/capabilities.d.ts +0 -8
- package/dist/schemas/capabilities.d.ts.map +1 -1
- package/dist/schemas/capabilities.js +0 -4
- package/dist/schemas/capabilities.js.map +1 -1
- package/dist/schemas/ci.d.ts +10 -0
- package/dist/schemas/ci.d.ts.map +1 -1
- package/dist/schemas/ci.js +9 -1
- package/dist/schemas/ci.js.map +1 -1
- package/dist/schemas/codebase-health.d.ts.map +1 -1
- package/dist/schemas/codebase-health.js.map +1 -1
- package/dist/schemas/devices.d.ts +92 -0
- package/dist/schemas/devices.d.ts.map +1 -1
- package/dist/schemas/devices.js +12 -1
- package/dist/schemas/devices.js.map +1 -1
- package/dist/schemas/engines.d.ts.map +1 -1
- package/dist/schemas/engines.js.map +1 -1
- package/dist/schemas/environment.d.ts.map +1 -1
- package/dist/schemas/environment.js.map +1 -1
- package/dist/schemas/exit.d.ts.map +1 -1
- package/dist/schemas/exit.js.map +1 -1
- package/dist/schemas/extension-updates.d.ts.map +1 -1
- package/dist/schemas/extension-updates.js.map +1 -1
- package/dist/schemas/git-history.d.ts.map +1 -1
- package/dist/schemas/git-history.js.map +1 -1
- package/dist/schemas/git.d.ts +80 -16
- package/dist/schemas/git.d.ts.map +1 -1
- package/dist/schemas/git.js +37 -25
- package/dist/schemas/git.js.map +1 -1
- package/dist/schemas/history.d.ts.map +1 -1
- package/dist/schemas/history.js.map +1 -1
- package/dist/schemas/hosts.d.ts.map +1 -1
- package/dist/schemas/hosts.js.map +1 -1
- package/dist/schemas/inventory.d.ts.map +1 -1
- package/dist/schemas/inventory.js.map +1 -1
- package/dist/schemas/issues.d.ts +0 -1
- package/dist/schemas/issues.d.ts.map +1 -1
- package/dist/schemas/issues.js +0 -1
- package/dist/schemas/issues.js.map +1 -1
- package/dist/schemas/logs.d.ts.map +1 -1
- package/dist/schemas/logs.js.map +1 -1
- package/dist/schemas/loops.d.ts.map +1 -1
- package/dist/schemas/loops.js +1 -1
- package/dist/schemas/loops.js.map +1 -1
- package/dist/schemas/maintenance.d.ts.map +1 -1
- package/dist/schemas/maintenance.js.map +1 -1
- package/dist/schemas/marketplace.d.ts +0 -4
- package/dist/schemas/marketplace.d.ts.map +1 -1
- package/dist/schemas/panels.d.ts.map +1 -1
- package/dist/schemas/panels.js.map +1 -1
- package/dist/schemas/personas.d.ts +2 -1
- package/dist/schemas/personas.d.ts.map +1 -1
- package/dist/schemas/personas.js +6 -2
- package/dist/schemas/personas.js.map +1 -1
- package/dist/schemas/plan-limits.d.ts +2 -4
- package/dist/schemas/plan-limits.d.ts.map +1 -1
- package/dist/schemas/plan-limits.js +5 -8
- package/dist/schemas/plan-limits.js.map +1 -1
- package/dist/schemas/ports.d.ts.map +1 -1
- package/dist/schemas/ports.js.map +1 -1
- package/dist/schemas/provider-oauth.d.ts.map +1 -1
- package/dist/schemas/provider-oauth.js.map +1 -1
- package/dist/schemas/provider-subscriptions.d.ts +1 -1
- package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
- package/dist/schemas/provider-subscriptions.js +1 -1
- package/dist/schemas/provider-subscriptions.js.map +1 -1
- package/dist/schemas/public.d.ts.map +1 -1
- package/dist/schemas/public.js.map +1 -1
- package/dist/schemas/push.d.ts.map +1 -1
- package/dist/schemas/push.js.map +1 -1
- package/dist/schemas/secrets.d.ts.map +1 -1
- package/dist/schemas/secrets.js.map +1 -1
- package/dist/schemas/settings.d.ts +11 -9
- package/dist/schemas/settings.d.ts.map +1 -1
- package/dist/schemas/settings.js +22 -7
- package/dist/schemas/settings.js.map +1 -1
- package/dist/schemas/share.d.ts.map +1 -1
- package/dist/schemas/share.js.map +1 -1
- package/dist/schemas/shared.d.ts +4 -0
- package/dist/schemas/shared.d.ts.map +1 -1
- package/dist/schemas/shared.js +3 -0
- package/dist/schemas/shared.js.map +1 -1
- package/dist/schemas/system.d.ts +6 -0
- package/dist/schemas/system.d.ts.map +1 -1
- package/dist/schemas/system.js +10 -0
- package/dist/schemas/system.js.map +1 -1
- package/dist/schemas/terminal.d.ts.map +1 -1
- package/dist/schemas/terminal.js.map +1 -1
- package/dist/schemas/usage.d.ts.map +1 -1
- package/dist/schemas/usage.js.map +1 -1
- package/dist/schemas/vpn.d.ts.map +1 -1
- package/dist/schemas/vpn.js.map +1 -1
- package/dist/schemas/webext.d.ts.map +1 -1
- package/dist/schemas/webext.js.map +1 -1
- package/dist/schemas/workflows.d.ts +66 -9
- package/dist/schemas/workflows.d.ts.map +1 -1
- package/dist/schemas/workflows.js +6 -5
- package/dist/schemas/workflows.js.map +1 -1
- package/dist/schemas/workspace-repos.d.ts.map +1 -1
- package/dist/schemas/workspace-repos.js.map +1 -1
- package/dist/schemas/workspace-search.d.ts.map +1 -1
- package/dist/schemas/workspace-search.js.map +1 -1
- package/dist/schemas/workspace-setup.d.ts.map +1 -1
- package/dist/schemas/workspace-setup.js.map +1 -1
- package/dist/schemas/workspace-tree.d.ts.map +1 -1
- package/dist/schemas/workspace-tree.js.map +1 -1
- package/dist/state/arrival.d.ts.map +1 -0
- package/dist/{arrival.js → state/arrival.js} +1 -1
- package/dist/state/arrival.js.map +1 -0
- package/dist/state/contract-lock.d.ts.map +1 -0
- package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
- package/dist/state/contract-lock.js.map +1 -0
- package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
- package/dist/state/definition.d.ts.map +1 -0
- package/dist/{definition.js → state/definition.js} +4 -4
- package/dist/state/definition.js.map +1 -0
- package/dist/state/history-state.d.ts.map +1 -0
- package/dist/{history-state.js → state/history-state.js} +1 -0
- package/dist/state/history-state.js.map +1 -0
- package/dist/state/runtime-state.d.ts.map +1 -0
- package/dist/state/runtime-state.js.map +1 -0
- package/dist/state/starter.d.ts.map +1 -0
- package/dist/state/starter.js.map +1 -0
- package/dist/state/state-portability.d.ts.map +1 -0
- package/dist/state/state-portability.js.map +1 -0
- package/dist/state/versions.d.ts.map +1 -0
- package/dist/state/versions.js.map +1 -0
- package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
- package/dist/state/workspace-state.d.ts.map +1 -0
- package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
- package/dist/state/workspace-state.js.map +1 -0
- package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
- package/dist/text/documents.d.ts.map +1 -0
- package/dist/{documents.js → text/documents.js} +1 -1
- package/dist/text/documents.js.map +1 -0
- package/dist/text/embed.d.ts.map +1 -0
- package/dist/text/embed.js.map +1 -0
- package/dist/text/mentions.d.ts.map +1 -0
- package/dist/text/mentions.js.map +1 -0
- package/dist/text/model-answer.d.ts +3 -0
- package/dist/text/model-answer.d.ts.map +1 -0
- package/dist/text/model-answer.js +3 -0
- package/dist/text/model-answer.js.map +1 -0
- package/dist/text/path-refs.d.ts.map +1 -0
- package/dist/text/path-refs.js.map +1 -0
- package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
- package/dist/text/shell-regions.d.ts.map +1 -0
- package/dist/text/shell-regions.js.map +1 -0
- package/dist/text/title.d.ts.map +1 -0
- package/dist/text/title.js.map +1 -0
- package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
- package/dist/text/transcript-fold.d.ts.map +1 -0
- package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
- package/dist/text/transcript-fold.js.map +1 -0
- package/dist/text/whisper.d.ts +3 -0
- package/dist/text/whisper.d.ts.map +1 -0
- package/dist/text/whisper.js +11 -0
- package/dist/text/whisper.js.map +1 -0
- package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
- package/dist/text/workflow-faults.d.ts.map +1 -0
- package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
- package/dist/text/workflow-faults.js.map +1 -0
- package/package.json +70 -70
- package/src/chores/chores.test.ts +4 -10
- package/src/chores/chores.ts +148 -392
- package/src/chores/digest.ts +8 -28
- package/src/chores/extension-update.ts +3 -8
- package/src/chores/fix-deps.ts +4 -18
- package/src/chores/index.ts +2 -2
- package/src/chores/probes.test.ts +7 -43
- package/src/chores/probes.ts +62 -167
- package/src/chores/prompt.ts +10 -34
- package/src/chores/stack.test.ts +6 -45
- package/src/chores/stack.ts +27 -118
- package/src/chores/verdict.test.ts +101 -80
- package/src/chores/verdict.ts +54 -99
- package/src/contracts/accounts.contract.ts +4 -19
- package/src/contracts/agent.contract.ts +7 -22
- package/src/contracts/agents.contract.ts +25 -71
- package/src/contracts/automations.contract.ts +14 -30
- package/src/contracts/capabilities.contract.ts +8 -35
- package/src/contracts/chores.contract.ts +4 -15
- package/src/contracts/endpoints.contract.ts +5 -22
- package/src/contracts/exit.contract.ts +7 -30
- package/src/contracts/extensions.contract.ts +8 -30
- package/src/contracts/git.contract.ts +25 -49
- package/src/contracts/host.contract.ts +9 -44
- package/src/contracts/intentic.contract.ts +1 -1
- package/src/contracts/logs.contract.ts +3 -13
- package/src/contracts/loops.contract.ts +9 -40
- package/src/contracts/personas.contract.ts +10 -35
- package/src/contracts/providers.contract.ts +4 -17
- package/src/contracts/runner.contract.ts +12 -39
- package/src/contracts/safety.contract.ts +5 -14
- package/src/contracts/secrets.contract.ts +4 -22
- package/src/contracts/sessions.contract.ts +1 -1
- package/src/contracts/settings.contract.ts +4 -10
- package/src/contracts/share.contract.ts +3 -9
- package/src/contracts/skills.contract.ts +21 -19
- package/src/contracts/system.contract.ts +26 -52
- package/src/contracts/usage.contract.ts +7 -21
- package/src/contracts/vpn.contract.ts +9 -16
- package/src/contracts/webext.contract.ts +9 -25
- package/src/contracts/workflows.contract.ts +34 -58
- package/src/contracts/workspace.contract.ts +19 -50
- package/src/events/agent-events.ts +345 -0
- package/src/events/cards.ts +286 -0
- package/src/{events.test.ts → events/resume.test.ts} +4 -19
- package/src/events/resume.ts +60 -0
- package/src/events/system-events.ts +139 -0
- package/src/events/transcript.ts +320 -0
- package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
- package/src/ids/conversation-ids.ts +178 -0
- package/src/ids/hostnames.ts +129 -0
- package/src/ids/session-names.ts +29 -0
- package/src/ids/share-paths.ts +43 -0
- package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
- package/src/ids/tunnel-ids.ts +29 -0
- package/src/index.ts +71 -87
- package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
- package/src/models/agent-catalog.ts +174 -0
- package/src/models/agent-runtimes.ts +201 -0
- package/src/models/capability-ledger.test.ts +84 -0
- package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
- package/src/models/fast-tier.ts +36 -0
- package/src/{model-order.test.ts → models/model-order.test.ts} +54 -40
- package/src/models/model-order.ts +171 -0
- package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
- package/src/models/model-pins.ts +57 -0
- package/src/models/model-roles.test.ts +38 -0
- package/src/models/model-roles.ts +180 -0
- package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
- package/src/models/plan-pools.ts +65 -0
- package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
- package/src/models/prompt-complexity.ts +215 -0
- package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
- package/src/models/provider-specs.ts +272 -0
- package/src/policy/approvals-execution.ts +58 -0
- package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
- package/src/policy/batch-runs.ts +137 -0
- package/src/policy/capability-secrets.ts +5 -0
- package/src/{card-status.ts → policy/card-status.ts} +11 -26
- package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
- package/src/policy/command-classes.ts +395 -0
- package/src/policy/command-run.ts +65 -0
- package/src/policy/control-scopes.ts +38 -0
- package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
- package/src/policy/credential-material.ts +91 -0
- package/src/policy/needs-action.ts +5 -0
- package/src/policy/output-fields.ts +86 -0
- package/src/policy/overlay-lint.ts +100 -0
- package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
- package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
- package/src/policy/safety-policy.test.ts +84 -0
- package/src/policy/safety-policy.ts +142 -0
- package/src/policy/search-globs.ts +60 -0
- package/src/protocol/container-requirements.test.ts +72 -0
- package/src/protocol/container-requirements.ts +58 -0
- package/src/protocol/host-protocol.ts +29 -0
- package/src/protocol/ingress-contract.ts +103 -0
- package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
- package/src/protocol/ingress-protocol.ts +441 -0
- package/src/protocol/listener-protocol.ts +75 -0
- package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
- package/src/protocol/peer-dial.ts +207 -0
- package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
- package/src/protocol/request-id.ts +5 -0
- package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
- package/src/protocol/routes.ts +159 -0
- package/src/protocol/runner-protocol.ts +197 -0
- package/src/protocol/terminal-protocol.ts +13 -0
- package/src/protocol/webext-links.ts +50 -0
- package/src/protocol/webext-protocol.ts +24 -0
- package/src/schemas/activity.ts +22 -30
- package/src/schemas/agent.ts +130 -238
- package/src/schemas/agents.ts +165 -483
- package/src/schemas/approvals.ts +23 -71
- package/src/schemas/automations.ts +142 -250
- package/src/schemas/capabilities.ts +127 -414
- package/src/schemas/ci.ts +56 -108
- package/src/schemas/codebase-health.ts +7 -11
- package/src/schemas/devices.ts +103 -321
- package/src/schemas/engines.ts +16 -44
- package/src/schemas/environment.ts +41 -91
- package/src/schemas/exit.ts +24 -81
- package/src/schemas/extension-updates.ts +42 -87
- package/src/schemas/git-history.ts +30 -84
- package/src/schemas/git.ts +141 -256
- package/src/schemas/history.ts +14 -40
- package/src/schemas/hosts.ts +9 -15
- package/src/schemas/inventory.ts +8 -10
- package/src/schemas/issues.ts +66 -134
- package/src/schemas/logs.ts +15 -34
- package/src/schemas/loops.ts +46 -163
- package/src/schemas/maintenance.ts +47 -172
- package/src/schemas/panels.ts +20 -45
- package/src/schemas/personas.ts +50 -200
- package/src/schemas/plan-limits.ts +58 -197
- package/src/schemas/ports.ts +14 -32
- package/src/schemas/provider-oauth.ts +23 -76
- package/src/schemas/provider-subscriptions.ts +4 -13
- package/src/schemas/public.ts +4 -15
- package/src/schemas/push.ts +8 -36
- package/src/schemas/secrets.ts +20 -64
- package/src/schemas/settings.ts +182 -602
- package/src/schemas/share.ts +14 -32
- package/src/schemas/shared.ts +14 -13
- package/src/schemas/system.ts +46 -78
- package/src/schemas/terminal.ts +41 -120
- package/src/schemas/usage.ts +44 -233
- package/src/schemas/version-seam.test.ts +9 -26
- package/src/schemas/vpn.ts +27 -64
- package/src/schemas/webext.ts +22 -53
- package/src/schemas/workflows.ts +57 -183
- package/src/schemas/workspace-repos.ts +12 -24
- package/src/schemas/workspace-search.ts +17 -35
- package/src/schemas/workspace-setup.ts +4 -11
- package/src/schemas/workspace-tree.ts +32 -91
- package/src/state/arrival.ts +109 -0
- package/src/state/contract-lock.test.ts +17 -0
- package/src/state/contract-lock.ts +49 -0
- package/src/state/definition.ts +143 -0
- package/src/state/history-state.ts +103 -0
- package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
- package/src/state/runtime-state.ts +63 -0
- package/src/state/starter.ts +5 -0
- package/src/state/state-portability.ts +27 -0
- package/src/state/versions.ts +26 -0
- package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
- package/src/state/workspace-state.ts +669 -0
- package/src/{documents.test.ts → text/documents.test.ts} +1 -1
- package/src/text/documents.ts +42 -0
- package/src/text/embed.ts +132 -0
- package/src/text/mentions.ts +21 -0
- package/src/text/model-answer.ts +9 -0
- package/src/text/path-refs.ts +39 -0
- package/src/text/shell-regions.ts +224 -0
- package/src/{title.test.ts → text/title.test.ts} +13 -32
- package/src/text/title.ts +202 -0
- package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
- package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
- package/src/text/whisper.test.ts +19 -0
- package/src/text/whisper.ts +17 -0
- package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
- package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
- package/dist/agent-catalog.d.ts.map +0 -1
- package/dist/agent-catalog.js.map +0 -1
- package/dist/agent-runtimes.d.ts.map +0 -1
- package/dist/agent-runtimes.js.map +0 -1
- package/dist/approvals-execution.d.ts.map +0 -1
- package/dist/approvals-execution.js.map +0 -1
- package/dist/arrival.d.ts.map +0 -1
- package/dist/arrival.js.map +0 -1
- package/dist/batch-runs.d.ts.map +0 -1
- package/dist/batch-runs.js.map +0 -1
- package/dist/capability-env.d.ts.map +0 -1
- package/dist/capability-env.js.map +0 -1
- package/dist/capability-secrets.d.ts.map +0 -1
- package/dist/capability-secrets.js.map +0 -1
- package/dist/card-status.d.ts.map +0 -1
- package/dist/card-status.js.map +0 -1
- package/dist/command-classes.d.ts.map +0 -1
- package/dist/command-classes.js.map +0 -1
- package/dist/command-run.d.ts.map +0 -1
- package/dist/command-run.js.map +0 -1
- package/dist/contract-lock.d.ts.map +0 -1
- package/dist/contract-lock.js.map +0 -1
- package/dist/conversation-ids.d.ts +0 -4
- package/dist/conversation-ids.d.ts.map +0 -1
- package/dist/conversation-ids.js.map +0 -1
- package/dist/credential-material.d.ts.map +0 -1
- package/dist/credential-material.js.map +0 -1
- package/dist/definition.d.ts.map +0 -1
- package/dist/definition.js.map +0 -1
- package/dist/documents.d.ts.map +0 -1
- package/dist/documents.js.map +0 -1
- package/dist/embed.d.ts.map +0 -1
- package/dist/embed.js.map +0 -1
- package/dist/events.d.ts +0 -4336
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -725
- package/dist/events.js.map +0 -1
- package/dist/fast-tier.d.ts.map +0 -1
- package/dist/fast-tier.js.map +0 -1
- package/dist/history-state.d.ts.map +0 -1
- package/dist/history-state.js.map +0 -1
- package/dist/host-protocol.d.ts.map +0 -1
- package/dist/host-protocol.js.map +0 -1
- package/dist/hostnames.d.ts.map +0 -1
- package/dist/hostnames.js.map +0 -1
- package/dist/ingress-contract.d.ts.map +0 -1
- package/dist/ingress-contract.js.map +0 -1
- package/dist/ingress-protocol.d.ts.map +0 -1
- package/dist/ingress-protocol.js.map +0 -1
- package/dist/listener-protocol.d.ts.map +0 -1
- package/dist/listener-protocol.js.map +0 -1
- package/dist/mentions.d.ts.map +0 -1
- package/dist/mentions.js.map +0 -1
- package/dist/model-order.d.ts.map +0 -1
- package/dist/model-order.js.map +0 -1
- package/dist/model-pins.d.ts.map +0 -1
- package/dist/model-pins.js.map +0 -1
- package/dist/model-roles.d.ts.map +0 -1
- package/dist/model-roles.js.map +0 -1
- package/dist/needs-action.d.ts.map +0 -1
- package/dist/needs-action.js.map +0 -1
- package/dist/output-fields.d.ts.map +0 -1
- package/dist/output-fields.js.map +0 -1
- package/dist/overlay-lint.d.ts.map +0 -1
- package/dist/overlay-lint.js.map +0 -1
- package/dist/owner-ticket.d.ts.map +0 -1
- package/dist/owner-ticket.js.map +0 -1
- package/dist/path-refs.d.ts.map +0 -1
- package/dist/path-refs.js.map +0 -1
- package/dist/peer-dial.d.ts.map +0 -1
- package/dist/peer-dial.js.map +0 -1
- package/dist/peer-mcp-server.d.ts.map +0 -1
- package/dist/peer-mcp-server.js.map +0 -1
- package/dist/plan-pools.d.ts.map +0 -1
- package/dist/plan-pools.js.map +0 -1
- package/dist/prompt-complexity.d.ts.map +0 -1
- package/dist/prompt-complexity.js.map +0 -1
- package/dist/provider-specs.d.ts.map +0 -1
- package/dist/provider-specs.js.map +0 -1
- package/dist/request-id.d.ts.map +0 -1
- package/dist/request-id.js.map +0 -1
- package/dist/routes.d.ts.map +0 -1
- package/dist/routes.js.map +0 -1
- package/dist/runner-protocol.d.ts.map +0 -1
- package/dist/runner-protocol.js.map +0 -1
- package/dist/runtime-state.d.ts.map +0 -1
- package/dist/runtime-state.js.map +0 -1
- package/dist/safety-policy.d.ts.map +0 -1
- package/dist/safety-policy.js.map +0 -1
- package/dist/search-globs.d.ts.map +0 -1
- package/dist/search-globs.js.map +0 -1
- package/dist/session-names.d.ts.map +0 -1
- package/dist/session-names.js.map +0 -1
- package/dist/share-paths.d.ts.map +0 -1
- package/dist/share-paths.js.map +0 -1
- package/dist/shell-regions.d.ts.map +0 -1
- package/dist/shell-regions.js.map +0 -1
- package/dist/sse.d.ts.map +0 -1
- package/dist/sse.js.map +0 -1
- package/dist/starter.d.ts.map +0 -1
- package/dist/starter.js.map +0 -1
- package/dist/state-portability.d.ts.map +0 -1
- package/dist/state-portability.js.map +0 -1
- package/dist/terminal-protocol.d.ts.map +0 -1
- package/dist/terminal-protocol.js.map +0 -1
- package/dist/title.d.ts.map +0 -1
- package/dist/title.js.map +0 -1
- package/dist/transcript-fold.d.ts.map +0 -1
- package/dist/transcript-fold.js.map +0 -1
- package/dist/tunnel-ids.d.ts.map +0 -1
- package/dist/tunnel-ids.js.map +0 -1
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js.map +0 -1
- package/dist/webext-links.d.ts.map +0 -1
- package/dist/webext-links.js.map +0 -1
- package/dist/webext-protocol.d.ts.map +0 -1
- package/dist/webext-protocol.js.map +0 -1
- package/dist/workflow-faults.d.ts.map +0 -1
- package/dist/workflow-faults.js.map +0 -1
- package/dist/workspace-state.d.ts.map +0 -1
- package/dist/workspace-state.js.map +0 -1
- package/src/agent-catalog.ts +0 -316
- package/src/agent-runtimes.ts +0 -419
- package/src/approvals-execution.ts +0 -96
- package/src/arrival.ts +0 -160
- package/src/batch-runs.ts +0 -188
- package/src/capability-ledger.test.ts +0 -140
- package/src/capability-secrets.ts +0 -20
- package/src/command-classes.ts +0 -617
- package/src/command-run.ts +0 -78
- package/src/contract-lock.test.ts +0 -23
- package/src/contract-lock.ts +0 -66
- package/src/conversation-ids.ts +0 -207
- package/src/credential-material.ts +0 -181
- package/src/definition.ts +0 -207
- package/src/documents.ts +0 -67
- package/src/embed.ts +0 -164
- package/src/events.ts +0 -1870
- package/src/fast-tier.ts +0 -72
- package/src/history-state.ts +0 -174
- package/src/host-protocol.ts +0 -36
- package/src/hostnames.ts +0 -180
- package/src/ingress-contract.ts +0 -157
- package/src/ingress-protocol.ts +0 -625
- package/src/listener-protocol.ts +0 -96
- package/src/mentions.ts +0 -25
- package/src/model-order.ts +0 -262
- package/src/model-pins.ts +0 -132
- package/src/model-roles.test.ts +0 -52
- package/src/model-roles.ts +0 -320
- package/src/needs-action.ts +0 -14
- package/src/output-fields.ts +0 -111
- package/src/overlay-lint.ts +0 -116
- package/src/path-refs.ts +0 -59
- package/src/peer-dial.ts +0 -163
- package/src/plan-pools.ts +0 -92
- package/src/prompt-complexity.ts +0 -334
- package/src/provider-specs.ts +0 -432
- package/src/request-id.ts +0 -41
- package/src/routes.ts +0 -219
- package/src/runner-protocol.ts +0 -239
- package/src/runtime-state.ts +0 -140
- package/src/safety-policy.test.ts +0 -88
- package/src/safety-policy.ts +0 -258
- package/src/search-globs.ts +0 -76
- package/src/session-names.ts +0 -44
- package/src/share-paths.ts +0 -68
- package/src/shell-regions.ts +0 -289
- package/src/starter.ts +0 -13
- package/src/state-portability.ts +0 -56
- package/src/terminal-protocol.ts +0 -16
- package/src/title.ts +0 -267
- package/src/tunnel-ids.ts +0 -57
- package/src/versions.ts +0 -48
- package/src/webext-links.ts +0 -90
- package/src/webext-protocol.ts +0 -27
- package/src/workspace-state.ts +0 -1090
- /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
- /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
- /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
- /package/dist/{session-names.js → ids/session-names.js} +0 -0
- /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
- /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
- /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
- /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
- /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
- /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
- /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
- /package/dist/{model-pins.js → models/model-pins.js} +0 -0
- /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
- /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
- /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
- /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
- /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
- /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
- /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
- /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
- /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
- /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
- /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
- /package/dist/{command-run.js → policy/command-run.js} +0 -0
- /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
- /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
- /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
- /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
- /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
- /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
- /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
- /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
- /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
- /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
- /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
- /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
- /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
- /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
- /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
- /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
- /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
- /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
- /package/dist/{request-id.js → protocol/request-id.js} +0 -0
- /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
- /package/dist/{routes.js → protocol/routes.js} +0 -0
- /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
- /package/dist/{sse.js → protocol/sse.js} +0 -0
- /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
- /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
- /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
- /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
- /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
- /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
- /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
- /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
- /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
- /package/dist/{starter.js → state/starter.js} +0 -0
- /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
- /package/dist/{state-portability.js → state/state-portability.js} +0 -0
- /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
- /package/dist/{versions.js → state/versions.js} +0 -0
- /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
- /package/dist/{embed.js → text/embed.js} +0 -0
- /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
- /package/dist/{mentions.js → text/mentions.js} +0 -0
- /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
- /package/dist/{path-refs.js → text/path-refs.js} +0 -0
- /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
- /package/dist/{title.d.ts → text/title.d.ts} +0 -0
- /package/dist/{title.js → text/title.js} +0 -0
- /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
- /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
- /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
- /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
- /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
- /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
- /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
- /package/src/{sse.ts → protocol/sse.ts} +0 -0
- /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
- /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
- /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
- /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
package/src/schemas/engines.ts
CHANGED
|
@@ -1,45 +1,26 @@
|
|
|
1
1
|
// engines: the upstream agent programs this sandbox spawns, and which version of each it runs
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* `runtime` (agent-catalog.ts) is the LOOP: claude-code, codex, opencode, acp, pi, cursor — what shape a turn
|
|
7
|
-
* has. An engine is the installed PROGRAM that loop spawns or imports: the `claude` binary and its SDK, the
|
|
8
|
-
* `codex` wrapper, `@cursor/sdk`, the `opencode` binary, the `cli-proxy-api` translator. One engine can back
|
|
9
|
-
* several runtimes (the translator serves Gemini, Kimi and ChatGPT; Kimi runs under the Claude Code loop), so
|
|
10
|
-
* the two lists are neither the same set nor the same question.
|
|
11
|
-
*
|
|
12
|
-
* The distinction earns its keep because engines have a lifecycle runtimes do not: they are published upstream,
|
|
13
|
-
* on somebody else's schedule, and until this existed the only way to move one was to ship a sandbox image.
|
|
14
|
-
* That made an ordinary upstream event — Anthropic raising the version floor a model requires — into a support
|
|
15
|
-
* problem: every sandbox in the fleet failed every Claude turn until a new image reached it.
|
|
16
|
-
*
|
|
17
|
-
* So an engine version now comes from a STORE on the daemon volume, and the image's copy is the floor beneath
|
|
18
|
-
* it. The blessed list says which version this project has actually run its suite against; an owner who wants
|
|
19
|
-
* upstream's newest without waiting for that says so per engine. */
|
|
4
|
+
// An engine is the installed program a runtime (agent-catalog.ts) spawns or imports — the `claude` binary, `codex`
|
|
5
|
+
// wrapper, `@cursor/sdk`, `opencode`, `cli-proxy-api` — not the loop itself; one engine can back several runtimes.
|
|
20
6
|
|
|
21
7
|
export const ENGINE_IDS = ["claude", "codex", "cursor", "opencode", "translator"] as const;
|
|
22
8
|
export type EngineId = (typeof ENGINE_IDS)[number];
|
|
23
9
|
export const EngineIdSchema = z.enum(ENGINE_IDS);
|
|
24
10
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
* for an owner who would rather have the fix than the assurance.
|
|
31
|
-
* pinned , exactly this version, until they say otherwise. What a revert leaves behind, and what somebody
|
|
32
|
-
* debugging a regression wants.
|
|
33
|
-
* image , do not use the store at all: run what the image bakes. The way back to a stock sandbox. */
|
|
11
|
+
// The owner's standing answer for one engine, the whole version policy:
|
|
12
|
+
// blessed (default): whatever the blessed list names, a version this project's CI has run against.
|
|
13
|
+
// latest: upstream's newest published version, without waiting for it to be blessed.
|
|
14
|
+
// pinned: exactly this version until changed.
|
|
15
|
+
// image: ignore the store; run what the image bakes.
|
|
34
16
|
export const EngineChannelSchema = z.object({
|
|
35
17
|
kind: z.enum(["blessed", "latest", "pinned", "image"]).describe("Where this engine's version comes from."),
|
|
36
18
|
version: z.string().optional().describe("Which version, when it is pinned to one."),
|
|
37
19
|
});
|
|
38
20
|
export type EngineChannel = z.infer<typeof EngineChannelSchema>;
|
|
39
21
|
|
|
40
|
-
// A version the store installed and then refused
|
|
41
|
-
//
|
|
42
|
-
// copy rather than leaving that as an unexplained downgrade.
|
|
22
|
+
// A version the store installed and then refused; kept per engine so a bad publish is not retried forever and the card
|
|
23
|
+
// can explain a downgrade.
|
|
43
24
|
export const EngineQuarantineSchema = z.object({
|
|
44
25
|
version: z.string().describe("Which version was refused."),
|
|
45
26
|
reason: z.string().describe("What was wrong with it: it would not launch, or it did not export what the daemon calls."),
|
|
@@ -53,9 +34,7 @@ export const EngineRowSchema = z.object({
|
|
|
53
34
|
label: z.string().describe("What it is called on screen."),
|
|
54
35
|
running: z
|
|
55
36
|
.object({
|
|
56
|
-
//
|
|
57
|
-
// and until the store installs one, a turn on that provider cannot start. Different from "running
|
|
58
|
-
// the image's copy", and the card says so rather than drawing a blank version.
|
|
37
|
+
// Different from running the image's copy: absent means no copy of the engine exists here at all.
|
|
59
38
|
version: z.string().optional().describe("The version a turn would use right now. Absent means there is no copy of this engine here yet."),
|
|
60
39
|
source: z
|
|
61
40
|
.enum(["image", "store"])
|
|
@@ -67,8 +46,7 @@ export const EngineRowSchema = z.object({
|
|
|
67
46
|
.optional()
|
|
68
47
|
.describe("The version the image bakes, which is the floor everything else falls back to. Absent on an image that carries no copy of it."),
|
|
69
48
|
channel: EngineChannelSchema.describe("The owner's standing answer for this engine."),
|
|
70
|
-
//
|
|
71
|
-
// blessed list names it, because on `latest` the answer is routinely no and the row has to say so.
|
|
49
|
+
// On the `latest` channel, `blessed` is routinely false; the row must still say so.
|
|
72
50
|
offered: z
|
|
73
51
|
.object({
|
|
74
52
|
version: z.string().describe("The version this engine would move to."),
|
|
@@ -77,8 +55,7 @@ export const EngineRowSchema = z.object({
|
|
|
77
55
|
.optional()
|
|
78
56
|
.describe("A newer version waiting, absent when the running one is already what the channel asks for."),
|
|
79
57
|
blessed: z.string().optional().describe("What the blessed list names for this engine, when the list has been read."),
|
|
80
|
-
//
|
|
81
|
-
// engine that has only ever run the image's copy.
|
|
58
|
+
// Store keeps one version back so a revert is a pointer move; absent if only the image's copy ever ran.
|
|
82
59
|
previous: z.string().optional().describe("The version kept one step back, which is what going back means."),
|
|
83
60
|
quarantined: z.array(EngineQuarantineSchema).describe("Versions the store installed and then refused, with the reason."),
|
|
84
61
|
diskBytes: z.number().int().nonnegative().describe("What this engine's kept versions cost on the daemon's volume."),
|
|
@@ -100,19 +77,15 @@ export const EngineChannelInputSchema = z.object({
|
|
|
100
77
|
version: z.string().optional().describe("Which version, required when pinning and ignored otherwise."),
|
|
101
78
|
});
|
|
102
79
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
* name, which is how a sandbox gets past an upstream version floor that the list has not caught up with. */
|
|
80
|
+
// Install and activate a version now; absent `version` means whatever the channel offers. Naming one explicitly is
|
|
81
|
+
// "update anyway": a version the blessed list does not (yet) name.
|
|
106
82
|
export const EngineUpdateInputSchema = z.object({
|
|
107
83
|
id: EngineIdSchema.describe("Which engine."),
|
|
108
84
|
version: z
|
|
109
85
|
.string()
|
|
110
86
|
.optional()
|
|
111
87
|
.describe("Which version. Leave it out for whatever the channel offers; naming one takes a version nobody has blessed, deliberately."),
|
|
112
|
-
|
|
113
|
-
* and not which published version satisfies it. Sending the floor lets the daemon answer that — it takes
|
|
114
|
-
* the LOWEST version at or above it, the smallest step that works — rather than making a browser walk a
|
|
115
|
-
* registry to fill in a version number. */
|
|
88
|
+
// Daemon installs the lowest published version at or above this floor, the smallest step that satisfies it.
|
|
116
89
|
floor: z
|
|
117
90
|
.string()
|
|
118
91
|
.optional()
|
|
@@ -124,7 +97,6 @@ export const EngineAppliedSchema = z.object({
|
|
|
124
97
|
ok: z.literal(true).describe("It went through."),
|
|
125
98
|
version: z.string().describe("Which version is now active."),
|
|
126
99
|
source: z.enum(["image", "store"]).describe("Whether that is the image's copy or the store's."),
|
|
127
|
-
// An
|
|
128
|
-
// turn rather than by the one that pressed the button: a turn already running holds the module it loaded.
|
|
100
|
+
// An in-process engine (`@cursor/sdk`) is picked up by the next turn; a running turn keeps its module.
|
|
129
101
|
fromNextTurn: z.boolean().describe("Whether the change reaches turns already in flight, or only the next one."),
|
|
130
102
|
});
|
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
// environment: the overlay Dockerfile extending the sandbox image
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
// The approved file is
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// files are written only when the composition CHANGES, see writeComposed, and the read loop it exists to end.
|
|
9
|
-
// Status is derived, never stored:
|
|
10
|
-
// applied = sha256(approved) === appliedHash; pending rebuild = approved present but hashes differ; proposed =
|
|
11
|
-
// proposal present with a hash different from custom's.
|
|
3
|
+
// The approved file is daemon-composed (pinned FROM + capability fragments + the owner-approved custom section). Status
|
|
4
|
+
// is derived, never stored:
|
|
5
|
+
// applied: sha256(approved) === appliedHash.
|
|
6
|
+
// pending rebuild: approved present but hashes differ.
|
|
7
|
+
// proposed: proposal present with a hash different from custom's.
|
|
12
8
|
|
|
13
9
|
const environmentFileSchema = z.object({ content: z.string(), hash: z.string() });
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* Anything installed outside /work dies with the container, and transcript mining showed the same tools being
|
|
17
|
-
* reinstalled session after session (cargo-xwin six times, a Windows rustup target eight) before anyone thought
|
|
18
|
-
* to bake them. Drift is the daemon OBSERVING that gap rather than trusting the model to report it: apt installs
|
|
19
|
-
* read from dpkg's own log, everything else from system paths newer than the container itself. Two channels
|
|
20
|
-
* because they are disjoint by construction — dpkg unpacks files with their archive mtimes, so an mtime sweep
|
|
21
|
-
* cannot see apt, and nothing apt does lands under the swept prefixes' hand-installed corners. */
|
|
10
|
+
// What the live container has that the image did not put there; anything outside /work dies with the container. Two
|
|
11
|
+
// channels, apt's own log and an mtime sweep, because dpkg-unpacked files keep archive mtimes invisible to the sweep.
|
|
22
12
|
export const EnvironmentDriftSchema = z.object({
|
|
23
|
-
//
|
|
24
|
-
// describes a container that no longer exists, and every reader must treat it as no drift at all.
|
|
13
|
+
// PID 1's start; a snapshot whose bornAt differs from the running container's means no drift, not stale drift.
|
|
25
14
|
bornAt: z.number(),
|
|
26
15
|
// When the probe ran.
|
|
27
16
|
at: z.number(),
|
|
@@ -31,15 +20,12 @@ export const EnvironmentDriftSchema = z.object({
|
|
|
31
20
|
paths: z.array(z.string()),
|
|
32
21
|
});
|
|
33
22
|
export type EnvironmentDrift = z.infer<typeof EnvironmentDriftSchema>;
|
|
34
|
-
// How a runtime install was made
|
|
35
|
-
//
|
|
36
|
-
// a Debian package, "other" is a curl|sh whose replay could embed anything).
|
|
23
|
+
// How a runtime install was made; decides whether the daemon can draft a Dockerfile step mechanically
|
|
24
|
+
// (apt/cargo/npm/rustup-target) or must surface it for a person (pip, or "other": a curl|sh that could embed anything).
|
|
37
25
|
export const RuntimeInstallKindSchema = z.enum(["apt", "pip", "cargo", "npm", "rustup-target", "playwright", "gem", "pipx", "go", "other"]);
|
|
38
26
|
export type RuntimeInstallKind = z.infer<typeof RuntimeInstallKindSchema>;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* survives container recreates (the file lives under /work), which is exactly what makes "installed again in a
|
|
42
|
-
* fresh container" observable at all. */
|
|
27
|
+
// One tool's install history across sessions: a session that retries an install needed it once (the unit of
|
|
28
|
+
// recurrence). Persisted under /work so it survives container recreates.
|
|
43
29
|
export const RuntimeInstallSchema = z.object({
|
|
44
30
|
tool: z.string(),
|
|
45
31
|
kind: RuntimeInstallKindSchema,
|
|
@@ -60,8 +46,8 @@ export const RuntimeInstallsFileSchema = z.object({
|
|
|
60
46
|
drift: EnvironmentDriftSchema.optional(),
|
|
61
47
|
});
|
|
62
48
|
export type RuntimeInstallsFile = z.infer<typeof RuntimeInstallsFileSchema>;
|
|
63
|
-
//
|
|
64
|
-
//
|
|
49
|
+
// Ledger entry as the Environment card shows it: recurrence joined with whether it's present in the live container
|
|
50
|
+
// (drift-corroborated), drafted, or declined.
|
|
65
51
|
export const EnvironmentRecurringSchema = z.object({
|
|
66
52
|
tool: z.string(),
|
|
67
53
|
kind: RuntimeInstallKindSchema,
|
|
@@ -70,17 +56,14 @@ export const EnvironmentRecurringSchema = z.object({
|
|
|
70
56
|
live: z.boolean(),
|
|
71
57
|
drafted: z.boolean().optional(),
|
|
72
58
|
declined: z.boolean().optional(),
|
|
73
|
-
|
|
74
|
-
* alone (auto-drafts.ts `stepFor`). Sent rather than re-derived in the browser because it is the SAME string
|
|
75
|
-
* the owner would approve, and because its presence is the honest answer to "can this be fixed by pressing a
|
|
76
|
-
* button?": absent means the fix is a judgement call (which pip package, replaying which installer) and the
|
|
77
|
-
* card offers an agent instead. */
|
|
59
|
+
// Step that would bake this tool; absent means the fix needs judgement and the card offers an agent instead.
|
|
78
60
|
step: z.string().optional(),
|
|
79
61
|
});
|
|
80
62
|
export type EnvironmentRecurring = z.infer<typeof EnvironmentRecurringSchema>;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
63
|
+
// Owner's decision on one recurring-install entry:
|
|
64
|
+
// adopt: writes the tool's overlay draft now.
|
|
65
|
+
// dismiss: tombstones it so nothing proposes it again.
|
|
66
|
+
// restore: undoes a dismissal.
|
|
84
67
|
export const EnvironmentRuntimeDecisionSchema = z.object({
|
|
85
68
|
tool: z.string().min(1),
|
|
86
69
|
decision: z.enum(["adopt", "dismiss", "restore"]),
|
|
@@ -95,28 +78,15 @@ export const EnvironmentSchema = z.object({
|
|
|
95
78
|
appliedHash: z.string().optional(),
|
|
96
79
|
// config.sandbox.name, the UI derives the rebuild one-liner's slug from it.
|
|
97
80
|
container: z.string().optional(),
|
|
98
|
-
// What the live container has
|
|
81
|
+
// What the live container has beyond the image; absent until this container's first sweep.
|
|
99
82
|
drift: EnvironmentDriftSchema.optional(),
|
|
100
83
|
// Runtime installs worth the owner's attention: recurring across sessions, or present-and-doomed right now.
|
|
101
84
|
recurring: z.array(EnvironmentRecurringSchema).optional(),
|
|
102
85
|
});
|
|
103
86
|
export type Environment = z.infer<typeof EnvironmentSchema>;
|
|
104
87
|
export const EnvironmentApproveSchema = z.object({ hash: z.string().min(1) });
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
* The overlay above answers "what was added on top, and do you approve it?". Nobody opens the Environment tab
|
|
108
|
-
* asking that, they ask "can this sandbox compile my Rust app / transcode a video / drive a browser?", and a
|
|
109
|
-
* build recipe is a bad answer to it: it is install plumbing, it names packages rather than abilities, and it is
|
|
110
|
-
* only the DELTA, so an inventory read off it alone would claim a sandbox has ffmpeg and no Node.
|
|
111
|
-
*
|
|
112
|
-
* So this is a second read of the same sandbox, and its authority is different in a way that matters: NAMES,
|
|
113
|
-
* GROUPING and RATIONALE come from the recipe (which is where the agent wrote them), while PRESENCE and VERSION
|
|
114
|
-
* come from asking the environment itself. That split is what makes it honest. A version is never parsed out of
|
|
115
|
-
* an install line, half the entries pin nothing, and a pinned number is a lie the moment something is approved
|
|
116
|
-
* but not yet rebuilt, so an item whose tools cannot be probed carries no version at all rather than a guess.
|
|
117
|
-
* And presence is OBSERVED, which is what makes per-item state exact without diffing anything: an item the
|
|
118
|
-
* recipe contains and the probe cannot find is precisely one that arrives with the next rebuild.
|
|
119
|
-
*/
|
|
88
|
+
// What the sandbox has, not how it was built. Names, grouping and rationale come from the recipe; presence and version
|
|
89
|
+
// come from probing the sandbox itself, so a version is never guessed, only reported when probed.
|
|
120
90
|
|
|
121
91
|
const environmentToolSchema = z.object({
|
|
122
92
|
// The binary as it is invoked (`rustc`, `ffmpeg`), because that is what somebody types next.
|
|
@@ -128,27 +98,25 @@ export const EnvironmentItemSchema = z.object({
|
|
|
128
98
|
id: z.string(),
|
|
129
99
|
// The block's own name, how the thing is referred to, not the packages it happens to install.
|
|
130
100
|
name: z.string(),
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
101
|
+
// Why it is here, and whether the reader may remove it:
|
|
102
|
+
// custom: an agent asked for it and the owner approved it for this workspace.
|
|
103
|
+
// capability: the cost of a capability the owner turned on.
|
|
104
|
+
// base: comes with every sandbox; nobody's decision.
|
|
134
105
|
origin: z.enum(["custom", "capability", "base"]),
|
|
135
|
-
// Which capability/extension/pack pulled it in,
|
|
136
|
-
// reader did not choose item by item.
|
|
106
|
+
// Which capability/extension/pack pulled it in, for an origin the reader did not choose item by item.
|
|
137
107
|
originLabel: z.string().optional(),
|
|
138
|
-
// Observed, not inferred:
|
|
139
|
-
//
|
|
108
|
+
// Observed, not inferred:
|
|
109
|
+
// active: the probe found it.
|
|
110
|
+
// after-rebuild: the recipe has it, the container does not yet.
|
|
111
|
+
// awaiting-approval: it is in a proposal nobody has approved yet.
|
|
140
112
|
state: z.enum(["active", "after-rebuild", "awaiting-approval"]),
|
|
141
|
-
// Every binary this
|
|
113
|
+
// Every binary this block puts on PATH, with its version. Usually one; a toolchain is several.
|
|
142
114
|
tools: z.array(environmentToolSchema),
|
|
143
|
-
//
|
|
144
|
-
// count rather than a list: eleven rows of `libssl-dev` is noise, "+11 packages" is the same fact.
|
|
115
|
+
// Further packages the block installs with no command (libraries, headers); a count, not a list.
|
|
145
116
|
extras: z.number().optional(),
|
|
146
117
|
// One standalone line, from the block's opening comment, the part everyone reads.
|
|
147
118
|
purpose: z.string().optional(),
|
|
148
|
-
|
|
149
|
-
* after the line: `purpose` is a summary of this (a parenthetical dropped, an over-long sentence cut back to
|
|
150
|
-
* its claim), so the two overlap by design and it is the reader's view that picks one. Long, the rationale
|
|
151
|
-
* for a toolchain runs to paragraphs, so it lives behind a disclosure rather than on the row. */
|
|
119
|
+
// Full comment as prose, overlapping `purpose` by design rather than continuing past it.
|
|
152
120
|
detail: z.string().optional(),
|
|
153
121
|
// The block's own instruction lines, for the reader who wants to see exactly what runs.
|
|
154
122
|
commands: z.string().optional(),
|
|
@@ -156,33 +124,15 @@ export const EnvironmentItemSchema = z.object({
|
|
|
156
124
|
export type EnvironmentItem = z.infer<typeof EnvironmentItemSchema>;
|
|
157
125
|
export const EnvironmentContentsSchema = z.object({ items: z.array(EnvironmentItemSchema) });
|
|
158
126
|
export type EnvironmentContents = z.infer<typeof EnvironmentContentsSchema>;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
* the run contract replays) and the AI-provider credential root. A bundle carries the first two, declared entry
|
|
164
|
-
* by entry in WORKSPACE_STATE_FILES / HISTORY_STATE_FILES. It cannot carry the other two, and the honest
|
|
165
|
-
* consequence is that taking one in ends in a REPORT rather than a claim of equivalence, the container has no
|
|
166
|
-
* docker socket, so only the host can rebuild the image the overlay describes.
|
|
167
|
-
*
|
|
168
|
-
* The bundle's manifest (BundleManifestSchema) lives in definition.ts beside the sandbox DEFINITION it embeds:
|
|
169
|
-
* a bundle is definition + state, and keeping the two schemas together is what keeps the two export doors from
|
|
170
|
-
* drifting into different answers about what an environment is.
|
|
171
|
-
*
|
|
172
|
-
* ONLY THE OUTBOUND HALF IS HERE. Taking a bundle IN is not a surface of its own any more: it is one of the
|
|
173
|
-
* four sources the arrival pipeline reads (arrival.ts), beside a definition and the two foreign assistants,
|
|
174
|
-
* because all four answer the same question and used to answer it three different ways. */
|
|
127
|
+
// A sandbox is four stores: /work, /history, the container, and the AI-provider credential root. A bundle carries only
|
|
128
|
+
// the first two (WORKSPACE_STATE_FILES/HISTORY_STATE_FILES); it cannot rebuild the container or credentials, so
|
|
129
|
+
// importing one is a report, not a claim of equivalence. Only the outbound half is here; inbound is one of arrival.ts's
|
|
130
|
+
// four sources.
|
|
175
131
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
* browser tab: a refresh abandoned the work and left nothing to come back to. It is a file now, and every field
|
|
179
|
-
* below is read off that file rather than remembered anywhere.
|
|
180
|
-
*
|
|
181
|
-
* `status` is derived from the extension (.part / .tar.gz / .failed) and `bytes` is the file's own size, which
|
|
182
|
-
* is what makes a live pack's progress free to report. */
|
|
132
|
+
// One export in the daemon's export directory, the artifact a bundle is, not the request that made it; every field is
|
|
133
|
+
// read off that file. `status` comes from its extension (.part/.tar.gz/.failed), `bytes` from its own size.
|
|
183
134
|
export const BundleExportSchema = z.object({
|
|
184
|
-
//
|
|
185
|
-
// sees on disk. Carries its own timestamp and a `-with-secrets` marker so it stays self-describing there.
|
|
135
|
+
// Finished filename: the id in every route, timestamped, marked `-with-secrets` when relevant.
|
|
186
136
|
name: z.string(),
|
|
187
137
|
status: z.enum(["packing", "ready", "failed"]),
|
|
188
138
|
// Bytes written so far while packing; the finished size once ready.
|
package/src/schemas/exit.ts
CHANGED
|
@@ -1,44 +1,22 @@
|
|
|
1
|
-
// Geo exits: somewhere the agent's traffic can
|
|
2
|
-
// capability kind rather than a fourth `vpn` provider — an exit routes NOTHING into the main table.
|
|
1
|
+
// Geo exits: somewhere the agent's traffic can leave from, so a page fetches as if read elsewhere.
|
|
3
2
|
import { z } from "zod";
|
|
4
3
|
import { autoStart } from "./internal.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* the main table.
|
|
11
|
-
*
|
|
12
|
-
* That last clause is load-bearing. An exit is a full tunnel by definition, and a full tunnel on the main
|
|
13
|
-
* table swallows the sandbox's own uplink, the model endpoint and the tunnel that makes this sandbox
|
|
14
|
-
* reachable, which reads to a user as the agent breaking mid-turn (see IpsecVpnConfigSchema.routedNetworks
|
|
15
|
-
* for the same trap on the vpn kind). So an exit never touches the default route. It publishes a local SOCKS
|
|
16
|
-
* proxy and callers opt in: a browser account naming it, `curl --proxy`, and nothing else. The side benefit
|
|
17
|
-
* is trust, a volunteer relay carries only what was pointed at it, never the agent's own working traffic.
|
|
18
|
-
*
|
|
19
|
-
* Three providers, chosen because each is reachable with no paid account:
|
|
20
|
-
* tor , the Tor network. ~52 exit countries, no account, no credentials, no privileges: it is a SOCKS
|
|
21
|
-
* proxy already. Country is a torrc line, a new IP is a control-port signal. The free default.
|
|
22
|
-
* vpngate , the University of Tsukuba's volunteer relay pool. No account; its public CSV IS the catalog,
|
|
23
|
-
* so servers auto-fill. Overwhelmingly Japan/Korea in practice, which is the half of the map Tor
|
|
24
|
-
* covers worst, so the two complement rather than duplicate.
|
|
25
|
-
* wireguard, bring your own .conf files, one per country, from a provider's dashboard (Proton VPN's free
|
|
26
|
-
* tier, Mullvad, anything). The catalog is built by parsing what was pasted.
|
|
27
|
-
* Starting, switching country and rotating are LIVE operations (see exit.contract.ts), never config, so an
|
|
28
|
-
* exit's real state is read off the machine. `country` is the resting preference and `autoStart` the only
|
|
29
|
-
* other persisted intent. */
|
|
4
|
+
// An exit never touches the default route: it publishes a local SOCKS proxy callers opt into (a browser account, `curl
|
|
5
|
+
// --proxy`); a `vpn` capability instead pushes routes into the main table.
|
|
6
|
+
// tor: the Tor network, already a SOCKS proxy, no account needed.
|
|
7
|
+
// vpngate: University of Tsukuba's volunteer pool; its public CSV is the catalog.
|
|
8
|
+
// wireguard: user-supplied .conf files from any provider, one pool per country.
|
|
30
9
|
export const ExitProviderSchema = z.enum(["tor", "vpngate", "wireguard"]);
|
|
31
10
|
export type ExitProvider = z.infer<typeof ExitProviderSchema>;
|
|
32
|
-
//
|
|
33
|
-
//
|
|
11
|
+
// ISO 3166-1 alpha-2 code, normalised to uppercase so "de"/"DE"/"De" are one country; catalogs, CLI and manifest all
|
|
12
|
+
// speak this spelling.
|
|
34
13
|
export const CountryCodeSchema = z
|
|
35
14
|
.string()
|
|
36
15
|
.regex(/^[A-Za-z]{2}$/, "A country is its two-letter code, like DE, US or JP.")
|
|
37
16
|
.transform((value) => value.toUpperCase());
|
|
38
17
|
export const TorExitConfigSchema = z.object({
|
|
39
18
|
provider: z.literal("tor"),
|
|
40
|
-
//
|
|
41
|
-
// faster and kinder to the network.
|
|
19
|
+
// Absent means let Tor choose its own exit, which is faster and kinder to the network.
|
|
42
20
|
country: CountryCodeSchema.optional(),
|
|
43
21
|
autoStart,
|
|
44
22
|
});
|
|
@@ -48,14 +26,7 @@ export const VpngateExitConfigSchema = z.object({
|
|
|
48
26
|
autoStart,
|
|
49
27
|
});
|
|
50
28
|
export const WireguardExitConfigSchema = z.object({
|
|
51
|
-
|
|
52
|
-
* capability per country because they are one POOL: the whole point is switching between them under a
|
|
53
|
-
* proxy port that never moves, and a user with five Proton free countries should not add five capabilities
|
|
54
|
-
* to get five countries out of one account.
|
|
55
|
-
*
|
|
56
|
-
* Country per conf comes from an optional `# country: DE` line, else from the provider's own naming
|
|
57
|
-
* convention in the Endpoint host (Proton's `de-free-01.protonvpn.net`, Mullvad's `de-ber-wg-001`), else
|
|
58
|
-
* from a lookup through the tunnel once it is up. Whole thing is the secret: each conf holds a private key. */
|
|
29
|
+
// One or more WireGuard .conf files pasted back to back; each holds a private key, so the field is a secret.
|
|
59
30
|
provider: z.literal("wireguard"),
|
|
60
31
|
config: z.string().min(1),
|
|
61
32
|
country: CountryCodeSchema.optional(),
|
|
@@ -66,9 +37,8 @@ export type TorExitConfig = z.infer<typeof TorExitConfigSchema>;
|
|
|
66
37
|
export type VpngateExitConfig = z.infer<typeof VpngateExitConfigSchema>;
|
|
67
38
|
export type WireguardExitConfig = z.infer<typeof WireguardExitConfigSchema>;
|
|
68
39
|
export type ExitConfig = z.infer<typeof ExitConfigSchema>;
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
// UI stopped read identically, and a daemon restart observes the truth rather than a stale guess.
|
|
40
|
+
// Manifest says which exits exist; this says which are up, where, and what the world sees — read off the machine and
|
|
41
|
+
// wire, never remembered, so a restart observes the truth rather than a stale guess.
|
|
72
42
|
|
|
73
43
|
export const ExitStateSchema = z.enum([
|
|
74
44
|
// Carrying traffic: the proxy is listening and the last check came out where it was asked to.
|
|
@@ -83,14 +53,10 @@ export const ExitStateSchema = z.enum([
|
|
|
83
53
|
"failed",
|
|
84
54
|
]);
|
|
85
55
|
export type ExitState = z.infer<typeof ExitStateSchema>;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* report that the egress address is now German. Every start, use and rotate ends by producing one of these,
|
|
89
|
-
* and a switch that cannot produce one fails instead of quietly leaving traffic where it was. */
|
|
56
|
+
// What the world sees, fetched through the exit's own proxy. Every start, use and rotate ends by producing one; a
|
|
57
|
+
// switch that cannot produce one fails rather than silently leaving traffic where it was.
|
|
90
58
|
export const ExitObservationSchema = z.object({
|
|
91
59
|
ip: z.string().describe("The address the world sees, looked up through the exit's own proxy rather than assumed."),
|
|
92
|
-
// Absent when the lookup answered with an address but no country: a switch is judged on the country when
|
|
93
|
-
// one is known, and on the address having CHANGED when it is not.
|
|
94
60
|
country: z
|
|
95
61
|
.string()
|
|
96
62
|
.optional()
|
|
@@ -100,16 +66,13 @@ export const ExitObservationSchema = z.object({
|
|
|
100
66
|
countryName: z.string().optional().describe("That country's name, spelled out."),
|
|
101
67
|
});
|
|
102
68
|
export type ExitObservation = z.infer<typeof ExitObservationSchema>;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
* relay, so the ranking has to carry how much is actually there, not just that the flag exists. */
|
|
69
|
+
// One country an exit can come out of. `servers` and `share` keep the list honest: many listed countries are one
|
|
70
|
+
// underpowered relay, not real capacity.
|
|
106
71
|
export const ExitPointSchema = z.object({
|
|
107
72
|
country: z.string().describe("The country's code."),
|
|
108
73
|
countryName: z.string().describe("Its name, spelled out."),
|
|
109
|
-
// How many relays/servers this provider has there right now.
|
|
110
74
|
servers: z.number().describe("How many servers this provider has there."),
|
|
111
|
-
//
|
|
112
|
-
// countries that technically exist and practically do not.
|
|
75
|
+
// Also used to grey out countries that technically exist but carry no real capacity.
|
|
113
76
|
share: z
|
|
114
77
|
.number()
|
|
115
78
|
.optional()
|
|
@@ -120,8 +83,7 @@ export const ExitPointSchema = z.object({
|
|
|
120
83
|
export type ExitPoint = z.infer<typeof ExitPointSchema>;
|
|
121
84
|
export const ExitCountriesSchema = z.object({
|
|
122
85
|
countries: z.array(ExitPointSchema).describe("Where this exit can put you, best-supplied first."),
|
|
123
|
-
//
|
|
124
|
-
// is down). The picker says so rather than presenting a stale list as current.
|
|
86
|
+
// True from a live fetch, false from the baked fallback (no network, or the provider is down).
|
|
125
87
|
live: z
|
|
126
88
|
.boolean()
|
|
127
89
|
.describe("Whether the provider answered, or this came from a built-in list. Said out loud rather than presenting an old list as current."),
|
|
@@ -132,17 +94,13 @@ export const ExitLinkSchema = z.object({
|
|
|
132
94
|
state: ExitStateSchema.describe(
|
|
133
95
|
"Whether it is carrying traffic, coming up, resting, failed, or not installable yet because its client needs a rebuild to arrive.",
|
|
134
96
|
),
|
|
135
|
-
// The SOCKS endpoint callers point at. Fixed per exit and stable across country switches, which is what
|
|
136
|
-
// lets a long task change country halfway without reconfiguring anything downstream.
|
|
137
97
|
proxy: z
|
|
138
98
|
.string()
|
|
139
99
|
.describe(
|
|
140
100
|
"Where to point traffic that should go through it. Fixed per exit and unchanged by a country switch, which is what lets a long job move country halfway through without reconfiguring anything.",
|
|
141
101
|
),
|
|
142
|
-
//
|
|
102
|
+
// Manifest preference, or the last `use` call.
|
|
143
103
|
country: z.string().optional().describe("Where it was asked to come out. Absent means the provider chose."),
|
|
144
|
-
// The country actually OBSERVED at the last check, and the address behind it. These two disagreeing is
|
|
145
|
-
// the single most useful fault signal this feature has, so they are separate fields, never merged.
|
|
146
104
|
observedCountry: z
|
|
147
105
|
.string()
|
|
148
106
|
.optional()
|
|
@@ -150,9 +108,8 @@ export const ExitLinkSchema = z.object({
|
|
|
150
108
|
"Where it actually comes out, as last checked. Kept separate from what was asked for, because those two disagreeing is the most useful fault signal this whole feature has.",
|
|
151
109
|
),
|
|
152
110
|
ip: z.string().optional().describe("The address behind that observation."),
|
|
153
|
-
// Epoch ms of the observation above, so a stale reading can be rendered as stale.
|
|
154
111
|
checkedAt: z.number().optional().describe("When that was checked, in milliseconds, so an old reading can be shown as old."),
|
|
155
|
-
//
|
|
112
|
+
// vpngate and wireguard have one; Tor has none by design.
|
|
156
113
|
interface: z.string().optional().describe("The network interface, for the kinds that have one."),
|
|
157
114
|
since: z.number().optional().describe("When it came up, in milliseconds."),
|
|
158
115
|
autoStart: z.boolean().describe("Whether it starts itself when the sandbox does."),
|
|
@@ -162,19 +119,8 @@ export type ExitLink = z.infer<typeof ExitLinkSchema>;
|
|
|
162
119
|
export const ExitListSchema = z.object({
|
|
163
120
|
links: z.array(ExitLinkSchema).describe("Every configured exit, with where it was asked to come out and where it actually does."),
|
|
164
121
|
});
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
* FALLBACK catalog when a provider's own list cannot be fetched; the add form uses it to fill the country
|
|
168
|
-
* picker, so a user chooses from a list instead of guessing a code and finding out later that nothing serves
|
|
169
|
-
* it. A second copy of these numbers would let the picker offer a country the driver cannot dial.
|
|
170
|
-
*
|
|
171
|
-
* `share` is the country's slice of the provider's exit capacity, and it is the number that matters. A third
|
|
172
|
-
* of Tor's fifty-two countries are one overloaded relay behind a flag; ranking by relay COUNT alone would put
|
|
173
|
-
* the United States first on 1,171 slow relays when the Netherlands carries three times the traffic on half as
|
|
174
|
-
* many. Both surfaces sort on this so the top of the list is the part that works.
|
|
175
|
-
*
|
|
176
|
-
* Measured 2026-08-21 from onionoo.torproject.org and vpngate.net's public CSV. Stale by construction, which
|
|
177
|
-
* is exactly why the daemon prefers a live fetch and labels this one as not-live when it falls back to it. */
|
|
122
|
+
// Shared fallback catalog for the daemon and the add-form picker, so the two cannot drift. Ranked by `share`, not
|
|
123
|
+
// server count, since count alone misrepresents real capacity; stale by construction, always marked not-live when used.
|
|
178
124
|
export const TOR_EXIT_COUNTRIES: readonly ExitPoint[] = [
|
|
179
125
|
{ country: "NL", countryName: "Netherlands", servers: 607, share: 0.304 },
|
|
180
126
|
{ country: "DE", countryName: "Germany", servers: 415, share: 0.242 },
|
|
@@ -196,9 +142,7 @@ export const TOR_EXIT_COUNTRIES: readonly ExitPoint[] = [
|
|
|
196
142
|
{ country: "GB", countryName: "United Kingdom", servers: 8, share: 0.002 },
|
|
197
143
|
{ country: "FI", countryName: "Finland", servers: 13, share: 0.002 },
|
|
198
144
|
];
|
|
199
|
-
//
|
|
200
|
-
// hide behind a long country list, it is the reason to have it, Tor's Asian exit capacity is close to nothing,
|
|
201
|
-
// so the two providers cover each other rather than overlapping.
|
|
145
|
+
// Skewed to Japan/Korea by design, complementing Tor's weak Asian coverage rather than duplicating it.
|
|
202
146
|
export const VPNGATE_EXIT_COUNTRIES: readonly ExitPoint[] = [
|
|
203
147
|
{ country: "JP", countryName: "Japan", servers: 46, share: 0.48 },
|
|
204
148
|
{ country: "KR", countryName: "Korea, South", servers: 37, share: 0.39 },
|
|
@@ -212,8 +156,7 @@ export const VPNGATE_EXIT_COUNTRIES: readonly ExitPoint[] = [
|
|
|
212
156
|
{ country: "BY", countryName: "Belarus", servers: 1, share: 0.01 },
|
|
213
157
|
];
|
|
214
158
|
export const ExitIdParamSchema = z.object({ id: z.string().describe("Which exit.") });
|
|
215
|
-
// POST /exit/{id}/use body
|
|
216
|
-
// `country` in the manifest means, so clearing a country is expressible rather than only setting one.
|
|
159
|
+
// POST /exit/{id}/use body; absent `country` matches what an absent one means in the manifest.
|
|
217
160
|
export const ExitUseInputSchema = z.object({
|
|
218
161
|
id: z.string().describe("Which exit."),
|
|
219
162
|
country: CountryCodeSchema.optional().describe(
|