toolroll 0.5.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/LICENSE +21 -0
- package/README.md +1113 -0
- package/THIRD_PARTY_NOTICES.md +449 -0
- package/dist/accent-colors.d.ts +48 -0
- package/dist/accent-colors.js +122 -0
- package/dist/action-ledger.d.ts +26 -0
- package/dist/action-ledger.js +75 -0
- package/dist/agent-fence.d.ts +42 -0
- package/dist/agent-fence.js +183 -0
- package/dist/agentconfig.d.ts +216 -0
- package/dist/agentconfig.js +454 -0
- package/dist/api-tokens.d.ts +16 -0
- package/dist/api-tokens.js +27 -0
- package/dist/approval-policy.d.ts +69 -0
- package/dist/approval-policy.js +137 -0
- package/dist/approval-rules-ui.d.ts +25 -0
- package/dist/approval-rules-ui.js +39 -0
- package/dist/assignment-adapters.d.ts +180 -0
- package/dist/assignment-adapters.js +239 -0
- package/dist/assignment-brief.d.ts +71 -0
- package/dist/assignment-brief.js +129 -0
- package/dist/assignment-delivery.d.ts +56 -0
- package/dist/assignment-delivery.js +160 -0
- package/dist/assignment-presentation.d.ts +26 -0
- package/dist/assignment-presentation.js +80 -0
- package/dist/assignment-status.d.ts +62 -0
- package/dist/assignment-status.js +152 -0
- package/dist/assignment-ui.d.ts +71 -0
- package/dist/assignment-ui.js +103 -0
- package/dist/assignment.d.ts +222 -0
- package/dist/assignment.js +399 -0
- package/dist/attest.d.ts +56 -0
- package/dist/attest.js +153 -0
- package/dist/backend.d.ts +97 -0
- package/dist/backend.js +166 -0
- package/dist/backup-ui.d.ts +22 -0
- package/dist/backup-ui.js +59 -0
- package/dist/backup.d.ts +84 -0
- package/dist/backup.js +421 -0
- package/dist/beads.d.ts +34 -0
- package/dist/beads.js +135 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +22 -0
- package/dist/board.d.ts +150 -0
- package/dist/board.js +210 -0
- package/dist/boot-identity.d.ts +63 -0
- package/dist/boot-identity.js +99 -0
- package/dist/browser/THIRD_PARTY_NOTICES.txt +2295 -0
- package/dist/browser/workspace.css +4 -0
- package/dist/browser/workspace.js +225 -0
- package/dist/browser-crew.d.ts +11 -0
- package/dist/browser-crew.js +50 -0
- package/dist/browser-shell.d.ts +8 -0
- package/dist/browser-shell.js +60 -0
- package/dist/browser-workspace.d.ts +780 -0
- package/dist/browser-workspace.js +47 -0
- package/dist/budget-alerts.d.ts +19 -0
- package/dist/budget-alerts.js +46 -0
- package/dist/builder.d.ts +370 -0
- package/dist/builder.js +3262 -0
- package/dist/capscan.d.ts +35 -0
- package/dist/capscan.js +113 -0
- package/dist/chat-acceptance.d.ts +71 -0
- package/dist/chat-acceptance.js +120 -0
- package/dist/chat-actions.d.ts +265 -0
- package/dist/chat-actions.js +1273 -0
- package/dist/chat-channel.d.ts +109 -0
- package/dist/chat-channel.js +652 -0
- package/dist/chat-continuity.d.ts +32 -0
- package/dist/chat-continuity.js +317 -0
- package/dist/chat-controls.d.ts +113 -0
- package/dist/chat-controls.js +53 -0
- package/dist/chat-delivery-state.d.ts +159 -0
- package/dist/chat-delivery-state.js +309 -0
- package/dist/chat-delivery.d.ts +38 -0
- package/dist/chat-delivery.js +693 -0
- package/dist/chat-display.d.ts +1 -0
- package/dist/chat-display.js +18 -0
- package/dist/chat-evidence.d.ts +123 -0
- package/dist/chat-evidence.js +207 -0
- package/dist/chat-flow.d.ts +44 -0
- package/dist/chat-flow.js +215 -0
- package/dist/chat-inbox.d.ts +57 -0
- package/dist/chat-inbox.js +123 -0
- package/dist/chat-polish.d.ts +16 -0
- package/dist/chat-polish.js +135 -0
- package/dist/chat-review.d.ts +46 -0
- package/dist/chat-review.js +98 -0
- package/dist/chat-rooms.d.ts +123 -0
- package/dist/chat-rooms.js +216 -0
- package/dist/chat-task-actions.d.ts +44 -0
- package/dist/chat-task-actions.js +79 -0
- package/dist/check-progress.d.ts +51 -0
- package/dist/check-progress.js +290 -0
- package/dist/child-database.d.ts +12 -0
- package/dist/child-database.js +30 -0
- package/dist/claim.d.ts +688 -0
- package/dist/claim.js +1740 -0
- package/dist/cli.d.ts +137 -0
- package/dist/cli.js +1461 -0
- package/dist/codex-limits.d.ts +15 -0
- package/dist/codex-limits.js +145 -0
- package/dist/coding-context.d.ts +55 -0
- package/dist/coding-context.js +92 -0
- package/dist/coding-handoff.d.ts +57 -0
- package/dist/coding-handoff.js +277 -0
- package/dist/coding-provider.d.ts +72 -0
- package/dist/coding-provider.js +424 -0
- package/dist/coding-shipping-ui.d.ts +4 -0
- package/dist/coding-shipping-ui.js +12 -0
- package/dist/coding-types.d.ts +62 -0
- package/dist/coding-types.js +1 -0
- package/dist/coding-ui.d.ts +17 -0
- package/dist/coding-ui.js +364 -0
- package/dist/coding-update.d.ts +15 -0
- package/dist/coding-update.js +149 -0
- package/dist/coding-workspace.d.ts +124 -0
- package/dist/coding-workspace.js +768 -0
- package/dist/container-state.d.ts +5 -0
- package/dist/container-state.js +62 -0
- package/dist/containment.d.ts +197 -0
- package/dist/containment.js +559 -0
- package/dist/contest.d.ts +318 -0
- package/dist/contest.js +753 -0
- package/dist/control-setup.d.ts +35 -0
- package/dist/control-setup.js +40 -0
- package/dist/control-ui.d.ts +29 -0
- package/dist/control-ui.js +53 -0
- package/dist/controller-service.d.ts +1 -0
- package/dist/controller-service.js +19 -0
- package/dist/controller-supervisor.d.ts +30 -0
- package/dist/controller-supervisor.js +104 -0
- package/dist/converse.d.ts +304 -0
- package/dist/converse.js +849 -0
- package/dist/coordinator-proposals.d.ts +29 -0
- package/dist/coordinator-proposals.js +137 -0
- package/dist/coordinator.d.ts +186 -0
- package/dist/coordinator.js +447 -0
- package/dist/credentials-ui.d.ts +25 -0
- package/dist/credentials-ui.js +48 -0
- package/dist/daemon.d.ts +209 -0
- package/dist/daemon.js +604 -0
- package/dist/decision.d.ts +120 -0
- package/dist/decision.js +388 -0
- package/dist/demo.d.ts +55 -0
- package/dist/demo.js +992 -0
- package/dist/desktop-access.d.ts +28 -0
- package/dist/desktop-access.js +88 -0
- package/dist/desktop-bundle.d.ts +16 -0
- package/dist/desktop-bundle.js +74 -0
- package/dist/desktop-host.d.ts +54 -0
- package/dist/desktop-host.js +508 -0
- package/dist/desktop-update-gate.d.ts +12 -0
- package/dist/desktop-update-gate.js +91 -0
- package/dist/desktop-update-recovery.d.ts +14 -0
- package/dist/desktop-update-recovery.js +243 -0
- package/dist/desktop-update.d.ts +110 -0
- package/dist/desktop-update.js +740 -0
- package/dist/discord-api.d.ts +20 -0
- package/dist/discord-api.js +138 -0
- package/dist/discord-chat.d.ts +16 -0
- package/dist/discord-chat.js +381 -0
- package/dist/discord-settings.d.ts +7 -0
- package/dist/discord-settings.js +75 -0
- package/dist/discord.d.ts +10 -0
- package/dist/discord.js +169 -0
- package/dist/discover.d.ts +75 -0
- package/dist/discover.js +150 -0
- package/dist/dispatch.d.ts +100 -0
- package/dist/dispatch.js +311 -0
- package/dist/dispose.d.ts +161 -0
- package/dist/dispose.js +803 -0
- package/dist/email-settings.d.ts +34 -0
- package/dist/email-settings.js +50 -0
- package/dist/envelope.d.ts +47 -0
- package/dist/envelope.js +105 -0
- package/dist/evidence-pack.d.ts +185 -0
- package/dist/evidence-pack.js +258 -0
- package/dist/evidence.d.ts +345 -0
- package/dist/evidence.js +782 -0
- package/dist/exec.d.ts +285 -0
- package/dist/exec.js +1841 -0
- package/dist/exhaustion.d.ts +85 -0
- package/dist/exhaustion.js +141 -0
- package/dist/export-ui.d.ts +4 -0
- package/dist/export-ui.js +17 -0
- package/dist/export.d.ts +48 -0
- package/dist/export.js +305 -0
- package/dist/flow-actions.d.ts +77 -0
- package/dist/flow-actions.js +203 -0
- package/dist/flow-code.d.ts +50 -0
- package/dist/flow-code.js +159 -0
- package/dist/flow-draft.d.ts +38 -0
- package/dist/flow-draft.js +80 -0
- package/dist/flow-engine.d.ts +66 -0
- package/dist/flow-engine.js +416 -0
- package/dist/flow-insights.d.ts +95 -0
- package/dist/flow-insights.js +149 -0
- package/dist/flow-live.d.ts +24 -0
- package/dist/flow-live.js +150 -0
- package/dist/flow-people.d.ts +24 -0
- package/dist/flow-people.js +91 -0
- package/dist/flow-replies.d.ts +48 -0
- package/dist/flow-replies.js +113 -0
- package/dist/flow-scripts.d.ts +38 -0
- package/dist/flow-scripts.js +73 -0
- package/dist/flow-secrets.d.ts +13 -0
- package/dist/flow-secrets.js +45 -0
- package/dist/flow-sort.d.ts +82 -0
- package/dist/flow-sort.js +153 -0
- package/dist/flow-steps.d.ts +40 -0
- package/dist/flow-steps.js +408 -0
- package/dist/flow-triggers.d.ts +244 -0
- package/dist/flow-triggers.js +959 -0
- package/dist/flows-ui.d.ts +20 -0
- package/dist/flows-ui.js +175 -0
- package/dist/flows.d.ts +229 -0
- package/dist/flows.js +968 -0
- package/dist/fonts.d.ts +19 -0
- package/dist/fonts.js +19 -0
- package/dist/gaps.d.ts +35 -0
- package/dist/gaps.js +101 -0
- package/dist/gate-failure.d.ts +40 -0
- package/dist/gate-failure.js +66 -0
- package/dist/git.d.ts +54 -0
- package/dist/git.js +94 -0
- package/dist/google-mail.d.ts +58 -0
- package/dist/google-mail.js +151 -0
- package/dist/grant.d.ts +136 -0
- package/dist/grant.js +238 -0
- package/dist/graph.d.ts +164 -0
- package/dist/graph.js +383 -0
- package/dist/guides.d.ts +22 -0
- package/dist/guides.js +363 -0
- package/dist/held.d.ts +150 -0
- package/dist/held.js +799 -0
- package/dist/invoke.d.ts +112 -0
- package/dist/invoke.js +780 -0
- package/dist/issues.d.ts +41 -0
- package/dist/issues.js +131 -0
- package/dist/job-object-helper.ps1 +252 -0
- package/dist/jsonl-discriminants.d.ts +11 -0
- package/dist/jsonl-discriminants.js +93 -0
- package/dist/keys.d.ts +104 -0
- package/dist/keys.js +229 -0
- package/dist/kits-ui.d.ts +17 -0
- package/dist/kits-ui.js +46 -0
- package/dist/kits.d.ts +86 -0
- package/dist/kits.js +215 -0
- package/dist/knowledge-cli.d.ts +101 -0
- package/dist/knowledge-cli.js +92 -0
- package/dist/knowledge-ui.d.ts +24 -0
- package/dist/knowledge-ui.js +40 -0
- package/dist/lead-context.d.ts +8 -0
- package/dist/lead-context.js +56 -0
- package/dist/lead-follow.d.ts +22 -0
- package/dist/lead-follow.js +167 -0
- package/dist/lead-status.d.ts +75 -0
- package/dist/lead-status.js +285 -0
- package/dist/ledger-chain.d.ts +46 -0
- package/dist/ledger-chain.js +187 -0
- package/dist/ledger-csv.d.ts +4 -0
- package/dist/ledger-csv.js +11 -0
- package/dist/ledger-view.d.ts +24 -0
- package/dist/ledger-view.js +58 -0
- package/dist/limits-ui.d.ts +26 -0
- package/dist/limits-ui.js +67 -0
- package/dist/link.d.ts +72 -0
- package/dist/link.js +217 -0
- package/dist/live.d.ts +96 -0
- package/dist/live.js +366 -0
- package/dist/liveness.d.ts +30 -0
- package/dist/liveness.js +42 -0
- package/dist/log.d.ts +7 -0
- package/dist/log.js +25 -0
- package/dist/mailbox.d.ts +57 -0
- package/dist/mailbox.js +150 -0
- package/dist/maintenance.d.ts +11 -0
- package/dist/maintenance.js +35 -0
- package/dist/mate-cli.d.ts +52 -0
- package/dist/mate-cli.js +345 -0
- package/dist/mate-contract.d.ts +10 -0
- package/dist/mate-contract.js +30 -0
- package/dist/mate-doors.d.ts +69 -0
- package/dist/mate-doors.js +548 -0
- package/dist/mate-progress.d.ts +29 -0
- package/dist/mate-progress.js +121 -0
- package/dist/mate-tools.d.ts +94 -0
- package/dist/mate-tools.js +1878 -0
- package/dist/mate.d.ts +92 -0
- package/dist/mate.js +435 -0
- package/dist/mcp-connect.d.ts +103 -0
- package/dist/mcp-connect.js +252 -0
- package/dist/mcp.d.ts +27 -0
- package/dist/mcp.js +651 -0
- package/dist/memory-cli.d.ts +466 -0
- package/dist/memory-cli.js +111 -0
- package/dist/memory-pass.d.ts +160 -0
- package/dist/memory-pass.js +409 -0
- package/dist/metrics.d.ts +3 -0
- package/dist/metrics.js +56 -0
- package/dist/mobile-viewport.d.ts +3 -0
- package/dist/mobile-viewport.js +37 -0
- package/dist/model-catalog.d.ts +118 -0
- package/dist/model-catalog.js +376 -0
- package/dist/models-cli.d.ts +102 -0
- package/dist/models-cli.js +66 -0
- package/dist/models-ui.d.ts +34 -0
- package/dist/models-ui.js +68 -0
- package/dist/modes.d.ts +80 -0
- package/dist/modes.js +182 -0
- package/dist/monitoring-settings.d.ts +44 -0
- package/dist/monitoring-settings.js +173 -0
- package/dist/monitoring-ui.d.ts +20 -0
- package/dist/monitoring-ui.js +51 -0
- package/dist/monitoring.d.ts +34 -0
- package/dist/monitoring.js +221 -0
- package/dist/names.d.ts +67 -0
- package/dist/names.js +102 -0
- package/dist/observations.d.ts +40 -0
- package/dist/observations.js +211 -0
- package/dist/oidc.d.ts +71 -0
- package/dist/oidc.js +182 -0
- package/dist/onboard.d.ts +108 -0
- package/dist/onboard.js +325 -0
- package/dist/openrouter-models.d.ts +30 -0
- package/dist/openrouter-models.js +120 -0
- package/dist/operate.d.ts +118 -0
- package/dist/operate.js +11321 -0
- package/dist/peek-cli.d.ts +97 -0
- package/dist/peek-cli.js +215 -0
- package/dist/peek.d.ts +134 -0
- package/dist/peek.js +578 -0
- package/dist/phase-routing.d.ts +307 -0
- package/dist/phase-routing.js +658 -0
- package/dist/plan-auto.d.ts +14 -0
- package/dist/plan-auto.js +92 -0
- package/dist/plan.d.ts +186 -0
- package/dist/plan.js +401 -0
- package/dist/planner-source.d.ts +251 -0
- package/dist/planner-source.js +460 -0
- package/dist/planner.d.ts +75 -0
- package/dist/planner.js +992 -0
- package/dist/policy-ui.d.ts +20 -0
- package/dist/policy-ui.js +41 -0
- package/dist/policy.d.ts +111 -0
- package/dist/policy.js +231 -0
- package/dist/prepared-evidence.d.ts +16 -0
- package/dist/prepared-evidence.js +96 -0
- package/dist/pricing.d.ts +45 -0
- package/dist/pricing.js +77 -0
- package/dist/principal.d.ts +42 -0
- package/dist/principal.js +82 -0
- package/dist/probe.d.ts +46 -0
- package/dist/probe.js +79 -0
- package/dist/process-custody.d.ts +17 -0
- package/dist/process-custody.js +91 -0
- package/dist/process-liveness.d.ts +10 -0
- package/dist/process-liveness.js +81 -0
- package/dist/process-recovery-anchor.d.ts +75 -0
- package/dist/process-recovery-anchor.js +188 -0
- package/dist/process-recovery-coalition.d.ts +25 -0
- package/dist/process-recovery-coalition.js +105 -0
- package/dist/process-recovery-eligibility.d.ts +178 -0
- package/dist/process-recovery-eligibility.js +170 -0
- package/dist/process-recovery-native.d.ts +172 -0
- package/dist/process-recovery-native.js +592 -0
- package/dist/process-recovery-provenance.d.ts +163 -0
- package/dist/process-recovery-provenance.js +292 -0
- package/dist/process-recovery-services.d.ts +56 -0
- package/dist/process-recovery-services.js +191 -0
- package/dist/process-recovery-settlement.d.ts +32 -0
- package/dist/process-recovery-settlement.js +132 -0
- package/dist/process-recovery.d.ts +41 -0
- package/dist/process-recovery.js +91 -0
- package/dist/process-tree.d.ts +41 -0
- package/dist/process-tree.js +264 -0
- package/dist/project-access.d.ts +14 -0
- package/dist/project-access.js +34 -0
- package/dist/project-cli.d.ts +18 -0
- package/dist/project-cli.js +104 -0
- package/dist/project-delete-ui.d.ts +22 -0
- package/dist/project-delete-ui.js +48 -0
- package/dist/project-delete.d.ts +55 -0
- package/dist/project-delete.js +413 -0
- package/dist/project-knowledge.d.ts +111 -0
- package/dist/project-knowledge.js +241 -0
- package/dist/project-learning.d.ts +100 -0
- package/dist/project-learning.js +438 -0
- package/dist/project-memory.d.ts +81 -0
- package/dist/project-memory.js +264 -0
- package/dist/project-skills.d.ts +152 -0
- package/dist/project-skills.js +660 -0
- package/dist/project-tools.d.ts +219 -0
- package/dist/project-tools.js +796 -0
- package/dist/project.d.ts +61 -0
- package/dist/project.js +125 -0
- package/dist/prompt.d.ts +22 -0
- package/dist/prompt.js +72 -0
- package/dist/proof.d.ts +513 -0
- package/dist/proof.js +1140 -0
- package/dist/proposal.d.ts +82 -0
- package/dist/proposal.js +210 -0
- package/dist/provider-connection.d.ts +22 -0
- package/dist/provider-connection.js +98 -0
- package/dist/provider-limits.d.ts +35 -0
- package/dist/provider-limits.js +95 -0
- package/dist/provider.d.ts +279 -0
- package/dist/provider.js +935 -0
- package/dist/publish.d.ts +107 -0
- package/dist/publish.js +650 -0
- package/dist/pulls.d.ts +118 -0
- package/dist/pulls.js +240 -0
- package/dist/push.d.ts +95 -0
- package/dist/push.js +353 -0
- package/dist/quality.d.ts +8 -0
- package/dist/quality.js +6 -0
- package/dist/recipe-ui.d.ts +18 -0
- package/dist/recipe-ui.js +152 -0
- package/dist/recipes.d.ts +81 -0
- package/dist/recipes.js +332 -0
- package/dist/remote.d.ts +67 -0
- package/dist/remote.js +122 -0
- package/dist/render.d.ts +64 -0
- package/dist/render.js +587 -0
- package/dist/report-summary.d.ts +13 -0
- package/dist/report-summary.js +15 -0
- package/dist/repos.d.ts +65 -0
- package/dist/repos.js +277 -0
- package/dist/repository-context-ui.d.ts +2 -0
- package/dist/repository-context-ui.js +10 -0
- package/dist/repository-context.d.ts +67 -0
- package/dist/repository-context.js +376 -0
- package/dist/restart-certification.d.ts +134 -0
- package/dist/restart-certification.js +226 -0
- package/dist/result-actions.d.ts +28 -0
- package/dist/result-actions.js +270 -0
- package/dist/result-completion.d.ts +18 -0
- package/dist/result-completion.js +66 -0
- package/dist/result-review.d.ts +213 -0
- package/dist/result-review.js +430 -0
- package/dist/retention-ui.d.ts +12 -0
- package/dist/retention-ui.js +39 -0
- package/dist/retention.d.ts +72 -0
- package/dist/retention.js +288 -0
- package/dist/review-context.d.ts +243 -0
- package/dist/review-context.js +1043 -0
- package/dist/review-evidence.d.ts +33 -0
- package/dist/review-evidence.js +56 -0
- package/dist/reviewer.d.ts +97 -0
- package/dist/reviewer.js +202 -0
- package/dist/routine.d.ts +228 -0
- package/dist/routine.js +764 -0
- package/dist/runner.d.ts +266 -0
- package/dist/runner.js +399 -0
- package/dist/scan.d.ts +32 -0
- package/dist/scan.js +92 -0
- package/dist/scope.d.ts +695 -0
- package/dist/scope.js +1176 -0
- package/dist/scout-report.d.ts +42 -0
- package/dist/scout-report.js +108 -0
- package/dist/scout.d.ts +69 -0
- package/dist/scout.js +351 -0
- package/dist/serve.d.ts +313 -0
- package/dist/serve.js +21776 -0
- package/dist/session-brief.d.ts +8 -0
- package/dist/session-brief.js +24 -0
- package/dist/session-cli.d.ts +13 -0
- package/dist/session-cli.js +284 -0
- package/dist/session-contract.d.ts +183 -0
- package/dist/session-contract.js +122 -0
- package/dist/session-http.d.ts +19 -0
- package/dist/session-http.js +154 -0
- package/dist/session-server.d.ts +12 -0
- package/dist/session-server.js +37 -0
- package/dist/session-service.d.ts +22 -0
- package/dist/session-service.js +157 -0
- package/dist/setup-guide.d.ts +39 -0
- package/dist/setup-guide.js +93 -0
- package/dist/sign-in-guard.d.ts +45 -0
- package/dist/sign-in-guard.js +74 -0
- package/dist/skills-ui.d.ts +11 -0
- package/dist/skills-ui.js +58 -0
- package/dist/skills.d.ts +97 -0
- package/dist/skills.js +276 -0
- package/dist/slack-api.d.ts +55 -0
- package/dist/slack-api.js +229 -0
- package/dist/slack-chat.d.ts +28 -0
- package/dist/slack-chat.js +413 -0
- package/dist/slack-settings.d.ts +7 -0
- package/dist/slack-settings.js +75 -0
- package/dist/slack-state.d.ts +13 -0
- package/dist/slack-state.js +9 -0
- package/dist/slack.d.ts +13 -0
- package/dist/slack.js +167 -0
- package/dist/spend-ui.d.ts +28 -0
- package/dist/spend-ui.js +95 -0
- package/dist/spend.d.ts +142 -0
- package/dist/spend.js +313 -0
- package/dist/sqlite-runtime.d.ts +3 -0
- package/dist/sqlite-runtime.js +6 -0
- package/dist/sso-settings.d.ts +33 -0
- package/dist/sso-settings.js +103 -0
- package/dist/sso-ui.d.ts +22 -0
- package/dist/sso-ui.js +39 -0
- package/dist/storage.d.ts +15 -0
- package/dist/storage.js +84 -0
- package/dist/store.d.ts +7754 -0
- package/dist/store.js +23279 -0
- package/dist/structured-output.d.ts +58 -0
- package/dist/structured-output.js +103 -0
- package/dist/style-asset.d.ts +7 -0
- package/dist/style-asset.js +41 -0
- package/dist/subscription-chat.d.ts +46 -0
- package/dist/subscription-chat.js +275 -0
- package/dist/summary.d.ts +33 -0
- package/dist/summary.js +71 -0
- package/dist/supervisor.mjs +297 -0
- package/dist/surface.d.ts +63 -0
- package/dist/surface.js +352 -0
- package/dist/sync.d.ts +94 -0
- package/dist/sync.js +279 -0
- package/dist/task-composer.d.ts +13 -0
- package/dist/task-composer.js +52 -0
- package/dist/task-control.d.ts +165 -0
- package/dist/task-control.js +214 -0
- package/dist/task-outcome-cli.d.ts +10 -0
- package/dist/task-outcome-cli.js +92 -0
- package/dist/task-text.d.ts +30 -0
- package/dist/task-text.js +41 -0
- package/dist/team-cli.d.ts +15 -0
- package/dist/team-cli.js +618 -0
- package/dist/team-contract.d.ts +92 -0
- package/dist/team-contract.js +1 -0
- package/dist/team-http.d.ts +17 -0
- package/dist/team-http.js +144 -0
- package/dist/team-leads.d.ts +81 -0
- package/dist/team-leads.js +565 -0
- package/dist/team-runtime.d.ts +27 -0
- package/dist/team-runtime.js +264 -0
- package/dist/team-ui.d.ts +3 -0
- package/dist/team-ui.js +9 -0
- package/dist/team-updates.d.ts +8 -0
- package/dist/team-updates.js +57 -0
- package/dist/teammate-admin.d.ts +53 -0
- package/dist/teammate-admin.js +111 -0
- package/dist/teammate-desk.d.ts +60 -0
- package/dist/teammate-desk.js +154 -0
- package/dist/teammate-memory.d.ts +64 -0
- package/dist/teammate-memory.js +196 -0
- package/dist/teammate-question.d.ts +59 -0
- package/dist/teammate-question.js +175 -0
- package/dist/teammate-tools.d.ts +108 -0
- package/dist/teammate-tools.js +271 -0
- package/dist/teammate-week.d.ts +68 -0
- package/dist/teammate-week.js +132 -0
- package/dist/teammate-work.d.ts +76 -0
- package/dist/teammate-work.js +280 -0
- package/dist/teammates-ui.d.ts +20 -0
- package/dist/teammates-ui.js +166 -0
- package/dist/teammates.d.ts +180 -0
- package/dist/teammates.js +253 -0
- package/dist/teams-api.d.ts +33 -0
- package/dist/teams-api.js +204 -0
- package/dist/teams-chat.d.ts +26 -0
- package/dist/teams-chat.js +215 -0
- package/dist/teams-settings.d.ts +12 -0
- package/dist/teams-settings.js +57 -0
- package/dist/teams.d.ts +21 -0
- package/dist/teams.js +124 -0
- package/dist/telegram-flow.d.ts +49 -0
- package/dist/telegram-flow.js +110 -0
- package/dist/telegram-mate.d.ts +137 -0
- package/dist/telegram-mate.js +707 -0
- package/dist/telegram-progress.d.ts +14 -0
- package/dist/telegram-progress.js +129 -0
- package/dist/telegram-settings.d.ts +9 -0
- package/dist/telegram-settings.js +36 -0
- package/dist/telegram-status.d.ts +75 -0
- package/dist/telegram-status.js +265 -0
- package/dist/telegram-team.d.ts +85 -0
- package/dist/telegram-team.js +359 -0
- package/dist/telegram.d.ts +230 -0
- package/dist/telegram.js +1931 -0
- package/dist/templates.d.ts +65 -0
- package/dist/templates.js +118 -0
- package/dist/tool-launcher.d.ts +1 -0
- package/dist/tool-launcher.js +101 -0
- package/dist/tools-ui.d.ts +30 -0
- package/dist/tools-ui.js +40 -0
- package/dist/transitions-recipes.d.ts +1 -0
- package/dist/transitions-recipes.js +203 -0
- package/dist/tree-proof.d.ts +34 -0
- package/dist/tree-proof.js +58 -0
- package/dist/verification-evidence.d.ts +44 -0
- package/dist/verification-evidence.js +238 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +10 -0
- package/dist/webhooks.d.ts +91 -0
- package/dist/webhooks.js +283 -0
- package/dist/work-index.d.ts +68 -0
- package/dist/work-index.js +384 -0
- package/dist/work-summary.d.ts +57 -0
- package/dist/work-summary.js +116 -0
- package/dist/workspace-motion.d.ts +4 -0
- package/dist/workspace-motion.js +133 -0
- package/dist/workspace-revision.d.ts +19 -0
- package/dist/workspace-revision.js +92 -0
- package/dist/workspace-ui.d.ts +204 -0
- package/dist/workspace-ui.js +411 -0
- package/dist/worktree-notices.d.ts +13 -0
- package/dist/worktree-notices.js +17 -0
- package/dist/worktree.d.ts +249 -0
- package/dist/worktree.js +720 -0
- package/package.json +122 -0
- package/scripts/canary-assertions.mjs +42 -0
- package/scripts/crash-canary.mjs +253 -0
- package/scripts/fixtures/crash-process.mjs +74 -0
- package/scripts/fixtures/pilot-scenarios.mjs +85 -0
- package/scripts/fixtures/restart-service.mjs +27 -0
- package/scripts/launchd-certification.mjs +143 -0
- package/scripts/pilot.mjs +121 -0
- package/scripts/proof-preflight.mjs +140 -0
- package/scripts/provider-canary.mjs +379 -0
- package/scripts/recovery-canary.mjs +135 -0
- package/scripts/restart-certification.mjs +98 -0
package/dist/scope.d.ts
ADDED
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import type { Store, Mutation } from "./store.js";
|
|
3
|
+
import type { QualityMode } from "./quality.js";
|
|
4
|
+
import type { AuthMode } from "./keys.js";
|
|
5
|
+
import type { ProviderId } from "./provider.js";
|
|
6
|
+
import { type PhaseRoute, type ReadinessLookup, type RiskLevel } from "./phase-routing.js";
|
|
7
|
+
export declare function hashToken(token: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* A person's chosen password gets a real KDF. Bare sha256 is fine for the
|
|
10
|
+
* minted 256-bit tokens — nothing brute-forces that space — but a password a
|
|
11
|
+
* human picked lives in a much smaller one, so it is salted and stretched
|
|
12
|
+
* (scrypt), and the stored string names its own scheme so both generations
|
|
13
|
+
* of credential verify side by side.
|
|
14
|
+
*/
|
|
15
|
+
export declare function hashPassword(password: string): string;
|
|
16
|
+
/** Verify a presented secret against a stored hash of either scheme. */
|
|
17
|
+
export declare function verifyCredential(stored: string, presented: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* The execution profile (Parity II foundations, findings 1/2/13/14/22):
|
|
20
|
+
* WHAT RUNS, bound into what the operator signs. A discriminated union —
|
|
21
|
+
* each variant asserts only what its provider actually supports, with the
|
|
22
|
+
* EFFECTIVE constants the argv will carry, never aspirations. The model
|
|
23
|
+
* is always an exact string and always emitted on the argv: nothing in an
|
|
24
|
+
* approved profile is left for later resolution to decide (ruling 10).
|
|
25
|
+
* providerVersion and resolvedFrom are PROVENANCE and live outside these
|
|
26
|
+
* shapes (finding 20) — they never enter a digest.
|
|
27
|
+
*/
|
|
28
|
+
export declare const CLAUDE_LIMITS: {
|
|
29
|
+
readonly maxTurns: 1000;
|
|
30
|
+
readonly repairMaxTurns: 4;
|
|
31
|
+
readonly timeoutSeconds: 1200;
|
|
32
|
+
readonly repairTimeoutSeconds: 300;
|
|
33
|
+
};
|
|
34
|
+
export declare const CODEX_SHAPED_LIMITS: {
|
|
35
|
+
readonly timeoutSeconds: 1200;
|
|
36
|
+
readonly repairTimeoutSeconds: 300;
|
|
37
|
+
};
|
|
38
|
+
export declare const GEMINI_LIMITS: {
|
|
39
|
+
readonly timeoutSeconds: 1200;
|
|
40
|
+
readonly repairTimeoutSeconds: 300;
|
|
41
|
+
};
|
|
42
|
+
export type ClaudeProfile = {
|
|
43
|
+
provider: "claude";
|
|
44
|
+
/** The exact model string the argv carries. Never empty, never "default". */
|
|
45
|
+
model: string;
|
|
46
|
+
/** Claude's real argv semantic. `auto` is the safe unattended posture:
|
|
47
|
+
* Claude's classifier allows routine project work and stops risky acts.
|
|
48
|
+
* `acceptEdits` remains readable for approvals created before auto mode;
|
|
49
|
+
* bypass is still a separate, explicitly signed escalation. */
|
|
50
|
+
permissionArgv: "auto" | "acceptEdits" | "bypassPermissions";
|
|
51
|
+
maxTurns: number;
|
|
52
|
+
repairMaxTurns: number;
|
|
53
|
+
timeoutSeconds: number;
|
|
54
|
+
/** Absent on legacy approvals, where timeoutSeconds remains an absolute
|
|
55
|
+
* wall clock. New approvals bind an activity watchdog instead. */
|
|
56
|
+
timeoutKind?: "idle";
|
|
57
|
+
repairTimeoutSeconds: number;
|
|
58
|
+
/** Exact model for repairs, or the stable literal "inherit" (= the
|
|
59
|
+
* build model, which is itself exact). */
|
|
60
|
+
repairModel: string;
|
|
61
|
+
};
|
|
62
|
+
export type CodexShapedProfile = {
|
|
63
|
+
provider: "codex" | "openrouter";
|
|
64
|
+
model: string;
|
|
65
|
+
/** Codex's real constraint surface. Full access is rendered with the
|
|
66
|
+
* CLI's combined --dangerously-bypass-approvals-and-sandbox switch; the
|
|
67
|
+
* value here records the resulting sandbox posture in the signed profile. */
|
|
68
|
+
sandboxMode: "workspace-write" | "danger-full-access";
|
|
69
|
+
/** The tool has no argv turn limit. New approvals use an inactivity
|
|
70
|
+
* watchdog; legacy approvals retain their signed wall-clock bound. */
|
|
71
|
+
maxTurns: "unsupported";
|
|
72
|
+
repairMaxTurns: "unsupported";
|
|
73
|
+
timeoutSeconds: number;
|
|
74
|
+
timeoutKind?: "idle";
|
|
75
|
+
repairTimeoutSeconds: number;
|
|
76
|
+
repairModel: string;
|
|
77
|
+
};
|
|
78
|
+
export type GeminiProfile = {
|
|
79
|
+
provider: "gemini";
|
|
80
|
+
model: string;
|
|
81
|
+
/** Gemini's real dial (`--approval-mode`): auto_edit auto-approves edit
|
|
82
|
+
* tools only (the acceptEdits parallel); yolo auto-approves everything
|
|
83
|
+
* and files only where claude files bypassPermissions. `default` and
|
|
84
|
+
* `plan` are not profile values — headless `default` just fails tools,
|
|
85
|
+
* and `plan` is read-only while the protocol requires workspace writes. */
|
|
86
|
+
approvalArgv: "auto_edit" | "yolo";
|
|
87
|
+
/** No argv turn bound exists (v0.57.0 audit); new approvals use an
|
|
88
|
+
* inactivity watchdog, while legacy approvals keep their signed clock. */
|
|
89
|
+
maxTurns: "unsupported";
|
|
90
|
+
repairMaxTurns: "unsupported";
|
|
91
|
+
timeoutSeconds: number;
|
|
92
|
+
timeoutKind?: "idle";
|
|
93
|
+
repairTimeoutSeconds: number;
|
|
94
|
+
repairModel: string;
|
|
95
|
+
};
|
|
96
|
+
export type ExecutionProfile = ClaudeProfile | CodexShapedProfile | GeminiProfile;
|
|
97
|
+
/** The durable unattended permission choices exposed by the console. The
|
|
98
|
+
* provider-specific argv is still what gets sealed into an approval; this
|
|
99
|
+
* small cross-provider type is only the operator-facing policy. */
|
|
100
|
+
export type UnattendedPermissionMode = "auto" | "bypassPermissions";
|
|
101
|
+
export declare const PROFILE_DIGEST_VERSION = 2;
|
|
102
|
+
/** The stored snapshot bytes: version embedded IN the snapshot (finding 17). */
|
|
103
|
+
export declare function canonicalProfileJson(profile: ExecutionProfile): string;
|
|
104
|
+
/** sha256 over a domain-separated canonical encoding, truncated to the
|
|
105
|
+
* same 128 bits every other safety digest here uses (finding 21). */
|
|
106
|
+
export declare function profileDigestOf(profile: ExecutionProfile): string;
|
|
107
|
+
export declare const CHAIN_DIGEST_VERSION = 1;
|
|
108
|
+
/** One entry of an approved fallback chain: the WHOLE execution profile
|
|
109
|
+
* (so a claude->codex switch cannot inherit one provider's repair config)
|
|
110
|
+
* and the auth mode it runs under. Order is authority. */
|
|
111
|
+
export type ChainEntry = {
|
|
112
|
+
profile: ExecutionProfile;
|
|
113
|
+
authMode: "subscription" | "api-key";
|
|
114
|
+
};
|
|
115
|
+
/** The stored snapshot bytes for a chain: the version rides IN the
|
|
116
|
+
* snapshot, exactly like a single profile's. */
|
|
117
|
+
export declare function canonicalChainJson(entries: readonly ChainEntry[]): string;
|
|
118
|
+
/** sha256 over a domain-separated canonical chain encoding — a DIFFERENT
|
|
119
|
+
* domain from a single profile ("standing-orders:chain:" vs
|
|
120
|
+
* ":profile:"), so a chain digest can never collide with a profile
|
|
121
|
+
* digest, truncated to the same 128 bits. */
|
|
122
|
+
export declare function chainDigestOf(entries: readonly ChainEntry[]): string;
|
|
123
|
+
/**
|
|
124
|
+
* One chain entry's BINDING digest (E3d): the profile digest + auth mode
|
|
125
|
+
* under their own domain. A run row pins this at admission (or base-cycle
|
|
126
|
+
* open), and the dispatch proof re-derives it from the approved chain at
|
|
127
|
+
* the run's index — so nothing downstream can swap WHICH entry a run
|
|
128
|
+
* spends as, in model or in credential.
|
|
129
|
+
*/
|
|
130
|
+
export declare function entryDigestOf(entry: ChainEntry): string;
|
|
131
|
+
/** Strict re-hydration of a stored chain — every entry proved through the
|
|
132
|
+
* single-profile rehydrator; anything unexpected is null. */
|
|
133
|
+
export declare function chainFromJson(json: string | null): ChainEntry[] | null;
|
|
134
|
+
/**
|
|
135
|
+
* THE STRICT RAW TERMS READ (raw authority repair): the stored columns of
|
|
136
|
+
* a scope or a standing order, proved EXACTLY — a JSON list is a list of
|
|
137
|
+
* strings and nothing else, a rubric is a list of whole criteria carrying
|
|
138
|
+
* exactly the keys this code writes and parsing with zero problems, a
|
|
139
|
+
* budget is a safe integer or null. Nothing is filtered, defaulted, or
|
|
140
|
+
* coerced on the way to an authority: the words say what is wrong, and
|
|
141
|
+
* the caller refuses.
|
|
142
|
+
*/
|
|
143
|
+
export declare function exactStringList(value: unknown, what: string): {
|
|
144
|
+
ok: true;
|
|
145
|
+
list: string[];
|
|
146
|
+
} | {
|
|
147
|
+
ok: false;
|
|
148
|
+
problem: string;
|
|
149
|
+
};
|
|
150
|
+
export declare function exactAcceptance(value: unknown): {
|
|
151
|
+
ok: true;
|
|
152
|
+
criteria: AcceptanceCriterion[];
|
|
153
|
+
} | {
|
|
154
|
+
ok: false;
|
|
155
|
+
problem: string;
|
|
156
|
+
};
|
|
157
|
+
export declare function exactSafeIntegerOrNull(value: unknown, what: string): string | null;
|
|
158
|
+
/**
|
|
159
|
+
* The longest clock a snapshot may bind, in seconds: a JavaScript timer
|
|
160
|
+
* holds at most 2^31 − 1 milliseconds, and a bound past that fires at
|
|
161
|
+
* once instead of never — a "timeout" that is not one. Every stored
|
|
162
|
+
* clock is proved against this before it is believed (v48 integrity).
|
|
163
|
+
*/
|
|
164
|
+
export declare const MAX_TIMER_SECONDS: number;
|
|
165
|
+
/** A positive integer the platform can represent exactly. */
|
|
166
|
+
export declare function safePositiveInteger(v: unknown): v is number;
|
|
167
|
+
/** A positive whole number of seconds a timer can actually wait. */
|
|
168
|
+
export declare function timerSafeSeconds(v: unknown): v is number;
|
|
169
|
+
/**
|
|
170
|
+
* Whether an object carries exactly the named keys: every required key
|
|
171
|
+
* present, only optional keys otherwise, nothing unknown. Stored snapshots
|
|
172
|
+
* are proved this way so a key this code never writes is a refusal, never
|
|
173
|
+
* an ignorable extra.
|
|
174
|
+
*/
|
|
175
|
+
export declare function exactKeys(value: object, required: readonly string[], optional: readonly string[]): boolean;
|
|
176
|
+
/** Strict re-hydration of a stored snapshot — every field type-proved;
|
|
177
|
+
* anything unexpected is null, never a guess. */
|
|
178
|
+
export declare function profileFromJson(json: string | null): ExecutionProfile | null;
|
|
179
|
+
export type EvidenceKind = "check" | "screenshot" | "changed-path" | "manual-review";
|
|
180
|
+
export declare const EVIDENCE_KINDS: readonly EvidenceKind[];
|
|
181
|
+
export type AcceptanceCriterion = {
|
|
182
|
+
id: string;
|
|
183
|
+
/** The signed outcome statement. Restating it differently in a proof is
|
|
184
|
+
* refuted, not short — the same severity as any other altered term. */
|
|
185
|
+
statement: string;
|
|
186
|
+
/** Advisory guidance for HOW to satisfy the statement. Never enters the
|
|
187
|
+
* digest and is never a term the approval binds — an operator can leave
|
|
188
|
+
* it, change it, or ignore it without touching what was signed. */
|
|
189
|
+
how: string | null;
|
|
190
|
+
/** SIGNED: the evidence kinds a proof must reference, by exact id, to
|
|
191
|
+
* answer this criterion. Never empty. */
|
|
192
|
+
evidence: EvidenceKind[];
|
|
193
|
+
};
|
|
194
|
+
export declare const ACCEPTANCE_LIMITS: {
|
|
195
|
+
readonly criteria: 12;
|
|
196
|
+
readonly id: 40;
|
|
197
|
+
readonly statement: 1000;
|
|
198
|
+
readonly how: 500;
|
|
199
|
+
readonly evidenceKinds: number;
|
|
200
|
+
};
|
|
201
|
+
export type AcceptanceProblem = {
|
|
202
|
+
reason: string;
|
|
203
|
+
message: string;
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* Parse a rubric from already-JSON-parsed input (the planner's handoff, a
|
|
207
|
+
* console form, a routine or template definition): fail closed, every
|
|
208
|
+
* problem reported at once, stable reasons — the same discipline as every
|
|
209
|
+
* other quoted-data parser in this codebase (`plan.ts`, `proof.ts`). An
|
|
210
|
+
* absent or empty `value` parses to `[]` with no problems: whether that is
|
|
211
|
+
* ALLOWED is a question for the caller (`propose` says yes; every authoring
|
|
212
|
+
* road says no), never for this parser.
|
|
213
|
+
*/
|
|
214
|
+
export declare function parseAcceptanceCriteria(value: unknown): {
|
|
215
|
+
criteria: AcceptanceCriterion[];
|
|
216
|
+
problems: AcceptanceProblem[];
|
|
217
|
+
};
|
|
218
|
+
/** The exact bytes a rubric's SIGNED terms reduce to for the digest: sorted
|
|
219
|
+
* by id, `how` dropped (advisory, never signed), evidence kinds sorted so
|
|
220
|
+
* two equivalent lists never digest differently. */
|
|
221
|
+
/**
|
|
222
|
+
* The plain-text rubric encoding shared by every non-JSON authoring
|
|
223
|
+
* surface — the console's rubric textarea (one line each) and the CLI's
|
|
224
|
+
* `--acceptance` flag (one line per `;`-separated entry): one criterion
|
|
225
|
+
* per line, shaped
|
|
226
|
+
*
|
|
227
|
+
* [id:] statement | evidence,kinds [| how]
|
|
228
|
+
*
|
|
229
|
+
* `id` is optional — auto-numbered `c1`, `c2`, ... in encounter order when
|
|
230
|
+
* every line omits it, so a person can write the rubric without inventing
|
|
231
|
+
* ids by hand. This function never validates; it only turns text into the
|
|
232
|
+
* same plain-object shape `parseAcceptanceCriteria` already validates, so
|
|
233
|
+
* both entry points can never drift on what counts as a valid criterion.
|
|
234
|
+
*/
|
|
235
|
+
/** The one criterion a filing may carry when nobody has written the rubric
|
|
236
|
+
* yet: the console's scout follow-ups file with it, and `--acceptance plan`
|
|
237
|
+
* on the command line expands to it. A mode with planAuto sends such a
|
|
238
|
+
* filing to the planner instead of building against it. */
|
|
239
|
+
export declare const PLACEHOLDER_RUBRIC_STATEMENT = "The operator has reviewed this follow-up and written a real rubric before approving it.";
|
|
240
|
+
export declare const PLACEHOLDER_RUBRIC: AcceptanceCriterion[];
|
|
241
|
+
export declare function rubricIsPlaceholder(acceptance: readonly {
|
|
242
|
+
statement: string;
|
|
243
|
+
evidence: readonly string[];
|
|
244
|
+
}[]): boolean;
|
|
245
|
+
/** Split a `--acceptance` rubric into criteria. Criteria are `;`-separated,
|
|
246
|
+
* but a `;` inside a statement must not split it: every criterion ends with
|
|
247
|
+
* its `|<evidence kinds>` part, so a segment with no `|` is the front of the
|
|
248
|
+
* next one and is glued back on. The single word `plan` means the placeholder. */
|
|
249
|
+
export declare function splitAcceptanceRubric(text: string): string[];
|
|
250
|
+
export declare const isCommitSha: (value: string) => boolean;
|
|
251
|
+
export declare function acceptanceLinesToInput(lines: readonly string[]): unknown[];
|
|
252
|
+
/** The inverse of `acceptanceLinesToInput`, for pre-filling an editor from
|
|
253
|
+
* a stored rubric — round-trips through `parseAcceptanceCriteria` exactly. */
|
|
254
|
+
export declare function acceptanceToLines(criteria: readonly AcceptanceCriterion[]): string[];
|
|
255
|
+
export declare function canonicalAcceptance(criteria: readonly AcceptanceCriterion[]): {
|
|
256
|
+
id: string;
|
|
257
|
+
statement: string;
|
|
258
|
+
evidence: EvidenceKind[];
|
|
259
|
+
}[];
|
|
260
|
+
export type Scope = {
|
|
261
|
+
taskId: string;
|
|
262
|
+
/** What success looks like, in the operator's words. */
|
|
263
|
+
goal: string;
|
|
264
|
+
/** What this task is explicitly not allowed to turn into. */
|
|
265
|
+
outOfScope: string | null;
|
|
266
|
+
/** Paths the work is expected to touch. Advisory, and worth stating. */
|
|
267
|
+
touches: string[];
|
|
268
|
+
/** v39: the signed acceptance rubric. `[]` on every scope proposed before
|
|
269
|
+
* this migration and on any legacy road that still calls `propose`
|
|
270
|
+
* directly — a scope-producing ROAD enforces non-emptiness, never this
|
|
271
|
+
* type, never `propose`, never the digest. */
|
|
272
|
+
acceptance: AcceptanceCriterion[];
|
|
273
|
+
/** v41: evidence policy, signed with the scope. Default is omitted from
|
|
274
|
+
* the digest so every pre-v41 approval remains byte-for-byte valid. */
|
|
275
|
+
qualityMode?: QualityMode;
|
|
276
|
+
/** The dollar cap per build attempt, integer micro-dollars (v15) —
|
|
277
|
+
* approved spend, restated at the yes, enforced by the provider's own
|
|
278
|
+
* stop. NULL = no per-attempt cap was asked for. */
|
|
279
|
+
budgetMicrousd: number | null;
|
|
280
|
+
proposedAt: string;
|
|
281
|
+
/** Of the scope as written. Approval is bound to this exact value. */
|
|
282
|
+
digest: string;
|
|
283
|
+
approvedAt: string | null;
|
|
284
|
+
approvedBy: string | null;
|
|
285
|
+
/** The digest that was actually agreed to, which may now be stale. */
|
|
286
|
+
approvedDigest: string | null;
|
|
287
|
+
/** How the approval happened (v29): 'password' = the ceremony;
|
|
288
|
+
* 'mode' = sealed by the signer's live mode (modeDigest names it). */
|
|
289
|
+
approvalBasis?: "password" | "mode" | null;
|
|
290
|
+
modeDigest?: string | null;
|
|
291
|
+
/** v24 (optional so hand-built scopes in tests stay valid): the working
|
|
292
|
+
* execution profile, its resolution state, and the immutable snapshot
|
|
293
|
+
* the approval act sealed. */
|
|
294
|
+
profile?: ExecutionProfile | null;
|
|
295
|
+
profileState?: "resolved" | "unresolved";
|
|
296
|
+
unresolvedReason?: string | null;
|
|
297
|
+
approvedProfile?: ExecutionProfile | null;
|
|
298
|
+
/** The raw snapshot bytes the row carries (v48 integrity): what the
|
|
299
|
+
* strict stored-scope projection proves, exactly, before any seal or
|
|
300
|
+
* consent surface believes the rehydrated `profile`. */
|
|
301
|
+
profileJson?: string | null;
|
|
302
|
+
approvedProfileJson?: string | null;
|
|
303
|
+
digestVersion?: number;
|
|
304
|
+
/** v30 fallback chains. `proposedChainJson` is the WORKING chain snapshot
|
|
305
|
+
* the digest bound (present only when the repo has configured fallbacks);
|
|
306
|
+
* `approvedChainJson` is the immutable snapshot the seal COPIED from it;
|
|
307
|
+
* `approvalKind` names which the approval sealed. All undefined/null on a
|
|
308
|
+
* legacy single-profile scope — every scope until an operator configures a
|
|
309
|
+
* fallback chain. The runtime re-derives the active entry from
|
|
310
|
+
* `approvedChainJson`, never from mutable config. */
|
|
311
|
+
proposedChainJson?: string | null;
|
|
312
|
+
approvedChainJson?: string | null;
|
|
313
|
+
approvalKind?: "profile" | "chain";
|
|
314
|
+
/** v47 phase routing: the signed risk level, the WORKING canonical route
|
|
315
|
+
* the digest bound, and the immutable snapshot the seal COPIED from it.
|
|
316
|
+
* `routeEra` is the durable marker: null on a row PROVEN to predate v47
|
|
317
|
+
* (legacy — its sealed profile alone governs), the route version on every
|
|
318
|
+
* row filed since — for those, a missing or unreadable route is corrupt
|
|
319
|
+
* and fails closed everywhere. */
|
|
320
|
+
riskLevel?: RiskLevel;
|
|
321
|
+
/** A prepared commit the machine checks out instead of running an agent
|
|
322
|
+
* (v69). Signed into the digest; must descend from the task's base. */
|
|
323
|
+
candidate?: string | null;
|
|
324
|
+
proposedRouteJson?: string | null;
|
|
325
|
+
approvedRouteJson?: string | null;
|
|
326
|
+
routeEra?: number | null;
|
|
327
|
+
/** THE RAW TERMS VERDICT (raw authority repair): null when every stored
|
|
328
|
+
* term and metadata column read back EXACTLY — touches a JSON list of
|
|
329
|
+
* strings, the rubric a list of whole criteria with no unknown key, the
|
|
330
|
+
* budget a safe integer or null, the quality mode, risk level, approval
|
|
331
|
+
* kind, profile state, digest version, and route era each one of the
|
|
332
|
+
* words this code writes — and the words when one did not. The lenient
|
|
333
|
+
* fields above (`touches`, `acceptance`, …) are the console's reading;
|
|
334
|
+
* every authority — consent, seal, chain, dispatch — refuses on a
|
|
335
|
+
* non-null verdict, so filtering, defaulting, or coercion can never
|
|
336
|
+
* turn a corrupt row into authority. Undefined on a hand-built scope. */
|
|
337
|
+
termsProblem?: string | null;
|
|
338
|
+
/** Who wrote the text (mate arc, ruling 2): a confirmed mate proposal,
|
|
339
|
+
* the coordinator, a scout, or a person (null). Read raw and proved by
|
|
340
|
+
* `termsProblem` — a word outside these is a stated problem, never a
|
|
341
|
+
* value that slips past the mate quarantine at a mode seal. */
|
|
342
|
+
proposedVia?: "mate" | "coordinator" | "scout" | null;
|
|
343
|
+
};
|
|
344
|
+
export type Approval = {
|
|
345
|
+
approved: true;
|
|
346
|
+
at: string;
|
|
347
|
+
by: string;
|
|
348
|
+
} | {
|
|
349
|
+
approved: false;
|
|
350
|
+
reason: "none" | "changed" | "never-proposed";
|
|
351
|
+
};
|
|
352
|
+
export type ScopeInput = {
|
|
353
|
+
taskId: string;
|
|
354
|
+
/** v102: the person writing these words (a web edit, a chat confirmation, a coding hand-off); the requester rule refuses them. */
|
|
355
|
+
author?: string;
|
|
356
|
+
goal: string;
|
|
357
|
+
outOfScope?: string | null;
|
|
358
|
+
touches?: readonly string[];
|
|
359
|
+
/** v24: an EXPLICIT profile skips resolution in the store (routine
|
|
360
|
+
* firings and the demo's illustrative scopes use this road). */
|
|
361
|
+
profile?: ExecutionProfile;
|
|
362
|
+
/** A task-level permission choice. When absent, the task's stored choice
|
|
363
|
+
* (if any), then the installation default, decides the concrete profile. */
|
|
364
|
+
permissionMode?: UnattendedPermissionMode;
|
|
365
|
+
/** Concrete task quality choice. When absent, the task override and then
|
|
366
|
+
* the installation default are resolved by the store. */
|
|
367
|
+
qualityMode?: QualityMode;
|
|
368
|
+
/** v69: a prepared commit to install as this attempt — no agent runs. */
|
|
369
|
+
candidate?: string | null;
|
|
370
|
+
/** v47: the task's declared risk. When absent, the task's stored choice
|
|
371
|
+
* (if any), else routine. A durable TASK choice, like qualityMode. */
|
|
372
|
+
riskLevel?: RiskLevel;
|
|
373
|
+
/** Integer micro-dollars per build attempt; digest-bound when present. */
|
|
374
|
+
budgetMicrousd?: number | null;
|
|
375
|
+
/** The mode road's escalated filing default (C7): the resolved profile
|
|
376
|
+
* seals claude bypassPermissions / gemini yolo; codex-shaped unchanged. */
|
|
377
|
+
posture?: "escalated";
|
|
378
|
+
/** Who wrote this text (mate arc, ruling 2): `mate` for a confirmed mate
|
|
379
|
+
* proposal — mode coverage then never seals it; a human rewrite clears it. */
|
|
380
|
+
proposedVia?: "mate" | "coordinator" | null;
|
|
381
|
+
/** v39: the signed acceptance rubric. Absent digests exactly like `[]` —
|
|
382
|
+
* see `Scope.acceptance`. `propose` itself never requires this to be
|
|
383
|
+
* non-empty; the roads that call it do. */
|
|
384
|
+
acceptance?: readonly AcceptanceCriterion[];
|
|
385
|
+
now: Date;
|
|
386
|
+
mutation?: Mutation;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* The exact bytes an operator agreed to.
|
|
390
|
+
*
|
|
391
|
+
* Every field that constrains the work goes in. If a change to a field would
|
|
392
|
+
* change what an operator would have said, it has to move the digest, or the
|
|
393
|
+
* approval it invalidates would be an approval of something else.
|
|
394
|
+
*/
|
|
395
|
+
export declare function digestOf(scope: Pick<Scope, "goal" | "outOfScope" | "touches"> & {
|
|
396
|
+
budgetMicrousd?: number | null;
|
|
397
|
+
/** v39: the rubric, folded in ONLY when non-empty — the same absent/`[]`
|
|
398
|
+
* equivalence budgetMicrousd has always used, so a scope proposed before
|
|
399
|
+
* this migration, or by a road that never sends one, digests to exactly
|
|
400
|
+
* what it digested to before this field existed. `how` never enters
|
|
401
|
+
* here (advisory, never signed); evidence kinds do. */
|
|
402
|
+
acceptance?: readonly AcceptanceCriterion[];
|
|
403
|
+
qualityMode?: QualityMode;
|
|
404
|
+
/** v69: a prepared commit, folded in only when present so every earlier
|
|
405
|
+
* digest is untouched. */
|
|
406
|
+
candidate?: string | null;
|
|
407
|
+
}, target?: ExecutionProfile | null | {
|
|
408
|
+
chain: readonly ChainEntry[];
|
|
409
|
+
}, route?: PhaseRoute | null): string;
|
|
410
|
+
export declare function propose(store: Store, input: ScopeInput): Scope;
|
|
411
|
+
export type GuardedProposeResult = {
|
|
412
|
+
ok: true;
|
|
413
|
+
scope: Scope;
|
|
414
|
+
} | {
|
|
415
|
+
ok: false;
|
|
416
|
+
reason: "changed" | "claimed" | "bad-goal" | "bad-out-of-scope" | "bad-touches" | "bad-acceptance" | "acceptance-required";
|
|
417
|
+
message?: string;
|
|
418
|
+
};
|
|
419
|
+
/**
|
|
420
|
+
* A scope edit from a surface where the editor might be stale — two browser
|
|
421
|
+
* tabs, a form submitted after the world moved. `sawDigest` names the version
|
|
422
|
+
* the editor was looking at (null: they saw no scope at all); a mismatch is a
|
|
423
|
+
* refusal, never a silent overwrite of somebody else's words. Edits are also
|
|
424
|
+
* refused while a live claim holds the task: the running build read its scope
|
|
425
|
+
* at start, and rewording the agreement under it would make the digest lie
|
|
426
|
+
* about what the work was agreed to. Field caps and control-character rules
|
|
427
|
+
* live here because every one of these strings will later be rendered.
|
|
428
|
+
*
|
|
429
|
+
* v39: this is a scope-producing ROAD, not the `propose` primitive, so it is
|
|
430
|
+
* where the rubric becomes mandatory — every edit through here (a fresh
|
|
431
|
+
* proposal or a rewrite of an already-approved one) must carry at least one
|
|
432
|
+
* criterion, or it is refused with a clear `acceptance-required` reason
|
|
433
|
+
* rather than silently filing without one. A scope that already carries a
|
|
434
|
+
* live, unrewritten approval from before this code existed never reaches
|
|
435
|
+
* this function again unless somebody edits it — which is exactly when the
|
|
436
|
+
* requirement should start applying.
|
|
437
|
+
*/
|
|
438
|
+
export declare function proposeGuarded(store: Store, input: Omit<ScopeInput, "acceptance"> & {
|
|
439
|
+
sawDigest: string | null;
|
|
440
|
+
taskRef: number | null;
|
|
441
|
+
acceptance?: unknown;
|
|
442
|
+
}): GuardedProposeResult;
|
|
443
|
+
/**
|
|
444
|
+
* A person says yes.
|
|
445
|
+
*
|
|
446
|
+
* Takes the digest they were shown, so agreeing to a scope that changed while
|
|
447
|
+
* they were reading it fails rather than silently approving the new one.
|
|
448
|
+
*/
|
|
449
|
+
/**
|
|
450
|
+
* Register somebody who is allowed to agree to scopes.
|
|
451
|
+
*
|
|
452
|
+
* The token is shown once and stored only as a hash, exactly like a runner's.
|
|
453
|
+
* It exists because an approval nobody has to authenticate is not a gate: an
|
|
454
|
+
* agent that can run these commands can read a scope's digest out of `task
|
|
455
|
+
* show` and approve its own brief with it. Requiring a credential the agent
|
|
456
|
+
* was never given is what keeps "a person agreed to this" true.
|
|
457
|
+
*/
|
|
458
|
+
export type AddApproverResult = {
|
|
459
|
+
ok: true;
|
|
460
|
+
name: string;
|
|
461
|
+
token: string;
|
|
462
|
+
bootstrap: boolean;
|
|
463
|
+
chosen: boolean;
|
|
464
|
+
} | {
|
|
465
|
+
ok: false;
|
|
466
|
+
reason: "not-an-approver" | "weak-password";
|
|
467
|
+
};
|
|
468
|
+
export declare function addApprover(store: Store, name: string, now: Date, by?: {
|
|
469
|
+
name: string;
|
|
470
|
+
token: string;
|
|
471
|
+
}, newToken?: () => string, mutation?: Mutation,
|
|
472
|
+
/** A password the person chose. Absent, a token is minted and shown once. */
|
|
473
|
+
password?: string): AddApproverResult;
|
|
474
|
+
export type ApproveResult = {
|
|
475
|
+
ok: true;
|
|
476
|
+
scope: Scope;
|
|
477
|
+
} | {
|
|
478
|
+
ok: false;
|
|
479
|
+
reason: "no-scope" | "changed" | "no-approvers" | "not-an-approver" | "profile-unresolved" | "unrouted";
|
|
480
|
+
}
|
|
481
|
+
/** v102: the project's approval rules stopped it — the requester can't approve, protected work needs a person —
|
|
482
|
+
* or recorded this person's yes and needs a second one (`second-approver`). */
|
|
483
|
+
| {
|
|
484
|
+
ok: false;
|
|
485
|
+
reason: "requester" | "person-required";
|
|
486
|
+
} | {
|
|
487
|
+
ok: false;
|
|
488
|
+
reason: "second-approver";
|
|
489
|
+
have: number;
|
|
490
|
+
need: number;
|
|
491
|
+
already: boolean;
|
|
492
|
+
}
|
|
493
|
+
/** Sprint 8: the organisation policy stops these terms (a provider, a model, the permission ceiling); `message` says which. */
|
|
494
|
+
| {
|
|
495
|
+
ok: false;
|
|
496
|
+
reason: "policy";
|
|
497
|
+
message: string;
|
|
498
|
+
};
|
|
499
|
+
/**
|
|
500
|
+
* Whether this name-and-token pair is a person the store knows. Shared by
|
|
501
|
+
* every act that requires a human's authority — approving a scope, answering
|
|
502
|
+
* a decision — because "who said yes" must never be a string the caller
|
|
503
|
+
* typed. Fails closed: with no approver registered there is nobody who can
|
|
504
|
+
* agree to anything, and treating that as "authority is not required here"
|
|
505
|
+
* would make the gate optional — which is the same as not having one.
|
|
506
|
+
*/
|
|
507
|
+
/**
|
|
508
|
+
* IDENTITY, split from authority (modes chain, D2/E2): who this credential
|
|
509
|
+
* belongs to and what standing they hold. Viewers authenticate here and
|
|
510
|
+
* read; every consequential act goes through authenticateApprover below,
|
|
511
|
+
* which additionally demands ACTIVE approver standing — so the forty
|
|
512
|
+
* ceremony sites enforce the role without one of them changing.
|
|
513
|
+
*/
|
|
514
|
+
export declare function authenticateAccount(store: Store, by: string, secret: string): {
|
|
515
|
+
ok: true;
|
|
516
|
+
role: "approver" | "viewer";
|
|
517
|
+
generation: number;
|
|
518
|
+
} | {
|
|
519
|
+
ok: false;
|
|
520
|
+
reason: "no-approvers" | "unknown" | "revoked" | "locked";
|
|
521
|
+
};
|
|
522
|
+
/**
|
|
523
|
+
* v100: someone who signed in with the identity provider moments ago has no
|
|
524
|
+
* password to type again. The console marks such a request with this, for
|
|
525
|
+
* that person only, and an EMPTY password then stands for the fresh sign-in
|
|
526
|
+
* at every step-up that reaches `authenticateApprover` (scope and routine
|
|
527
|
+
* approval, chat-action review, the console's own ceremonies). A typed
|
|
528
|
+
* password is always checked, and nothing else stands in.
|
|
529
|
+
*/
|
|
530
|
+
export declare const freshIdentitySignIn: AsyncLocalStorage<{
|
|
531
|
+
actor: string | null;
|
|
532
|
+
}>;
|
|
533
|
+
export declare const hasFreshIdentitySignIn: (by: string) => boolean;
|
|
534
|
+
export declare function authenticateApprover(store: Store, by: string, token: string, repo?: string | null): {
|
|
535
|
+
ok: true;
|
|
536
|
+
} | {
|
|
537
|
+
ok: false;
|
|
538
|
+
reason: "no-approvers" | "not-an-approver";
|
|
539
|
+
};
|
|
540
|
+
/**
|
|
541
|
+
* What an approval needs besides the password (v100: an identity-provider
|
|
542
|
+
* sign-in moments ago stands in for the password; nothing stands in for
|
|
543
|
+
* this): an active account in the approver role, with access to the project.
|
|
544
|
+
*/
|
|
545
|
+
export declare function approverStanding(store: Store, by: string, repo?: string | null): {
|
|
546
|
+
ok: true;
|
|
547
|
+
} | {
|
|
548
|
+
ok: false;
|
|
549
|
+
reason: "no-approvers" | "not-an-approver";
|
|
550
|
+
};
|
|
551
|
+
/**
|
|
552
|
+
* C1's atomic road: file the scope AND seal its approval in ONE
|
|
553
|
+
* transaction, under a mode the SAME transaction re-proves. The caller
|
|
554
|
+
* has already authenticated the actor and matched channel rules; this
|
|
555
|
+
* function owns the predicate's transactional half — mode active, actor
|
|
556
|
+
* IS the signer, repo matches, and the sealed digest is the filed one
|
|
557
|
+
* (trivially true here: they are the same transaction). Never
|
|
558
|
+
* sealScopeApproval after a filing — that was the TOCTOU.
|
|
559
|
+
*/
|
|
560
|
+
/**
|
|
561
|
+
* C1's coverage question, answerable from ANY filing road: does a live
|
|
562
|
+
* mode make THIS actor's credentialed filing auto-approve here, and with
|
|
563
|
+
* which defaults? Callers re-ask INSIDE their filing transaction — an
|
|
564
|
+
* answer carried across transactions would be the TOCTOU again.
|
|
565
|
+
*/
|
|
566
|
+
export declare function modeFilingCoverage(store: Store, repo: string | null, actor: string, now: Date): {
|
|
567
|
+
digest: string;
|
|
568
|
+
escalated: boolean;
|
|
569
|
+
defaultBudgetMicrousd: number | null;
|
|
570
|
+
} | null;
|
|
571
|
+
export declare function fileAndSealUnderMode(store: Store, input: ScopeInput & {
|
|
572
|
+
repo: string | null;
|
|
573
|
+
actor: string;
|
|
574
|
+
}): {
|
|
575
|
+
ok: true;
|
|
576
|
+
scope: Scope;
|
|
577
|
+
basis: "mode";
|
|
578
|
+
} | {
|
|
579
|
+
ok: false;
|
|
580
|
+
reason: "no-mode" | "not-signer" | "not-covered" | "coordinator-filed" | "acceptance-required" | "profile-unresolved";
|
|
581
|
+
detail?: string;
|
|
582
|
+
};
|
|
583
|
+
export declare function approve(store: Store, taskId: string, by: string, now: Date, sawDigest: string, token: string, mutation?: Mutation): ApproveResult;
|
|
584
|
+
/**
|
|
585
|
+
* Whether this task may be built.
|
|
586
|
+
*
|
|
587
|
+
* `changed` is the interesting answer and the reason the digest exists: the
|
|
588
|
+
* scope was approved, and then somebody — possibly an agent, possibly the
|
|
589
|
+
* operator, possibly a different session — rewrote it. The old yes does not
|
|
590
|
+
* transfer.
|
|
591
|
+
*/
|
|
592
|
+
export declare function approvalOf(scope: Scope | null): Approval;
|
|
593
|
+
/**
|
|
594
|
+
* THE STRICT STORED-SCOPE PROJECTION (v48 integrity): the ONE reading of
|
|
595
|
+
* a filed scope that a seal and every consent surface believe. Nothing
|
|
596
|
+
* lenient stands in for it — the working profile, chain, and route are
|
|
597
|
+
* re-parsed from their raw bytes with exact keys, safe integers, and
|
|
598
|
+
* timer-safe clocks; the chain's entries carry a well-formed auth mode;
|
|
599
|
+
* the route's build and repair legs ARE the profile's exact pairs; on a
|
|
600
|
+
* chain filing the profile IS the chain's entry zero; and the row's
|
|
601
|
+
* digest re-derives, complete, from these very values. A legacy row (no
|
|
602
|
+
* route era) has no authority a person can newly agree to. One
|
|
603
|
+
* disagreement is the words, and nothing — no nonce, no password field,
|
|
604
|
+
* no approve action, no seal — is exposed on it.
|
|
605
|
+
*/
|
|
606
|
+
export type ScopeAuthority = {
|
|
607
|
+
ok: true;
|
|
608
|
+
profile: ExecutionProfile;
|
|
609
|
+
chain: ChainEntry[] | null;
|
|
610
|
+
route: PhaseRoute;
|
|
611
|
+
digest: string;
|
|
612
|
+
authMode: AuthMode | null;
|
|
613
|
+
} | {
|
|
614
|
+
ok: false;
|
|
615
|
+
reason: "terms" | "unrouted" | "unresolved" | "profile" | "chain" | "route" | "parity" | "digest" | "auth-mode";
|
|
616
|
+
problem: string;
|
|
617
|
+
};
|
|
618
|
+
/** What the strict projection reads OUTSIDE the row (atomic authority
|
|
619
|
+
* closure): the operator's stored auth mode for a provider, strictly — a
|
|
620
|
+
* present file that says neither word is a stated problem, never the
|
|
621
|
+
* default a lenient read would coerce it to. Filing, consent, the seal,
|
|
622
|
+
* and the spawn all hand in the same reader, so one broken file closes
|
|
623
|
+
* every door in the same words. */
|
|
624
|
+
export type ScopeAuthorityEnv = {
|
|
625
|
+
authMode?: (provider: ProviderId) => {
|
|
626
|
+
ok: true;
|
|
627
|
+
mode: AuthMode;
|
|
628
|
+
} | {
|
|
629
|
+
ok: false;
|
|
630
|
+
problem: string;
|
|
631
|
+
};
|
|
632
|
+
};
|
|
633
|
+
/**
|
|
634
|
+
* THE PARITY every projection proves between a route and the profile and
|
|
635
|
+
* terms it was filed beside (atomic authority closure): the build and
|
|
636
|
+
* repair legs ARE the profile's exact pairs, and the route's signed risk
|
|
637
|
+
* and quality ARE the row's — a row whose risk says high over a route
|
|
638
|
+
* recommended for routine was not filed by this code, and neither the
|
|
639
|
+
* seal, the consent door, nor the dispatch proof believes it. One
|
|
640
|
+
* function, so the working side, the sealed side, and the last-mile
|
|
641
|
+
* dispatch proof cannot drift. Null when everything agrees.
|
|
642
|
+
*/
|
|
643
|
+
export declare function routeParityProblem(route: PhaseRoute, profile: ExecutionProfile, terms: {
|
|
644
|
+
riskLevel: RiskLevel;
|
|
645
|
+
qualityMode: QualityMode;
|
|
646
|
+
}): string | null;
|
|
647
|
+
export declare function scopeAuthorityOf(scope: Scope, env?: ScopeAuthorityEnv): ScopeAuthority;
|
|
648
|
+
/** The rubric's approval-card lines (v39): one per criterion, the id in
|
|
649
|
+
* front (the exact string a proof must answer by) and its required
|
|
650
|
+
* evidence kinds after it — `how` is deliberately absent here, the same way
|
|
651
|
+
* it is absent from the digest: it is guidance, never a signed term. */
|
|
652
|
+
export declare function acceptanceWords(criteria: readonly AcceptanceCriterion[]): string[];
|
|
653
|
+
/** The route's approval-card lines (v47): the WORKING route the digest
|
|
654
|
+
* bound, projected with whatever readiness the caller can see — the same
|
|
655
|
+
* bytes the task page and chat render. Empty on a scope with no route. */
|
|
656
|
+
export declare function scopeRouteWords(scope: Pick<Scope, "proposedRouteJson">, readiness?: ReadinessLookup): string[];
|
|
657
|
+
/** The scope, in the words an operator has to be able to agree or disagree with. */
|
|
658
|
+
export declare function describeScope(scope: Scope, readiness?: ReadinessLookup): string[];
|
|
659
|
+
/** The chain's approval-card lines; empty for a single-profile scope. */
|
|
660
|
+
export declare function chainWords(chain: ChainEntry[] | null): string[];
|
|
661
|
+
/**
|
|
662
|
+
* EVERY rendered term of one watched attempt — what the form shows is what
|
|
663
|
+
* the password signs, byte for byte. The subset the dispatch proof
|
|
664
|
+
* re-derives (scopeDigest, profileDigest, profileJson, repo, head) is read
|
|
665
|
+
* back by the builder and the coordinator; the rest are the product terms
|
|
666
|
+
* the ceremony renders in words: the budget as a STOP THRESHOLD, the turn
|
|
667
|
+
* cap, the per-turn clock whose expiry is SESSION-FATAL, and the absolute
|
|
668
|
+
* expiry. Continuation carries the parent attempt and the follow-up text
|
|
669
|
+
* INSIDE the signed terms (v3 R7).
|
|
670
|
+
*/
|
|
671
|
+
export type AttendedTerms = {
|
|
672
|
+
taskId: string;
|
|
673
|
+
/** v28: HOW liveness is renewed — a SIGNED term, because liveness is an
|
|
674
|
+
* admission predicate, not decoration. "console-visible" = any open
|
|
675
|
+
* console page of this server renews use. Legacy terms lack the field
|
|
676
|
+
* and beat-all refuses them (they were signed as page-bound). */
|
|
677
|
+
attentionMode: "console-visible";
|
|
678
|
+
scopeDigest: string;
|
|
679
|
+
profileDigest: string;
|
|
680
|
+
profileJson: string;
|
|
681
|
+
repo: string;
|
|
682
|
+
runner: string;
|
|
683
|
+
runnerGeneration: number;
|
|
684
|
+
head: string;
|
|
685
|
+
maxSessionTurns: number;
|
|
686
|
+
budgetMicrousd: number;
|
|
687
|
+
turnTimeoutSeconds: number;
|
|
688
|
+
absoluteExpiry: string;
|
|
689
|
+
parentRun?: number | null;
|
|
690
|
+
followup?: string | null;
|
|
691
|
+
};
|
|
692
|
+
/** Deterministic bytes: sorted keys, undefined dropped — the signed text. */
|
|
693
|
+
export declare function attendedTermsJson(terms: AttendedTerms): string;
|
|
694
|
+
/** The composite digest one password signs (ruling 12), domain-separated. */
|
|
695
|
+
export declare function attendedDigestOf(terms: AttendedTerms): string;
|