@intentic/sandbox-contract 1.247.0 → 1.249.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/dist/chores/chores.d.ts.map +1 -1
- package/dist/chores/chores.js.map +1 -1
- package/dist/chores/digest.d.ts.map +1 -1
- package/dist/chores/digest.js.map +1 -1
- package/dist/chores/extension-update.d.ts.map +1 -1
- package/dist/chores/extension-update.js.map +1 -1
- package/dist/chores/fix-deps.d.ts.map +1 -1
- package/dist/chores/fix-deps.js.map +1 -1
- package/dist/chores/index.d.ts +2 -2
- package/dist/chores/index.d.ts.map +1 -1
- package/dist/chores/index.js +1 -1
- package/dist/chores/index.js.map +1 -1
- package/dist/chores/probes.d.ts.map +1 -1
- package/dist/chores/probes.js.map +1 -1
- package/dist/chores/prompt.d.ts.map +1 -1
- package/dist/chores/prompt.js.map +1 -1
- package/dist/chores/stack.d.ts.map +1 -1
- package/dist/chores/stack.js.map +1 -1
- package/dist/chores/verdict.d.ts +7 -1
- package/dist/chores/verdict.d.ts.map +1 -1
- package/dist/chores/verdict.js +8 -0
- package/dist/chores/verdict.js.map +1 -1
- package/dist/contracts/accounts.contract.d.ts.map +1 -1
- package/dist/contracts/accounts.contract.js.map +1 -1
- package/dist/contracts/activity.contract.d.ts +1 -0
- package/dist/contracts/activity.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.d.ts +13 -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 +39 -4
- package/dist/contracts/personas.contract.d.ts.map +1 -1
- package/dist/contracts/personas.contract.js +10 -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 +6 -80
- 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 +10 -10
- package/dist/contracts/settings.contract.d.ts.map +1 -1
- package/dist/contracts/settings.contract.js.map +1 -1
- package/dist/contracts/share.contract.d.ts.map +1 -1
- package/dist/contracts/share.contract.js.map +1 -1
- package/dist/contracts/skills.contract.d.ts.map +1 -1
- package/dist/contracts/skills.contract.js.map +1 -1
- package/dist/contracts/system.contract.d.ts +49 -73
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/contracts/system.contract.js +12 -2
- package/dist/contracts/system.contract.js.map +1 -1
- package/dist/contracts/usage.contract.d.ts.map +1 -1
- package/dist/contracts/usage.contract.js.map +1 -1
- package/dist/contracts/vpn.contract.d.ts.map +1 -1
- package/dist/contracts/vpn.contract.js +1 -1
- package/dist/contracts/vpn.contract.js.map +1 -1
- package/dist/contracts/webext.contract.d.ts.map +1 -1
- package/dist/contracts/webext.contract.js.map +1 -1
- package/dist/contracts/workflows.contract.d.ts +7 -6
- package/dist/contracts/workflows.contract.d.ts.map +1 -1
- package/dist/contracts/workflows.contract.js +12 -3
- package/dist/contracts/workflows.contract.js.map +1 -1
- package/dist/contracts/workspace.contract.d.ts.map +1 -1
- package/dist/contracts/workspace.contract.js.map +1 -1
- package/dist/events/agent-events.d.ts +1237 -0
- package/dist/events/agent-events.d.ts.map +1 -0
- package/dist/events/agent-events.js +226 -0
- package/dist/events/agent-events.js.map +1 -0
- package/dist/events/cards.d.ts +404 -0
- package/dist/events/cards.d.ts.map +1 -0
- package/dist/events/cards.js +179 -0
- package/dist/events/cards.js.map +1 -0
- package/dist/events/resume.d.ts +23 -0
- package/dist/events/resume.d.ts.map +1 -0
- package/dist/events/resume.js +31 -0
- package/dist/events/resume.js.map +1 -0
- package/dist/events/system-events.d.ts +615 -0
- package/dist/events/system-events.d.ts.map +1 -0
- package/dist/events/system-events.js +64 -0
- package/dist/events/system-events.js.map +1 -0
- package/dist/events/transcript.d.ts +1755 -0
- package/dist/events/transcript.d.ts.map +1 -0
- package/dist/events/transcript.js +205 -0
- package/dist/events/transcript.js.map +1 -0
- package/dist/ids/conversation-ids.d.ts +8 -0
- package/dist/ids/conversation-ids.d.ts.map +1 -0
- package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
- package/dist/ids/conversation-ids.js.map +1 -0
- package/dist/ids/hostnames.d.ts.map +1 -0
- package/dist/ids/hostnames.js.map +1 -0
- package/dist/ids/session-names.d.ts.map +1 -0
- package/dist/ids/session-names.js.map +1 -0
- package/dist/ids/share-paths.d.ts.map +1 -0
- package/dist/ids/share-paths.js.map +1 -0
- package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
- package/dist/ids/tunnel-ids.d.ts.map +1 -0
- package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
- package/dist/ids/tunnel-ids.js.map +1 -0
- package/dist/index.d.ts +464 -447
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -47
- package/dist/index.js.map +1 -1
- package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
- package/dist/models/agent-catalog.d.ts.map +1 -0
- package/dist/models/agent-catalog.js.map +1 -0
- package/dist/models/agent-runtimes.d.ts.map +1 -0
- package/dist/models/agent-runtimes.js.map +1 -0
- package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
- package/dist/models/fast-tier.d.ts.map +1 -0
- package/dist/models/fast-tier.js.map +1 -0
- package/dist/models/model-order.d.ts.map +1 -0
- package/dist/models/model-order.js.map +1 -0
- package/dist/{model-pins.d.ts → models/model-pins.d.ts} +2 -4
- package/dist/models/model-pins.d.ts.map +1 -0
- package/dist/models/model-pins.js +22 -0
- package/dist/models/model-pins.js.map +1 -0
- package/dist/{model-roles.d.ts → models/model-roles.d.ts} +25 -30
- package/dist/models/model-roles.d.ts.map +1 -0
- package/dist/{model-roles.js → models/model-roles.js} +30 -27
- 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 +17 -4
- package/dist/schemas/agent.d.ts.map +1 -1
- package/dist/schemas/agent.js +21 -4
- package/dist/schemas/agent.js.map +1 -1
- package/dist/schemas/agents.d.ts +17 -4
- package/dist/schemas/agents.d.ts.map +1 -1
- package/dist/schemas/agents.js +15 -4
- package/dist/schemas/agents.js.map +1 -1
- package/dist/schemas/approvals.d.ts.map +1 -1
- package/dist/schemas/approvals.js.map +1 -1
- package/dist/schemas/automations.d.ts +54 -28
- package/dist/schemas/automations.d.ts.map +1 -1
- package/dist/schemas/automations.js +26 -8
- package/dist/schemas/automations.js.map +1 -1
- package/dist/schemas/capabilities.d.ts +0 -8
- package/dist/schemas/capabilities.d.ts.map +1 -1
- package/dist/schemas/capabilities.js +0 -4
- package/dist/schemas/capabilities.js.map +1 -1
- package/dist/schemas/ci.d.ts +10 -0
- package/dist/schemas/ci.d.ts.map +1 -1
- package/dist/schemas/ci.js +9 -1
- package/dist/schemas/ci.js.map +1 -1
- package/dist/schemas/codebase-health.d.ts.map +1 -1
- package/dist/schemas/codebase-health.js.map +1 -1
- package/dist/schemas/devices.d.ts +90 -0
- package/dist/schemas/devices.d.ts.map +1 -1
- package/dist/schemas/devices.js +10 -1
- package/dist/schemas/devices.js.map +1 -1
- package/dist/schemas/engines.d.ts.map +1 -1
- package/dist/schemas/engines.js.map +1 -1
- package/dist/schemas/environment.d.ts.map +1 -1
- package/dist/schemas/environment.js.map +1 -1
- package/dist/schemas/exit.d.ts.map +1 -1
- package/dist/schemas/exit.js.map +1 -1
- package/dist/schemas/extension-updates.d.ts.map +1 -1
- package/dist/schemas/extension-updates.js.map +1 -1
- package/dist/schemas/git-history.d.ts.map +1 -1
- package/dist/schemas/git-history.js.map +1 -1
- package/dist/schemas/git.d.ts +80 -16
- package/dist/schemas/git.d.ts.map +1 -1
- package/dist/schemas/git.js +37 -25
- package/dist/schemas/git.js.map +1 -1
- package/dist/schemas/history.d.ts.map +1 -1
- package/dist/schemas/history.js.map +1 -1
- package/dist/schemas/hosts.d.ts.map +1 -1
- package/dist/schemas/hosts.js.map +1 -1
- package/dist/schemas/inventory.d.ts.map +1 -1
- package/dist/schemas/inventory.js.map +1 -1
- package/dist/schemas/issues.d.ts +0 -1
- package/dist/schemas/issues.d.ts.map +1 -1
- package/dist/schemas/issues.js +0 -1
- package/dist/schemas/issues.js.map +1 -1
- package/dist/schemas/logs.d.ts.map +1 -1
- package/dist/schemas/logs.js.map +1 -1
- package/dist/schemas/loops.d.ts.map +1 -1
- package/dist/schemas/loops.js +1 -1
- package/dist/schemas/loops.js.map +1 -1
- package/dist/schemas/maintenance.d.ts.map +1 -1
- package/dist/schemas/maintenance.js.map +1 -1
- package/dist/schemas/marketplace.d.ts +0 -4
- package/dist/schemas/marketplace.d.ts.map +1 -1
- package/dist/schemas/panels.d.ts.map +1 -1
- package/dist/schemas/panels.js.map +1 -1
- package/dist/schemas/personas.d.ts +49 -4
- package/dist/schemas/personas.d.ts.map +1 -1
- package/dist/schemas/personas.js +32 -5
- 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 +7 -5
- package/dist/schemas/settings.d.ts.map +1 -1
- package/dist/schemas/settings.js +18 -8
- 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 -5
- package/dist/state/workspace-state.d.ts.map +1 -0
- package/dist/{workspace-state.js → state/workspace-state.js} +25 -1
- 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 +22 -30
- package/src/contracts/providers.contract.ts +4 -17
- package/src/contracts/runner.contract.ts +12 -39
- package/src/contracts/safety.contract.ts +5 -14
- package/src/contracts/secrets.contract.ts +4 -22
- package/src/contracts/sessions.contract.ts +1 -1
- package/src/contracts/settings.contract.ts +4 -10
- package/src/contracts/share.contract.ts +3 -9
- package/src/contracts/skills.contract.ts +4 -15
- package/src/contracts/system.contract.ts +26 -52
- package/src/contracts/usage.contract.ts +7 -21
- package/src/contracts/vpn.contract.ts +9 -16
- package/src/contracts/webext.contract.ts +9 -25
- package/src/contracts/workflows.contract.ts +34 -58
- package/src/contracts/workspace.contract.ts +19 -50
- package/src/events/agent-events.ts +345 -0
- package/src/events/cards.ts +286 -0
- package/src/{events.test.ts → events/resume.test.ts} +4 -19
- package/src/events/resume.ts +60 -0
- package/src/events/system-events.ts +139 -0
- package/src/events/transcript.ts +320 -0
- package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
- package/src/ids/conversation-ids.ts +178 -0
- package/src/ids/hostnames.ts +129 -0
- package/src/ids/session-names.ts +29 -0
- package/src/ids/share-paths.ts +43 -0
- package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
- package/src/ids/tunnel-ids.ts +29 -0
- package/src/index.ts +71 -88
- package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
- package/src/models/agent-catalog.ts +174 -0
- package/src/models/agent-runtimes.ts +201 -0
- package/src/models/capability-ledger.test.ts +84 -0
- package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
- package/src/models/fast-tier.ts +36 -0
- package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
- package/src/models/model-order.ts +163 -0
- package/src/models/model-pins.test.ts +87 -0
- 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 +145 -249
- package/src/schemas/capabilities.ts +127 -414
- package/src/schemas/ci.ts +56 -108
- package/src/schemas/codebase-health.ts +7 -11
- package/src/schemas/devices.ts +98 -321
- package/src/schemas/engines.ts +16 -44
- package/src/schemas/environment.ts +41 -91
- package/src/schemas/exit.ts +24 -81
- package/src/schemas/extension-updates.ts +42 -87
- package/src/schemas/git-history.ts +30 -84
- package/src/schemas/git.ts +141 -256
- package/src/schemas/history.ts +14 -40
- package/src/schemas/hosts.ts +9 -15
- package/src/schemas/inventory.ts +8 -10
- package/src/schemas/issues.ts +66 -134
- package/src/schemas/logs.ts +15 -34
- package/src/schemas/loops.ts +46 -163
- package/src/schemas/maintenance.ts +47 -172
- package/src/schemas/panels.ts +20 -45
- package/src/schemas/personas.ts +85 -168
- 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 +177 -597
- package/src/schemas/share.ts +14 -32
- package/src/schemas/shared.ts +14 -13
- package/src/schemas/system.ts +46 -78
- package/src/schemas/terminal.ts +41 -120
- package/src/schemas/usage.ts +44 -233
- package/src/schemas/version-seam.test.ts +9 -26
- package/src/schemas/vpn.ts +27 -64
- package/src/schemas/webext.ts +22 -53
- package/src/schemas/workflows.ts +57 -183
- package/src/schemas/workspace-repos.ts +12 -24
- package/src/schemas/workspace-search.ts +17 -35
- package/src/schemas/workspace-setup.ts +4 -11
- package/src/schemas/workspace-tree.ts +32 -91
- package/src/state/arrival.ts +109 -0
- package/src/state/contract-lock.test.ts +17 -0
- package/src/state/contract-lock.ts +49 -0
- package/src/state/definition.ts +143 -0
- package/src/state/history-state.ts +103 -0
- package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
- package/src/state/runtime-state.ts +62 -0
- package/src/state/starter.ts +5 -0
- package/src/state/state-portability.ts +27 -0
- package/src/state/versions.ts +26 -0
- package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -173
- 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 +0 -45
- 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/schemas/context.d.ts +0 -30
- package/dist/schemas/context.d.ts.map +0 -1
- package/dist/schemas/context.js +0 -34
- package/dist/schemas/context.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.test.ts +0 -202
- package/src/model-pins.ts +0 -183
- package/src/model-roles.ts +0 -224
- 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/schemas/context.ts +0 -87
- 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 -1096
- /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
- /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
- /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
- /package/dist/{session-names.js → ids/session-names.js} +0 -0
- /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
- /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
- /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
- /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
- /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
- /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
- /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
- /package/dist/{model-order.js → models/model-order.js} +0 -0
- /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
- /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
- /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
- /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
- /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
- /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
- /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
- /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
- /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
- /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
- /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
- /package/dist/{command-run.js → policy/command-run.js} +0 -0
- /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
- /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
- /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
- /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
- /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
- /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
- /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
- /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
- /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
- /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
- /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
- /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
- /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
- /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
- /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
- /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
- /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
- /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
- /package/dist/{request-id.js → protocol/request-id.js} +0 -0
- /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
- /package/dist/{routes.js → protocol/routes.js} +0 -0
- /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
- /package/dist/{sse.js → protocol/sse.js} +0 -0
- /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
- /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
- /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
- /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
- /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
- /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
- /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
- /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
- /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
- /package/dist/{starter.js → state/starter.js} +0 -0
- /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
- /package/dist/{state-portability.js → state/state-portability.js} +0 -0
- /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
- /package/dist/{versions.js → state/versions.js} +0 -0
- /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
- /package/dist/{embed.js → text/embed.js} +0 -0
- /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
- /package/dist/{mentions.js → text/mentions.js} +0 -0
- /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
- /package/dist/{path-refs.js → text/path-refs.js} +0 -0
- /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
- /package/dist/{title.d.ts → text/title.d.ts} +0 -0
- /package/dist/{title.js → text/title.js} +0 -0
- /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
- /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
- /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
- /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
- /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
- /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
- /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
- /package/src/{sse.ts → protocol/sse.ts} +0 -0
- /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
- /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
- /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
- /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
package/src/command-run.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import type { CommandRun } from "./schemas/ci.js";
|
|
2
|
-
|
|
3
|
-
/* THE HEADING OVER A SETTLED RUN, three or four words, because it is read at a glance and from across a view
|
|
4
|
-
* the user may have walked back into, and because it is read in TWO places that must agree: the card the app
|
|
5
|
-
* floats over the workspace, and the notification the daemon sends to a phone when the user is not there to
|
|
6
|
-
* see the card. Two copies of these words drifted once ("Checks failed" on the card, "Check failed" on the
|
|
7
|
-
* phone), which is the whole reason the sentence lives in the package both sides already share.
|
|
8
|
-
*
|
|
9
|
-
* `subject` is what ran, in the words the button used: "Checks" for the pre-push check, "Push" for the push,
|
|
10
|
-
* and the verb the user actually clicked ("Publish", "Sync") where the flow knows it. `passed` is included
|
|
11
|
-
* for totality; no card is raised for it, a pass sends the push and says so where the click was. */
|
|
12
|
-
export interface FollowRunOptions<R extends CommandRun> {
|
|
13
|
-
// The wait between "is it done yet" questions.
|
|
14
|
-
readonly intervalMs: number;
|
|
15
|
-
// Stop following: the caller has moved on. Resolves undefined rather than throwing, the run itself is
|
|
16
|
-
// still going wherever it was, and nobody here has anything to report about it.
|
|
17
|
-
readonly signal?: AbortSignal | undefined;
|
|
18
|
-
// Every state read, settled or not, for a surface that draws progress (the terminal to open, the command).
|
|
19
|
-
readonly onState?: ((run: R) => void) | undefined;
|
|
20
|
-
// A poll that could not be read. NOT the run failing: it is still going on the daemon, and the next tick
|
|
21
|
-
// usually reconnects, so following continues; the caller decides what to show meanwhile.
|
|
22
|
-
readonly onError?: ((cause: unknown) => void) | undefined;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const sleep = (ms: number, signal: AbortSignal | undefined): Promise<void> =>
|
|
26
|
-
new Promise((resolve) => {
|
|
27
|
-
const timer = setTimeout(done, ms);
|
|
28
|
-
function done(): void {
|
|
29
|
-
clearTimeout(timer);
|
|
30
|
-
signal?.removeEventListener("abort", done);
|
|
31
|
-
resolve();
|
|
32
|
-
}
|
|
33
|
-
signal?.addEventListener("abort", done, { once: true });
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
/* FOLLOW A RUN TO ITS VERDICT: read its state until it is no longer running, and answer with the settled run.
|
|
37
|
-
* The one loop under every surface that starts a command and waits for the answer, the web's run watcher and
|
|
38
|
-
* an extension's push pill alike, because a daemon that answers "started" at once (prepush.contract.ts,
|
|
39
|
-
* git.contract.ts push) leaves every caller to write this loop, and each one that did wrote the dropped-poll
|
|
40
|
-
* case differently. Reads once immediately, so a run that has already settled is answered without a wait. */
|
|
41
|
-
export const followCommandRun = async <R extends CommandRun>(read: () => Promise<R>, options: FollowRunOptions<R>): Promise<R | undefined> => {
|
|
42
|
-
const { intervalMs, signal, onState, onError } = options;
|
|
43
|
-
for (;;) {
|
|
44
|
-
if (signal?.aborted === true) {
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
const run = await read();
|
|
49
|
-
onState?.(run);
|
|
50
|
-
if (run.status !== "running") {
|
|
51
|
-
return run;
|
|
52
|
-
}
|
|
53
|
-
} catch (cause) {
|
|
54
|
-
onError?.(cause);
|
|
55
|
-
}
|
|
56
|
-
await sleep(intervalMs, signal);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export const commandRunOutcome = (run: Pick<CommandRun, "status" | "timedOut">, subject: string): string => {
|
|
61
|
-
if (run.timedOut === true) {
|
|
62
|
-
return `${subject} timed out`;
|
|
63
|
-
}
|
|
64
|
-
switch (run.status) {
|
|
65
|
-
case "error":
|
|
66
|
-
return `${subject} couldn't run`;
|
|
67
|
-
case "cancelled":
|
|
68
|
-
return `${subject} stopped`;
|
|
69
|
-
case "failed":
|
|
70
|
-
return `${subject} failed`;
|
|
71
|
-
case "passed":
|
|
72
|
-
return `${subject} passed`;
|
|
73
|
-
default:
|
|
74
|
-
// `idle` reaches a card only when the command was cleared between the click and the request, there
|
|
75
|
-
// is no run any more, so it says so rather than implying one ran and said nothing.
|
|
76
|
-
return `${subject} didn't run`;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { expect, test } from "vitest";
|
|
3
|
-
import { currentLock } from "./contract-lock.js";
|
|
4
|
-
|
|
5
|
-
/* The committed lock and the code must say the same thing: see contract-lock.ts for what the pair buys.
|
|
6
|
-
*
|
|
7
|
-
* This is the HALF that runs everywhere the tests run; the other half (a shrunk lock needs a declared break)
|
|
8
|
-
* lives in _tools/checks/contract-shrink.mjs, which has git and this suite does not.
|
|
9
|
-
*
|
|
10
|
-
* ITS OWN BUDGET, because the default one is a HANG DETECTOR and this test does real work: it serializes every
|
|
11
|
-
* schema this package exports, ~500 of them, to JSON Schema. That is ~100ms with the machine to itself and it
|
|
12
|
-
* measured 8.8s on a runner running every package's suite at once, so vitest's 5s default failed it as a hang
|
|
13
|
-
* over a contract that had not moved: green on a box, red on a busy runner, the trap _tools/testing/src/vitest
|
|
14
|
-
* .ts is written against. 30s is well clear of the work and still reports a genuine hang inside half a minute. */
|
|
15
|
-
test("contract.lock.json matches the schemas this package exports", { timeout: 30_000 }, () => {
|
|
16
|
-
const committed: unknown = JSON.parse(readFileSync(new URL("../contract.lock.json", import.meta.url), "utf8"));
|
|
17
|
-
expect(
|
|
18
|
-
currentLock(),
|
|
19
|
-
"the wire contract moved — run `pnpm --filter @intentic/sandbox-contract lock` and commit contract.lock.json with this change. " +
|
|
20
|
-
"If a schema or field was removed or changed (not added), land it as a `type!:` commit with a `Breaking-Note:` trailer " +
|
|
21
|
-
"saying, in the user's words, what stops working and what to do instead.",
|
|
22
|
-
).toEqual(committed);
|
|
23
|
-
});
|
package/src/contract-lock.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/* THE WIRE SURFACE, AS ONE COMPARABLE DOCUMENT, every zod schema this package exports, serialized to JSON
|
|
2
|
-
* Schema and sorted into a canonical shape. `contract.lock.json` at the package root is this function's
|
|
3
|
-
* committed output, and the pair is what makes "did the contract change?" a question git can answer.
|
|
4
|
-
*
|
|
5
|
-
* Two readers depend on that answer. contract-lock.test.ts fails whenever the committed file is out of step
|
|
6
|
-
* with the code, so a contract change always lands WITH its lock diff, visible in review, attributable to a
|
|
7
|
-
* commit. And the contract-shrink check (_tools/checks/) compares the committed lock against its merge-base to insist that a
|
|
8
|
-
* SHRUNK surface, a schema or field removed, a type changed, arrives as a `!` commit carrying a
|
|
9
|
-
* `Breaking-Note:` trailer, which is what feeds the release's "Breaking changes" section and the update card's
|
|
10
|
-
* warning. Additions pass freely; every persisted-manifest reader parses loosely, so growth breaks nobody.
|
|
11
|
-
*
|
|
12
|
-
* Serialized from the package's EXPORTS rather than a hand-kept list, on the repo's own rule (AGENTS.md:
|
|
13
|
-
* "guard invariants by discovery, not enumeration"): a schema added tomorrow is in the lock tomorrow, and a
|
|
14
|
-
* schema that stops being exported is a removal the lock shows. `unrepresentable: "any"` keeps the rare
|
|
15
|
-
* function-valued corner from throwing, it serializes as `{}`, which still diffs when it moves. */
|
|
16
|
-
|
|
17
|
-
import { z } from "zod";
|
|
18
|
-
import * as contract from "./index.js";
|
|
19
|
-
|
|
20
|
-
// Canonical ordering, so two runs of the same code are byte-identical and a lock diff is a contract diff
|
|
21
|
-
// rather than a key-order shuffle. Arrays keep their order, for `required` and `enum` lists the order zod
|
|
22
|
-
// emits is stable, and sorting them would hide a reorder that is genuinely no change at all anyway.
|
|
23
|
-
const sorted = (value: unknown): unknown => {
|
|
24
|
-
if (Array.isArray(value)) {
|
|
25
|
-
return value.map(sorted);
|
|
26
|
-
}
|
|
27
|
-
if (typeof value === "object" && value !== null) {
|
|
28
|
-
return Object.fromEntries(
|
|
29
|
-
Object.keys(value)
|
|
30
|
-
.sort()
|
|
31
|
-
.map((key) => [key, sorted((value as Record<string, unknown>)[key])]),
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
return value;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export const currentLock = (): Record<string, unknown> => {
|
|
38
|
-
const lock: Record<string, unknown> = {};
|
|
39
|
-
for (const name of Object.keys(contract).sort()) {
|
|
40
|
-
const value = (contract as Record<string, unknown>)[name];
|
|
41
|
-
if (!(value instanceof z.ZodType)) {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
const schema = sorted(z.toJSONSchema(value, { unrepresentable: "any" })) as Record<string, unknown>;
|
|
46
|
-
// The dialect banner is identical on all ~500 entries, pure weight, no surface.
|
|
47
|
-
delete schema["$schema"];
|
|
48
|
-
lock[name] = schema;
|
|
49
|
-
} catch {
|
|
50
|
-
// A schema JSON Schema cannot express at all still holds a place in the lock: its appearance,
|
|
51
|
-
// disappearance, or transition to serializable are each a surface change worth a diff.
|
|
52
|
-
lock[name] = "<unserializable>";
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return lock;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/* ONE LINE PER SCHEMA, on purpose, not JSON.stringify(lock, null, 4). Pretty-printed, the lock is a 35k-line
|
|
59
|
-
* wall nobody scrolls; a line per export keeps it ~500 lines and makes `git diff` read as the list of WHICH
|
|
60
|
-
* surfaces moved, which is the level a reviewer reviews at. The path-level detail lives in the tooling: the
|
|
61
|
-
* lock test diffs parsed objects and the contract-shrink check names the exact removed paths, so nothing is lost by
|
|
62
|
-
* not laying the structure out vertically. */
|
|
63
|
-
export const serializeLock = (lock: Record<string, unknown>): string =>
|
|
64
|
-
`{\n${Object.entries(lock)
|
|
65
|
-
.map(([name, schema]) => `${JSON.stringify(name)}: ${JSON.stringify(schema)}`)
|
|
66
|
-
.join(",\n")}\n}\n`;
|
package/src/conversation-ids.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/* THE NAME A NEW CONVERSATION IS BORN WITH.
|
|
2
|
-
*
|
|
3
|
-
* A conversation's id is not an internal key, it is the most PUBLIC string this app produces. The same value
|
|
4
|
-
* becomes the git branch (`agent/<id>`), the worktree directory on disk, the id in the page's address, and the
|
|
5
|
-
* name printed on every board card (SessionChip). So it is read far more often than it is dereferenced, and by
|
|
6
|
-
* eyes rather than by code: in `git branch`, in a terminal `cd`, on a card in a lane of twenty.
|
|
7
|
-
*
|
|
8
|
-
* It used to be `crypto.randomUUID()`, and a UUID fails every one of those readings. Forty-two characters of
|
|
9
|
-
* hex that no one can say, remember, or tell apart from the card next to it, two agents differ in the fourth
|
|
10
|
-
* character and look identical at a glance, which is exactly when the board is being scanned rather than read.
|
|
11
|
-
* It was also the widest line on a card that has a title to show. The app already knew this everywhere else:
|
|
12
|
-
* the tmux session for the very same turn is called `agent-32b6cb04` (session-names.ts), eight characters,
|
|
13
|
-
* because eight is what a human uses.
|
|
14
|
-
*
|
|
15
|
-
* So a new conversation gets a name instead: `swift-otter-k9m2`. The pair is the part a person actually uses,
|
|
16
|
-
* sayable over a call, distinguishable at a glance, and memorable for the hour anyone cares about it. The
|
|
17
|
-
* four-character tail is the part that makes it an id: the pairs alone would start colliding within a few
|
|
18
|
-
* hundred conversations (a workspace passes that in a month), and a branch name that collides is a worktree
|
|
19
|
-
* that refuses to be created. Random rather than a timestamp because a timestamp in base36 is eight characters
|
|
20
|
-
* of its own and would put the length straight back.
|
|
21
|
-
*
|
|
22
|
-
* The shape satisfies ConversationIdSchema (`^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$`) by construction, every word
|
|
23
|
-
* here is lowercase a–z, the tail is lowercase base36, and the separator is the one the regex allows. That
|
|
24
|
-
* guard is the injection guard for the branch name and the path, so it is the one thing about this module that
|
|
25
|
-
* is not a matter of taste; the test beside it holds the whole generated space to it.
|
|
26
|
-
*
|
|
27
|
-
* Conversations the SANDBOX starts keep their own minters and their own prefixes (an automation's fire is
|
|
28
|
-
* `a-<automation>-<time>`, a CI fix is DERIVED from the run it fixes, see below), those names say WHERE the
|
|
29
|
-
* conversation came from, which beats a random pair for a card the user did not ask for. This is the default
|
|
30
|
-
* for the ones a person opens.
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/* The two halves of the name. Kept short (nothing over seven letters) because the whole point is a string that
|
|
34
|
-
* fits on a card, and visually distinct from one another, no near-rhymes and no two words sharing a first
|
|
35
|
-
* syllable, since a name is only useful here if it can be told apart from its neighbour in the lane. */
|
|
36
|
-
const ADJECTIVES = [
|
|
37
|
-
"amber",
|
|
38
|
-
"brave",
|
|
39
|
-
"brisk",
|
|
40
|
-
"calm",
|
|
41
|
-
"clear",
|
|
42
|
-
"coral",
|
|
43
|
-
"crisp",
|
|
44
|
-
"deft",
|
|
45
|
-
"eager",
|
|
46
|
-
"fair",
|
|
47
|
-
"fleet",
|
|
48
|
-
"glad",
|
|
49
|
-
"grand",
|
|
50
|
-
"keen",
|
|
51
|
-
"kind",
|
|
52
|
-
"lively",
|
|
53
|
-
"lucid",
|
|
54
|
-
"mellow",
|
|
55
|
-
"merry",
|
|
56
|
-
"mild",
|
|
57
|
-
"noble",
|
|
58
|
-
"plain",
|
|
59
|
-
"prime",
|
|
60
|
-
"proud",
|
|
61
|
-
"quick",
|
|
62
|
-
"quiet",
|
|
63
|
-
"rapid",
|
|
64
|
-
"ready",
|
|
65
|
-
"rich",
|
|
66
|
-
"ripe",
|
|
67
|
-
"sharp",
|
|
68
|
-
"sleek",
|
|
69
|
-
"smart",
|
|
70
|
-
"snug",
|
|
71
|
-
"solid",
|
|
72
|
-
"spry",
|
|
73
|
-
"stark",
|
|
74
|
-
"steady",
|
|
75
|
-
"still",
|
|
76
|
-
"stout",
|
|
77
|
-
"sunny",
|
|
78
|
-
"swift",
|
|
79
|
-
"tidy",
|
|
80
|
-
"true",
|
|
81
|
-
"vivid",
|
|
82
|
-
"warm",
|
|
83
|
-
"wise",
|
|
84
|
-
"witty",
|
|
85
|
-
] as const;
|
|
86
|
-
|
|
87
|
-
const NOUNS = [
|
|
88
|
-
"alder",
|
|
89
|
-
"anchor",
|
|
90
|
-
"arbor",
|
|
91
|
-
"arrow",
|
|
92
|
-
"aspen",
|
|
93
|
-
"badger",
|
|
94
|
-
"basin",
|
|
95
|
-
"beacon",
|
|
96
|
-
"birch",
|
|
97
|
-
"bison",
|
|
98
|
-
"cedar",
|
|
99
|
-
"cinder",
|
|
100
|
-
"comet",
|
|
101
|
-
"condor",
|
|
102
|
-
"cove",
|
|
103
|
-
"crane",
|
|
104
|
-
"delta",
|
|
105
|
-
"ember",
|
|
106
|
-
"falcon",
|
|
107
|
-
"fern",
|
|
108
|
-
"fjord",
|
|
109
|
-
"forge",
|
|
110
|
-
"gale",
|
|
111
|
-
"glade",
|
|
112
|
-
"harbor",
|
|
113
|
-
"heron",
|
|
114
|
-
"ivy",
|
|
115
|
-
"lantern",
|
|
116
|
-
"ledger",
|
|
117
|
-
"lichen",
|
|
118
|
-
"lynx",
|
|
119
|
-
"maple",
|
|
120
|
-
"marsh",
|
|
121
|
-
"meadow",
|
|
122
|
-
"mesa",
|
|
123
|
-
"moth",
|
|
124
|
-
"otter",
|
|
125
|
-
"pebble",
|
|
126
|
-
"pine",
|
|
127
|
-
"quarry",
|
|
128
|
-
"quill",
|
|
129
|
-
"raven",
|
|
130
|
-
"reef",
|
|
131
|
-
"ridge",
|
|
132
|
-
"rowan",
|
|
133
|
-
"sable",
|
|
134
|
-
"sage",
|
|
135
|
-
"shale",
|
|
136
|
-
"spruce",
|
|
137
|
-
"summit",
|
|
138
|
-
"thistle",
|
|
139
|
-
"tundra",
|
|
140
|
-
"vale",
|
|
141
|
-
"willow",
|
|
142
|
-
"wren",
|
|
143
|
-
] as const;
|
|
144
|
-
|
|
145
|
-
// How many base36 characters the disambiguating tail carries. Four is 1.7M values per word pair, which puts a
|
|
146
|
-
// collision far past the life of any workspace, and is still short enough to be ignored while reading.
|
|
147
|
-
const TAIL_LENGTH = 4;
|
|
148
|
-
|
|
149
|
-
// A Uint32Array draw has 2^32 possible values. Reject the short remainder above the last full bucket before
|
|
150
|
-
// dividing it into `upperBound` equal ranges; folding that remainder back with `%` makes its first few answers
|
|
151
|
-
// slightly more likely, which is exactly the bias a CSPRNG is meant to avoid.
|
|
152
|
-
const UINT32_RANGE = 0x1_0000_0000;
|
|
153
|
-
const randomBelow = (upperBound: number): number => {
|
|
154
|
-
const bucketSize = Math.floor(UINT32_RANGE / upperBound);
|
|
155
|
-
const limit = bucketSize * upperBound;
|
|
156
|
-
while (true) {
|
|
157
|
-
const value = crypto.getRandomValues(new Uint32Array(1))[0]!;
|
|
158
|
-
if (value < limit) {
|
|
159
|
-
return Math.floor(value / bucketSize);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// Uniform over the array, drawn from the platform CSPRNG, `Math.random()` is seeded per process, and two
|
|
165
|
-
// browser tabs opened in the same instant are exactly the case this must not produce the same name for.
|
|
166
|
-
const pick = <T>(values: readonly T[]): T => values[randomBelow(values.length)]!;
|
|
167
|
-
|
|
168
|
-
// Lowercase base36, one character per draw: 0-9a-z, all of which the id guard accepts.
|
|
169
|
-
const tail = (): string => Array.from({ length: TAIL_LENGTH }, () => randomBelow(36).toString(36)).join("");
|
|
170
|
-
|
|
171
|
-
/* A fresh conversation id: `<adjective>-<noun>-<tail>`, e.g. `swift-otter-k9m2`. Sixteen characters or so
|
|
172
|
-
* against a UUID's thirty-six, and the first eleven of them are the ones a person reads. */
|
|
173
|
-
export const newConversationId = (): string => `${pick(ADJECTIVES)}-${pick(NOUNS)}-${tail()}`;
|
|
174
|
-
|
|
175
|
-
/* WHAT A CI FIX CONVERSATION IS CALLED, and the one id in this file that is DERIVED rather than drawn.
|
|
176
|
-
*
|
|
177
|
-
* It is derived because the question "has anybody already put an agent on this failure?" has to be answerable
|
|
178
|
-
* from the failure alone. Nothing records that anywhere: the fleet roster IS the record (the conversation, its
|
|
179
|
-
* worktree, its branch, its live status), and a roster is keyed by id, so an id nothing can re-compute is a
|
|
180
|
-
* record nothing can read. This one used to carry a timestamp and a per-process counter, which made every fix
|
|
181
|
-
* unfindable the moment the click was over: the board could offer "Fix with agent" and nothing else, forever,
|
|
182
|
-
* however many agents were already working on the row.
|
|
183
|
-
*
|
|
184
|
-
* Deriving it settles a second question the same way. One failed run is now one conversation, so a second press
|
|
185
|
-
* (from another tab, or from a reader who did not scroll to the state) CONTINUES the fix rather than starting a
|
|
186
|
-
* rival agent on a rival branch: the daemon refuses while the turn is live, and adds a turn to the same session
|
|
187
|
-
* once it is not. The old recipe made a fresh worktree every time.
|
|
188
|
-
*
|
|
189
|
-
* THE REPOSITORY IS IN IT because a run id belongs to one forge project, not to the workspace: two repos can
|
|
190
|
-
* each have a run 42, and without the repo their failures would share a conversation. It is slugified rather
|
|
191
|
-
* than hashed because this string is read by people, in `git branch` (`agent/ci-fix-web-4213`), in a path and
|
|
192
|
-
* on a card, and `ci-fix-a3f91c-4213` answers the join just as well while saying nothing. Two repositories
|
|
193
|
-
* whose names agree for the first REPO_SLUG_MAX characters share a slug, and would then share a fix
|
|
194
|
-
* conversation for identically-numbered runs, a pairing rare enough to prefer the readable name over guarding
|
|
195
|
-
* against it.
|
|
196
|
-
*/
|
|
197
|
-
export const CI_FIX_PREFIX = "ci-fix-";
|
|
198
|
-
// Leaves ~24 characters for the run id inside ConversationIdSchema's 64, which is twice the widest id either
|
|
199
|
-
// forge mints.
|
|
200
|
-
const REPO_SLUG_MAX = 32;
|
|
201
|
-
const repoSlug = (repo: string): string =>
|
|
202
|
-
repo
|
|
203
|
-
.toLowerCase()
|
|
204
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
205
|
-
.slice(0, REPO_SLUG_MAX)
|
|
206
|
-
.replace(/^-+|-+$/g, "") || "repo";
|
|
207
|
-
export const ciFixConversationId = (repo: string, runId: number): string => `${CI_FIX_PREFIX}${repoSlug(repo)}-${runId}`;
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
/* WHETHER A FILE ACTUALLY HOLDS A CREDENTIAL, the fact that `secrets.access` only guesses at from a path.
|
|
2
|
-
*
|
|
3
|
-
* The classifier next door (command-classes.ts) reads shell text, so the strongest thing it can honestly say
|
|
4
|
-
* about `sed … ~/.npmrc` is "this names a file that USUALLY holds a token". Usually is not always, and the gap
|
|
5
|
-
* is where the class earns its reputation: most `~/.npmrc` files are three lines of registry config, most
|
|
6
|
-
* `.env` files in a monorepo are ports and feature flags, `~/.ssh/known_hosts` is a list of public keys, and a
|
|
7
|
-
* file that does not exist reads nothing at all. A card raised over one of those is not a near miss, it is
|
|
8
|
-
* noise, and noise is what teaches an owner to answer the card without reading it, which is precisely how a
|
|
9
|
-
* real credential read gets waved through six weeks later.
|
|
10
|
-
*
|
|
11
|
-
* So the class is split in two. The path table says WHICH FILES ARE WORTH LOOKING AT; this says WHAT A
|
|
12
|
-
* CREDENTIAL LOOKS LIKE once one has been opened. It lives here, beside that table, because the two halves are
|
|
13
|
-
* one definition of the class and an enforcement point that has a filesystem should not have to invent the
|
|
14
|
-
* second half for itself (guard/credential-files.ts is the sandbox's fs half; a caller with no filesystem, the
|
|
15
|
-
* browser or the machine agent, simply never asks and the path stands on its name alone).
|
|
16
|
-
*
|
|
17
|
-
* PURE, over the file's own text: no fs, no path logic, nothing to configure. That keeps this package free of
|
|
18
|
-
* a runtime the editor bundle cannot have, and keeps the rule testable as a table of strings.
|
|
19
|
-
*
|
|
20
|
-
* IT ANSWERS THE EASY DIRECTION WELL AND THE HARD ONE CONSERVATIVELY. Everything below is written to say YES
|
|
21
|
-
* on anything credential-shaped, because a yes costs one card and a no costs the whole rule: the only use of
|
|
22
|
-
* this answer is to REMOVE a class the path table already added, so a false yes leaves behavior exactly as it
|
|
23
|
-
* was and a false no silently un-gates a real read.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
/* A KEY THAT NAMES A CREDENTIAL, AND ITS VALUE. Matched as a suffix of whatever the key is spelled as, because
|
|
27
|
-
* these files say the same thing a dozen ways and only the last word carries the meaning: `NPM_TOKEN`,
|
|
28
|
-
* `//registry.npmjs.org/:_authToken`, `"accessToken"`, `aws_secret_access_key`, `password =`.
|
|
29
|
-
*
|
|
30
|
-
* The three value arms are the three ways a value is quoted across the formats this ever sees: JSON's double
|
|
31
|
-
* quotes, a shell-ish dotenv's single quotes, and an ini file's bare rest-of-line.
|
|
32
|
-
*
|
|
33
|
-
* THE SEPARATOR MAY NOT CROSS A LINE, which is the difference between reading a file and reading a soup: with
|
|
34
|
-
* `\s*` around it, an empty `GITHUB_TOKEN=` borrows the NEXT line as its value, and a dotenv of nine blank
|
|
35
|
-
* placeholders reads as eight credentials. Every format here puts a value on its key's own line. */
|
|
36
|
-
const CREDENTIAL_ASSIGNMENT =
|
|
37
|
-
/(?:auth[_-]?token|access[_-]?token|refresh[_-]?token|api[_-]?key|access[_-]?key|secret[_-]?key|client[_-]?secret|private[_-]?key|passwo?rd|passphrase|credentials?|secret|token|bearer)["']?[ \t]*[:=][ \t]*(?:"([^"\n]*)"|'([^'\n]*)'|([^\s"',;}\n]*))/gi;
|
|
38
|
-
|
|
39
|
-
/* A VALUE THAT IS NOT A CREDENTIAL EVEN THOUGH ITS KEY SAYS IT IS: the empty one, the one still holding the
|
|
40
|
-
* template's own words, and the one deferring to an environment variable or a secret reference. Every dotenv
|
|
41
|
-
* that ships in a repo is made of these, and firing on `GITHUB_TOKEN=${GITHUB_TOKEN}` would put a card in front
|
|
42
|
-
* of reading a file whose entire content is the absence of a secret. */
|
|
43
|
-
const PLACEHOLDER =
|
|
44
|
-
/^(?:\$\{?[\w:.-]+\}?|\{\{[^}]*\}\}|<[^>]*>|%\w+%|x{3,}|\*{3,}|\.{3,}|…|(?:your|my|our|the)[-_\s].*|change[-_]?me|replace[-_]?(?:me|this|with)|todo|tbd|fixme|none|null|nil|undefined|true|false|example|placeholder|redacted|dummy|sample|test|fake|secret|password|token|value|here)$/i;
|
|
45
|
-
|
|
46
|
-
/* Shorter than any credential a service actually issues. It clears the dev-compose defaults an agent reads all
|
|
47
|
-
* day (`POSTGRES_PASSWORD=dev`, `password=x`), which are not what a card asking about credential material is
|
|
48
|
-
* for, and it is well under the shortest real token below (a 36-character npm one). */
|
|
49
|
-
const MIN_VALUE = 6;
|
|
50
|
-
|
|
51
|
-
/* A CREDENTIAL RECOGNISABLE WITHOUT ITS KEY: the issuers whose tokens carry their own prefix, the PEM and PuTTY
|
|
52
|
-
* headers that ARE the private key file, and a URL that carries a password in its userinfo (which is the whole
|
|
53
|
-
* content of `.git-credentials`, and the shape a `DATABASE_URL` hides one in).
|
|
54
|
-
*
|
|
55
|
-
* These are checked first and independently of any key, because half of these files have no `key = value` in
|
|
56
|
-
* them at all.
|
|
57
|
-
*
|
|
58
|
-
* SPLIT IN TWO because the two halves are MASKED differently (maskCredentialMaterial below) though they DETECT
|
|
59
|
-
* identically: a structural shape matches a header or an authority whose surroundings must survive the mask (a
|
|
60
|
-
* PEM's body is the secret, not its `-----BEGIN` line; a URL's host is not the secret), and an issued token is
|
|
61
|
-
* the credential entire, wherever it turns up, with nothing around it to keep. */
|
|
62
|
-
const STRUCTURAL_SHAPES = [
|
|
63
|
-
/-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY-----/,
|
|
64
|
-
/PuTTY-User-Key-File-\d/,
|
|
65
|
-
/* scheme://user:password@host — the password is the point; a Sentry DSN (`https://key@host`) has no colon
|
|
66
|
-
* before the `@` and is deliberately not this. A userinfo that is nothing but asterisks is a password
|
|
67
|
-
* somebody already masked (maskCredentialMaterial below leaves this exact shape behind), and reading it as
|
|
68
|
-
* a credential would have a masked file still answer "yes, there is one in here". */
|
|
69
|
-
/\b[a-z][a-z0-9+.-]*:\/\/[^\s/:@]+:(?!\*+@)[^\s/@]{3,}@/i,
|
|
70
|
-
];
|
|
71
|
-
|
|
72
|
-
const ISSUED_TOKENS = [
|
|
73
|
-
/\bnpm_[A-Za-z0-9]{30,}/,
|
|
74
|
-
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{30,}/,
|
|
75
|
-
/\bgithub_pat_[A-Za-z0-9_]{50,}/,
|
|
76
|
-
/\bglpat-[A-Za-z0-9_-]{16,}/,
|
|
77
|
-
/\bxox[baprs]-[A-Za-z0-9-]{10,}/,
|
|
78
|
-
/\bsk-[A-Za-z0-9_-]{20,}/,
|
|
79
|
-
/\b(?:sk|rk)_live_[A-Za-z0-9]{16,}/,
|
|
80
|
-
/\bAKIA[0-9A-Z]{16}\b/,
|
|
81
|
-
/\bASIA[0-9A-Z]{16}\b/,
|
|
82
|
-
/\bAIza[0-9A-Za-z_-]{35}\b/,
|
|
83
|
-
/\bhf_[A-Za-z0-9]{30,}/,
|
|
84
|
-
/\bdop_v1_[a-f0-9]{60,}/,
|
|
85
|
-
// A JWT: three base64url segments, the first two of which decode from `{"` and so always begin `ey`.
|
|
86
|
-
/\bey[A-Za-z0-9_-]{10,}\.ey[A-Za-z0-9_-]{10,}\./,
|
|
87
|
-
];
|
|
88
|
-
|
|
89
|
-
const TOKEN_SHAPES = [...STRUCTURAL_SHAPES, ...ISSUED_TOKENS];
|
|
90
|
-
|
|
91
|
-
/* A VALUE DEFERRED TO SOMEWHERE ELSE, removed before anything is read, because it is not one value but two
|
|
92
|
-
* things to get wrong. `STRIPE_SECRET={{secret:STRIPE}}` holds no credential — that is the platform's own
|
|
93
|
-
* convention for a file that must not hold one — and yet it reads as a credential twice over: the outer
|
|
94
|
-
* assignment has a substantial-looking value, and the reference's own `secret:STRIPE` is a second `key: value`
|
|
95
|
-
* inside it. Cutting them out first is simpler and steadier than teaching the value patterns to survive them. */
|
|
96
|
-
const DEFERRED_VALUE = /\{\{[^}\n]*\}\}|\$\{[^}\n]*\}/g;
|
|
97
|
-
|
|
98
|
-
// Does this file's text hold something worth a card? Handed the WHOLE file by its caller, which is why the
|
|
99
|
-
// caller (not this) is the one that decides how much of a large file is worth reading.
|
|
100
|
-
export const holdsCredentialMaterial = (file: string): boolean => {
|
|
101
|
-
const text = file.replace(DEFERRED_VALUE, "");
|
|
102
|
-
if (TOKEN_SHAPES.some((pattern) => pattern.test(text))) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
for (const match of text.matchAll(CREDENTIAL_ASSIGNMENT)) {
|
|
106
|
-
const value = (match[1] ?? match[2] ?? match[3] ?? "").trim();
|
|
107
|
-
if (value.length >= MIN_VALUE && !PLACEHOLDER.test(value)) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
/* THE SAME DEFINITION APPLIED RATHER THAN ASKED: the text back with every credential in it blanked, and
|
|
115
|
-
* everything else byte for byte.
|
|
116
|
-
*
|
|
117
|
-
* WHERE IT RUNS is what lets it be this blunt (sandbox agent/agent-redaction.ts): only over a tool result whose
|
|
118
|
-
* INPUT named credential material — a Read of `.env`, a `cat ~/.npmrc`, a Grep through `~/.aws`. The name
|
|
119
|
-
* heuristics that run over ARBITRARY output have to be timid, and the timidity is measured rather than
|
|
120
|
-
* theoretical: matching on the key alone rewrote `oauthToken === undefined` mid-comparison and broke a JSON
|
|
121
|
-
* body at `"cacheReadTokens":26170149`. This pass is pointed at a file the path table already calls a
|
|
122
|
-
* credential store, where a `key = value` IS the credential and there is no prose to protect.
|
|
123
|
-
*
|
|
124
|
-
* IT COVERS THE HALF THE VAULT CANNOT. Value masking is exact and complete for what this sandbox STORES, and
|
|
125
|
-
* blind to everything else: the project's own `.env`, a token a deploy minted an hour ago, whatever the owner
|
|
126
|
-
* pasted into the repo this agent was pointed at. Those are the credentials a read actually leaks, and with
|
|
127
|
-
* them blanked a read is worth about as much to a stranger as the file's key names — which is what lets the
|
|
128
|
-
* command gate stop asking about READS and ask about SENDING (sandbox guard/actions.ts).
|
|
129
|
-
*
|
|
130
|
-
* THE MASK IS ANONYMOUS, never a `{{secret:name}}` reference. A reference is a promise that the exits resolve
|
|
131
|
-
* it back to a value, and this pass is inferring from shape: minting one would put a token in the model's hands
|
|
132
|
-
* that resolves to nothing, discovered when the deploy 401s. The cost is stated plainly: a file the model
|
|
133
|
-
* rewrites wholesale from a masked read loses the value it was never shown. That is the same trade the terminal
|
|
134
|
-
* filter has always made, and the alternative is handing the model the credential so it can copy it back.
|
|
135
|
-
*
|
|
136
|
-
* A PuTTY `.ppk` body is the known gap: unlike PEM it has no closing line to bound the mask, so its key
|
|
137
|
-
* material survives this pass. The file still reads as credential material to everything else here, so the gate
|
|
138
|
-
* still asks before a command carrying it reaches the internet. */
|
|
139
|
-
const MASK = "***";
|
|
140
|
-
|
|
141
|
-
// The `g` twins, built once: the tables above are written without `g` because `test` is what the detector
|
|
142
|
-
// wants, and `replace`/`replaceAll` demands one.
|
|
143
|
-
const globally = (patterns: readonly RegExp[]): readonly RegExp[] => patterns.map((pattern) => new RegExp(pattern.source, `${pattern.flags}g`));
|
|
144
|
-
const ISSUED_TOKENS_G = globally(ISSUED_TOKENS);
|
|
145
|
-
const CREDENTIAL_ASSIGNMENT_G = new RegExp(CREDENTIAL_ASSIGNMENT.source, CREDENTIAL_ASSIGNMENT.flags);
|
|
146
|
-
|
|
147
|
-
/* The two structural shapes that mask to something other than themselves. A PEM's header and footer stay so the
|
|
148
|
-
* model can still see WHICH key it is looking at and that a key is what it is looking at; a URL keeps its scheme,
|
|
149
|
-
* user and host, because a `DATABASE_URL` with the host blanked is a connection string nobody can debug. */
|
|
150
|
-
const PRIVATE_KEY_BLOCK = /(-----BEGIN ((?:[A-Z0-9]+ )*)PRIVATE KEY-----)[\s\S]*?(-----END \2PRIVATE KEY-----)/g;
|
|
151
|
-
const URL_PASSWORD = /(\b[a-z][a-z0-9+.-]*:\/\/[^\s/:@]+:)(?!\*+@)[^\s/@]{3,}@/gi;
|
|
152
|
-
|
|
153
|
-
/* A VALUE THAT OPENS A DEFERRED REFERENCE, skipped whole. The detector cuts these out before it looks
|
|
154
|
-
* (DEFERRED_VALUE); masking cannot cut anything out, so it recognises the OPENER instead — and the opener is
|
|
155
|
-
* what a truncated one leaves behind. `STRIPE_SECRET={{secret:STRIPE}}` is the case that matters: the bare-value
|
|
156
|
-
* arm stops at the first `}`, so what reaches this test is `{{secret:STRIPE`, which no whole-value placeholder
|
|
157
|
-
* pattern can match and which masking would turn into `***}}` — this workspace's own convention for a file that
|
|
158
|
-
* holds no credential, silently vandalised. Anchored at the start so a generated password that merely CONTAINS
|
|
159
|
-
* a `$` is still masked. */
|
|
160
|
-
const DEFERRED_OPENER = /^(?:\{\{|\$)/;
|
|
161
|
-
|
|
162
|
-
export const maskCredentialMaterial = (text: string): string =>
|
|
163
|
-
ISSUED_TOKENS_G.reduce((masked, token) => masked.replace(token, MASK), text)
|
|
164
|
-
.replace(PRIVATE_KEY_BLOCK, `$1\n${MASK}\n$3`)
|
|
165
|
-
.replace(URL_PASSWORD, `$1${MASK}@`)
|
|
166
|
-
/* The value of a credential-named assignment, in place, with its key, separator and quoting left
|
|
167
|
-
* standing: `GITHUB_TOKEN="***"` is a line the model can still reason about and still rewrite, where a
|
|
168
|
-
* blanked-out line is a config it cannot read at all. The skips are the detector's own — a value too
|
|
169
|
-
* short to be issued, a template's placeholder, a `${VAR}` or `{{secret:NAME}}` deferred elsewhere —
|
|
170
|
-
* so the two halves agree on what a credential is and nothing is masked that was never one. */
|
|
171
|
-
.replace(CREDENTIAL_ASSIGNMENT_G, (match, ...groups: unknown[]) => {
|
|
172
|
-
const value = (groups[0] ?? groups[1] ?? groups[2] ?? "") as string;
|
|
173
|
-
const trimmed = value.trim();
|
|
174
|
-
if (trimmed.length < MIN_VALUE || PLACEHOLDER.test(trimmed) || DEFERRED_OPENER.test(trimmed)) {
|
|
175
|
-
return match;
|
|
176
|
-
}
|
|
177
|
-
// The value is the last thing the pattern matched, so its own text locates it inside the match
|
|
178
|
-
// without the pattern having to hand back offsets.
|
|
179
|
-
const at = match.lastIndexOf(value);
|
|
180
|
-
return `${match.slice(0, at)}${MASK}${match.slice(at + value.length)}`;
|
|
181
|
-
});
|