@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
|
@@ -11,12 +11,10 @@ import type {
|
|
|
11
11
|
} from "../schemas/maintenance.js";
|
|
12
12
|
import { describe, expect, test } from "vitest";
|
|
13
13
|
import { choreById, CHORES } from "./chores.js";
|
|
14
|
-
import { assessReport, ledgerKey, unseenVerdicts } from "./verdict.js";
|
|
14
|
+
import { assessReport, choreAnswer, choreAnswered, ledgerKey, unseenVerdicts } from "./verdict.js";
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* measured, badging the same finding every hour while its fix sits in review, letting a snooze become a
|
|
19
|
-
* permanent silence, or letting an agent's "these were false positives" be forgotten by the next poll. */
|
|
16
|
+
// The chore verdict state machine, tested at the distinctions a simpler design gets wrong: reporting an unmeasured repo
|
|
17
|
+
// clean, badging the same finding repeatedly, a snooze becoming permanent, or a false-positive report being forgotten.
|
|
20
18
|
|
|
21
19
|
const DAY = 86_400_000;
|
|
22
20
|
const NOW = Date.UTC(2026, 6, 31);
|
|
@@ -30,8 +28,7 @@ const pkg = (over: Partial<ChorePackage> = {}): ChorePackage => ({
|
|
|
30
28
|
...over,
|
|
31
29
|
});
|
|
32
30
|
|
|
33
|
-
// A
|
|
34
|
-
// chore APPLIES by default and each applicability test can turn off exactly the one fact it is about.
|
|
31
|
+
// A repo where every chore applies by default, so an applicability test only has to toggle the one fact it's about.
|
|
35
32
|
const shape = (over: Partial<ChoreShape> = {}): ChoreShape => ({
|
|
36
33
|
docs: [`docs/architecture/repo.md`],
|
|
37
34
|
dockerfiles: [`Dockerfile`],
|
|
@@ -66,8 +63,7 @@ const auditProbe = (names: readonly string[]): ProbeResult =>
|
|
|
66
63
|
const report = (over: Partial<ChoresReport> = {}): ChoresReport => ({
|
|
67
64
|
repos: [{ repo: `app`, probes: [], signals: signals() }],
|
|
68
65
|
ledger: [],
|
|
69
|
-
// Verdicts are about
|
|
70
|
-
// less due, it only makes the panel say so. Empty here because no assertion in this file should depend on it.
|
|
66
|
+
// Verdicts are about evidence, not work in flight; empty here since no test in this file depends on it.
|
|
71
67
|
running: [],
|
|
72
68
|
node: `v24.18.0`,
|
|
73
69
|
...over,
|
|
@@ -88,8 +84,6 @@ describe(`what "we have not measured this" means`, () => {
|
|
|
88
84
|
expect(verdict.detail.join(` `)).toContain(`Security advisories`);
|
|
89
85
|
});
|
|
90
86
|
|
|
91
|
-
// The distinction that stops the panel reporting a green repository it has never looked at. A tool the repo
|
|
92
|
-
// does not have is not evidence of anything, and it carries the tool's own reason rather than an invented one.
|
|
93
87
|
test(`a probe the repository cannot run says so, and never badges`, () => {
|
|
94
88
|
const knipReason = `knip is not a devDependency`;
|
|
95
89
|
const input = report({
|
|
@@ -129,8 +123,6 @@ describe(`the ledger debounces; it cannot hide`, () => {
|
|
|
129
123
|
expect(unseenVerdicts([verdict], {})).toEqual([]);
|
|
130
124
|
});
|
|
131
125
|
|
|
132
|
-
// The point of digesting evidence rather than stamping a time: a fix landing, or a NEW advisory arriving,
|
|
133
|
-
// both move the evidence and both deserve to be heard again.
|
|
134
126
|
test(`evidence that has moved since the run is unsettled again`, () => {
|
|
135
127
|
const moved = report({
|
|
136
128
|
repos: [{ repo: `app`, probes: [auditProbe([`left-pad`, `minimist`])], signals: signals() }],
|
|
@@ -159,9 +151,6 @@ describe(`the ledger debounces; it cannot hide`, () => {
|
|
|
159
151
|
expect(lapsed.state).toBe(`due`);
|
|
160
152
|
});
|
|
161
153
|
|
|
162
|
-
/* A chore with a cadence expires its own settlement, so "we looked and chose not to act" cannot silence it
|
|
163
|
-
* for good. Security has no cadence on purpose: an advisory does not become interesting again because
|
|
164
|
-
* ninety days passed, it becomes interesting when the advisory set changes, so its settlement persists. */
|
|
165
154
|
test(`settlement expires with the chore's cadence, and persists for the chores that have none`, () => {
|
|
166
155
|
const dependencies = choreById(`dependencies-outdated`);
|
|
167
156
|
expect(dependencies?.cadenceMs).toBeGreaterThan(0);
|
|
@@ -172,10 +161,8 @@ describe(`the ledger debounces; it cannot hide`, () => {
|
|
|
172
161
|
});
|
|
173
162
|
});
|
|
174
163
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
* produces, so "the fix did not move the numbers" and "we have not looked since the fix" reached the same branch
|
|
178
|
-
* and both came out as a confident `due`. */
|
|
164
|
+
// Guards the case an unchanged digest alone can't tell apart: a probe that never re-ran looks identical to a fix
|
|
165
|
+
// that didn't work, and both used to read as a confident `due`.
|
|
179
166
|
describe(`a measurement older than the work is not evidence about the work`, () => {
|
|
180
167
|
const withAdvisories = report({ repos: [{ repo: `app`, probes: [auditProbe([`left-pad`])], signals: signals() }] });
|
|
181
168
|
const ledgerEntry = (over: Partial<ChoreLedgerEntry> = {}): ChoreLedgerEntry => ({
|
|
@@ -188,24 +175,20 @@ describe(`a measurement older than the work is not evidence about the work`, ()
|
|
|
188
175
|
...over,
|
|
189
176
|
});
|
|
190
177
|
|
|
191
|
-
//
|
|
178
|
+
// Probe ran a day ago, the ledger entry an hour ago: nothing has looked since the entry.
|
|
192
179
|
test(`a turn that landed after the measurement steps the chore down from due`, () => {
|
|
193
180
|
const verdict = verdictFor({ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000 })] }, `security-advisories`);
|
|
194
181
|
expect(verdict.state).toBe(`stale`);
|
|
195
|
-
// The evidence stays on the row: it is what the reader checks the claim against, and the claim comes off.
|
|
196
182
|
expect(verdict.detail).not.toEqual([]);
|
|
197
183
|
expect(verdict.settled).toBe(false);
|
|
198
184
|
});
|
|
199
185
|
|
|
200
|
-
// No prompt, so the row cannot offer to spend a second turn on a finding nobody has re-checked; and no badge,
|
|
201
|
-
// which is what stops the tile lighting for work that is already done.
|
|
202
186
|
test(`a stale chore offers no turn and never badges`, () => {
|
|
203
187
|
const verdict = verdictFor({ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000 })] }, `security-advisories`);
|
|
204
188
|
expect(verdict.prompt).toBeUndefined();
|
|
205
189
|
expect(unseenVerdicts([verdict], {})).toEqual([]);
|
|
206
190
|
});
|
|
207
191
|
|
|
208
|
-
// Re-measuring is the whole cure: the same run, against evidence taken after it, is settled rather than stale.
|
|
209
192
|
test(`re-measuring after the turn restores the verdict: due, and now genuinely settled`, () => {
|
|
210
193
|
const remeasured = report({
|
|
211
194
|
repos: [{ repo: `app`, probes: [{ ...auditProbe([`left-pad`]), ranAt: NOW - 60_000 }], signals: signals() }],
|
|
@@ -216,14 +199,11 @@ describe(`a measurement older than the work is not evidence about the work`, ()
|
|
|
216
199
|
expect(verdict.settled).toBe(true);
|
|
217
200
|
});
|
|
218
201
|
|
|
219
|
-
// The agent's own "these were false positives" is a judgement about the live tree, made after the measurement.
|
|
220
|
-
// It outranks staleness, or every clean run would be re-opened by the very probe age it was reported against.
|
|
221
202
|
test(`an agent reporting the findings did not hold up still clears the chore`, () => {
|
|
222
203
|
const verdict = verdictFor({ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000, outcome: `clean` })] }, `security-advisories`);
|
|
223
204
|
expect(verdict.state).toBe(`clear`);
|
|
224
205
|
});
|
|
225
206
|
|
|
226
|
-
// A snooze is the owner speaking, and it outranks both.
|
|
227
207
|
test(`a snooze still wins`, () => {
|
|
228
208
|
const verdict = verdictFor(
|
|
229
209
|
{ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000, snoozedUntil: NOW + DAY })] },
|
|
@@ -232,12 +212,9 @@ describe(`a measurement older than the work is not evidence about the work`, ()
|
|
|
232
212
|
expect(verdict.state).toBe(`snoozed`);
|
|
233
213
|
});
|
|
234
214
|
|
|
235
|
-
// Every measured row carries when it was taken, so no row can pass off a week-old count as this morning's.
|
|
236
215
|
test(`every measured verdict says when it was measured, and the unmeasurable ones say nothing`, () => {
|
|
237
216
|
expect(verdictFor(withAdvisories, `security-advisories`).measuredAt).toBe(NOW - DAY);
|
|
238
|
-
// A survey rests on no measurement: it is decided by the calendar, and has nothing to be out of date.
|
|
239
217
|
expect(verdictFor(report(), `standardize-patterns`).measuredAt).toBeUndefined();
|
|
240
|
-
// Nor does a probe that never ran.
|
|
241
218
|
expect(verdictFor(report(), `security-advisories`).measuredAt).toBeUndefined();
|
|
242
219
|
});
|
|
243
220
|
});
|
|
@@ -285,8 +262,6 @@ describe(`the badge speaks about transitions, not about statistics`, () => {
|
|
|
285
262
|
expect(unseenVerdicts([next], seen)).toHaveLength(1);
|
|
286
263
|
});
|
|
287
264
|
|
|
288
|
-
// The rule the whole surface is built to satisfy: a backlog that has been seen once must stop speaking, or
|
|
289
|
-
// the tile is lit every day and the rail stops being read at all.
|
|
290
265
|
test(`a standing backlog of undocumented packages goes quiet once seen, but a new package speaks`, () => {
|
|
291
266
|
const undocumented = (dirs: readonly string[]): ChoresReport =>
|
|
292
267
|
report({
|
|
@@ -314,7 +289,7 @@ describe(`the findings themselves`, () => {
|
|
|
314
289
|
score: complexity * 20,
|
|
315
290
|
latestMs: NOW,
|
|
316
291
|
});
|
|
317
|
-
// An even ranking has no outlier and no key module
|
|
292
|
+
// An even ranking has no outlier and no key module: a healthy repository, an empty finding.
|
|
318
293
|
const even = report({
|
|
319
294
|
repos: [{ repo: `app`, probes: [], signals: signals({ hotspots: [hotspot(`a.ts`, 30), hotspot(`b.ts`, 28), hotspot(`c.ts`, 26)] }) }],
|
|
320
295
|
});
|
|
@@ -355,8 +330,6 @@ describe(`the findings themselves`, () => {
|
|
|
355
330
|
expect(verdict.detail[0]).toContain(`schema validation`);
|
|
356
331
|
});
|
|
357
332
|
|
|
358
|
-
// The runtime table is static and offline by design; a major it does not know about must read as "not
|
|
359
|
-
// end-of-life", which is the safe direction to be wrong in.
|
|
360
333
|
test(`an unknown node major is not reported as end-of-life`, () => {
|
|
361
334
|
expect(verdictFor({ ...report(), node: `v99.0.0` }, `runtime-eol`).state).toBe(`clear`);
|
|
362
335
|
});
|
|
@@ -376,8 +349,6 @@ describe(`the prompts`, () => {
|
|
|
376
349
|
const dueVerdict = () =>
|
|
377
350
|
verdictFor(report({ repos: [{ repo: `app`, probes: [auditProbe([`left-pad`])], signals: signals() }] }), `security-advisories`);
|
|
378
351
|
|
|
379
|
-
/* A prompt that counts without NAMING sends the agent off to re-derive a list we are already holding: slowly,
|
|
380
|
-
* and against a tree that has moved since. Every measured chore names its artefacts. */
|
|
381
352
|
test(`name the artefacts, not just how many there were`, () => {
|
|
382
353
|
const verdict = dueVerdict();
|
|
383
354
|
expect(verdict.prompt).toContain(`left-pad`);
|
|
@@ -435,7 +406,6 @@ describe(`the prompts`, () => {
|
|
|
435
406
|
expect(verdict.prompt, verdict.chore.id).toBeTypeOf(`string`);
|
|
436
407
|
expect(verdict.digest, verdict.chore.id).not.toBe(``);
|
|
437
408
|
}
|
|
438
|
-
// Each measured chore's own artefact reaches its own prompt: the regression this whole test exists for.
|
|
439
409
|
const promptFor = (chore: string) => due.find((verdict) => verdict.chore.id === chore)?.prompt ?? ``;
|
|
440
410
|
expect(promptFor(`security-advisories`)).toContain(`left-pad`);
|
|
441
411
|
expect(promptFor(`dependencies-outdated`)).toContain(`vue 1.0.0 → 2.0.0`);
|
|
@@ -447,10 +417,9 @@ describe(`the prompts`, () => {
|
|
|
447
417
|
});
|
|
448
418
|
});
|
|
449
419
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
* pipeline nobody has. Each of those teaches the reader that this list was not written by someone who looked. */
|
|
420
|
+
// Applicability: whether the chore is a question worth asking here, as against whether the answer is yes. Each
|
|
421
|
+
// case is a row the previous design could never act on (re-reading documentation that doesn't exist, slimming an image
|
|
422
|
+
// that isn't there).
|
|
454
423
|
describe(`what does not apply here`, () => {
|
|
455
424
|
const withShape = (over: Partial<ChoreShape>): ChoresReport =>
|
|
456
425
|
report({ repos: [{ repo: `app`, probes: [], signals: signals({ shape: shape(over) }) }] });
|
|
@@ -483,9 +452,6 @@ describe(`what does not apply here`, () => {
|
|
|
483
452
|
expect(verdictFor(single, `library-overlap`).state).toBe(`not-applicable`);
|
|
484
453
|
});
|
|
485
454
|
|
|
486
|
-
// A survey has no evidence to be absent: "90 days have passed" is true everywhere, so without a gate it
|
|
487
|
-
// fires forever in repositories where its subject does not exist. This is the regression that motivated
|
|
488
|
-
// making `applies` a required field on SurveySpec rather than an optional one.
|
|
489
455
|
test(`a tiny repository is not surveyed for cross-cutting patterns it cannot have`, () => {
|
|
490
456
|
const fileCount = 4;
|
|
491
457
|
const tiny = report({
|
|
@@ -497,8 +463,6 @@ describe(`what does not apply here`, () => {
|
|
|
497
463
|
});
|
|
498
464
|
|
|
499
465
|
test(`applicability is decided before measurement, so a missing probe never masks it`, () => {
|
|
500
|
-
// dead-code needs the knip probe, which has not run; the gate still wins, because "we cannot ask this
|
|
501
|
-
// question here" outranks "we have not measured it".
|
|
502
466
|
expect(verdictFor(withShape({ packageManifest: false }), `dead-code`).state).toBe(`not-applicable`);
|
|
503
467
|
});
|
|
504
468
|
|
|
@@ -512,11 +476,6 @@ describe(`what does not apply here`, () => {
|
|
|
512
476
|
expect(assessReport(withShape({}), NOW).filter((verdict) => verdict.state === `not-applicable`)).toEqual([]);
|
|
513
477
|
});
|
|
514
478
|
|
|
515
|
-
/* THE CAUSES HAVE TO GROUP, and that is a fact about the STRINGS rather than about the gates. The panel's
|
|
516
|
-
* scope note prints one line per distinct cause with the chores it costs listed beside it, so two gates that both mean
|
|
517
|
-
* "there is no package.json here" and say it in different words print two lines, and a workspace root, where
|
|
518
|
-
* a dozen chores are ruled out by three facts, is back to the paragraph-per-chore wall this phrasing replaced.
|
|
519
|
-
* Bounded rather than enumerated: a new gate may invent a new cause, it may not invent a new sentence. */
|
|
520
479
|
test(`applicability reasons are bare causes, so the ones that mean the same thing group`, () => {
|
|
521
480
|
const bare = withShape({ packageManifest: false, lockfile: false, docs: [], ci: [], dockerfiles: [], deps: [] });
|
|
522
481
|
const causes = assessReport(bare, NOW)
|
|
@@ -526,14 +485,14 @@ describe(`what does not apply here`, () => {
|
|
|
526
485
|
expect(cause, cause).toMatch(/^[a-z]/);
|
|
527
486
|
expect(cause.split(` `).length, cause).toBeLessThanOrEqual(4);
|
|
528
487
|
}
|
|
529
|
-
// Four chores are ruled out by
|
|
488
|
+
// Four chores are ruled out by one absent file; the strip says so once rather than four times.
|
|
530
489
|
expect(causes.filter((cause) => cause === `no package.json`)).toHaveLength(4);
|
|
531
490
|
});
|
|
532
491
|
});
|
|
533
492
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
493
|
+
// Four chores over two probes, tested where they decide something: the share that makes a bundle a finding, the
|
|
494
|
+
// names that make two components one, and the digests, since three of the four measure things that move on every markup
|
|
495
|
+
// edit.
|
|
537
496
|
const uiProbe = (scan: Partial<UiScan> = {}): ProbeResult =>
|
|
538
497
|
probe({ id: `ui`, facts: { id: `ui`, scan: { components: [], bypasses: [], idioms: [], ...scan } } });
|
|
539
498
|
|
|
@@ -575,14 +534,10 @@ describe(`what the browser downloads`, () => {
|
|
|
575
534
|
expect(verdictFor(withProbes([bundleProbe(even)]), `bundle-weight`).state).toBe(`clear`);
|
|
576
535
|
});
|
|
577
536
|
|
|
578
|
-
// Two files cannot tell you how a build is divided, and the larger of them is over half by arithmetic.
|
|
579
537
|
test(`too few assets to have a shape is clear, not due`, () => {
|
|
580
538
|
expect(verdictFor(withProbes([bundleProbe([chunk(`dist/a-1.js`, 900), chunk(`dist/b-2.js`, 10)])]), `bundle-weight`).state).toBe(`clear`);
|
|
581
539
|
});
|
|
582
540
|
|
|
583
|
-
/* THE CASE THIS CHORE WOULD OTHERWISE FAIL EVERY DAY. A content hash changing is what a content hash is for,
|
|
584
|
-
* so rebuilding identical code renames every asset. Digesting the raw paths would mint new evidence on every
|
|
585
|
-
* `pnpm build` and badge forever while reporting nothing new. */
|
|
586
541
|
test(`rebuilding the same code does not read as new evidence`, () => {
|
|
587
542
|
const before = verdictFor(
|
|
588
543
|
withProbes([bundleProbe([chunk(`dist/vendor-DlAUqK2U.js`, 800), chunk(`dist/index-a1b2c3d4.js`, 100), chunk(`dist/s.css`, 50)])]),
|
|
@@ -619,9 +574,6 @@ describe(`idioms the framework has replaced`, () => {
|
|
|
619
574
|
expect(verdict.detail[0]).toContain(`script setup`);
|
|
620
575
|
});
|
|
621
576
|
|
|
622
|
-
/* A migration in progress is a set that changes on every commit, so digesting the file identities, which is
|
|
623
|
-
* right for the documentation chore, whose set is packages: would badge continuously through exactly the
|
|
624
|
-
* period someone is doing the work. The bucketed count moves on real progress and not on daily churn. */
|
|
625
577
|
test(`one more file in a large migration is not news`, () => {
|
|
626
578
|
const before = verdictFor(withProbes([uiProbe({ idioms: [idioms(`vue-options-api`, 40)] })]), `framework-idiom`);
|
|
627
579
|
const after = verdictFor(withProbes([uiProbe({ idioms: [idioms(`vue-options-api`, 41)] })]), `framework-idiom`);
|
|
@@ -634,15 +586,10 @@ describe(`idioms the framework has replaced`, () => {
|
|
|
634
586
|
expect(after.digest).not.toBe(before.digest);
|
|
635
587
|
});
|
|
636
588
|
|
|
637
|
-
// The daemon composes the sweep from its own copy of the table, so an image ahead of the browser can report a
|
|
638
|
-
// rule this build has no label or replacement for. A row about it could say nothing useful.
|
|
639
589
|
test(`an idiom this build of the book does not know is dropped, not shown unnamed`, () => {
|
|
640
590
|
expect(verdictFor(withProbes([uiProbe({ idioms: [idioms(`react-from-2029`, 5)] })]), `framework-idiom`).state).toBe(`clear`);
|
|
641
591
|
});
|
|
642
592
|
|
|
643
|
-
/* A probe's command is a fixed string, so every rule sweeps every repository and the Angular patterns get
|
|
644
|
-
* their chance in a Vue codebase. Run against this workspace it found one file: the rule table itself, which
|
|
645
|
-
* quotes `RouterModule.forRoot` as a pattern. What the repository declares is what settles it. */
|
|
646
593
|
test(`an idiom from a framework the repository does not declare is not its problem`, () => {
|
|
647
594
|
const vue = withProbes([uiProbe({ idioms: [idioms(`angular-ngmodule`, 4)] })], { deps: [`vue`] });
|
|
648
595
|
const angular = withProbes([uiProbe({ idioms: [idioms(`angular-ngmodule`, 4)] })], { deps: [`@angular/core`] });
|
|
@@ -669,8 +616,6 @@ describe(`components built twice`, () => {
|
|
|
669
616
|
expect(verdictFor(withProbes([components(`src/Button.vue`, `src/Card.vue`), jscpdProbe([])]), `component-overlap`).state).toBe(`clear`);
|
|
670
617
|
});
|
|
671
618
|
|
|
672
|
-
// The other half of the evidence: two components with unrelated names doing the same work, which no name
|
|
673
|
-
// comparison can reach and jscpd already measured.
|
|
674
619
|
test(`a clone counts only when a component sits on both sides of it`, () => {
|
|
675
620
|
const ui = components(`src/Chart.vue`, `src/Graph.vue`);
|
|
676
621
|
const shared = verdictFor(
|
|
@@ -686,8 +631,6 @@ describe(`components built twice`, () => {
|
|
|
686
631
|
expect(oneSided.state).toBe(`clear`);
|
|
687
632
|
});
|
|
688
633
|
|
|
689
|
-
/* Half a measurement would let the row claim it looked for shared logic in a repository where jscpd has never
|
|
690
|
-
* run: the "measured and found nothing" lie the unavailable state exists to prevent. */
|
|
691
634
|
test(`without the clone sweep the chore is unavailable, not clear`, () => {
|
|
692
635
|
expect(verdictFor(withProbes([components(`src/Button.vue`, `src/ui/Button.vue`)]), `component-overlap`).state).toBe(`unavailable`);
|
|
693
636
|
});
|
|
@@ -713,8 +656,6 @@ describe(`hard-coded styles`, () => {
|
|
|
713
656
|
expect(verdict.detail[0]).toContain(`11`);
|
|
714
657
|
});
|
|
715
658
|
|
|
716
|
-
// Tailwind gates this one alone: a Vue repository with no Tailwind has no theme scale to have bypassed, and
|
|
717
|
-
// a row saying so would be the surface inventing a subject.
|
|
718
659
|
test(`a repository without Tailwind is not asked the question at all`, () => {
|
|
719
660
|
const verdict = verdictFor(
|
|
720
661
|
withProbes([uiProbe({ bypasses: [{ path: `src/Nav.vue`, count: 2 }] })], { deps: [`vue`] }),
|
|
@@ -724,8 +665,8 @@ describe(`hard-coded styles`, () => {
|
|
|
724
665
|
expect(verdict.headline).toContain(`Tailwind`);
|
|
725
666
|
});
|
|
726
667
|
|
|
727
|
-
//
|
|
728
|
-
//
|
|
668
|
+
// The framework gate all four share reads `deps` from shape, not from `packages`: a single-package app has no
|
|
669
|
+
// workspace packages at all.
|
|
729
670
|
test(`a repository with no framework rules the front-end chores out entirely`, () => {
|
|
730
671
|
const states = [`bundle-weight`, `framework-idiom`, `component-overlap`, `tailwind-arbitrary-values`].map(
|
|
731
672
|
(id) => verdictFor(withProbes([], { deps: [`pino`] }), id).state,
|
|
@@ -734,9 +675,89 @@ describe(`hard-coded styles`, () => {
|
|
|
734
675
|
});
|
|
735
676
|
});
|
|
736
677
|
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
678
|
+
// The second axis: has anyone already answered this, and does the answer still stand; what the panel demotes on
|
|
679
|
+
// (mark, tint, counts) has to match this exactly.
|
|
680
|
+
describe(`whether a chore has already been answered`, () => {
|
|
681
|
+
const withAdvisories = report({ repos: [{ repo: `app`, probes: [auditProbe([`left-pad`])], signals: signals() }] });
|
|
682
|
+
const ledgerEntry = (over: Partial<ChoreLedgerEntry> = {}): ChoreLedgerEntry => ({
|
|
683
|
+
repo: `app`,
|
|
684
|
+
chore: `security-advisories`,
|
|
685
|
+
ranAt: NOW - DAY,
|
|
686
|
+
runId: `r1`,
|
|
687
|
+
outcome: `reported`,
|
|
688
|
+
digest: verdictFor(withAdvisories, `security-advisories`).digest,
|
|
689
|
+
...over,
|
|
690
|
+
});
|
|
691
|
+
|
|
692
|
+
test(`a settled chore carries its answer, and the answer stands`, () => {
|
|
693
|
+
const verdict = verdictFor({ ...withAdvisories, ledger: [ledgerEntry()] }, `security-advisories`);
|
|
694
|
+
expect(verdict.state).toBe(`due`);
|
|
695
|
+
expect(choreAnswer(verdict)).toEqual({ outcome: `reported`, ranAt: NOW - DAY });
|
|
696
|
+
expect(choreAnswered(verdict)).toBe(true);
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
test(`a stale chore carries its answer too`, () => {
|
|
700
|
+
const verdict = verdictFor({ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000, outcome: `acted` })] }, `security-advisories`);
|
|
701
|
+
expect(verdict.state).toBe(`stale`);
|
|
702
|
+
expect(choreAnswer(verdict)?.outcome).toBe(`acted`);
|
|
703
|
+
expect(choreAnswered(verdict)).toBe(true);
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
test(`a stale chore with nothing to show is still nothing to start`, () => {
|
|
707
|
+
const verdict = verdictFor(
|
|
708
|
+
{ ...withAdvisories, ledger: [ledgerEntry({ ranAt: NOW - 3_600_000, digest: `answered-something-else` })] },
|
|
709
|
+
`security-advisories`,
|
|
710
|
+
);
|
|
711
|
+
expect(verdict.state).toBe(`stale`);
|
|
712
|
+
expect(verdict.prompt).toBeUndefined();
|
|
713
|
+
expect(choreAnswer(verdict)).toBeUndefined();
|
|
714
|
+
expect(choreAnswered(verdict)).toBe(true);
|
|
715
|
+
});
|
|
716
|
+
|
|
717
|
+
test(`a run against evidence that has since moved has answered nothing`, () => {
|
|
718
|
+
const moved = report({
|
|
719
|
+
repos: [{ repo: `app`, probes: [auditProbe([`left-pad`, `minimist`])], signals: signals() }],
|
|
720
|
+
ledger: [ledgerEntry()],
|
|
721
|
+
});
|
|
722
|
+
const verdict = verdictFor(moved, `security-advisories`);
|
|
723
|
+
expect(verdict.state).toBe(`due`);
|
|
724
|
+
expect(choreAnswer(verdict)).toBeUndefined();
|
|
725
|
+
expect(choreAnswered(verdict)).toBe(false);
|
|
726
|
+
});
|
|
727
|
+
|
|
728
|
+
test(`a lapsed chore still shows what was concluded, and no longer counts as answered`, () => {
|
|
729
|
+
const dependencies = choreById(`dependencies-outdated`);
|
|
730
|
+
expect(dependencies?.cadenceMs).toBeGreaterThan(0);
|
|
731
|
+
const lapsedAt = NOW - (dependencies?.cadenceMs ?? 0) - DAY;
|
|
732
|
+
|
|
733
|
+
const outdatedProbe = probe({
|
|
734
|
+
id: `outdated`,
|
|
735
|
+
facts: { id: `outdated`, packages: [{ name: `vue`, current: `1.0.0`, latest: `2.0.0`, kind: `major`, section: `dependencies` }] },
|
|
736
|
+
});
|
|
737
|
+
const repos = [{ repo: `app`, probes: [outdatedProbe], signals: signals() }];
|
|
738
|
+
// The digest comes from the verdict itself, not a transcription, so this stays a test about the cadence, not a
|
|
739
|
+
// mismatched fingerprint.
|
|
740
|
+
const digest = verdictFor(report({ repos }), `dependencies-outdated`).digest;
|
|
741
|
+
const entry: ChoreLedgerEntry = { repo: `app`, chore: `dependencies-outdated`, ranAt: lapsedAt, runId: `r0`, outcome: `acted`, digest };
|
|
742
|
+
|
|
743
|
+
const verdict = verdictFor(report({ repos, ledger: [entry] }), `dependencies-outdated`);
|
|
744
|
+
expect(verdict.state).toBe(`due`);
|
|
745
|
+
// Same evidence: the run did answer this; only the cadence lapsing asks again.
|
|
746
|
+
expect(verdict.settled).toBe(false);
|
|
747
|
+
expect(choreAnswer(verdict)?.outcome).toBe(`acted`);
|
|
748
|
+
expect(choreAnswered(verdict)).toBe(false);
|
|
749
|
+
});
|
|
750
|
+
|
|
751
|
+
test(`a row with no finding of its own has no answer`, () => {
|
|
752
|
+
const clear = verdictFor(report({ repos: [{ repo: `app`, probes: [auditProbe([])], signals: signals() }], ledger: [ledgerEntry()] }), `security-advisories`);
|
|
753
|
+
expect(clear.state).toBe(`clear`);
|
|
754
|
+
expect(clear.digest).toBe(``);
|
|
755
|
+
expect(choreAnswer(clear)).toBeUndefined();
|
|
756
|
+
});
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
// The criterion: the rule in words beside the evidence that met it. A row reporting a number without it is
|
|
760
|
+
// asking to be trusted, and one wrong row costs the list its credibility.
|
|
740
761
|
describe(`every chore says what would make it due`, () => {
|
|
741
762
|
test(`every entry in the book carries a criterion`, () => {
|
|
742
763
|
for (const chore of CHORES) {
|