@intentic/sandbox-contract 1.248.0 → 1.249.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/dist/chores/chores.d.ts.map +1 -1
- package/dist/chores/chores.js.map +1 -1
- package/dist/chores/digest.d.ts.map +1 -1
- package/dist/chores/digest.js.map +1 -1
- package/dist/chores/extension-update.d.ts.map +1 -1
- package/dist/chores/extension-update.js.map +1 -1
- package/dist/chores/fix-deps.d.ts.map +1 -1
- package/dist/chores/fix-deps.js.map +1 -1
- package/dist/chores/index.d.ts +2 -2
- package/dist/chores/index.d.ts.map +1 -1
- package/dist/chores/index.js +1 -1
- package/dist/chores/index.js.map +1 -1
- package/dist/chores/probes.d.ts.map +1 -1
- package/dist/chores/probes.js.map +1 -1
- package/dist/chores/prompt.d.ts.map +1 -1
- package/dist/chores/prompt.js.map +1 -1
- package/dist/chores/stack.d.ts.map +1 -1
- package/dist/chores/stack.js.map +1 -1
- package/dist/chores/verdict.d.ts +7 -1
- package/dist/chores/verdict.d.ts.map +1 -1
- package/dist/chores/verdict.js +8 -0
- package/dist/chores/verdict.js.map +1 -1
- package/dist/contracts/accounts.contract.d.ts.map +1 -1
- package/dist/contracts/accounts.contract.js.map +1 -1
- package/dist/contracts/activity.contract.d.ts +1 -0
- package/dist/contracts/activity.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.d.ts +12 -205
- package/dist/contracts/agent.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.js +2 -1
- package/dist/contracts/agent.contract.js.map +1 -1
- package/dist/contracts/agents.contract.d.ts +228 -54
- package/dist/contracts/agents.contract.d.ts.map +1 -1
- package/dist/contracts/agents.contract.js +11 -2
- package/dist/contracts/agents.contract.js.map +1 -1
- package/dist/contracts/automations.contract.d.ts +35 -17
- package/dist/contracts/automations.contract.d.ts.map +1 -1
- package/dist/contracts/automations.contract.js +10 -1
- package/dist/contracts/automations.contract.js.map +1 -1
- package/dist/contracts/capabilities.contract.d.ts +0 -12
- package/dist/contracts/capabilities.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.js +1 -1
- package/dist/contracts/capabilities.contract.js.map +1 -1
- package/dist/contracts/chores.contract.d.ts.map +1 -1
- package/dist/contracts/chores.contract.js.map +1 -1
- package/dist/contracts/ci.contract.d.ts +9 -0
- package/dist/contracts/ci.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.js.map +1 -1
- package/dist/contracts/exit.contract.d.ts.map +1 -1
- package/dist/contracts/exit.contract.js +1 -1
- package/dist/contracts/exit.contract.js.map +1 -1
- package/dist/contracts/extensions.contract.d.ts.map +1 -1
- package/dist/contracts/extensions.contract.js.map +1 -1
- package/dist/contracts/git.contract.d.ts +45 -6
- package/dist/contracts/git.contract.d.ts.map +1 -1
- package/dist/contracts/git.contract.js +9 -9
- package/dist/contracts/git.contract.js.map +1 -1
- package/dist/contracts/host.contract.d.ts +2 -0
- package/dist/contracts/host.contract.d.ts.map +1 -1
- package/dist/contracts/host.contract.js.map +1 -1
- package/dist/contracts/intentic.contract.js +1 -1
- package/dist/contracts/intentic.contract.js.map +1 -1
- package/dist/contracts/logs.contract.d.ts.map +1 -1
- package/dist/contracts/logs.contract.js.map +1 -1
- package/dist/contracts/loops.contract.d.ts.map +1 -1
- package/dist/contracts/loops.contract.js.map +1 -1
- package/dist/contracts/personas.contract.d.ts +1 -0
- package/dist/contracts/personas.contract.d.ts.map +1 -1
- package/dist/contracts/personas.contract.js +1 -1
- package/dist/contracts/personas.contract.js.map +1 -1
- package/dist/contracts/providers.contract.d.ts.map +1 -1
- package/dist/contracts/providers.contract.js.map +1 -1
- package/dist/contracts/runner.contract.d.ts +97 -171
- package/dist/contracts/runner.contract.d.ts.map +1 -1
- package/dist/contracts/runner.contract.js +2 -2
- package/dist/contracts/runner.contract.js.map +1 -1
- package/dist/contracts/safety.contract.d.ts.map +1 -1
- package/dist/contracts/safety.contract.js +1 -1
- package/dist/contracts/safety.contract.js.map +1 -1
- package/dist/contracts/secrets.contract.d.ts.map +1 -1
- package/dist/contracts/secrets.contract.js.map +1 -1
- package/dist/contracts/sessions.contract.d.ts +2 -41
- package/dist/contracts/sessions.contract.d.ts.map +1 -1
- package/dist/contracts/sessions.contract.js +1 -1
- package/dist/contracts/sessions.contract.js.map +1 -1
- package/dist/contracts/settings.contract.d.ts +8 -18
- package/dist/contracts/settings.contract.d.ts.map +1 -1
- package/dist/contracts/settings.contract.js.map +1 -1
- package/dist/contracts/share.contract.d.ts.map +1 -1
- package/dist/contracts/share.contract.js.map +1 -1
- package/dist/contracts/skills.contract.d.ts.map +1 -1
- package/dist/contracts/skills.contract.js.map +1 -1
- package/dist/contracts/system.contract.d.ts +49 -73
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/contracts/system.contract.js +12 -2
- package/dist/contracts/system.contract.js.map +1 -1
- package/dist/contracts/usage.contract.d.ts.map +1 -1
- package/dist/contracts/usage.contract.js.map +1 -1
- package/dist/contracts/vpn.contract.d.ts.map +1 -1
- package/dist/contracts/vpn.contract.js +1 -1
- package/dist/contracts/vpn.contract.js.map +1 -1
- package/dist/contracts/webext.contract.d.ts.map +1 -1
- package/dist/contracts/webext.contract.js.map +1 -1
- package/dist/contracts/workflows.contract.d.ts +7 -6
- package/dist/contracts/workflows.contract.d.ts.map +1 -1
- package/dist/contracts/workflows.contract.js +12 -3
- package/dist/contracts/workflows.contract.js.map +1 -1
- package/dist/contracts/workspace.contract.d.ts.map +1 -1
- package/dist/contracts/workspace.contract.js.map +1 -1
- package/dist/events/agent-events.d.ts +1237 -0
- package/dist/events/agent-events.d.ts.map +1 -0
- package/dist/events/agent-events.js +226 -0
- package/dist/events/agent-events.js.map +1 -0
- package/dist/events/cards.d.ts +404 -0
- package/dist/events/cards.d.ts.map +1 -0
- package/dist/events/cards.js +179 -0
- package/dist/events/cards.js.map +1 -0
- package/dist/events/resume.d.ts +23 -0
- package/dist/events/resume.d.ts.map +1 -0
- package/dist/events/resume.js +31 -0
- package/dist/events/resume.js.map +1 -0
- package/dist/events/system-events.d.ts +615 -0
- package/dist/events/system-events.d.ts.map +1 -0
- package/dist/events/system-events.js +64 -0
- package/dist/events/system-events.js.map +1 -0
- package/dist/events/transcript.d.ts +1755 -0
- package/dist/events/transcript.d.ts.map +1 -0
- package/dist/events/transcript.js +205 -0
- package/dist/events/transcript.js.map +1 -0
- package/dist/ids/conversation-ids.d.ts +8 -0
- package/dist/ids/conversation-ids.d.ts.map +1 -0
- package/dist/{conversation-ids.js → ids/conversation-ids.js} +13 -0
- package/dist/ids/conversation-ids.js.map +1 -0
- package/dist/ids/hostnames.d.ts.map +1 -0
- package/dist/ids/hostnames.js.map +1 -0
- package/dist/ids/session-names.d.ts.map +1 -0
- package/dist/ids/session-names.js.map +1 -0
- package/dist/ids/share-paths.d.ts.map +1 -0
- package/dist/ids/share-paths.js.map +1 -0
- package/dist/{tunnel-ids.d.ts → ids/tunnel-ids.d.ts} +1 -0
- package/dist/ids/tunnel-ids.d.ts.map +1 -0
- package/dist/{tunnel-ids.js → ids/tunnel-ids.js} +1 -0
- package/dist/ids/tunnel-ids.js.map +1 -0
- package/dist/index.d.ts +423 -450
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -46
- package/dist/index.js.map +1 -1
- package/dist/{agent-catalog.d.ts → models/agent-catalog.d.ts} +2 -2
- package/dist/models/agent-catalog.d.ts.map +1 -0
- package/dist/models/agent-catalog.js.map +1 -0
- package/dist/models/agent-runtimes.d.ts.map +1 -0
- package/dist/models/agent-runtimes.js.map +1 -0
- package/dist/{fast-tier.d.ts → models/fast-tier.d.ts} +1 -1
- package/dist/models/fast-tier.d.ts.map +1 -0
- package/dist/models/fast-tier.js.map +1 -0
- package/dist/models/model-order.d.ts.map +1 -0
- package/dist/models/model-order.js.map +1 -0
- package/dist/{model-pins.d.ts → models/model-pins.d.ts} +1 -1
- package/dist/models/model-pins.d.ts.map +1 -0
- package/dist/models/model-pins.js.map +1 -0
- package/dist/{model-roles.d.ts → models/model-roles.d.ts} +0 -33
- package/dist/models/model-roles.d.ts.map +1 -0
- package/dist/{model-roles.js → models/model-roles.js} +0 -35
- package/dist/models/model-roles.js.map +1 -0
- package/dist/{plan-pools.d.ts → models/plan-pools.d.ts} +1 -1
- package/dist/models/plan-pools.d.ts.map +1 -0
- package/dist/models/plan-pools.js.map +1 -0
- package/dist/models/prompt-complexity.d.ts.map +1 -0
- package/dist/models/prompt-complexity.js.map +1 -0
- package/dist/models/provider-specs.d.ts.map +1 -0
- package/dist/models/provider-specs.js.map +1 -0
- package/dist/policy/approvals-execution.d.ts.map +1 -0
- package/dist/policy/approvals-execution.js.map +1 -0
- package/dist/{batch-runs.d.ts → policy/batch-runs.d.ts} +5 -1
- package/dist/policy/batch-runs.d.ts.map +1 -0
- package/dist/{batch-runs.js → policy/batch-runs.js} +10 -7
- package/dist/policy/batch-runs.js.map +1 -0
- package/dist/policy/capability-env.d.ts.map +1 -0
- package/dist/policy/capability-env.js.map +1 -0
- package/dist/policy/capability-secrets.d.ts.map +1 -0
- package/dist/policy/capability-secrets.js.map +1 -0
- package/dist/{card-status.d.ts → policy/card-status.d.ts} +2 -2
- package/dist/policy/card-status.d.ts.map +1 -0
- package/dist/{card-status.js → policy/card-status.js} +1 -5
- package/dist/policy/card-status.js.map +1 -0
- package/dist/{command-classes.d.ts → policy/command-classes.d.ts} +6 -2
- package/dist/policy/command-classes.d.ts.map +1 -0
- package/dist/{command-classes.js → policy/command-classes.js} +48 -11
- package/dist/policy/command-classes.js.map +1 -0
- package/dist/{command-run.d.ts → policy/command-run.d.ts} +1 -1
- package/dist/policy/command-run.d.ts.map +1 -0
- package/dist/policy/command-run.js.map +1 -0
- package/dist/policy/control-scopes.d.ts +16 -0
- package/dist/policy/control-scopes.d.ts.map +1 -0
- package/dist/policy/control-scopes.js +26 -0
- package/dist/policy/control-scopes.js.map +1 -0
- package/dist/policy/credential-material.d.ts.map +1 -0
- package/dist/policy/credential-material.js.map +1 -0
- package/dist/policy/needs-action.d.ts.map +1 -0
- package/dist/policy/needs-action.js.map +1 -0
- package/dist/policy/output-fields.d.ts.map +1 -0
- package/dist/policy/output-fields.js.map +1 -0
- package/dist/policy/overlay-lint.d.ts.map +1 -0
- package/dist/policy/overlay-lint.js.map +1 -0
- package/dist/policy/owner-ticket.d.ts.map +1 -0
- package/dist/{owner-ticket.js → policy/owner-ticket.js} +1 -1
- package/dist/policy/owner-ticket.js.map +1 -0
- package/dist/{safety-policy.d.ts → policy/safety-policy.d.ts} +6 -5
- package/dist/policy/safety-policy.d.ts.map +1 -0
- package/dist/{safety-policy.js → policy/safety-policy.js} +12 -12
- package/dist/policy/safety-policy.js.map +1 -0
- package/dist/policy/search-globs.d.ts.map +1 -0
- package/dist/policy/search-globs.js.map +1 -0
- package/dist/protocol/container-requirements.d.ts +20 -0
- package/dist/protocol/container-requirements.d.ts.map +1 -0
- package/dist/protocol/container-requirements.js +23 -0
- package/dist/protocol/container-requirements.js.map +1 -0
- package/dist/{host-protocol.d.ts → protocol/host-protocol.d.ts} +1 -0
- package/dist/protocol/host-protocol.d.ts.map +1 -0
- package/dist/{host-protocol.js → protocol/host-protocol.js} +1 -0
- package/dist/protocol/host-protocol.js.map +1 -0
- package/dist/protocol/ingress-contract.d.ts.map +1 -0
- package/dist/{ingress-contract.js → protocol/ingress-contract.js} +1 -1
- package/dist/protocol/ingress-contract.js.map +1 -0
- package/dist/protocol/ingress-protocol.d.ts.map +1 -0
- package/dist/protocol/ingress-protocol.js.map +1 -0
- package/dist/protocol/listener-protocol.d.ts.map +1 -0
- package/dist/{listener-protocol.js → protocol/listener-protocol.js} +1 -1
- package/dist/protocol/listener-protocol.js.map +1 -0
- package/dist/{peer-dial.d.ts → protocol/peer-dial.d.ts} +4 -1
- package/dist/protocol/peer-dial.d.ts.map +1 -0
- package/dist/{peer-dial.js → protocol/peer-dial.js} +51 -10
- package/dist/protocol/peer-dial.js.map +1 -0
- package/dist/protocol/peer-mcp-server.d.ts.map +1 -0
- package/dist/protocol/peer-mcp-server.js.map +1 -0
- package/dist/protocol/request-id.d.ts.map +1 -0
- package/dist/protocol/request-id.js.map +1 -0
- package/dist/protocol/routes.d.ts.map +1 -0
- package/dist/protocol/routes.js.map +1 -0
- package/dist/{runner-protocol.d.ts → protocol/runner-protocol.d.ts} +1 -0
- package/dist/protocol/runner-protocol.d.ts.map +1 -0
- package/dist/{runner-protocol.js → protocol/runner-protocol.js} +2 -1
- package/dist/protocol/runner-protocol.js.map +1 -0
- package/dist/protocol/sse.d.ts.map +1 -0
- package/dist/protocol/sse.js.map +1 -0
- package/dist/{terminal-protocol.d.ts → protocol/terminal-protocol.d.ts} +1 -3
- package/dist/protocol/terminal-protocol.d.ts.map +1 -0
- package/dist/protocol/terminal-protocol.js.map +1 -0
- package/dist/protocol/webext-links.d.ts.map +1 -0
- package/dist/protocol/webext-links.js.map +1 -0
- package/dist/{webext-protocol.d.ts → protocol/webext-protocol.d.ts} +1 -0
- package/dist/protocol/webext-protocol.d.ts.map +1 -0
- package/dist/{webext-protocol.js → protocol/webext-protocol.js} +1 -0
- package/dist/protocol/webext-protocol.js.map +1 -0
- package/dist/schemas/activity.d.ts +2 -0
- package/dist/schemas/activity.d.ts.map +1 -1
- package/dist/schemas/activity.js +4 -0
- package/dist/schemas/activity.js.map +1 -1
- package/dist/schemas/agent.d.ts +16 -4
- package/dist/schemas/agent.d.ts.map +1 -1
- package/dist/schemas/agent.js +21 -4
- package/dist/schemas/agent.js.map +1 -1
- package/dist/schemas/agents.d.ts +17 -4
- package/dist/schemas/agents.d.ts.map +1 -1
- package/dist/schemas/agents.js +15 -4
- package/dist/schemas/agents.js.map +1 -1
- package/dist/schemas/approvals.d.ts.map +1 -1
- package/dist/schemas/approvals.js.map +1 -1
- package/dist/schemas/automations.d.ts +54 -28
- package/dist/schemas/automations.d.ts.map +1 -1
- package/dist/schemas/automations.js +26 -8
- package/dist/schemas/automations.js.map +1 -1
- package/dist/schemas/capabilities.d.ts +0 -8
- package/dist/schemas/capabilities.d.ts.map +1 -1
- package/dist/schemas/capabilities.js +0 -4
- package/dist/schemas/capabilities.js.map +1 -1
- package/dist/schemas/ci.d.ts +10 -0
- package/dist/schemas/ci.d.ts.map +1 -1
- package/dist/schemas/ci.js +9 -1
- package/dist/schemas/ci.js.map +1 -1
- package/dist/schemas/codebase-health.d.ts.map +1 -1
- package/dist/schemas/codebase-health.js.map +1 -1
- package/dist/schemas/devices.d.ts +90 -0
- package/dist/schemas/devices.d.ts.map +1 -1
- package/dist/schemas/devices.js +10 -1
- package/dist/schemas/devices.js.map +1 -1
- package/dist/schemas/engines.d.ts.map +1 -1
- package/dist/schemas/engines.js.map +1 -1
- package/dist/schemas/environment.d.ts.map +1 -1
- package/dist/schemas/environment.js.map +1 -1
- package/dist/schemas/exit.d.ts.map +1 -1
- package/dist/schemas/exit.js.map +1 -1
- package/dist/schemas/extension-updates.d.ts.map +1 -1
- package/dist/schemas/extension-updates.js.map +1 -1
- package/dist/schemas/git-history.d.ts.map +1 -1
- package/dist/schemas/git-history.js.map +1 -1
- package/dist/schemas/git.d.ts +80 -16
- package/dist/schemas/git.d.ts.map +1 -1
- package/dist/schemas/git.js +37 -25
- package/dist/schemas/git.js.map +1 -1
- package/dist/schemas/history.d.ts.map +1 -1
- package/dist/schemas/history.js.map +1 -1
- package/dist/schemas/hosts.d.ts.map +1 -1
- package/dist/schemas/hosts.js.map +1 -1
- package/dist/schemas/inventory.d.ts.map +1 -1
- package/dist/schemas/inventory.js.map +1 -1
- package/dist/schemas/issues.d.ts +0 -1
- package/dist/schemas/issues.d.ts.map +1 -1
- package/dist/schemas/issues.js +0 -1
- package/dist/schemas/issues.js.map +1 -1
- package/dist/schemas/logs.d.ts.map +1 -1
- package/dist/schemas/logs.js.map +1 -1
- package/dist/schemas/loops.d.ts.map +1 -1
- package/dist/schemas/loops.js +1 -1
- package/dist/schemas/loops.js.map +1 -1
- package/dist/schemas/maintenance.d.ts.map +1 -1
- package/dist/schemas/maintenance.js.map +1 -1
- package/dist/schemas/marketplace.d.ts +0 -4
- package/dist/schemas/marketplace.d.ts.map +1 -1
- package/dist/schemas/panels.d.ts.map +1 -1
- package/dist/schemas/panels.js.map +1 -1
- package/dist/schemas/personas.d.ts +2 -1
- package/dist/schemas/personas.d.ts.map +1 -1
- package/dist/schemas/personas.js +6 -2
- package/dist/schemas/personas.js.map +1 -1
- package/dist/schemas/plan-limits.d.ts +2 -4
- package/dist/schemas/plan-limits.d.ts.map +1 -1
- package/dist/schemas/plan-limits.js +5 -8
- package/dist/schemas/plan-limits.js.map +1 -1
- package/dist/schemas/ports.d.ts.map +1 -1
- package/dist/schemas/ports.js.map +1 -1
- package/dist/schemas/provider-oauth.d.ts.map +1 -1
- package/dist/schemas/provider-oauth.js.map +1 -1
- package/dist/schemas/provider-subscriptions.d.ts +1 -1
- package/dist/schemas/provider-subscriptions.d.ts.map +1 -1
- package/dist/schemas/provider-subscriptions.js +1 -1
- package/dist/schemas/provider-subscriptions.js.map +1 -1
- package/dist/schemas/public.d.ts.map +1 -1
- package/dist/schemas/public.js.map +1 -1
- package/dist/schemas/push.d.ts.map +1 -1
- package/dist/schemas/push.js.map +1 -1
- package/dist/schemas/secrets.d.ts.map +1 -1
- package/dist/schemas/secrets.js.map +1 -1
- package/dist/schemas/settings.d.ts +6 -9
- package/dist/schemas/settings.d.ts.map +1 -1
- package/dist/schemas/settings.js +16 -5
- package/dist/schemas/settings.js.map +1 -1
- package/dist/schemas/share.d.ts.map +1 -1
- package/dist/schemas/share.js.map +1 -1
- package/dist/schemas/shared.d.ts +4 -0
- package/dist/schemas/shared.d.ts.map +1 -1
- package/dist/schemas/shared.js +3 -0
- package/dist/schemas/shared.js.map +1 -1
- package/dist/schemas/system.d.ts +6 -0
- package/dist/schemas/system.d.ts.map +1 -1
- package/dist/schemas/system.js +10 -0
- package/dist/schemas/system.js.map +1 -1
- package/dist/schemas/terminal.d.ts.map +1 -1
- package/dist/schemas/terminal.js.map +1 -1
- package/dist/schemas/usage.d.ts.map +1 -1
- package/dist/schemas/usage.js.map +1 -1
- package/dist/schemas/vpn.d.ts.map +1 -1
- package/dist/schemas/vpn.js.map +1 -1
- package/dist/schemas/webext.d.ts.map +1 -1
- package/dist/schemas/webext.js.map +1 -1
- package/dist/schemas/workflows.d.ts +66 -9
- package/dist/schemas/workflows.d.ts.map +1 -1
- package/dist/schemas/workflows.js +6 -5
- package/dist/schemas/workflows.js.map +1 -1
- package/dist/schemas/workspace-repos.d.ts.map +1 -1
- package/dist/schemas/workspace-repos.js.map +1 -1
- package/dist/schemas/workspace-search.d.ts.map +1 -1
- package/dist/schemas/workspace-search.js.map +1 -1
- package/dist/schemas/workspace-setup.d.ts.map +1 -1
- package/dist/schemas/workspace-setup.js.map +1 -1
- package/dist/schemas/workspace-tree.d.ts.map +1 -1
- package/dist/schemas/workspace-tree.js.map +1 -1
- package/dist/state/arrival.d.ts.map +1 -0
- package/dist/{arrival.js → state/arrival.js} +1 -1
- package/dist/state/arrival.js.map +1 -0
- package/dist/state/contract-lock.d.ts.map +1 -0
- package/dist/{contract-lock.js → state/contract-lock.js} +1 -1
- package/dist/state/contract-lock.js.map +1 -0
- package/dist/{definition.d.ts → state/definition.d.ts} +21 -17
- package/dist/state/definition.d.ts.map +1 -0
- package/dist/{definition.js → state/definition.js} +4 -4
- package/dist/state/definition.js.map +1 -0
- package/dist/state/history-state.d.ts.map +1 -0
- package/dist/{history-state.js → state/history-state.js} +1 -0
- package/dist/state/history-state.js.map +1 -0
- package/dist/state/runtime-state.d.ts.map +1 -0
- package/dist/state/runtime-state.js.map +1 -0
- package/dist/state/starter.d.ts.map +1 -0
- package/dist/state/starter.js.map +1 -0
- package/dist/state/state-portability.d.ts.map +1 -0
- package/dist/state/state-portability.js.map +1 -0
- package/dist/state/versions.d.ts.map +1 -0
- package/dist/state/versions.js.map +1 -0
- package/dist/{workspace-state.d.ts → state/workspace-state.d.ts} +8 -0
- package/dist/state/workspace-state.d.ts.map +1 -0
- package/dist/{workspace-state.js → state/workspace-state.js} +25 -0
- package/dist/state/workspace-state.js.map +1 -0
- package/dist/{documents.d.ts → text/documents.d.ts} +1 -1
- package/dist/text/documents.d.ts.map +1 -0
- package/dist/{documents.js → text/documents.js} +1 -1
- package/dist/text/documents.js.map +1 -0
- package/dist/text/embed.d.ts.map +1 -0
- package/dist/text/embed.js.map +1 -0
- package/dist/text/mentions.d.ts.map +1 -0
- package/dist/text/mentions.js.map +1 -0
- package/dist/text/model-answer.d.ts +3 -0
- package/dist/text/model-answer.d.ts.map +1 -0
- package/dist/text/model-answer.js +3 -0
- package/dist/text/model-answer.js.map +1 -0
- package/dist/text/path-refs.d.ts.map +1 -0
- package/dist/text/path-refs.js.map +1 -0
- package/dist/{shell-regions.d.ts → text/shell-regions.d.ts} +1 -1
- package/dist/text/shell-regions.d.ts.map +1 -0
- package/dist/text/shell-regions.js.map +1 -0
- package/dist/text/title.d.ts.map +1 -0
- package/dist/text/title.js.map +1 -0
- package/dist/{transcript-fold.d.ts → text/transcript-fold.d.ts} +2 -1
- package/dist/text/transcript-fold.d.ts.map +1 -0
- package/dist/{transcript-fold.js → text/transcript-fold.js} +2 -16
- package/dist/text/transcript-fold.js.map +1 -0
- package/dist/text/whisper.d.ts +3 -0
- package/dist/text/whisper.d.ts.map +1 -0
- package/dist/text/whisper.js +11 -0
- package/dist/text/whisper.js.map +1 -0
- package/dist/{workflow-faults.d.ts → text/workflow-faults.d.ts} +1 -1
- package/dist/text/workflow-faults.d.ts.map +1 -0
- package/dist/{workflow-faults.js → text/workflow-faults.js} +1 -1
- package/dist/text/workflow-faults.js.map +1 -0
- package/package.json +70 -70
- package/src/chores/chores.test.ts +4 -10
- package/src/chores/chores.ts +148 -392
- package/src/chores/digest.ts +8 -28
- package/src/chores/extension-update.ts +3 -8
- package/src/chores/fix-deps.ts +4 -18
- package/src/chores/index.ts +2 -2
- package/src/chores/probes.test.ts +7 -43
- package/src/chores/probes.ts +62 -167
- package/src/chores/prompt.ts +10 -34
- package/src/chores/stack.test.ts +6 -45
- package/src/chores/stack.ts +27 -118
- package/src/chores/verdict.test.ts +101 -80
- package/src/chores/verdict.ts +54 -99
- package/src/contracts/accounts.contract.ts +4 -19
- package/src/contracts/agent.contract.ts +7 -22
- package/src/contracts/agents.contract.ts +25 -71
- package/src/contracts/automations.contract.ts +14 -30
- package/src/contracts/capabilities.contract.ts +8 -35
- package/src/contracts/chores.contract.ts +4 -15
- package/src/contracts/endpoints.contract.ts +5 -22
- package/src/contracts/exit.contract.ts +7 -30
- package/src/contracts/extensions.contract.ts +8 -30
- package/src/contracts/git.contract.ts +25 -49
- package/src/contracts/host.contract.ts +9 -44
- package/src/contracts/intentic.contract.ts +1 -1
- package/src/contracts/logs.contract.ts +3 -13
- package/src/contracts/loops.contract.ts +9 -40
- package/src/contracts/personas.contract.ts +10 -35
- package/src/contracts/providers.contract.ts +4 -17
- package/src/contracts/runner.contract.ts +12 -39
- package/src/contracts/safety.contract.ts +5 -14
- package/src/contracts/secrets.contract.ts +4 -22
- package/src/contracts/sessions.contract.ts +1 -1
- package/src/contracts/settings.contract.ts +4 -10
- package/src/contracts/share.contract.ts +3 -9
- package/src/contracts/skills.contract.ts +4 -15
- package/src/contracts/system.contract.ts +26 -52
- package/src/contracts/usage.contract.ts +7 -21
- package/src/contracts/vpn.contract.ts +9 -16
- package/src/contracts/webext.contract.ts +9 -25
- package/src/contracts/workflows.contract.ts +34 -58
- package/src/contracts/workspace.contract.ts +19 -50
- package/src/events/agent-events.ts +345 -0
- package/src/events/cards.ts +286 -0
- package/src/{events.test.ts → events/resume.test.ts} +4 -19
- package/src/events/resume.ts +60 -0
- package/src/events/system-events.ts +139 -0
- package/src/events/transcript.ts +320 -0
- package/src/{conversation-ids.test.ts → ids/conversation-ids.test.ts} +25 -13
- package/src/ids/conversation-ids.ts +178 -0
- package/src/ids/hostnames.ts +129 -0
- package/src/ids/session-names.ts +29 -0
- package/src/ids/share-paths.ts +43 -0
- package/src/{tunnel-ids.test.ts → ids/tunnel-ids.test.ts} +1 -14
- package/src/ids/tunnel-ids.ts +29 -0
- package/src/index.ts +71 -87
- package/src/{agent-catalog.test.ts → models/agent-catalog.test.ts} +19 -93
- package/src/models/agent-catalog.ts +174 -0
- package/src/models/agent-runtimes.ts +201 -0
- package/src/models/capability-ledger.test.ts +84 -0
- package/src/{fast-tier.test.ts → models/fast-tier.test.ts} +7 -18
- package/src/models/fast-tier.ts +36 -0
- package/src/{model-order.test.ts → models/model-order.test.ts} +19 -40
- package/src/models/model-order.ts +163 -0
- package/src/{model-pins.test.ts → models/model-pins.test.ts} +12 -46
- package/src/models/model-pins.ts +57 -0
- package/src/models/model-roles.test.ts +38 -0
- package/src/models/model-roles.ts +180 -0
- package/src/{plan-pools.test.ts → models/plan-pools.test.ts} +6 -11
- package/src/models/plan-pools.ts +65 -0
- package/src/{prompt-complexity.test.ts → models/prompt-complexity.test.ts} +8 -60
- package/src/models/prompt-complexity.ts +215 -0
- package/src/{provider-specs.test.ts → models/provider-specs.test.ts} +18 -47
- package/src/models/provider-specs.ts +272 -0
- package/src/policy/approvals-execution.ts +58 -0
- package/src/{batch-runs.test.ts → policy/batch-runs.test.ts} +4 -20
- package/src/policy/batch-runs.ts +137 -0
- package/src/policy/capability-secrets.ts +5 -0
- package/src/{card-status.ts → policy/card-status.ts} +11 -26
- package/src/{command-classes.test.ts → policy/command-classes.test.ts} +11 -118
- package/src/policy/command-classes.ts +395 -0
- package/src/policy/command-run.ts +65 -0
- package/src/policy/control-scopes.ts +38 -0
- package/src/{credential-material.test.ts → policy/credential-material.test.ts} +4 -26
- package/src/policy/credential-material.ts +91 -0
- package/src/policy/needs-action.ts +5 -0
- package/src/policy/output-fields.ts +86 -0
- package/src/policy/overlay-lint.ts +100 -0
- package/src/{owner-ticket.test.ts → policy/owner-ticket.test.ts} +1 -1
- package/src/{owner-ticket.ts → policy/owner-ticket.ts} +9 -31
- package/src/policy/safety-policy.test.ts +84 -0
- package/src/policy/safety-policy.ts +142 -0
- package/src/policy/search-globs.ts +60 -0
- package/src/protocol/container-requirements.test.ts +72 -0
- package/src/protocol/container-requirements.ts +58 -0
- package/src/protocol/host-protocol.ts +29 -0
- package/src/protocol/ingress-contract.ts +103 -0
- package/src/{ingress-protocol.test.ts → protocol/ingress-protocol.test.ts} +25 -90
- package/src/protocol/ingress-protocol.ts +441 -0
- package/src/protocol/listener-protocol.ts +75 -0
- package/src/{peer-dial.test.ts → protocol/peer-dial.test.ts} +52 -1
- package/src/protocol/peer-dial.ts +207 -0
- package/src/{peer-mcp-server.ts → protocol/peer-mcp-server.ts} +16 -41
- package/src/protocol/request-id.ts +5 -0
- package/src/{routes.test.ts → protocol/routes.test.ts} +14 -22
- package/src/protocol/routes.ts +159 -0
- package/src/protocol/runner-protocol.ts +197 -0
- package/src/protocol/terminal-protocol.ts +13 -0
- package/src/protocol/webext-links.ts +50 -0
- package/src/protocol/webext-protocol.ts +24 -0
- package/src/schemas/activity.ts +22 -30
- package/src/schemas/agent.ts +130 -238
- package/src/schemas/agents.ts +165 -483
- package/src/schemas/approvals.ts +23 -71
- package/src/schemas/automations.ts +142 -250
- package/src/schemas/capabilities.ts +127 -414
- package/src/schemas/ci.ts +56 -108
- package/src/schemas/codebase-health.ts +7 -11
- package/src/schemas/devices.ts +98 -321
- package/src/schemas/engines.ts +16 -44
- package/src/schemas/environment.ts +41 -91
- package/src/schemas/exit.ts +24 -81
- package/src/schemas/extension-updates.ts +42 -87
- package/src/schemas/git-history.ts +30 -84
- package/src/schemas/git.ts +141 -256
- package/src/schemas/history.ts +14 -40
- package/src/schemas/hosts.ts +9 -15
- package/src/schemas/inventory.ts +8 -10
- package/src/schemas/issues.ts +66 -134
- package/src/schemas/logs.ts +15 -34
- package/src/schemas/loops.ts +46 -163
- package/src/schemas/maintenance.ts +47 -172
- package/src/schemas/panels.ts +20 -45
- package/src/schemas/personas.ts +50 -200
- package/src/schemas/plan-limits.ts +58 -197
- package/src/schemas/ports.ts +14 -32
- package/src/schemas/provider-oauth.ts +23 -76
- package/src/schemas/provider-subscriptions.ts +4 -13
- package/src/schemas/public.ts +4 -15
- package/src/schemas/push.ts +8 -36
- package/src/schemas/secrets.ts +20 -64
- package/src/schemas/settings.ts +175 -600
- package/src/schemas/share.ts +14 -32
- package/src/schemas/shared.ts +14 -13
- package/src/schemas/system.ts +46 -78
- package/src/schemas/terminal.ts +41 -120
- package/src/schemas/usage.ts +44 -233
- package/src/schemas/version-seam.test.ts +9 -26
- package/src/schemas/vpn.ts +27 -64
- package/src/schemas/webext.ts +22 -53
- package/src/schemas/workflows.ts +57 -183
- package/src/schemas/workspace-repos.ts +12 -24
- package/src/schemas/workspace-search.ts +17 -35
- package/src/schemas/workspace-setup.ts +4 -11
- package/src/schemas/workspace-tree.ts +32 -91
- package/src/state/arrival.ts +109 -0
- package/src/state/contract-lock.test.ts +17 -0
- package/src/state/contract-lock.ts +49 -0
- package/src/state/definition.ts +143 -0
- package/src/state/history-state.ts +103 -0
- package/src/{runtime-state.test.ts → state/runtime-state.test.ts} +3 -10
- package/src/state/runtime-state.ts +62 -0
- package/src/state/starter.ts +5 -0
- package/src/state/state-portability.ts +27 -0
- package/src/state/versions.ts +26 -0
- package/src/{workspace-state.test.ts → state/workspace-state.test.ts} +65 -172
- package/src/state/workspace-state.ts +669 -0
- package/src/{documents.test.ts → text/documents.test.ts} +1 -1
- package/src/text/documents.ts +42 -0
- package/src/text/embed.ts +132 -0
- package/src/text/mentions.ts +21 -0
- package/src/text/model-answer.ts +9 -0
- package/src/text/path-refs.ts +39 -0
- package/src/text/shell-regions.ts +224 -0
- package/src/{title.test.ts → text/title.test.ts} +13 -32
- package/src/text/title.ts +202 -0
- package/src/{transcript-fold.test.ts → text/transcript-fold.test.ts} +5 -83
- package/src/{transcript-fold.ts → text/transcript-fold.ts} +65 -170
- package/src/text/whisper.test.ts +19 -0
- package/src/text/whisper.ts +17 -0
- package/src/{workflow-faults.test.ts → text/workflow-faults.test.ts} +6 -24
- package/src/{workflow-faults.ts → text/workflow-faults.ts} +20 -60
- package/dist/agent-catalog.d.ts.map +0 -1
- package/dist/agent-catalog.js.map +0 -1
- package/dist/agent-runtimes.d.ts.map +0 -1
- package/dist/agent-runtimes.js.map +0 -1
- package/dist/approvals-execution.d.ts.map +0 -1
- package/dist/approvals-execution.js.map +0 -1
- package/dist/arrival.d.ts.map +0 -1
- package/dist/arrival.js.map +0 -1
- package/dist/batch-runs.d.ts.map +0 -1
- package/dist/batch-runs.js.map +0 -1
- package/dist/capability-env.d.ts.map +0 -1
- package/dist/capability-env.js.map +0 -1
- package/dist/capability-secrets.d.ts.map +0 -1
- package/dist/capability-secrets.js.map +0 -1
- package/dist/card-status.d.ts.map +0 -1
- package/dist/card-status.js.map +0 -1
- package/dist/command-classes.d.ts.map +0 -1
- package/dist/command-classes.js.map +0 -1
- package/dist/command-run.d.ts.map +0 -1
- package/dist/command-run.js.map +0 -1
- package/dist/contract-lock.d.ts.map +0 -1
- package/dist/contract-lock.js.map +0 -1
- package/dist/conversation-ids.d.ts +0 -4
- package/dist/conversation-ids.d.ts.map +0 -1
- package/dist/conversation-ids.js.map +0 -1
- package/dist/credential-material.d.ts.map +0 -1
- package/dist/credential-material.js.map +0 -1
- package/dist/definition.d.ts.map +0 -1
- package/dist/definition.js.map +0 -1
- package/dist/documents.d.ts.map +0 -1
- package/dist/documents.js.map +0 -1
- package/dist/embed.d.ts.map +0 -1
- package/dist/embed.js.map +0 -1
- package/dist/events.d.ts +0 -4336
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -725
- package/dist/events.js.map +0 -1
- package/dist/fast-tier.d.ts.map +0 -1
- package/dist/fast-tier.js.map +0 -1
- package/dist/history-state.d.ts.map +0 -1
- package/dist/history-state.js.map +0 -1
- package/dist/host-protocol.d.ts.map +0 -1
- package/dist/host-protocol.js.map +0 -1
- package/dist/hostnames.d.ts.map +0 -1
- package/dist/hostnames.js.map +0 -1
- package/dist/ingress-contract.d.ts.map +0 -1
- package/dist/ingress-contract.js.map +0 -1
- package/dist/ingress-protocol.d.ts.map +0 -1
- package/dist/ingress-protocol.js.map +0 -1
- package/dist/listener-protocol.d.ts.map +0 -1
- package/dist/listener-protocol.js.map +0 -1
- package/dist/mentions.d.ts.map +0 -1
- package/dist/mentions.js.map +0 -1
- package/dist/model-order.d.ts.map +0 -1
- package/dist/model-order.js.map +0 -1
- package/dist/model-pins.d.ts.map +0 -1
- package/dist/model-pins.js.map +0 -1
- package/dist/model-roles.d.ts.map +0 -1
- package/dist/model-roles.js.map +0 -1
- package/dist/needs-action.d.ts.map +0 -1
- package/dist/needs-action.js.map +0 -1
- package/dist/output-fields.d.ts.map +0 -1
- package/dist/output-fields.js.map +0 -1
- package/dist/overlay-lint.d.ts.map +0 -1
- package/dist/overlay-lint.js.map +0 -1
- package/dist/owner-ticket.d.ts.map +0 -1
- package/dist/owner-ticket.js.map +0 -1
- package/dist/path-refs.d.ts.map +0 -1
- package/dist/path-refs.js.map +0 -1
- package/dist/peer-dial.d.ts.map +0 -1
- package/dist/peer-dial.js.map +0 -1
- package/dist/peer-mcp-server.d.ts.map +0 -1
- package/dist/peer-mcp-server.js.map +0 -1
- package/dist/plan-pools.d.ts.map +0 -1
- package/dist/plan-pools.js.map +0 -1
- package/dist/prompt-complexity.d.ts.map +0 -1
- package/dist/prompt-complexity.js.map +0 -1
- package/dist/provider-specs.d.ts.map +0 -1
- package/dist/provider-specs.js.map +0 -1
- package/dist/request-id.d.ts.map +0 -1
- package/dist/request-id.js.map +0 -1
- package/dist/routes.d.ts.map +0 -1
- package/dist/routes.js.map +0 -1
- package/dist/runner-protocol.d.ts.map +0 -1
- package/dist/runner-protocol.js.map +0 -1
- package/dist/runtime-state.d.ts.map +0 -1
- package/dist/runtime-state.js.map +0 -1
- package/dist/safety-policy.d.ts.map +0 -1
- package/dist/safety-policy.js.map +0 -1
- package/dist/search-globs.d.ts.map +0 -1
- package/dist/search-globs.js.map +0 -1
- package/dist/session-names.d.ts.map +0 -1
- package/dist/session-names.js.map +0 -1
- package/dist/share-paths.d.ts.map +0 -1
- package/dist/share-paths.js.map +0 -1
- package/dist/shell-regions.d.ts.map +0 -1
- package/dist/shell-regions.js.map +0 -1
- package/dist/sse.d.ts.map +0 -1
- package/dist/sse.js.map +0 -1
- package/dist/starter.d.ts.map +0 -1
- package/dist/starter.js.map +0 -1
- package/dist/state-portability.d.ts.map +0 -1
- package/dist/state-portability.js.map +0 -1
- package/dist/terminal-protocol.d.ts.map +0 -1
- package/dist/terminal-protocol.js.map +0 -1
- package/dist/title.d.ts.map +0 -1
- package/dist/title.js.map +0 -1
- package/dist/transcript-fold.d.ts.map +0 -1
- package/dist/transcript-fold.js.map +0 -1
- package/dist/tunnel-ids.d.ts.map +0 -1
- package/dist/tunnel-ids.js.map +0 -1
- package/dist/versions.d.ts.map +0 -1
- package/dist/versions.js.map +0 -1
- package/dist/webext-links.d.ts.map +0 -1
- package/dist/webext-links.js.map +0 -1
- package/dist/webext-protocol.d.ts.map +0 -1
- package/dist/webext-protocol.js.map +0 -1
- package/dist/workflow-faults.d.ts.map +0 -1
- package/dist/workflow-faults.js.map +0 -1
- package/dist/workspace-state.d.ts.map +0 -1
- package/dist/workspace-state.js.map +0 -1
- package/src/agent-catalog.ts +0 -316
- package/src/agent-runtimes.ts +0 -419
- package/src/approvals-execution.ts +0 -96
- package/src/arrival.ts +0 -160
- package/src/batch-runs.ts +0 -188
- package/src/capability-ledger.test.ts +0 -140
- package/src/capability-secrets.ts +0 -20
- package/src/command-classes.ts +0 -617
- package/src/command-run.ts +0 -78
- package/src/contract-lock.test.ts +0 -23
- package/src/contract-lock.ts +0 -66
- package/src/conversation-ids.ts +0 -207
- package/src/credential-material.ts +0 -181
- package/src/definition.ts +0 -207
- package/src/documents.ts +0 -67
- package/src/embed.ts +0 -164
- package/src/events.ts +0 -1870
- package/src/fast-tier.ts +0 -72
- package/src/history-state.ts +0 -174
- package/src/host-protocol.ts +0 -36
- package/src/hostnames.ts +0 -180
- package/src/ingress-contract.ts +0 -157
- package/src/ingress-protocol.ts +0 -625
- package/src/listener-protocol.ts +0 -96
- package/src/mentions.ts +0 -25
- package/src/model-order.ts +0 -262
- package/src/model-pins.ts +0 -132
- package/src/model-roles.test.ts +0 -52
- package/src/model-roles.ts +0 -320
- package/src/needs-action.ts +0 -14
- package/src/output-fields.ts +0 -111
- package/src/overlay-lint.ts +0 -116
- package/src/path-refs.ts +0 -59
- package/src/peer-dial.ts +0 -163
- package/src/plan-pools.ts +0 -92
- package/src/prompt-complexity.ts +0 -334
- package/src/provider-specs.ts +0 -432
- package/src/request-id.ts +0 -41
- package/src/routes.ts +0 -219
- package/src/runner-protocol.ts +0 -239
- package/src/runtime-state.ts +0 -140
- package/src/safety-policy.test.ts +0 -88
- package/src/safety-policy.ts +0 -258
- package/src/search-globs.ts +0 -76
- package/src/session-names.ts +0 -44
- package/src/share-paths.ts +0 -68
- package/src/shell-regions.ts +0 -289
- package/src/starter.ts +0 -13
- package/src/state-portability.ts +0 -56
- package/src/terminal-protocol.ts +0 -16
- package/src/title.ts +0 -267
- package/src/tunnel-ids.ts +0 -57
- package/src/versions.ts +0 -48
- package/src/webext-links.ts +0 -90
- package/src/webext-protocol.ts +0 -27
- package/src/workspace-state.ts +0 -1090
- /package/dist/{hostnames.d.ts → ids/hostnames.d.ts} +0 -0
- /package/dist/{hostnames.js → ids/hostnames.js} +0 -0
- /package/dist/{session-names.d.ts → ids/session-names.d.ts} +0 -0
- /package/dist/{session-names.js → ids/session-names.js} +0 -0
- /package/dist/{share-paths.d.ts → ids/share-paths.d.ts} +0 -0
- /package/dist/{share-paths.js → ids/share-paths.js} +0 -0
- /package/dist/{agent-catalog.js → models/agent-catalog.js} +0 -0
- /package/dist/{agent-runtimes.d.ts → models/agent-runtimes.d.ts} +0 -0
- /package/dist/{agent-runtimes.js → models/agent-runtimes.js} +0 -0
- /package/dist/{fast-tier.js → models/fast-tier.js} +0 -0
- /package/dist/{model-order.d.ts → models/model-order.d.ts} +0 -0
- /package/dist/{model-order.js → models/model-order.js} +0 -0
- /package/dist/{model-pins.js → models/model-pins.js} +0 -0
- /package/dist/{plan-pools.js → models/plan-pools.js} +0 -0
- /package/dist/{prompt-complexity.d.ts → models/prompt-complexity.d.ts} +0 -0
- /package/dist/{prompt-complexity.js → models/prompt-complexity.js} +0 -0
- /package/dist/{provider-specs.d.ts → models/provider-specs.d.ts} +0 -0
- /package/dist/{provider-specs.js → models/provider-specs.js} +0 -0
- /package/dist/{approvals-execution.d.ts → policy/approvals-execution.d.ts} +0 -0
- /package/dist/{approvals-execution.js → policy/approvals-execution.js} +0 -0
- /package/dist/{capability-env.d.ts → policy/capability-env.d.ts} +0 -0
- /package/dist/{capability-env.js → policy/capability-env.js} +0 -0
- /package/dist/{capability-secrets.d.ts → policy/capability-secrets.d.ts} +0 -0
- /package/dist/{capability-secrets.js → policy/capability-secrets.js} +0 -0
- /package/dist/{command-run.js → policy/command-run.js} +0 -0
- /package/dist/{credential-material.d.ts → policy/credential-material.d.ts} +0 -0
- /package/dist/{credential-material.js → policy/credential-material.js} +0 -0
- /package/dist/{needs-action.d.ts → policy/needs-action.d.ts} +0 -0
- /package/dist/{needs-action.js → policy/needs-action.js} +0 -0
- /package/dist/{output-fields.d.ts → policy/output-fields.d.ts} +0 -0
- /package/dist/{output-fields.js → policy/output-fields.js} +0 -0
- /package/dist/{overlay-lint.d.ts → policy/overlay-lint.d.ts} +0 -0
- /package/dist/{overlay-lint.js → policy/overlay-lint.js} +0 -0
- /package/dist/{owner-ticket.d.ts → policy/owner-ticket.d.ts} +0 -0
- /package/dist/{search-globs.d.ts → policy/search-globs.d.ts} +0 -0
- /package/dist/{search-globs.js → policy/search-globs.js} +0 -0
- /package/dist/{ingress-contract.d.ts → protocol/ingress-contract.d.ts} +0 -0
- /package/dist/{ingress-protocol.d.ts → protocol/ingress-protocol.d.ts} +0 -0
- /package/dist/{ingress-protocol.js → protocol/ingress-protocol.js} +0 -0
- /package/dist/{listener-protocol.d.ts → protocol/listener-protocol.d.ts} +0 -0
- /package/dist/{peer-mcp-server.d.ts → protocol/peer-mcp-server.d.ts} +0 -0
- /package/dist/{peer-mcp-server.js → protocol/peer-mcp-server.js} +0 -0
- /package/dist/{request-id.d.ts → protocol/request-id.d.ts} +0 -0
- /package/dist/{request-id.js → protocol/request-id.js} +0 -0
- /package/dist/{routes.d.ts → protocol/routes.d.ts} +0 -0
- /package/dist/{routes.js → protocol/routes.js} +0 -0
- /package/dist/{sse.d.ts → protocol/sse.d.ts} +0 -0
- /package/dist/{sse.js → protocol/sse.js} +0 -0
- /package/dist/{terminal-protocol.js → protocol/terminal-protocol.js} +0 -0
- /package/dist/{webext-links.d.ts → protocol/webext-links.d.ts} +0 -0
- /package/dist/{webext-links.js → protocol/webext-links.js} +0 -0
- /package/dist/{arrival.d.ts → state/arrival.d.ts} +0 -0
- /package/dist/{contract-lock.d.ts → state/contract-lock.d.ts} +0 -0
- /package/dist/{history-state.d.ts → state/history-state.d.ts} +0 -0
- /package/dist/{runtime-state.d.ts → state/runtime-state.d.ts} +0 -0
- /package/dist/{runtime-state.js → state/runtime-state.js} +0 -0
- /package/dist/{starter.d.ts → state/starter.d.ts} +0 -0
- /package/dist/{starter.js → state/starter.js} +0 -0
- /package/dist/{state-portability.d.ts → state/state-portability.d.ts} +0 -0
- /package/dist/{state-portability.js → state/state-portability.js} +0 -0
- /package/dist/{versions.d.ts → state/versions.d.ts} +0 -0
- /package/dist/{versions.js → state/versions.js} +0 -0
- /package/dist/{embed.d.ts → text/embed.d.ts} +0 -0
- /package/dist/{embed.js → text/embed.js} +0 -0
- /package/dist/{mentions.d.ts → text/mentions.d.ts} +0 -0
- /package/dist/{mentions.js → text/mentions.js} +0 -0
- /package/dist/{path-refs.d.ts → text/path-refs.d.ts} +0 -0
- /package/dist/{path-refs.js → text/path-refs.js} +0 -0
- /package/dist/{shell-regions.js → text/shell-regions.js} +0 -0
- /package/dist/{title.d.ts → text/title.d.ts} +0 -0
- /package/dist/{title.js → text/title.js} +0 -0
- /package/src/{hostnames.test.ts → ids/hostnames.test.ts} +0 -0
- /package/src/{share-paths.test.ts → ids/share-paths.test.ts} +0 -0
- /package/src/{capability-env.ts → policy/capability-env.ts} +0 -0
- /package/src/{overlay-lint.test.ts → policy/overlay-lint.test.ts} +0 -0
- /package/src/{search-globs.test.ts → policy/search-globs.test.ts} +0 -0
- /package/src/{ingress-contract.test.ts → protocol/ingress-contract.test.ts} +0 -0
- /package/src/{peer-mcp-server.test.ts → protocol/peer-mcp-server.test.ts} +0 -0
- /package/src/{sse.ts → protocol/sse.ts} +0 -0
- /package/src/{versions.test.ts → state/versions.test.ts} +0 -0
- /package/src/{embed.test.ts → text/embed.test.ts} +0 -0
- /package/src/{mentions.test.ts → text/mentions.test.ts} +0 -0
- /package/src/{path-refs.test.ts → text/path-refs.test.ts} +0 -0
|
@@ -22,10 +22,7 @@ import {
|
|
|
22
22
|
WORKSPACE_STATE_FILES,
|
|
23
23
|
} from "./workspace-state.js";
|
|
24
24
|
|
|
25
|
-
// What
|
|
26
|
-
// watcher reported its files. Literals rather than the real manifests: an extension package importing this one is
|
|
27
|
-
// the dependency direction, so reaching back for them here would invert it. The real manifests are checked
|
|
28
|
-
// against this rule where they are loaded: web's fileBindings.test.ts and the daemon's file-bindings.test.ts.
|
|
25
|
+
// What automations declares; literal here to avoid inverting the dependency on a real extension package.
|
|
29
26
|
const AUTOMATIONS: readonly FileContribution[] = [
|
|
30
27
|
{ path: `${STATE_DIR}/config/automations.json`, invalidates: [`automations`] },
|
|
31
28
|
{ path: `${STATE_DIR}/records/approvals/`, invalidates: [`automation-approvals`] },
|
|
@@ -37,9 +34,6 @@ describe(`staleQueryKeys`, () => {
|
|
|
37
34
|
});
|
|
38
35
|
|
|
39
36
|
it(`refreshes the unreadable-manifest notice for the three files a person hand-edits`, () => {
|
|
40
|
-
// Only these three. Every manifest reports what the daemon could not read in it, but a write to one of
|
|
41
|
-
// the twenty-odd DAEMON-written ones cannot introduce a typo, and billing every browser a refetch for
|
|
42
|
-
// each of them is the amplification this table exists to avoid.
|
|
43
37
|
const carries = WORKSPACE_STATE_FILES.filter((file) => file.invalidates.includes(`manifests`)).map((file) => file.path);
|
|
44
38
|
expect(carries.toSorted()).toEqual([
|
|
45
39
|
`.intentic/config/capabilities.json`,
|
|
@@ -49,27 +43,23 @@ describe(`staleQueryKeys`, () => {
|
|
|
49
43
|
});
|
|
50
44
|
|
|
51
45
|
it(`matches a name family and a one-file-per-entry directory through one prefix each`, () => {
|
|
52
|
-
// environment.Dockerfile, environment.custom.Dockerfile
|
|
46
|
+
// environment.Dockerfile, environment.custom.Dockerfile and environment.approved.Dockerfile share one entry.
|
|
53
47
|
expect(staleQueryKeys([`.intentic/config/environment.custom.Dockerfile`], [])).toEqual([`environment`]);
|
|
54
48
|
expect(staleQueryKeys([`.intentic/config/approvals/post-1.json`], [])).toEqual([`approvals`]);
|
|
55
49
|
});
|
|
56
50
|
|
|
57
51
|
it(`refreshes the Approvals view when the AGENT writes a proposal`, () => {
|
|
58
|
-
// The
|
|
59
|
-
// there is no browser mutation to hang an invalidate on: the watcher push is the only signal, and it
|
|
60
|
-
// used to be dropped on the floor.
|
|
52
|
+
// The approvals skill writes these files directly; the watcher push is the only signal available.
|
|
61
53
|
expect(staleQueryKeys([`.intentic/config/approvals/post-1.json`], [])).toEqual([`approvals`]);
|
|
62
54
|
});
|
|
63
55
|
|
|
64
56
|
it(`ignores unrelated churn under .intentic/`, () => {
|
|
65
|
-
//
|
|
66
|
-
// `.intentic/` alone would invalidate every one of these queries for each index write.
|
|
57
|
+
// iq's index and a session transcript: frequent enough writes to storm every query under a prefix-only match.
|
|
67
58
|
expect(staleQueryKeys([`.intentic/local/cache/iq/index.db`, `.intentic/records/sessions/claude/projects/p/session.jsonl`], [])).toEqual([]);
|
|
68
59
|
});
|
|
69
60
|
|
|
70
61
|
it(`ignores a store's own temp file while it is mid-swap`, () => {
|
|
71
|
-
// jsonFile
|
|
72
|
-
// a write to the target itself. A trailing-tag temp would prefix-match and bill an extra refetch.
|
|
62
|
+
// jsonFile's atomic-rename temp name: `.<name>.<pid>.tmp` beside the target.
|
|
73
63
|
expect(staleQueryKeys([`.intentic/.settings.json.42.tmp`], [])).toEqual([]);
|
|
74
64
|
expect(staleQueryKeys([`.intentic/config/settings.json`], [])).toEqual([`settings`, `manifests`]);
|
|
75
65
|
});
|
|
@@ -79,7 +69,7 @@ describe(`staleQueryKeys`, () => {
|
|
|
79
69
|
});
|
|
80
70
|
|
|
81
71
|
it(`dedupes keys across a batch that touches several manifests`, () => {
|
|
82
|
-
// A capability add recomposes the overlay, so both
|
|
72
|
+
// A capability add recomposes the overlay, so both paths claim environment; one entry, not two.
|
|
83
73
|
expect(staleQueryKeys([`.intentic/config/capabilities.json`, `.intentic/config/environment.Dockerfile`], [])).toEqual([
|
|
84
74
|
`capabilities`,
|
|
85
75
|
`environment`,
|
|
@@ -94,19 +84,14 @@ describe(`staleQueryKeys`, () => {
|
|
|
94
84
|
});
|
|
95
85
|
|
|
96
86
|
it(`makes nothing stale for an extension that is not running`, () => {
|
|
97
|
-
//
|
|
98
|
-
// extension's query key, so with the extension gone there is no cache entry for it to be about. The core
|
|
99
|
-
// table used to carry these two keys itself, and would have kept invalidating them either way.
|
|
87
|
+
// automations is the extension's own query key; with it not running, no cache entry exists for it.
|
|
100
88
|
expect(staleQueryKeys([`.intentic/config/automations.json`, `.intentic/records/approvals/a1.json`], [])).toEqual([]);
|
|
101
89
|
});
|
|
102
90
|
|
|
103
91
|
it(`lets an extension claim a path the core table deliberately ignores`, () => {
|
|
104
|
-
//
|
|
105
|
-
// invalidates nothing must still fire. Without this, every path beneath one of the daemon's
|
|
106
|
-
// machine-state prefixes would be unreachable to extensions.
|
|
92
|
+
// Unioned flat with the core table: a narrow extension entry still fires under an ignored core prefix.
|
|
107
93
|
const nested: readonly FileContribution[] = [{ path: `${STATE_DIR}/records/sessions/claude/plans/`, invalidates: [`plans`] }];
|
|
108
94
|
expect(staleQueryKeys([`.intentic/records/sessions/claude/plans/a-plan.md`], nested)).toEqual([`plans`]);
|
|
109
|
-
// …and a sibling under the same core prefix stays ignored.
|
|
110
95
|
expect(staleQueryKeys([`.intentic/records/sessions/claude/projects/p/session.jsonl`], nested)).toEqual([]);
|
|
111
96
|
});
|
|
112
97
|
|
|
@@ -119,8 +104,7 @@ describe(`staleQueryKeys`, () => {
|
|
|
119
104
|
});
|
|
120
105
|
});
|
|
121
106
|
|
|
122
|
-
|
|
123
|
-
* the card iff a write to it refreshes the card. */
|
|
107
|
+
// A file is on the reported-manifest card iff a write to it refreshes the card.
|
|
124
108
|
describe(`isReportedManifest`, () => {
|
|
125
109
|
it(`shows exactly the files whose writes refresh the notice`, () => {
|
|
126
110
|
expect(REPORTED_MANIFEST_PATHS.toSorted()).toEqual(
|
|
@@ -132,10 +116,6 @@ describe(`isReportedManifest`, () => {
|
|
|
132
116
|
});
|
|
133
117
|
|
|
134
118
|
it(`stays quiet about daemon-written state the owner cannot repair`, () => {
|
|
135
|
-
// The regression this exists for: the workflow ledger's records predated a schema that gained a required
|
|
136
|
-
// field, so every read reported the whole file ignored: advice ("fix the file") addressed to nobody,
|
|
137
|
-
// about sixty kilobytes of machine JSON, and refreshed by no write because the ledger feeds no query, so
|
|
138
|
-
// it sat on the card until the daemon restarted. A ledger recovers on its own next write instead.
|
|
139
119
|
expect(isReportedManifest(`.intentic/records/workflow-runs.json`)).toBe(false);
|
|
140
120
|
expect(isReportedManifest(`.intentic/records/loops.json`)).toBe(false);
|
|
141
121
|
expect(isReportedManifest(`.intentic/records/thread-sessions.json`)).toBe(false);
|
|
@@ -146,7 +126,7 @@ describe(`isReportedManifest`, () => {
|
|
|
146
126
|
});
|
|
147
127
|
|
|
148
128
|
it(`does not report a file outside the workspace`, () => {
|
|
149
|
-
// What `relative`
|
|
129
|
+
// What `relative` gives the daemon for a manifest kept under /history.
|
|
150
130
|
expect(isReportedManifest(`../../history/settings.json`)).toBe(false);
|
|
151
131
|
});
|
|
152
132
|
});
|
|
@@ -160,14 +140,9 @@ describe(`WORKSPACE_STATE_FILES`, () => {
|
|
|
160
140
|
});
|
|
161
141
|
|
|
162
142
|
it(`states a reason for every entry that invalidates nothing`, () => {
|
|
163
|
-
// An empty `invalidates` is a real answer (daemon machine state, a deliberately-polled surface, a path
|
|
164
|
-
// whose query keys belong to an extension), but a SILENT one is indistinguishable from the omission this
|
|
165
|
-
// table exists to prevent, which is exactly how approvals went missing. Requiring the reason is what makes
|
|
166
|
-
// the difference visible at review time.
|
|
167
143
|
for (const file of WORKSPACE_STATE_FILES) {
|
|
168
144
|
if (file.invalidates.length === 0) {
|
|
169
|
-
//
|
|
170
|
-
// failure this guards against — a `why` left blank to quiet the check — reads as whitespace.
|
|
145
|
+
// stringMatching(/\S/), not truthiness: a blank `why` left to quiet the check must still fail.
|
|
171
146
|
expect(file.why, `${file.path} invalidates nothing and must say why`).toEqual(expect.stringMatching(/\S/));
|
|
172
147
|
} else {
|
|
173
148
|
expect(file.why, `${file.path} invalidates queries, so \`why\` is dead weight`).toBeUndefined();
|
|
@@ -176,21 +151,16 @@ describe(`WORKSPACE_STATE_FILES`, () => {
|
|
|
176
151
|
});
|
|
177
152
|
|
|
178
153
|
it(`keeps directory entries slash-terminated so they cannot swallow a sibling`, () => {
|
|
179
|
-
// `.intentic/config/approvals` without the slash would also prefix-match a future `.intentic/approvals-archive.json`.
|
|
180
154
|
for (const file of WORKSPACE_STATE_FILES.filter((entry) => entry.invalidates.length > 0)) {
|
|
181
155
|
const isFamilyPrefix = file.path.endsWith(`.`);
|
|
182
|
-
//
|
|
183
|
-
// it is prose on disk rather than JSON.
|
|
156
|
+
// .md is the safety policy: the one state file a model reads as prose rather than a parser reading JSON.
|
|
184
157
|
const isFile = file.path.endsWith(`.json`) || file.path.endsWith(`.Dockerfile`) || file.path.endsWith(`.md`);
|
|
185
158
|
expect(isFile || isFamilyPrefix || file.path.endsWith(`/`), file.path).toBe(true);
|
|
186
159
|
}
|
|
187
160
|
});
|
|
188
161
|
|
|
189
162
|
it(`only nests under an entry that invalidates nothing, so one write can't be billed twice`, () => {
|
|
190
|
-
//
|
|
191
|
-
// keeps that unambiguous. Invalidation has no longest-match rule: staleQueryKeys unions every
|
|
192
|
-
// matching entry, so a nest under an entry that DOES invalidate would bill the outer view's queries for
|
|
193
|
-
// a write that belongs to the inner one. Nesting is therefore only legal beneath an empty `invalidates`.
|
|
163
|
+
// Longest-match applies to portability, not invalidation: staleQueryKeys unions every match instead.
|
|
194
164
|
for (const file of WORKSPACE_STATE_FILES.filter((entry) => entry.invalidates.length > 0)) {
|
|
195
165
|
const nested = WORKSPACE_STATE_FILES.filter((other) => other !== file && other.path.startsWith(file.path));
|
|
196
166
|
expect(
|
|
@@ -201,8 +171,7 @@ describe(`WORKSPACE_STATE_FILES`, () => {
|
|
|
201
171
|
});
|
|
202
172
|
|
|
203
173
|
it(`splits a nested entry from its parent for a reason the parent doesn't already carry`, () => {
|
|
204
|
-
// A nest
|
|
205
|
-
// answer either way, so the split is dead weight the next reader has to diff to discover.
|
|
174
|
+
// A nest agreeing with its parent is dead weight: stateFileFor resolves to the same answer either way.
|
|
206
175
|
for (const file of WORKSPACE_STATE_FILES) {
|
|
207
176
|
for (const parent of WORKSPACE_STATE_FILES.filter((other) => other !== file && file.path.startsWith(other.path))) {
|
|
208
177
|
expect(
|
|
@@ -214,32 +183,30 @@ describe(`WORKSPACE_STATE_FILES`, () => {
|
|
|
214
183
|
});
|
|
215
184
|
});
|
|
216
185
|
|
|
217
|
-
|
|
218
|
-
* padlock on a row and the refusal behind it can no longer disagree. */
|
|
186
|
+
// The lock rule the daemon enforces and the explorer draws, from one shared list.
|
|
219
187
|
describe(`isLockedWorkspacePath`, () => {
|
|
220
188
|
it(`covers the root state dir's credential entries, and their subtrees whole`, () => {
|
|
221
189
|
expect(isLockedWorkspacePath(`.intentic/config/capabilities.json`)).toBe(true);
|
|
222
190
|
expect(isLockedWorkspacePath(`.intentic/identity/owner.json`)).toBe(true);
|
|
223
|
-
// A whole lifecycle root
|
|
191
|
+
// A whole lifecycle root: a new provider under it is covered without a second edit.
|
|
224
192
|
expect(isLockedWorkspacePath(`.intentic/secrets/auth`)).toBe(true);
|
|
225
193
|
expect(isLockedWorkspacePath(`.intentic/secrets/auth/codex/auth.json`)).toBe(true);
|
|
226
194
|
expect(isLockedWorkspacePath(`.intentic/local/browser/Default/Cookies`)).toBe(true);
|
|
227
195
|
});
|
|
228
196
|
|
|
229
197
|
it(`leaves the state dir's ordinary manifests alone`, () => {
|
|
230
|
-
// The dir itself is browsable
|
|
198
|
+
// The dir itself is browsable; most of what's in it is fine for a person to read.
|
|
231
199
|
expect(isLockedWorkspacePath(`.intentic`)).toBe(false);
|
|
232
200
|
expect(isLockedWorkspacePath(`.intentic/config/settings.json`)).toBe(false);
|
|
233
201
|
expect(isLockedWorkspacePath(`.intentic/config/approvals/post-1.json`)).toBe(false);
|
|
234
202
|
});
|
|
235
203
|
|
|
236
204
|
it(`locks the ROOT's own .git and nobody else's`, () => {
|
|
237
|
-
// The root's
|
|
238
|
-
// repo's own .git is ordinary content that stays browsable.
|
|
205
|
+
// The root's .git points at the shadow history repo, kept where the agent can't rewrite it.
|
|
239
206
|
expect(isLockedWorkspacePath(`.git`)).toBe(true);
|
|
240
207
|
expect(isLockedWorkspacePath(`.git/config`)).toBe(true);
|
|
241
208
|
expect(isLockedWorkspacePath(`myrepo/.git/config`)).toBe(false);
|
|
242
|
-
//
|
|
209
|
+
// A repo's own nested .intentic is its project's state, not the daemon's.
|
|
243
210
|
expect(isLockedWorkspacePath(`myrepo/.intentic/config/capabilities.json`)).toBe(false);
|
|
244
211
|
});
|
|
245
212
|
|
|
@@ -249,26 +216,21 @@ describe(`isLockedWorkspacePath`, () => {
|
|
|
249
216
|
});
|
|
250
217
|
|
|
251
218
|
it(`lets the plan documents out of the session store around them`, () => {
|
|
252
|
-
// The plan a card asks
|
|
253
|
-
// file left the card's one link into the workspace landing on a padlock about the document it was
|
|
254
|
-
// asking about; the transcripts it sits beside stay locked.
|
|
219
|
+
// The plan a card asks you to approve, carved out of the transcripts store, which stays locked around it.
|
|
255
220
|
expect(isLockedWorkspacePath(`${PLAN_DOCUMENTS_DIR}/wiggly-spring.md`)).toBe(false);
|
|
256
221
|
expect(isLockedWorkspacePath(PLAN_DOCUMENTS_DIR)).toBe(false);
|
|
257
222
|
expect(isLockedWorkspacePath(`.intentic/records/sessions/claude/projects/x.jsonl`)).toBe(true);
|
|
258
223
|
expect(isLockedWorkspacePath(`.intentic/records/sessions`)).toBe(true);
|
|
259
|
-
//
|
|
224
|
+
// The directory is exempt, not the word: a similarly-named sibling store is not.
|
|
260
225
|
expect(isLockedWorkspacePath(`.intentic/records/sessions/claude/plans-backup/x.md`)).toBe(true);
|
|
261
226
|
});
|
|
262
227
|
});
|
|
263
228
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
* second copy of the rule — the copy it kept drifted through the state regrouping and stranded every locked
|
|
267
|
-
* file on the generic sentence. */
|
|
229
|
+
// Which entry a locked path belongs to, for the refusal screen's message; split from the boolean so the browser reads
|
|
230
|
+
// the daemon's own list.
|
|
268
231
|
describe(`lockedWorkspaceEntry`, () => {
|
|
269
232
|
it(`names the entry a path matched, not the leaf it ends at`, () => {
|
|
270
|
-
// A locked
|
|
271
|
-
// folder's: "Cookies is kept private" is true of something the reader has never heard of.
|
|
233
|
+
// A locked folder is one un-descended row, so the name worth reporting is the folder's.
|
|
272
234
|
expect(lockedWorkspaceEntry(`.intentic/local/browser/Default/Cookies`)).toBe(`local/browser`);
|
|
273
235
|
expect(lockedWorkspaceEntry(`.intentic/secrets/auth/codex/auth.json`)).toBe(`secrets/auth`);
|
|
274
236
|
expect(lockedWorkspaceEntry(`.intentic/config/capabilities.json`)).toBe(`config/capabilities.json`);
|
|
@@ -282,21 +244,19 @@ describe(`lockedWorkspaceEntry`, () => {
|
|
|
282
244
|
});
|
|
283
245
|
|
|
284
246
|
it(`answers for every entry the lock declares`, () => {
|
|
285
|
-
//
|
|
286
|
-
// resolve back out is one the refusal screen could only describe generically.
|
|
247
|
+
// Makes the daemon's set addressable from the browser; an unresolvable entry could only get a generic message.
|
|
287
248
|
for (const entry of LOCKED_STATE_ENTRIES) {
|
|
288
249
|
expect([entry, lockedWorkspaceEntry(`${STATE_DIR}/${entry}`)]).toEqual([entry, entry]);
|
|
289
250
|
}
|
|
290
251
|
});
|
|
291
252
|
});
|
|
292
253
|
|
|
293
|
-
|
|
294
|
-
|
|
254
|
+
// The carve-out diff routes need: a locked entry the root repo tracks has a diff by construction, so refusing to serve
|
|
255
|
+
// it left Changes with an unopenable row.
|
|
295
256
|
describe(`isReviewableLockedPath`, () => {
|
|
296
257
|
it(`admits the locked entry the root repo tracks, and nothing else locked`, () => {
|
|
297
258
|
expect(isReviewableLockedPath(`.intentic/config/capabilities.json`)).toBe(true);
|
|
298
|
-
//
|
|
299
|
-
// versioned, so none is reachable through a diff: the carve-out cannot widen without the flag.
|
|
259
|
+
// None of the rest is versioned, so none is diff-reachable; the carve-out can't widen without that flag.
|
|
300
260
|
expect(isReviewableLockedPath(`.intentic/identity/owner.json`)).toBe(false);
|
|
301
261
|
expect(isReviewableLockedPath(`.intentic/identity/members.json`)).toBe(false);
|
|
302
262
|
expect(isReviewableLockedPath(`.intentic/secrets/ci.json`)).toBe(false);
|
|
@@ -307,11 +267,9 @@ describe(`isReviewableLockedPath`, () => {
|
|
|
307
267
|
});
|
|
308
268
|
|
|
309
269
|
it(`answers only for the locked set: an ordinary path was never refused to begin with`, () => {
|
|
310
|
-
// Tracked, but not locked: the guards never ask this of them, and a `true` here would read as "this
|
|
311
|
-
// path needed a carve-out", which is a different and wrong statement.
|
|
312
270
|
expect(isReviewableLockedPath(`.intentic/config/settings.json`)).toBe(false);
|
|
313
271
|
expect(isReviewableLockedPath(`src/app.ts`)).toBe(false);
|
|
314
|
-
// A repo's own nested state dir is its project's content,
|
|
272
|
+
// A repo's own nested state dir is its project's content, same as the lock reads it.
|
|
315
273
|
expect(isReviewableLockedPath(`myrepo/.intentic/config/capabilities.json`)).toBe(false);
|
|
316
274
|
});
|
|
317
275
|
|
|
@@ -321,8 +279,7 @@ describe(`isReviewableLockedPath`, () => {
|
|
|
321
279
|
});
|
|
322
280
|
|
|
323
281
|
it(`stays a strict subset of the lock`, () => {
|
|
324
|
-
//
|
|
325
|
-
// held would mean the guards had stopped agreeing on what the control plane is.
|
|
282
|
+
// A path admitted here that the lock never held would mean the two guards disagree on what's locked.
|
|
326
283
|
for (const path of VERSIONED_STATE_PATHS) {
|
|
327
284
|
expect([path, isReviewableLockedPath(path) && !isLockedWorkspacePath(path)]).toEqual([path, false]);
|
|
328
285
|
}
|
|
@@ -330,27 +287,18 @@ describe(`isReviewableLockedPath`, () => {
|
|
|
330
287
|
});
|
|
331
288
|
|
|
332
289
|
describe(`VERSIONED_STATE_PATHS`, () => {
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
* `versioned` carves an entry out of the root repo's wholesale `.intentic` exclusion, so marking one is the
|
|
336
|
-
* difference between a file the owner reviews and a file the next baseline commit publishes into `git log`
|
|
337
|
-
* forever. A credential marked by a hurried hand is not recoverable by unmarking it later: the commit is
|
|
338
|
-
* already written, which is why the refusal is mechanical here rather than a rule in a comment. */
|
|
290
|
+
// versioned exempts an entry from the `.intentic` exclusion; a mismarked credential can't be unmarked once
|
|
291
|
+
// committed.
|
|
339
292
|
it(`never tracks a credential or an identity binding`, () => {
|
|
340
293
|
const leaked = WORKSPACE_STATE_FILES.filter((file) => file.versioned && (file.portability === `secret` || file.portability === `identity`));
|
|
341
294
|
expect(leaked.map((file) => file.path)).toEqual([]);
|
|
342
295
|
});
|
|
343
296
|
|
|
344
|
-
|
|
345
|
-
* carry is "does it move to a new sandbox", versioned is "should a human review it changing", so the
|
|
346
|
-
* ledgers and the bulk are `carry` and deliberately absent: the run ledger is rewritten several times per
|
|
347
|
-
* workflow step, the usage batch every few seconds a browser is open, and the transcripts run to hundreds of
|
|
348
|
-
* megabytes. Tracking any of them buries the owner's code review under machine noise. */
|
|
297
|
+
// versioned asks if a human should review it; carry asks if it moves. Frequently-rewritten ledgers are carry only.
|
|
349
298
|
it(`leaves the ledgers and the bulk out even though they travel`, () => {
|
|
350
299
|
for (const path of [
|
|
351
300
|
`.intentic/records/workflow-runs.json`,
|
|
352
|
-
// Split
|
|
353
|
-
// entry here that would be a REGRESSION rather than an oversight if it ever went tracked.
|
|
301
|
+
// Split from the tracked automations manifest so a run doesn't dirty it.
|
|
354
302
|
`.intentic/records/automation-runs.json`,
|
|
355
303
|
`.intentic/records/loops.json`,
|
|
356
304
|
`.intentic/records/thread-sessions.json`,
|
|
@@ -363,68 +311,43 @@ describe(`VERSIONED_STATE_PATHS`, () => {
|
|
|
363
311
|
}
|
|
364
312
|
});
|
|
365
313
|
|
|
366
|
-
|
|
367
|
-
* consequence of editing the table above: the review the flag itself exists to force. */
|
|
314
|
+
// Spelled out rather than derived, so adding a tracked entry is a visible edit here, not a silent side effect.
|
|
368
315
|
it(`tracks exactly the configuration slice plus the agent's own authored output`, () => {
|
|
369
316
|
expect(VERSIONED_STATE_PATHS.toSorted()).toEqual([
|
|
370
317
|
`${STATE_DIR}/config/approvals/`,
|
|
371
318
|
`${STATE_DIR}/config/automations.json`,
|
|
372
|
-
// Which apps the daemon starts at boot: the starter site
|
|
319
|
+
// Which apps the daemon starts at boot: the starter site, plus whatever the owner adds.
|
|
373
320
|
`${STATE_DIR}/config/autostart.json`,
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
* vault took the values out and left the shape behind. Connecting a deployment orchestrator, or
|
|
377
|
-
* granting a connected device shell and screen control, is the largest change made to what this
|
|
378
|
-
* sandbox can DO, and it used to leave no diff. */
|
|
321
|
+
// Tracked since credential values moved to the vault, leaving shapes only; connecting something merits
|
|
322
|
+
// review.
|
|
379
323
|
`${STATE_DIR}/config/capabilities.json`,
|
|
380
324
|
`${STATE_DIR}/config/capability-dismissals.json`,
|
|
381
|
-
//
|
|
382
|
-
//
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
* a workspace extension is code that runs in the app and can serve HTTP with the workspace under
|
|
386
|
-
* node:fs, and both used to reach that far with no diff anywhere. Kept rather than consumed, one
|
|
387
|
-
* small file at a time, so tracking them yields a record instead of churn. */
|
|
388
|
-
/* Where each agent engine takes its version from. Tracked for the same reason heavy-commands is:
|
|
389
|
-
* it is a standing decision about what runs for everyone on this workspace — tracking upstream's
|
|
390
|
-
* newest Claude Code, or pinning one while a regression is open — and `git log` is the only thing
|
|
391
|
-
* that answers "since when". */
|
|
325
|
+
// Context shelves: which repos a conversation opened; a decision about what a session may see, worth
|
|
326
|
+
// review.
|
|
327
|
+
// Agent-authored: a draft publishes under the owner's name; an extension runs code with node:fs access.
|
|
328
|
+
// Which version each agent engine runs; a standing decision worth a `git log` answer to "since when".
|
|
392
329
|
`${STATE_DIR}/config/engines.json`,
|
|
393
330
|
`${STATE_DIR}/config/environment.Dockerfile`,
|
|
394
331
|
`${STATE_DIR}/config/environment.custom.Dockerfile`,
|
|
395
332
|
`${STATE_DIR}/config/environment.d/`,
|
|
396
333
|
`${STATE_DIR}/config/extension-enablement.json`,
|
|
397
|
-
|
|
398
|
-
* behind it was not, so a commit could record turning an extension on and say nothing about what it
|
|
399
|
-
* was told to do. Tracked once its declared-secret values moved to the vault. */
|
|
334
|
+
// Twin of the enablement switch, tracked now that its secret values moved to the vault.
|
|
400
335
|
`${STATE_DIR}/config/extension-settings.json`,
|
|
401
|
-
//
|
|
402
|
-
// what may run unattended, which is exactly the kind of edit worth a line in `git log`.
|
|
336
|
+
// Per-extension update posture (notify/agent/auto): a standing decision on what may run unattended.
|
|
403
337
|
`${STATE_DIR}/config/extension-update-policy.json`,
|
|
404
|
-
// Which commands
|
|
405
|
-
//
|
|
406
|
-
// thing that answers "since when have we been allowing four of these at a time".
|
|
338
|
+
// Which commands count as heavy, and how many may run at once; a shared-box decision worth a `git log`
|
|
339
|
+
// line.
|
|
407
340
|
`${STATE_DIR}/config/heavy-commands.json`,
|
|
408
|
-
|
|
409
|
-
* directory nobody marked is invisible both to `git add -A` and to the land: that is how 559e896
|
|
410
|
-
* came to repoint settings.json at two scripts it never staged, and how the pair written in a
|
|
411
|
-
* worktree never arrived. What the workspace held from then on was settings naming two hooks that
|
|
412
|
-
* did not exist, and every edit for a day firing `node` at a missing file. A rule is reviewable;
|
|
413
|
-
* the code it runs on every write has to be. */
|
|
341
|
+
// The exclude list carves entries out by name; an unlisted directory is invisible to git and to land.
|
|
414
342
|
`${STATE_DIR}/config/hooks/`,
|
|
415
343
|
`${STATE_DIR}/config/loop-designs.json`,
|
|
416
344
|
`${STATE_DIR}/config/personas.json`,
|
|
417
|
-
// A persona's
|
|
418
|
-
// reason its card is, one step further: this is the text that decides how that persona behaves.
|
|
345
|
+
// A persona's prompt and reachable skills: the text that decides how it behaves, same reason as its card.
|
|
419
346
|
`${STATE_DIR}/config/personas/`,
|
|
420
|
-
|
|
421
|
-
* the reason settings.json is, and more sharply — it is the standing answer to "how much may this
|
|
422
|
-
* thing do unasked", the agent may edit it on the owner's instruction, and `git log` is the only
|
|
423
|
-
* thing that answers "since when did we stop being asked about force-pushes". */
|
|
347
|
+
// Prose deciding when the agent stops to ask; the standing answer to "since when did we allow this".
|
|
424
348
|
`${STATE_DIR}/config/safety.md`,
|
|
425
349
|
`${STATE_DIR}/config/settings.json`,
|
|
426
|
-
//
|
|
427
|
-
// changes how the agent behaves is worth a diff and a line in `git log`.
|
|
350
|
+
// Skills the owner wrote: text that changes agent behavior, worth a diff like the rules in settings.json.
|
|
428
351
|
`${STATE_DIR}/config/skills/`,
|
|
429
352
|
`${STATE_DIR}/config/templates.json`,
|
|
430
353
|
`${STATE_DIR}/config/workflows.json`,
|
|
@@ -432,19 +355,14 @@ describe(`VERSIONED_STATE_PATHS`, () => {
|
|
|
432
355
|
]);
|
|
433
356
|
});
|
|
434
357
|
|
|
435
|
-
|
|
436
|
-
* the switch was tracked and the thing it switched was not, so a commit could record turning on an extension
|
|
437
|
-
* whose code nobody else could read, and a workspace extension has no install moment to review at instead. */
|
|
358
|
+
// Both the switch and the code are tracked: an extension has no separate install moment to review.
|
|
438
359
|
it(`tracks a workspace extension's code, not just the switch that enables it`, () => {
|
|
439
360
|
expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/extension-enablement.json`);
|
|
440
361
|
expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/workspace-extensions/`);
|
|
441
362
|
});
|
|
442
363
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
* went out; a held wake is REMOVED once answered, so tracking it would leave an add and a delete describing
|
|
446
|
-
* a decision whose outcome lives elsewhere. Same for the staged docs: publishing copies them into the repo,
|
|
447
|
-
* where they are tracked as ordinary content, so tracking the staging tree too would double every page. */
|
|
364
|
+
// A settled draft stays as a record; a consumed wake is removed, so tracking it would only log a decision twice.
|
|
365
|
+
// Staged docs are tracked once published; tracking the staging tree too would double every page.
|
|
448
366
|
it(`leaves the consumed queues and the staging trees out even though they are authored`, () => {
|
|
449
367
|
for (const path of [`.intentic/records/approvals/`, `.intentic/config/docs/`]) {
|
|
450
368
|
expect([path, VERSIONED_STATE_PATHS.includes(path)]).toEqual([path, false]);
|
|
@@ -456,23 +374,15 @@ describe(`VERSIONED_STATE_PATHS`, () => {
|
|
|
456
374
|
}
|
|
457
375
|
});
|
|
458
376
|
|
|
459
|
-
|
|
460
|
-
* whatever base image this container happens to be on. Tracking it would put a rewritten-at-startup file in
|
|
461
|
-
* front of the owner as a change they made. */
|
|
377
|
+
// The composed file is rebuilt every boot; tracking it would show the owner a rewrite as their own edit.
|
|
462
378
|
it(`tracks the environment overlay's source but not its composed output`, () => {
|
|
463
379
|
expect(VERSIONED_STATE_PATHS).toContain(`.intentic/config/environment.custom.Dockerfile`);
|
|
464
380
|
expect(VERSIONED_STATE_PATHS).not.toContain(`.intentic/local/environment.approved.Dockerfile`);
|
|
465
381
|
});
|
|
466
382
|
});
|
|
467
383
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
* `stateGroupOf` reads three existing answers instead of adding a fourth, which is only sound while those answers
|
|
471
|
-
* nest: reviewed and authored entries must all be `carry`, so "did a person write this" never has to be asked of
|
|
472
|
-
* a credential. Nothing in the type system says so, `versioned: true` on a `secret` entry compiles, and the
|
|
473
|
-
* failure would be quiet in the worst way: the entry would group as `secrets` (correctly kept out of the backup)
|
|
474
|
-
* while the git exclude and the search floor, which read `versioned` directly, went on tracking and indexing it.
|
|
475
|
-
* A credential in the owner's diff and in the search index, from one plausible-looking flag. */
|
|
384
|
+
// stateGroupOf derives from three existing flags rather than a fourth, sound only because authored/versioned entries
|
|
385
|
+
// are always `carry`. Nothing enforces that: `versioned` on a `secret` entry would compile and misclassify silently.
|
|
476
386
|
describe(`state groups`, () => {
|
|
477
387
|
const GROUPS: readonly StateGroup[] = [`config`, `records`, `local`, `identity`, `secrets`];
|
|
478
388
|
|
|
@@ -491,8 +401,7 @@ describe(`state groups`, () => {
|
|
|
491
401
|
});
|
|
492
402
|
|
|
493
403
|
it(`agrees with the two lists that were derived before it`, () => {
|
|
494
|
-
// The git exclude reads
|
|
495
|
-
// inside `config`, or the folder a rule points at stops matching the rule.
|
|
404
|
+
// The git exclude reads versioned; the search floor reads versioned||authored. Both must land inside config.
|
|
496
405
|
const written = stateGroupPaths(`config`);
|
|
497
406
|
for (const path of VERSIONED_STATE_PATHS) {
|
|
498
407
|
expect([path, written.includes(path)]).toEqual([path, true]);
|
|
@@ -511,14 +420,7 @@ describe(`state groups`, () => {
|
|
|
511
420
|
expect(stateGroupPaths(`secrets`)).toContain(`.intentic/secrets/auth/`);
|
|
512
421
|
});
|
|
513
422
|
|
|
514
|
-
|
|
515
|
-
*
|
|
516
|
-
* Five prefixes replaced five hand-kept path lists: the git exclude, the search allow-list, the sync backup,
|
|
517
|
-
* the watcher skip, the export bundle, and every one of them is now only as true as the claim that an entry
|
|
518
|
-
* physically SITS in the folder its class puts it in. Nothing else checks that: the paths are literals, and a
|
|
519
|
-
* credential typed into `config/` by mistake would compile, track in git, index in search and copy to the
|
|
520
|
-
* owner's laptop, with each of those rules behaving exactly as designed. This is the one assertion standing
|
|
521
|
-
* between a mistyped literal and that. */
|
|
423
|
+
// Replaces five hand-kept path lists; a mistyped literal here is the one thing that breaks them all silently.
|
|
522
424
|
it(`puts every entry physically inside its own group's folder`, () => {
|
|
523
425
|
for (const file of WORKSPACE_STATE_FILES) {
|
|
524
426
|
const expected = `${STATE_GROUP_DIR[stateGroupOf(file)]}/`;
|
|
@@ -526,11 +428,8 @@ describe(`state groups`, () => {
|
|
|
526
428
|
}
|
|
527
429
|
});
|
|
528
430
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
* the platform's web bundle can take it. This is the guard that keeps the copy honest. If it fails, the
|
|
532
|
-
* profiles moved and `BROWSER_PROFILE_GROUP` in _sandbox/workspace-ignore/src/constants.ts must move too, or
|
|
533
|
-
* the tree will start eagerly walking a Chromium user-data dir and the watcher will report its churn. */
|
|
431
|
+
// The browser-safe copy lives in @intentic/workspace-ignore, which can't import this package; a failure here means
|
|
432
|
+
// that copy has drifted.
|
|
534
433
|
it(`keeps the browser profiles where workspace-ignore's copy of the path expects them`, () => {
|
|
535
434
|
expect(WORKSPACE_STATE_FILES.map((file) => file.path)).toContain(`.intentic/local/browser/`);
|
|
536
435
|
});
|
|
@@ -554,10 +453,8 @@ describe(`state groups`, () => {
|
|
|
554
453
|
});
|
|
555
454
|
});
|
|
556
455
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
* bug back in one folder, git in a worktree writing through a bind onto the live tree, and an untracked entry
|
|
560
|
-
* under no shared prefix is a transcript or a staged doc written into a per-worktree copy nobody reads. */
|
|
456
|
+
// The mount boundary: shared prefixes and tracked entries never overlap, so isolation can bind by group instead of the
|
|
457
|
+
// whole state dir.
|
|
561
458
|
describe(`SHARED_STATE_PATHS`, () => {
|
|
562
459
|
const under = (path: string, prefix: string): boolean => path === prefix || path.startsWith(prefix);
|
|
563
460
|
|
|
@@ -592,9 +489,7 @@ describe(`SHARED_STATE_PATHS`, () => {
|
|
|
592
489
|
});
|
|
593
490
|
});
|
|
594
491
|
|
|
595
|
-
|
|
596
|
-
* skill, automation, draft and transcript in it: a backup that held only the source tree. These pin the two
|
|
597
|
-
* halves of the fix: the slice that now comes down, and the credentials that still must not. */
|
|
492
|
+
// Pins the split: the authored slice that now backs up, and the credentials that still must not.
|
|
598
493
|
describe(`BACKED_UP_STATE_PATHS`, () => {
|
|
599
494
|
it(`splits the table in two with nothing falling between`, () => {
|
|
600
495
|
expect([...BACKED_UP_STATE_PATHS, ...UNBACKED_STATE_PATHS].toSorted()).toEqual(WORKSPACE_STATE_FILES.map((file) => file.path).toSorted());
|
|
@@ -621,9 +516,7 @@ describe(`BACKED_UP_STATE_PATHS`, () => {
|
|
|
621
516
|
}
|
|
622
517
|
});
|
|
623
518
|
|
|
624
|
-
|
|
625
|
-
* may never RESTORE into another sandbox: that is what `identity` means, and members.json's own entry argues
|
|
626
|
-
* why. None of that stops the owner keeping a copy of who could drive their own machine. */
|
|
519
|
+
// identity means never restoring into another sandbox; that doesn't stop the owner keeping their own copy.
|
|
627
520
|
it(`copies the ownership records that may never travel`, () => {
|
|
628
521
|
for (const path of [`.intentic/identity/owner.json`, `.intentic/identity/members.json`, `.intentic/identity/workspace.json`]) {
|
|
629
522
|
expect([path, BACKED_UP_STATE_PATHS.includes(path)]).toEqual([path, true]);
|
|
@@ -632,7 +525,7 @@ describe(`BACKED_UP_STATE_PATHS`, () => {
|
|
|
632
525
|
|
|
633
526
|
it(`still withholds the tokens that authenticate against this sandbox`, () => {
|
|
634
527
|
expect(BACKED_UP_STATE_PATHS).not.toContain(`.intentic/identity/control-tokens.json`);
|
|
635
|
-
//
|
|
528
|
+
// The only entry that opts out by hand; everything else follows from its class alone.
|
|
636
529
|
expect(WORKSPACE_STATE_FILES.filter((file) => file.backup === false).map((file) => file.path)).toEqual([
|
|
637
530
|
`.intentic/identity/control-tokens.json`,
|
|
638
531
|
]);
|