toolroll 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1113 -0
- package/THIRD_PARTY_NOTICES.md +449 -0
- package/dist/accent-colors.d.ts +48 -0
- package/dist/accent-colors.js +122 -0
- package/dist/action-ledger.d.ts +26 -0
- package/dist/action-ledger.js +75 -0
- package/dist/agent-fence.d.ts +42 -0
- package/dist/agent-fence.js +183 -0
- package/dist/agentconfig.d.ts +216 -0
- package/dist/agentconfig.js +454 -0
- package/dist/api-tokens.d.ts +16 -0
- package/dist/api-tokens.js +27 -0
- package/dist/approval-policy.d.ts +69 -0
- package/dist/approval-policy.js +137 -0
- package/dist/approval-rules-ui.d.ts +25 -0
- package/dist/approval-rules-ui.js +39 -0
- package/dist/assignment-adapters.d.ts +180 -0
- package/dist/assignment-adapters.js +239 -0
- package/dist/assignment-brief.d.ts +71 -0
- package/dist/assignment-brief.js +129 -0
- package/dist/assignment-delivery.d.ts +56 -0
- package/dist/assignment-delivery.js +160 -0
- package/dist/assignment-presentation.d.ts +26 -0
- package/dist/assignment-presentation.js +80 -0
- package/dist/assignment-status.d.ts +62 -0
- package/dist/assignment-status.js +152 -0
- package/dist/assignment-ui.d.ts +71 -0
- package/dist/assignment-ui.js +103 -0
- package/dist/assignment.d.ts +222 -0
- package/dist/assignment.js +399 -0
- package/dist/attest.d.ts +56 -0
- package/dist/attest.js +153 -0
- package/dist/backend.d.ts +97 -0
- package/dist/backend.js +166 -0
- package/dist/backup-ui.d.ts +22 -0
- package/dist/backup-ui.js +59 -0
- package/dist/backup.d.ts +84 -0
- package/dist/backup.js +421 -0
- package/dist/beads.d.ts +34 -0
- package/dist/beads.js +135 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +22 -0
- package/dist/board.d.ts +150 -0
- package/dist/board.js +210 -0
- package/dist/boot-identity.d.ts +63 -0
- package/dist/boot-identity.js +99 -0
- package/dist/browser/THIRD_PARTY_NOTICES.txt +2295 -0
- package/dist/browser/workspace.css +4 -0
- package/dist/browser/workspace.js +225 -0
- package/dist/browser-crew.d.ts +11 -0
- package/dist/browser-crew.js +50 -0
- package/dist/browser-shell.d.ts +8 -0
- package/dist/browser-shell.js +60 -0
- package/dist/browser-workspace.d.ts +780 -0
- package/dist/browser-workspace.js +47 -0
- package/dist/budget-alerts.d.ts +19 -0
- package/dist/budget-alerts.js +46 -0
- package/dist/builder.d.ts +370 -0
- package/dist/builder.js +3262 -0
- package/dist/capscan.d.ts +35 -0
- package/dist/capscan.js +113 -0
- package/dist/chat-acceptance.d.ts +71 -0
- package/dist/chat-acceptance.js +120 -0
- package/dist/chat-actions.d.ts +265 -0
- package/dist/chat-actions.js +1273 -0
- package/dist/chat-channel.d.ts +109 -0
- package/dist/chat-channel.js +652 -0
- package/dist/chat-continuity.d.ts +32 -0
- package/dist/chat-continuity.js +317 -0
- package/dist/chat-controls.d.ts +113 -0
- package/dist/chat-controls.js +53 -0
- package/dist/chat-delivery-state.d.ts +159 -0
- package/dist/chat-delivery-state.js +309 -0
- package/dist/chat-delivery.d.ts +38 -0
- package/dist/chat-delivery.js +693 -0
- package/dist/chat-display.d.ts +1 -0
- package/dist/chat-display.js +18 -0
- package/dist/chat-evidence.d.ts +123 -0
- package/dist/chat-evidence.js +207 -0
- package/dist/chat-flow.d.ts +44 -0
- package/dist/chat-flow.js +215 -0
- package/dist/chat-inbox.d.ts +57 -0
- package/dist/chat-inbox.js +123 -0
- package/dist/chat-polish.d.ts +16 -0
- package/dist/chat-polish.js +135 -0
- package/dist/chat-review.d.ts +46 -0
- package/dist/chat-review.js +98 -0
- package/dist/chat-rooms.d.ts +123 -0
- package/dist/chat-rooms.js +216 -0
- package/dist/chat-task-actions.d.ts +44 -0
- package/dist/chat-task-actions.js +79 -0
- package/dist/check-progress.d.ts +51 -0
- package/dist/check-progress.js +290 -0
- package/dist/child-database.d.ts +12 -0
- package/dist/child-database.js +30 -0
- package/dist/claim.d.ts +688 -0
- package/dist/claim.js +1740 -0
- package/dist/cli.d.ts +137 -0
- package/dist/cli.js +1461 -0
- package/dist/codex-limits.d.ts +15 -0
- package/dist/codex-limits.js +145 -0
- package/dist/coding-context.d.ts +55 -0
- package/dist/coding-context.js +92 -0
- package/dist/coding-handoff.d.ts +57 -0
- package/dist/coding-handoff.js +277 -0
- package/dist/coding-provider.d.ts +72 -0
- package/dist/coding-provider.js +424 -0
- package/dist/coding-shipping-ui.d.ts +4 -0
- package/dist/coding-shipping-ui.js +12 -0
- package/dist/coding-types.d.ts +62 -0
- package/dist/coding-types.js +1 -0
- package/dist/coding-ui.d.ts +17 -0
- package/dist/coding-ui.js +364 -0
- package/dist/coding-update.d.ts +15 -0
- package/dist/coding-update.js +149 -0
- package/dist/coding-workspace.d.ts +124 -0
- package/dist/coding-workspace.js +768 -0
- package/dist/container-state.d.ts +5 -0
- package/dist/container-state.js +62 -0
- package/dist/containment.d.ts +197 -0
- package/dist/containment.js +559 -0
- package/dist/contest.d.ts +318 -0
- package/dist/contest.js +753 -0
- package/dist/control-setup.d.ts +35 -0
- package/dist/control-setup.js +40 -0
- package/dist/control-ui.d.ts +29 -0
- package/dist/control-ui.js +53 -0
- package/dist/controller-service.d.ts +1 -0
- package/dist/controller-service.js +19 -0
- package/dist/controller-supervisor.d.ts +30 -0
- package/dist/controller-supervisor.js +104 -0
- package/dist/converse.d.ts +304 -0
- package/dist/converse.js +849 -0
- package/dist/coordinator-proposals.d.ts +29 -0
- package/dist/coordinator-proposals.js +137 -0
- package/dist/coordinator.d.ts +186 -0
- package/dist/coordinator.js +447 -0
- package/dist/credentials-ui.d.ts +25 -0
- package/dist/credentials-ui.js +48 -0
- package/dist/daemon.d.ts +209 -0
- package/dist/daemon.js +604 -0
- package/dist/decision.d.ts +120 -0
- package/dist/decision.js +388 -0
- package/dist/demo.d.ts +55 -0
- package/dist/demo.js +992 -0
- package/dist/desktop-access.d.ts +28 -0
- package/dist/desktop-access.js +88 -0
- package/dist/desktop-bundle.d.ts +16 -0
- package/dist/desktop-bundle.js +74 -0
- package/dist/desktop-host.d.ts +54 -0
- package/dist/desktop-host.js +508 -0
- package/dist/desktop-update-gate.d.ts +12 -0
- package/dist/desktop-update-gate.js +91 -0
- package/dist/desktop-update-recovery.d.ts +14 -0
- package/dist/desktop-update-recovery.js +243 -0
- package/dist/desktop-update.d.ts +110 -0
- package/dist/desktop-update.js +740 -0
- package/dist/discord-api.d.ts +20 -0
- package/dist/discord-api.js +138 -0
- package/dist/discord-chat.d.ts +16 -0
- package/dist/discord-chat.js +381 -0
- package/dist/discord-settings.d.ts +7 -0
- package/dist/discord-settings.js +75 -0
- package/dist/discord.d.ts +10 -0
- package/dist/discord.js +169 -0
- package/dist/discover.d.ts +75 -0
- package/dist/discover.js +150 -0
- package/dist/dispatch.d.ts +100 -0
- package/dist/dispatch.js +311 -0
- package/dist/dispose.d.ts +161 -0
- package/dist/dispose.js +803 -0
- package/dist/email-settings.d.ts +34 -0
- package/dist/email-settings.js +50 -0
- package/dist/envelope.d.ts +47 -0
- package/dist/envelope.js +105 -0
- package/dist/evidence-pack.d.ts +185 -0
- package/dist/evidence-pack.js +258 -0
- package/dist/evidence.d.ts +345 -0
- package/dist/evidence.js +782 -0
- package/dist/exec.d.ts +285 -0
- package/dist/exec.js +1841 -0
- package/dist/exhaustion.d.ts +85 -0
- package/dist/exhaustion.js +141 -0
- package/dist/export-ui.d.ts +4 -0
- package/dist/export-ui.js +17 -0
- package/dist/export.d.ts +48 -0
- package/dist/export.js +305 -0
- package/dist/flow-actions.d.ts +77 -0
- package/dist/flow-actions.js +203 -0
- package/dist/flow-code.d.ts +50 -0
- package/dist/flow-code.js +159 -0
- package/dist/flow-draft.d.ts +38 -0
- package/dist/flow-draft.js +80 -0
- package/dist/flow-engine.d.ts +66 -0
- package/dist/flow-engine.js +416 -0
- package/dist/flow-insights.d.ts +95 -0
- package/dist/flow-insights.js +149 -0
- package/dist/flow-live.d.ts +24 -0
- package/dist/flow-live.js +150 -0
- package/dist/flow-people.d.ts +24 -0
- package/dist/flow-people.js +91 -0
- package/dist/flow-replies.d.ts +48 -0
- package/dist/flow-replies.js +113 -0
- package/dist/flow-scripts.d.ts +38 -0
- package/dist/flow-scripts.js +73 -0
- package/dist/flow-secrets.d.ts +13 -0
- package/dist/flow-secrets.js +45 -0
- package/dist/flow-sort.d.ts +82 -0
- package/dist/flow-sort.js +153 -0
- package/dist/flow-steps.d.ts +40 -0
- package/dist/flow-steps.js +408 -0
- package/dist/flow-triggers.d.ts +244 -0
- package/dist/flow-triggers.js +959 -0
- package/dist/flows-ui.d.ts +20 -0
- package/dist/flows-ui.js +175 -0
- package/dist/flows.d.ts +229 -0
- package/dist/flows.js +968 -0
- package/dist/fonts.d.ts +19 -0
- package/dist/fonts.js +19 -0
- package/dist/gaps.d.ts +35 -0
- package/dist/gaps.js +101 -0
- package/dist/gate-failure.d.ts +40 -0
- package/dist/gate-failure.js +66 -0
- package/dist/git.d.ts +54 -0
- package/dist/git.js +94 -0
- package/dist/google-mail.d.ts +58 -0
- package/dist/google-mail.js +151 -0
- package/dist/grant.d.ts +136 -0
- package/dist/grant.js +238 -0
- package/dist/graph.d.ts +164 -0
- package/dist/graph.js +383 -0
- package/dist/guides.d.ts +22 -0
- package/dist/guides.js +363 -0
- package/dist/held.d.ts +150 -0
- package/dist/held.js +799 -0
- package/dist/invoke.d.ts +112 -0
- package/dist/invoke.js +780 -0
- package/dist/issues.d.ts +41 -0
- package/dist/issues.js +131 -0
- package/dist/job-object-helper.ps1 +252 -0
- package/dist/jsonl-discriminants.d.ts +11 -0
- package/dist/jsonl-discriminants.js +93 -0
- package/dist/keys.d.ts +104 -0
- package/dist/keys.js +229 -0
- package/dist/kits-ui.d.ts +17 -0
- package/dist/kits-ui.js +46 -0
- package/dist/kits.d.ts +86 -0
- package/dist/kits.js +215 -0
- package/dist/knowledge-cli.d.ts +101 -0
- package/dist/knowledge-cli.js +92 -0
- package/dist/knowledge-ui.d.ts +24 -0
- package/dist/knowledge-ui.js +40 -0
- package/dist/lead-context.d.ts +8 -0
- package/dist/lead-context.js +56 -0
- package/dist/lead-follow.d.ts +22 -0
- package/dist/lead-follow.js +167 -0
- package/dist/lead-status.d.ts +75 -0
- package/dist/lead-status.js +285 -0
- package/dist/ledger-chain.d.ts +46 -0
- package/dist/ledger-chain.js +187 -0
- package/dist/ledger-csv.d.ts +4 -0
- package/dist/ledger-csv.js +11 -0
- package/dist/ledger-view.d.ts +24 -0
- package/dist/ledger-view.js +58 -0
- package/dist/limits-ui.d.ts +26 -0
- package/dist/limits-ui.js +67 -0
- package/dist/link.d.ts +72 -0
- package/dist/link.js +217 -0
- package/dist/live.d.ts +96 -0
- package/dist/live.js +366 -0
- package/dist/liveness.d.ts +30 -0
- package/dist/liveness.js +42 -0
- package/dist/log.d.ts +7 -0
- package/dist/log.js +25 -0
- package/dist/mailbox.d.ts +57 -0
- package/dist/mailbox.js +150 -0
- package/dist/maintenance.d.ts +11 -0
- package/dist/maintenance.js +35 -0
- package/dist/mate-cli.d.ts +52 -0
- package/dist/mate-cli.js +345 -0
- package/dist/mate-contract.d.ts +10 -0
- package/dist/mate-contract.js +30 -0
- package/dist/mate-doors.d.ts +69 -0
- package/dist/mate-doors.js +548 -0
- package/dist/mate-progress.d.ts +29 -0
- package/dist/mate-progress.js +121 -0
- package/dist/mate-tools.d.ts +94 -0
- package/dist/mate-tools.js +1878 -0
- package/dist/mate.d.ts +92 -0
- package/dist/mate.js +435 -0
- package/dist/mcp-connect.d.ts +103 -0
- package/dist/mcp-connect.js +252 -0
- package/dist/mcp.d.ts +27 -0
- package/dist/mcp.js +651 -0
- package/dist/memory-cli.d.ts +466 -0
- package/dist/memory-cli.js +111 -0
- package/dist/memory-pass.d.ts +160 -0
- package/dist/memory-pass.js +409 -0
- package/dist/metrics.d.ts +3 -0
- package/dist/metrics.js +56 -0
- package/dist/mobile-viewport.d.ts +3 -0
- package/dist/mobile-viewport.js +37 -0
- package/dist/model-catalog.d.ts +118 -0
- package/dist/model-catalog.js +376 -0
- package/dist/models-cli.d.ts +102 -0
- package/dist/models-cli.js +66 -0
- package/dist/models-ui.d.ts +34 -0
- package/dist/models-ui.js +68 -0
- package/dist/modes.d.ts +80 -0
- package/dist/modes.js +182 -0
- package/dist/monitoring-settings.d.ts +44 -0
- package/dist/monitoring-settings.js +173 -0
- package/dist/monitoring-ui.d.ts +20 -0
- package/dist/monitoring-ui.js +51 -0
- package/dist/monitoring.d.ts +34 -0
- package/dist/monitoring.js +221 -0
- package/dist/names.d.ts +67 -0
- package/dist/names.js +102 -0
- package/dist/observations.d.ts +40 -0
- package/dist/observations.js +211 -0
- package/dist/oidc.d.ts +71 -0
- package/dist/oidc.js +182 -0
- package/dist/onboard.d.ts +108 -0
- package/dist/onboard.js +325 -0
- package/dist/openrouter-models.d.ts +30 -0
- package/dist/openrouter-models.js +120 -0
- package/dist/operate.d.ts +118 -0
- package/dist/operate.js +11321 -0
- package/dist/peek-cli.d.ts +97 -0
- package/dist/peek-cli.js +215 -0
- package/dist/peek.d.ts +134 -0
- package/dist/peek.js +578 -0
- package/dist/phase-routing.d.ts +307 -0
- package/dist/phase-routing.js +658 -0
- package/dist/plan-auto.d.ts +14 -0
- package/dist/plan-auto.js +92 -0
- package/dist/plan.d.ts +186 -0
- package/dist/plan.js +401 -0
- package/dist/planner-source.d.ts +251 -0
- package/dist/planner-source.js +460 -0
- package/dist/planner.d.ts +75 -0
- package/dist/planner.js +992 -0
- package/dist/policy-ui.d.ts +20 -0
- package/dist/policy-ui.js +41 -0
- package/dist/policy.d.ts +111 -0
- package/dist/policy.js +231 -0
- package/dist/prepared-evidence.d.ts +16 -0
- package/dist/prepared-evidence.js +96 -0
- package/dist/pricing.d.ts +45 -0
- package/dist/pricing.js +77 -0
- package/dist/principal.d.ts +42 -0
- package/dist/principal.js +82 -0
- package/dist/probe.d.ts +46 -0
- package/dist/probe.js +79 -0
- package/dist/process-custody.d.ts +17 -0
- package/dist/process-custody.js +91 -0
- package/dist/process-liveness.d.ts +10 -0
- package/dist/process-liveness.js +81 -0
- package/dist/process-recovery-anchor.d.ts +75 -0
- package/dist/process-recovery-anchor.js +188 -0
- package/dist/process-recovery-coalition.d.ts +25 -0
- package/dist/process-recovery-coalition.js +105 -0
- package/dist/process-recovery-eligibility.d.ts +178 -0
- package/dist/process-recovery-eligibility.js +170 -0
- package/dist/process-recovery-native.d.ts +172 -0
- package/dist/process-recovery-native.js +592 -0
- package/dist/process-recovery-provenance.d.ts +163 -0
- package/dist/process-recovery-provenance.js +292 -0
- package/dist/process-recovery-services.d.ts +56 -0
- package/dist/process-recovery-services.js +191 -0
- package/dist/process-recovery-settlement.d.ts +32 -0
- package/dist/process-recovery-settlement.js +132 -0
- package/dist/process-recovery.d.ts +41 -0
- package/dist/process-recovery.js +91 -0
- package/dist/process-tree.d.ts +41 -0
- package/dist/process-tree.js +264 -0
- package/dist/project-access.d.ts +14 -0
- package/dist/project-access.js +34 -0
- package/dist/project-cli.d.ts +18 -0
- package/dist/project-cli.js +104 -0
- package/dist/project-delete-ui.d.ts +22 -0
- package/dist/project-delete-ui.js +48 -0
- package/dist/project-delete.d.ts +55 -0
- package/dist/project-delete.js +413 -0
- package/dist/project-knowledge.d.ts +111 -0
- package/dist/project-knowledge.js +241 -0
- package/dist/project-learning.d.ts +100 -0
- package/dist/project-learning.js +438 -0
- package/dist/project-memory.d.ts +81 -0
- package/dist/project-memory.js +264 -0
- package/dist/project-skills.d.ts +152 -0
- package/dist/project-skills.js +660 -0
- package/dist/project-tools.d.ts +219 -0
- package/dist/project-tools.js +796 -0
- package/dist/project.d.ts +61 -0
- package/dist/project.js +125 -0
- package/dist/prompt.d.ts +22 -0
- package/dist/prompt.js +72 -0
- package/dist/proof.d.ts +513 -0
- package/dist/proof.js +1140 -0
- package/dist/proposal.d.ts +82 -0
- package/dist/proposal.js +210 -0
- package/dist/provider-connection.d.ts +22 -0
- package/dist/provider-connection.js +98 -0
- package/dist/provider-limits.d.ts +35 -0
- package/dist/provider-limits.js +95 -0
- package/dist/provider.d.ts +279 -0
- package/dist/provider.js +935 -0
- package/dist/publish.d.ts +107 -0
- package/dist/publish.js +650 -0
- package/dist/pulls.d.ts +118 -0
- package/dist/pulls.js +240 -0
- package/dist/push.d.ts +95 -0
- package/dist/push.js +353 -0
- package/dist/quality.d.ts +8 -0
- package/dist/quality.js +6 -0
- package/dist/recipe-ui.d.ts +18 -0
- package/dist/recipe-ui.js +152 -0
- package/dist/recipes.d.ts +81 -0
- package/dist/recipes.js +332 -0
- package/dist/remote.d.ts +67 -0
- package/dist/remote.js +122 -0
- package/dist/render.d.ts +64 -0
- package/dist/render.js +587 -0
- package/dist/report-summary.d.ts +13 -0
- package/dist/report-summary.js +15 -0
- package/dist/repos.d.ts +65 -0
- package/dist/repos.js +277 -0
- package/dist/repository-context-ui.d.ts +2 -0
- package/dist/repository-context-ui.js +10 -0
- package/dist/repository-context.d.ts +67 -0
- package/dist/repository-context.js +376 -0
- package/dist/restart-certification.d.ts +134 -0
- package/dist/restart-certification.js +226 -0
- package/dist/result-actions.d.ts +28 -0
- package/dist/result-actions.js +270 -0
- package/dist/result-completion.d.ts +18 -0
- package/dist/result-completion.js +66 -0
- package/dist/result-review.d.ts +213 -0
- package/dist/result-review.js +430 -0
- package/dist/retention-ui.d.ts +12 -0
- package/dist/retention-ui.js +39 -0
- package/dist/retention.d.ts +72 -0
- package/dist/retention.js +288 -0
- package/dist/review-context.d.ts +243 -0
- package/dist/review-context.js +1043 -0
- package/dist/review-evidence.d.ts +33 -0
- package/dist/review-evidence.js +56 -0
- package/dist/reviewer.d.ts +97 -0
- package/dist/reviewer.js +202 -0
- package/dist/routine.d.ts +228 -0
- package/dist/routine.js +764 -0
- package/dist/runner.d.ts +266 -0
- package/dist/runner.js +399 -0
- package/dist/scan.d.ts +32 -0
- package/dist/scan.js +92 -0
- package/dist/scope.d.ts +695 -0
- package/dist/scope.js +1176 -0
- package/dist/scout-report.d.ts +42 -0
- package/dist/scout-report.js +108 -0
- package/dist/scout.d.ts +69 -0
- package/dist/scout.js +351 -0
- package/dist/serve.d.ts +313 -0
- package/dist/serve.js +21776 -0
- package/dist/session-brief.d.ts +8 -0
- package/dist/session-brief.js +24 -0
- package/dist/session-cli.d.ts +13 -0
- package/dist/session-cli.js +284 -0
- package/dist/session-contract.d.ts +183 -0
- package/dist/session-contract.js +122 -0
- package/dist/session-http.d.ts +19 -0
- package/dist/session-http.js +154 -0
- package/dist/session-server.d.ts +12 -0
- package/dist/session-server.js +37 -0
- package/dist/session-service.d.ts +22 -0
- package/dist/session-service.js +157 -0
- package/dist/setup-guide.d.ts +39 -0
- package/dist/setup-guide.js +93 -0
- package/dist/sign-in-guard.d.ts +45 -0
- package/dist/sign-in-guard.js +74 -0
- package/dist/skills-ui.d.ts +11 -0
- package/dist/skills-ui.js +58 -0
- package/dist/skills.d.ts +97 -0
- package/dist/skills.js +276 -0
- package/dist/slack-api.d.ts +55 -0
- package/dist/slack-api.js +229 -0
- package/dist/slack-chat.d.ts +28 -0
- package/dist/slack-chat.js +413 -0
- package/dist/slack-settings.d.ts +7 -0
- package/dist/slack-settings.js +75 -0
- package/dist/slack-state.d.ts +13 -0
- package/dist/slack-state.js +9 -0
- package/dist/slack.d.ts +13 -0
- package/dist/slack.js +167 -0
- package/dist/spend-ui.d.ts +28 -0
- package/dist/spend-ui.js +95 -0
- package/dist/spend.d.ts +142 -0
- package/dist/spend.js +313 -0
- package/dist/sqlite-runtime.d.ts +3 -0
- package/dist/sqlite-runtime.js +6 -0
- package/dist/sso-settings.d.ts +33 -0
- package/dist/sso-settings.js +103 -0
- package/dist/sso-ui.d.ts +22 -0
- package/dist/sso-ui.js +39 -0
- package/dist/storage.d.ts +15 -0
- package/dist/storage.js +84 -0
- package/dist/store.d.ts +7754 -0
- package/dist/store.js +23279 -0
- package/dist/structured-output.d.ts +58 -0
- package/dist/structured-output.js +103 -0
- package/dist/style-asset.d.ts +7 -0
- package/dist/style-asset.js +41 -0
- package/dist/subscription-chat.d.ts +46 -0
- package/dist/subscription-chat.js +275 -0
- package/dist/summary.d.ts +33 -0
- package/dist/summary.js +71 -0
- package/dist/supervisor.mjs +297 -0
- package/dist/surface.d.ts +63 -0
- package/dist/surface.js +352 -0
- package/dist/sync.d.ts +94 -0
- package/dist/sync.js +279 -0
- package/dist/task-composer.d.ts +13 -0
- package/dist/task-composer.js +52 -0
- package/dist/task-control.d.ts +165 -0
- package/dist/task-control.js +214 -0
- package/dist/task-outcome-cli.d.ts +10 -0
- package/dist/task-outcome-cli.js +92 -0
- package/dist/task-text.d.ts +30 -0
- package/dist/task-text.js +41 -0
- package/dist/team-cli.d.ts +15 -0
- package/dist/team-cli.js +618 -0
- package/dist/team-contract.d.ts +92 -0
- package/dist/team-contract.js +1 -0
- package/dist/team-http.d.ts +17 -0
- package/dist/team-http.js +144 -0
- package/dist/team-leads.d.ts +81 -0
- package/dist/team-leads.js +565 -0
- package/dist/team-runtime.d.ts +27 -0
- package/dist/team-runtime.js +264 -0
- package/dist/team-ui.d.ts +3 -0
- package/dist/team-ui.js +9 -0
- package/dist/team-updates.d.ts +8 -0
- package/dist/team-updates.js +57 -0
- package/dist/teammate-admin.d.ts +53 -0
- package/dist/teammate-admin.js +111 -0
- package/dist/teammate-desk.d.ts +60 -0
- package/dist/teammate-desk.js +154 -0
- package/dist/teammate-memory.d.ts +64 -0
- package/dist/teammate-memory.js +196 -0
- package/dist/teammate-question.d.ts +59 -0
- package/dist/teammate-question.js +175 -0
- package/dist/teammate-tools.d.ts +108 -0
- package/dist/teammate-tools.js +271 -0
- package/dist/teammate-week.d.ts +68 -0
- package/dist/teammate-week.js +132 -0
- package/dist/teammate-work.d.ts +76 -0
- package/dist/teammate-work.js +280 -0
- package/dist/teammates-ui.d.ts +20 -0
- package/dist/teammates-ui.js +166 -0
- package/dist/teammates.d.ts +180 -0
- package/dist/teammates.js +253 -0
- package/dist/teams-api.d.ts +33 -0
- package/dist/teams-api.js +204 -0
- package/dist/teams-chat.d.ts +26 -0
- package/dist/teams-chat.js +215 -0
- package/dist/teams-settings.d.ts +12 -0
- package/dist/teams-settings.js +57 -0
- package/dist/teams.d.ts +21 -0
- package/dist/teams.js +124 -0
- package/dist/telegram-flow.d.ts +49 -0
- package/dist/telegram-flow.js +110 -0
- package/dist/telegram-mate.d.ts +137 -0
- package/dist/telegram-mate.js +707 -0
- package/dist/telegram-progress.d.ts +14 -0
- package/dist/telegram-progress.js +129 -0
- package/dist/telegram-settings.d.ts +9 -0
- package/dist/telegram-settings.js +36 -0
- package/dist/telegram-status.d.ts +75 -0
- package/dist/telegram-status.js +265 -0
- package/dist/telegram-team.d.ts +85 -0
- package/dist/telegram-team.js +359 -0
- package/dist/telegram.d.ts +230 -0
- package/dist/telegram.js +1931 -0
- package/dist/templates.d.ts +65 -0
- package/dist/templates.js +118 -0
- package/dist/tool-launcher.d.ts +1 -0
- package/dist/tool-launcher.js +101 -0
- package/dist/tools-ui.d.ts +30 -0
- package/dist/tools-ui.js +40 -0
- package/dist/transitions-recipes.d.ts +1 -0
- package/dist/transitions-recipes.js +203 -0
- package/dist/tree-proof.d.ts +34 -0
- package/dist/tree-proof.js +58 -0
- package/dist/verification-evidence.d.ts +44 -0
- package/dist/verification-evidence.js +238 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +10 -0
- package/dist/webhooks.d.ts +91 -0
- package/dist/webhooks.js +283 -0
- package/dist/work-index.d.ts +68 -0
- package/dist/work-index.js +384 -0
- package/dist/work-summary.d.ts +57 -0
- package/dist/work-summary.js +116 -0
- package/dist/workspace-motion.d.ts +4 -0
- package/dist/workspace-motion.js +133 -0
- package/dist/workspace-revision.d.ts +19 -0
- package/dist/workspace-revision.js +92 -0
- package/dist/workspace-ui.d.ts +204 -0
- package/dist/workspace-ui.js +411 -0
- package/dist/worktree-notices.d.ts +13 -0
- package/dist/worktree-notices.js +17 -0
- package/dist/worktree.d.ts +249 -0
- package/dist/worktree.js +720 -0
- package/package.json +122 -0
- package/scripts/canary-assertions.mjs +42 -0
- package/scripts/crash-canary.mjs +253 -0
- package/scripts/fixtures/crash-process.mjs +74 -0
- package/scripts/fixtures/pilot-scenarios.mjs +85 -0
- package/scripts/fixtures/restart-service.mjs +27 -0
- package/scripts/launchd-certification.mjs +143 -0
- package/scripts/pilot.mjs +121 -0
- package/scripts/proof-preflight.mjs +140 -0
- package/scripts/provider-canary.mjs +379 -0
- package/scripts/recovery-canary.mjs +135 -0
- package/scripts/restart-certification.mjs +98 -0
package/dist/webhooks.js
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { loadDiscordCredentials } from "./discord-api.js";
|
|
2
|
+
import { loadTeamsCredentials } from "./teams-api.js";
|
|
3
|
+
import { loadSlackCredentials } from "./slack-api.js";
|
|
4
|
+
/**
|
|
5
|
+
* Legacy notification-only webhooks. Interactive Slack and Discord adapters
|
|
6
|
+
* have their own paired identities and reuse the shared action engine.
|
|
7
|
+
* A configured interactive adapter suppresses its legacy webhook delivery.
|
|
8
|
+
*
|
|
9
|
+
* The webhook URL is a CREDENTIAL (anyone holding it can post to the
|
|
10
|
+
* channel): it lives in a 0600 file beside the database or in the
|
|
11
|
+
* environment, is never a database column, and never appears in logs or
|
|
12
|
+
* errors — the same rules as the bot token, for the same reasons.
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, writeFileSync, chmodSync, rmSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { envValue } from "./names.js";
|
|
17
|
+
export const SLACK_ENV = "TOOLROLL_SLACK_WEBHOOK";
|
|
18
|
+
export const DISCORD_ENV = "TOOLROLL_DISCORD_WEBHOOK";
|
|
19
|
+
export const CONSOLE_URL_ENV = "TOOLROLL_CONSOLE_URL";
|
|
20
|
+
export const PRIMARY_ENV = "TOOLROLL_MESSAGING_PRIMARY";
|
|
21
|
+
/** How long one delivery claim protects a row from a second sender. */
|
|
22
|
+
const DELIVERY_CLAIM_MS = 60_000;
|
|
23
|
+
const POST_TIMEOUT_MS = 10_000;
|
|
24
|
+
const FILE_OF = {
|
|
25
|
+
slack: "slack-webhook",
|
|
26
|
+
discord: "discord-webhook",
|
|
27
|
+
};
|
|
28
|
+
const CONSOLE_FILE = "console-url";
|
|
29
|
+
const PRIMARY_FILE = "messaging-primary";
|
|
30
|
+
export const MESSAGING_CHANNELS = ["telegram", "slack", "discord", "teams"];
|
|
31
|
+
export function isMessagingChannel(value) {
|
|
32
|
+
return MESSAGING_CHANNELS.includes(value);
|
|
33
|
+
}
|
|
34
|
+
/** The shapes each platform hands out; anything else is probably a paste error. */
|
|
35
|
+
const URL_SHAPE = {
|
|
36
|
+
slack: /^https:\/\/hooks\.slack\.com\/\S+$/,
|
|
37
|
+
discord: /^https:\/\/(canary\.|ptb\.)?discord\.com\/api\/webhooks\/\S+$/,
|
|
38
|
+
};
|
|
39
|
+
export function saveWebhook(dir, kind, url) {
|
|
40
|
+
if (!URL_SHAPE[kind].test(url.trim())) {
|
|
41
|
+
return { ok: false, message: `that does not look like a ${kind} webhook URL — paste it exactly as the platform issued it` };
|
|
42
|
+
}
|
|
43
|
+
const file = join(dir, FILE_OF[kind]);
|
|
44
|
+
writeFileSync(file, `${url.trim()}\n`, { mode: 0o600 });
|
|
45
|
+
chmodSync(file, 0o600);
|
|
46
|
+
return { ok: true };
|
|
47
|
+
}
|
|
48
|
+
export function clearWebhook(dir, kind) {
|
|
49
|
+
try {
|
|
50
|
+
rmSync(join(dir, FILE_OF[kind]));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Already absent is cleared.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function saveConsoleUrl(dir, url) {
|
|
57
|
+
// Parsed, not pattern-matched (attended review, finding 11): the stored
|
|
58
|
+
// value becomes every deep link's base, so userinfo, queries, and
|
|
59
|
+
// fragments are refused rather than smuggled into each link.
|
|
60
|
+
let parsed;
|
|
61
|
+
try {
|
|
62
|
+
parsed = new URL(url.trim());
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return { ok: false, message: "the console URL is the address the links open — http(s)://host[:port]" };
|
|
66
|
+
}
|
|
67
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
68
|
+
return { ok: false, message: "the console URL must be http or https" };
|
|
69
|
+
}
|
|
70
|
+
if (parsed.username !== "" || parsed.password !== "") {
|
|
71
|
+
return { ok: false, message: "the console URL must not carry credentials — they would ride every link" };
|
|
72
|
+
}
|
|
73
|
+
if (parsed.search !== "" || parsed.hash !== "") {
|
|
74
|
+
return { ok: false, message: "the console URL is a base address — no query or fragment" };
|
|
75
|
+
}
|
|
76
|
+
const normalized = `${parsed.origin}${parsed.pathname.replace(/\/+$/, "")}`;
|
|
77
|
+
const file = join(dir, CONSOLE_FILE);
|
|
78
|
+
writeFileSync(file, `${normalized}\n`, { mode: 0o600 });
|
|
79
|
+
return { ok: true };
|
|
80
|
+
}
|
|
81
|
+
function readTrimmed(path) {
|
|
82
|
+
try {
|
|
83
|
+
const raw = readFileSync(path, "utf8").trim();
|
|
84
|
+
return raw === "" ? null : raw;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Every configured mirror. Environment wins over files, like the bot token. */
|
|
91
|
+
export function loadWebhookTargets(env, dir) {
|
|
92
|
+
const targets = [];
|
|
93
|
+
const slack = envValue(env, "SLACK_WEBHOOK") ?? readTrimmed(join(dir, FILE_OF.slack));
|
|
94
|
+
const discord = envValue(env, "DISCORD_WEBHOOK") ?? readTrimmed(join(dir, FILE_OF.discord));
|
|
95
|
+
if (slack !== null && slack !== undefined && slack !== "")
|
|
96
|
+
targets.push({ kind: "slack", url: slack });
|
|
97
|
+
if (discord !== null && discord !== undefined && discord !== "")
|
|
98
|
+
targets.push({ kind: "discord", url: discord });
|
|
99
|
+
return targets;
|
|
100
|
+
}
|
|
101
|
+
/** The operator's explicit choice of which service carries the pages. */
|
|
102
|
+
export function savePrimary(dir, channel) {
|
|
103
|
+
writeFileSync(join(dir, PRIMARY_FILE), `${channel}\n`, { mode: 0o600 });
|
|
104
|
+
}
|
|
105
|
+
export function loadPrimary(env, dir) {
|
|
106
|
+
const configured = envValue(env, "MESSAGING_PRIMARY") ?? readTrimmed(join(dir, PRIMARY_FILE));
|
|
107
|
+
return configured !== undefined && configured !== null && isMessagingChannel(configured) ? configured : null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Which service actually carries the pages, and whether that was chosen or
|
|
111
|
+
* merely fell out of what happens to be configured. Explicit choice wins
|
|
112
|
+
* WHEN its channel is actually configured (a primary pointing at nothing
|
|
113
|
+
* falls through rather than silencing every page); otherwise Telegram if
|
|
114
|
+
* present (it can hold buttons), else the mirrors. `implicit` is the flag
|
|
115
|
+
* every status surface uses to say "you have several — pick one".
|
|
116
|
+
*/
|
|
117
|
+
export function effectivePrimary(env, dir, telegramConfigured) {
|
|
118
|
+
const targets = loadWebhookTargets(env, dir);
|
|
119
|
+
const configured = [
|
|
120
|
+
...(telegramConfigured ? ["telegram"] : []),
|
|
121
|
+
...(loadSlackCredentials(dir) !== null ? ["slack"] : []),
|
|
122
|
+
...(loadDiscordCredentials(dir) !== null ? ["discord"] : []),
|
|
123
|
+
...(loadTeamsCredentials(dir) !== null ? ["teams"] : []),
|
|
124
|
+
...targets.map(one => one.kind).filter(kind => (kind !== "slack" || loadSlackCredentials(dir) === null) && (kind !== "discord" || loadDiscordCredentials(dir) === null)),
|
|
125
|
+
];
|
|
126
|
+
const chosen = loadPrimary(env, dir);
|
|
127
|
+
if (chosen !== null && configured.includes(chosen)) {
|
|
128
|
+
return { channel: chosen, implicit: false, configured };
|
|
129
|
+
}
|
|
130
|
+
if (telegramConfigured)
|
|
131
|
+
return { channel: "telegram", implicit: configured.length > 1, configured };
|
|
132
|
+
const fallback = configured[0] ?? null;
|
|
133
|
+
return { channel: fallback, implicit: configured.length > 1, configured };
|
|
134
|
+
}
|
|
135
|
+
export function loadConsoleUrl(env, dir) {
|
|
136
|
+
const configured = envValue(env, "CONSOLE_URL") ?? readTrimmed(join(dir, CONSOLE_FILE));
|
|
137
|
+
return configured === undefined || configured === null || configured === "" ? null : configured.replace(/\/+$/, "");
|
|
138
|
+
}
|
|
139
|
+
/** A dotted IPv4 that names this machine or no machine: loopback, unspecified. */
|
|
140
|
+
function isLocalIpv4(address) {
|
|
141
|
+
return /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(address) || address === "0.0.0.0";
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Names a browser cannot leave this machine with: never a phone destination.
|
|
145
|
+
* The URL parser hands back a canonical hostname, so an IPv6 literal arrives
|
|
146
|
+
* compressed — `::1`, `::`, and an embedded IPv4 as two hex groups
|
|
147
|
+
* (`::ffff:7f00:1` is 127.0.0.1 mapped; `::7f00:1` the deprecated
|
|
148
|
+
* compatible form) — and those groups are decoded and judged as the IPv4
|
|
149
|
+
* they carry.
|
|
150
|
+
*/
|
|
151
|
+
function isLoopbackHost(hostname) {
|
|
152
|
+
// A DNS root dot changes the spelling, not the destination (localhost.).
|
|
153
|
+
const host = hostname.replace(/^\[|\]$/g, "").replace(/\.$/, "").toLowerCase();
|
|
154
|
+
if (host === "localhost" || host.endsWith(".localhost") || host === "::1" || host === "::" || isLocalIpv4(host))
|
|
155
|
+
return true;
|
|
156
|
+
const embedded = /^::(?:ffff:)?([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(host);
|
|
157
|
+
if (embedded === null)
|
|
158
|
+
return false;
|
|
159
|
+
const high = parseInt(embedded[1], 16), low = parseInt(embedded[2], 16);
|
|
160
|
+
return isLocalIpv4(`${high >> 8}.${high & 255}.${low >> 8}.${low & 255}`);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The origin a phone link may open, or null. The SAME console-url setting
|
|
164
|
+
* the mirrors use — read again on every call, never cached, so a changed or
|
|
165
|
+
* removed setting stops the next link — held to a stricter shape than a
|
|
166
|
+
* mirror link: exactly an https origin (no credentials, path, query,
|
|
167
|
+
* fragment), not loopback, and, when the console this process co-hosts
|
|
168
|
+
* states its own `--public-url`, exactly that origin. A model, a Host
|
|
169
|
+
* header or a proposal field never supplies it, and nothing here probes
|
|
170
|
+
* the address: a valid shape is a place to send a person, not a promise
|
|
171
|
+
* that it answers.
|
|
172
|
+
*/
|
|
173
|
+
export function phoneOrigin(env, dir, options = {}) {
|
|
174
|
+
const configured = loadConsoleUrl(env, dir);
|
|
175
|
+
if (configured === null)
|
|
176
|
+
return null;
|
|
177
|
+
let parsed;
|
|
178
|
+
try {
|
|
179
|
+
parsed = new URL(configured);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
if (parsed.protocol !== "https:" || parsed.username !== "" || parsed.password !== "" || parsed.search !== "" || parsed.hash !== "")
|
|
185
|
+
return null;
|
|
186
|
+
if (parsed.pathname !== "/" && parsed.pathname !== "")
|
|
187
|
+
return null;
|
|
188
|
+
if (parsed.hostname === "" || isLoopbackHost(parsed.hostname))
|
|
189
|
+
return null;
|
|
190
|
+
if (options.serverOrigin !== undefined && options.serverOrigin !== null) {
|
|
191
|
+
let server;
|
|
192
|
+
try {
|
|
193
|
+
server = new URL(options.serverOrigin);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
if (server.origin !== parsed.origin)
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
return parsed.origin;
|
|
202
|
+
}
|
|
203
|
+
/** Where in the console this notification wants a person. */
|
|
204
|
+
export function linkFor(consoleUrl, notification) {
|
|
205
|
+
if (consoleUrl === null)
|
|
206
|
+
return null;
|
|
207
|
+
const decision = /^decision:(\d+)$/.exec(notification.dedupeKey);
|
|
208
|
+
if (decision !== null)
|
|
209
|
+
return `${consoleUrl}/d/${decision[1]}`;
|
|
210
|
+
// Everything else that wants a person is triaged where acting lives.
|
|
211
|
+
return `${consoleUrl}/next`;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* One notification, one platform. The payloads are the simplest thing each
|
|
215
|
+
* platform documents; the console link is the call to action, because the
|
|
216
|
+
* message is a mirror and the UI is the instrument.
|
|
217
|
+
*/
|
|
218
|
+
export async function postWebhook(target, notification, link, fetcher = fetch) {
|
|
219
|
+
const lines = [notification.subject, "", notification.body];
|
|
220
|
+
const body = target.kind === "slack"
|
|
221
|
+
? {
|
|
222
|
+
text: [
|
|
223
|
+
`*${notification.subject}*`,
|
|
224
|
+
notification.body,
|
|
225
|
+
...(link === null ? [] : [`<${link}|open in Toolroll>`]),
|
|
226
|
+
].join("\n"),
|
|
227
|
+
}
|
|
228
|
+
: {
|
|
229
|
+
content: [
|
|
230
|
+
`**${notification.subject}**`,
|
|
231
|
+
notification.body,
|
|
232
|
+
...(link === null ? [] : [link]),
|
|
233
|
+
].join("\n").slice(0, 1900),
|
|
234
|
+
};
|
|
235
|
+
void lines;
|
|
236
|
+
try {
|
|
237
|
+
const response = await fetcher(target.url, {
|
|
238
|
+
method: "POST",
|
|
239
|
+
headers: { "content-type": "application/json" },
|
|
240
|
+
body: JSON.stringify(body),
|
|
241
|
+
signal: AbortSignal.timeout(POST_TIMEOUT_MS),
|
|
242
|
+
});
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
// Status only — the URL is a credential and never rides an error.
|
|
245
|
+
return { ok: false, error: `${target.kind} answered ${response.status}` };
|
|
246
|
+
}
|
|
247
|
+
return { ok: true };
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const said = error instanceof Error ? error.name : "failed";
|
|
251
|
+
return { ok: false, error: `${target.kind} delivery ${said}` };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Deliver every pending notification to every configured mirror, through
|
|
256
|
+
* the SAME claim/finalize discipline as every other deliverer — so a
|
|
257
|
+
* webhook pass and a Telegram bridge can never both own one row. This
|
|
258
|
+
* pass runs when Telegram is NOT configured; with a paired Telegram chat,
|
|
259
|
+
* Telegram remains the delivery channel (it can carry buttons) and these
|
|
260
|
+
* mirrors stay silent rather than double-paging every phone.
|
|
261
|
+
*/
|
|
262
|
+
export async function webhookPass(store, options) {
|
|
263
|
+
const clock = options.clock ?? (() => new Date());
|
|
264
|
+
const owner = options.owner ?? `webhooks-${Math.floor(clock().getTime() / 1000)}`;
|
|
265
|
+
const report = { sent: 0, problems: [] };
|
|
266
|
+
if (options.targets.length === 0)
|
|
267
|
+
return report;
|
|
268
|
+
const claimed = store.claimDeliveries(owner, DELIVERY_CLAIM_MS, clock());
|
|
269
|
+
for (const row of claimed) {
|
|
270
|
+
const link = linkFor(options.consoleUrl, row);
|
|
271
|
+
const outcomes = await Promise.all(options.targets.map(target => postWebhook(target, row, link, options.fetcher ?? fetch)));
|
|
272
|
+
const failed = outcomes.filter(one => !one.ok);
|
|
273
|
+
const outcome = failed.length === 0
|
|
274
|
+
? { ok: true, receipt: options.targets.map(one => one.kind).join("+") }
|
|
275
|
+
: { ok: false, error: failed.map(one => (one.ok ? "" : one.error)).join("; ") };
|
|
276
|
+
const finalized = store.finalizeDelivery(row.id, owner, outcome, clock());
|
|
277
|
+
if (outcome.ok && finalized)
|
|
278
|
+
report.sent++;
|
|
279
|
+
if (!outcome.ok)
|
|
280
|
+
report.problems.push(`notification ${row.id}: ${outcome.error}`);
|
|
281
|
+
}
|
|
282
|
+
return report;
|
|
283
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type Store, type TaskState } from './store.js';
|
|
2
|
+
import type { AssignmentSnapshot } from './assignment.js';
|
|
3
|
+
import type { WorkAction, WorkSummaryAccess } from './work-summary.js';
|
|
4
|
+
import type { WorkStatus, WorkView } from './workspace-ui.js';
|
|
5
|
+
export type WorkIndexCounts = Record<WorkView, number>;
|
|
6
|
+
export type WorkIndexItem = {
|
|
7
|
+
rootId: string;
|
|
8
|
+
activeTaskId: string;
|
|
9
|
+
title: string;
|
|
10
|
+
repo: string | null;
|
|
11
|
+
state: TaskState;
|
|
12
|
+
assignmentState: AssignmentSnapshot['state'];
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
versionCount: number;
|
|
16
|
+
earlierActiveCount: number;
|
|
17
|
+
familyProblem: string | null;
|
|
18
|
+
liveRunId: number | null;
|
|
19
|
+
unfinishedRunId: number | null;
|
|
20
|
+
resultRunId: number | null;
|
|
21
|
+
resultTaskId: string | null;
|
|
22
|
+
resultOutcome: string | null;
|
|
23
|
+
publicationUrl: string | null;
|
|
24
|
+
status: WorkStatus;
|
|
25
|
+
primaryAction: WorkAction | null;
|
|
26
|
+
completion: {
|
|
27
|
+
actor: string;
|
|
28
|
+
at: string;
|
|
29
|
+
digest: string;
|
|
30
|
+
} | null;
|
|
31
|
+
evidence: 'recorded';
|
|
32
|
+
};
|
|
33
|
+
export type WorkIndexOptions = {
|
|
34
|
+
view?: WorkView;
|
|
35
|
+
limit?: number;
|
|
36
|
+
cursor?: string | null;
|
|
37
|
+
project?: string | null;
|
|
38
|
+
state?: TaskState;
|
|
39
|
+
leadId?: string;
|
|
40
|
+
};
|
|
41
|
+
export type WorkIndexPage = {
|
|
42
|
+
items: WorkIndexItem[];
|
|
43
|
+
totals: WorkIndexCounts;
|
|
44
|
+
projects: WorkProjectCounts[];
|
|
45
|
+
nextCursor: string | null;
|
|
46
|
+
limit: number;
|
|
47
|
+
view: WorkView;
|
|
48
|
+
};
|
|
49
|
+
export type WorkProjectCounts = {
|
|
50
|
+
repo: string | null;
|
|
51
|
+
totals: WorkIndexCounts;
|
|
52
|
+
queued: number;
|
|
53
|
+
doneRecently: number;
|
|
54
|
+
};
|
|
55
|
+
export declare const WORK_INDEX_PAGE_LIMIT = 40;
|
|
56
|
+
export declare const WORK_INDEX_MAX_LIMIT = 100;
|
|
57
|
+
export declare class WorkIndexCursorError extends Error {
|
|
58
|
+
constructor();
|
|
59
|
+
}
|
|
60
|
+
/** A single SQLite statement gives rows and exact totals one read snapshot.
|
|
61
|
+
* Completion is a recorded acknowledgment of the latest run/scope/family by
|
|
62
|
+
* its current lead or an admitted approver, invalidated by newer source facts.
|
|
63
|
+
* Its historical receipt hash also binds disk state, which is deliberately
|
|
64
|
+
* rechecked only on opening/acting. This query grants no completion authority.
|
|
65
|
+
* Project counters share the page's admitted project/state filter.
|
|
66
|
+
* Cursors bind the admitted scope, project and view, never broaden access. */
|
|
67
|
+
export declare function workIndexPage(store: Store, now: Date, access: WorkSummaryAccess, options?: WorkIndexOptions): WorkIndexPage;
|
|
68
|
+
export declare function workCountsByProject(store: Store, now: Date, access: WorkSummaryAccess): WorkProjectCounts[];
|