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,133 @@
|
|
|
1
|
+
/** Motion adapts presentation only. Native navigation, forms and tab state
|
|
2
|
+
* remain owned by their existing handlers. No network or credential access. */
|
|
3
|
+
export const WORKSPACE_MOTION_CSS = String.raw `
|
|
4
|
+
:root {
|
|
5
|
+
--panel-open-dur: 250ms;
|
|
6
|
+
--panel-close-dur: 150ms;
|
|
7
|
+
--panel-translate-y: 8px;
|
|
8
|
+
--panel-blur: 0px;
|
|
9
|
+
--tabs-text-muted: var(--muted-foreground);
|
|
10
|
+
--tabs-text-active: var(--foreground);
|
|
11
|
+
--tabs-bar-bg: transparent;
|
|
12
|
+
--tabs-pill-bg: var(--foreground);
|
|
13
|
+
}
|
|
14
|
+
/* Keep the existing underline tabs and 44px controls, not the demo's pill. */
|
|
15
|
+
.result-tabs.t-tabs { display: flex; padding: 0; border-radius: 0; background: transparent; }
|
|
16
|
+
.result-tabs .t-tab { height: auto; min-height: 44px; border-radius: 0; }
|
|
17
|
+
.result-tabs.t-tabs a[aria-selected="true"] { border-bottom-color: transparent; }
|
|
18
|
+
.result-tabs .t-tabs-pill { top: auto; bottom: 0; height: 2px; border-radius: 0; }
|
|
19
|
+
.t-acc-panel-inner { min-height: 0; }
|
|
20
|
+
.t-acc .t-acc-panel-inner { filter: none; }
|
|
21
|
+
.t-acc[data-open="false"] > .t-acc-panel { grid-template-rows: 0fr; }
|
|
22
|
+
.t-acc[data-open="false"] > .t-acc-panel > .t-acc-panel-inner { opacity: 0; }
|
|
23
|
+
.t-acc > summary { cursor: pointer; }
|
|
24
|
+
.t-acc > summary .t-acc-chevron { width: 14px; height: 14px; margin-left: .4rem; }
|
|
25
|
+
.t-acc > summary .t-acc-chevron svg { width: 100%; height: 100%; }
|
|
26
|
+
.t-acc > summary::before, .t-acc > summary::after { content: none !important; }
|
|
27
|
+
.t-acc > summary::-webkit-details-marker { display: none; }
|
|
28
|
+
.t-acc > summary { list-style: none; }
|
|
29
|
+
.switcher[open] .switcher-menu.t-dropdown { animation: none; }
|
|
30
|
+
/* Cross-document entry/exit: links and POSTs are never held for motion.
|
|
31
|
+
* Unsupported browsers keep normal, immediate navigation. */
|
|
32
|
+
.chat-result { view-transition-name: so-result; }
|
|
33
|
+
::view-transition-old(so-result) { animation: result-leave var(--panel-close-dur) var(--panel-ease) both; }
|
|
34
|
+
::view-transition-new(so-result) { animation: result-enter var(--panel-open-dur) var(--panel-ease) both; }
|
|
35
|
+
@keyframes result-enter { from { opacity: 0; transform: translateY(var(--panel-translate-y)); } }
|
|
36
|
+
@keyframes result-leave { to { opacity: 0; transform: translateY(var(--panel-translate-y)); } }
|
|
37
|
+
@media (prefers-reduced-motion: reduce) {
|
|
38
|
+
::view-transition-old(so-result), ::view-transition-new(so-result) { animation: none !important; }
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
export const WORKSPACE_MOTION_SCRIPT = String.raw `
|
|
42
|
+
(function(){
|
|
43
|
+
var reduced=window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
44
|
+
var closers=new WeakMap();
|
|
45
|
+
function duration(name,fallback){
|
|
46
|
+
if(reduced.matches)return 0;
|
|
47
|
+
var raw=getComputedStyle(document.documentElement).getPropertyValue(name).trim();
|
|
48
|
+
var n=parseFloat(raw);return Number.isFinite(n)?n*(raw.endsWith('ms')?1:1000):fallback;
|
|
49
|
+
}
|
|
50
|
+
function enhanceDetails(details,menu){
|
|
51
|
+
if(details.dataset.motionReady)return;
|
|
52
|
+
var head=details.querySelector(':scope > summary');if(!head)return;
|
|
53
|
+
var panel,inner;
|
|
54
|
+
if(menu){
|
|
55
|
+
panel=details.querySelector(':scope > .switcher-menu, :scope > .work-tools-menu');if(!panel)return;
|
|
56
|
+
inner=panel;panel.classList.add('t-dropdown');panel.dataset.origin='top-left';
|
|
57
|
+
}else{
|
|
58
|
+
panel=document.createElement('div');panel.className='t-acc-panel';
|
|
59
|
+
inner=document.createElement('div');inner.className='t-acc-panel-inner';
|
|
60
|
+
Array.from(details.childNodes).forEach(function(node){if(node!==head)inner.appendChild(node);});
|
|
61
|
+
panel.appendChild(inner);details.appendChild(panel);details.classList.add('t-acc');
|
|
62
|
+
var chevron=document.createElement('span');chevron.className='t-acc-chevron';chevron.setAttribute('aria-hidden','true');
|
|
63
|
+
chevron.innerHTML='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 6.5L8 10.5L12 6.5"/></svg>';
|
|
64
|
+
// Use the existing icon when present, rather than rendering two.
|
|
65
|
+
var old=head.querySelector(':scope > svg');if(old)old.remove();head.appendChild(chevron);
|
|
66
|
+
}
|
|
67
|
+
details.dataset.motionReady='true';
|
|
68
|
+
var timer=null,closing=false;
|
|
69
|
+
function paint(open){
|
|
70
|
+
details.dataset.open=String(open);head.setAttribute('aria-expanded',String(open));inner.inert=!open;
|
|
71
|
+
if(menu){panel.classList.toggle('is-open',open);if(open)panel.classList.remove('is-closing');}
|
|
72
|
+
}
|
|
73
|
+
function cancel(){if(timer!==null)clearTimeout(timer);timer=null;}
|
|
74
|
+
function finish(){closing=false;details.open=false;panel.classList.remove('is-closing');timer=null;paint(false);}
|
|
75
|
+
function open(){
|
|
76
|
+
cancel();closing=false;details.open=true;paint(false);panel.classList.remove('is-closing');
|
|
77
|
+
void panel.offsetHeight;paint(true);
|
|
78
|
+
}
|
|
79
|
+
function close(){
|
|
80
|
+
cancel();closing=true;
|
|
81
|
+
if(inner.contains(document.activeElement))head.focus();
|
|
82
|
+
paint(false);if(menu)panel.classList.add('is-closing');
|
|
83
|
+
var ms=duration(menu?'--dropdown-close-dur':'--acc-collapse',menu?150:250);
|
|
84
|
+
if(ms===0)finish();else timer=setTimeout(finish,ms);
|
|
85
|
+
}
|
|
86
|
+
paint(details.open);
|
|
87
|
+
head.addEventListener('click',function(ev){
|
|
88
|
+
if(ev.defaultPrevented||ev.ctrlKey||ev.metaKey||ev.altKey||ev.shiftKey||ev.button!==0)return;
|
|
89
|
+
if(ev.target.closest('a,button,input,select,textarea'))return;
|
|
90
|
+
ev.preventDefault();if(details.open&&!closing)close();else open();
|
|
91
|
+
});
|
|
92
|
+
// External close (Escape/outside click/group exclusivity) stays immediate.
|
|
93
|
+
details.addEventListener('toggle',function(){
|
|
94
|
+
if(!details.open){cancel();closing=false;panel.classList.remove('is-closing');paint(false);}
|
|
95
|
+
else if(!closing)paint(true);
|
|
96
|
+
});
|
|
97
|
+
closers.set(details,function(){if(closing){cancel();finish();}});
|
|
98
|
+
}
|
|
99
|
+
function enhanceTabs(bar){
|
|
100
|
+
if(bar.dataset.motionReady)return;
|
|
101
|
+
var tabs=Array.from(bar.querySelectorAll('[data-result-tab]'));if(!tabs.length)return;
|
|
102
|
+
bar.dataset.motionReady='true';bar.classList.add('t-tabs');
|
|
103
|
+
var pill=document.createElement('span');pill.className='t-tabs-pill';pill.setAttribute('aria-hidden','true');bar.prepend(pill);
|
|
104
|
+
tabs.forEach(function(tab){tab.classList.add('t-tab');});
|
|
105
|
+
function move(animate){
|
|
106
|
+
var tab=tabs.find(function(t){return t.getAttribute('aria-selected')==='true';})||tabs[0];
|
|
107
|
+
var prev=pill.style.transition;
|
|
108
|
+
if(!animate)pill.style.transition='none';
|
|
109
|
+
pill.style.transform='translateX('+tab.offsetLeft+'px)';pill.style.width=tab.offsetWidth+'px';
|
|
110
|
+
if(!animate){void pill.offsetWidth;pill.style.transition=prev;}
|
|
111
|
+
}
|
|
112
|
+
// Selection and keyboard behavior remain in RESULT_REVIEW_SCRIPT.
|
|
113
|
+
new MutationObserver(function(){move(!reduced.matches);}).observe(bar,{subtree:true,attributes:true,attributeFilter:['aria-selected']});
|
|
114
|
+
move(false);
|
|
115
|
+
if(typeof ResizeObserver!=='undefined')new ResizeObserver(function(){move(false);}).observe(bar);
|
|
116
|
+
else window.addEventListener('resize',function(){move(false);});
|
|
117
|
+
}
|
|
118
|
+
function scan(){
|
|
119
|
+
document.querySelectorAll('details.switcher,details.work-tools').forEach(function(d){enhanceDetails(d,true);});
|
|
120
|
+
document.querySelectorAll('details.nav-group,details.task-history,details.decision-context,details.result-knowledge,details.chat-activity-details,details.result-pin,details.result-notes,details.result-details').forEach(function(d){enhanceDetails(d,false);});
|
|
121
|
+
document.querySelectorAll('.result-tabs').forEach(enhanceTabs);
|
|
122
|
+
}
|
|
123
|
+
scan();
|
|
124
|
+
reduced.addEventListener('change',function(){if(reduced.matches)document.querySelectorAll('details[data-motion-ready]').forEach(function(d){var finish=closers.get(d);if(finish)finish();});});
|
|
125
|
+
// Live chat can insert new disclosures. Only enhance fresh nodes; never
|
|
126
|
+
// replace content or read field values, and never restart existing motion.
|
|
127
|
+
var queued=false;
|
|
128
|
+
new MutationObserver(function(records){
|
|
129
|
+
if(queued||!records.some(function(r){return r.addedNodes.length>0;}))return;
|
|
130
|
+
queued=true;queueMicrotask(function(){queued=false;scan();});
|
|
131
|
+
}).observe(document.body,{childList:true,subtree:true});
|
|
132
|
+
})();
|
|
133
|
+
`;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Store } from './store.js';
|
|
2
|
+
export type WorkspaceRevision = {
|
|
3
|
+
current(): string;
|
|
4
|
+
expiresAt(now: Date): number;
|
|
5
|
+
};
|
|
6
|
+
type WorkspaceValidator = {
|
|
7
|
+
etag: string;
|
|
8
|
+
revision: string;
|
|
9
|
+
expiresAt: number;
|
|
10
|
+
};
|
|
11
|
+
/** Per-server response metadata. Reads preserve insertion order; writes at
|
|
12
|
+
* capacity discard the oldest key before storing the supplied validator. */
|
|
13
|
+
export declare class WorkspaceValidatorCache {
|
|
14
|
+
private readonly entries;
|
|
15
|
+
get(key: string): WorkspaceValidator | undefined;
|
|
16
|
+
set(key: string, validator: WorkspaceValidator): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function prepareWorkspaceRevision(store: Store): WorkspaceRevision;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Durable invalidation for authenticated workspace reads. This is cache
|
|
2
|
+
* metadata only: it never grants access or certifies task/process state. */
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { DEFAULT_LIVENESS_MS } from './runner.js';
|
|
5
|
+
const KEY = 'workspace-content:v1';
|
|
6
|
+
const PREFIX = 'workspace_revision_v1_';
|
|
7
|
+
const MAX_AGE_MS = 60_000;
|
|
8
|
+
const OMIT = new Set(['schema_version', 'service_cursor', 'wake', 'notification_delivery',
|
|
9
|
+
'team_read', 'team_request', 'push_delivery', 'telegram_update', 'telegram_outbound_message', 'telegram_retry', 'bridge_lease']);
|
|
10
|
+
const QUIET = {
|
|
11
|
+
runner: ['heartbeat_at'], claim: ['heartbeat_at', 'expires_at'], watch_lease: ['heartbeat_at', 'expires_at'],
|
|
12
|
+
watch_episode: ['ticks'], provider_readiness: ['observed_at'],
|
|
13
|
+
};
|
|
14
|
+
const identifier = (name) => `"${name.replaceAll('"', '""')}"`;
|
|
15
|
+
/** Per-server response metadata. Reads preserve insertion order; writes at
|
|
16
|
+
* capacity discard the oldest key before storing the supplied validator. */
|
|
17
|
+
export class WorkspaceValidatorCache {
|
|
18
|
+
entries = new Map();
|
|
19
|
+
get(key) { return this.entries.get(key); }
|
|
20
|
+
set(key, validator) {
|
|
21
|
+
if (this.entries.size >= 256)
|
|
22
|
+
this.entries.delete(this.entries.keys().next().value);
|
|
23
|
+
this.entries.set(key, validator);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function prepareWorkspaceRevision(store) {
|
|
27
|
+
const db = store.raw();
|
|
28
|
+
const bump = `INSERT INTO service_cursor(key,value,updated_at) VALUES ('${KEY}',1,strftime('%Y-%m-%dT%H:%M:%fZ','now'))
|
|
29
|
+
ON CONFLICT(key) DO UPDATE SET value=service_cursor.value+1,updated_at=excluded.updated_at;`;
|
|
30
|
+
const wanted = new Map();
|
|
31
|
+
// Virtual tables (the FTS5 memory index) cannot carry triggers, and their
|
|
32
|
+
// shadow tables are derived views rebuilt from the stores of record.
|
|
33
|
+
const tables = db.prepare("SELECT name FROM sqlite_schema WHERE type='table' AND name NOT LIKE 'sqlite_%' AND sql NOT LIKE 'CREATE VIRTUAL%' AND name NOT LIKE 'memory_search%'").all();
|
|
34
|
+
for (const row of tables) {
|
|
35
|
+
const table = String(row['name']);
|
|
36
|
+
if (OMIT.has(table))
|
|
37
|
+
continue;
|
|
38
|
+
const columns = db.prepare(`PRAGMA table_info(${identifier(table)})`).all().map(column => String(column['name']));
|
|
39
|
+
const meaningful = columns.filter(column => !QUIET[table]?.includes(column));
|
|
40
|
+
const changes = meaningful.map(column => `OLD.${identifier(column)} IS NOT NEW.${identifier(column)}`);
|
|
41
|
+
// A routine beat is quiet, but a revival after a liveness/lease gap must
|
|
42
|
+
// invalidate an already-rendered "offline" view immediately.
|
|
43
|
+
if (table === 'runner')
|
|
44
|
+
changes.push(`NEW.heartbeat_at < OLD.heartbeat_at OR NEW.heartbeat_at >= strftime('%Y-%m-%dT%H:%M:%fZ',OLD.heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds')`);
|
|
45
|
+
if (table === 'claim' || table === 'watch_lease')
|
|
46
|
+
changes.push('NEW.heartbeat_at >= OLD.expires_at');
|
|
47
|
+
for (const event of ['INSERT', 'UPDATE', 'DELETE']) {
|
|
48
|
+
const guard = event === 'UPDATE' ? ` WHEN ${changes.join(' OR ')}` : '';
|
|
49
|
+
const body = `AFTER ${event} ON ${identifier(table)}${guard} BEGIN ${bump} END`;
|
|
50
|
+
const digest = createHash('sha256').update(body).digest('hex').slice(0, 16);
|
|
51
|
+
wanted.set(`${PREFIX}${table}_${event.toLowerCase()}_${digest}`, body);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Only DDL and one metadata row are written here; no task/history scan or
|
|
55
|
+
// backfill holds the writer. Existing installations perform no DDL writes.
|
|
56
|
+
store.transact(() => {
|
|
57
|
+
const existing = db.prepare("SELECT name FROM sqlite_schema WHERE type='trigger' AND name LIKE ?").all(`${PREFIX}%`);
|
|
58
|
+
const installed = new Set(existing.map(row => String(row['name'])).filter(name => name.startsWith(PREFIX)));
|
|
59
|
+
for (const name of installed)
|
|
60
|
+
if (!wanted.has(name))
|
|
61
|
+
db.exec(`DROP TRIGGER ${identifier(name)}`);
|
|
62
|
+
for (const [name, body] of wanted)
|
|
63
|
+
if (!installed.has(name))
|
|
64
|
+
db.exec(`CREATE TRIGGER ${identifier(name)} ${body}`);
|
|
65
|
+
db.prepare('INSERT OR IGNORE INTO service_cursor(key,value,updated_at) VALUES (?,0,?)').run(KEY, new Date().toISOString());
|
|
66
|
+
});
|
|
67
|
+
const current = db.prepare('SELECT CAST(value AS TEXT) AS value FROM service_cursor WHERE key = ?');
|
|
68
|
+
const boundary = db.prepare(`SELECT MIN(at) AS at FROM (
|
|
69
|
+
SELECT MIN(expires_at) AS at FROM claim WHERE released_at IS NULL AND expires_at > ?
|
|
70
|
+
UNION ALL SELECT MIN(until) FROM hold WHERE until > ?
|
|
71
|
+
UNION ALL SELECT MIN(absolute_expiry) FROM operating_mode WHERE revoked_at IS NULL AND absolute_expiry > ?
|
|
72
|
+
UNION ALL SELECT MIN(strftime('%Y-%m-%dT%H:%M:%fZ',heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds')) FROM runner
|
|
73
|
+
WHERE retired_at IS NULL AND strftime('%Y-%m-%dT%H:%M:%fZ',heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds') >= ?
|
|
74
|
+
UNION ALL SELECT MIN(expires_at) FROM watch_lease WHERE expires_at > ?
|
|
75
|
+
UNION ALL SELECT MIN(expires_at) FROM capability WHERE expires_at > ?
|
|
76
|
+
UNION ALL SELECT MIN(reset_at) FROM quota WHERE reset_at > ?
|
|
77
|
+
)`);
|
|
78
|
+
return {
|
|
79
|
+
current() {
|
|
80
|
+
const value = current.get(KEY)?.['value'];
|
|
81
|
+
if (typeof value !== 'string' || !/^\d+$/.test(value))
|
|
82
|
+
throw new Error('Workspace revision is unavailable');
|
|
83
|
+
return `v1:${value}`;
|
|
84
|
+
},
|
|
85
|
+
expiresAt(now) {
|
|
86
|
+
const iso = now.toISOString();
|
|
87
|
+
const value = boundary.get(iso, iso, iso, iso, iso, iso, iso)?.['at'];
|
|
88
|
+
const at = typeof value === 'string' ? Date.parse(value) : NaN;
|
|
89
|
+
return Math.min(now.getTime() + MAX_AGE_MS, Number.isFinite(at) ? at : Infinity);
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace's ONE display projection (package 1, 2026-09-13): the
|
|
3
|
+
* words, tone, and next action a task or result wears on every surface —
|
|
4
|
+
* Work rows, the task page's status box, the focused chat's journey card,
|
|
5
|
+
* the review cockpit's chip, and the completion receipt's heading. Pure
|
|
6
|
+
* functions over facts the store already records (task state, the dispatch
|
|
7
|
+
* diagnosis, the machine's proof verdict and its reasons, an operator's
|
|
8
|
+
* acceptance, the publication row); nothing here is a second lifecycle,
|
|
9
|
+
* and nothing here reads the agent's narrative as evidence of success.
|
|
10
|
+
*
|
|
11
|
+
* The vocabulary is the truthful-status contract from the workspace plan:
|
|
12
|
+
* a saved result with a failed check says "Changes saved, but checks
|
|
13
|
+
* failed"; a missing proof says "verification needed"; agent-reported
|
|
14
|
+
* checks say so; an accepted exception stays an exception; and nothing
|
|
15
|
+
* local is ever called shipped or deployed — "PR opened" and "Merge
|
|
16
|
+
* observed" name observed publication records, and deployment is never
|
|
17
|
+
* claimed without one.
|
|
18
|
+
*/
|
|
19
|
+
import type { DispatchDiagnosis } from "./dispatch.js";
|
|
20
|
+
import { type ProofVerdict } from "./proof.js";
|
|
21
|
+
import type { ReviewRetryState, TaskState } from "./store.js";
|
|
22
|
+
import type { TaskControlView } from "./task-control.js";
|
|
23
|
+
/** The Work destination's views — shortcuts over the same rows, never a
|
|
24
|
+
* persisted state. All is the default. */
|
|
25
|
+
export type WorkView = "all" | "needs-you" | "running" | "completed";
|
|
26
|
+
export declare const WORK_VIEWS: readonly {
|
|
27
|
+
key: WorkView;
|
|
28
|
+
label: string;
|
|
29
|
+
hint: string;
|
|
30
|
+
empty: string;
|
|
31
|
+
}[];
|
|
32
|
+
export declare function parseWorkView(raw: string | null): WorkView;
|
|
33
|
+
/** The finished result's recorded facts, as `taskViewData`, dispatch, and
|
|
34
|
+
* the completed-work query already read them. */
|
|
35
|
+
export type ResultFacts = {
|
|
36
|
+
runId: number | null;
|
|
37
|
+
/** The result run's role — a scout delivers a report, not a diff. */
|
|
38
|
+
role: string | null;
|
|
39
|
+
outcome: string | null;
|
|
40
|
+
verdict: ProofVerdict | null;
|
|
41
|
+
reasons: readonly string[];
|
|
42
|
+
accepted: boolean;
|
|
43
|
+
/** A no-change conclusion's two presence facts (handoff + sealed diff);
|
|
44
|
+
* undefined when the caller did not read them. */
|
|
45
|
+
recordComplete?: boolean;
|
|
46
|
+
/** This exact run's independent review (v50 retry projection), read
|
|
47
|
+
* per run so an older selected result keeps its own words; undefined
|
|
48
|
+
* when the caller did not read it, null when never requested. */
|
|
49
|
+
review?: ReviewFacts | null;
|
|
50
|
+
};
|
|
51
|
+
/** The result's review facts as `reviewRetryStateOf` records them, plus
|
|
52
|
+
* the one liveness fact the words depend on. */
|
|
53
|
+
export type ReviewFacts = {
|
|
54
|
+
state: ReviewRetryState["state"];
|
|
55
|
+
/** The attempt in play: the next ordinal while queued, else the live or
|
|
56
|
+
* latest attempt's. */
|
|
57
|
+
attempt: number | null;
|
|
58
|
+
cap: number;
|
|
59
|
+
attempts: number;
|
|
60
|
+
retriesRemaining: number;
|
|
61
|
+
latestReason: string | null;
|
|
62
|
+
interrupted: boolean;
|
|
63
|
+
/** Who asked for the open (queued) request, when one is open. */
|
|
64
|
+
queuedBy: string | null;
|
|
65
|
+
queuedOrigin?: "operator" | "automatic" | null;
|
|
66
|
+
/** Whether the live attempt's reviewer worker is answering. */
|
|
67
|
+
reviewerAlive: boolean;
|
|
68
|
+
};
|
|
69
|
+
/** The review facts from the store's bounded retry projection — the same
|
|
70
|
+
* reading `diagnoseTaskDispatch` makes, so every surface starts from one
|
|
71
|
+
* record. `reviewerAlive` answers for the live attempt's runner. */
|
|
72
|
+
export declare function reviewFactsOf(retry: ReviewRetryState | null, reviewerAlive: (runner: string) => boolean): ReviewFacts | null;
|
|
73
|
+
/** The tokens a review in flight wears — the dispatch codes, unchanged. */
|
|
74
|
+
export declare const REVIEW_TOKENS: ReadonlySet<string>;
|
|
75
|
+
/**
|
|
76
|
+
* A review that is queued, running, failed with a retry left, or
|
|
77
|
+
* exhausted is the result's PRIMARY status — the machine is still
|
|
78
|
+
* deciding, and every surface must say so with the same words. A review
|
|
79
|
+
* never requested, or one that succeeded, adds nothing: the stored verdict
|
|
80
|
+
* (folded by the review where one landed) speaks. Words and tokens are
|
|
81
|
+
* the v50 dispatch contract; nothing here changes the lifecycle.
|
|
82
|
+
*/
|
|
83
|
+
export declare function reviewStatusOf(review: ReviewFacts | null): DisplayStatus | null;
|
|
84
|
+
export type PublicationFacts = {
|
|
85
|
+
state: string;
|
|
86
|
+
prNumber: number | null;
|
|
87
|
+
prUrl: string | null;
|
|
88
|
+
remoteState: string | null;
|
|
89
|
+
lastCheckState: string | null;
|
|
90
|
+
} | null;
|
|
91
|
+
export type StatusTone = "attention" | "problem" | "live" | "ready" | "done" | "muted" | "neutral";
|
|
92
|
+
export type NextAction = {
|
|
93
|
+
label: string;
|
|
94
|
+
/** Where the act lives — the page, not a URL, so every surface can
|
|
95
|
+
* build its own link (a task page anchors, a row links out). */
|
|
96
|
+
kind: "open-result" | "open-review" | "open-task" | "open-run" | "open-pr";
|
|
97
|
+
};
|
|
98
|
+
export type DisplayStatus = {
|
|
99
|
+
/** The stable `data-work-status` token pages and tests key off. */
|
|
100
|
+
token: string;
|
|
101
|
+
/** The main wording — the same words on every surface. */
|
|
102
|
+
label: string;
|
|
103
|
+
/** One plain sentence: the real reason when one is recorded, never an
|
|
104
|
+
* invented cause, repair, retry time, or percentage. */
|
|
105
|
+
detail: string;
|
|
106
|
+
tone: StatusTone;
|
|
107
|
+
action: NextAction | null;
|
|
108
|
+
};
|
|
109
|
+
/** What kind of evidence problem a verdict records: a check the machine
|
|
110
|
+
* actually ran and saw fail, evidence that contradicts the sealed record
|
|
111
|
+
* (a mismatched changed-path claim, an altered criterion, a caveat that
|
|
112
|
+
* contradicts a met verdict), or evidence that is simply absent. A generic
|
|
113
|
+
* refuted verdict is NOT a failed test claim — only the verify-command
|
|
114
|
+
* reasons say a check failed. */
|
|
115
|
+
export type EvidenceProblem = "checks-failed" | "mismatched" | "missing" | "none";
|
|
116
|
+
export declare function evidenceProblemOf(verdict: ProofVerdict | null, reasons: readonly string[]): EvidenceProblem;
|
|
117
|
+
/** The exit code of the failed check, when the recorded reason names one. */
|
|
118
|
+
export declare function failedCheckExit(reasons: readonly string[]): number | null;
|
|
119
|
+
/** The observed publication record in words. Each state is a distinct
|
|
120
|
+
* fact: a pushed branch is not a PR, an open PR is not a merge, and a
|
|
121
|
+
* merge is not a deployment — no record here ever says "deployed". The
|
|
122
|
+
* words name what was recorded or last observed and what stays
|
|
123
|
+
* unconfirmed; a missing or stale observation never proves that nothing
|
|
124
|
+
* merged or deployed, and merging is never called manual-only — an
|
|
125
|
+
* authorized mode may merge on green. */
|
|
126
|
+
export declare function publicationStatusOf(publication: PublicationFacts): {
|
|
127
|
+
token: string;
|
|
128
|
+
label: string;
|
|
129
|
+
detail: string;
|
|
130
|
+
} | null;
|
|
131
|
+
/**
|
|
132
|
+
* The finished result's status — the one place the done words are chosen.
|
|
133
|
+
* Precedence: no record → scout report → operator acceptance → the machine
|
|
134
|
+
* verdict's problems (a refuted or short verdict is never masked by a
|
|
135
|
+
* no-change outcome) → a no-change conclusion, which owes no proof beyond
|
|
136
|
+
* its handoff and sealed diff → agent-attested → verified, where an
|
|
137
|
+
* observed publication names itself (a published but unverified result
|
|
138
|
+
* keeps its evidence problem as the main wording; the publication rides
|
|
139
|
+
* the detail).
|
|
140
|
+
*/
|
|
141
|
+
export declare function resultStatusOf(result: ResultFacts | null, publication?: PublicationFacts): DisplayStatus;
|
|
142
|
+
/** The completion receipt's heading: what the record actually supports.
|
|
143
|
+
* Never "shipped" — local changes are saved; a PR or merge is named only
|
|
144
|
+
* from its observed record. */
|
|
145
|
+
export declare function receiptHeadingOf(outcome: string | null, publication: PublicationFacts, role?: string | null): string;
|
|
146
|
+
/** The receipt's one-line publication fact under the heading. */
|
|
147
|
+
export declare function receiptPublicationWords(publication: PublicationFacts): string;
|
|
148
|
+
/** Everything one Work row needs, gathered by the server from records it
|
|
149
|
+
* already reads elsewhere. */
|
|
150
|
+
export type WorkFacts = {
|
|
151
|
+
id: string;
|
|
152
|
+
title: string;
|
|
153
|
+
repo: string | null;
|
|
154
|
+
state: TaskState;
|
|
155
|
+
updatedAt: string;
|
|
156
|
+
dispatch: DispatchDiagnosis | null;
|
|
157
|
+
result: ResultFacts | null;
|
|
158
|
+
publication: PublicationFacts;
|
|
159
|
+
liveRunId: number | null;
|
|
160
|
+
/** The unfinished recorded attempt, even if its claim disappeared. */
|
|
161
|
+
unfinishedRunId?: number | null;
|
|
162
|
+
control?: TaskControlView;
|
|
163
|
+
/** An unanswered question on this exact task, read from the decision
|
|
164
|
+
* owner. An elapsed attention deadline does not close a question. */
|
|
165
|
+
openDecision?: {
|
|
166
|
+
id: number;
|
|
167
|
+
runId: number;
|
|
168
|
+
question: string;
|
|
169
|
+
overdue: boolean;
|
|
170
|
+
} | null;
|
|
171
|
+
};
|
|
172
|
+
export type WorkStatus = DisplayStatus & {
|
|
173
|
+
/** Which shortcut views list this row; `all` always does. */
|
|
174
|
+
views: readonly WorkView[];
|
|
175
|
+
/** The rank All sorts by: what needs a person first, then live work,
|
|
176
|
+
* then queued and waiting, then finished, then cancelled. */
|
|
177
|
+
rank: number;
|
|
178
|
+
/** Facts that remain visible when a more useful next action leads. */
|
|
179
|
+
diagnostics?: readonly Pick<DisplayStatus, "token" | "label" | "detail" | "tone">[];
|
|
180
|
+
};
|
|
181
|
+
/** Needs you: the existing diagnosis semantics — waiting on a person with a
|
|
182
|
+
* concrete act — never every queued task indiscriminately. */
|
|
183
|
+
export declare function needsPerson(dispatch: DispatchDiagnosis | null): boolean;
|
|
184
|
+
export declare function dispatchActionLabel(dispatch: DispatchDiagnosis | null): string;
|
|
185
|
+
export declare function workStatusOf(facts: WorkFacts, resultDisplay?: DisplayStatus): WorkStatus;
|
|
186
|
+
/** The counts each view tab wears — from the same rows the page lists. */
|
|
187
|
+
export declare function workCounts(rows: readonly {
|
|
188
|
+
views: readonly WorkView[];
|
|
189
|
+
}[]): Record<WorkView, number>;
|
|
190
|
+
/** All's order: rank, then most recently updated. */
|
|
191
|
+
export declare function compareWorkRows(a: {
|
|
192
|
+
rank: number;
|
|
193
|
+
updatedAt: string;
|
|
194
|
+
}, b: {
|
|
195
|
+
rank: number;
|
|
196
|
+
updatedAt: string;
|
|
197
|
+
}): number;
|
|
198
|
+
/** The shell's three primary destinations, from the page's own active
|
|
199
|
+
* key: every old page keeps its key and lights the destination it now
|
|
200
|
+
* lives under. */
|
|
201
|
+
export type PrimaryDestination = "chat" | "work" | "projects" | "flows" | "settings" | null;
|
|
202
|
+
export declare function primaryDestinationOf(active: string): PrimaryDestination;
|
|
203
|
+
/** Learning stays in Settings and a useful, closed result disclosure. */
|
|
204
|
+
export declare function learningHtml(view: import('./project-learning.js').LearningView, csrf: string, canManage: boolean, source?: number): string;
|