@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
|
@@ -17,18 +17,10 @@ import {
|
|
|
17
17
|
sendableThinking,
|
|
18
18
|
} from "./agent-catalog.js";
|
|
19
19
|
import type { AgentCapabilities } from "./agent-runtimes.js";
|
|
20
|
-
import type { AgentHarness, AgentProvider, PermissionMode } from "
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* Four runtimes serve turns behind one seam, and for a long time the only record of what each could do was a
|
|
25
|
-
* comment inside its own adapter. The surfaces above them could not read those, so they offered the same
|
|
26
|
-
* controls to all four: a permission mode to a runtime with no approval channel, an effort scale to one that
|
|
27
|
-
* drops the field. The record is what fixed that, and this is what keeps it honest.
|
|
28
|
-
*
|
|
29
|
-
* By SHAPE, not by a list: PROVIDERS × HARNESSES comes from the catalog itself, so a provider added tomorrow is
|
|
30
|
-
* covered the day it is added. If a pair fails here, the answer is a row in capabilitiesOf: never a special
|
|
31
|
-
* case in the surface that asked. */
|
|
20
|
+
import type { AgentHarness, AgentProvider, PermissionMode } from "../schemas/agent.js";
|
|
21
|
+
|
|
22
|
+
// Every provider × harness pair, generated from the catalog itself, must declare what it can do. A failing pair means a
|
|
23
|
+
// missing row in capabilitiesOf, never a special case in the caller.
|
|
32
24
|
|
|
33
25
|
const pairs: { provider: AgentProvider; harness: AgentHarness }[] = PROVIDERS.flatMap((provider) =>
|
|
34
26
|
HARNESSES.map((harness) => ({ provider: provider.value as AgentProvider, harness: harness.value })),
|
|
@@ -38,12 +30,9 @@ describe("every provider/harness pair declares what it can do", () => {
|
|
|
38
30
|
it.each(pairs)("$provider on the $harness harness", ({ provider, harness }) => {
|
|
39
31
|
const capabilities = capabilitiesOf(provider, harness);
|
|
40
32
|
|
|
41
|
-
// Nothing may be left to inference: a `permissions` a surface can't read, or a runtime nobody serves,
|
|
42
|
-
// is the drift this record exists to end.
|
|
43
33
|
expect(["claude-code", "codex", "cursor", "opencode", "opencode-gemini", "acp", "pi"]).toContain(capabilities.runtime);
|
|
44
34
|
expect(["modes", "plan"]).toContain(capabilities.permissions);
|
|
45
35
|
expect(["full", "tools", "browser", "http", "none"]).toContain(capabilities.mcp);
|
|
46
|
-
// Every runtime executes SOMETHING: a record listing no backend would hide the shell every loop has.
|
|
47
36
|
expect(capabilities.execution).toContain("shell");
|
|
48
37
|
for (const backend of capabilities.execution) {
|
|
49
38
|
expect(["shell", "js"]).toContain(backend);
|
|
@@ -52,31 +41,25 @@ describe("every provider/harness pair declares what it can do", () => {
|
|
|
52
41
|
expect(["replace", "append", "none"]).toContain(capabilities.instructions);
|
|
53
42
|
expect(["hooks", "approval", "refuse-only", "none"]).toContain(capabilities.rulebook);
|
|
54
43
|
expect(["masked", "none"]).toContain(capabilities.secrets);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* direction that IS legal is hooks without masking, which is why this is an implication and not
|
|
58
|
-
* equality. */
|
|
44
|
+
// Masking is a PostToolUse hook and nothing else can edit what a model reads; hooks without masking is the one
|
|
45
|
+
// legal direction, so this is an implication, not an equality.
|
|
59
46
|
if (capabilities.secrets === "masked") {
|
|
60
47
|
expect(capabilities.rulebook).toBe("hooks");
|
|
61
48
|
}
|
|
62
|
-
// The
|
|
63
|
-
//
|
|
49
|
+
// The modes offered must include the mode a clamp falls back to, or the composer could show a posture the
|
|
50
|
+
// runtime can't hold.
|
|
64
51
|
expect(modesFor(capabilities)).toContain(clampMode("default", capabilities));
|
|
65
52
|
});
|
|
66
53
|
});
|
|
67
54
|
|
|
68
|
-
// An ACP provider is an installed capability's id: any string that isn't a native provider. It gets the ACP
|
|
69
|
-
// floor whatever harness the client happened to send, because the agent IS its own loop.
|
|
70
55
|
test("an unknown provider id is an ACP agent, on either harness", () => {
|
|
71
56
|
for (const harness of HARNESSES) {
|
|
72
57
|
expect(capabilitiesOf("some-installed-agent", harness.value).runtime).toBe("acp");
|
|
73
58
|
}
|
|
74
59
|
});
|
|
75
60
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* steering, the thinking-level scale, a published command list. Falling to the ACP record instead would strip
|
|
79
|
-
* exactly the abilities that justify a fifth runtime. */
|
|
61
|
+
// The `pi` id is reserved for the Pi coding agent's own RPC runtime: real mid-turn steering, an effort scale and a
|
|
62
|
+
// published command list, none of which the plain ACP floor carries.
|
|
80
63
|
describe("the pi provider", () => {
|
|
81
64
|
it("runs the pi runtime on either harness: pi is its own loop", () => {
|
|
82
65
|
for (const harness of HARNESSES) {
|
|
@@ -103,28 +86,17 @@ describe("the pi provider", () => {
|
|
|
103
86
|
});
|
|
104
87
|
});
|
|
105
88
|
|
|
106
|
-
/* The harness axis is real for exactly two providers, and the three exceptions are each a different shape of
|
|
107
|
-
* "there is nothing to choose". Claude is always its own Claude Code loop. Kimi has no native runtime at all
|
|
108
|
-
* (Moonshot speaks the Anthropic protocol directly), so it runs Claude Code whatever the client sent. Gemini is
|
|
109
|
-
* Kimi's mirror: it has no CLAUDE CODE road, because that loop announces itself in every request and Google's
|
|
110
|
-
* Antigravity channel refuses on the announcement: every account, every time, reported as a spent quota it
|
|
111
|
-
* never was. */
|
|
112
89
|
test("only codex and grok change runtime with the harness", () => {
|
|
113
90
|
const switched = PROVIDERS.filter((provider) => capabilitiesOf(provider.value, "native") !== capabilitiesOf(provider.value, "claude-code"));
|
|
114
91
|
|
|
115
92
|
expect(switched.map((provider) => provider.value)).toEqual(["codex", "grok"]);
|
|
116
93
|
});
|
|
117
94
|
|
|
118
|
-
/* THE RULE THAT KEEPS CLAUDE CODE TRAFFIC AWAY FROM GOOGLE, asserted where it is decided rather than at each of
|
|
119
|
-
* the surfaces that obey it. Everything downstream: the adapter that serves a turn, the transcript store, the
|
|
120
|
-
* quick helper's choice of loop: reads the runtime off this record, so a Gemini turn asking for Claude Code and
|
|
121
|
-
* getting it back would put the refused loop on the road again everywhere at once. */
|
|
122
95
|
test("gemini answers with its own runtime whatever harness is asked for", () => {
|
|
123
96
|
const native = capabilitiesOf("gemini", "native");
|
|
124
97
|
|
|
125
98
|
expect(native.runtime).toBe("opencode-gemini");
|
|
126
99
|
expect(capabilitiesOf("gemini", "claude-code")).toEqual(native);
|
|
127
|
-
// Same abilities as the Grok loop it shares: only the runtime id, which keys adapter health, differs.
|
|
128
100
|
expect({ ...native, runtime: "opencode" }).toEqual(capabilitiesOf("grok", "native"));
|
|
129
101
|
});
|
|
130
102
|
|
|
@@ -134,8 +106,6 @@ test("codex and grok under the Claude Code harness get the full ceiling, it is t
|
|
|
134
106
|
}
|
|
135
107
|
});
|
|
136
108
|
|
|
137
|
-
// The composer's four modes describe behaviours the Claude Code loop actually has. A runtime whose every tool
|
|
138
|
-
// call is pre-approved has two postures, so it is offered two names, not four names for two behaviours.
|
|
139
109
|
test("a plan-only runtime offers the two postures it has", () => {
|
|
140
110
|
expect(modesFor(capabilitiesOf("codex", "native"))).toEqual(["plan", "bypassPermissions"]);
|
|
141
111
|
expect(modesFor(capabilitiesOf("claude", "native"))).toEqual(["default", "acceptEdits", "plan", "bypassPermissions"]);
|
|
@@ -149,8 +119,6 @@ test("a mode the runtime can't hold falls back to the one it runs; one it can ho
|
|
|
149
119
|
expect(clampMode("acceptEdits", capabilitiesOf("claude", "native"))).toBe("acceptEdits");
|
|
150
120
|
});
|
|
151
121
|
|
|
152
|
-
/* The user-facing half. The full ceiling says nothing: an empty list is what hides the picker's block, and
|
|
153
|
-
* every axis the record carries has a sentence here, because a capability nobody can read is how this started. */
|
|
154
122
|
test("the ceiling has nothing to disclose; a floor names what it lacks", () => {
|
|
155
123
|
expect(limitationsOf(capabilitiesOf("claude", "native"))).toEqual([]);
|
|
156
124
|
|
|
@@ -193,17 +161,11 @@ test("every axis a record can lack has words for it", () => {
|
|
|
193
161
|
secrets: "none",
|
|
194
162
|
};
|
|
195
163
|
|
|
196
|
-
// Thirteen
|
|
197
|
-
// never be disclosed. fastMode is the deliberate exception: a record alone can't tell the truth about it (a
|
|
198
|
-
// translator-routed turn reads true here and still can't go fast), so it is answered by fastAllowed
|
|
199
|
-
// instead. Anything else added to the interface has to move this number.
|
|
164
|
+
// Thirteen disclosable axes, thirteen sentences; `fastMode` is the exception, disclosed via fastAllowed.
|
|
200
165
|
expect(limitationsOf(nothing)).toHaveLength(13);
|
|
201
166
|
expect(limitationsOf(nothing).join(" ")).not.toContain("fast");
|
|
202
167
|
});
|
|
203
168
|
|
|
204
|
-
/* The two safety axes, checked the same way the instruction axis is below and for the same reason: `rulebook`
|
|
205
|
-
* has a middle value, and disclosing the floor's words for it would tell a Codex user their rules are ignored
|
|
206
|
-
* when they are in fact being applied to everything Codex asks about. */
|
|
207
169
|
test("the safety axes disclose the middle answer differently from the floor", () => {
|
|
208
170
|
const claudeCaps = capabilitiesOf("claude", "native");
|
|
209
171
|
const codexCaps = capabilitiesOf("codex", "native");
|
|
@@ -229,9 +191,6 @@ test("the safety axes disclose the middle answer differently from the floor", ()
|
|
|
229
191
|
}
|
|
230
192
|
});
|
|
231
193
|
|
|
232
|
-
/* The instruction axis has THREE values and only two of them are worth a sentence, which is the one shape the
|
|
233
|
-
* count above cannot check: a middle value that discloses the same words as the floor would tell a Grok user
|
|
234
|
-
* their prompt is ignored when it is in fact being sent. */
|
|
235
194
|
test("the instruction axis discloses its two weaker answers, differently", () => {
|
|
236
195
|
const grokCaps = capabilitiesOf("grok", "native");
|
|
237
196
|
const acpCaps = capabilitiesOf("some-installed-agent", "native");
|
|
@@ -245,9 +204,6 @@ test("the instruction axis discloses its two weaker answers, differently", () =>
|
|
|
245
204
|
expect(limitationsOf(acpCaps).length).toBeGreaterThan(limitationsOf(codexCaps).length);
|
|
246
205
|
});
|
|
247
206
|
|
|
248
|
-
/* The JS backend is hosted by the one loop the daemon can put its own execution seam through. Pinned as a test
|
|
249
|
-
* rather than left to the records because turn planning gates the backend on this axis: a runtime gaining it
|
|
250
|
-
* here without a seam behind it would advertise code runs that can never execute. */
|
|
251
207
|
test("only the Claude Code loop hosts the js execution backend", () => {
|
|
252
208
|
for (const { provider, harness } of pairs) {
|
|
253
209
|
const capabilities = capabilitiesOf(provider, harness);
|
|
@@ -255,36 +211,26 @@ test("only the Claude Code loop hosts the js execution backend", () => {
|
|
|
255
211
|
}
|
|
256
212
|
});
|
|
257
213
|
|
|
258
|
-
// The mode vocabulary is the contract's own PermissionMode, so a mode added to the wire can't be quietly absent
|
|
259
|
-
// from the runtime that owns them all.
|
|
260
214
|
test("the Claude Code loop offers every PermissionMode the wire has", () => {
|
|
261
215
|
const wire: PermissionMode[] = ["default", "acceptEdits", "plan", "bypassPermissions"];
|
|
262
216
|
|
|
263
217
|
expect([...modesFor(capabilitiesOf("claude", "native"))].toSorted()).toEqual(wire.toSorted());
|
|
264
218
|
});
|
|
265
219
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
* turn without ever passing through it. What the rule is NOT is a claim about who HAS the tier, and reading it
|
|
269
|
-
* as one took Max off every surface that pins no thinking of its own. */
|
|
220
|
+
// `effortAllowed` is not a claim about who has the max tier: the picker isn't the only assembler of a turn, so the rule
|
|
221
|
+
// is checked wherever one is built, not just there.
|
|
270
222
|
describe("the max-effort rule", () => {
|
|
271
223
|
it("takes the top rung from one pair only: Claude with extended thinking switched off", () => {
|
|
272
224
|
expect(effortAllowed("max", "claude", true)).toBe(true);
|
|
273
225
|
expect(effortAllowed("max", "claude", false)).toBe(false);
|
|
274
|
-
// Nothing pinned, which is what every run button sends. Absent is not off: the turn carries no thinking
|
|
275
|
-
// field, the model's own default answers, and sendableThinking names it on the way out.
|
|
276
226
|
expect(effortAllowed("max", "claude", undefined)).toBe(true);
|
|
277
|
-
// Another vendor's scale is that vendor's business. Kimi K3 publishes 'max' on its own catalog rows, so
|
|
278
|
-
// filtering it here would offer a shorter ladder than the provider already told us about.
|
|
279
227
|
expect(effortAllowed("max", "kimi", false)).toBe(true);
|
|
280
|
-
// Every other tier is a property of the model's own scale, and nothing here constrains it.
|
|
281
228
|
expect(effortAllowed("high", "kimi", false)).toBe(true);
|
|
282
229
|
});
|
|
283
230
|
|
|
284
231
|
it("is repaired, not refused, on the way to the API: the tier drops, the user's thinking choice does not", () => {
|
|
285
232
|
expect(sendableEffort("max", false)).toBe("high");
|
|
286
233
|
expect(sendableEffort("max", true)).toBe("max");
|
|
287
|
-
// A turn that said nothing about thinking is not the refused pair, so the tier the user picked survives.
|
|
288
234
|
expect(sendableEffort("max", undefined)).toBe("max");
|
|
289
235
|
expect(sendableEffort("high", false)).toBe("high");
|
|
290
236
|
expect(sendableEffort(undefined, false)).toBeUndefined();
|
|
@@ -294,18 +240,13 @@ describe("the max-effort rule", () => {
|
|
|
294
240
|
expect(sendableThinking("max", undefined)).toBe(true);
|
|
295
241
|
expect(sendableThinking("max", false)).toBe(false);
|
|
296
242
|
expect(sendableThinking("max", true)).toBe(true);
|
|
297
|
-
// Every other tier is sendable either way, so there is nothing to name.
|
|
298
243
|
expect(sendableThinking("xhigh", undefined)).toBeUndefined();
|
|
299
244
|
expect(sendableThinking(undefined, undefined)).toBeUndefined();
|
|
300
245
|
});
|
|
301
246
|
});
|
|
302
247
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
* NATIVE_PROVIDERS, so the id is the only thing that tells them apart, and they want opposite records: an ACP
|
|
306
|
-
* agent brings its own loop and gets the documented floor, while an endpoint is driven BY the Claude Code loop
|
|
307
|
-
* and gets its full ceiling. Getting this backwards would strip steering, per-tool approvals, MCP and the mount
|
|
308
|
-
* namespace from every turn on a user's own model. */
|
|
248
|
+
// An `endpoint/<id>` provider is a user's own model API, told apart from an ACP agent only by its id: it runs the
|
|
249
|
+
// Claude Code loop at full ceiling, never the ACP floor.
|
|
309
250
|
describe("a configured model endpoint", () => {
|
|
310
251
|
it("runs the Claude Code loop at full ceiling, on either harness", () => {
|
|
311
252
|
for (const harness of HARNESSES.map((entry) => entry.value)) {
|
|
@@ -323,36 +264,27 @@ describe("a configured model endpoint", () => {
|
|
|
323
264
|
expect(endpointProvider("gpu-box")).toBe("endpoint/gpu-box");
|
|
324
265
|
expect(endpointIdOf(endpointProvider("gpu-box"))).toBe("gpu-box");
|
|
325
266
|
expect(isEndpointProvider("endpoint/gpu-box")).toBe(true);
|
|
326
|
-
// A bare id that merely starts with the word is not one: the separator is what makes the namespace.
|
|
327
267
|
expect(isEndpointProvider("endpoints-r-us")).toBe(false);
|
|
328
268
|
expect(endpointIdOf("claude")).toBeUndefined();
|
|
329
|
-
// Its credential was configured with the endpoint, so there is nothing left for a connect gate to offer.
|
|
330
269
|
expect(accessFor("endpoint/gpu-box")).toBeUndefined();
|
|
331
270
|
});
|
|
332
271
|
});
|
|
333
272
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
* fast, because the harness refuses a non-Anthropic endpoint; a Claude model that publishes no `fast` badge
|
|
337
|
-
* cannot either. Both would be silent failures if the composer offered the control anyway: the turn runs, the
|
|
338
|
-
* answer arrives, and only the bill says it was standard speed. */
|
|
273
|
+
// Fast speed needs all three conditions at once; a translator-routed provider or a Claude model with no `fast` badge
|
|
274
|
+
// fails silently otherwise: the turn runs at standard speed and only the bill shows it.
|
|
339
275
|
describe("offering fast speed", () => {
|
|
340
276
|
it("is offered for a Claude model that publishes the badge", () => {
|
|
341
277
|
expect(fastAllowed(capabilitiesOf("claude", "native"), "claude", ["reasoning", "fast"])).toBe(true);
|
|
342
278
|
});
|
|
343
279
|
|
|
344
280
|
it("is refused for a routed provider on the Claude Code loop, whose endpoint is not first-party", () => {
|
|
345
|
-
// Grok under the claude-code harness reads the FULL Claude Code record: the capability alone would say
|
|
346
|
-
// yes. It is served through the sandbox's translator, so the harness would report `not_first_party`.
|
|
347
281
|
expect(capabilitiesOf("grok", "claude-code").fastMode).toBe(true);
|
|
348
282
|
expect(fastAllowed(capabilitiesOf("grok", "claude-code"), "grok", ["fast"])).toBe(false);
|
|
349
|
-
// A user's own model endpoint is the same story for the same reason.
|
|
350
283
|
expect(fastAllowed(capabilitiesOf("endpoint/gpu-box", "native"), "endpoint/gpu-box", ["fast"])).toBe(false);
|
|
351
284
|
});
|
|
352
285
|
|
|
353
286
|
it("is refused for a Claude model whose catalog row doesn't publish it", () => {
|
|
354
287
|
expect(fastAllowed(capabilitiesOf("claude", "native"), "claude", ["reasoning"])).toBe(false);
|
|
355
|
-
// The seed floor and any provider that reports ids only: no capabilities published, nothing claimed.
|
|
356
288
|
expect(fastAllowed(capabilitiesOf("claude", "native"), "claude", undefined)).toBe(false);
|
|
357
289
|
});
|
|
358
290
|
|
|
@@ -364,10 +296,8 @@ describe("offering fast speed", () => {
|
|
|
364
296
|
});
|
|
365
297
|
});
|
|
366
298
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
* losing its last `free` row (the connect gate then has no headline and quietly falls back to pitching a paid
|
|
370
|
-
* subscription to a user who has none), and a `free` row acquiring a requirement that costs money. */
|
|
299
|
+
// The free-provider list is derived from the access table, not hand-typed, so a lost `free` row or one gaining a cost
|
|
300
|
+
// silently breaks the connect gate's headline.
|
|
371
301
|
describe("the free providers", () => {
|
|
372
302
|
it("is exactly the access table's free rows, and is never empty", () => {
|
|
373
303
|
expect(FREE_PROVIDERS.length).toBeGreaterThan(0);
|
|
@@ -378,12 +308,8 @@ describe("the free providers", () => {
|
|
|
378
308
|
});
|
|
379
309
|
|
|
380
310
|
it("carries the words the connect gate puts on screen", () => {
|
|
381
|
-
// The gate names the provider and states what connecting it runs; a row with either missing would put an
|
|
382
|
-
// empty headline or a dangling sentence in front of the user who has connected nothing.
|
|
383
311
|
for (const provider of FREE_PROVIDERS) {
|
|
384
312
|
const access = accessFor(provider);
|
|
385
|
-
// Both are sentences the gate PUTS ON SCREEN, so what they have to be is text with something in
|
|
386
|
-
// it. Truthiness passes a whitespace-only string, which renders as the empty headline this is about.
|
|
387
313
|
expect(access?.requirement).toEqual(expect.stringMatching(/\S/));
|
|
388
314
|
expect(access?.runs).toEqual(expect.stringMatching(/\S/));
|
|
389
315
|
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { ACP, type AgentCapabilities, CLAUDE_CODE, PI } from "./agent-runtimes.js";
|
|
2
|
+
import { type NativeProvider, PROVIDER_SPECS, type ProviderAccess, providerSpec } from "./provider-specs.js";
|
|
3
|
+
import type { AgentHarness, AgentProvider, PermissionMode } from "../schemas/agent.js";
|
|
4
|
+
import type { Model, ModelBadge } from "../schemas/provider-oauth.js";
|
|
5
|
+
|
|
6
|
+
// The provider/harness/model catalog every picker shares, pure data keyed by the wire vocabulary in schemas/agent.ts.
|
|
7
|
+
// Every table below is derived from PROVIDER_SPECS; what remains here is the shape each surface wants, plus rules about
|
|
8
|
+
// something other than a provider (trial, endpoint namespace, effort/fast-mode gates).
|
|
9
|
+
|
|
10
|
+
export interface CatalogOption {
|
|
11
|
+
readonly label: string;
|
|
12
|
+
readonly value: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Native runtimes only; ACP providers are appended by the consumer. Order is the spec table's own.
|
|
16
|
+
export const PROVIDERS: readonly { label: string; value: NativeProvider }[] = PROVIDER_SPECS.map((spec) => ({
|
|
17
|
+
label: spec.label,
|
|
18
|
+
value: spec.id,
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
// What a provider costs to unlock and what the user connects for it; the axis the picker groups rows on.
|
|
22
|
+
export const PROVIDER_ACCESS: Record<NativeProvider, ProviderAccess> = Object.fromEntries(
|
|
23
|
+
PROVIDER_SPECS.map((spec) => [spec.id, spec.access] as const),
|
|
24
|
+
) as Record<NativeProvider, ProviderAccess>;
|
|
25
|
+
|
|
26
|
+
// Providers that cost nothing; derived, so a channel losing free status stops being promoted automatically.
|
|
27
|
+
export const FREE_PROVIDERS: readonly NativeProvider[] = PROVIDER_SPECS.filter((spec) => spec.access.kind === "free").map((spec) => spec.id);
|
|
28
|
+
export const isFreeProvider = (provider: AgentProvider): boolean => FREE_PROVIDERS.includes(provider as NativeProvider);
|
|
29
|
+
|
|
30
|
+
// Whose allowance a turn on this provider spends, as the subject of a sentence.
|
|
31
|
+
export const PROVIDER_VENDOR: Record<NativeProvider, string> = Object.fromEntries(
|
|
32
|
+
PROVIDER_SPECS.map((spec) => [spec.id, spec.vendor] as const),
|
|
33
|
+
) as Record<NativeProvider, string>;
|
|
34
|
+
|
|
35
|
+
// An `endpoint/<id>` provider is a model API the user pointed at, opposite in kind from an ACP agent. A slash, never a
|
|
36
|
+
// colon, since `provider:model` is the picker's own key shape.
|
|
37
|
+
// The trial's endpoint id, reserved like `pi`; daemon-provisioned, riding the endpoint kind so no new turn path or
|
|
38
|
+
// adapter was needed. Every surface must disclose it: a trial passes through intentic's own servers.
|
|
39
|
+
export const TRIAL_ENDPOINT_ID = "free-trial";
|
|
40
|
+
export const TRIAL_PROVIDER = "endpoint/free-trial";
|
|
41
|
+
export const isTrialProvider = (provider: AgentProvider): boolean => provider === TRIAL_PROVIDER;
|
|
42
|
+
|
|
43
|
+
// A synthetic id, never changing; which real model answers is decided per message by the platform alone.
|
|
44
|
+
export const TRIAL_MODEL_ID = "auto";
|
|
45
|
+
// One wording for both the picker's label and the composer's notice, so they can't describe different bargains.
|
|
46
|
+
export const TRIAL_LABEL = "Free trial";
|
|
47
|
+
export const TRIAL_NOTICE = "Trial messages pass through intentic. Connect an account to chat directly.";
|
|
48
|
+
|
|
49
|
+
export const ENDPOINT_PROVIDER_PREFIX = "endpoint/";
|
|
50
|
+
export const endpointProvider = (id: string): AgentProvider => `${ENDPOINT_PROVIDER_PREFIX}${id}`;
|
|
51
|
+
export const isEndpointProvider = (provider: AgentProvider): boolean => provider.startsWith(ENDPOINT_PROVIDER_PREFIX);
|
|
52
|
+
// The capability id behind an endpoint provider; undefined when the provider is not one.
|
|
53
|
+
export const endpointIdOf = (provider: AgentProvider): string | undefined =>
|
|
54
|
+
isEndpointProvider(provider) ? provider.slice(ENDPOINT_PROVIDER_PREFIX.length) : undefined;
|
|
55
|
+
|
|
56
|
+
// An ACP provider or an endpoint has no access requirement: both are already runnable once installed/configured. What a
|
|
57
|
+
// turn on it costs is deliberately not claimed, since the daemon has no way to know.
|
|
58
|
+
export const accessFor = (provider: AgentProvider): ProviderAccess | undefined => providerSpec(provider)?.access;
|
|
59
|
+
|
|
60
|
+
// An ACP provider's label is its capability's display name, which the web layers on top, the raw id is the static
|
|
61
|
+
// fallback.
|
|
62
|
+
export const providerLabel = (provider: AgentProvider): string => providerSpec(provider)?.label ?? provider;
|
|
63
|
+
|
|
64
|
+
// Whether a plan-limit reading is obtainable at all for this provider.
|
|
65
|
+
export const PLAN_LIMIT_PROVIDERS: readonly NativeProvider[] = PROVIDER_SPECS.filter((spec) => spec.planLimits).map((spec) => spec.id);
|
|
66
|
+
export const reportsPlanLimits = (provider: AgentProvider): boolean => PLAN_LIMIT_PROVIDERS.includes(provider as NativeProvider);
|
|
67
|
+
|
|
68
|
+
// `native` is the provider's own runtime; `claude-code` runs it through that loop instead, for any provider.
|
|
69
|
+
export const HARNESSES: readonly { label: string; value: AgentHarness }[] = [
|
|
70
|
+
{ label: "Native", value: "native" },
|
|
71
|
+
{ label: "Claude Code", value: "claude-code" },
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
// Whether the harness axis is a real choice for this provider, or a switch whose two positions run the same loop.
|
|
75
|
+
// Derived, so a provider that gains a native runtime tomorrow gains the switch with it.
|
|
76
|
+
export const harnessChoosable = (provider: AgentProvider): boolean => {
|
|
77
|
+
const spec = providerSpec(provider);
|
|
78
|
+
return spec !== undefined && spec.runtimes.native.runtime !== spec.runtimes.claudeCode.runtime;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Maps (provider, harness) to a record: a native spec row, an `endpoint/<id>` at the Claude Code loop's ceiling, `pi`
|
|
82
|
+
// at its own RPC runtime, anything else over ACP. Naming one record on both harnesses is a fact, not a preference.
|
|
83
|
+
export const capabilitiesOf = (provider: AgentProvider, harness: AgentHarness): AgentCapabilities => {
|
|
84
|
+
const spec = providerSpec(provider);
|
|
85
|
+
if (spec !== undefined) {
|
|
86
|
+
return harness === "claude-code" ? spec.runtimes.claudeCode : spec.runtimes.native;
|
|
87
|
+
}
|
|
88
|
+
if (isEndpointProvider(provider)) {
|
|
89
|
+
return CLAUDE_CODE;
|
|
90
|
+
}
|
|
91
|
+
if (provider === PI_PROVIDER) {
|
|
92
|
+
return PI;
|
|
93
|
+
}
|
|
94
|
+
return ACP;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Reserved like a native id: an `agent`-kind capability installed under it is served over Pi's RPC, not ACP.
|
|
98
|
+
export const PI_PROVIDER = "pi";
|
|
99
|
+
|
|
100
|
+
// Which permission modes a runtime can actually be put in. Under "plan" every other mode collapses onto the autonomous
|
|
101
|
+
// posture the runtime already runs, so offering them would be four names for two behaviours.
|
|
102
|
+
export const modesFor = (capabilities: AgentCapabilities): readonly PermissionMode[] =>
|
|
103
|
+
capabilities.permissions === "modes" ? ["default", "acceptEdits", "plan", "bypassPermissions"] : ["plan", "bypassPermissions"];
|
|
104
|
+
|
|
105
|
+
// The mode a selection falls back to when the runtime can't hold it, the same shape as clampEffort: a provider switch
|
|
106
|
+
// must not leave the composer showing a posture nothing applies.
|
|
107
|
+
export const clampMode = (mode: PermissionMode, capabilities: AgentCapabilities): PermissionMode =>
|
|
108
|
+
modesFor(capabilities).includes(mode) ? mode : "bypassPermissions";
|
|
109
|
+
|
|
110
|
+
// What this pair cannot do, phrased for the sender; empty means the full ceiling. `fastMode` is deliberately not
|
|
111
|
+
// disclosed here, since it also depends on the route and model; fastAllowed answers that instead.
|
|
112
|
+
export const limitationsOf = (capabilities: AgentCapabilities): string[] => [
|
|
113
|
+
...(capabilities.permissions === "plan" ? ["no per-tool approvals"] : []),
|
|
114
|
+
...(capabilities.questions ? [] : ["no clarifying questions"]),
|
|
115
|
+
...(capabilities.steering ? [] : ["no mid-turn steering"]),
|
|
116
|
+
...(capabilities.mcp === "none"
|
|
117
|
+
? ["no MCP tools or plugins"]
|
|
118
|
+
: capabilities.mcp === "http"
|
|
119
|
+
? ["MCP tools only, no plugins or browser"]
|
|
120
|
+
: capabilities.mcp === "browser"
|
|
121
|
+
? ["browser tools only, no other MCP"]
|
|
122
|
+
: capabilities.mcp === "tools"
|
|
123
|
+
? ["no plugins"]
|
|
124
|
+
: []),
|
|
125
|
+
...(capabilities.execution.includes("js") ? [] : ["no code runs, shell only"]),
|
|
126
|
+
...(capabilities.effort ? [] : ["no effort control"]),
|
|
127
|
+
...(capabilities.commands ? [] : ["no slash commands"]),
|
|
128
|
+
...(capabilities.terminals ? [] : ["no terminal panel"]),
|
|
129
|
+
...(capabilities.isolation === "namespace" ? [] : ["worktree by cwd only"]),
|
|
130
|
+
...(capabilities.recovery ? [] : ["no auto-resume after outage"]),
|
|
131
|
+
...(capabilities.instructions === "append" ? ["system prompt appended, not replaced"] : []),
|
|
132
|
+
...(capabilities.instructions === "none" ? ["system prompt not applied"] : []),
|
|
133
|
+
...(capabilities.rulebook === "approval" ? ["command rules apply only to calls this agent raises"] : []),
|
|
134
|
+
...(capabilities.rulebook === "refuse-only" ? ["command rules can refuse but not hold"] : []),
|
|
135
|
+
...(capabilities.rulebook === "none" ? ["command rules not applied"] : []),
|
|
136
|
+
...(capabilities.secrets === "none" ? ["secrets reach the model unmasked"] : []),
|
|
137
|
+
];
|
|
138
|
+
|
|
139
|
+
// Claude's compile-time model floor, shared by daemon and web pre-load; versioned ids only, never a tier alias.
|
|
140
|
+
export const CLAUDE_SEED_MODELS: readonly Model[] = [
|
|
141
|
+
{ id: "claude-opus-5", label: "Claude Opus 5" },
|
|
142
|
+
{ id: "claude-sonnet-5", label: "Claude Sonnet 5" },
|
|
143
|
+
{ id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5" },
|
|
144
|
+
];
|
|
145
|
+
|
|
146
|
+
// The static floor of the model catalog, harness-independent; every provider's real list is the daemon's live catalog
|
|
147
|
+
// layered on top. Empty for every provider but Claude: nothing sensible to offer before the first live load.
|
|
148
|
+
export const modelsFor = (provider: AgentProvider): CatalogOption[] => {
|
|
149
|
+
if (provider === "claude") {
|
|
150
|
+
return CLAUDE_SEED_MODELS.map((model) => ({ label: model.label, value: model.id }));
|
|
151
|
+
}
|
|
152
|
+
// Every other provider's floor lives with the daemon's live catalog, not here: no second list to keep in sync.
|
|
153
|
+
return [];
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// Filters exactly one pair: Claude's `max` with thinking explicitly false, the one combination Anthropic's API refuses
|
|
157
|
+
// (400). Absent thinking is not off; the model's own default answers, every other tier or provider passes through.
|
|
158
|
+
export const effortAllowed = (effort: string, provider: AgentProvider, thinking: boolean | undefined): boolean =>
|
|
159
|
+
effort !== "max" || provider !== "claude" || thinking !== false;
|
|
160
|
+
|
|
161
|
+
// The same rule applied as a repair, not a filter: a route, extension, restored tab or pinned model can all bypass the
|
|
162
|
+
// picker. The tier moves, not the thinking setting, since turning thinking off was the user's own deliberate choice.
|
|
163
|
+
export const sendableEffort = (effort: string | undefined, thinking: boolean | undefined): string | undefined =>
|
|
164
|
+
effort === "max" && thinking === false ? "high" : effort;
|
|
165
|
+
|
|
166
|
+
// Covers the case sendableEffort doesn't: `max` with no thinking setting at all, the common case, where the model's own
|
|
167
|
+
// default would otherwise decide and vary by model. A thinking setting the user did set (even off) is left alone.
|
|
168
|
+
export const sendableThinking = (effort: string | undefined, thinking: boolean | undefined): boolean | undefined =>
|
|
169
|
+
effort === "max" && thinking === undefined ? true : thinking;
|
|
170
|
+
|
|
171
|
+
// Fast speed needs all three: the runtime can ask (Claude Code loop only), the route is first-party (not the translator
|
|
172
|
+
// or a non-Anthropic endpoint), and the model publishes the `fast` badge. Absent badges reads as false.
|
|
173
|
+
export const fastAllowed = (capabilities: AgentCapabilities, provider: AgentProvider, badges: readonly ModelBadge[] | undefined): boolean =>
|
|
174
|
+
capabilities.fastMode && provider === "claude" && (badges ?? []).includes("fast");
|