@intentic/sandbox-contract 1.248.0 → 1.250.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/dist/chores/chores.d.ts.map +1 -1
- package/dist/chores/chores.js.map +1 -1
- package/dist/chores/digest.d.ts.map +1 -1
- package/dist/chores/digest.js.map +1 -1
- package/dist/chores/extension-update.d.ts.map +1 -1
- package/dist/chores/extension-update.js.map +1 -1
- package/dist/chores/fix-deps.d.ts.map +1 -1
- package/dist/chores/fix-deps.js.map +1 -1
- package/dist/chores/index.d.ts +2 -2
- package/dist/chores/index.d.ts.map +1 -1
- package/dist/chores/index.js +1 -1
- package/dist/chores/index.js.map +1 -1
- package/dist/chores/probes.d.ts.map +1 -1
- package/dist/chores/probes.js.map +1 -1
- package/dist/chores/prompt.d.ts.map +1 -1
- package/dist/chores/prompt.js.map +1 -1
- package/dist/chores/stack.d.ts.map +1 -1
- package/dist/chores/stack.js.map +1 -1
- package/dist/chores/verdict.d.ts +7 -1
- package/dist/chores/verdict.d.ts.map +1 -1
- package/dist/chores/verdict.js +8 -0
- package/dist/chores/verdict.js.map +1 -1
- package/dist/contracts/accounts.contract.d.ts.map +1 -1
- package/dist/contracts/accounts.contract.js.map +1 -1
- package/dist/contracts/activity.contract.d.ts +1 -0
- package/dist/contracts/activity.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.d.ts +12 -205
- package/dist/contracts/agent.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.js +2 -1
- package/dist/contracts/agent.contract.js.map +1 -1
- package/dist/contracts/agents.contract.d.ts +228 -54
- package/dist/contracts/agents.contract.d.ts.map +1 -1
- package/dist/contracts/agents.contract.js +11 -2
- package/dist/contracts/agents.contract.js.map +1 -1
- package/dist/contracts/automations.contract.d.ts +35 -17
- package/dist/contracts/automations.contract.d.ts.map +1 -1
- package/dist/contracts/automations.contract.js +10 -1
- package/dist/contracts/automations.contract.js.map +1 -1
- package/dist/contracts/capabilities.contract.d.ts +0 -12
- package/dist/contracts/capabilities.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.js +1 -1
- package/dist/contracts/capabilities.contract.js.map +1 -1
- package/dist/contracts/chores.contract.d.ts.map +1 -1
- package/dist/contracts/chores.contract.js.map +1 -1
- package/dist/contracts/ci.contract.d.ts +9 -0
- package/dist/contracts/ci.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.js.map +1 -1
- package/dist/contracts/exit.contract.d.ts.map +1 -1
- package/dist/contracts/exit.contract.js +1 -1
- package/dist/contracts/exit.contract.js.map +1 -1
- package/dist/contracts/extensions.contract.d.ts.map +1 -1
- package/dist/contracts/extensions.contract.js.map +1 -1
- package/dist/contracts/git.contract.d.ts +45 -6
- package/dist/contracts/git.contract.d.ts.map +1 -1
- package/dist/contracts/git.contract.js +9 -9
- package/dist/contracts/git.contract.js.map +1 -1
- package/dist/contracts/host.contract.d.ts +2 -0
- package/dist/contracts/host.contract.d.ts.map +1 -1
- package/dist/contracts/host.contract.js.map +1 -1
- package/dist/contracts/intentic.contract.js +1 -1
- package/dist/contracts/intentic.contract.js.map +1 -1
- package/dist/contracts/logs.contract.d.ts.map +1 -1
- package/dist/contracts/logs.contract.js.map +1 -1
- package/dist/contracts/loops.contract.d.ts.map +1 -1
- package/dist/contracts/loops.contract.js.map +1 -1
- package/dist/contracts/personas.contract.d.ts +1 -0
- package/dist/contracts/personas.contract.d.ts.map +1 -1
- package/dist/contracts/personas.contract.js +1 -1
- package/dist/contracts/personas.contract.js.map +1 -1
- package/dist/contracts/providers.contract.d.ts.map +1 -1
- package/dist/contracts/providers.contract.js.map +1 -1
- package/dist/contracts/runner.contract.d.ts +97 -171
- package/dist/contracts/runner.contract.d.ts.map +1 -1
- package/dist/contracts/runner.contract.js +2 -2
- package/dist/contracts/runner.contract.js.map +1 -1
- package/dist/contracts/safety.contract.d.ts.map +1 -1
- package/dist/contracts/safety.contract.js +1 -1
- package/dist/contracts/safety.contract.js.map +1 -1
- package/dist/contracts/secrets.contract.d.ts.map +1 -1
- package/dist/contracts/secrets.contract.js.map +1 -1
- package/dist/contracts/sessions.contract.d.ts +2 -41
- package/dist/contracts/sessions.contract.d.ts.map +1 -1
- package/dist/contracts/sessions.contract.js +1 -1
- package/dist/contracts/sessions.contract.js.map +1 -1
- package/dist/contracts/settings.contract.d.ts +8 -18
- package/dist/contracts/settings.contract.d.ts.map +1 -1
- package/dist/contracts/settings.contract.js.map +1 -1
- package/dist/contracts/share.contract.d.ts.map +1 -1
- package/dist/contracts/share.contract.js.map +1 -1
- package/dist/contracts/skills.contract.d.ts +6 -0
- package/dist/contracts/skills.contract.d.ts.map +1 -1
- package/dist/contracts/skills.contract.js +13 -4
- package/dist/contracts/skills.contract.js.map +1 -1
- package/dist/contracts/system.contract.d.ts +49 -73
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/contracts/system.contract.js +12 -2
- package/dist/contracts/system.contract.js.map +1 -1
- package/dist/contracts/usage.contract.d.ts.map +1 -1
- package/dist/contracts/usage.contract.js.map +1 -1
- package/dist/contracts/vpn.contract.d.ts.map +1 -1
- package/dist/contracts/vpn.contract.js +1 -1
- package/dist/contracts/vpn.contract.js.map +1 -1
- package/dist/contracts/webext.contract.d.ts.map +1 -1
- package/dist/contracts/webext.contract.js.map +1 -1
- package/dist/contracts/workflows.contract.d.ts +7 -6
- package/dist/contracts/workflows.contract.d.ts.map +1 -1
- package/dist/contracts/workflows.contract.js +12 -3
- package/dist/contracts/workflows.contract.js.map +1 -1
- package/dist/contracts/workspace.contract.d.ts.map +1 -1
- package/dist/contracts/workspace.contract.js.map +1 -1
- package/dist/events/agent-events.d.ts +1237 -0
- package/dist/events/agent-events.d.ts.map +1 -0
- package/dist/events/agent-events.js +226 -0
- package/dist/events/agent-events.js.map +1 -0
- package/dist/events/cards.d.ts +404 -0
- package/dist/events/cards.d.ts.map +1 -0
- package/dist/events/cards.js +179 -0
- package/dist/events/cards.js.map +1 -0
- package/dist/events/resume.d.ts +23 -0
- package/dist/events/resume.d.ts.map +1 -0
- package/dist/events/resume.js +31 -0
- package/dist/events/resume.js.map +1 -0
- package/dist/events/system-events.d.ts +615 -0
- package/dist/events/system-events.d.ts.map +1 -0
- package/dist/events/system-events.js +64 -0
- package/dist/events/system-events.js.map +1 -0
- package/dist/events/transcript.d.ts +1755 -0
- package/dist/events/transcript.d.ts.map +1 -0
- package/dist/events/transcript.js +205 -0
- package/dist/events/transcript.js.map +1 -0
- package/dist/ids/conversation-ids.d.ts +8 -0
- package/dist/ids/conversation-ids.d.ts.map +1 -0
- package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
- package/dist/ids/conversation-ids.js.map +1 -0
- package/dist/ids/hostnames.d.ts.map +1 -0
- package/dist/ids/hostnames.js.map +1 -0
- package/dist/ids/session-names.d.ts.map +1 -0
- package/dist/ids/session-names.js.map +1 -0
- package/dist/ids/share-paths.d.ts.map +1 -0
- package/dist/ids/share-paths.js.map +1 -0
- package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
- package/dist/ids/tunnel-ids.d.ts.map +1 -0
- package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
- package/dist/ids/tunnel-ids.js.map +1 -0
- package/dist/index.d.ts +429 -450
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -46
- package/dist/index.js.map +1 -1
- package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
- package/dist/models/agent-catalog.d.ts.map +1 -0
- package/dist/models/agent-catalog.js.map +1 -0
- package/dist/models/agent-runtimes.d.ts.map +1 -0
- package/dist/models/agent-runtimes.js.map +1 -0
- package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
- package/dist/models/fast-tier.d.ts.map +1 -0
- package/dist/models/fast-tier.js.map +1 -0
- package/dist/models/model-order.d.ts.map +1 -0
- package/dist/{model-order.js → models/model-order.js} +2 -0
- package/dist/models/model-order.js.map +1 -0
- package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
- package/dist/models/model-pins.d.ts.map +1 -0
- package/dist/models/model-pins.js.map +1 -0
- package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
- package/dist/models/model-roles.d.ts.map +1 -0
- package/dist/{model-roles.js → models/model-roles.js} +0 -35
- package/dist/models/model-roles.js.map +1 -0
- package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
- package/dist/models/plan-pools.d.ts.map +1 -0
- package/dist/models/plan-pools.js.map +1 -0
- package/dist/models/prompt-complexity.d.ts.map +1 -0
- package/dist/models/prompt-complexity.js.map +1 -0
- package/dist/models/provider-specs.d.ts.map +1 -0
- package/dist/models/provider-specs.js.map +1 -0
- package/dist/policy/approvals-execution.d.ts.map +1 -0
- package/dist/policy/approvals-execution.js.map +1 -0
- package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
- package/dist/policy/batch-runs.d.ts.map +1 -0
- package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
- package/dist/policy/batch-runs.js.map +1 -0
- package/dist/policy/capability-env.d.ts.map +1 -0
- package/dist/policy/capability-env.js.map +1 -0
- package/dist/policy/capability-secrets.d.ts.map +1 -0
- package/dist/policy/capability-secrets.js.map +1 -0
- package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
- package/dist/policy/card-status.d.ts.map +1 -0
- package/dist/{card-status.js → policy/card-status.js} +1 -5
- package/dist/policy/card-status.js.map +1 -0
- package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
- package/dist/policy/command-classes.d.ts.map +1 -0
- package/dist/{command-classes.js → policy/command-classes.js} +48 -11
- package/dist/policy/command-classes.js.map +1 -0
- package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
- package/dist/policy/command-run.d.ts.map +1 -0
- package/dist/policy/command-run.js.map +1 -0
- package/dist/policy/control-scopes.d.ts +16 -0
- package/dist/policy/control-scopes.d.ts.map +1 -0
- package/dist/policy/control-scopes.js +26 -0
- package/dist/policy/control-scopes.js.map +1 -0
- package/dist/policy/credential-material.d.ts.map +1 -0
- package/dist/policy/credential-material.js.map +1 -0
- package/dist/policy/needs-action.d.ts.map +1 -0
- package/dist/policy/needs-action.js.map +1 -0
- package/dist/policy/output-fields.d.ts.map +1 -0
- package/dist/policy/output-fields.js.map +1 -0
- package/dist/policy/overlay-lint.d.ts.map +1 -0
- package/dist/policy/overlay-lint.js.map +1 -0
- package/dist/policy/owner-ticket.d.ts.map +1 -0
- package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
- package/dist/policy/owner-ticket.js.map +1 -0
- package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
- package/dist/policy/safety-policy.d.ts.map +1 -0
- package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
- package/dist/policy/safety-policy.js.map +1 -0
- package/dist/policy/search-globs.d.ts.map +1 -0
- package/dist/policy/search-globs.js.map +1 -0
- package/dist/protocol/container-requirements.d.ts +20 -0
- package/dist/protocol/container-requirements.d.ts.map +1 -0
- package/dist/protocol/container-requirements.js +23 -0
- package/dist/protocol/container-requirements.js.map +1 -0
- package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
- package/dist/protocol/host-protocol.d.ts.map +1 -0
- package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
- package/dist/protocol/host-protocol.js.map +1 -0
- package/dist/protocol/ingress-contract.d.ts.map +1 -0
- package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
- package/dist/protocol/ingress-contract.js.map +1 -0
- package/dist/protocol/ingress-protocol.d.ts.map +1 -0
- package/dist/protocol/ingress-protocol.js.map +1 -0
- package/dist/protocol/listener-protocol.d.ts.map +1 -0
- package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
- package/dist/protocol/listener-protocol.js.map +1 -0
- package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
- package/dist/protocol/peer-dial.d.ts.map +1 -0
- package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
- package/dist/protocol/peer-dial.js.map +1 -0
- package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
- package/dist/protocol/peer-mcp-server.js.map +1 -0
- package/dist/protocol/request-id.d.ts.map +1 -0
- package/dist/protocol/request-id.js.map +1 -0
- package/dist/protocol/routes.d.ts.map +1 -0
- package/dist/protocol/routes.js.map +1 -0
- package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
- package/dist/protocol/runner-protocol.d.ts.map +1 -0
- package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
- package/dist/protocol/runner-protocol.js.map +1 -0
- package/dist/protocol/sse.d.ts.map +1 -0
- package/dist/protocol/sse.js.map +1 -0
- package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
- package/dist/protocol/terminal-protocol.d.ts.map +1 -0
- package/dist/protocol/terminal-protocol.js.map +1 -0
- package/dist/protocol/webext-links.d.ts.map +1 -0
- package/dist/protocol/webext-links.js.map +1 -0
- package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
- package/dist/protocol/webext-protocol.d.ts.map +1 -0
- package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
- package/dist/protocol/webext-protocol.js.map +1 -0
- package/dist/schemas/activity.d.ts +2 -0
- package/dist/schemas/activity.d.ts.map +1 -1
- package/dist/schemas/activity.js +4 -0
- package/dist/schemas/activity.js.map +1 -1
- package/dist/schemas/agent.d.ts +16 -4
- package/dist/schemas/agent.d.ts.map +1 -1
- package/dist/schemas/agent.js +21 -4
- package/dist/schemas/agent.js.map +1 -1
- package/dist/schemas/agents.d.ts +17 -4
- package/dist/schemas/agents.d.ts.map +1 -1
- package/dist/schemas/agents.js +15 -4
- package/dist/schemas/agents.js.map +1 -1
- package/dist/schemas/approvals.d.ts.map +1 -1
- package/dist/schemas/approvals.js.map +1 -1
- package/dist/schemas/automations.d.ts +54 -28
- package/dist/schemas/automations.d.ts.map +1 -1
- package/dist/schemas/automations.js +26 -8
- package/dist/schemas/automations.js.map +1 -1
- package/dist/schemas/capabilities.d.ts +0 -8
- package/dist/schemas/capabilities.d.ts.map +1 -1
- package/dist/schemas/capabilities.js +0 -4
- package/dist/schemas/capabilities.js.map +1 -1
- package/dist/schemas/ci.d.ts +10 -0
- package/dist/schemas/ci.d.ts.map +1 -1
- package/dist/schemas/ci.js +9 -1
- package/dist/schemas/ci.js.map +1 -1
- package/dist/schemas/codebase-health.d.ts.map +1 -1
- package/dist/schemas/codebase-health.js.map +1 -1
- package/dist/schemas/devices.d.ts +92 -0
- package/dist/schemas/devices.d.ts.map +1 -1
- package/dist/schemas/devices.js +12 -1
- package/dist/schemas/devices.js.map +1 -1
- package/dist/schemas/engines.d.ts.map +1 -1
- package/dist/schemas/engines.js.map +1 -1
- package/dist/schemas/environment.d.ts.map +1 -1
- package/dist/schemas/environment.js.map +1 -1
- package/dist/schemas/exit.d.ts.map +1 -1
- package/dist/schemas/exit.js.map +1 -1
- package/dist/schemas/extension-updates.d.ts.map +1 -1
- package/dist/schemas/extension-updates.js.map +1 -1
- package/dist/schemas/git-history.d.ts.map +1 -1
- package/dist/schemas/git-history.js.map +1 -1
- package/dist/schemas/git.d.ts +80 -16
- package/dist/schemas/git.d.ts.map +1 -1
- package/dist/schemas/git.js +37 -25
- package/dist/schemas/git.js.map +1 -1
- package/dist/schemas/history.d.ts.map +1 -1
- package/dist/schemas/history.js.map +1 -1
- package/dist/schemas/hosts.d.ts.map +1 -1
- package/dist/schemas/hosts.js.map +1 -1
- package/dist/schemas/inventory.d.ts.map +1 -1
- package/dist/schemas/inventory.js.map +1 -1
- package/dist/schemas/issues.d.ts +0 -1
- package/dist/schemas/issues.d.ts.map +1 -1
- package/dist/schemas/issues.js +0 -1
- package/dist/schemas/issues.js.map +1 -1
- package/dist/schemas/logs.d.ts.map +1 -1
- package/dist/schemas/logs.js.map +1 -1
- package/dist/schemas/loops.d.ts.map +1 -1
- package/dist/schemas/loops.js +1 -1
- package/dist/schemas/loops.js.map +1 -1
- package/dist/schemas/maintenance.d.ts.map +1 -1
- package/dist/schemas/maintenance.js.map +1 -1
- package/dist/schemas/marketplace.d.ts +0 -4
- package/dist/schemas/marketplace.d.ts.map +1 -1
- package/dist/schemas/panels.d.ts.map +1 -1
- package/dist/schemas/panels.js.map +1 -1
- package/dist/schemas/personas.d.ts +2 -1
- package/dist/schemas/personas.d.ts.map +1 -1
- package/dist/schemas/personas.js +6 -2
- package/dist/schemas/personas.js.map +1 -1
- package/dist/schemas/plan-limits.d.ts +2 -4
- package/dist/schemas/plan-limits.d.ts.map +1 -1
- package/dist/schemas/plan-limits.js +5 -8
- package/dist/schemas/plan-limits.js.map +1 -1
- package/dist/schemas/ports.d.ts.map +1 -1
- package/dist/schemas/ports.js.map +1 -1
- package/dist/schemas/provider-oauth.d.ts.map +1 -1
- package/dist/schemas/provider-oauth.js.map +1 -1
- package/dist/schemas/provider-subscriptions.d.ts +1 -1
- package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
- package/dist/schemas/provider-subscriptions.js +1 -1
- package/dist/schemas/provider-subscriptions.js.map +1 -1
- package/dist/schemas/public.d.ts.map +1 -1
- package/dist/schemas/public.js.map +1 -1
- package/dist/schemas/push.d.ts.map +1 -1
- package/dist/schemas/push.js.map +1 -1
- package/dist/schemas/secrets.d.ts.map +1 -1
- package/dist/schemas/secrets.js.map +1 -1
- package/dist/schemas/settings.d.ts +11 -9
- package/dist/schemas/settings.d.ts.map +1 -1
- package/dist/schemas/settings.js +22 -7
- package/dist/schemas/settings.js.map +1 -1
- package/dist/schemas/share.d.ts.map +1 -1
- package/dist/schemas/share.js.map +1 -1
- package/dist/schemas/shared.d.ts +4 -0
- package/dist/schemas/shared.d.ts.map +1 -1
- package/dist/schemas/shared.js +3 -0
- package/dist/schemas/shared.js.map +1 -1
- package/dist/schemas/system.d.ts +6 -0
- package/dist/schemas/system.d.ts.map +1 -1
- package/dist/schemas/system.js +10 -0
- package/dist/schemas/system.js.map +1 -1
- package/dist/schemas/terminal.d.ts.map +1 -1
- package/dist/schemas/terminal.js.map +1 -1
- package/dist/schemas/usage.d.ts.map +1 -1
- package/dist/schemas/usage.js.map +1 -1
- package/dist/schemas/vpn.d.ts.map +1 -1
- package/dist/schemas/vpn.js.map +1 -1
- package/dist/schemas/webext.d.ts.map +1 -1
- package/dist/schemas/webext.js.map +1 -1
- package/dist/schemas/workflows.d.ts +66 -9
- package/dist/schemas/workflows.d.ts.map +1 -1
- package/dist/schemas/workflows.js +6 -5
- package/dist/schemas/workflows.js.map +1 -1
- package/dist/schemas/workspace-repos.d.ts.map +1 -1
- package/dist/schemas/workspace-repos.js.map +1 -1
- package/dist/schemas/workspace-search.d.ts.map +1 -1
- package/dist/schemas/workspace-search.js.map +1 -1
- package/dist/schemas/workspace-setup.d.ts.map +1 -1
- package/dist/schemas/workspace-setup.js.map +1 -1
- package/dist/schemas/workspace-tree.d.ts.map +1 -1
- package/dist/schemas/workspace-tree.js.map +1 -1
- package/dist/state/arrival.d.ts.map +1 -0
- package/dist/{arrival.js → state/arrival.js} +1 -1
- package/dist/state/arrival.js.map +1 -0
- package/dist/state/contract-lock.d.ts.map +1 -0
- package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
- package/dist/state/contract-lock.js.map +1 -0
- package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
- package/dist/state/definition.d.ts.map +1 -0
- package/dist/{definition.js → state/definition.js} +4 -4
- package/dist/state/definition.js.map +1 -0
- package/dist/state/history-state.d.ts.map +1 -0
- package/dist/{history-state.js → state/history-state.js} +1 -0
- package/dist/state/history-state.js.map +1 -0
- package/dist/state/runtime-state.d.ts.map +1 -0
- package/dist/state/runtime-state.js.map +1 -0
- package/dist/state/starter.d.ts.map +1 -0
- package/dist/state/starter.js.map +1 -0
- package/dist/state/state-portability.d.ts.map +1 -0
- package/dist/state/state-portability.js.map +1 -0
- package/dist/state/versions.d.ts.map +1 -0
- package/dist/state/versions.js.map +1 -0
- package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
- package/dist/state/workspace-state.d.ts.map +1 -0
- package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
- package/dist/state/workspace-state.js.map +1 -0
- package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
- package/dist/text/documents.d.ts.map +1 -0
- package/dist/{documents.js → text/documents.js} +1 -1
- package/dist/text/documents.js.map +1 -0
- package/dist/text/embed.d.ts.map +1 -0
- package/dist/text/embed.js.map +1 -0
- package/dist/text/mentions.d.ts.map +1 -0
- package/dist/text/mentions.js.map +1 -0
- package/dist/text/model-answer.d.ts +3 -0
- package/dist/text/model-answer.d.ts.map +1 -0
- package/dist/text/model-answer.js +3 -0
- package/dist/text/model-answer.js.map +1 -0
- package/dist/text/path-refs.d.ts.map +1 -0
- package/dist/text/path-refs.js.map +1 -0
- package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
- package/dist/text/shell-regions.d.ts.map +1 -0
- package/dist/text/shell-regions.js.map +1 -0
- package/dist/text/title.d.ts.map +1 -0
- package/dist/text/title.js.map +1 -0
- package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
- package/dist/text/transcript-fold.d.ts.map +1 -0
- package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
- package/dist/text/transcript-fold.js.map +1 -0
- package/dist/text/whisper.d.ts +3 -0
- package/dist/text/whisper.d.ts.map +1 -0
- package/dist/text/whisper.js +11 -0
- package/dist/text/whisper.js.map +1 -0
- package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
- package/dist/text/workflow-faults.d.ts.map +1 -0
- package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
- package/dist/text/workflow-faults.js.map +1 -0
- package/package.json +70 -70
- package/src/chores/chores.test.ts +4 -10
- package/src/chores/chores.ts +148 -392
- package/src/chores/digest.ts +8 -28
- package/src/chores/extension-update.ts +3 -8
- package/src/chores/fix-deps.ts +4 -18
- package/src/chores/index.ts +2 -2
- package/src/chores/probes.test.ts +7 -43
- package/src/chores/probes.ts +62 -167
- package/src/chores/prompt.ts +10 -34
- package/src/chores/stack.test.ts +6 -45
- package/src/chores/stack.ts +27 -118
- package/src/chores/verdict.test.ts +101 -80
- package/src/chores/verdict.ts +54 -99
- package/src/contracts/accounts.contract.ts +4 -19
- package/src/contracts/agent.contract.ts +7 -22
- package/src/contracts/agents.contract.ts +25 -71
- package/src/contracts/automations.contract.ts +14 -30
- package/src/contracts/capabilities.contract.ts +8 -35
- package/src/contracts/chores.contract.ts +4 -15
- package/src/contracts/endpoints.contract.ts +5 -22
- package/src/contracts/exit.contract.ts +7 -30
- package/src/contracts/extensions.contract.ts +8 -30
- package/src/contracts/git.contract.ts +25 -49
- package/src/contracts/host.contract.ts +9 -44
- package/src/contracts/intentic.contract.ts +1 -1
- package/src/contracts/logs.contract.ts +3 -13
- package/src/contracts/loops.contract.ts +9 -40
- package/src/contracts/personas.contract.ts +10 -35
- package/src/contracts/providers.contract.ts +4 -17
- package/src/contracts/runner.contract.ts +12 -39
- package/src/contracts/safety.contract.ts +5 -14
- package/src/contracts/secrets.contract.ts +4 -22
- package/src/contracts/sessions.contract.ts +1 -1
- package/src/contracts/settings.contract.ts +4 -10
- package/src/contracts/share.contract.ts +3 -9
- package/src/contracts/skills.contract.ts +21 -19
- package/src/contracts/system.contract.ts +26 -52
- package/src/contracts/usage.contract.ts +7 -21
- package/src/contracts/vpn.contract.ts +9 -16
- package/src/contracts/webext.contract.ts +9 -25
- package/src/contracts/workflows.contract.ts +34 -58
- package/src/contracts/workspace.contract.ts +19 -50
- package/src/events/agent-events.ts +345 -0
- package/src/events/cards.ts +286 -0
- package/src/{events.test.ts → events/resume.test.ts} +4 -19
- package/src/events/resume.ts +60 -0
- package/src/events/system-events.ts +139 -0
- package/src/events/transcript.ts +320 -0
- package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
- package/src/ids/conversation-ids.ts +178 -0
- package/src/ids/hostnames.ts +129 -0
- package/src/ids/session-names.ts +29 -0
- package/src/ids/share-paths.ts +43 -0
- package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
- package/src/ids/tunnel-ids.ts +29 -0
- package/src/index.ts +71 -87
- package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
- package/src/models/agent-catalog.ts +174 -0
- package/src/models/agent-runtimes.ts +201 -0
- package/src/models/capability-ledger.test.ts +84 -0
- package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
- package/src/models/fast-tier.ts +36 -0
- package/src/{model-order.test.ts → models/model-order.test.ts} +54 -40
- package/src/models/model-order.ts +171 -0
- package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
- package/src/models/model-pins.ts +57 -0
- package/src/models/model-roles.test.ts +38 -0
- package/src/models/model-roles.ts +180 -0
- package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
- package/src/models/plan-pools.ts +65 -0
- package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
- package/src/models/prompt-complexity.ts +215 -0
- package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
- package/src/models/provider-specs.ts +272 -0
- package/src/policy/approvals-execution.ts +58 -0
- package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
- package/src/policy/batch-runs.ts +137 -0
- package/src/policy/capability-secrets.ts +5 -0
- package/src/{card-status.ts → policy/card-status.ts} +11 -26
- package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
- package/src/policy/command-classes.ts +395 -0
- package/src/policy/command-run.ts +65 -0
- package/src/policy/control-scopes.ts +38 -0
- package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
- package/src/policy/credential-material.ts +91 -0
- package/src/policy/needs-action.ts +5 -0
- package/src/policy/output-fields.ts +86 -0
- package/src/policy/overlay-lint.ts +100 -0
- package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
- package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
- package/src/policy/safety-policy.test.ts +84 -0
- package/src/policy/safety-policy.ts +142 -0
- package/src/policy/search-globs.ts +60 -0
- package/src/protocol/container-requirements.test.ts +72 -0
- package/src/protocol/container-requirements.ts +58 -0
- package/src/protocol/host-protocol.ts +29 -0
- package/src/protocol/ingress-contract.ts +103 -0
- package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
- package/src/protocol/ingress-protocol.ts +441 -0
- package/src/protocol/listener-protocol.ts +75 -0
- package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
- package/src/protocol/peer-dial.ts +207 -0
- package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
- package/src/protocol/request-id.ts +5 -0
- package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
- package/src/protocol/routes.ts +159 -0
- package/src/protocol/runner-protocol.ts +197 -0
- package/src/protocol/terminal-protocol.ts +13 -0
- package/src/protocol/webext-links.ts +50 -0
- package/src/protocol/webext-protocol.ts +24 -0
- package/src/schemas/activity.ts +22 -30
- package/src/schemas/agent.ts +130 -238
- package/src/schemas/agents.ts +165 -483
- package/src/schemas/approvals.ts +23 -71
- package/src/schemas/automations.ts +142 -250
- package/src/schemas/capabilities.ts +127 -414
- package/src/schemas/ci.ts +56 -108
- package/src/schemas/codebase-health.ts +7 -11
- package/src/schemas/devices.ts +103 -321
- package/src/schemas/engines.ts +16 -44
- package/src/schemas/environment.ts +41 -91
- package/src/schemas/exit.ts +24 -81
- package/src/schemas/extension-updates.ts +42 -87
- package/src/schemas/git-history.ts +30 -84
- package/src/schemas/git.ts +141 -256
- package/src/schemas/history.ts +14 -40
- package/src/schemas/hosts.ts +9 -15
- package/src/schemas/inventory.ts +8 -10
- package/src/schemas/issues.ts +66 -134
- package/src/schemas/logs.ts +15 -34
- package/src/schemas/loops.ts +46 -163
- package/src/schemas/maintenance.ts +47 -172
- package/src/schemas/panels.ts +20 -45
- package/src/schemas/personas.ts +50 -200
- package/src/schemas/plan-limits.ts +58 -197
- package/src/schemas/ports.ts +14 -32
- package/src/schemas/provider-oauth.ts +23 -76
- package/src/schemas/provider-subscriptions.ts +4 -13
- package/src/schemas/public.ts +4 -15
- package/src/schemas/push.ts +8 -36
- package/src/schemas/secrets.ts +20 -64
- package/src/schemas/settings.ts +182 -602
- package/src/schemas/share.ts +14 -32
- package/src/schemas/shared.ts +14 -13
- package/src/schemas/system.ts +46 -78
- package/src/schemas/terminal.ts +41 -120
- package/src/schemas/usage.ts +44 -233
- package/src/schemas/version-seam.test.ts +9 -26
- package/src/schemas/vpn.ts +27 -64
- package/src/schemas/webext.ts +22 -53
- package/src/schemas/workflows.ts +57 -183
- package/src/schemas/workspace-repos.ts +12 -24
- package/src/schemas/workspace-search.ts +17 -35
- package/src/schemas/workspace-setup.ts +4 -11
- package/src/schemas/workspace-tree.ts +32 -91
- package/src/state/arrival.ts +109 -0
- package/src/state/contract-lock.test.ts +17 -0
- package/src/state/contract-lock.ts +49 -0
- package/src/state/definition.ts +143 -0
- package/src/state/history-state.ts +103 -0
- package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
- package/src/state/runtime-state.ts +63 -0
- package/src/state/starter.ts +5 -0
- package/src/state/state-portability.ts +27 -0
- package/src/state/versions.ts +26 -0
- package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
- package/src/state/workspace-state.ts +669 -0
- package/src/{documents.test.ts → text/documents.test.ts} +1 -1
- package/src/text/documents.ts +42 -0
- package/src/text/embed.ts +132 -0
- package/src/text/mentions.ts +21 -0
- package/src/text/model-answer.ts +9 -0
- package/src/text/path-refs.ts +39 -0
- package/src/text/shell-regions.ts +224 -0
- package/src/{title.test.ts → text/title.test.ts} +13 -32
- package/src/text/title.ts +202 -0
- package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
- package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
- package/src/text/whisper.test.ts +19 -0
- package/src/text/whisper.ts +17 -0
- package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
- package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
- package/dist/agent-catalog.d.ts.map +0 -1
- package/dist/agent-catalog.js.map +0 -1
- package/dist/agent-runtimes.d.ts.map +0 -1
- package/dist/agent-runtimes.js.map +0 -1
- package/dist/approvals-execution.d.ts.map +0 -1
- package/dist/approvals-execution.js.map +0 -1
- package/dist/arrival.d.ts.map +0 -1
- package/dist/arrival.js.map +0 -1
- package/dist/batch-runs.d.ts.map +0 -1
- package/dist/batch-runs.js.map +0 -1
- package/dist/capability-env.d.ts.map +0 -1
- package/dist/capability-env.js.map +0 -1
- package/dist/capability-secrets.d.ts.map +0 -1
- package/dist/capability-secrets.js.map +0 -1
- package/dist/card-status.d.ts.map +0 -1
- package/dist/card-status.js.map +0 -1
- package/dist/command-classes.d.ts.map +0 -1
- package/dist/command-classes.js.map +0 -1
- package/dist/command-run.d.ts.map +0 -1
- package/dist/command-run.js.map +0 -1
- package/dist/contract-lock.d.ts.map +0 -1
- package/dist/contract-lock.js.map +0 -1
- package/dist/conversation-ids.d.ts +0 -4
- package/dist/conversation-ids.d.ts.map +0 -1
- package/dist/conversation-ids.js.map +0 -1
- package/dist/credential-material.d.ts.map +0 -1
- package/dist/credential-material.js.map +0 -1
- package/dist/definition.d.ts.map +0 -1
- package/dist/definition.js.map +0 -1
- package/dist/documents.d.ts.map +0 -1
- package/dist/documents.js.map +0 -1
- package/dist/embed.d.ts.map +0 -1
- package/dist/embed.js.map +0 -1
- package/dist/events.d.ts +0 -4336
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -725
- package/dist/events.js.map +0 -1
- package/dist/fast-tier.d.ts.map +0 -1
- package/dist/fast-tier.js.map +0 -1
- package/dist/history-state.d.ts.map +0 -1
- package/dist/history-state.js.map +0 -1
- package/dist/host-protocol.d.ts.map +0 -1
- package/dist/host-protocol.js.map +0 -1
- package/dist/hostnames.d.ts.map +0 -1
- package/dist/hostnames.js.map +0 -1
- package/dist/ingress-contract.d.ts.map +0 -1
- package/dist/ingress-contract.js.map +0 -1
- package/dist/ingress-protocol.d.ts.map +0 -1
- package/dist/ingress-protocol.js.map +0 -1
- package/dist/listener-protocol.d.ts.map +0 -1
- package/dist/listener-protocol.js.map +0 -1
- package/dist/mentions.d.ts.map +0 -1
- package/dist/mentions.js.map +0 -1
- package/dist/model-order.d.ts.map +0 -1
- package/dist/model-order.js.map +0 -1
- package/dist/model-pins.d.ts.map +0 -1
- package/dist/model-pins.js.map +0 -1
- package/dist/model-roles.d.ts.map +0 -1
- package/dist/model-roles.js.map +0 -1
- package/dist/needs-action.d.ts.map +0 -1
- package/dist/needs-action.js.map +0 -1
- package/dist/output-fields.d.ts.map +0 -1
- package/dist/output-fields.js.map +0 -1
- package/dist/overlay-lint.d.ts.map +0 -1
- package/dist/overlay-lint.js.map +0 -1
- package/dist/owner-ticket.d.ts.map +0 -1
- package/dist/owner-ticket.js.map +0 -1
- package/dist/path-refs.d.ts.map +0 -1
- package/dist/path-refs.js.map +0 -1
- package/dist/peer-dial.d.ts.map +0 -1
- package/dist/peer-dial.js.map +0 -1
- package/dist/peer-mcp-server.d.ts.map +0 -1
- package/dist/peer-mcp-server.js.map +0 -1
- package/dist/plan-pools.d.ts.map +0 -1
- package/dist/plan-pools.js.map +0 -1
- package/dist/prompt-complexity.d.ts.map +0 -1
- package/dist/prompt-complexity.js.map +0 -1
- package/dist/provider-specs.d.ts.map +0 -1
- package/dist/provider-specs.js.map +0 -1
- package/dist/request-id.d.ts.map +0 -1
- package/dist/request-id.js.map +0 -1
- package/dist/routes.d.ts.map +0 -1
- package/dist/routes.js.map +0 -1
- package/dist/runner-protocol.d.ts.map +0 -1
- package/dist/runner-protocol.js.map +0 -1
- package/dist/runtime-state.d.ts.map +0 -1
- package/dist/runtime-state.js.map +0 -1
- package/dist/safety-policy.d.ts.map +0 -1
- package/dist/safety-policy.js.map +0 -1
- package/dist/search-globs.d.ts.map +0 -1
- package/dist/search-globs.js.map +0 -1
- package/dist/session-names.d.ts.map +0 -1
- package/dist/session-names.js.map +0 -1
- package/dist/share-paths.d.ts.map +0 -1
- package/dist/share-paths.js.map +0 -1
- package/dist/shell-regions.d.ts.map +0 -1
- package/dist/shell-regions.js.map +0 -1
- package/dist/sse.d.ts.map +0 -1
- package/dist/sse.js.map +0 -1
- package/dist/starter.d.ts.map +0 -1
- package/dist/starter.js.map +0 -1
- package/dist/state-portability.d.ts.map +0 -1
- package/dist/state-portability.js.map +0 -1
- package/dist/terminal-protocol.d.ts.map +0 -1
- package/dist/terminal-protocol.js.map +0 -1
- package/dist/title.d.ts.map +0 -1
- package/dist/title.js.map +0 -1
- package/dist/transcript-fold.d.ts.map +0 -1
- package/dist/transcript-fold.js.map +0 -1
- package/dist/tunnel-ids.d.ts.map +0 -1
- package/dist/tunnel-ids.js.map +0 -1
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js.map +0 -1
- package/dist/webext-links.d.ts.map +0 -1
- package/dist/webext-links.js.map +0 -1
- package/dist/webext-protocol.d.ts.map +0 -1
- package/dist/webext-protocol.js.map +0 -1
- package/dist/workflow-faults.d.ts.map +0 -1
- package/dist/workflow-faults.js.map +0 -1
- package/dist/workspace-state.d.ts.map +0 -1
- package/dist/workspace-state.js.map +0 -1
- package/src/agent-catalog.ts +0 -316
- package/src/agent-runtimes.ts +0 -419
- package/src/approvals-execution.ts +0 -96
- package/src/arrival.ts +0 -160
- package/src/batch-runs.ts +0 -188
- package/src/capability-ledger.test.ts +0 -140
- package/src/capability-secrets.ts +0 -20
- package/src/command-classes.ts +0 -617
- package/src/command-run.ts +0 -78
- package/src/contract-lock.test.ts +0 -23
- package/src/contract-lock.ts +0 -66
- package/src/conversation-ids.ts +0 -207
- package/src/credential-material.ts +0 -181
- package/src/definition.ts +0 -207
- package/src/documents.ts +0 -67
- package/src/embed.ts +0 -164
- package/src/events.ts +0 -1870
- package/src/fast-tier.ts +0 -72
- package/src/history-state.ts +0 -174
- package/src/host-protocol.ts +0 -36
- package/src/hostnames.ts +0 -180
- package/src/ingress-contract.ts +0 -157
- package/src/ingress-protocol.ts +0 -625
- package/src/listener-protocol.ts +0 -96
- package/src/mentions.ts +0 -25
- package/src/model-order.ts +0 -262
- package/src/model-pins.ts +0 -132
- package/src/model-roles.test.ts +0 -52
- package/src/model-roles.ts +0 -320
- package/src/needs-action.ts +0 -14
- package/src/output-fields.ts +0 -111
- package/src/overlay-lint.ts +0 -116
- package/src/path-refs.ts +0 -59
- package/src/peer-dial.ts +0 -163
- package/src/plan-pools.ts +0 -92
- package/src/prompt-complexity.ts +0 -334
- package/src/provider-specs.ts +0 -432
- package/src/request-id.ts +0 -41
- package/src/routes.ts +0 -219
- package/src/runner-protocol.ts +0 -239
- package/src/runtime-state.ts +0 -140
- package/src/safety-policy.test.ts +0 -88
- package/src/safety-policy.ts +0 -258
- package/src/search-globs.ts +0 -76
- package/src/session-names.ts +0 -44
- package/src/share-paths.ts +0 -68
- package/src/shell-regions.ts +0 -289
- package/src/starter.ts +0 -13
- package/src/state-portability.ts +0 -56
- package/src/terminal-protocol.ts +0 -16
- package/src/title.ts +0 -267
- package/src/tunnel-ids.ts +0 -57
- package/src/versions.ts +0 -48
- package/src/webext-links.ts +0 -90
- package/src/webext-protocol.ts +0 -27
- package/src/workspace-state.ts +0 -1090
- /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
- /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
- /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
- /package/dist/{session-names.js → ids/session-names.js} +0 -0
- /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
- /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
- /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
- /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
- /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
- /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
- /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
- /package/dist/{model-pins.js → models/model-pins.js} +0 -0
- /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
- /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
- /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
- /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
- /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
- /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
- /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
- /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
- /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
- /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
- /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
- /package/dist/{command-run.js → policy/command-run.js} +0 -0
- /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
- /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
- /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
- /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
- /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
- /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
- /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
- /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
- /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
- /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
- /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
- /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
- /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
- /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
- /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
- /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
- /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
- /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
- /package/dist/{request-id.js → protocol/request-id.js} +0 -0
- /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
- /package/dist/{routes.js → protocol/routes.js} +0 -0
- /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
- /package/dist/{sse.js → protocol/sse.js} +0 -0
- /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
- /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
- /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
- /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
- /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
- /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
- /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
- /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
- /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
- /package/dist/{starter.js → state/starter.js} +0 -0
- /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
- /package/dist/{state-portability.js → state/state-portability.js} +0 -0
- /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
- /package/dist/{versions.js → state/versions.js} +0 -0
- /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
- /package/dist/{embed.js → text/embed.js} +0 -0
- /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
- /package/dist/{mentions.js → text/mentions.js} +0 -0
- /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
- /package/dist/{path-refs.js → text/path-refs.js} +0 -0
- /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
- /package/dist/{title.d.ts → text/title.d.ts} +0 -0
- /package/dist/{title.js → text/title.js} +0 -0
- /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
- /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
- /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
- /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
- /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
- /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
- /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
- /package/src/{sse.ts → protocol/sse.ts} +0 -0
- /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
- /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
- /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
- /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// engine; the engine is interchangeable behind this shape.) Groups are relevance-ranked (best first, never path
|
|
5
|
-
// order); each hit carries the match-reason tags the fused engines contributed, and the char spans within `text`
|
|
6
|
-
// that matched, so clients highlight without re-finding the needle.
|
|
2
|
+
// Shared by /workspace/search and the web client. Groups rank by relevance, best first; each hit carries match tags and
|
|
3
|
+
// the char spans in `text`, for highlighting without a re-find.
|
|
7
4
|
export const WorkspaceSearchQuerySchema = z.object({
|
|
8
5
|
query: z.string().min(2).max(512).describe("What to look for. Plain words, a pattern, a symbol name, or a question."),
|
|
9
|
-
// Search verbs only
|
|
10
|
-
// has no verb of its own: `q` classifies the query and answers it semantically when the words call for it.
|
|
6
|
+
// Search verbs only; anchor/git verbs are CLI-only. Natural language needs none, `q` classifies it.
|
|
11
7
|
mode: z
|
|
12
8
|
.enum(["q", "find", "files", "def", "refs", "sym", "ast"])
|
|
13
9
|
.optional()
|
|
@@ -15,16 +11,11 @@ export const WorkspaceSearchQuerySchema = z.object({
|
|
|
15
11
|
"Narrow the search to one kind: plain text, filenames, definitions, references, symbols, or code structure. Leave it out to blend them, which also answers a question asked in words.",
|
|
16
12
|
),
|
|
17
13
|
includeIgnored: z.stringbool().optional().describe("Search inside installed packages and other ignored folders too."),
|
|
18
|
-
//
|
|
19
|
-
// `literal` treats it as fixed text instead of a regex; `caseSensitive` off means case-INSENSITIVE, not
|
|
20
|
-
// ripgrep's smart case.
|
|
14
|
+
// The three switches every search box has; caseSensitive off means case-insensitive, not ripgrep's smart case.
|
|
21
15
|
literal: z.stringbool().optional().describe("Treat the query as fixed text rather than a pattern."),
|
|
22
16
|
word: z.stringbool().optional().describe("Match whole words only."),
|
|
23
17
|
caseSensitive: z.stringbool().optional().describe("Whether capitals matter. Off means they do not, rather than being guessed at from the query."),
|
|
24
|
-
//
|
|
25
|
-
// of it is shared (search-globs.ts) rather than each end guessing: comma-separated patterns, each matched
|
|
26
|
-
// at any depth unless `./` anchors it, a leading `!` excluding instead. Distinct from `includeIgnored`,
|
|
27
|
-
// which decides whether the ignored layers are searched at all, this narrows within what that admitted.
|
|
18
|
+
// Files-to-include grammar: comma-separated patterns, any depth unless `./`-anchored, leading ! excludes.
|
|
28
19
|
include: z
|
|
29
20
|
.string()
|
|
30
21
|
.max(512)
|
|
@@ -52,15 +43,14 @@ export type WorkspaceSearchSpan = z.infer<typeof WorkspaceSearchSpanSchema>;
|
|
|
52
43
|
export const WorkspaceSearchHitSchema = z.object({
|
|
53
44
|
line: z.number().describe("Which line, counting from one."),
|
|
54
45
|
text: z.string().describe("The line itself."),
|
|
55
|
-
// Every matched span in
|
|
56
|
-
// where the LINE is the match and no span of it is (a semantic or definition hit reports none).
|
|
46
|
+
// Every matched span in text, in order; empty when the whole line is the match, not part of it.
|
|
57
47
|
spans: z
|
|
58
48
|
.array(WorkspaceSearchSpanSchema)
|
|
59
49
|
.describe(
|
|
60
50
|
"Where in the line the matches are, so you can highlight without searching again. Empty when the whole line is the match rather than part of it.",
|
|
61
51
|
),
|
|
62
52
|
tags: z.array(WorkspaceSearchTagSchema).describe("Why it matched."),
|
|
63
|
-
// Enclosing symbol
|
|
53
|
+
// Enclosing symbol or heading; often enough on its own, no need to open the file.
|
|
64
54
|
context: z
|
|
65
55
|
.string()
|
|
66
56
|
.optional()
|
|
@@ -71,22 +61,20 @@ export const WorkspaceSearchGroupSchema = z.object({
|
|
|
71
61
|
path: z.string().describe("The file."),
|
|
72
62
|
score: z.number().describe("How well it matched. Groups arrive best first, never in path order."),
|
|
73
63
|
hits: z.array(WorkspaceSearchHitSchema).describe("The matching lines in it."),
|
|
74
|
-
// This file had more
|
|
75
|
-
// per-file count has to say "50+" rather than "50".
|
|
64
|
+
// This file had more matches than kept per file; the count is a floor (say "50+", not "50").
|
|
76
65
|
capped: z
|
|
77
66
|
.boolean()
|
|
78
67
|
.optional()
|
|
79
68
|
.describe("This file had more matches than are kept per file, so the count is a floor. Say fifty-plus rather than fifty."),
|
|
80
69
|
});
|
|
81
70
|
export type WorkspaceSearchGroup = z.infer<typeof WorkspaceSearchGroupSchema>;
|
|
82
|
-
//
|
|
83
|
-
//
|
|
71
|
+
// building means the index is still filling (progress 0..1); stale means revalidation was skipped. ageMs is time since
|
|
72
|
+
// the index last matched disk.
|
|
84
73
|
export const WorkspaceSearchFreshnessSchema = z.object({
|
|
85
74
|
state: z.enum(["fresh", "building", "stale"]).describe("Whether the index matches what is on disk, is still filling, or has fallen behind."),
|
|
86
75
|
ageMs: z.number().optional().describe("How long since it last matched the disk, in milliseconds."),
|
|
87
76
|
progress: z.number().optional().describe("How far through building it is, from zero to one."),
|
|
88
|
-
// How many files
|
|
89
|
-
// reads as a warning about the answer, which it almost never is.
|
|
77
|
+
// How many files it hasn't caught up with; worth showing since "stale" alone reads as a warning.
|
|
90
78
|
behind: z
|
|
91
79
|
.number()
|
|
92
80
|
.optional()
|
|
@@ -98,15 +86,13 @@ export type WorkspaceSearchFreshness = z.infer<typeof WorkspaceSearchFreshnessSc
|
|
|
98
86
|
export const WorkspaceSearchResultSchema = z.object({
|
|
99
87
|
mode: z.string().describe("Which kind of search actually ran, which matters when you let it choose."),
|
|
100
88
|
total: z.number().describe("Matching lines across the whole workspace, not just this page."),
|
|
101
|
-
// Files
|
|
102
|
-
// results panel puts beside the hit total ("218 results in 61 files").
|
|
89
|
+
// Files matched in total; `groups` only reports the ones on this page.
|
|
103
90
|
files: z.number().describe("Files the query matched in total."),
|
|
104
91
|
shown: z.number().describe("How many of those lines are on this page."),
|
|
105
92
|
groups: z.array(WorkspaceSearchGroupSchema).describe("The results, grouped by file, best first."),
|
|
106
93
|
freshness: WorkspaceSearchFreshnessSchema.describe("Whether the index behind the answer is up to date."),
|
|
107
94
|
truncated: z.boolean().describe("This page is not all of it. Use the cursor."),
|
|
108
|
-
//
|
|
109
|
-
// `truncated`, which is about this PAGE, a result can be complete on the page and still count partially.
|
|
95
|
+
// A floor: some file had more matches than kept per file. Distinct from truncated, which is about the page.
|
|
110
96
|
partial: z
|
|
111
97
|
.boolean()
|
|
112
98
|
.optional()
|
|
@@ -115,27 +101,23 @@ export const WorkspaceSearchResultSchema = z.object({
|
|
|
115
101
|
),
|
|
116
102
|
cursor: z.string().optional().describe("Pass this back as `after` to get the next page."),
|
|
117
103
|
hint: z.string().optional().describe("A suggestion for getting a better answer out of this query."),
|
|
118
|
-
// What the engine did
|
|
119
|
-
// because it is not valid regex, grep-style escapes rewritten, a language filter that matched no files. The
|
|
120
|
-
// text surface has always printed this above the results; a JSON caller could not see it at all.
|
|
104
|
+
// What the engine did unasked: a pattern rerun as literal, escapes rewritten, or a filter matching nothing.
|
|
121
105
|
note: z
|
|
122
106
|
.string()
|
|
123
107
|
.optional()
|
|
124
108
|
.describe(
|
|
125
109
|
"What the engine did that you did not ask for: a pattern rerun as plain text because it was not valid, escapes rewritten, a language filter that matched nothing.",
|
|
126
110
|
),
|
|
127
|
-
// Code-graph neighbors of the top hits
|
|
111
|
+
// Code-graph neighbors of the top hits: definition anchors and each one's strongest caller.
|
|
128
112
|
related: z.array(z.string()).optional().describe("Places next door to the best results: where each is defined, and whatever calls it most."),
|
|
129
|
-
// Ranked
|
|
130
|
-
// behind groups the budget spent itself on. The text surface has always printed this map; a JSON caller could
|
|
131
|
-
// not see it, so it had to page through `cursor` to learn what the terminal was told up front.
|
|
113
|
+
// Ranked path:line anchors that placed but weren't shown, best first; the answer often sits at rank 5-13.
|
|
132
114
|
candidates: z
|
|
133
115
|
.array(z.string())
|
|
134
116
|
.optional()
|
|
135
117
|
.describe(
|
|
136
118
|
"Ranked places that scored but did not make the page, best first. The answer often sits at rank five to thirteen, so this saves paging through to find out.",
|
|
137
119
|
),
|
|
138
|
-
//
|
|
120
|
+
// Retrieval stages disabled for this run, for benchmarking; absent means the full pipeline ran.
|
|
139
121
|
features: z.array(z.string()).optional().describe("Which stages of the search were switched off for this run. Absent means all of them ran."),
|
|
140
122
|
});
|
|
141
123
|
export type WorkspaceSearchResult = z.infer<typeof WorkspaceSearchResultSchema>;
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
// workspace setup (dependency readiness)
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// the agent's post-edit type-check, and the agent's turn context all gate on it.
|
|
6
|
-
// `dir` is root-relative ("" = the workspace root itself); `manager` is the real binary (pnpm/npm/uv/…);
|
|
7
|
-
// `evidence` is the file that decided it ("pnpm-lock.yaml"), so the UI can show WHY, not just what.
|
|
8
|
-
// state: ready | installing | needs-setup | unsupported (manager absent from this sandbox, `manager` names it)
|
|
9
|
-
// | stale, installed ONCE and since outgrown: the manifests declare dependencies that are not on disk,
|
|
10
|
-
// which is what an agent leaves behind when it adds one and does not install it. Same command fixes it,
|
|
11
|
-
// so `missing` (how many names cannot resolve) is what separates the two in the UI's wording.
|
|
3
|
+
// Whether a project's dependencies are actually installed; a checkout omits node_modules/.venv, so an import is
|
|
4
|
+
// unusable until this reads ready. Gates the import UI, the post-edit type-check, and turn context.
|
|
12
5
|
export const ProjectSetupSchema = z.object({
|
|
13
6
|
dir: z.string().describe("Where the project is, relative to the workspace root. Empty means the root itself."),
|
|
14
7
|
ecosystem: z.enum(["node", "python"]).describe("Which language's tooling it uses."),
|
|
@@ -27,8 +20,8 @@ export const WorkspaceSetupSchema = z.object({
|
|
|
27
20
|
projects: z.array(ProjectSetupSchema).describe("Every project the sandbox found, and whether each is usable."),
|
|
28
21
|
});
|
|
29
22
|
export type WorkspaceSetup = z.infer<typeof WorkspaceSetupSchema>;
|
|
30
|
-
//
|
|
31
|
-
//
|
|
23
|
+
// Dirs already ready, installing, or with no manager are skipped server-side, so a stale client list can't spawn
|
|
24
|
+
// redundant installs; queued is what actually ran.
|
|
32
25
|
export const WorkspaceInstallSchema = z.object({
|
|
33
26
|
dirs: z
|
|
34
27
|
.array(z.string().max(500))
|
|
@@ -1,51 +1,20 @@
|
|
|
1
1
|
// workspace tree + files
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { ConversationIdSchema } from "./agent.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* There is not one workspace. There is the shared /work tree, and there is one private checkout per isolated
|
|
7
|
-
* conversation, each holding files that conversation created and versions of files it edited. Every workspace
|
|
8
|
-
* read route named a PATH and nothing else, so it could only ever answer from the shared tree, and an agent
|
|
9
|
-
* that had just written `docs/plan.md` in its own checkout described a file the viewer could not open, while
|
|
10
|
-
* an agent that had EDITED a file got something worse: the shared version, same path, different text, with
|
|
11
|
-
* nothing to say so.
|
|
12
|
-
*
|
|
13
|
-
* So the conversation rides the request. Absent ⇒ the shared tree, which is what every existing caller means
|
|
14
|
-
* and why the field is optional rather than a second set of routes. Present ⇒ that conversation's own
|
|
15
|
-
* checkout, resolved daemon-side in ONE place (workspaceRootFor) so the escape guard, the control-plane
|
|
16
|
-
* denylist and the ignore rules apply to it exactly as they do to /work.
|
|
17
|
-
*
|
|
18
|
-
* A conversation that is not isolated resolves BACK to the shared tree rather than failing: the shared tree
|
|
19
|
-
* genuinely is its tree, and a caller should not have to know which mode a conversation runs in to link to a
|
|
20
|
-
* file in it. */
|
|
4
|
+
// Which copy of the workspace a read means: the shared /work tree, or (if `agent` is set) that conversation's own
|
|
5
|
+
// checkout, resolved in one place so the escape guard, denylist and ignore rules apply the same either way.
|
|
21
6
|
export const WorkspaceScopeSchema = z.object({
|
|
22
7
|
agent: ConversationIdSchema.optional().describe(
|
|
23
8
|
"Read a conversation's own private copy of the workspace rather than the shared tree. Leave it out for the shared tree. A conversation that is not working privately resolves back to the shared tree rather than failing, so a link need not know which mode it runs in.",
|
|
24
9
|
),
|
|
25
10
|
});
|
|
26
11
|
export type WorkspaceScope = z.infer<typeof WorkspaceScopeSchema>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* read on both sides of the wire, and the tree walker's own suite was reading a `hidden` field off entries
|
|
34
|
-
* that has never existed there without the compiler minding. The interface is the contract; the schema
|
|
35
|
-
* validates against it, and z.ZodType makes a divergence between the two an error here. */
|
|
36
|
-
/* A SYMLINK, as the tree reports one. Present only on entries that are links; `type` beside it is the type of
|
|
37
|
-
* whatever the link POINTS AT, so a link to a directory expands and a link to a file opens, exactly like the
|
|
38
|
-
* real thing (the model VSCode uses, its FileType carries SymbolicLink as a bit alongside File/Directory,
|
|
39
|
-
* precisely so every consumer can keep asking "file or folder?").
|
|
40
|
-
*
|
|
41
|
-
* `to` is the link's own text, verbatim, `../../.agents/skills/discord`, not the resolved path. That is what
|
|
42
|
-
* the row shows on hover, because it is what the person who made the link wrote and what they would edit.
|
|
43
|
-
*
|
|
44
|
-
* `state` is absent for the ordinary case: it resolves, and it resolves to somewhere inside the workspace.
|
|
45
|
-
* - "broken", nothing at the other end. Listed anyway, because a dangling link is a fact about the
|
|
46
|
-
* workspace worth seeing rather than an entry to hide.
|
|
47
|
-
* - "outside", it resolves to bytes outside the workspace. The daemon will not read, list or descend
|
|
48
|
-
* through it (workspace-files.ts realWithin), so the row is shown and refused, like a locked one. */
|
|
12
|
+
// path is root-relative with forward slashes, feeding straight into the file routes. The interface is declared by hand:
|
|
13
|
+
// zod's inferred type for this recursive getter collapses to `{}` past the first level.
|
|
14
|
+
// `type` alongside a link is its target's type, so a directory link opens like a directory. `to` is the link's literal
|
|
15
|
+
// text, verbatim, what hovering shows and what the author would edit.
|
|
16
|
+
// broken: nothing at the other end; listed anyway.
|
|
17
|
+
// outside: resolves outside the workspace; shown but refused, like a locked entry.
|
|
49
18
|
export interface WorkspaceLink {
|
|
50
19
|
readonly to: string;
|
|
51
20
|
readonly state?: "broken" | "outside" | undefined;
|
|
@@ -66,13 +35,11 @@ export interface WorkspaceTreeEntry {
|
|
|
66
35
|
readonly path: string;
|
|
67
36
|
readonly type: "file" | "dir";
|
|
68
37
|
readonly size?: number | undefined;
|
|
69
|
-
// Ignored
|
|
38
|
+
// Ignored by tooling (node_modules, .git, gitignored paths, browser profiles); client greys the row.
|
|
70
39
|
readonly ignored?: boolean | undefined;
|
|
71
|
-
// Set when this entry is a symlink
|
|
40
|
+
// Set when this entry is a symlink; `type` above is then its target's type.
|
|
72
41
|
readonly link?: WorkspaceLink | undefined;
|
|
73
|
-
//
|
|
74
|
-
// breadth-first budget stopped above it. Either way the client lazy-loads it via /workspace/children on
|
|
75
|
-
// expand, so "not loaded yet" and "empty directory" (`children: []`) stay distinguishable.
|
|
42
|
+
// Absent means not descended (ignored or budget-stopped); lazy-load via /workspace/children, distinct from [].
|
|
76
43
|
readonly children?: readonly WorkspaceTreeEntry[] | undefined;
|
|
77
44
|
}
|
|
78
45
|
export const WorkspaceTreeEntrySchema: z.ZodType<WorkspaceTreeEntry> = z.object({
|
|
@@ -97,14 +64,9 @@ export const WorkspaceTreeEntrySchema: z.ZodType<WorkspaceTreeEntry> = z.object(
|
|
|
97
64
|
export const WorkspaceTreeSchema = z.object({
|
|
98
65
|
root: z.string().describe("The path everything below is relative to."),
|
|
99
66
|
tree: z.array(WorkspaceTreeEntrySchema).describe("The workspace, one entry per file and folder."),
|
|
100
|
-
// How many of the
|
|
67
|
+
// How many of the root's own entries the budget cut (0 = complete); per-dir cuts count on each dir entry.
|
|
101
68
|
hidden: z.number().describe("How many entries at the top level were cut for size. Zero means the listing is complete."),
|
|
102
|
-
|
|
103
|
-
* (workspace/empty-dirs.ts) precisely because it must NOT be read off `tree` above: that listing stops at
|
|
104
|
-
* the entry budget, so a directory below the cut arrives without `children`, which means "not looked at",
|
|
105
|
-
* and the emptiness question would silently shrink to whatever the budget happened to reach, the workspace
|
|
106
|
-
* root and little else. This list is complete, and it says nothing about whether the folders in it were
|
|
107
|
-
* listed. */
|
|
69
|
+
// From its own walk (empty-dirs.ts), not derived from `tree`, which stops at budget and would undercount.
|
|
108
70
|
barren: z
|
|
109
71
|
.array(z.string())
|
|
110
72
|
.describe(
|
|
@@ -112,9 +74,8 @@ export const WorkspaceTreeSchema = z.object({
|
|
|
112
74
|
),
|
|
113
75
|
});
|
|
114
76
|
export type WorkspaceTree = z.infer<typeof WorkspaceTreeSchema>;
|
|
115
|
-
// Lazy-
|
|
116
|
-
//
|
|
117
|
-
// descendants in the same flat `entries` list instead of issuing one request per directory.
|
|
77
|
+
// Lazy-loads one directory's children past the tree walk's budget; depth reads several levels into one flat `entries`
|
|
78
|
+
// list instead of one request per directory.
|
|
118
79
|
export const WorkspaceChildrenQuerySchema = WorkspaceScopeSchema.extend({
|
|
119
80
|
path: z.string().min(1).describe("The folder to open, as a workspace path."),
|
|
120
81
|
depth: z.coerce
|
|
@@ -134,25 +95,20 @@ export const WorkspaceChildrenSchema = z.object({
|
|
|
134
95
|
hidden: z.number().describe("How many entries were cut for size. Zero means the listing is complete."),
|
|
135
96
|
});
|
|
136
97
|
export type WorkspaceChildren = z.infer<typeof WorkspaceChildrenSchema>;
|
|
137
|
-
// Write routes (delete) and the read they mirror. No scope: a conversation's own checkout is
|
|
138
|
-
//
|
|
98
|
+
// Write routes (delete) and the read they mirror. No scope: a conversation's own checkout is read-only through the file
|
|
99
|
+
// API, refused daemon-side.
|
|
139
100
|
export const WorkspaceFileQuerySchema = z.object({ path: z.string().min(1).describe("The file or folder, as a workspace path.") });
|
|
140
101
|
export const WorkspaceMediaTicketQuerySchema = WorkspaceScopeSchema.extend({
|
|
141
102
|
path: z.string().min(1).describe("The media file the ticket should cover."),
|
|
142
103
|
});
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
* the single FILE it was asked for, the resolved one, so a ticket minted against a conversation's checkout
|
|
146
|
-
* buys that file and not its shared-tree namesake (see auth/media-tickets.ts for why scope rather than
|
|
147
|
-
* single-use is what bounds it). `expiresAt` is epoch ms so a player can tell a dead ticket from a dead file. */
|
|
104
|
+
// Credential for <video>/<audio>'s GET /workspace/media, the one route a browser can't header-authenticate. Scoped to
|
|
105
|
+
// the resolved file, so a ticket minted against a checkout can't buy its shared-tree namesake.
|
|
148
106
|
export const WorkspaceMediaTicketSchema = z.object({
|
|
149
107
|
ticket: z.string().describe("Hand this to the streaming route in the query string. It buys exactly the one file it was minted for."),
|
|
150
108
|
expiresAt: z.number().describe("When it stops working, in milliseconds, so a player can tell a dead ticket from a dead file."),
|
|
151
109
|
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
* `limit` how many bytes to serve. The daemon clamps `limit` to its own cap, so an omitted or oversized one is
|
|
155
|
-
* the cap rather than the file. Coerced: these arrive as query strings. */
|
|
110
|
+
// A read of a window: offset negative reads that many bytes from the end (for following a growing log); limit is
|
|
111
|
+
// clamped to the daemon's own cap. Coerced from query strings.
|
|
156
112
|
export const WorkspaceFileReadQuerySchema = WorkspaceScopeSchema.extend({
|
|
157
113
|
path: z.string().min(1).describe("The file to read, as a workspace path."),
|
|
158
114
|
offset: z.coerce
|
|
@@ -171,8 +127,8 @@ export const WorkspaceFileReadQuerySchema = WorkspaceScopeSchema.extend({
|
|
|
171
127
|
"How many bytes to read. Capped by the sandbox, so leaving it out or asking for too much gives you the cap rather than the whole file.",
|
|
172
128
|
),
|
|
173
129
|
});
|
|
174
|
-
//
|
|
175
|
-
//
|
|
130
|
+
// size is the whole file; offset/bytes is the window content decodes from. offset > 0 || offset + bytes < size means
|
|
131
|
+
// there is more to read.
|
|
176
132
|
export const WorkspaceFilePresentSchema = z.object({
|
|
177
133
|
present: z.literal(true).describe("There is something at that path."),
|
|
178
134
|
path: z.string().describe("The path, as asked for."),
|
|
@@ -180,26 +136,15 @@ export const WorkspaceFilePresentSchema = z.object({
|
|
|
180
136
|
size: z.number().describe("How large the whole file is. Compare it with the window below to know whether there is more."),
|
|
181
137
|
offset: z.number().describe("Which byte the window starts at."),
|
|
182
138
|
bytes: z.number().describe("How many bytes the window holds."),
|
|
183
|
-
//
|
|
184
|
-
// checkout doesn't carry the path (see scopedTarget, its checkout is not a superset of /work), which is
|
|
185
|
-
// the one case the reader has to be told about rather than left to assume.
|
|
139
|
+
// True when no conversation was named, or one was but its checkout lacks the file, worth flagging.
|
|
186
140
|
shared: z
|
|
187
141
|
.boolean()
|
|
188
142
|
.describe(
|
|
189
143
|
"Which tree answered. True when no conversation was named, and also when one was but its own copy has no such file, which is the case a reader has to be told about rather than left to assume.",
|
|
190
144
|
),
|
|
191
145
|
});
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
* Most reads in this product are "read it if it is there": the file each extension keeps of what its badge has
|
|
195
|
-
* already shown, a repo's documentation index, a run's result, a directory's own UI document. Absent is their
|
|
196
|
-
* ordinary FIRST state, and every one of them already treats it as a value. Answering those with a 404 made the
|
|
197
|
-
* browser log a failed request per read, around a dozen red lines on every page load, none of which meant
|
|
198
|
-
* anything was wrong, and none of which a `catch` can suppress: the log happens in the network stack before any
|
|
199
|
-
* JavaScript sees the response.
|
|
200
|
-
*
|
|
201
|
-
* A read that is REFUSED (an escape, the control plane, a denylisted path) is still an error, because that is a
|
|
202
|
-
* real answer about the caller rather than about the file. */
|
|
146
|
+
// Nothing there is an answer, not a failure: most reads here are read-it-if-there, and a 404 would spam the browser's
|
|
147
|
+
// network log per miss. A refused read (an escape, a denylisted path) is still an error.
|
|
203
148
|
export const WorkspaceFileAbsentSchema = z.object({
|
|
204
149
|
present: z
|
|
205
150
|
.literal(false)
|
|
@@ -209,10 +154,8 @@ export const WorkspaceFileAbsentSchema = z.object({
|
|
|
209
154
|
path: z.string().describe("The path, as asked for."),
|
|
210
155
|
});
|
|
211
156
|
export const WorkspaceFileSchema = z.discriminatedUnion("present", [WorkspaceFilePresentSchema, WorkspaceFileAbsentSchema]);
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
// `pages/workspace/Foo.vue`, so a clickable mention has to be matched as a path SUFFIX against the real tree,
|
|
215
|
-
// not read as root-relative. `path` is absent when nothing in the workspace ends in that reference.
|
|
157
|
+
// Resolves a possibly-partial path reference (a model's mention, a compiler's path) to the real workspace path it
|
|
158
|
+
// means, matched as a suffix.
|
|
216
159
|
export const WorkspaceResolveQuerySchema = WorkspaceScopeSchema.extend({
|
|
217
160
|
path: z
|
|
218
161
|
.string()
|
|
@@ -225,17 +168,15 @@ export const WorkspaceResolveQuerySchema = WorkspaceScopeSchema.extend({
|
|
|
225
168
|
export const WorkspaceResolveSchema = z.object({
|
|
226
169
|
path: z.string().optional().describe("The real path it means. Absent when nothing in the workspace ends that way."),
|
|
227
170
|
});
|
|
228
|
-
// Direct file management
|
|
229
|
-
//
|
|
171
|
+
// Direct file management (delete, new folder, rename/move, copy). Byte writes and editor saves go through POST
|
|
172
|
+
// /workspace/upload instead, since oRPC can't carry a body.
|
|
230
173
|
export const WorkspaceDirSchema = z.object({ path: z.string().min(1).describe("The folder to create. Missing folders above it are created too.") });
|
|
231
174
|
export const WorkspaceMoveSchema = z.object({
|
|
232
175
|
from: z.string().min(1).describe("What to move or copy, as a workspace path."),
|
|
233
176
|
to: z.string().min(1).describe("Where it should end up. Changing only the last part is how you rename something."),
|
|
234
177
|
});
|
|
235
|
-
// Deterministic
|
|
236
|
-
//
|
|
237
|
-
// existing /workspace/move route. `reason` records the winning signal (magic:<mime>, ext:<ext>,
|
|
238
|
-
// repository:<marker>, text-content, unknown) so the proposal is explainable.
|
|
178
|
+
// Deterministic, no-LLM classification into coarse buckets, read-only, applied via /workspace/move. reason is the
|
|
179
|
+
// winning signal: magic:<mime>, ext:<ext>, repository:<marker>, text-content, or unknown.
|
|
239
180
|
export const WorkspaceBucketSchema = z.enum(["repositories", "documents", "media", "archives", "other"]);
|
|
240
181
|
export type WorkspaceBucket = z.infer<typeof WorkspaceBucketSchema>;
|
|
241
182
|
export const WorkspaceClassificationSchema = z.object({
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { NeedsActionSchema } from "../policy/needs-action.js";
|
|
3
|
+
|
|
4
|
+
// Anything entering the sandbox, any source or format, goes through one pipeline: source to plan (ticked by the owner),
|
|
5
|
+
// apply (re-derived from the held bytes), report (what landed). The outbound half lives in definition.ts and
|
|
6
|
+
// schemas/environment.ts.
|
|
7
|
+
|
|
8
|
+
// Two assistant members rather than one "foreign", so the checklist can badge the source by name.
|
|
9
|
+
export const ArrivalSourceSchema = z.enum(["definition", "bundle", "hermes", "openclaw"]);
|
|
10
|
+
export type ArrivalSource = z.infer<typeof ArrivalSourceSchema>;
|
|
11
|
+
|
|
12
|
+
// Narrower than ArrivalSource: a connected device is scanned for these two only, never for a bundle.
|
|
13
|
+
export const AssistantSourceSchema = z.enum(["hermes", "openclaw"]);
|
|
14
|
+
export type AssistantSource = z.infer<typeof AssistantSourceSchema>;
|
|
15
|
+
|
|
16
|
+
// What an item becomes here, not what it was there: the apply dispatches on this and the checklist groups by it. One
|
|
17
|
+
// enum across every source, so a repo means the same thing whichever way it arrived.
|
|
18
|
+
export const ArrivalGroupSchema = z.enum([
|
|
19
|
+
// The /work tree as a whole, cloned from the remote a definition's `[workspace]` names.
|
|
20
|
+
"workspace",
|
|
21
|
+
// One repository: cloned from its remote, or unpacked with its real git dir from a bundle.
|
|
22
|
+
"repo",
|
|
23
|
+
// Loose files landing in /work: a bundle's workspace bytes, an assistant's notes folder.
|
|
24
|
+
"files",
|
|
25
|
+
// Transcripts, checkpoint timelines, ledgers. Bundle-only — nothing else can reference them.
|
|
26
|
+
"history",
|
|
27
|
+
// The overlay Dockerfile.
|
|
28
|
+
"environment",
|
|
29
|
+
// One connection, landing unauthenticated unless its secret travelled.
|
|
30
|
+
"capability",
|
|
31
|
+
// The agent settings that differ from their defaults.
|
|
32
|
+
"settings",
|
|
33
|
+
// A merge into the workspace's memory file.
|
|
34
|
+
"memory",
|
|
35
|
+
"skill",
|
|
36
|
+
"automation",
|
|
37
|
+
// One credential VALUE, and the only group gated behind the apply's second consent.
|
|
38
|
+
"secret",
|
|
39
|
+
]);
|
|
40
|
+
export type ArrivalGroup = z.infer<typeof ArrivalGroupSchema>;
|
|
41
|
+
|
|
42
|
+
// Two flags, not one: the four sources fail an item for two different reasons.
|
|
43
|
+
// applicable: false when the target already holds this; it cannot be ticked.
|
|
44
|
+
// recommended: false when it can be ticked but the reader should look first.
|
|
45
|
+
export const ArrivalItemSchema = z.object({
|
|
46
|
+
// Deterministic, derived from the artifact ("repo:intentic"), so a re-derived plan names the same items.
|
|
47
|
+
id: z.string(),
|
|
48
|
+
group: ArrivalGroupSchema,
|
|
49
|
+
// The checklist line in plain words ("Repository intentic", "Skill, weather").
|
|
50
|
+
label: z.string(),
|
|
51
|
+
detail: z.string().optional(),
|
|
52
|
+
applicable: z.boolean(),
|
|
53
|
+
// Why it cannot be ticked; present exactly when applicable is false.
|
|
54
|
+
reason: z.string().optional(),
|
|
55
|
+
recommended: z.boolean(),
|
|
56
|
+
// Names of secrets this row would store, never values; moves only when apply sets includeSecrets.
|
|
57
|
+
secrets: z.array(z.string()),
|
|
58
|
+
});
|
|
59
|
+
export type ArrivalItem = z.infer<typeof ArrivalItemSchema>;
|
|
60
|
+
|
|
61
|
+
export const ArrivalPlanSchema = z.object({
|
|
62
|
+
source: ArrivalSourceSchema,
|
|
63
|
+
// Names the held artifact for apply; minted per plan, a new plan replaces the held one.
|
|
64
|
+
token: z.string(),
|
|
65
|
+
// What the artifact calls itself (a definition's name, a bundle's source sandbox); for display only.
|
|
66
|
+
name: z.string().optional(),
|
|
67
|
+
items: z.array(ArrivalItemSchema),
|
|
68
|
+
// Whether the artifact holds credential values at all; the card only asks the second consent when true.
|
|
69
|
+
carriesSecrets: z.boolean(),
|
|
70
|
+
// What the reader saw but won't offer (sessions, logs, pairing state, a refused entry); listed, not silent.
|
|
71
|
+
refused: z.array(z.string()),
|
|
72
|
+
// Known not to move mechanically, shown at preview so the owner ticks knowingly, and again in the report.
|
|
73
|
+
needsAction: z.array(NeedsActionSchema),
|
|
74
|
+
});
|
|
75
|
+
export type ArrivalPlan = z.infer<typeof ArrivalPlanSchema>;
|
|
76
|
+
|
|
77
|
+
export const ArrivalApplySchema = z.object({
|
|
78
|
+
token: z.string(),
|
|
79
|
+
// The ticked ids; ones missing from the re-derived plan are ignored rather than erroring.
|
|
80
|
+
items: z.array(z.string()),
|
|
81
|
+
// The owner's explicit consent to move credential values, asked once on the inbound side, for every source.
|
|
82
|
+
includeSecrets: z.boolean(),
|
|
83
|
+
});
|
|
84
|
+
export type ArrivalApply = z.infer<typeof ArrivalApplySchema>;
|
|
85
|
+
|
|
86
|
+
export const ArrivalReportSchema = z.object({
|
|
87
|
+
applied: z.array(z.object({ id: z.string(), group: ArrivalGroupSchema, label: z.string() })),
|
|
88
|
+
// Ticked but didn't land, each with its reason; distinct from refused rows, which were never attempted.
|
|
89
|
+
failed: z.array(z.object({ id: z.string(), label: z.string(), error: z.string() })),
|
|
90
|
+
refused: z.array(z.string()),
|
|
91
|
+
needsAction: z.array(NeedsActionSchema),
|
|
92
|
+
});
|
|
93
|
+
export type ArrivalReport = z.infer<typeof ArrivalReportSchema>;
|
|
94
|
+
|
|
95
|
+
// One of the owner's own devices: the daemon walks its home folder over the socket it already holds, no packing needed.
|
|
96
|
+
// found absent means connected with nothing to bring in, not an error.
|
|
97
|
+
export const ArrivalHostSchema = z.object({
|
|
98
|
+
id: z.string(),
|
|
99
|
+
online: z.boolean(),
|
|
100
|
+
found: AssistantSourceSchema.optional(),
|
|
101
|
+
// Why this machine can't be read right now (asleep, or its own refusal), in its own words.
|
|
102
|
+
detail: z.string().optional(),
|
|
103
|
+
});
|
|
104
|
+
export type ArrivalHost = z.infer<typeof ArrivalHostSchema>;
|
|
105
|
+
export const ArrivalHostsSchema = z.object({ hosts: z.array(ArrivalHostSchema) });
|
|
106
|
+
|
|
107
|
+
// Reads a setup off a connected device instead of an upload; answers with a plan exactly like the upload door does.
|
|
108
|
+
export const ArrivalScanSchema = z.object({ host: z.string().min(1) });
|
|
109
|
+
export type ArrivalScan = z.infer<typeof ArrivalScanSchema>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { packageRoot } from "@intentic/constants/node";
|
|
4
|
+
import { expect, test } from "vitest";
|
|
5
|
+
import { currentLock } from "./contract-lock.js";
|
|
6
|
+
|
|
7
|
+
// contract.lock.json must match the exported schemas; the git-aware half of this check lives in contract-shrink.mjs.
|
|
8
|
+
// Needs 30s: serializing ~500 schemas can run past vitest's 5s hang-detector default under load.
|
|
9
|
+
test("contract.lock.json matches the schemas this package exports", { timeout: 30_000 }, () => {
|
|
10
|
+
const committed: unknown = JSON.parse(readFileSync(join(packageRoot(import.meta.url), "contract.lock.json"), "utf8"));
|
|
11
|
+
expect(
|
|
12
|
+
currentLock(),
|
|
13
|
+
"the wire contract moved — run `pnpm --filter @intentic/sandbox-contract lock` and commit contract.lock.json with this change. " +
|
|
14
|
+
"If a schema or field was removed or changed (not added), land it as a `type!:` commit with a `Breaking-Note:` trailer " +
|
|
15
|
+
"saying, in the user's words, what stops working and what to do instead.",
|
|
16
|
+
).toEqual(committed);
|
|
17
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// contract.lock.json is every exported schema serialized to canonical JSON Schema, so git can flag a wire-contract
|
|
2
|
+
// change. contract-shrink demands a `!` commit with a Breaking-Note when a schema, field or type shrinks; additions
|
|
3
|
+
// pass freely. Derived from the package's exports, not a hand-kept list.
|
|
4
|
+
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import * as contract from "../index.js";
|
|
7
|
+
|
|
8
|
+
// Canonical key order so two runs are byte-identical and a diff is a real contract change, not key-order noise. Arrays
|
|
9
|
+
// keep zod's own (stable) order.
|
|
10
|
+
const sorted = (value: unknown): unknown => {
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
return value.map(sorted);
|
|
13
|
+
}
|
|
14
|
+
if (typeof value === "object" && value !== null) {
|
|
15
|
+
return Object.fromEntries(
|
|
16
|
+
Object.keys(value)
|
|
17
|
+
.sort()
|
|
18
|
+
.map((key) => [key, sorted((value as Record<string, unknown>)[key])]),
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const currentLock = (): Record<string, unknown> => {
|
|
25
|
+
const lock: Record<string, unknown> = {};
|
|
26
|
+
for (const name of Object.keys(contract).sort()) {
|
|
27
|
+
const value = (contract as Record<string, unknown>)[name];
|
|
28
|
+
if (!(value instanceof z.ZodType)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const schema = sorted(z.toJSONSchema(value, { unrepresentable: "any" })) as Record<string, unknown>;
|
|
33
|
+
// The dialect banner is identical on every entry; pure weight, no signal.
|
|
34
|
+
delete schema["$schema"];
|
|
35
|
+
lock[name] = schema;
|
|
36
|
+
} catch {
|
|
37
|
+
// Holds a place even when unserializable: appearing, disappearing or becoming serializable is still a diff.
|
|
38
|
+
lock[name] = "<unserializable>";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return lock;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// One line per schema, not pretty-printed: keeps the lock short enough that a diff shows which surfaces moved.
|
|
45
|
+
// Path-level detail lives in the lock test and contract-shrink instead.
|
|
46
|
+
export const serializeLock = (lock: Record<string, unknown>): string =>
|
|
47
|
+
`{\n${Object.entries(lock)
|
|
48
|
+
.map(([name, schema]) => `${JSON.stringify(name)}: ${JSON.stringify(schema)}`)
|
|
49
|
+
.join(",\n")}\n}\n`;
|