@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,78 +1,47 @@
|
|
|
1
1
|
// automations: scheduled agent wake-ups (.intentic/config/automations.json)
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
3
|
+
import { AgentOriginSchema, ModelPinSchema } from "./agent.js";
|
|
4
4
|
import { AgentSummarySchema } from "./agents.js";
|
|
5
5
|
import { entryId } from "./internal.js";
|
|
6
6
|
import { IssuesConfigSchema } from "./issues.js";
|
|
7
|
-
// An automation wakes the agent
|
|
8
|
-
//
|
|
9
|
-
//
|
|
7
|
+
// An automation wakes the agent: the daemon fires each enabled one on its trigger, runs the optional guard command
|
|
8
|
+
// (non-zero exit skips the wake), then runs one turn with the prompt. The manifest is user config; run history is
|
|
9
|
+
// daemon-recorded.
|
|
10
10
|
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
// `
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// installed extensions' declared providers/events rather than a hardcoded enum here.
|
|
23
|
-
// `webchat` is the exception: it has no gateway. An embeddable widget POSTs a visitor's message to
|
|
24
|
-
// /webchat/<id>/message and the agent's reply streams back over SSE. Its address is the public automation id, so
|
|
25
|
-
// allowedOrigins (the widget's embed sites) + a per-conversation rate limit are its abuse boundary, no secret
|
|
26
|
-
// token can live in a browser.
|
|
27
|
-
// `ci` is the other gateway-less source: the daemon's own pipeline receiver (ci/events.ts) dispatches it from a
|
|
28
|
-
// provider webhook, or from the REST poller on a sandbox whose hooks could not be registered. Its channelId is
|
|
29
|
-
// the workspace repo, and `branch` is its SECOND narrowing axis, a fleet pushes a branch per agent, so a
|
|
30
|
-
// pipeline trigger that can only say "this repo" says "every agent's every failure".
|
|
31
|
-
// `workspace` fires from the sandbox's OWN codebase instead of the outside world, see WorkspaceEventKindSchema.
|
|
11
|
+
// schedule: fires on its cron
|
|
12
|
+
// event: fires when an external system POSTs /automations/{id}/fire; its auth token lives outside the manifest
|
|
13
|
+
// (.intentic/secrets/doors.json), never in this versioned, widely-readable file
|
|
14
|
+
// listener: fires from a realtime source's own connection (an extension's gateway), no cron, no token, never reachable
|
|
15
|
+
// via /fire. `channelId`/`eventType`/`mentioned` narrow it; absent means unfiltered. `provider`/`eventType` are open
|
|
16
|
+
// strings validated at upsert against installed extensions' declared vocabulary
|
|
17
|
+
// webchat: the exception with no gateway; a widget POSTs to /webchat/<id>/message, and its abuse boundary is
|
|
18
|
+
// allowedOrigins plus a rate limit, since no secret can live in a browser
|
|
19
|
+
// ci: the daemon's own pipeline receiver; `channelId` is the workspace repo, `branch` narrows further since a fleet
|
|
20
|
+
// pushes one branch per agent
|
|
21
|
+
// workspace: fires from the sandbox's own codebase (WorkspaceEventKindSchema)
|
|
32
22
|
|
|
33
|
-
// What the daemon emits as the fleet works,
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
// conflicted turns most worth a second pair of eyes, and it fires while the user is still looking at the diff,
|
|
40
|
-
// before they decide to land. `agent.landed` fires only when work actually reached the main tree, including an
|
|
41
|
-
// explicit Land from the review panel long after the turn ended.
|
|
42
|
-
//
|
|
43
|
-
// The `deps.*` pair fires from the dependency verifier (workspace/verify-deps.ts) rather than a turn: after a
|
|
44
|
-
// land drifts dependencies, the daemon installs them and runs the tree's own checks, and these are that chain's
|
|
45
|
-
// EDGES, `deps.broken` when the checks go red after a landed change, `deps.fixed` when a later land turns them
|
|
46
|
-
// green again. Edges, not states, on the ci-events precedent (pipeline_broken): a tree that is red and stays
|
|
47
|
-
// red emits nothing, so a fix chore is woken by the breakage, never by the standing colour.
|
|
23
|
+
// What the daemon emits as the fleet works, for a code chore to react to; no token or route, since only the daemon
|
|
24
|
+
// reads these.
|
|
25
|
+
// turn.settled: fires once per isolated turn regardless of outcome, while the diff is still on screen
|
|
26
|
+
// agent.landed: fires only once work reaches the main tree, including a later manual Land
|
|
27
|
+
// deps.broken/deps.fixed: edges from the dependency verifier around a landed change, not standing states, so a chore
|
|
28
|
+
// wakes on the transition, never on a tree that stays red
|
|
48
29
|
export const WorkspaceEventKindSchema = z.enum(["turn.settled", "agent.landed", "deps.broken", "deps.fixed"]);
|
|
49
30
|
export type WorkspaceEventKind = z.infer<typeof WorkspaceEventKindSchema>;
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
// `repos` names the change to look at as an OPEN span, `git -C <dir> diff <from>`, with no upper bound. Each
|
|
54
|
-
// `from` is where that repo stood before the turn (its last landed tip, or the base it branched from); the
|
|
55
|
-
// other end is deliberately the working tree rather than a sha, because a turn that ERRORED left its work
|
|
56
|
-
// uncommitted in the worktree and a commit-to-commit span would report it as nothing at all. `dir` is that
|
|
57
|
-
// repo's dir inside the agent's own checkout, so a chore reads the agent's work without touching /work.
|
|
58
|
-
//
|
|
59
|
-
// No diffstat rides along on purpose: the registry's counts are refreshed at land, so an errored or conflicted
|
|
60
|
-
// turn would carry stale numbers, and a guard that wants a size threshold gets the true one from
|
|
61
|
-
// `git -C <dir> diff --numstat <from>` for the price of one spawn.
|
|
31
|
+
// Payload of a workspace-triggered wake, delivered as JSON in $AUTOMATION_PAYLOAD and appended to the prompt.
|
|
32
|
+
// `repos[].from` is each repo's state before the turn; the span runs to the working tree, not a commit, so an errored
|
|
33
|
+
// turn's uncommitted work still shows.
|
|
62
34
|
export const WorkspaceEventSchema = z.object({
|
|
63
35
|
event: WorkspaceEventKindSchema,
|
|
64
36
|
agentId: z.string(),
|
|
65
37
|
title: z.string().optional(),
|
|
66
38
|
branch: z.string(),
|
|
67
|
-
// `ready` is a clean turn
|
|
68
|
-
//
|
|
39
|
+
// `ready` is a clean turn held on the branch (auto-land off): the moment right before a deliberate Land, when a
|
|
40
|
+
// pre-land review wants to run.
|
|
69
41
|
outcome: z.enum(["landed", "conflict", "ready", "idle", "error"]),
|
|
70
42
|
repos: z.array(z.object({ repo: z.string(), from: z.string(), dir: z.string() })),
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
* tail of its output, bounded, because the payload rides a prompt and a guard's environment, and the full
|
|
74
|
-
* log is one attach away in the project's `--verify` terminal panel. `attempt` counts consecutive red
|
|
75
|
-
* verifies since the last green, so a guard can cap retries in one visible line of shell. */
|
|
43
|
+
// Present only for `deps.*` events: which project broke, the command and exit code, a bounded log tail, and
|
|
44
|
+
// `attempt` counting consecutive reds since the last green.
|
|
76
45
|
deps: z
|
|
77
46
|
.object({
|
|
78
47
|
project: z.string(),
|
|
@@ -88,14 +57,24 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
|
|
|
88
57
|
z.object({
|
|
89
58
|
kind: z.literal("schedule").describe("On a clock."),
|
|
90
59
|
cron: z.string().min(1).describe("When, in cron notation."),
|
|
60
|
+
// Fires only once at least this many other sessions have started since this automation's last wake; a due run
|
|
61
|
+
// short of that is recorded as skipped.
|
|
62
|
+
afterSessions: z
|
|
63
|
+
.number()
|
|
64
|
+
.int()
|
|
65
|
+
.positive()
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Fire only once at least this many new sessions have been run since the last wake. A due run short of that is skipped, and says how far off it is."),
|
|
91
68
|
}),
|
|
92
69
|
z.object({
|
|
93
70
|
kind: z.literal("event").describe("When something calls its webhook."),
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
.
|
|
71
|
+
// Calls per UTC day across every caller; absent falls back to FIRE_DAILY_MAX_DEFAULT, never uncapped.
|
|
72
|
+
dailyMax: z
|
|
73
|
+
.number()
|
|
74
|
+
.int()
|
|
75
|
+
.positive()
|
|
97
76
|
.optional()
|
|
98
|
-
.describe("
|
|
77
|
+
.describe("How many webhook calls a day may wake the agent, across every caller. Absent is a modest default rather than unlimited."),
|
|
99
78
|
}),
|
|
100
79
|
z.object({
|
|
101
80
|
kind: z.literal("listener").describe("When a message arrives from somewhere outside."),
|
|
@@ -109,10 +88,8 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
|
|
|
109
88
|
.min(1)
|
|
110
89
|
.optional()
|
|
111
90
|
.describe("Narrow it to one branch, for the sources that have branches. Absent means every branch of the repositories it matches."),
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
* because it is the same question asked of the same header by the same kind of caller, and an intake
|
|
115
|
-
* whose allowlist lived somewhere else would be a second gate to keep in step with the first. */
|
|
91
|
+
// Shared by webchat and issues, the two gateway-less browser sources; one field since both ask the same
|
|
92
|
+
// question of the same header.
|
|
116
93
|
allowedOrigins: z
|
|
117
94
|
.array(z.string())
|
|
118
95
|
.optional()
|
|
@@ -126,33 +103,24 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
|
|
|
126
103
|
}),
|
|
127
104
|
]);
|
|
128
105
|
export type Trigger = z.infer<typeof TriggerSchema>;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
*
|
|
133
|
-
* Split deliberately into what the WIDGET may read (title/greeting/accent/position/access/googleClientId/
|
|
134
|
-
* turnstileSiteKey, all public by construction, they ship to a stranger's browser) and what only the daemon
|
|
135
|
-
* may read (turnstileSecret). GET /webchat/<id>/config serves the first group by naming it, never by omitting
|
|
136
|
-
* the second: a field added here is invisible to the widget until it is listed there. */
|
|
106
|
+
// The Front Desk widget's settings, present only on `webchat` listener automations. Split into what the widget itself
|
|
107
|
+
// may read (public by construction) and what only the daemon may (turnstileSecret); GET /webchat/<id>/config serves the
|
|
108
|
+
// first group by naming it, never by omitting the second.
|
|
137
109
|
export const WebchatConfigSchema = z.object({
|
|
138
|
-
// `public` admits anyone; `google`
|
|
139
|
-
// public, a Front Desk with no access setting is the anonymous support box it looks like.
|
|
110
|
+
// `public` admits anyone; `google` requires a verifiable Google ID token. Absent means public.
|
|
140
111
|
access: z
|
|
141
112
|
.enum(["public", "google"])
|
|
142
113
|
.optional()
|
|
143
114
|
.describe("Who may write to it. Absent means anyone, which is the anonymous support box it looks like."),
|
|
144
|
-
//
|
|
145
|
-
// reaches the model as untrusted `displayName`, never as identity.
|
|
115
|
+
// Cosmetic: the typed name reaches the model as untrusted `displayName`, never as identity.
|
|
146
116
|
requireName: z
|
|
147
117
|
.boolean()
|
|
148
118
|
.optional()
|
|
149
119
|
.describe(
|
|
150
120
|
"Ask a visitor for a name first. Cosmetic: the name is typed, so it reaches the model as something a stranger said, never as identity.",
|
|
151
121
|
),
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
* Cloudflare account still has something. Absent ⇒ off: the origin allowlist and the rate limit are then
|
|
155
|
-
* the whole boundary, which is the right default for an internal or invite-only page. */
|
|
122
|
+
// `turnstile` needs Cloudflare's own keys; `pow` is a hashcash puzzle the daemon issues itself. Absent leaves the
|
|
123
|
+
// origin allowlist and rate limit as the whole boundary.
|
|
156
124
|
antiBot: z
|
|
157
125
|
.enum(["turnstile", "pow"])
|
|
158
126
|
.optional()
|
|
@@ -161,20 +129,16 @@ export const WebchatConfigSchema = z.object({
|
|
|
161
129
|
),
|
|
162
130
|
turnstileSiteKey: z.string().optional().describe("The public half of those keys, which ships to the visitor's browser."),
|
|
163
131
|
turnstileSecret: z.string().optional().describe("The private half, which the sandbox keeps and the widget never sees."),
|
|
164
|
-
// The site's
|
|
165
|
-
//
|
|
132
|
+
// The site's own client id, not ours: Google only issues a token to an authorized origin, and no client can list
|
|
133
|
+
// every customer's domain.
|
|
166
134
|
googleClientId: z
|
|
167
135
|
.string()
|
|
168
136
|
.optional()
|
|
169
137
|
.describe(
|
|
170
138
|
"The site's own sign-in client id. It cannot be ours: a sign-in is only issued to an approved origin, and no single client can list every customer's domain.",
|
|
171
139
|
),
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
* `accent` is a HEX colour, not any CSS colour, because the widget derives values from its channels rather
|
|
175
|
-
* than just painting it: a glyph step for the scheme, a 14% wash for the send button, a bubble edge, a focus
|
|
176
|
-
* ring, and the label that goes on top (see webchat-widget's styles.ts). A colour we cannot read is a widget
|
|
177
|
-
* with half its accent silently missing, so the unreadable case is rejected here instead. */
|
|
140
|
+
// Widget chrome; `accent` must be a hex colour, not any CSS colour, since the widget derives a scheme, a button
|
|
141
|
+
// wash and a focus ring from its channels, and an unreadable value would leave half the accent missing.
|
|
178
142
|
title: z.string().max(80).optional(),
|
|
179
143
|
greeting: z.string().max(500).optional(),
|
|
180
144
|
accent: z
|
|
@@ -182,42 +146,25 @@ export const WebchatConfigSchema = z.object({
|
|
|
182
146
|
.regex(/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/, "accent must be a hex colour, e.g. #e47100")
|
|
183
147
|
.optional(),
|
|
184
148
|
position: z.enum(["top-right", "top-left", "bottom-right", "bottom-left"]).optional(),
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*
|
|
189
|
-
* `dailyMessageMax` absent ⇒ WEBCHAT_DAILY_MAX_DEFAULT, not uncapped. Every message here is an agent turn
|
|
190
|
-
* billed to the owner, and the per-minute window bounds the RATE without bounding the DAY, twenty a minute,
|
|
191
|
-
* sustained, is tens of thousands of turns before anyone notices. A Front Desk nobody configured should not be
|
|
192
|
-
* able to spend that, so the safe number is the one you get for free and the owner raises it deliberately.
|
|
193
|
-
* `conversationMessageMax` stays optional-means-uncapped: it is per visitor thread, which the daily ceiling
|
|
194
|
-
* already bounds in aggregate. */
|
|
149
|
+
// Two ceilings beyond the route's per-minute window, since a public endpoint's real exposure is cost, not rate:
|
|
150
|
+
// `dailyMessageMax` (absent falls back to WEBCHAT_DAILY_MAX_DEFAULT) caps the automation per UTC day,
|
|
151
|
+
// `conversationMessageMax` caps one visitor thread and stays uncapped by default.
|
|
195
152
|
dailyMessageMax: z.number().int().positive().optional(),
|
|
196
153
|
conversationMessageMax: z.number().int().positive().optional(),
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
// one. Absent ⇒ WEBCHAT_SESSION_TTL_MS (the daemon's default).
|
|
154
|
+
// How long a visitor thread resumes the same conversation before a new message starts a fresh one; absent uses the
|
|
155
|
+
// daemon's own default.
|
|
200
156
|
sessionTtlMinutes: z.number().int().positive().optional(),
|
|
201
157
|
});
|
|
202
158
|
export type WebchatConfig = z.infer<typeof WebchatConfigSchema>;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
* to show the owner what they are already protected by (an invisible limit is one people hit and file as a bug).
|
|
206
|
-
*
|
|
207
|
-
* 200 is chosen to be irrelevant to real support traffic and decisive against a script. A Front Desk answering
|
|
208
|
-
* two hundred questions in one UTC day is a busy one; a scripted flood reaches that in ten seconds and then
|
|
209
|
-
* stops costing anything. */
|
|
159
|
+
// Default daily agent-turn ceiling for an unconfigured Front Desk; high enough for real traffic, low enough to blunt a
|
|
160
|
+
// script.
|
|
210
161
|
export const WEBCHAT_DAILY_MAX_DEFAULT = 200;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
* this daemon, a bundle running on a stranger's page, and the reason this package exists is that both ends of
|
|
215
|
-
* a wire read one definition. The widget imports these as types only (`import type`), so zod never reaches a
|
|
216
|
-
* visitor's browser. */
|
|
162
|
+
// The widget wire: the shapes GET /webchat/<id>/config, GET .../challenge and POST .../message speak, living beside the
|
|
163
|
+
// config they derive from since the widget is a second client of this daemon. Imported as types only, so zod never
|
|
164
|
+
// reaches a visitor's browser.
|
|
217
165
|
|
|
218
|
-
// What the widget is told about itself
|
|
219
|
-
//
|
|
220
|
-
// construction: it ships to any browser that can reach the endpoint from an allowed origin.
|
|
166
|
+
// What the widget is told about itself, fully resolved daemon-side so it carries no fallback logic. Everything here is
|
|
167
|
+
// public by construction: it ships to any browser reaching the endpoint from an allowed origin.
|
|
221
168
|
export const WebchatPublicConfigSchema = z.object({
|
|
222
169
|
automationId: z.string(),
|
|
223
170
|
title: z.string(),
|
|
@@ -226,35 +173,29 @@ export const WebchatPublicConfigSchema = z.object({
|
|
|
226
173
|
position: z.enum(["top-right", "top-left", "bottom-right", "bottom-left"]),
|
|
227
174
|
access: z.enum(["public", "google"]),
|
|
228
175
|
requireName: z.boolean(),
|
|
229
|
-
// "off" is spelled out
|
|
230
|
-
// "no challenge" is the kind of default that turns one serialization bug into an open door.
|
|
176
|
+
// "off" is spelled out, not left absent, so a serialization bug can't silently read as "no challenge".
|
|
231
177
|
antiBot: z.enum(["turnstile", "pow", "off"]),
|
|
232
178
|
turnstileSiteKey: z.string().optional(),
|
|
233
179
|
googleClientId: z.string().optional(),
|
|
234
180
|
});
|
|
235
181
|
export type WebchatPublicConfig = z.infer<typeof WebchatPublicConfigSchema>;
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
* first message; the bug intake per reporter, on a written report), and one solver on the embeds' side
|
|
239
|
-
* (embed.ts, which declares the same two fields without zod). */
|
|
182
|
+
// A proof-of-work challenge: find a nonce whose SHA-256 of `${salt}:${nonce}` starts with `difficulty` zero bits. One
|
|
183
|
+
// shape for every public door (Front Desk, bug intake), and one matching solver, embed.ts.
|
|
240
184
|
export const PowChallengeSchema = z.object({ salt: z.string(), difficulty: z.number().int().positive() });
|
|
241
185
|
export type PowChallenge = z.infer<typeof PowChallengeSchema>;
|
|
242
|
-
// One visitor message
|
|
243
|
-
//
|
|
244
|
-
// allowlist, the challenge and the rate limit are the gate).
|
|
186
|
+
// One visitor message; `conversationId` is the widget's own localStorage id, a thread key rather than a secret — the
|
|
187
|
+
// origin allowlist, challenge and rate limit are the gate.
|
|
245
188
|
export const WebchatMessageSchema = z.object({
|
|
246
189
|
conversationId: z.string().min(1).max(200),
|
|
247
190
|
content: z.string().min(1),
|
|
248
|
-
// What the visitor
|
|
249
|
-
// signed-in visitor's verified name comes from the ID token instead.
|
|
191
|
+
// What the visitor typed as a name; never identity, tagged unverified for the model.
|
|
250
192
|
displayName: z.string().max(200).optional(),
|
|
251
193
|
// A Google ID token from the site's own client id, verified daemon-side against Google's JWKS.
|
|
252
194
|
idToken: z.string().optional(),
|
|
253
195
|
// The anti-bot answer, whichever kind the config asked for. Checked once per conversation, not per message.
|
|
254
196
|
turnstileToken: z.string().optional(),
|
|
255
197
|
powNonce: z.string().optional(),
|
|
256
|
-
//
|
|
257
|
-
// conversation resumes and carries its own context.
|
|
198
|
+
// Sent only on a thread's first message; after that the sandbox's own conversation carries context.
|
|
258
199
|
history: z
|
|
259
200
|
.array(z.object({ author: z.string().optional(), content: z.string() }))
|
|
260
201
|
.max(50)
|
|
@@ -264,9 +205,8 @@ export type WebchatMessage = z.infer<typeof WebchatMessageSchema>;
|
|
|
264
205
|
export const AutomationSchema = z.object({
|
|
265
206
|
id: entryId.describe("The automation's id."),
|
|
266
207
|
trigger: TriggerSchema.describe("What sets it off: a schedule, an event in the workspace, a message arriving from outside, or a webhook."),
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
* fires did) and, for a trigger that arrived with one, `AUTOMATION_PAYLOAD`. */
|
|
208
|
+
// Runs in the workspace root before waking; exit 0 wakes, non-zero is recorded as "skipped". Sees
|
|
209
|
+
// `AUTOMATION_PAYLOAD` when the trigger carried one.
|
|
270
210
|
guard: z
|
|
271
211
|
.string()
|
|
272
212
|
.min(1)
|
|
@@ -277,63 +217,42 @@ export const AutomationSchema = z.object({
|
|
|
277
217
|
prompt: z.string().min(1).describe("What the woken agent is told."),
|
|
278
218
|
// The Front Desk widget's settings, `webchat` listener automations only, ignored on every other trigger.
|
|
279
219
|
webchat: WebchatConfigSchema.optional().describe("Settings for the public chat widget, for an automation that answers visitors."),
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
// greeting and access model, an intake's dedup ceiling and ingest key) and a union of both would be a
|
|
283
|
-
// schema where most fields are wrong for whichever source is reading it.
|
|
220
|
+
// Bug intake settings, `issues` triggers only; its own field rather than a shared bag, since a chat's and an
|
|
221
|
+
// intake's fields mostly don't overlap.
|
|
284
222
|
issues: IssuesConfigSchema.optional().describe(
|
|
285
223
|
"Settings for the bug reporter, for an automation that takes crash reports from your own sites and apps.",
|
|
286
224
|
),
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
*
|
|
290
|
-
* The persona (`actsAs` below) is where a session's toolbox is decided now, because the answer is worth
|
|
291
|
-
* reusing: the same bounds apply to the chat, the workflow and the Front Desk that name the same card. This
|
|
292
|
-
* stays for the job that needs LESS than its persona allows, and only less, which is a rule the composer
|
|
293
|
-
* enforces rather than a convention: an edit here can never hand back a shelf the persona switched off. */
|
|
225
|
+
// Narrows this job's toolbox further than its persona allows; the composer enforces that it can only remove, never
|
|
226
|
+
// restore, a shelf the persona switched off.
|
|
294
227
|
allowedTools: z
|
|
295
228
|
.array(z.string().min(1))
|
|
296
229
|
.optional()
|
|
297
230
|
.describe(
|
|
298
231
|
"Narrow the woken turn to these tools. For one driven by an outside message this list is the real boundary, because prompt wording is only advice and an empty toolbox is not.",
|
|
299
232
|
),
|
|
300
|
-
//
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
233
|
+
// Required ordered ladder (replaces separate agent/harness/model fields): an automation spends real money
|
|
234
|
+
// unwatched, so it must name what it spends rather than inherit a chat's default. Walked in order at fire time to
|
|
235
|
+
// the first rung that can start; each rung is a whole pin (provider+model+effort+harness together).
|
|
236
|
+
models: z
|
|
237
|
+
.array(ModelPinSchema)
|
|
238
|
+
.min(1)
|
|
239
|
+
.max(10)
|
|
240
|
+
.describe(
|
|
241
|
+
"Which models this automation may run on, best first. Required, and nothing is chosen for you: work that fires while nobody is watching spends a real allowance, so it names the models it spends rather than inheriting one. Tried in order, so a spent account does not silently stop the job.",
|
|
242
|
+
),
|
|
243
|
+
// Absent means the provider's first account; pinning matters more here than for a chat, since nobody is watching to
|
|
244
|
+
// notice a stuck one.
|
|
310
245
|
account: z.string().optional().describe("Which account pays for it."),
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
*
|
|
314
|
-
* Absent ⇒ the wake reaches NO logged-in account at all. That is the one place this whole layer stops being
|
|
315
|
-
* a convenience and becomes a boundary, and it is deliberately the strictest default in the schema: an
|
|
316
|
-
* automation fires with nobody at the composer, on a prompt that, for a Front Desk, a stranger helped write.
|
|
317
|
-
* `allowedTools` above already carries this exact reasoning for tools; an unrepeatable public post deserves
|
|
318
|
-
* it at least as much. An automation that genuinely means "post as us" says so, once, in a field a reviewer
|
|
319
|
-
* can see. */
|
|
246
|
+
// Absent means the wake reaches no logged-in account at all, the strictest default here, since nobody is at the
|
|
247
|
+
// composer when it fires.
|
|
320
248
|
actsAs: entryId.optional().describe("Which persona it speaks as. An unwatched turn naming none reaches no signed-in account at all."),
|
|
321
|
-
//
|
|
322
|
-
harness: AgentHarnessSchema.optional().describe("Which agentic loop runs it."),
|
|
323
|
-
// Which model the wake runs on (see agent-catalog.ts modelsFor); absent ⇒ the provider's default.
|
|
324
|
-
model: z.string().optional().describe("Which model runs it."),
|
|
325
|
-
// When true, a fire doesn't wake the agent, it's held in the approvals queue until the owner approves.
|
|
249
|
+
// Held in the approvals queue rather than run; only a person releases it.
|
|
326
250
|
requireApproval: z.boolean().optional().describe("Hold every fire for a person instead of running it. Only a person can release one of those."),
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
* owner's window to cancel or start it early, with silence as consent. What a fix chore wants: time to see
|
|
330
|
-
* "checks broke, a fix is about to start" without a standing decision to make. `requireApproval` wins when
|
|
331
|
-
* both are set, an explicit "ask me" must never quietly become "unless I'm slow". */
|
|
251
|
+
// Held visibly in the approvals queue and run by the daemon itself once the hold elapses with no live turn;
|
|
252
|
+
// `requireApproval`, if also set, always wins.
|
|
332
253
|
holdForSeconds: z.number().optional().describe("Hold each fire this long before running it anyway, which is a delay rather than a decision."),
|
|
333
|
-
//
|
|
334
|
-
//
|
|
335
|
-
// from the trigger, which is why it is stored: a nightly `pnpm audit` sweep and a nightly Stripe poll are
|
|
336
|
-
// both `schedule`, and belong on different shelves. Absent ⇒ an ordinary automation.
|
|
254
|
+
// Pure classification: the trigger alone can't tell a code chore from an ordinary schedule, so this is stored
|
|
255
|
+
// rather than derived.
|
|
337
256
|
chore: z
|
|
338
257
|
.boolean()
|
|
339
258
|
.optional()
|
|
@@ -341,9 +260,8 @@ export const AutomationSchema = z.object({
|
|
|
341
260
|
enabled: z.boolean().describe("Whether it fires at all."),
|
|
342
261
|
});
|
|
343
262
|
export type Automation = z.infer<typeof AutomationSchema>;
|
|
344
|
-
// A wake held for owner approval (.intentic/records/approvals/<id>.json
|
|
345
|
-
//
|
|
346
|
-
// by the daemon (an entryId-safe filename).
|
|
263
|
+
// A wake held for owner approval (.intentic/records/approvals/<id>.json); snapshots the trigger payload so an approved
|
|
264
|
+
// run replays exactly what fired, even across a daemon restart.
|
|
347
265
|
export const AutomationApprovalSchema = z.object({
|
|
348
266
|
id: entryId.describe("This waiting item's own id, which approving and rejecting take."),
|
|
349
267
|
automationId: z.string().describe("Which automation it came from."),
|
|
@@ -354,20 +272,13 @@ export const AutomationApprovalSchema = z.object({
|
|
|
354
272
|
.describe(
|
|
355
273
|
"What set it off, kept whole so an approved wake carries the same thing it would have had. Absent for one on a schedule, which carries nothing.",
|
|
356
274
|
),
|
|
357
|
-
//
|
|
358
|
-
// payload so an approved external wake surfaces on the fleet exactly as an auto one would have.
|
|
275
|
+
// Snapshotted alongside the payload so an approved wake surfaces on the fleet exactly as an automatic one would.
|
|
359
276
|
origin: AgentOriginSchema.optional().describe(
|
|
360
277
|
"Where the message came from, kept alongside the payload so an approved wake appears on the board exactly as an automatic one would have.",
|
|
361
278
|
),
|
|
362
279
|
title: z.string().optional().describe("What the conversation would be called."),
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
*
|
|
366
|
-
* Snapshotted for the same reason the payload is, and it is the half that was missing: without it an
|
|
367
|
-
* approved wake fell through to minting a fresh conversation, so a Front Desk visitor's chat became one card
|
|
368
|
-
* per approved message instead of the single thread the dispatcher had opened for them, a second worktree
|
|
369
|
-
* each time, and an agent that met the visitor again on every turn. Absent for a schedule or a webhook,
|
|
370
|
-
* which own no thread. */
|
|
280
|
+
// The thread this wake belongs to, so approving continues it rather than minting a fresh conversation per approved
|
|
281
|
+
// message.
|
|
371
282
|
conversationId: z
|
|
372
283
|
.string()
|
|
373
284
|
.optional()
|
|
@@ -376,9 +287,8 @@ export const AutomationApprovalSchema = z.object({
|
|
|
376
287
|
),
|
|
377
288
|
sessionId: z.string().optional().describe("The provider session that thread last ran on."),
|
|
378
289
|
createdAt: z.number().describe("When it started waiting, in milliseconds."),
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
* which only the owner may release. */
|
|
290
|
+
// When the daemon may run this itself, for a `holdForSeconds` hold; absent for a `requireApproval` hold, which only
|
|
291
|
+
// the owner releases.
|
|
382
292
|
autoRunAt: z
|
|
383
293
|
.number()
|
|
384
294
|
.optional()
|
|
@@ -387,13 +297,9 @@ export const AutomationApprovalSchema = z.object({
|
|
|
387
297
|
),
|
|
388
298
|
});
|
|
389
299
|
export type AutomationApproval = z.infer<typeof AutomationApprovalSchema>;
|
|
390
|
-
// `rev` is the registry revision this roster was read at
|
|
391
|
-
//
|
|
392
|
-
//
|
|
393
|
-
// mutated agents back. The browser drops any roster older than the newest it has applied, and holds its own
|
|
394
|
-
// pending change until a roster at or past the revision that applied it arrives. See useAgents.ts.
|
|
395
|
-
// `held` is the approvals queue projected onto the board, the wakes waiting at the door, so "needs you" sits
|
|
396
|
-
// beside "running" instead of in a page nobody opens. Defaulted so an older daemon's roster still parses.
|
|
300
|
+
// `rev` is the registry revision this roster was read at: fleet snapshots are last-frame-wins, so the browser drops any
|
|
301
|
+
// roster older than the newest it applied and holds a pending change until a roster past `rev` arrives. `held` is the
|
|
302
|
+
// approvals queue projected onto the board, defaulted for an older daemon's roster.
|
|
397
303
|
export const AgentsListSchema = z.object({
|
|
398
304
|
agents: z.array(AgentSummarySchema).describe("The conversations."),
|
|
399
305
|
rev: z
|
|
@@ -413,49 +319,44 @@ export const AutomationApprovalsListSchema = z.object({ approvals: z.array(Autom
|
|
|
413
319
|
export const AutomationApprovalIdParamSchema = z.object({ id: z.string().describe("Which waiting item.") });
|
|
414
320
|
export const AutomationRunSchema = z.object({
|
|
415
321
|
at: z.number(),
|
|
416
|
-
// skipped
|
|
417
|
-
// the
|
|
418
|
-
//
|
|
419
|
-
//
|
|
322
|
+
// skipped: the guard said no
|
|
323
|
+
// error: the guard passed but the turn errored
|
|
324
|
+
// interrupted: the daemon died mid-wake; without this value an interrupted fire vanishes from history and reads as
|
|
325
|
+
// never having fired
|
|
420
326
|
outcome: z.enum(["completed", "skipped", "error", "interrupted"]),
|
|
421
327
|
detail: z.string().optional(),
|
|
422
|
-
// The stable conversation opened by the wake, so the row can open the provider-neutral agent transcript.
|
|
423
328
|
// Absent only for a run skipped before a conversation was needed.
|
|
424
329
|
conversationId: z.string().optional(),
|
|
425
330
|
});
|
|
426
331
|
export type AutomationRun = z.infer<typeof AutomationRunSchema>;
|
|
427
|
-
// The list row: the stored automation
|
|
332
|
+
// The list row: the stored automation plus its recent runs and next scheduled fire (absent when disabled). Default
|
|
333
|
+
// daily ceiling for an event trigger naming none: generous for a busy monitor, small enough that a leak is a bad day,
|
|
334
|
+
// not a bad month.
|
|
335
|
+
export const FIRE_DAILY_MAX_DEFAULT = 200;
|
|
428
336
|
export const AutomationSummarySchema = AutomationSchema.extend({
|
|
429
337
|
runs: z.array(AutomationRunSchema),
|
|
430
338
|
nextRun: z.number().optional(),
|
|
339
|
+
// Door credentials, attached for a maintainer or owner only, never a viewer or a control-token program; kept in the
|
|
340
|
+
// secrets store, not the manifest.
|
|
341
|
+
webhookToken: z
|
|
342
|
+
.string()
|
|
343
|
+
.optional()
|
|
344
|
+
.describe("What a caller presents at /automations/{id}/fire, for an event automation. Shown to a maintainer or the owner only."),
|
|
345
|
+
ingestKey: z
|
|
346
|
+
.string()
|
|
347
|
+
.optional()
|
|
348
|
+
.describe("What a client with no website origin presents to a bug intake. Shown to a maintainer or the owner only."),
|
|
431
349
|
});
|
|
432
350
|
export type AutomationSummary = z.infer<typeof AutomationSummarySchema>;
|
|
433
351
|
export const AutomationsListSchema = z.object({ automations: z.array(AutomationSummarySchema) });
|
|
434
352
|
export const AutomationIdParamSchema = z.object({ id: z.string() });
|
|
435
353
|
export const AutomationEnabledInputSchema = z.object({ id: z.string(), enabled: z.boolean() });
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
* book, while the daemon's upsert carried a SECOND hand-written list of the providers it would accept. Two
|
|
441
|
-
* lists, edited in different packages, disagreeing was a matter of time; and every area that gained something
|
|
442
|
-
* worth waking on had to edit the automations surface to say so, which is the dependency pointing backwards.
|
|
443
|
-
*
|
|
444
|
-
* Now the daemon merges what IT emits with what every installed extension declares, and serves the result. The
|
|
445
|
-
* composer draws whatever comes back and knows the name of nothing; `upsert` validates against the same merge.
|
|
446
|
-
* An area gains a trigger by declaring it, and the surface it appears on does not change.
|
|
447
|
-
*
|
|
448
|
-
* WHERE A SOURCE IS DECLARED IS WHERE ITS EVENTS COME FROM, `webchat` and `ci` are the daemon's own (it holds
|
|
449
|
-
* the widget endpoint and the pipeline webhook receiver), every other one belongs to the extension whose
|
|
450
|
-
* gateway or backend dispatches it.
|
|
451
|
-
*
|
|
452
|
-
* A TEMPLATE SITS BESIDE THE SOURCE IT FIRES ON, because the source's starter and the template's prompt
|
|
453
|
-
* describe the same payload, and one payload described in two packages is two descriptions to keep in step. A
|
|
454
|
-
* template on the generic `event` webhook has no source to sit beside, so it goes with the pack carrying the
|
|
455
|
-
* capability card it names, which is the same pack the user connected to make it work at all. */
|
|
354
|
+
// The automation catalogue: everything that can wake an agent, and what to start from. The daemon merges what it emits
|
|
355
|
+
// with what every installed extension declares, so an area gains a trigger by declaring it rather than editing this
|
|
356
|
+
// surface. `webchat`/`ci` are the daemon's own sources; a template sits beside the source whose payload it describes,
|
|
357
|
+
// or beside its capability's pack if it fires on the generic `event` webhook.
|
|
456
358
|
|
|
457
|
-
//
|
|
458
|
-
// filter rather than inventing one the provider has no meaning for.
|
|
359
|
+
// Absent means the editor offers no such filter, rather than inventing one meaningless to the provider.
|
|
459
360
|
const TriggerFieldSchema = z.object({ label: z.string().min(1), placeholder: z.string().min(1), hint: z.string().min(1).optional() });
|
|
460
361
|
export const TriggerSourceSchema = z.object({
|
|
461
362
|
// The slug a listener trigger fires on (Trigger.provider).
|
|
@@ -472,24 +373,18 @@ export const TriggerSourceSchema = z.object({
|
|
|
472
373
|
mentionLabel: z.string().min(1).optional(),
|
|
473
374
|
// The provider owns the payload vocabulary, so it owns the first prompt that explains that payload.
|
|
474
375
|
starterPrompt: z.string().min(1).optional(),
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
* in the browser rather than served, because the browser's capability facts are pushed live and a served
|
|
478
|
-
* boolean would be stale between polls. */
|
|
376
|
+
// Any one connected capability is enough; computed client-side, since capability facts are pushed live and a served
|
|
377
|
+
// boolean would go stale between polls.
|
|
479
378
|
requires: z.array(z.string().min(1)).default([]),
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
* off, showing the real label instead of degrading to a bare slug. */
|
|
379
|
+
// Whether the declaring extension is on; disabled ones stay listed so a stored automation using it stays readable
|
|
380
|
+
// and editable.
|
|
483
381
|
enabled: z.boolean(),
|
|
484
382
|
});
|
|
485
383
|
export type TriggerSource = z.infer<typeof TriggerSourceSchema>;
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
* configure, a shelf card that opens the dialog PREFILLED, for a template that cannot work unconfigured (a
|
|
491
|
-
* Front Desk with no allowed sites admits nobody, and a row that silently does nothing is worse
|
|
492
|
-
* than a form). */
|
|
384
|
+
// Absent means it lives in the create dialog's gallery. The two named forms are for what a user wouldn't think to look
|
|
385
|
+
// for:
|
|
386
|
+
// create: a shelf card that makes the automation in one click, switched off, ready to read (every chore is this)
|
|
387
|
+
// configure: a shelf card that opens the dialog prefilled, for a template that can't work unconfigured
|
|
493
388
|
export const TemplateOfferSchema = z.enum(["create", "configure"]);
|
|
494
389
|
export const AutomationTemplateSchema = z.object({
|
|
495
390
|
// Prefills the automation name, so it is also what "does one of these already exist" is asked by.
|
|
@@ -513,11 +408,8 @@ export const AutomationTemplateSchema = z.object({
|
|
|
513
408
|
// trigger beside it for context.
|
|
514
409
|
description: z.string().min(1).optional(),
|
|
515
410
|
offer: TemplateOfferSchema.optional(),
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
*
|
|
519
|
-
* Carried rather than inferred from the trigger, because a nightly dependency sweep and a nightly Stripe
|
|
520
|
-
* poll are both `schedule` and only one of them is about your code. */
|
|
411
|
+
// Whether the created automation watches this codebase, carried since the trigger alone can't distinguish a chore
|
|
412
|
+
// from an ordinary schedule.
|
|
521
413
|
chore: z.boolean().optional(),
|
|
522
414
|
});
|
|
523
415
|
export type AutomationTemplate = z.infer<typeof AutomationTemplateSchema>;
|