@intentic/sandbox-contract 1.248.0 → 1.249.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.map +1 -1
- 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 +423 -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/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 +90 -0
- package/dist/schemas/devices.d.ts.map +1 -1
- package/dist/schemas/devices.js +10 -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 +6 -9
- package/dist/schemas/settings.d.ts.map +1 -1
- package/dist/schemas/settings.js +16 -5
- 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 +4 -15
- 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} +19 -40
- package/src/models/model-order.ts +163 -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 +98 -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 +175 -600
- 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 +62 -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-order.js → models/model-order.js} +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
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { AccountUsageSchema } from "./plan-limits.js";
|
|
3
3
|
import { KeyedProviderSchema } from "./provider-subscriptions.js";
|
|
4
|
-
// Claude uses
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// the user's display name (auto-filled from the sign-in identity where the token carries one). Tokens never
|
|
8
|
-
// ride this shape, connection status is existence in the list.
|
|
4
|
+
// Claude uses PKCE paste-back (start → exchange); Codex uses OpenAI's device-code flow (start → poll). A sandbox can
|
|
5
|
+
// hold several accounts per provider; `id` is the store key, `label` the display name. Tokens never ride this shape —
|
|
6
|
+
// connection is existence in the list.
|
|
9
7
|
|
|
10
8
|
export const OauthAccountSchema = z.object({
|
|
11
9
|
id: z.string().describe("The account's id, which is what a turn names to spend on it and what disconnecting takes."),
|
|
12
10
|
label: z.string().describe("What it is called here, which somebody can change."),
|
|
13
|
-
// WHO this account signs in as, in the provider's own words. Anthropic returns the email and the
|
|
14
|
-
// organization alongside the tokens, so a connection can name itself instead of arriving as a second row
|
|
15
|
-
// called "Claude". Kept BESIDE `label` rather than folded into it: the label is the user's to rename, and a
|
|
16
|
-
// renamed account still has to be able to say whose it is. Absent when the provider tells us nothing (a
|
|
17
|
-
// pasted API key carries no identity), which is exactly when renaming is the only answer, so every
|
|
18
|
-
// sandbox-owned account can be renamed.
|
|
19
11
|
email: z
|
|
20
12
|
.string()
|
|
21
13
|
.optional()
|
|
@@ -25,18 +17,11 @@ export const OauthAccountSchema = z.object({
|
|
|
25
17
|
organization: z.string().optional().describe("Which organisation it belongs to, where the provider says."),
|
|
26
18
|
scope: z.string().optional().describe("What the credential is permitted to do, in the provider's terms."),
|
|
27
19
|
connectedAt: z.number().describe("When it was connected, in milliseconds."),
|
|
28
|
-
// Set only when the account's stored credential can no longer be refreshed (revoked/expired refresh token)
|
|
29
|
-
//, the user must reconnect. Absent ⇒ healthy or not-yet-probed; `detail` carries the reason for the UI.
|
|
30
|
-
// Provider-agnostic; only Codex probes it today (Claude refreshes on-demand, Grok's tokens are OpenCode's).
|
|
31
20
|
needsReauth: z
|
|
32
21
|
.boolean()
|
|
33
22
|
.optional()
|
|
34
23
|
.describe("Its stored credential can no longer be renewed and somebody has to sign in again. Absent means healthy, or not checked yet."),
|
|
35
24
|
detail: z.string().optional().describe("Why, in words a person can act on."),
|
|
36
|
-
// The account's last known subscription-usage snapshot, so the picker can show what's left on each account
|
|
37
|
-
// before the user commits a turn to one. Absent until a reading exists for it, an unmeasured account reads
|
|
38
|
-
// as unknown, never 0%. Claude is the provider that fills it here, because its stream reports the windows;
|
|
39
|
-
// the routed subscriptions carry the identical field on TranslatorAccount, filled by a pulled reading.
|
|
40
25
|
usage: AccountUsageSchema.optional().describe(
|
|
41
26
|
"How full its plan limits were when last measured, so a picker can show what is left before committing work to it. Absent until a reading exists, which reads as unknown rather than as nothing left.",
|
|
42
27
|
),
|
|
@@ -48,12 +33,7 @@ export const OauthAccountListSchema = z.object({
|
|
|
48
33
|
.describe("The connected accounts. Tokens never travel in this shape: being in this list is what connected means."),
|
|
49
34
|
});
|
|
50
35
|
export type OauthAccountList = z.infer<typeof OauthAccountListSchema>;
|
|
51
|
-
|
|
52
|
-
* enough by the daemon's own bound. Every ordinary read of the list wants that bound, it is what keeps a page
|
|
53
|
-
* load off the upstream quota endpoint, but a person who has just changed something about the account
|
|
54
|
-
* (a seat downgraded, a plan swapped, another device's spend) is asking precisely whether the reading they can
|
|
55
|
-
* see is still true, and an answer from the last minute cannot tell them. Read off the query string, so the
|
|
56
|
-
* caller says it as `?force=1`. */
|
|
36
|
+
// Read off the query string as `?force=1`.
|
|
57
37
|
export const AccountListQuerySchema = z.object({
|
|
58
38
|
force: z
|
|
59
39
|
.stringbool()
|
|
@@ -64,24 +44,16 @@ export const AccountListQuerySchema = z.object({
|
|
|
64
44
|
});
|
|
65
45
|
// Address one account of a provider (disconnect, and the turn's `account`).
|
|
66
46
|
export const AccountIdSchema = z.object({ id: z.string().min(1).describe("Which account.") });
|
|
67
|
-
//
|
|
68
|
-
// derived name, so clearing a label restores the sign-in identity rather than leaving a nameless row.
|
|
47
|
+
// Only for accounts whose credential the sandbox itself owns.
|
|
69
48
|
export const AccountRenameSchema = z.object({
|
|
70
49
|
id: z.string().min(1).describe("Which account."),
|
|
71
50
|
label: z.string().max(80).describe("The new name. Blank restores the one derived from the sign-in, rather than leaving a nameless row."),
|
|
72
51
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* durable key), so the daemon runs the whole flow and the caller only watches the account list. xAI's is a
|
|
79
|
-
* device code. Meta's and Z.ai's mint the vendor's own key, by a device poll or by a redirect that dead-ends in
|
|
80
|
-
* the user's address bar. Every one of them is now the daemon's to hold: nothing redeemable is on this shape,
|
|
81
|
-
* and the one thing the caller can hand back (a code off a page, or the address a redirect landed on) goes to
|
|
82
|
-
* `complete` with the attempt's handshake. `flow` says how the attempt ENDS, which is the only thing a card
|
|
83
|
-
* cannot infer from the fields: a device sign-in finishes upstream and the account appears on its own; a
|
|
84
|
-
* redirect needs the landing address brought back; a paste needs the code the page showed. */
|
|
52
|
+
// One shape for every sign-in, whatever the vendor's mechanism; nothing redeemable rides on it, only the daemon ever
|
|
53
|
+
// holds a secret. `flow` says how the attempt ends, which no other field can tell you:
|
|
54
|
+
// device: finishes upstream; watch the account list.
|
|
55
|
+
// redirect: needs the landing address brought back.
|
|
56
|
+
// paste: needs the code the page showed.
|
|
85
57
|
export const LoginFlowSchema = z.enum(["device", "redirect", "paste"]);
|
|
86
58
|
export type LoginFlow = z.infer<typeof LoginFlowSchema>;
|
|
87
59
|
export const LoginStartSchema = z.object({
|
|
@@ -100,32 +72,26 @@ export const LoginStartSchema = z.object({
|
|
|
100
72
|
expiresAt: z.number().describe("When this attempt stops being answerable, in milliseconds, so a card can stop waiting instead of spinning."),
|
|
101
73
|
});
|
|
102
74
|
export type LoginStart = z.infer<typeof LoginStartSchema>;
|
|
103
|
-
//
|
|
104
|
-
// takes the provider's default, which is what a provider with a single estate always sends.
|
|
75
|
+
// e.g. Z.ai's international vs. mainland plans.
|
|
105
76
|
export const LoginRequestSchema = z.object({
|
|
106
77
|
variant: z.string().min(1).optional().describe("Which estate to sign in to. Absent takes the provider's default."),
|
|
107
78
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
* one addresses a session CLIProxyAPI holds, so the state has to travel, while this handshake is held right
|
|
111
|
-
* here and taking the caller's word for its own state would be checking a claim against itself. */
|
|
79
|
+
// Only the two flows needing something back (paste's code, redirect's address) supply one; no state field, unlike the
|
|
80
|
+
// translator's — this handshake is held right here, so the caller's own state would be checking a claim against itself.
|
|
112
81
|
export const LoginCompleteSchema = z.object({
|
|
113
82
|
handshake: z.string().min(1).describe("Which attempt this belongs to."),
|
|
114
83
|
code: z.string().optional().describe("The code the sign-in page showed, for a paste sign-in."),
|
|
115
84
|
redirectUrl: z.string().optional().describe("The address the browser was sent to, whole, for a redirect sign-in. The grant is inside it."),
|
|
116
85
|
label: z.string().optional().describe("What to call the account. Blank derives one from the sign-in."),
|
|
117
86
|
});
|
|
118
|
-
//
|
|
119
|
-
// the daemon still has a mint to do behind the answer and the row lands in the account list minutes later.
|
|
87
|
+
// Absent when the daemon still has minting to do; the row lands in the account list minutes later.
|
|
120
88
|
export const LoginCompletedSchema = z.object({
|
|
121
89
|
account: OauthAccountSchema.optional().describe("The account it connected, where the sign-in ends here. Absent means keep watching the account list."),
|
|
122
90
|
});
|
|
123
|
-
//
|
|
124
|
-
// than a security boundary: an unanswered attempt also times out on its own (see `expiresAt`).
|
|
91
|
+
// Tidiness, not a security boundary: an unanswered attempt also times out on its own (`expiresAt`).
|
|
125
92
|
export const LoginCancelSchema = z.object({ handshake: z.string().min(1).describe("Which attempt to stop waiting on.") });
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
// explicit flow discriminator matters even when a provider's verification URL already embeds its optional code.
|
|
93
|
+
// codex/grok/kimi/gemini via CLIProxyAPI; `flow` is explicit even when a provider's URL already embeds an optional
|
|
94
|
+
// code.
|
|
129
95
|
export const TranslatorStartSchema = z.object({
|
|
130
96
|
url: z.string().describe("The page to open."),
|
|
131
97
|
code: z.string().describe("The one-time code, where the provider uses one."),
|
|
@@ -136,28 +102,15 @@ export const TranslatorStartSchema = z.object({
|
|
|
136
102
|
"Which shape this is. A device sign-in finishes by itself and you poll the account list; a redirect needs the address it landed on handed back. Said outright rather than guessed at from whether a code happens to exist.",
|
|
137
103
|
),
|
|
138
104
|
});
|
|
139
|
-
//
|
|
140
|
-
// ?code=&state=. `state` ties it to the handshake that issued it, the translator rejects a mismatch.
|
|
105
|
+
// Grant rides in the URL as `?code=&state=`.
|
|
141
106
|
export const TranslatorCompleteSchema = z.object({
|
|
142
107
|
provider: KeyedProviderSchema.describe("Which provider."),
|
|
143
108
|
redirectUrl: z.string().min(1).describe("The address the browser was sent to, whole. The grant is inside it."),
|
|
144
109
|
state: z.string().min(1).describe("The handshake this belongs to. A mismatch is refused."),
|
|
145
110
|
});
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
// is the model a fresh chat on that provider seeds (always present). Served by the one catalog route every
|
|
150
|
-
// provider shares. `efforts` is the reasoning-effort tiers the model accepts (Claude reports them per model);
|
|
151
|
-
// empty ⇒ the client's default tiers.
|
|
152
|
-
//
|
|
153
|
-
// EVERY field here is provider-reported, nothing about a model is curated in this repo, so a new release or a
|
|
154
|
-
// renamed family flows to the UI with no code change. Providers differ in how much they publish: the Claude
|
|
155
|
-
// Agent SDK reports a display name, a capability description, effort tiers, and capability flags, while the
|
|
156
|
-
// Some OpenAI-compatible /v1/models endpoints report ids only, those rows render label-only, and that absence
|
|
157
|
-
// is the honest answer rather than something to paper over with a hand-written table.
|
|
158
|
-
//
|
|
159
|
-
// ORDER IS MEANINGFUL: `models` arrives in the provider's own preference order, which is what the picker sorts
|
|
160
|
-
// by, and `default` is the provider's own default. Neither is re-ranked locally.
|
|
111
|
+
// Resolved daemon-side (live discovery, a persisted fallback, a seed floor), never empty. Every field is
|
|
112
|
+
// provider-reported, nothing curated here, so an id-only provider renders label-only rather than a hand-written table.
|
|
113
|
+
// Order is meaningful: the provider's own preference order, never re-ranked.
|
|
161
114
|
export const ModelBadgeSchema = z.enum(["reasoning", "fast"]);
|
|
162
115
|
export type ModelBadge = z.infer<typeof ModelBadgeSchema>;
|
|
163
116
|
export const ModelSchema = z.object({
|
|
@@ -171,14 +124,8 @@ export const ModelSchema = z.object({
|
|
|
171
124
|
"What it is good for, in the provider's own words. Absent where the provider publishes only ids, which is the honest answer rather than something to paper over with a hand-written table.",
|
|
172
125
|
),
|
|
173
126
|
badges: z.array(ModelBadgeSchema).optional().describe("What it is known for, where the provider says so."),
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
*
|
|
177
|
-
* The SERVED window, never the weights' training length. An inference server takes its context size from a
|
|
178
|
-
* flag and then clamps it to the memory it actually has, so a 3B model whose GGUF advertises 131k can be
|
|
179
|
-
* serving 16k, and it is the 16k that refuses the request. Read from llama.cpp's /props and vLLM's
|
|
180
|
-
* `max_model_len`; absent for every provider that publishes no such number, which is most of them, and
|
|
181
|
-
* absent means unknown rather than unlimited: nothing gates on a window it was never told. */
|
|
127
|
+
// The served window, not the training length — memory can clamp it lower. Turns are refused against this. Absent
|
|
128
|
+
// means unknown, never unlimited.
|
|
182
129
|
contextWindow: z.number().optional().describe("How many tokens this model will accept in one request, where the server publishes it."),
|
|
183
130
|
});
|
|
184
131
|
export type Model = z.infer<typeof ModelSchema>;
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { TRANSLATOR_PROVIDERS, type TranslatorProvider } from "../provider-specs.js";
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// native runtime and so carry the harness axis; Kimi is routed-only, so its turns always use Claude Code.
|
|
7
|
-
//
|
|
8
|
-
// Gemini is in BOTH camps and that is not a contradiction: its native runtime (OpenCode) reaches Google through
|
|
9
|
-
// this same translator and these same auth files. The harness axis picks the loop; the translator is the road
|
|
10
|
-
// under either.
|
|
11
|
-
//
|
|
12
|
-
// DERIVED from the provider table's `auth.kind`, never listed here: this enum and the accounts schema built on
|
|
13
|
-
// it (TranslatorAccountsSchema) and the daemon's CLIProxyAPI id map are three readings of one fact, and they
|
|
14
|
-
// used to be three hand-kept lists that had to agree.
|
|
2
|
+
import { TRANSLATOR_PROVIDERS, type TranslatorProvider } from "../models/provider-specs.js";
|
|
3
|
+
// Providers reachable via the translator (CLIProxyAPI), which holds their subscription OAuth behind an Anthropic
|
|
4
|
+
// endpoint; `claude` is absent, served natively. Gemini is in both camps: its native runtime reaches Google through
|
|
5
|
+
// this same translator. Derived from the provider table's `auth.kind`, never listed here.
|
|
15
6
|
export const KeyedProviderSchema = z.enum(TRANSLATOR_PROVIDERS);
|
|
16
7
|
export type KeyedProvider = TranslatorProvider;
|
package/src/schemas/public.ts
CHANGED
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
// public: the workspace outbox
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// absent until something is published and removed again when the last file leaves, so "publishing is off" is
|
|
7
|
-
// the resting state rather than a flag someone has to remember to set back.
|
|
3
|
+
// Files under `public/` are served as static, unauthenticated files at public-<slot>-<sandboxId>.<zone> — the
|
|
4
|
+
// process-free half of preview. The directory's existence is the switch: absent until something is published, removed
|
|
5
|
+
// again when the last file leaves.
|
|
8
6
|
|
|
9
7
|
export const PublicFileSchema = z.object({
|
|
10
|
-
//
|
|
8
|
+
// Forward-slash, e.g. "report.pdf", "site/index.html".
|
|
11
9
|
path: z.string().describe("Where it sits inside the outbox."),
|
|
12
10
|
size: z.number().describe("Size in bytes."),
|
|
13
11
|
modifiedAt: z.number().describe("When it last changed, in milliseconds."),
|
|
14
|
-
// The file's public URL. Absent when the sandbox has no tunnel, or when a guard refuses this file.
|
|
15
12
|
url: z.string().optional().describe("Its public address. Absent when this sandbox has no outside address, or when the file is being refused."),
|
|
16
|
-
// Why a file sitting in the outbox is NOT served, a hidden name, a credential-shaped name, contents that
|
|
17
|
-
// match a known token format, or sheer size. The publisher reads it here; a stranger requesting the same
|
|
18
|
-
// file only ever gets the same 404 every other miss returns, so this list can't be probed from outside.
|
|
19
13
|
blocked: z
|
|
20
14
|
.string()
|
|
21
15
|
.optional()
|
|
@@ -24,15 +18,11 @@ export const PublicFileSchema = z.object({
|
|
|
24
18
|
),
|
|
25
19
|
});
|
|
26
20
|
export type PublicFile = z.infer<typeof PublicFileSchema>;
|
|
27
|
-
// `url` is the outbox root, the base every file's URL hangs off, and what the view shows as "your public
|
|
28
|
-
// address". Absent on a loopback/no-tunnel sandbox, which has nowhere to publish to.
|
|
29
21
|
export const PublicListSchema = z.object({
|
|
30
22
|
url: z.string().optional().describe("Your public address, which every file's own hangs off. Absent on a sandbox with nowhere to publish to."),
|
|
31
23
|
files: z.array(PublicFileSchema).describe("What the outbox holds."),
|
|
32
24
|
});
|
|
33
25
|
export type PublicList = z.infer<typeof PublicListSchema>;
|
|
34
|
-
// A WORKSPACE-relative path (the space the file tree speaks) to copy into the outbox. A copy, not a move: the
|
|
35
|
-
// repo a build output came from must not lose it because someone shared it.
|
|
36
26
|
export const PublishSchema = z.object({
|
|
37
27
|
path: z
|
|
38
28
|
.string()
|
|
@@ -41,7 +31,6 @@ export const PublishSchema = z.object({
|
|
|
41
31
|
"What to publish, as a workspace path. It is copied rather than moved, so a repository does not lose its build output because somebody shared it.",
|
|
42
32
|
),
|
|
43
33
|
});
|
|
44
|
-
// An OUTBOX-relative path to withdraw, the path space PublicFile.path speaks, not the workspace's.
|
|
45
34
|
export const UnpublishSchema = z.object({
|
|
46
35
|
path: z.string().min(1).describe("What to withdraw, as a path inside the outbox rather than a workspace path."),
|
|
47
36
|
});
|
package/src/schemas/push.ts
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
// push: notifications to the owner's devices
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
// The daemon is the only tier that knows what the agent is doing, so it is the sender. A registration is
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// the app's vendor. The daemon posts plain JSON to the platform's push relay, which holds the
|
|
9
|
-
// vendor credential and forwards. The payload transits the relay readable, the price of Apple
|
|
10
|
-
// requiring the vendor in the loop, which is why the channel records WHERE to post (`url`)
|
|
11
|
-
// rather than the daemon knowing any platform by name.
|
|
12
|
-
// Channels live here and not on the platform because the daemon is on the command path: the platform would
|
|
13
|
-
// have to be told about every turn to be useful.
|
|
3
|
+
// The daemon is the only tier that knows what the agent is doing, so it is the sender. A registration is per-device, in
|
|
4
|
+
// two kinds:
|
|
5
|
+
// webpush: a browser (including the Android TWA); the daemon sends to its push service directly, end-to-end encrypted.
|
|
6
|
+
// relay: a native app (iOS); its OS push service only accepts sends from the vendor, so the daemon posts through a
|
|
7
|
+
// relay, which can read the payload.
|
|
14
8
|
|
|
15
|
-
//
|
|
16
|
-
// PushManager.subscribe() and the client posts it back verbatim, so the daemon never reshapes it.
|
|
9
|
+
// Exact shape `web-push` consumes, from `PushManager.subscribe()`; posted back verbatim.
|
|
17
10
|
export const WebPushChannelSchema = z.object({
|
|
18
11
|
kind: z.literal("webpush").describe("A browser, which the sandbox can reach directly and encrypt end to end."),
|
|
19
12
|
endpoint: z.url().describe("Where that browser's push service accepts sends. It also identifies the device everywhere else in this group."),
|
|
@@ -25,16 +18,12 @@ export const WebPushChannelSchema = z.object({
|
|
|
25
18
|
.describe("What the browser handed you when it subscribed. Post it back exactly as it came; nothing reshapes it."),
|
|
26
19
|
});
|
|
27
20
|
export type WebPushChannel = z.infer<typeof WebPushChannelSchema>;
|
|
28
|
-
// A native install, addressed through a push relay. `secret` is the send capability the relay minted at
|
|
29
|
-
// registration, the daemon proves it may notify this device by presenting it; the relay never learns which
|
|
30
|
-
// sandbox is calling. `deviceId` doubles as the channel's identity (see channelId below).
|
|
31
21
|
export const RelayChannelSchema = z.object({
|
|
32
22
|
kind: z
|
|
33
23
|
.literal("relay")
|
|
34
24
|
.describe(
|
|
35
25
|
"A native app, whose operating system only accepts sends from the app's publisher, so the sandbox posts through a relay instead. The message passes through that relay readable, which is the price of the publisher having to be in the loop.",
|
|
36
26
|
),
|
|
37
|
-
// The absolute URL the daemon POSTs a send to, minted by the relay at registration, stored verbatim.
|
|
38
27
|
url: z.url().describe("Where to post a send. Recorded rather than assumed, so the sandbox need not know any platform by name."),
|
|
39
28
|
deviceId: z.string().min(1).describe("The device's id, which also identifies this registration everywhere else in this group."),
|
|
40
29
|
secret: z.string().min(1).describe("Proof that this sandbox may notify this device. The relay never learns which sandbox is calling."),
|
|
@@ -42,16 +31,9 @@ export const RelayChannelSchema = z.object({
|
|
|
42
31
|
export type RelayChannel = z.infer<typeof RelayChannelSchema>;
|
|
43
32
|
export const PushChannelSchema = z.discriminatedUnion("kind", [WebPushChannelSchema, RelayChannelSchema]);
|
|
44
33
|
export type PushChannel = z.infer<typeof PushChannelSchema>;
|
|
45
|
-
// The one identity every push route
|
|
46
|
-
//
|
|
47
|
-
// a browser is its push endpoint, a native install is the deviceId its relay registration minted.
|
|
34
|
+
// The one identity every push route uses (subscribe, unsubscribe, config); derived from the channel's own shape so the
|
|
35
|
+
// daemon and web app can't disagree about it.
|
|
48
36
|
export const channelId = (channel: PushChannel): string => (channel.kind === "webpush" ? channel.endpoint : channel.deviceId);
|
|
49
|
-
// What the service worker renders. `url` is the in-app route the notification opens (the click handler
|
|
50
|
-
// focuses an existing tab there rather than spawning a new one); `tag` collapses repeats, a second
|
|
51
|
-
// "waiting on you" for the same conversation REPLACES the first instead of stacking. Push payloads are
|
|
52
|
-
// capped by the push services themselves (~4KB after encryption), which is why nothing here carries a
|
|
53
|
-
// transcript or a diff, the notification is a pointer back into the workspace, not a delivery mechanism
|
|
54
|
-
// for content.
|
|
55
37
|
export const PushNotificationSchema = z.object({
|
|
56
38
|
title: z.string().min(1).describe("The headline."),
|
|
57
39
|
body: z
|
|
@@ -64,8 +46,6 @@ export const PushNotificationSchema = z.object({
|
|
|
64
46
|
.string()
|
|
65
47
|
.optional()
|
|
66
48
|
.describe("Collapses repeats: a second notification with the same tag replaces the first instead of stacking beside it."),
|
|
67
|
-
// Whether the notification stays on screen until dismissed. Set for the "agent is blocked on you" cases,
|
|
68
|
-
// where a notification that auto-dismisses is a request that silently went unanswered.
|
|
69
49
|
requireInteraction: z
|
|
70
50
|
.boolean()
|
|
71
51
|
.optional()
|
|
@@ -74,9 +54,6 @@ export const PushNotificationSchema = z.object({
|
|
|
74
54
|
),
|
|
75
55
|
});
|
|
76
56
|
export type PushNotification = z.infer<typeof PushNotificationSchema>;
|
|
77
|
-
// The VAPID public key a browser needs to subscribe (native shells ignore it), plus whether the asking
|
|
78
|
-
// device's channel is already known, so the settings toggle can render its true state instead of trusting
|
|
79
|
-
// the device's permission alone (a granted permission with no daemon-side row would notify nothing).
|
|
80
57
|
export const PushConfigSchema = z.object({
|
|
81
58
|
publicKey: z.string().describe("The key a browser needs in order to subscribe. Native apps ignore it."),
|
|
82
59
|
subscribed: z
|
|
@@ -88,8 +65,6 @@ export const PushConfigSchema = z.object({
|
|
|
88
65
|
export const PushChannelIdSchema = z.object({
|
|
89
66
|
id: z.string().min(1).describe("Which device: a browser's push address, or a native install's device id."),
|
|
90
67
|
});
|
|
91
|
-
// The optional `id` says WHICH device is asking (see channelId); without it `subscribed` could only speak
|
|
92
|
-
// for the sandbox as a whole, which is never the question the settings toggle needs answered.
|
|
93
68
|
export const PushConfigQuerySchema = z.object({
|
|
94
69
|
id: z
|
|
95
70
|
.string()
|
|
@@ -97,9 +72,6 @@ export const PushConfigQuerySchema = z.object({
|
|
|
97
72
|
.optional()
|
|
98
73
|
.describe("Which device is asking. Without it the answer can only speak for the sandbox as a whole, which is rarely the question."),
|
|
99
74
|
});
|
|
100
|
-
// What a test send actually achieved. `{ ok: true }` would be a lie the one place it matters most: the button
|
|
101
|
-
// exists to prove a chain the user cannot inspect, so "the daemon accepted the request" is not the answer to
|
|
102
|
-
// the question being asked. A count separates "your OS swallowed it" from "nothing was sent at all".
|
|
103
75
|
export const PushTestSchema = z.object({
|
|
104
76
|
delivered: z
|
|
105
77
|
.number()
|
package/src/schemas/secrets.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
// secrets: user-supplied env-var secrets the daemon writes to desired-state/.env
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// returns KEYS ONLY, the values never leave the sandbox; `reveal` is the one deliberate, owner-only exception.
|
|
3
|
+
// Straight to the sandbox daemon, never through the platform; `apply` reloads .env with no restart. `list` returns keys
|
|
4
|
+
// only; `reveal` is the one owner-only exception that returns a value.
|
|
6
5
|
export const SecretSetSchema = z.object({
|
|
7
6
|
key: z
|
|
8
7
|
.string()
|
|
@@ -17,28 +16,8 @@ export const SecretKeysSchema = z.object({
|
|
|
17
16
|
export const SecretKeyParamSchema = z.object({ key: z.string().describe("Which secret, by name.") });
|
|
18
17
|
export const SecretRevealSchema = z.object({ value: z.string().describe("The value itself. The only place in this API one is ever returned.") });
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
* Masking already answers "can the model SEE this value" (no: it reads a `{{secret:name}}` reference), and
|
|
23
|
-
* the answer was enough while the only question was disclosure. It is not the whole question. A reference the
|
|
24
|
-
* model can write is a credential the model can SPEND, at whatever moment its own reasoning arrives at, and
|
|
25
|
-
* for the small set of credentials where one wrong spend is the incident — the production database's
|
|
26
|
-
* password, the company X account, the card-shaped connector — the owner wants the moment itself decided by a
|
|
27
|
-
* person, not the storage of the value. That is what a gate is: not a second lock on the vault, a REQUIRED
|
|
28
|
-
* CLICK in front of the exit.
|
|
29
|
-
*
|
|
30
|
-
* WHAT IT IS NOT A WALL AGAINST. A shell in this container runs as the workspace's owner and the policy file
|
|
31
|
-
* sits beside the vault it guards; anything that can read one can read the other, and a compromised container
|
|
32
|
-
* is out of scope here exactly as it is for the vault (SECURITY.md). The gate is a wall against the AGENT's
|
|
33
|
-
* own judgment being the last word — a prompt-injected model can ask for a release and cannot grant itself
|
|
34
|
-
* one — and against the ordinary accident of a turn reaching for the live credential when the staging one was
|
|
35
|
-
* meant.
|
|
36
|
-
*
|
|
37
|
-
* THE APPROVERS ARE AN EXACT LIST, not a role floor, and the owner is not on it implicitly. "Only Bob may
|
|
38
|
-
* release the production password" is the sentence people actually mean, and a floor cannot say it: a floor of
|
|
39
|
-
* `maintainer` says "anyone senior enough", which is the thing the owner was trying to narrow. So the list is
|
|
40
|
-
* the list, the owner adds themselves when they mean themselves, and a click from anybody else is refused
|
|
41
|
-
* server-side with the card left standing for whoever can. */
|
|
19
|
+
// A wall against the agent's own judgment, not a compromised container: a shell here can read the policy same as the
|
|
20
|
+
// vault. Approvers are an exact list, never a role floor; the owner isn't on it unless added.
|
|
42
21
|
export const CredentialGateScopeSchema = z
|
|
43
22
|
.enum(["use", "conversation"])
|
|
44
23
|
.describe(
|
|
@@ -46,29 +25,21 @@ export const CredentialGateScopeSchema = z
|
|
|
46
25
|
);
|
|
47
26
|
export type CredentialGateScope = z.infer<typeof CredentialGateScopeSchema>;
|
|
48
27
|
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
// they are withheld differently — a secret is refused at the exit it would resolve at, a capability is simply
|
|
52
|
-
// never mounted for the turn — and the subject namespaces are disjoint anyway (env keys are SCREAMING_SNAKE).
|
|
28
|
+
// Withheld differently: a secret is refused at the exit it would resolve at, a capability is simply never mounted for
|
|
29
|
+
// the turn.
|
|
53
30
|
export const CredentialGateKindSchema = z
|
|
54
31
|
.enum(["secret", "capability"])
|
|
55
32
|
.describe("Whether this gate covers one stored secret, by the name a reference carries, or one whole connected capability, by its id.");
|
|
56
33
|
export type CredentialGateKind = z.infer<typeof CredentialGateKindSchema>;
|
|
57
34
|
|
|
58
|
-
/* WHICH EXIT A RELEASE WAS ASKED FOR, so the card can say what is about to happen in the reader's terms
|
|
59
|
-
* rather than in the daemon's. The three secret exits are the ones the use ledger already names (a shell
|
|
60
|
-
* command, a JS run's script, a browser keystroke); `session` is a whole capability being mounted for the
|
|
61
|
-
* turn (a signed-in browser profile, a connector's env, an MCP server), and `otp` is one derived one-time
|
|
62
|
-
* code off a stored TOTP seed. */
|
|
63
35
|
export const CredentialLaneSchema = z
|
|
64
36
|
.enum(["shell", "code", "browser", "session", "otp"])
|
|
65
37
|
.describe("What the credential was about to be used for: a shell command, a script, typing into a page, mounting a connected account, or one one-time code.");
|
|
66
38
|
export type CredentialLane = z.infer<typeof CredentialLaneSchema>;
|
|
67
39
|
|
|
68
40
|
export const CredentialGateSchema = z.object({
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
// its neighbours would be a gate with a hole in it, so the whole capability is the unit.
|
|
41
|
+
// Never a vault field (`reddit/password`): gating part of a capability and not the rest would be a gate with a hole
|
|
42
|
+
// in it.
|
|
72
43
|
subject: z.string().min(1).describe("What is gated: a secret's name, or a connected capability's id."),
|
|
73
44
|
kind: CredentialGateKindSchema,
|
|
74
45
|
approvers: z
|
|
@@ -92,17 +63,12 @@ export const CredentialGateSubjectParamSchema = z.object({
|
|
|
92
63
|
subject: z.string().min(1).describe("Which gate, by the secret name or capability id it covers."),
|
|
93
64
|
});
|
|
94
65
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* discover the gate by tripping over it the way a secret reference does — it would conclude the account is
|
|
98
|
-
* disconnected and go looking for another road. This route is the road: it raises the same card the exits
|
|
99
|
-
* raise, and a release is worded as a grant for the REST OF THE CONVERSATION, because a session-shaped
|
|
100
|
-
* credential cannot be handed out for one use. */
|
|
66
|
+
// A gated capability is absent from a turn, not refused inside it, so the model can't discover the gate by tripping
|
|
67
|
+
// over it. A release here covers the rest of the conversation, since a session credential can't be single-use.
|
|
101
68
|
export const CredentialRequestSchema = z.object({
|
|
102
69
|
subject: z.string().min(1).describe("What to ask for: the secret's name, or the connected capability's id."),
|
|
103
70
|
why: z.string().max(280).optional().describe("One line on what it is for. The only words on the card that are the agent's."),
|
|
104
|
-
//
|
|
105
|
-
// the model cannot aim a card at somebody else's conversation.
|
|
71
|
+
// Filled by the CLI itself, so the model cannot aim a card at somebody else's conversation.
|
|
106
72
|
conversationId: z.string().optional().describe("Which conversation to raise the card in. The CLI fills this from the running turn."),
|
|
107
73
|
});
|
|
108
74
|
|
|
@@ -112,27 +78,25 @@ export const CredentialGrantSchema = z.object({
|
|
|
112
78
|
message: z.string().describe("What the grant means in practice, and what to do next."),
|
|
113
79
|
});
|
|
114
80
|
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// this shape, `revealable` says whether `reveal` can return one (everything but provider accounts).
|
|
81
|
+
// Across every store: env/generated secrets, capability credentials, AI-provider accounts. Values never ride this
|
|
82
|
+
// shape; `revealable` says whether `reveal` can return one (everything but provider accounts).
|
|
118
83
|
export const SecretInventoryEntrySchema = z.object({
|
|
119
|
-
// Env-var key for env|generated; `<provider>:<accountId>` for provider
|
|
120
|
-
// otherwise. Unique within the inventory, several accounts of one provider each get their own entry.
|
|
84
|
+
// Env-var key for env|generated; `<provider>:<accountId>` for provider; capability instance id otherwise.
|
|
121
85
|
key: z.string().describe("What identifies it. Unique across the whole inventory, so several accounts of one provider each get their own entry."),
|
|
122
86
|
kind: z
|
|
123
87
|
.enum(["env", "generated", "capability", "provider"])
|
|
124
88
|
.describe("Where it came from: you set it, the sandbox generated it, a connection needs it, or it is a model account's credential."),
|
|
125
|
-
//
|
|
89
|
+
// e.g. "<ProviderName> · <accountLabel>" for provider entries; absent on env/generated.
|
|
126
90
|
label: z.string().optional().describe("A friendlier name, for entries that have one."),
|
|
127
91
|
status: z.enum(["missing", "set", "connected"]).describe("Whether it exists and, for a connection, whether it is working."),
|
|
128
|
-
//
|
|
92
|
+
// Resources referencing it via `{$secret}` refs.
|
|
129
93
|
requiredBy: z
|
|
130
94
|
.array(z.object({ resourceId: z.string().describe("Which resource."), type: z.string().describe("What kind of resource it is.") }))
|
|
131
95
|
.describe("What is waiting on it. Empty for a connection's or an account's own credential."),
|
|
132
|
-
//
|
|
96
|
+
// e.g. "desired-state/.env".
|
|
133
97
|
storedAt: z.string().describe("Where it actually lives, in words."),
|
|
134
98
|
revealable: z.boolean().describe("Whether its value can be shown at all. Everything except a model account's credential can be."),
|
|
135
|
-
// Forgejo Actions
|
|
99
|
+
// Forgejo Actions only, and only after adopt, on env|generated entries.
|
|
136
100
|
ci: z
|
|
137
101
|
.object({
|
|
138
102
|
synced: z.boolean().describe("Whether the pipeline has it."),
|
|
@@ -140,10 +104,7 @@ export const SecretInventoryEntrySchema = z.object({
|
|
|
140
104
|
})
|
|
141
105
|
.optional()
|
|
142
106
|
.describe("Whether a copy has been given to the build pipeline."),
|
|
143
|
-
|
|
144
|
-
* (a shell command, a JS run's script, a browser field), and where it went (the head of the command or
|
|
145
|
-
* script, or the page's host). Names and destinations only, never values. Absent while a secret has never
|
|
146
|
-
* been used, which most never are. */
|
|
107
|
+
// Records only the lane and a destination (command/script head, or page host) — never values.
|
|
147
108
|
lastUse: z
|
|
148
109
|
.object({
|
|
149
110
|
at: z.number().describe("When, in milliseconds."),
|
|
@@ -152,16 +113,11 @@ export const SecretInventoryEntrySchema = z.object({
|
|
|
152
113
|
.string()
|
|
153
114
|
.optional()
|
|
154
115
|
.describe("Where it went: the start of the command or script, or the site. Names and destinations only, never values."),
|
|
155
|
-
// Who released it, when a gate made that use somebody's decision. Absent on an ungated use, which
|
|
156
|
-
// is nearly all of them: the ledger row records a person only where a person was actually asked.
|
|
157
116
|
approvedBy: z.string().optional().describe("Who released it for that use, when it is gated. Absent when nothing had to be approved."),
|
|
158
117
|
})
|
|
159
118
|
.optional()
|
|
160
119
|
.describe("The last time an agent actually spent this secret. Absent while it never has been, which most never are."),
|
|
161
|
-
|
|
162
|
-
* from Bob" without a second call. Absent on the overwhelming majority of entries: gating is for the few
|
|
163
|
-
* credentials where one wrong use is the incident, and a sandbox where everything asks is a sandbox where
|
|
164
|
-
* nobody reads the cards. */
|
|
120
|
+
// Joined from the gate policy, so the row can name the approver without a second call.
|
|
165
121
|
gate: z
|
|
166
122
|
.object({
|
|
167
123
|
approvers: z.array(z.string()).describe("Who may release it, by email. Nobody else can, whatever their role."),
|