@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
|
@@ -1,53 +1,22 @@
|
|
|
1
|
-
import { cancelledCards, settledCards } from "
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
CARD_FIELDS,
|
|
5
|
-
holdsCard,
|
|
6
|
-
isAwaitingDecision,
|
|
7
|
-
type TranscriptCards,
|
|
8
|
-
type TranscriptPatch,
|
|
9
|
-
type TranscriptRow,
|
|
10
|
-
type TranscriptSubagent,
|
|
11
|
-
type TranscriptTool,
|
|
12
|
-
} from "./events.js";
|
|
1
|
+
import { cancelledCards, settledCards } from "../policy/card-status.js";
|
|
2
|
+
import type { AgentEvent } from "../events/agent-events.js";
|
|
3
|
+
import { CARD_FIELDS, holdsCard, isAwaitingDecision, type TranscriptCards, type TranscriptPatch, type TranscriptRow, type TranscriptSubagent, type TranscriptTool } from "../events/transcript.js";
|
|
13
4
|
import { mentionedPathTokens } from "./mentions.js";
|
|
14
5
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* attached window draws, patch by patch, and what the record keeps once the turn settles. A reopened chat
|
|
19
|
-
* therefore shows what was on screen rather than a second arrangement of it, because there is no second
|
|
20
|
-
* arrangement: the row a window watched being typed and the row the record holds are the same row, made by
|
|
21
|
-
* the same code at the same moment.
|
|
22
|
-
*
|
|
23
|
-
* It used to run twice. The browser folded the live frames into its own bubbles, the daemon folded the same
|
|
24
|
-
* frames at settlement into the record, and a third pass turned the record back into bubbles on reopen. Each
|
|
25
|
-
* grew rules the others lacked, a card the record forgot, a steer the live view placed wrong, a notice only
|
|
26
|
-
* the window that watched ever saw, and a change to one was a bug in the other until somebody noticed. This
|
|
27
|
-
* is the one copy.
|
|
28
|
-
*
|
|
29
|
-
* `tag` names which stream of the log is being read: undefined is the main turn, a tool-call id is the
|
|
30
|
-
* subagent that call spawned. Frames carrying THAT tag are the stream's own and land at top level; frames
|
|
31
|
-
* carrying a different one belong to a child of this stream and nest under the card that spawned it, one
|
|
32
|
-
* rule for both, which is what makes depth fall out for free: a subagent that itself delegates nests one
|
|
33
|
-
* level further down, on the same pass, whichever level is being read.
|
|
34
|
-
*
|
|
35
|
-
* Rows are MUTATED in place and every patch carries a COPY of what it names. The mutation is what keeps a
|
|
36
|
-
* result that lands turns after its call cheap, no second pass; the copy is what keeps a patch true to the
|
|
37
|
-
* moment it was made rather than to whatever the row grew into by the time a slow reader took it. */
|
|
6
|
+
// Folds a turn's frames into rows once, live and for the settled record alike, so a reopened chat matches what was on
|
|
7
|
+
// screen. `tag` selects the stream read: undefined is the main turn, a tool-call id is the subagent it spawned; other
|
|
8
|
+
// frames nest under the card that spawned them. Rows mutate in place; every patch carries a copy of what it names.
|
|
38
9
|
|
|
39
10
|
export type TurnEnding = "settled" | "stopped";
|
|
40
11
|
|
|
41
|
-
// Where a tool card lives,
|
|
42
|
-
// nests under when it is a helper's own call.
|
|
12
|
+
// Where a tool card lives: its row, and the parent card it nests under when it's a helper's own call.
|
|
43
13
|
interface CardPlace {
|
|
44
14
|
readonly tool: TranscriptTool;
|
|
45
15
|
readonly row: number;
|
|
46
16
|
readonly parent?: string;
|
|
47
17
|
}
|
|
48
18
|
|
|
49
|
-
//
|
|
50
|
-
// frame set, and a spread of the parsed frame would, with `undefined`.
|
|
19
|
+
// Strips undefined fields, so spreading a partial frame never overwrites a field an earlier frame already set.
|
|
51
20
|
const defined = <T extends object>(value: T): Partial<T> => Object.fromEntries(Object.entries(value).filter(([, field]) => field !== undefined)) as Partial<T>;
|
|
52
21
|
|
|
53
22
|
const cardOf = (event: Extract<AgentEvent, { kind: "tool_call" }>): TranscriptTool => ({
|
|
@@ -60,8 +29,7 @@ const cardOf = (event: Extract<AgentEvent, { kind: "tool_call" }>): TranscriptTo
|
|
|
60
29
|
...(event.content !== undefined ? { content: event.content } : {}),
|
|
61
30
|
});
|
|
62
31
|
|
|
63
|
-
// Whether a bubble has
|
|
64
|
-
// makes none.
|
|
32
|
+
// Whether a bubble has any content: text, thinking, tools, todos, usage or a card; empty otherwise.
|
|
65
33
|
const empty = (row: TranscriptRow): boolean =>
|
|
66
34
|
row.text.length === 0 &&
|
|
67
35
|
(row.thinking?.length ?? 0) === 0 &&
|
|
@@ -70,14 +38,8 @@ const empty = (row: TranscriptRow): boolean =>
|
|
|
70
38
|
row.usage === undefined &&
|
|
71
39
|
!holdsCard(row);
|
|
72
40
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
*
|
|
76
|
-
* Written as a REPORT of something already done, not a request. The daemon started the install the moment the
|
|
77
|
-
* tree changed (workspace/reconcile-deps.ts), so "installing" is the true tense and there is no decision left
|
|
78
|
-
* for the reader to make; the button beside it opens the terminal it is running in, for whoever wants to watch.
|
|
79
|
-
* The deferred wording is the one case that names a wait, because a workspace with other agents still running
|
|
80
|
-
* genuinely has not started yet and saying otherwise would be a lie the terminal would immediately expose. */
|
|
41
|
+
// Clause appended to the landed notice for a workspace dependency change, or empty when there is none. Reports the
|
|
42
|
+
// install as already started, or queued when other agents are still running; never as a request.
|
|
81
43
|
const dependencyLine = (deps: { missing: number; started: string[]; deferred: boolean } | undefined): string => {
|
|
82
44
|
if (deps === undefined || deps.missing === 0) {
|
|
83
45
|
return ``;
|
|
@@ -88,15 +50,8 @@ const dependencyLine = (deps: { missing: number; started: string[]; deferred: bo
|
|
|
88
50
|
: ` Installing ${what} it added; the project's checks run when that finishes, and the outcome lands in Activity.`;
|
|
89
51
|
};
|
|
90
52
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
* A conversation goes stale while its user commits around it, so the daemon rebases the branch onto the
|
|
94
|
-
* current workspace. It is told, not asked: at the moment someone is answering their agent they have nothing
|
|
95
|
-
* to decide this with, and the alternative to rebasing is not "stay safe", it is a land conflict half an hour
|
|
96
|
-
* later. So this is one muted line with no button on it, the same weight as "Context compacted", and for the
|
|
97
|
-
* same reason. The blocked half is the line that earns its keep: a rebase that would not apply was rolled
|
|
98
|
-
* back, the agent is working from the older base, and the conflict report at the end of the turn is now
|
|
99
|
-
* EXPECTED rather than a surprise. */
|
|
53
|
+
// One line reporting the daemon's rebase of this agent's branch onto the current workspace; `blocked` names repos it
|
|
54
|
+
// couldn't rebase, where the turn ran from an older base.
|
|
100
55
|
const syncLine = (sync: { commits: number; blocked: readonly string[] }): string => {
|
|
101
56
|
const moved =
|
|
102
57
|
sync.commits > 0
|
|
@@ -109,17 +64,14 @@ const syncLine = (sync: { commits: number; blocked: readonly string[] }): string
|
|
|
109
64
|
return [moved, blocked].filter((line) => line !== undefined).join(` `);
|
|
110
65
|
};
|
|
111
66
|
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
// worktree. A landed delta that changed what the workspace depends on carries its reconcile too, the one
|
|
115
|
-
// consequence of this turn the Changes panel cannot show, because it happened outside the diff.
|
|
67
|
+
// Row for a finished turn: held on its branch, landed automatically, or conflicted. A landed turn that changed
|
|
68
|
+
// dependencies appends dependencyLine, since the Changes diff can't show that.
|
|
116
69
|
const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRow => {
|
|
117
70
|
if (event.held === true) {
|
|
118
71
|
return { role: "notice", text: `Finished: the work is on this agent's branch, ready to land from its review.` };
|
|
119
72
|
}
|
|
120
73
|
if (!event.landed) {
|
|
121
|
-
//
|
|
122
|
-
// is where each one is spelled out with the action that fits it.
|
|
74
|
+
// Per-file cause (your edits, a moved main line, a binary) is spelled out in the review, not named here.
|
|
123
75
|
const conflicts = event.conflicts ?? [];
|
|
124
76
|
return {
|
|
125
77
|
role: "notice",
|
|
@@ -128,9 +80,7 @@ const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRo
|
|
|
128
80
|
.join(`, `)}. Open the agent's review to see what blocked them and land from there.`,
|
|
129
81
|
};
|
|
130
82
|
}
|
|
131
|
-
//
|
|
132
|
-
// doing that" is worth one press exactly now. An install that STARTED takes the slot instead: for as long
|
|
133
|
-
// as it runs, the one press worth offering is the terminal it is running in.
|
|
83
|
+
// noticeAction fires only here, right as the auto-behavior ran; an active install takes the slot instead.
|
|
134
84
|
return {
|
|
135
85
|
role: "notice",
|
|
136
86
|
text: `Changes landed in your workspace: review them in the Changes panel.${dependencyLine(event.deps)}`,
|
|
@@ -138,10 +88,8 @@ const landedRow = (event: Extract<AgentEvent, { kind: "landed" }>): TranscriptRo
|
|
|
138
88
|
};
|
|
139
89
|
};
|
|
140
90
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
* the chat's to draw beside the composer, live; this row is the record of the moment, and reads the same live
|
|
144
|
-
* and a week later. */
|
|
91
|
+
// Row for a turn-ending error: the provider's own message plus one clause on what happens next. The live wait itself is
|
|
92
|
+
// drawn by the chat, not stored here.
|
|
145
93
|
const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow => {
|
|
146
94
|
const { message, code } = event;
|
|
147
95
|
switch (code) {
|
|
@@ -159,8 +107,7 @@ const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow
|
|
|
159
107
|
: { role: "notice", text: `${message} Reconnect the account to pick this conversation back up.` };
|
|
160
108
|
case "rate_limit":
|
|
161
109
|
return { role: "notice", text: event.autoResume === "scheduled" ? `${message} This chat sends it again once the allowance comes back.` : message };
|
|
162
|
-
// Refused before
|
|
163
|
-
// user's own next send rather than flushing them into the same refusal.
|
|
110
|
+
// Refused before the model saw it; the composer holds the message so the user can resend it.
|
|
164
111
|
case "claude-reauth":
|
|
165
112
|
case "unknown-command":
|
|
166
113
|
case "context-window-too-small":
|
|
@@ -174,13 +121,10 @@ const errorRow = (event: Extract<AgentEvent, { kind: "error" }>): TranscriptRow
|
|
|
174
121
|
}
|
|
175
122
|
};
|
|
176
123
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* handed to the fold as the row it starts from. */
|
|
124
|
+
// The turn's opening user row: text, timestamp, attachments, and whatever the daemon later stamps onto it (checkpoint,
|
|
125
|
+
// notes).
|
|
180
126
|
export const userRow = (text: string, sentAt: number, attachments: readonly string[]): TranscriptRow => {
|
|
181
|
-
|
|
182
|
-
* as attachments), and drawing it as a chip would show the reader the same path twice; an upload that the
|
|
183
|
-
* user ALSO happened to type the generated path of keeps its chip, because the chip is the thumbnail. */
|
|
127
|
+
// Drops an attachment already inline as an @-mention, unless it's a generated upload path (its own thumbnail).
|
|
184
128
|
const inline = new Set(mentionedPathTokens(text));
|
|
185
129
|
const chips = attachments.filter((path) => !inline.has(path) || path.includes(`/records/artifacts/attachments/`));
|
|
186
130
|
return { role: "user", text, sentAt, ...(chips.length > 0 ? { attachments: chips } : {}) };
|
|
@@ -188,17 +132,14 @@ export const userRow = (text: string, sentAt: number, attachments: readonly stri
|
|
|
188
132
|
|
|
189
133
|
export class TranscriptFold {
|
|
190
134
|
readonly rows: TranscriptRow[] = [];
|
|
191
|
-
//
|
|
192
|
-
// once the turn settles (agent/steer-anchors.ts), and only the fold knows where they landed.
|
|
135
|
+
// Row index of each user steer, in order; the daemon anchors rewind state to these once the turn settles.
|
|
193
136
|
readonly steerRows: number[] = [];
|
|
194
|
-
//
|
|
195
|
-
// first (pushRow), so a bubble that ends empty is dropped without moving anything above it.
|
|
137
|
+
// Index of the open assistant bubble; always the last row, since every other row kind closes it first.
|
|
196
138
|
private bubble: number | undefined;
|
|
197
139
|
private readonly cards = new Map<string, CardPlace>();
|
|
198
|
-
// requestId
|
|
199
|
-
// was raised: the reply that released it, a permission's late sentence, an offer's stream and receipt.
|
|
140
|
+
// requestId to the row holding its card, for frames landing on it later (a reply, a late sentence, a receipt).
|
|
200
141
|
private readonly parked = new Map<string, number>();
|
|
201
|
-
// The turn's
|
|
142
|
+
// The turn's opening user row, where the checkpoint and daemon notes land.
|
|
202
143
|
private readonly opener: number | undefined;
|
|
203
144
|
|
|
204
145
|
constructor(
|
|
@@ -212,7 +153,7 @@ export class TranscriptFold {
|
|
|
212
153
|
this.opener = opener === -1 ? undefined : opener;
|
|
213
154
|
}
|
|
214
155
|
|
|
215
|
-
/**
|
|
156
|
+
/** Folds one frame in; returns the patches it produced, in order. */
|
|
216
157
|
apply(event: AgentEvent): TranscriptPatch[] {
|
|
217
158
|
const parent = "parentToolUseId" in event ? event.parentToolUseId : undefined;
|
|
218
159
|
if (parent !== this.tag) {
|
|
@@ -237,10 +178,7 @@ export class TranscriptFold {
|
|
|
237
178
|
return [...opened, { op: "thinking", index, text: event.text }];
|
|
238
179
|
}
|
|
239
180
|
case "text_end":
|
|
240
|
-
//
|
|
241
|
-
// the tool calls that block introduced or the next block after they return, opens a fresh one
|
|
242
|
-
// below it. A block that wrote no prose has no boundary to draw: retiring on it would split a
|
|
243
|
-
// card away from the prose that reported it, which is a shape the user never saw.
|
|
181
|
+
// A block with no prose has no boundary; retiring here would split a card from its report.
|
|
244
182
|
if (this.bubble !== undefined && this.rows[this.bubble]!.text.length > 0) {
|
|
245
183
|
this.bubble = undefined;
|
|
246
184
|
}
|
|
@@ -254,9 +192,7 @@ export class TranscriptFold {
|
|
|
254
192
|
return [...opened, { op: "tool", index, tool: structuredClone(tool) }];
|
|
255
193
|
}
|
|
256
194
|
case "tool_call_update":
|
|
257
|
-
// Present fields
|
|
258
|
-
// output as whole snapshots), absent fields leave it unchanged. An update with no matching tool
|
|
259
|
-
// is dropped rather than shown loose.
|
|
195
|
+
// Present fields replace the prior value (snapshot semantics); an unmatched update drops.
|
|
260
196
|
return this.patchCard(event.id, (tool) => {
|
|
261
197
|
if (event.status !== undefined) {
|
|
262
198
|
tool.status = event.status;
|
|
@@ -269,15 +205,14 @@ export class TranscriptFold {
|
|
|
269
205
|
}
|
|
270
206
|
});
|
|
271
207
|
case "subagent": {
|
|
272
|
-
// The
|
|
208
|
+
// The frame's id is the spawning call's id, so the subagent record lands on that card.
|
|
273
209
|
const { kind: _kind, id, subagentKind, ...rest } = event;
|
|
274
210
|
return this.patchCard(id, (tool) => {
|
|
275
211
|
tool.subagent = { ...rest, kind: subagentKind, status: "running" };
|
|
276
212
|
});
|
|
277
213
|
}
|
|
278
214
|
case "subagent_update": {
|
|
279
|
-
// Present fields
|
|
280
|
-
// tool_call_update has: progress arrives many times and says only what moved.
|
|
215
|
+
// Present fields replace, absent ones leave the child alone, as in tool_call_update.
|
|
281
216
|
const { kind: _kind, id, ...patch } = event;
|
|
282
217
|
return this.patchCard(id, (tool) => {
|
|
283
218
|
if (tool.subagent !== undefined) {
|
|
@@ -291,9 +226,7 @@ export class TranscriptFold {
|
|
|
291
226
|
return [...opened, this.replace(index)];
|
|
292
227
|
}
|
|
293
228
|
case "usage": {
|
|
294
|
-
//
|
|
295
|
-
// BOUNDARY, a steered conversation's stream can carry several turns, so the current bubble is
|
|
296
|
-
// retired and the next turn's frames open a fresh one below the steered user message.
|
|
229
|
+
// Lands on the last assistant bubble and closes it: a steered turn's stream can carry several turns.
|
|
297
230
|
const { kind: _kind, account: _account, cacheReadTokens: _read, cacheCreationTokens: _written, ...usage } = event;
|
|
298
231
|
const index = this.rows.findLastIndex((row) => row.role === "assistant");
|
|
299
232
|
const closed = this.closeBubble();
|
|
@@ -304,11 +237,7 @@ export class TranscriptFold {
|
|
|
304
237
|
return [...closed, this.replace(index)];
|
|
305
238
|
}
|
|
306
239
|
case "steer": {
|
|
307
|
-
|
|
308
|
-
* their own AND a boundary. The harness absorbs a steer between tool calls and the model keeps
|
|
309
|
-
* writing with no `result` in between, so nothing else in the stream retires the open bubble:
|
|
310
|
-
* what the agent says NEXT is its answer to this message, and left in the bubble above it the
|
|
311
|
-
* answer printed over the question. */
|
|
240
|
+
// A steer also closes the bubble, or the next answer would print over it mid-call.
|
|
312
241
|
const patches = this.pushRow({
|
|
313
242
|
role: "user",
|
|
314
243
|
text: event.text,
|
|
@@ -319,8 +248,7 @@ export class TranscriptFold {
|
|
|
319
248
|
return patches;
|
|
320
249
|
}
|
|
321
250
|
case "checkpoint":
|
|
322
|
-
//
|
|
323
|
-
// anchored on the turn's user row, which is what the rewind affordance addresses it by.
|
|
251
|
+
// Anchors the pre-turn snapshot id and this turn's transcript position on its user row, for rewind.
|
|
324
252
|
return this.stampOpener((row) => {
|
|
325
253
|
row.checkpointId = event.id;
|
|
326
254
|
if (event.index !== undefined) {
|
|
@@ -328,8 +256,7 @@ export class TranscriptFold {
|
|
|
328
256
|
}
|
|
329
257
|
});
|
|
330
258
|
case "preamble":
|
|
331
|
-
//
|
|
332
|
-
// A frame with nothing in it is not a disclosure.
|
|
259
|
+
// Collapses the daemon's preamble notes onto the user row; an empty note list is not a disclosure.
|
|
333
260
|
return event.notes.length === 0 ? [] : this.stampOpener((row) => (row.notes = [...event.notes]));
|
|
334
261
|
case "worktree":
|
|
335
262
|
return event.sync === undefined ? [] : this.pushRow({ role: "notice", text: syncLine(event.sync) });
|
|
@@ -338,25 +265,15 @@ export class TranscriptFold {
|
|
|
338
265
|
case "compact":
|
|
339
266
|
return this.pushRow({ role: "notice", text: `Context compacted to free up space.` });
|
|
340
267
|
case "error":
|
|
341
|
-
|
|
342
|
-
* rather than refused: a provider that answers "your organization has disabled Claude subscription
|
|
343
|
-
* access" sends this and no prose, so a fold of the two speakers alone ends on the user's message. */
|
|
268
|
+
// Keeps a refusal (no prose from the provider) from reading as a session that ended mid-question.
|
|
344
269
|
return this.pushRow(errorRow(event));
|
|
345
270
|
case "tier":
|
|
346
|
-
|
|
347
|
-
* refusal above is: the answer below it is the cheap rung's answer, and a reader coming back
|
|
348
|
-
* tomorrow has no other way to know which of their messages were served that way. Only a turn that
|
|
349
|
-
* really moved: a verdict that changed nothing is machinery, not an event. The model is named by
|
|
350
|
-
* ID, the only name this side has. `noticeAction` carries the one press the line offers, "keep
|
|
351
|
-
* this chat on my pick". */
|
|
271
|
+
// Notes a turn served on a cheaper model than requested, only when it actually routed.
|
|
352
272
|
return event.routed && event.model !== undefined
|
|
353
273
|
? this.pushRow({ role: "notice", text: `This turn looked simple, so it ran on ${event.model} instead of your pick.`, noticeAction: "tierHold" })
|
|
354
274
|
: [];
|
|
355
275
|
case "plan": {
|
|
356
|
-
|
|
357
|
-
* the plan. The daemon repeats it on this frame so the card is self-contained; when that exact
|
|
358
|
-
* block is the adjacent retired bubble, reclassify it into the card instead of drawing the same
|
|
359
|
-
* markdown once as prose and again as a plan. A distinct intro remains its own bubble. */
|
|
276
|
+
// Folds a plan into an identical retired prose bubble instead of drawing the same markdown twice.
|
|
360
277
|
const adjacent = this.rows.at(-1);
|
|
361
278
|
const consumes =
|
|
362
279
|
this.bubble === undefined &&
|
|
@@ -401,8 +318,6 @@ export class TranscriptFold {
|
|
|
401
318
|
const { kind: _kind, ...ask } = event;
|
|
402
319
|
return this.park(event.requestId, { terminalHelp: { ...ask, status: "pending" } });
|
|
403
320
|
}
|
|
404
|
-
case "service_offer":
|
|
405
|
-
return this.park(event.requestId, { serviceOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
|
|
406
321
|
case "capability_offer":
|
|
407
322
|
return this.park(event.requestId, { capabilityOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
|
|
408
323
|
case "payment_offer":
|
|
@@ -410,22 +325,8 @@ export class TranscriptFold {
|
|
|
410
325
|
case "credential_offer":
|
|
411
326
|
return this.park(event.requestId, { credentialOffer: { requestId: event.requestId, offer: event.offer, status: "pending" } });
|
|
412
327
|
case "resolved":
|
|
413
|
-
//
|
|
414
|
-
// own card the instant its reply was accepted (card-status.ts, the same derivation), so this is a
|
|
415
|
-
// no-op there and earns its keep on every other surface.
|
|
328
|
+
// Releases the card; the answering window already froze it locally, so this is a no-op there.
|
|
416
329
|
return this.patchParked(event.requestId, (row) => Object.assign(row, settledCards(row, event.reply)));
|
|
417
|
-
case "service_event":
|
|
418
|
-
return this.patchParked(event.requestId, (row) => {
|
|
419
|
-
if (row.serviceOffer !== undefined) {
|
|
420
|
-
row.serviceOffer.events = [...(row.serviceOffer.events ?? []), event.event];
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
case "service_receipt":
|
|
424
|
-
return this.patchParked(event.requestId, (row) => {
|
|
425
|
-
if (row.serviceOffer !== undefined) {
|
|
426
|
-
row.serviceOffer.receipt = { outcome: event.outcome, credits: event.credits, ...(event.remaining === undefined ? {} : { remaining: event.remaining }) };
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
330
|
case "capability_outcome":
|
|
430
331
|
return this.patchParked(event.requestId, (row) => {
|
|
431
332
|
if (row.capabilityOffer !== undefined) {
|
|
@@ -452,7 +353,7 @@ export class TranscriptFold {
|
|
|
452
353
|
};
|
|
453
354
|
}
|
|
454
355
|
});
|
|
455
|
-
//
|
|
356
|
+
// These carry facts about the turn, not rows in it; the run relays them as themselves.
|
|
456
357
|
case "session":
|
|
457
358
|
case "init":
|
|
458
359
|
case "terminal":
|
|
@@ -469,15 +370,15 @@ export class TranscriptFold {
|
|
|
469
370
|
}
|
|
470
371
|
}
|
|
471
372
|
|
|
472
|
-
/**
|
|
473
|
-
* card, at the end of what has been said so far. */
|
|
373
|
+
/** Appends a daemon-authored row (a decision notice, card feedback) after everything said so far. */
|
|
474
374
|
note(row: TranscriptRow): TranscriptPatch[] {
|
|
475
375
|
return this.pushRow(row);
|
|
476
376
|
}
|
|
477
377
|
|
|
478
|
-
/**
|
|
479
|
-
*
|
|
480
|
-
*
|
|
378
|
+
/**
|
|
379
|
+
* Ends the turn: closes the open bubble, freezes every still-pending card as nobody's decision, and notes a user
|
|
380
|
+
* stop.
|
|
381
|
+
*/
|
|
481
382
|
finish(ending: TurnEnding): TranscriptPatch[] {
|
|
482
383
|
const patches = this.closeBubble();
|
|
483
384
|
for (const [index, row] of this.rows.entries()) {
|
|
@@ -492,11 +393,9 @@ export class TranscriptFold {
|
|
|
492
393
|
return patches;
|
|
493
394
|
}
|
|
494
395
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
* full. A card this stream has never seen means the spawning call is not in the stream being read, so
|
|
499
|
-
* there is nothing to hang it off; dropping it is what keeps a nested level out of the level above it. */
|
|
396
|
+
// Routes a frame from a child stream onto the card that spawned it; its prose surfaces only when that child's own
|
|
397
|
+
// stream is read directly. A spawning call absent from this stream means there is nothing to nest under, so the
|
|
398
|
+
// frame is dropped.
|
|
500
399
|
private applyChild(event: AgentEvent, parent: string | undefined): TranscriptPatch[] {
|
|
501
400
|
const place = parent === undefined ? undefined : this.cards.get(parent);
|
|
502
401
|
if (place === undefined || parent === undefined) {
|
|
@@ -516,8 +415,7 @@ export class TranscriptFold {
|
|
|
516
415
|
return [];
|
|
517
416
|
}
|
|
518
417
|
|
|
519
|
-
//
|
|
520
|
-
// retired (a finished block of prose, a card, the end of a turn).
|
|
418
|
+
// Returns the bubble frames write to, opening a fresh assistant row when the last one was retired.
|
|
521
419
|
private open(): [number, TranscriptPatch[]] {
|
|
522
420
|
if (this.bubble !== undefined) {
|
|
523
421
|
return [this.bubble, []];
|
|
@@ -528,8 +426,8 @@ export class TranscriptFold {
|
|
|
528
426
|
return [this.bubble, [{ op: "append", row: structuredClone(row) }]];
|
|
529
427
|
}
|
|
530
428
|
|
|
531
|
-
//
|
|
532
|
-
//
|
|
429
|
+
// Retires the open bubble; one that ended empty is dropped rather than kept as a row, and it's always last so
|
|
430
|
+
// nothing above shifts.
|
|
533
431
|
private closeBubble(): TranscriptPatch[] {
|
|
534
432
|
const index = this.bubble;
|
|
535
433
|
this.bubble = undefined;
|
|
@@ -543,18 +441,15 @@ export class TranscriptFold {
|
|
|
543
441
|
return [{ op: "drop", index }];
|
|
544
442
|
}
|
|
545
443
|
|
|
546
|
-
//
|
|
547
|
-
// before, and the new row is the last.
|
|
444
|
+
// Pushes a row that is not the open bubble; closes the bubble first so order stays: what came before, then this.
|
|
548
445
|
private pushRow(row: TranscriptRow): TranscriptPatch[] {
|
|
549
446
|
const closed = this.closeBubble();
|
|
550
447
|
this.rows.push(row);
|
|
551
448
|
return [...closed, { op: "append", row: structuredClone(row) }];
|
|
552
449
|
}
|
|
553
450
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
* card is still a row, where the card IS the bubble. `into` reuses a row already there (the plan's own
|
|
557
|
-
* prose) instead of opening one. */
|
|
451
|
+
// A card takes the open bubble and closes it; `into` reuses an existing row (a plan's own prose) instead of opening
|
|
452
|
+
// a new one.
|
|
558
453
|
private park(requestId: string, cards: TranscriptCards, into?: number): TranscriptPatch[] {
|
|
559
454
|
const [index, opened] = into === undefined ? this.open() : [into, []];
|
|
560
455
|
Object.assign(this.rows[index]!, cards);
|
|
@@ -594,7 +489,7 @@ export class TranscriptFold {
|
|
|
594
489
|
}
|
|
595
490
|
}
|
|
596
491
|
|
|
597
|
-
/**
|
|
492
|
+
/** Folds a whole turn at once: opening rows, every frame, and how it ended; what a settled turn reads back as. */
|
|
598
493
|
export const foldTurn = (opening: readonly TranscriptRow[], events: readonly AgentEvent[], ending: TurnEnding = "settled", tag?: string): TranscriptRow[] => {
|
|
599
494
|
const fold = new TranscriptFold(opening, tag);
|
|
600
495
|
for (const event of events) {
|
|
@@ -604,9 +499,10 @@ export const foldTurn = (opening: readonly TranscriptRow[], events: readonly Age
|
|
|
604
499
|
return fold.rows;
|
|
605
500
|
};
|
|
606
501
|
|
|
607
|
-
/**
|
|
608
|
-
*
|
|
609
|
-
*
|
|
502
|
+
/**
|
|
503
|
+
* Applies one patch to a row list; only what the patch names moves. `tool` upserts by id anywhere in the tree,
|
|
504
|
+
* top-level or nested alike.
|
|
505
|
+
*/
|
|
610
506
|
export const applyTranscriptPatch = (rows: readonly TranscriptRow[], patch: TranscriptPatch): TranscriptRow[] => {
|
|
611
507
|
switch (patch.op) {
|
|
612
508
|
case "append":
|
|
@@ -624,9 +520,8 @@ export const applyTranscriptPatch = (rows: readonly TranscriptRow[], patch: Tran
|
|
|
624
520
|
}
|
|
625
521
|
};
|
|
626
522
|
|
|
627
|
-
//
|
|
628
|
-
//
|
|
629
|
-
// would be worse than showing it loose).
|
|
523
|
+
// Replaces the tool with this id anywhere in the tree, or appends it under `parent`, or at top level with no parent or
|
|
524
|
+
// no match.
|
|
630
525
|
export const upsertTool = (tools: readonly TranscriptTool[], tool: TranscriptTool, parent: string | undefined): TranscriptTool[] => {
|
|
631
526
|
const replaced = mapTool(tools, tool.id, () => tool);
|
|
632
527
|
if (replaced !== tools) {
|
|
@@ -641,8 +536,8 @@ export const upsertTool = (tools: readonly TranscriptTool[], tool: TranscriptToo
|
|
|
641
536
|
return [...tools, tool];
|
|
642
537
|
};
|
|
643
538
|
|
|
644
|
-
//
|
|
645
|
-
//
|
|
539
|
+
// Applies `fn` to the tool with `id` anywhere in the tree; returns the same array when absent, so an unrelated row's
|
|
540
|
+
// identity is unchanged.
|
|
646
541
|
export const mapTool = (tools: readonly TranscriptTool[], id: string, fn: (tool: TranscriptTool) => TranscriptTool): readonly TranscriptTool[] => {
|
|
647
542
|
let changed = false;
|
|
648
543
|
const next = tools.map((tool) => {
|
|
@@ -662,5 +557,5 @@ export const mapTool = (tools: readonly TranscriptTool[], id: string, fn: (tool:
|
|
|
662
557
|
return changed ? next : tools;
|
|
663
558
|
};
|
|
664
559
|
|
|
665
|
-
// Which fields
|
|
560
|
+
// Which row fields are cards, exported for readers that count rows by them.
|
|
666
561
|
export const cardFieldsOf = (row: TranscriptRow): TranscriptCards => Object.fromEntries(CARD_FIELDS.flatMap((field) => (row[field] === undefined ? [] : [[field, row[field]]])));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { cleanTranscription } from "./whisper.js";
|
|
3
|
+
|
|
4
|
+
test("flattens whisper output onto one line", () => {
|
|
5
|
+
expect(cleanTranscription(" Hello there.\n General Kenobi.\n")).toBe("Hello there. General Kenobi.");
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
// The whole reason this filter exists: whisper narrates silence, and a narration dispatched as speech is a
|
|
9
|
+
// turn nobody asked for.
|
|
10
|
+
test("drops noise-only annotations, in both bracket styles", () => {
|
|
11
|
+
expect(cleanTranscription(" [BLANK_AUDIO]\n")).toBeUndefined();
|
|
12
|
+
expect(cleanTranscription("(wind blowing)")).toBeUndefined();
|
|
13
|
+
expect(cleanTranscription("")).toBeUndefined();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// An annotation next to real speech drops the annotation and keeps the speech: the utterance did happen.
|
|
17
|
+
test("keeps speech that arrived alongside an annotation", () => {
|
|
18
|
+
expect(cleanTranscription("[music] \nreal words")).toBe("real words");
|
|
19
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Shared reading of whisper.cpp's stdout, used by the daemon's speech route and Discord's voice session, so both filter
|
|
2
|
+
// non-speech annotations the same way.
|
|
3
|
+
|
|
4
|
+
// Hugging Face repo the ggml-*.bin weights pull from on first use; each integration downloads its own size.
|
|
5
|
+
export const WHISPER_MODEL_REPO = "ggerganov/whisper.cpp";
|
|
6
|
+
|
|
7
|
+
// Cleans whisper's stdout to one line of text, or undefined for silence/noise-only output — a line that is entirely a
|
|
8
|
+
// bracketed annotation like `[BLANK_AUDIO]`.
|
|
9
|
+
export const cleanTranscription = (stdout: string): string | undefined => {
|
|
10
|
+
const text = stdout
|
|
11
|
+
.split("\n")
|
|
12
|
+
.map((line) => line.trim())
|
|
13
|
+
.filter((line) => line !== "" && !/^[[(].*[\])]$/.test(line))
|
|
14
|
+
.join(" ")
|
|
15
|
+
.trim();
|
|
16
|
+
return text === "" ? undefined : text;
|
|
17
|
+
};
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { expect, test } from "vitest";
|
|
2
|
-
import { type Workflow, WorkflowSchema, type WorkflowStep } from "
|
|
2
|
+
import { type Workflow, WorkflowSchema, type WorkflowStep } from "../schemas/workflows.js";
|
|
3
3
|
import { workflowFaults, workflowRunFaults } from "./workflow-faults.js";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* the workflow has to be refused for BEFORE a run, because the failure it prevents costs a full fan-out of
|
|
8
|
-
* sessions and then reports nothing anybody can act on.
|
|
9
|
-
*/
|
|
5
|
+
// Gate rules a workflow must be refused for before any run starts; unlike the graph rules, exercised by the scheduler's
|
|
6
|
+
// own integration tests, these have no real run to check against.
|
|
10
7
|
|
|
11
8
|
const judge = (over: Partial<WorkflowStep> = {}): WorkflowStep => ({
|
|
12
9
|
id: "judge",
|
|
@@ -73,55 +70,40 @@ test("a gate on a field the step does not declare is refused", () => {
|
|
|
73
70
|
expect(faults).toEqual([`The gate reads "shipit", which "Judge" does not declare.`]);
|
|
74
71
|
});
|
|
75
72
|
|
|
76
|
-
// A list has no reading as a release decision, and the one it would fall into (join and compare) is a rule
|
|
77
|
-
// nobody wrote down.
|
|
78
73
|
test("a gate on a list field is refused", () => {
|
|
79
74
|
const steps = [judge({ output: { kind: "json", fields: [{ name: "release", type: "string[]", description: "the verdicts", required: true }] } })];
|
|
80
75
|
const faults = workflowFaults(gated({ steps }));
|
|
81
76
|
expect(faults).toEqual([`The gate reads "release", which is a list: a release decision has to be one value.`]);
|
|
82
77
|
});
|
|
83
78
|
|
|
84
|
-
// The expensive one to discover at run time: it passes every save, then blocks a release on the one commit
|
|
85
|
-
// where the model decided the field was not worth writing.
|
|
86
79
|
test("a gate on an optional field is refused", () => {
|
|
87
80
|
const steps = [judge({ output: { kind: "json", fields: [{ name: "release", type: "string", description: "pass | fail", required: false }] } })];
|
|
88
81
|
const faults = workflowFaults(gated({ steps }));
|
|
89
82
|
expect(faults).toEqual([`The gate reads "release", which "Judge" declares optional, it has to be required.`]);
|
|
90
83
|
});
|
|
91
84
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* and must save cleanly; it is only unrunnable on the particular run that brought no request.
|
|
95
|
-
*/
|
|
85
|
+
// Run-time rule, apart from the graph rules above: a design whose steps inherit goal/prompt from the request saves
|
|
86
|
+
// cleanly and is only unrunnable on a run with no request.
|
|
96
87
|
|
|
97
|
-
// The shape the whole feature is for: a saved design that says nothing about the task, pointed at today's job.
|
|
98
88
|
test("a design whose steps inherit is a perfectly good design", () => {
|
|
99
89
|
const inheriting = gated({ steps: [judge({ goal: undefined, prompt: undefined })] });
|
|
100
90
|
expect(workflowFaults(inheriting)).toEqual([]);
|
|
101
91
|
expect(workflowRunFaults(inheriting, "make the importer handle empty files")).toEqual([]);
|
|
102
92
|
});
|
|
103
93
|
|
|
104
|
-
/* Refused at the door rather than discovered by the first step, because this is the one combination with
|
|
105
|
-
* nothing to tell the model at all, and by the time a step found out, the run has already opened a session per
|
|
106
|
-
* root and started paying for them.
|
|
107
|
-
*/
|
|
108
94
|
test("running an inheriting design with no request is refused", () => {
|
|
109
95
|
const inheriting = gated({ steps: [judge({ goal: undefined, prompt: undefined })] });
|
|
110
96
|
expect(workflowRunFaults(inheriting, undefined)).toHaveLength(1);
|
|
111
97
|
expect(workflowRunFaults(inheriting, undefined)[0]).toContain(`"Judge"`);
|
|
112
|
-
// Whitespace
|
|
98
|
+
// Whitespace-only requests come from the gate's webhook body, which isn't trimmed like the composer.
|
|
113
99
|
expect(workflowRunFaults(inheriting, " \n ")).toHaveLength(1);
|
|
114
100
|
});
|
|
115
101
|
|
|
116
|
-
// Only half-inheriting is still inheriting: a step with its own instruction but no goal is measured against
|
|
117
|
-
// the request, so it needs one just as much.
|
|
118
102
|
test("a step that declares only one of the two still needs a request", () => {
|
|
119
103
|
expect(workflowRunFaults(gated({ steps: [judge({ goal: undefined })] }), undefined)).toHaveLength(1);
|
|
120
104
|
expect(workflowRunFaults(gated({ steps: [judge({ prompt: undefined })] }), undefined)).toHaveLength(1);
|
|
121
105
|
});
|
|
122
106
|
|
|
123
|
-
// A design that says everything itself is startable from anywhere, with no composer behind it, which is what
|
|
124
|
-
// keeps the gate's webhook and the workflows page working for the designs written that way.
|
|
125
107
|
test("a design that declares everything runs with no request at all", () => {
|
|
126
108
|
expect(workflowRunFaults(gated(), undefined)).toEqual([]);
|
|
127
109
|
});
|