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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading what a repository says it needs.
|
|
3
|
+
*
|
|
4
|
+
* Detection walks files the repo itself controls — .env.example, .mcp.json,
|
|
5
|
+
* supabase/config.toml, workflow files — which makes every byte here
|
|
6
|
+
* untrusted input. The rule that keeps that safe: **scanned content never
|
|
7
|
+
* becomes shell code.** A probe is either a fixed template over an
|
|
8
|
+
* identifier that passed a strict validator, or it is absent. A name that
|
|
9
|
+
* fails validation is dropped with a note, not quoted, not escaped, not
|
|
10
|
+
* given the benefit of the doubt — escaping is how injection bugs are
|
|
11
|
+
* born promising to behave.
|
|
12
|
+
*
|
|
13
|
+
* Detection is not authorization, and it is not verification either: every
|
|
14
|
+
* capability found here lands `unprobed`. CI secret references are recorded
|
|
15
|
+
* as `ci` capabilities with no probe — a secret living in GitHub's vault is
|
|
16
|
+
* a fact about CI, not about this machine's environment, and synthesizing
|
|
17
|
+
* a local env probe for it would manufacture a gap that is not real.
|
|
18
|
+
*/
|
|
19
|
+
import type { Capability } from "./store.js";
|
|
20
|
+
/** A capability as detected, before anybody decides to record it. */
|
|
21
|
+
export type Found = {
|
|
22
|
+
kind: Capability["kind"];
|
|
23
|
+
name: string;
|
|
24
|
+
probe: string | null;
|
|
25
|
+
source: string;
|
|
26
|
+
};
|
|
27
|
+
export type ScanReport = {
|
|
28
|
+
found: Found[];
|
|
29
|
+
/** Names that appeared but failed validation — reported, never used. */
|
|
30
|
+
rejected: {
|
|
31
|
+
name: string;
|
|
32
|
+
source: string;
|
|
33
|
+
}[];
|
|
34
|
+
};
|
|
35
|
+
export declare function scanRepo(repo: string): ScanReport;
|
package/dist/capscan.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading what a repository says it needs.
|
|
3
|
+
*
|
|
4
|
+
* Detection walks files the repo itself controls — .env.example, .mcp.json,
|
|
5
|
+
* supabase/config.toml, workflow files — which makes every byte here
|
|
6
|
+
* untrusted input. The rule that keeps that safe: **scanned content never
|
|
7
|
+
* becomes shell code.** A probe is either a fixed template over an
|
|
8
|
+
* identifier that passed a strict validator, or it is absent. A name that
|
|
9
|
+
* fails validation is dropped with a note, not quoted, not escaped, not
|
|
10
|
+
* given the benefit of the doubt — escaping is how injection bugs are
|
|
11
|
+
* born promising to behave.
|
|
12
|
+
*
|
|
13
|
+
* Detection is not authorization, and it is not verification either: every
|
|
14
|
+
* capability found here lands `unprobed`. CI secret references are recorded
|
|
15
|
+
* as `ci` capabilities with no probe — a secret living in GitHub's vault is
|
|
16
|
+
* a fact about CI, not about this machine's environment, and synthesizing
|
|
17
|
+
* a local env probe for it would manufacture a gap that is not real.
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync, readdirSync, existsSync } from "node:fs";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
/** Environment variable names, and nothing that only resembles one. */
|
|
22
|
+
const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
23
|
+
/** MCP server labels: package-ish names, no shell metacharacters possible. */
|
|
24
|
+
const LABEL = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
25
|
+
/** Reading a whole minified bundle to find nothing is not detection. */
|
|
26
|
+
const MAX_BYTES = 256 * 1024;
|
|
27
|
+
export function scanRepo(repo) {
|
|
28
|
+
const found = [];
|
|
29
|
+
const rejected = [];
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
const keep = (one) => {
|
|
32
|
+
const key = `${one.kind}:${one.name}`;
|
|
33
|
+
if (seen.has(key))
|
|
34
|
+
return;
|
|
35
|
+
seen.add(key);
|
|
36
|
+
found.push(one);
|
|
37
|
+
};
|
|
38
|
+
// .env.example — each key is an env capability, probe from a fixed
|
|
39
|
+
// template. The identifier validator is what makes the template safe.
|
|
40
|
+
const envExample = readSmall(join(repo, ".env.example"));
|
|
41
|
+
if (envExample !== null) {
|
|
42
|
+
for (const line of envExample.split("\n")) {
|
|
43
|
+
const match = /^\s*(?:export\s+)?([^#\s=]+)=/.exec(line);
|
|
44
|
+
if (match === null)
|
|
45
|
+
continue;
|
|
46
|
+
const name = match[1];
|
|
47
|
+
if (!IDENTIFIER.test(name)) {
|
|
48
|
+
rejected.push({ name, source: ".env.example" });
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
keep({ kind: "env", name, probe: `test -n "$${name}"`, source: ".env.example" });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// .mcp.json — server names, probe-less: whether a server answers is a
|
|
55
|
+
// question `mcp initialize` will earn a probe for later; inventing one
|
|
56
|
+
// now would verify nothing.
|
|
57
|
+
const mcp = readSmall(join(repo, ".mcp.json"));
|
|
58
|
+
if (mcp !== null) {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = JSON.parse(mcp);
|
|
61
|
+
for (const name of Object.keys(parsed.mcpServers ?? {})) {
|
|
62
|
+
if (!LABEL.test(name)) {
|
|
63
|
+
rejected.push({ name, source: ".mcp.json" });
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
keep({ kind: "mcp", name, probe: null, source: ".mcp.json" });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// A file that does not parse describes nothing.
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// supabase/config.toml — its presence means the supabase CLI is part of
|
|
74
|
+
// this repo's workflow. The probe is a constant; nothing scanned enters it.
|
|
75
|
+
if (existsSync(join(repo, "supabase", "config.toml"))) {
|
|
76
|
+
keep({
|
|
77
|
+
kind: "cli",
|
|
78
|
+
name: "supabase",
|
|
79
|
+
probe: "supabase projects list",
|
|
80
|
+
source: "supabase/config.toml",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// Workflow files — `secrets.NAME` references are ci capabilities, no
|
|
84
|
+
// probe: they live in GitHub's vault, not this machine's environment.
|
|
85
|
+
const workflows = join(repo, ".github", "workflows");
|
|
86
|
+
if (existsSync(workflows)) {
|
|
87
|
+
for (const file of readdirSync(workflows).filter(name => /\.ya?ml$/.test(name))) {
|
|
88
|
+
const text = readSmall(join(workflows, file));
|
|
89
|
+
if (text === null)
|
|
90
|
+
continue;
|
|
91
|
+
for (const match of text.matchAll(/secrets\.([A-Za-z0-9_]+)/g)) {
|
|
92
|
+
const name = match[1];
|
|
93
|
+
if (name === "GITHUB_TOKEN")
|
|
94
|
+
continue; // furnished by the platform, never a gap
|
|
95
|
+
if (!IDENTIFIER.test(name)) {
|
|
96
|
+
rejected.push({ name, source: `.github/workflows/${file}` });
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
keep({ kind: "ci", name, probe: null, source: `.github/workflows/${file}` });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { found, rejected };
|
|
104
|
+
}
|
|
105
|
+
function readSmall(path) {
|
|
106
|
+
try {
|
|
107
|
+
const text = readFileSync(path, "utf8");
|
|
108
|
+
return text.length > MAX_BYTES ? text.slice(0, MAX_BYTES) : text;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** Read-only acceptance evidence for every chat surface. The saved verdict,
|
|
2
|
+
* human acceptance and current file health remain separate facts. Reading or
|
|
3
|
+
* sending this packet never accepts a result or authorizes another action. */
|
|
4
|
+
import type { Store } from "./store.js";
|
|
5
|
+
import type { VerifiedApprover } from "./principal.js";
|
|
6
|
+
import { type CriterionMatrixRow } from "./proof.js";
|
|
7
|
+
export declare const ACCEPTANCE_PAGE_SIZE = 3;
|
|
8
|
+
export declare function acceptanceStatus(proof: {
|
|
9
|
+
verdict: string;
|
|
10
|
+
reasons: readonly string[];
|
|
11
|
+
matrix: readonly CriterionMatrixRow[];
|
|
12
|
+
} | null, accepted: boolean): string;
|
|
13
|
+
export declare function readAcceptanceEvidence(store: Store, who: VerifiedApprover, root: string | undefined, task: string, runId?: number, offset?: number): {
|
|
14
|
+
ok: false;
|
|
15
|
+
message: string;
|
|
16
|
+
body?: never;
|
|
17
|
+
} | {
|
|
18
|
+
message?: never;
|
|
19
|
+
ok: true;
|
|
20
|
+
body: {
|
|
21
|
+
task: string;
|
|
22
|
+
run: number;
|
|
23
|
+
title: string;
|
|
24
|
+
currentExecution: string;
|
|
25
|
+
isCurrent: boolean;
|
|
26
|
+
status: string;
|
|
27
|
+
recordedVerdict: "attested" | "refuted" | "short" | "verified" | null;
|
|
28
|
+
accepted: boolean;
|
|
29
|
+
acceptance: {
|
|
30
|
+
at: string;
|
|
31
|
+
note: string | null;
|
|
32
|
+
} | null;
|
|
33
|
+
reasons: (string | null)[];
|
|
34
|
+
gate: Record<string, unknown>;
|
|
35
|
+
criteriaTotal: number;
|
|
36
|
+
nextCriterionOffset: number | null;
|
|
37
|
+
criteria: {
|
|
38
|
+
id: string;
|
|
39
|
+
requirement: string | null;
|
|
40
|
+
state: string;
|
|
41
|
+
details: (string | null)[];
|
|
42
|
+
requiredEvidence: readonly import("./scope.js").EvidenceKind[];
|
|
43
|
+
reviewer: {
|
|
44
|
+
judgement: import("./proof.js").CriterionJudgementWord;
|
|
45
|
+
note: string | null;
|
|
46
|
+
} | null;
|
|
47
|
+
evidence: {
|
|
48
|
+
kind: import("./scope.js").EvidenceKind;
|
|
49
|
+
reference: string | null;
|
|
50
|
+
}[];
|
|
51
|
+
coverageGaps: (string | null)[];
|
|
52
|
+
}[];
|
|
53
|
+
caveats: (string | null)[];
|
|
54
|
+
problems: string[];
|
|
55
|
+
notices: string[];
|
|
56
|
+
nextStep: string;
|
|
57
|
+
disclosure: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/** Deterministic outbox text uses the same verified reader as conversational
|
|
61
|
+
* requests. Every criterion is included; long values disclose shortening. */
|
|
62
|
+
export declare function acceptanceEvidenceText(store: Store, who: VerifiedApprover, root: string | undefined, task: string, run: number): {
|
|
63
|
+
ok: false;
|
|
64
|
+
message: string;
|
|
65
|
+
body?: never;
|
|
66
|
+
} | {
|
|
67
|
+
ok: true;
|
|
68
|
+
text: string;
|
|
69
|
+
isCurrent: boolean;
|
|
70
|
+
accepted: boolean;
|
|
71
|
+
};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { readVerifiedArtifact, readVerifiedProofForRun, scanForSecrets } from "./evidence.js";
|
|
2
|
+
import { verificationEvidence } from "./verification-evidence.js";
|
|
3
|
+
import { manualReviewOnly } from "./proof.js";
|
|
4
|
+
export const ACCEPTANCE_PAGE_SIZE = 3;
|
|
5
|
+
export function acceptanceStatus(proof, accepted) {
|
|
6
|
+
if (accepted)
|
|
7
|
+
return manualReviewOnly(proof) ? "Accepted by a person" : "Accepted with an exception";
|
|
8
|
+
if (manualReviewOnly(proof))
|
|
9
|
+
return "Ready to inspect";
|
|
10
|
+
return proof === null ? "No checks recorded" : ({ verified: "Checks passed", attested: "Checks reported by the agent", short: "Some required material is missing", refuted: "Saved result conflicts with the approved scope" }[proof.verdict] ?? "Some required material is missing");
|
|
11
|
+
}
|
|
12
|
+
export function readAcceptanceEvidence(store, who, root, task, runId, offset = 0) {
|
|
13
|
+
const ref = store.lookupRef(task);
|
|
14
|
+
if (ref?.repo == null || !who.repos.includes(ref.repo))
|
|
15
|
+
return { ok: false, message: "That task is not in your projects." };
|
|
16
|
+
const family = store.taskFamilyOf(task, who.repos, false);
|
|
17
|
+
if (family === null || family.problem !== null)
|
|
18
|
+
return { ok: false, message: "This task's revision history needs attention." };
|
|
19
|
+
if (runId === undefined && family.current.id !== task)
|
|
20
|
+
return { ok: false, message: "A newer revision is current. Choose the exact result before requesting its evidence." };
|
|
21
|
+
const run = runId === undefined ? store.runsFor(ref.id).find(one => one.finishedAt !== null && ["builder", "repair", "scout"].includes(one.role)) : store.getRun(runId);
|
|
22
|
+
if (run == null || run.taskRef !== ref.id || run.finishedAt === null || run.outcome === null || !["builder", "repair", "scout"].includes(run.role))
|
|
23
|
+
return { ok: false, message: "Choose a finished result belonging to that task." };
|
|
24
|
+
const recorded = store.proofVerdictFor(run.id);
|
|
25
|
+
const acceptance = store.proofAcceptance(run.id);
|
|
26
|
+
const matrix = recorded?.matrix ?? [];
|
|
27
|
+
if (!Number.isSafeInteger(offset) || offset < 0 || (offset > 0 && offset >= matrix.length))
|
|
28
|
+
return { ok: false, message: "Choose a criterion offset from this result's evidence." };
|
|
29
|
+
const artifacts = store.artifactsFor(run.id);
|
|
30
|
+
const problems = [];
|
|
31
|
+
const notices = [];
|
|
32
|
+
if (root === undefined)
|
|
33
|
+
problems.push("This chat cannot read the saved result files.");
|
|
34
|
+
for (const artifact of artifacts.filter(one => ["proof", "terminal-diff", "diff-stat", "check-log", "review-context", "report", "handoff", "screenshot"].includes(one.kind))) {
|
|
35
|
+
if (root === undefined)
|
|
36
|
+
break;
|
|
37
|
+
const read = readVerifiedArtifact(root, artifact);
|
|
38
|
+
if (!read.ok || artifact.captureStatus === "failed")
|
|
39
|
+
problems.push(`Saved ${artifact.kind} #${artifact.id} is unavailable or changed.`);
|
|
40
|
+
if (artifact.truncated)
|
|
41
|
+
notices.push(`Saved ${artifact.kind} #${artifact.id} was shortened; omitted content is unavailable.`);
|
|
42
|
+
if (artifact.redacted)
|
|
43
|
+
notices.push(`Sensitive content was removed from ${artifact.kind} #${artifact.id}; it cannot support a claim.`);
|
|
44
|
+
}
|
|
45
|
+
const proof = root === undefined ? null : readVerifiedProofForRun(store, root, run.id);
|
|
46
|
+
if (proof === null)
|
|
47
|
+
problems.push("No readable saved proof is available.");
|
|
48
|
+
else if (!proof.ok)
|
|
49
|
+
problems.push("The saved proof is unavailable or cannot be read.");
|
|
50
|
+
const verification = root === undefined ? null : verificationEvidence(store, root, run.id);
|
|
51
|
+
let gate = { status: "No machine verification receipt available" };
|
|
52
|
+
if (verification !== null && !verification.ok) {
|
|
53
|
+
problems.push(verification.problem);
|
|
54
|
+
gate = { status: "Verification evidence unavailable" };
|
|
55
|
+
}
|
|
56
|
+
else if (verification?.ok && verification.bytes !== null) {
|
|
57
|
+
const receipt = JSON.parse(verification.bytes);
|
|
58
|
+
gate = { status: receipt.result.ran ? (receipt.result.exitCode === 0 ? "Passed" : "Failed") : "Did not run", exitCode: receipt.result.exitCode ?? null, command: "The approved project verification command", logShortened: receipt.log.truncated };
|
|
59
|
+
}
|
|
60
|
+
// These are summaries for conversation, not substitute approval terms.
|
|
61
|
+
// Full statements, caveats and references remain on the authenticated screen.
|
|
62
|
+
const brief = (text, cap = 600) => {
|
|
63
|
+
if (text == null)
|
|
64
|
+
return null;
|
|
65
|
+
if (scanForSecrets(text).length > 0 || /\b\d{5,}:[A-Za-z0-9_-]{20,}\b/.test(text))
|
|
66
|
+
return "[Sensitive text hidden; inspect the original result in Toolroll]";
|
|
67
|
+
const clean = text.replace(/(?:[A-Za-z]:[\\/]|\\\\)[^\s"'<>]+/g, "[path]").replace(/(^|[\s"'`(<[=:,])\/(?:[A-Za-z0-9._~-]+\/)*[A-Za-z0-9._~-]+/g, "$1[path]");
|
|
68
|
+
return clean.length <= cap ? clean : `${clean.slice(0, cap)}… [shortened; open the result for the full text]`;
|
|
69
|
+
};
|
|
70
|
+
const page = matrix.slice(offset, offset + ACCEPTANCE_PAGE_SIZE);
|
|
71
|
+
return { ok: true, body: {
|
|
72
|
+
task, run: run.id, title: store.getTask(task)?.title ?? task, currentExecution: family.current.id,
|
|
73
|
+
isCurrent: family.current.id === task && store.runsFor(ref.id).find(one => one.finishedAt !== null && ["builder", "repair", "scout"].includes(one.role))?.id === run.id,
|
|
74
|
+
status: acceptanceStatus(recorded, acceptance !== null), recordedVerdict: recorded?.verdict ?? null,
|
|
75
|
+
accepted: acceptance !== null, acceptance: acceptance === null ? null : { at: acceptance.acceptedAt, note: brief(acceptance.note) },
|
|
76
|
+
reasons: (recorded?.reasons ?? []).map(one => brief(one)), gate,
|
|
77
|
+
criteriaTotal: matrix.length, nextCriterionOffset: offset + page.length < matrix.length ? offset + page.length : null,
|
|
78
|
+
criteria: page.map(row => ({ id: row.id, requirement: brief(row.statement), state: row.state === "manual-review" ? "Human review required" : row.state,
|
|
79
|
+
details: row.detail.map(one => brief(one)), requiredEvidence: row.requiredEvidence,
|
|
80
|
+
reviewer: row.review == null ? null : { judgement: row.review.judgement, note: brief(row.review.note) },
|
|
81
|
+
evidence: row.answered.map(one => ({ kind: one.kind, reference: brief(one.ref) })),
|
|
82
|
+
coverageGaps: row.coverage?.gaps.map(one => brief(one)) ?? [],
|
|
83
|
+
})),
|
|
84
|
+
caveats: proof?.ok ? proof.proof.caveats.map(one => brief(one)) : [],
|
|
85
|
+
problems, notices,
|
|
86
|
+
nextStep: acceptance !== null ? "Acceptance is already recorded. No further acceptance is needed for this result." : "Inspect the saved result, then mark it complete or request changes. Opening a link or requesting images changes nothing.",
|
|
87
|
+
disclosure: "Conversation summary only. Inspect the complete result, its checks and its terms on the result screen before marking it complete.",
|
|
88
|
+
} };
|
|
89
|
+
}
|
|
90
|
+
/** Deterministic outbox text uses the same verified reader as conversational
|
|
91
|
+
* requests. Every criterion is included; long values disclose shortening. */
|
|
92
|
+
export function acceptanceEvidenceText(store, who, root, task, run) {
|
|
93
|
+
const first = readAcceptanceEvidence(store, who, root, task, run);
|
|
94
|
+
if (!first.ok)
|
|
95
|
+
return first;
|
|
96
|
+
const packet = first.body;
|
|
97
|
+
const criteria = [...packet.criteria];
|
|
98
|
+
let offset = packet.nextCriterionOffset;
|
|
99
|
+
while (offset !== null) {
|
|
100
|
+
const page = readAcceptanceEvidence(store, who, root, task, run, offset);
|
|
101
|
+
if (!page.ok)
|
|
102
|
+
return page;
|
|
103
|
+
criteria.push(...page.body.criteria);
|
|
104
|
+
offset = page.body.nextCriterionOffset;
|
|
105
|
+
}
|
|
106
|
+
const lines = [
|
|
107
|
+
`Result #${run} · ${packet.status}`,
|
|
108
|
+
`Project checks: ${String(packet.gate["status"])}${packet.gate["logShortened"] === true ? " (saved log shortened)" : ""}`,
|
|
109
|
+
...criteria.map(row => [
|
|
110
|
+
`${row.id}: ${row.requirement} — ${row.state === "pass" ? "passed" : row.state}`,
|
|
111
|
+
...(row.reviewer === null ? [] : [`Earlier assessment ${row.reviewer.judgement === "upholds" ? "supported this finding" : row.reviewer.judgement === "contradicts" ? "disputed this finding" : "could not confirm this finding"}: ${row.reviewer.note ?? "No note saved."}`]),
|
|
112
|
+
...row.coverageGaps.map(gap => `Coverage gap: ${gap}`),
|
|
113
|
+
].join("\n")),
|
|
114
|
+
...packet.caveats.map(caveat => `Limitation: ${caveat}`),
|
|
115
|
+
...packet.problems.map(problem => `Saved material problem: ${problem}`),
|
|
116
|
+
...packet.notices,
|
|
117
|
+
packet.disclosure,
|
|
118
|
+
];
|
|
119
|
+
return { ok: true, text: lines.join("\n\n"), isCurrent: packet.isCurrent, accepted: packet.accepted };
|
|
120
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { type Store } from "./store.js";
|
|
2
|
+
import { type VerifiedApprover } from "./principal.js";
|
|
3
|
+
export declare const CHAT_ACTIONS: {
|
|
4
|
+
readonly skill_import: {
|
|
5
|
+
readonly label: "Add skill";
|
|
6
|
+
readonly protected: true;
|
|
7
|
+
readonly password: false;
|
|
8
|
+
};
|
|
9
|
+
readonly skill_enable: {
|
|
10
|
+
readonly label: "Enable skill";
|
|
11
|
+
readonly protected: false;
|
|
12
|
+
readonly password: false;
|
|
13
|
+
};
|
|
14
|
+
readonly skill_disable: {
|
|
15
|
+
readonly label: "Disable skill";
|
|
16
|
+
readonly protected: false;
|
|
17
|
+
readonly password: false;
|
|
18
|
+
};
|
|
19
|
+
readonly skill_restore: {
|
|
20
|
+
readonly label: "Restore skills";
|
|
21
|
+
readonly protected: false;
|
|
22
|
+
readonly password: false;
|
|
23
|
+
};
|
|
24
|
+
readonly skill_test: {
|
|
25
|
+
readonly label: "Test skill";
|
|
26
|
+
readonly protected: false;
|
|
27
|
+
readonly password: false;
|
|
28
|
+
};
|
|
29
|
+
readonly knowledge_instructions: {
|
|
30
|
+
readonly label: "Save project instructions";
|
|
31
|
+
readonly protected: false;
|
|
32
|
+
readonly password: false;
|
|
33
|
+
};
|
|
34
|
+
readonly knowledge_save: {
|
|
35
|
+
readonly label: "Save reference";
|
|
36
|
+
readonly protected: false;
|
|
37
|
+
readonly password: false;
|
|
38
|
+
};
|
|
39
|
+
readonly knowledge_remove: {
|
|
40
|
+
readonly label: "Remove reference";
|
|
41
|
+
readonly protected: false;
|
|
42
|
+
readonly password: false;
|
|
43
|
+
};
|
|
44
|
+
readonly knowledge_restore: {
|
|
45
|
+
readonly label: "Restore knowledge";
|
|
46
|
+
readonly protected: false;
|
|
47
|
+
readonly password: false;
|
|
48
|
+
};
|
|
49
|
+
readonly tool_add: {
|
|
50
|
+
readonly label: "Add tool";
|
|
51
|
+
readonly protected: true;
|
|
52
|
+
readonly password: true;
|
|
53
|
+
};
|
|
54
|
+
readonly tool_remove: {
|
|
55
|
+
readonly label: "Remove tool";
|
|
56
|
+
readonly protected: false;
|
|
57
|
+
readonly password: false;
|
|
58
|
+
};
|
|
59
|
+
readonly flow_create: {
|
|
60
|
+
readonly label: "Create flow";
|
|
61
|
+
readonly protected: false;
|
|
62
|
+
readonly password: false;
|
|
63
|
+
};
|
|
64
|
+
readonly flow_edit: {
|
|
65
|
+
readonly label: "Save flow";
|
|
66
|
+
readonly protected: false;
|
|
67
|
+
readonly password: false;
|
|
68
|
+
};
|
|
69
|
+
readonly flow_card_add: {
|
|
70
|
+
readonly label: "Add card";
|
|
71
|
+
readonly protected: false;
|
|
72
|
+
readonly password: false;
|
|
73
|
+
};
|
|
74
|
+
readonly flow_card_move: {
|
|
75
|
+
readonly label: "Move card";
|
|
76
|
+
readonly protected: false;
|
|
77
|
+
readonly password: false;
|
|
78
|
+
};
|
|
79
|
+
readonly flow_card_approve: {
|
|
80
|
+
readonly label: "Approve";
|
|
81
|
+
readonly protected: false;
|
|
82
|
+
readonly password: false;
|
|
83
|
+
};
|
|
84
|
+
readonly flow_card_send_back: {
|
|
85
|
+
readonly label: "Send back";
|
|
86
|
+
readonly protected: false;
|
|
87
|
+
readonly password: false;
|
|
88
|
+
};
|
|
89
|
+
readonly flow_card_cancel: {
|
|
90
|
+
readonly label: "Cancel card";
|
|
91
|
+
readonly protected: false;
|
|
92
|
+
readonly password: false;
|
|
93
|
+
};
|
|
94
|
+
readonly flow_card_comment: {
|
|
95
|
+
readonly label: "Comment";
|
|
96
|
+
readonly protected: false;
|
|
97
|
+
readonly password: false;
|
|
98
|
+
};
|
|
99
|
+
readonly flow_card_assign: {
|
|
100
|
+
readonly label: "Set owner";
|
|
101
|
+
readonly protected: false;
|
|
102
|
+
readonly password: false;
|
|
103
|
+
};
|
|
104
|
+
readonly flow_card_watch: {
|
|
105
|
+
readonly label: "Follow card";
|
|
106
|
+
readonly protected: false;
|
|
107
|
+
readonly password: false;
|
|
108
|
+
};
|
|
109
|
+
readonly flow_script_save: {
|
|
110
|
+
readonly label: "Save script";
|
|
111
|
+
readonly protected: false;
|
|
112
|
+
readonly password: false;
|
|
113
|
+
};
|
|
114
|
+
readonly flow_trigger_add: {
|
|
115
|
+
readonly label: "Add trigger";
|
|
116
|
+
readonly protected: false;
|
|
117
|
+
readonly password: false;
|
|
118
|
+
};
|
|
119
|
+
readonly flow_trigger_pause: {
|
|
120
|
+
readonly label: "Pause trigger";
|
|
121
|
+
readonly protected: false;
|
|
122
|
+
readonly password: false;
|
|
123
|
+
};
|
|
124
|
+
readonly flow_trigger_resume: {
|
|
125
|
+
readonly label: "Turn trigger on";
|
|
126
|
+
readonly protected: false;
|
|
127
|
+
readonly password: false;
|
|
128
|
+
};
|
|
129
|
+
readonly flow_trigger_remove: {
|
|
130
|
+
readonly label: "Remove trigger";
|
|
131
|
+
readonly protected: false;
|
|
132
|
+
readonly password: false;
|
|
133
|
+
};
|
|
134
|
+
readonly teammate_create: {
|
|
135
|
+
readonly label: "Add teammate";
|
|
136
|
+
readonly protected: false;
|
|
137
|
+
readonly password: false;
|
|
138
|
+
};
|
|
139
|
+
readonly teammate_soul: {
|
|
140
|
+
readonly label: "Update soul file";
|
|
141
|
+
readonly protected: false;
|
|
142
|
+
readonly password: false;
|
|
143
|
+
};
|
|
144
|
+
readonly teammate_state: {
|
|
145
|
+
readonly label: "Change teammate";
|
|
146
|
+
readonly protected: false;
|
|
147
|
+
readonly password: false;
|
|
148
|
+
};
|
|
149
|
+
readonly teammate_note: {
|
|
150
|
+
readonly label: "Tell teammate";
|
|
151
|
+
readonly protected: false;
|
|
152
|
+
readonly password: false;
|
|
153
|
+
};
|
|
154
|
+
readonly teammate_answer: {
|
|
155
|
+
readonly label: "Answer teammate";
|
|
156
|
+
readonly protected: false;
|
|
157
|
+
readonly password: false;
|
|
158
|
+
};
|
|
159
|
+
readonly teammate_tools: {
|
|
160
|
+
readonly label: "Change teammate's tools";
|
|
161
|
+
readonly protected: false;
|
|
162
|
+
readonly password: false;
|
|
163
|
+
};
|
|
164
|
+
readonly teammate_memory: {
|
|
165
|
+
readonly label: "Change teammate's memory";
|
|
166
|
+
readonly protected: false;
|
|
167
|
+
readonly password: false;
|
|
168
|
+
};
|
|
169
|
+
readonly teammate_routine: {
|
|
170
|
+
readonly label: "Change teammate's routines";
|
|
171
|
+
readonly protected: false;
|
|
172
|
+
readonly password: false;
|
|
173
|
+
};
|
|
174
|
+
readonly teammate_undo: {
|
|
175
|
+
readonly label: "Undo teammate's call";
|
|
176
|
+
readonly protected: false;
|
|
177
|
+
readonly password: false;
|
|
178
|
+
};
|
|
179
|
+
readonly kit_setup: {
|
|
180
|
+
readonly label: "Set up kit";
|
|
181
|
+
readonly protected: false;
|
|
182
|
+
readonly password: false;
|
|
183
|
+
};
|
|
184
|
+
readonly decision_record: {
|
|
185
|
+
readonly label: "Record decision";
|
|
186
|
+
readonly protected: false;
|
|
187
|
+
readonly password: false;
|
|
188
|
+
};
|
|
189
|
+
readonly decision_retire: {
|
|
190
|
+
readonly label: "Retire decision";
|
|
191
|
+
readonly protected: false;
|
|
192
|
+
readonly password: false;
|
|
193
|
+
};
|
|
194
|
+
readonly scope_approve: {
|
|
195
|
+
readonly label: "Approve work";
|
|
196
|
+
readonly protected: true;
|
|
197
|
+
readonly password: true;
|
|
198
|
+
};
|
|
199
|
+
readonly result_accept: {
|
|
200
|
+
readonly label: "Mark complete";
|
|
201
|
+
readonly protected: true;
|
|
202
|
+
readonly password: false;
|
|
203
|
+
};
|
|
204
|
+
readonly task_cancel: {
|
|
205
|
+
readonly label: "Cancel task";
|
|
206
|
+
readonly protected: true;
|
|
207
|
+
readonly password: false;
|
|
208
|
+
};
|
|
209
|
+
readonly task_resume: {
|
|
210
|
+
readonly label: "Resume task";
|
|
211
|
+
readonly protected: true;
|
|
212
|
+
readonly password: true;
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
export type ChatAction = keyof typeof CHAT_ACTIONS;
|
|
216
|
+
/** Protected actions a paired phone may confirm behind its own explicit
|
|
217
|
+
* yes/cancel challenge instead of the console's secure screen. Password
|
|
218
|
+
* actions and long or redacted terms never qualify. */
|
|
219
|
+
export declare const CHALLENGE_ACTIONS: ReadonlySet<ChatAction>;
|
|
220
|
+
export declare function isChatAction(value: unknown): value is ChatAction;
|
|
221
|
+
export type SharedAction = {
|
|
222
|
+
operation: ChatAction;
|
|
223
|
+
request: Record<string, unknown>;
|
|
224
|
+
repo: string;
|
|
225
|
+
title: string;
|
|
226
|
+
terms: string[];
|
|
227
|
+
stamp: string;
|
|
228
|
+
state: Record<string, unknown>;
|
|
229
|
+
};
|
|
230
|
+
export declare const CHAT_ACTION_FIELDS: Record<ChatAction, readonly string[]>;
|
|
231
|
+
/** No writes, including at preview. Store-derived snapshots are never accepted
|
|
232
|
+
* from a model. Rebuilding the same request before execution catches changes. */
|
|
233
|
+
export declare function prepareSharedAction(store: Store, who: VerifiedApprover, operation: ChatAction, input: Record<string, unknown>, root?: string, now?: Date): SharedAction;
|
|
234
|
+
export declare function sharedActionPayload(value: Record<string, unknown>): SharedAction | null;
|
|
235
|
+
export declare function sharedActionNeedsReview(action: SharedAction): boolean;
|
|
236
|
+
/** Whether a paired phone may confirm this protected action behind its own
|
|
237
|
+
* explicit challenge: the action is on the challenge list, needs no
|
|
238
|
+
* password, and every term fits the card unshortened. */
|
|
239
|
+
export declare function sharedActionAllowsChallenge(action: SharedAction): boolean;
|
|
240
|
+
export declare function sharedActionReviewPath(id: number): string;
|
|
241
|
+
export declare function mintSharedActionReview(store: Store, who: VerifiedApprover, id: number, root: string, now: Date): {
|
|
242
|
+
payload: SharedAction;
|
|
243
|
+
nonce: string;
|
|
244
|
+
};
|
|
245
|
+
export type SharedActionOptions = {
|
|
246
|
+
via: "web" | "cli" | "telegram" | "slack" | "discord" | "teams";
|
|
247
|
+
root?: string;
|
|
248
|
+
review?: {
|
|
249
|
+
nonce: string;
|
|
250
|
+
password: string;
|
|
251
|
+
};
|
|
252
|
+
confirm?: boolean;
|
|
253
|
+
};
|
|
254
|
+
/** Called inside the proposal door's transaction, after ownership and session
|
|
255
|
+
* checks. No password or review receipt is ever part of a saved proposal. */
|
|
256
|
+
export declare function executeSharedAction(store: Store, who: VerifiedApprover, id: number, payload: SharedAction, now: Date, options: SharedActionOptions): {
|
|
257
|
+
ok: true;
|
|
258
|
+
said: string;
|
|
259
|
+
taskId: string | null;
|
|
260
|
+
href?: string;
|
|
261
|
+
} | {
|
|
262
|
+
ok: false;
|
|
263
|
+
reason: "needs-confirm" | "stale" | "refused";
|
|
264
|
+
said: string;
|
|
265
|
+
};
|