toolroll 0.9.93 → 0.9.95
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/CHANGELOG.md +79 -0
- package/dist/activity-line.d.ts +7 -4
- package/dist/activity-line.js +9 -7
- package/dist/agent-fence.d.ts +10 -0
- package/dist/agent-fence.js +6 -3
- package/dist/approval-authority.d.ts +7 -1
- package/dist/approval-authority.js +11 -2
- package/dist/approval-password.d.ts +31 -0
- package/dist/approval-password.js +26 -0
- package/dist/assignment-status.d.ts +1 -1
- package/dist/assignment-ui.js +3 -1
- package/dist/assignment.js +5 -0
- package/dist/attest.d.ts +3 -0
- package/dist/attest.js +10 -0
- package/dist/boot-identity.d.ts +2 -1
- package/dist/boot-identity.js +6 -4
- package/dist/bounded-spawn.d.ts +57 -0
- package/dist/bounded-spawn.js +220 -0
- package/dist/browser/terminal.js +42 -42
- package/dist/browser/workspace.css +1 -1
- package/dist/browser/workspace.js +32 -32
- package/dist/browser-crew.js +2 -0
- package/dist/browser-shell.d.ts +1 -1
- package/dist/browser-shell.js +2 -2
- package/dist/browser-workspace.d.ts +50 -2
- package/dist/browser-workspace.js +3 -3
- package/dist/build-review.js +2 -0
- package/dist/builder-restart.d.ts +21 -0
- package/dist/builder-restart.js +50 -0
- package/dist/builder.d.ts +11 -2
- package/dist/builder.js +234 -101
- package/dist/card-catalog.d.ts +209 -0
- package/dist/card-catalog.js +133 -0
- package/dist/card-cli.d.ts +43 -0
- package/dist/card-cli.js +44 -0
- package/dist/card-render.d.ts +26 -0
- package/dist/card-render.js +223 -0
- package/dist/card-sources.d.ts +68 -0
- package/dist/card-sources.js +234 -0
- package/dist/chat-acceptance.js +1 -1
- package/dist/chat-actions.d.ts +106 -9
- package/dist/chat-actions.js +473 -46
- package/dist/chat-approval.d.ts +13 -0
- package/dist/chat-approval.js +39 -9
- package/dist/chat-card-part.d.ts +11 -0
- package/dist/chat-card-part.js +18 -0
- package/dist/chat-card.d.ts +46 -0
- package/dist/chat-card.js +99 -0
- package/dist/chat-channel.d.ts +2 -0
- package/dist/chat-channel.js +37 -14
- package/dist/chat-controls.d.ts +4 -0
- package/dist/chat-controls.js +4 -0
- package/dist/chat-decide.d.ts +10 -16
- package/dist/chat-decide.js +79 -62
- package/dist/chat-delivery.js +13 -4
- package/dist/chat-flow.d.ts +0 -27
- package/dist/chat-flow.js +31 -2
- package/dist/chat-quiet.js +4 -4
- package/dist/chat-task-actions.d.ts +3 -2
- package/dist/chat-task-actions.js +19 -5
- package/dist/chat-terms.d.ts +14 -2
- package/dist/chat-terms.js +35 -0
- package/dist/chat-voice.d.ts +1 -1
- package/dist/chat-voice.js +2 -2
- package/dist/check-facts.d.ts +3 -1
- package/dist/check-facts.js +57 -11
- package/dist/check-failure.d.ts +24 -3
- package/dist/check-failure.js +89 -13
- package/dist/check-levels-ui.d.ts +4 -0
- package/dist/check-levels-ui.js +10 -1
- package/dist/check-load.d.ts +85 -0
- package/dist/check-load.js +147 -0
- package/dist/check-only-standing.d.ts +36 -0
- package/dist/check-only-standing.js +39 -0
- package/dist/check-only.d.ts +15 -0
- package/dist/check-only.js +99 -0
- package/dist/check-repair.d.ts +47 -0
- package/dist/check-repair.js +240 -0
- package/dist/check-report.d.ts +2 -0
- package/dist/check-report.js +1 -1
- package/dist/check-stamp.d.ts +46 -0
- package/dist/check-stamp.js +93 -0
- package/dist/checkout-cleanup.d.ts +36 -5
- package/dist/checkout-cleanup.js +166 -14
- package/dist/claim.d.ts +6 -0
- package/dist/claim.js +13 -2
- package/dist/cli-help.d.ts +4 -1
- package/dist/cli-help.js +49 -30
- package/dist/cli.js +15 -1
- package/dist/code-extract.d.ts +44 -0
- package/dist/code-extract.js +88 -0
- package/dist/code-map-acts.d.ts +24 -0
- package/dist/code-map-acts.js +53 -0
- package/dist/code-map-admission.d.ts +52 -0
- package/dist/code-map-admission.js +295 -0
- package/dist/code-map-build.d.ts +63 -0
- package/dist/code-map-build.js +415 -0
- package/dist/code-map-cli.d.ts +153 -0
- package/dist/code-map-cli.js +103 -0
- package/dist/code-map-main.d.ts +1 -0
- package/dist/code-map-main.js +48 -0
- package/dist/code-map-read.d.ts +106 -0
- package/dist/code-map-read.js +171 -0
- package/dist/code-map-report.d.ts +37 -0
- package/dist/code-map-report.js +95 -0
- package/dist/code-map-shape.d.ts +172 -0
- package/dist/code-map-shape.js +327 -0
- package/dist/code-map-store.d.ts +136 -0
- package/dist/code-map-store.js +233 -0
- package/dist/coding-provider.d.ts +3 -1
- package/dist/coding-provider.js +12 -7
- package/dist/coding-update.js +3 -2
- package/dist/coding-workspace.d.ts +1 -1
- package/dist/coding-workspace.js +8 -8
- package/dist/console-chrome.js +2 -2
- package/dist/containment.d.ts +5 -0
- package/dist/containment.js +14 -1
- package/dist/contracts/chat-actions.d.ts +92 -0
- package/dist/contracts/chat-actions.js +20 -0
- package/dist/contracts/chat-card.d.ts +91 -0
- package/dist/contracts/chat-card.js +54 -0
- package/dist/contracts/chat-content.d.ts +191 -0
- package/dist/contracts/chat-content.js +4 -0
- package/dist/contracts/cli.d.ts +52 -0
- package/dist/contracts/cli.js +4 -0
- package/dist/contracts/console-api.d.ts +12 -3
- package/dist/contracts/console-api.js +12 -3
- package/dist/contracts/flow-propose.d.ts +8 -1
- package/dist/contracts/flow-propose.js +3 -1
- package/dist/contracts/flow-send.d.ts +126 -0
- package/dist/contracts/flow-send.js +3 -0
- package/dist/contracts/gateway-tools.d.ts +17 -0
- package/dist/contracts/gateway-tools.js +3 -1
- package/dist/contracts/lead-tools.d.ts +234 -0
- package/dist/contracts/lead-tools.js +25 -1
- package/dist/contracts/project-knowledge.d.ts +38 -5
- package/dist/contracts/project-knowledge.js +11 -5
- package/dist/contracts/project-memory.d.ts +3 -1
- package/dist/contracts/project-memory.js +3 -2
- package/dist/contracts/storage.d.ts +14 -0
- package/dist/contracts/storage.js +3 -1
- package/dist/contracts/store-json.d.ts +18 -0
- package/dist/contracts/youiyoux-request.d.ts +1 -1
- package/dist/contracts/youiyoux-request.js +1 -1
- package/dist/desktop-access.js +6 -2
- package/dist/discord-chat.js +14 -0
- package/dist/dispatch.d.ts +1 -1
- package/dist/dispatch.js +25 -16
- package/dist/dispose.d.ts +19 -0
- package/dist/dispose.js +55 -9
- package/dist/easy-start.js +2 -3
- package/dist/eval-oracle.js +4 -1
- package/dist/evals.js +2 -1
- package/dist/evidence-pair.d.ts +53 -0
- package/dist/evidence-pair.js +128 -0
- package/dist/exhaustion.d.ts +17 -4
- package/dist/exhaustion.js +44 -4
- package/dist/export.js +1 -1
- package/dist/failing-first.d.ts +31 -0
- package/dist/failing-first.js +44 -0
- package/dist/fallback-schema.d.ts +8 -0
- package/dist/fallback-schema.js +40 -0
- package/dist/fallback.d.ts +138 -0
- package/dist/fallback.js +605 -0
- package/dist/fast-start.d.ts +136 -0
- package/dist/fast-start.js +431 -0
- package/dist/fast-terms.d.ts +9 -0
- package/dist/fast-terms.js +23 -0
- package/dist/fenced-check-coverage.d.ts +62 -0
- package/dist/fenced-check-coverage.js +54 -0
- package/dist/findings.d.ts +224 -0
- package/dist/findings.js +449 -0
- package/dist/first-run.js +1 -1
- package/dist/flaky-ci.d.ts +31 -0
- package/dist/flaky-ci.js +149 -0
- package/dist/flaky-cli.d.ts +60 -0
- package/dist/flaky-cli.js +60 -0
- package/dist/flaky.d.ts +75 -9
- package/dist/flaky.js +255 -0
- package/dist/fleet-schema.d.ts +17 -0
- package/dist/fleet-schema.js +135 -0
- package/dist/flow-browser.js +2 -2
- package/dist/flow-card-task.js +3 -0
- package/dist/flow-code.d.ts +2 -2
- package/dist/flow-code.js +9 -5
- package/dist/flow-result-card.d.ts +22 -0
- package/dist/flow-result-card.js +55 -0
- package/dist/flow-send.js +12 -9
- package/dist/flow-steps.js +1 -1
- package/dist/flow-triggers.d.ts +1 -1
- package/dist/flow-triggers.js +2 -2
- package/dist/flow-unattended.d.ts +26 -0
- package/dist/flow-unattended.js +12 -3
- package/dist/flows-ui.js +10 -2
- package/dist/follow-through-brief.d.ts +12 -0
- package/dist/follow-through-brief.js +31 -0
- package/dist/follow-through-cli.d.ts +23 -0
- package/dist/follow-through-cli.js +153 -0
- package/dist/git-incident.d.ts +16 -0
- package/dist/git-incident.js +69 -6
- package/dist/github-import.d.ts +62 -0
- package/dist/github-import.js +146 -0
- package/dist/guides.js +15 -10
- package/dist/handover-note.d.ts +33 -0
- package/dist/handover-note.js +106 -0
- package/dist/invoke.d.ts +25 -2
- package/dist/invoke.js +157 -58
- package/dist/job-object-helper.ps1 +10 -3
- package/dist/keymap.d.ts +41 -0
- package/dist/keymap.js +51 -0
- package/dist/knowledge-cli.js +1 -1
- package/dist/knowledge-ui.d.ts +21 -4
- package/dist/knowledge-ui.js +75 -7
- package/dist/laptop-background.d.ts +16 -0
- package/dist/laptop-background.js +108 -2
- package/dist/lead-cli.js +26 -24
- package/dist/lead-context.js +1 -1
- package/dist/lead-contract.d.ts +1 -1
- package/dist/lead-contract.js +3 -2
- package/dist/lead-doors.d.ts +4 -0
- package/dist/lead-doors.js +2 -2
- package/dist/lead-progress.js +5 -0
- package/dist/lead-status.d.ts +2 -0
- package/dist/lead-status.js +6 -2
- package/dist/lead-tools.js +162 -34
- package/dist/lead.js +2 -2
- package/dist/lesson-notes.d.ts +81 -0
- package/dist/lesson-notes.js +336 -0
- package/dist/limits-ui.js +1 -1
- package/dist/local-owner.d.ts +1 -1
- package/dist/local-owner.js +16 -0
- package/dist/machine-check.d.ts +16 -0
- package/dist/machine-check.js +26 -0
- package/dist/machine-identity.d.ts +75 -0
- package/dist/machine-identity.js +170 -0
- package/dist/mcp-core.js +11 -1
- package/dist/memory-cli.d.ts +300 -1
- package/dist/memory-cli.js +62 -9
- package/dist/memory-pass.d.ts +16 -0
- package/dist/memory-pass.js +67 -3
- package/dist/memory-tidy.d.ts +181 -0
- package/dist/memory-tidy.js +523 -0
- package/dist/memory-use.d.ts +35 -0
- package/dist/memory-use.js +109 -0
- package/dist/merge-checklist.d.ts +55 -0
- package/dist/merge-checklist.js +182 -0
- package/dist/modes.d.ts +6 -6
- package/dist/modes.js +3 -1
- package/dist/needs-you.d.ts +31 -9
- package/dist/needs-you.js +110 -41
- package/dist/nightly-github.d.ts +2 -0
- package/dist/nightly-github.js +4 -4
- package/dist/operate-remote-arguments.js +7 -1
- package/dist/operate-remote.js +3 -1
- package/dist/operate.d.ts +6 -1
- package/dist/operate.js +565 -64
- package/dist/phase-routing.js +2 -2
- package/dist/plain-schema.d.ts +23 -0
- package/dist/plain-schema.js +94 -0
- package/dist/plain-words.d.ts +20 -0
- package/dist/plain-words.js +66 -0
- package/dist/plan-login.d.ts +14 -0
- package/dist/plan-login.js +58 -0
- package/dist/planner.d.ts +1 -1
- package/dist/planner.js +4 -2
- package/dist/process-liveness.d.ts +2 -0
- package/dist/process-liveness.js +61 -17
- package/dist/project-delete-ui.d.ts +19 -2
- package/dist/project-delete-ui.js +29 -1
- package/dist/project-delete.js +14 -1
- package/dist/project-knowledge.d.ts +18 -11
- package/dist/project-knowledge.js +39 -9
- package/dist/project-learning.d.ts +2 -1
- package/dist/project-learning.js +15 -45
- package/dist/project-memory.d.ts +5 -0
- package/dist/project-memory.js +22 -2
- package/dist/project-tools.d.ts +4 -4
- package/dist/project-tools.js +23 -7
- package/dist/proof.js +30 -5
- package/dist/protected-storage-look.d.ts +1 -0
- package/dist/protected-storage-look.js +13 -0
- package/dist/protected-storage.d.ts +70 -39
- package/dist/protected-storage.js +196 -147
- package/dist/provider-auth.js +1 -1
- package/dist/provider-capture.d.ts +34 -0
- package/dist/provider-capture.js +53 -0
- package/dist/publish.js +9 -1
- package/dist/pull-request-flow.js +5 -0
- package/dist/push.d.ts +18 -2
- package/dist/push.js +40 -16
- package/dist/release-adapters.d.ts +9 -0
- package/dist/release-adapters.js +76 -0
- package/dist/release-auto.js +13 -13
- package/dist/release-card.d.ts +1 -2
- package/dist/release-card.js +11 -0
- package/dist/release-carry.d.ts +7 -2
- package/dist/release-carry.js +49 -10
- package/dist/release-cli.d.ts +4 -0
- package/dist/release-cli.js +29 -22
- package/dist/release-coverage.js +1 -1
- package/dist/release-next.d.ts +48 -0
- package/dist/release-next.js +161 -0
- package/dist/release.d.ts +20 -1
- package/dist/release.js +85 -9
- package/dist/remote-destination.d.ts +36 -0
- package/dist/remote-destination.js +217 -0
- package/dist/remote-main.d.ts +48 -0
- package/dist/remote-main.js +84 -5
- package/dist/repository-context.d.ts +3 -2
- package/dist/repository-context.js +112 -70
- package/dist/restart-certification.d.ts +1 -0
- package/dist/restart-certification.js +8 -6
- package/dist/result-acts.d.ts +27 -19
- package/dist/result-acts.js +36 -25
- package/dist/result-follow-ups.d.ts +2 -2
- package/dist/result-follow-ups.js +18 -4
- package/dist/result-review.d.ts +1 -1
- package/dist/route-change-check.d.ts +4 -0
- package/dist/route-change-check.js +13 -0
- package/dist/route-change.d.ts +22 -0
- package/dist/route-change.js +89 -0
- package/dist/route-hooks.js +3 -2
- package/dist/route-results.d.ts +6 -1
- package/dist/route-results.js +14 -5
- package/dist/run-closeout.d.ts +1 -1
- package/dist/run-closeout.js +7 -5
- package/dist/runner-process.js +3 -2
- package/dist/runner.js +2 -1
- package/dist/scope.d.ts +28 -4
- package/dist/scope.js +92 -28
- package/dist/scout.d.ts +1 -1
- package/dist/scout.js +2 -1
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +26 -18
- package/dist/server/chat.js +16 -14
- package/dist/server/chrome.d.ts +1 -1
- package/dist/server/chrome.js +26 -35
- package/dist/server/console.css +73 -0
- package/dist/server/guards.js +3 -0
- package/dist/server/home.d.ts +6 -0
- package/dist/server/home.js +21 -13
- package/dist/server/http.js +1 -1
- package/dist/server/kit.js +1 -1
- package/dist/server/merge-ready-view.d.ts +10 -0
- package/dist/server/merge-ready-view.js +30 -0
- package/dist/server/pages-assets.d.ts +1 -0
- package/dist/server/pages-assets.js +8 -5
- package/dist/server/pages.js +103 -82
- package/dist/server/render-chat.js +16 -3
- package/dist/server/render-code-map.d.ts +30 -0
- package/dist/server/render-code-map.js +137 -0
- package/dist/server/render-flaky.d.ts +20 -0
- package/dist/server/render-flaky.js +59 -0
- package/dist/server/render-follow-through.d.ts +11 -0
- package/dist/server/render-follow-through.js +68 -0
- package/dist/server/render-history.js +1 -1
- package/dist/server/render-new-task.d.ts +26 -1
- package/dist/server/render-new-task.js +30 -5
- package/dist/server/render-pages.d.ts +1 -175
- package/dist/server/render-pages.js +38 -313
- package/dist/server/render-projects.d.ts +2 -1
- package/dist/server/render-projects.js +9 -7
- package/dist/server/render-release.d.ts +2 -0
- package/dist/server/render-release.js +3 -3
- package/dist/server/render-results.d.ts +2 -0
- package/dist/server/render-results.js +68 -68
- package/dist/server/render-tasks.d.ts +16 -2
- package/dist/server/render-tasks.js +177 -141
- package/dist/server/retired-routes.d.ts +17 -0
- package/dist/server/retired-routes.js +53 -0
- package/dist/server/route-table.d.ts +3 -0
- package/dist/server/route-table.js +48 -12
- package/dist/server/settings.js +166 -34
- package/dist/server/task-views.js +66 -26
- package/dist/server/tasks.d.ts +2 -6
- package/dist/server/tasks.js +250 -321
- package/dist/server/welcome.js +1 -1
- package/dist/settings-groups-ui.d.ts +1 -0
- package/dist/settings-groups-ui.js +4 -2
- package/dist/settings-kit.js +3 -2
- package/dist/settings-proofs.js +3 -1
- package/dist/slack-chat.js +14 -1
- package/dist/steer-mailbox.d.ts +8 -1
- package/dist/steer-mailbox.js +164 -6
- package/dist/stop-proof.js +6 -4
- package/dist/storage-sweep-process.js +1 -1
- package/dist/storage-sweep.d.ts +5 -3
- package/dist/storage-sweep.js +30 -9
- package/dist/storage-ui.js +28 -17
- package/dist/storage.d.ts +27 -2
- package/dist/storage.js +39 -2
- package/dist/store.d.ts +89 -7
- package/dist/store.js +386 -114
- package/dist/surface.js +67 -6
- package/dist/sweep-quarantine.d.ts +1 -0
- package/dist/sweep-quarantine.js +6 -4
- package/dist/tamper-scan.d.ts +4 -0
- package/dist/tamper-scan.js +90 -0
- package/dist/task-aliases.d.ts +5 -0
- package/dist/task-aliases.js +9 -0
- package/dist/task-control.d.ts +2 -1
- package/dist/task-control.js +4 -1
- package/dist/task-outcome-cli.d.ts +2 -0
- package/dist/task-outcome-cli.js +17 -17
- package/dist/task-sizing.d.ts +5 -0
- package/dist/task-sizing.js +2 -0
- package/dist/task-source.d.ts +7 -0
- package/dist/task-source.js +14 -0
- package/dist/task-status.d.ts +9 -0
- package/dist/task-status.js +45 -49
- package/dist/teardown-git.d.ts +18 -0
- package/dist/teardown-git.js +105 -21
- package/dist/telegram-lead.js +23 -6
- package/dist/telegram-progress.js +5 -3
- package/dist/telegram-status.js +6 -4
- package/dist/telegram.js +12 -1
- package/dist/test-infra.d.ts +8 -0
- package/dist/test-infra.js +18 -0
- package/dist/tidy.js +1 -1
- package/dist/toolroll-update.js +19 -5
- package/dist/tui-contract.d.ts +24 -0
- package/dist/tui-source.js +67 -8
- package/dist/tui.js +51 -51
- package/dist/vanished-retry.d.ts +30 -0
- package/dist/vanished-retry.js +174 -0
- package/dist/work-index.d.ts +2 -0
- package/dist/work-index.js +95 -66
- package/dist/work-summary.d.ts +1 -1
- package/dist/work-summary.js +7 -2
- package/dist/workspace-ui.d.ts +7 -3
- package/dist/workspace-ui.js +38 -23
- package/dist/worktree.d.ts +12 -3
- package/dist/worktree.js +91 -14
- package/package.json +2 -1
- package/dist/server/render-next.d.ts +0 -63
- package/dist/server/render-next.js +0 -109
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Retired addresses (docs/plans/plain-toolroll.md P1.4): Home (`/`) and Tasks (`/tasks`) are the pages; every old page
|
|
2
|
+
* answers with a permanent redirect to its place there, for good, so a bookmark, an old push or an installed phone's old
|
|
3
|
+
* service worker still lands right. A redirect keeps only the query keys its target knows, and decides nothing: the
|
|
4
|
+
* target admits the person and filters what they may see, exactly as if they had opened it. */
|
|
5
|
+
import type { ServerResponse } from "node:http";
|
|
6
|
+
/** The Tasks page's own address for a view, a project and the other keys it knows. */
|
|
7
|
+
export declare function tasksHref(over?: {
|
|
8
|
+
view?: string | null;
|
|
9
|
+
project?: string | null;
|
|
10
|
+
scope?: "all" | null;
|
|
11
|
+
state?: string | null;
|
|
12
|
+
cursor?: string | null;
|
|
13
|
+
}): string;
|
|
14
|
+
/** Each retired GET row (route-table.ts `retired`), and where it now lives. */
|
|
15
|
+
export declare const RETIRED_ROUTES: Readonly<Record<string, (url: URL) => string>>;
|
|
16
|
+
/** A retired GET's answer: 301 to where it lives now. Permanent: the old address never comes back. */
|
|
17
|
+
export declare function retiredRedirect(id: string, url: URL, response: ServerResponse): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SAFETY } from "./http.js";
|
|
2
|
+
/** The Tasks page's own address for a view, a project and the other keys it knows. */
|
|
3
|
+
export function tasksHref(over = {}) {
|
|
4
|
+
const q = new URLSearchParams();
|
|
5
|
+
if (over.scope === "all")
|
|
6
|
+
q.set("scope", "all");
|
|
7
|
+
else if (over.project != null)
|
|
8
|
+
q.set("project", over.project);
|
|
9
|
+
if (over.view != null && over.view !== "all")
|
|
10
|
+
q.set("view", over.view);
|
|
11
|
+
if (over.state != null)
|
|
12
|
+
q.set("state", over.state);
|
|
13
|
+
if (over.cursor != null)
|
|
14
|
+
q.set("cursor", over.cursor);
|
|
15
|
+
return `/tasks${q.size === 0 ? "" : `?${q}`}`;
|
|
16
|
+
}
|
|
17
|
+
/** The one project a link names (one `project` key, never two), or null. */
|
|
18
|
+
const projectOf = (url) => url.searchParams.getAll("project").length === 1 ? url.searchParams.get("project") : null;
|
|
19
|
+
/** The Tasks list views an old link may name, as /tasks names them. */
|
|
20
|
+
const LIST_VIEWS = { all: "all", "needs-you": "needs-you", running: "running", queued: "queued", completed: "completed", done: "completed", archived: "archived", ready: "ready" };
|
|
21
|
+
/** Each retired GET row (route-table.ts `retired`), and where it now lives. */
|
|
22
|
+
export const RETIRED_ROUTES = {
|
|
23
|
+
// The old Tasks list: its view, project, stored-state filter and page; layout=board is the Board view; all=1 every project.
|
|
24
|
+
work: url => {
|
|
25
|
+
const board = url.searchParams.get("layout") === "board";
|
|
26
|
+
const view = board ? "board" : LIST_VIEWS[url.searchParams.get("view") ?? ""] ?? null;
|
|
27
|
+
const all = url.searchParams.get("all") === "1";
|
|
28
|
+
return tasksHref({ view, scope: all ? "all" : null, project: all ? null : projectOf(url), state: board ? null : url.searchParams.get("state"), cursor: board ? null : url.searchParams.get("cursor") });
|
|
29
|
+
},
|
|
30
|
+
// The old inbox and its triage flow: Home holds what needs you.
|
|
31
|
+
inbox: url => { const project = projectOf(url); return project === null ? "/" : `/?project=${encodeURIComponent(project)}`; },
|
|
32
|
+
next: url => { const project = projectOf(url); return project === null ? "/" : `/?project=${encodeURIComponent(project)}`; },
|
|
33
|
+
// The portfolio: Tasks across every project.
|
|
34
|
+
workbench: () => tasksHref({ scope: "all" }),
|
|
35
|
+
// The old board: the Board view, or its order view.
|
|
36
|
+
board: url => url.searchParams.get("view") === "order" ? tasksHref({ view: "order", project: projectOf(url) })
|
|
37
|
+
: url.searchParams.get("scope") === "all" ? tasksHref({ view: "board", scope: "all" }) : tasksHref({ view: "board", project: projectOf(url) }),
|
|
38
|
+
queue: url => tasksHref({ view: "order", project: projectOf(url) }),
|
|
39
|
+
done: url => tasksHref({ view: "done", project: projectOf(url) }),
|
|
40
|
+
// The old review list (a result keeps its own page: /review?result=…).
|
|
41
|
+
review: url => tasksHref({ view: "ready", project: projectOf(url) }),
|
|
42
|
+
// Archive old tasks' preview moved beside Tasks; its POST keeps /work/put-away exactly.
|
|
43
|
+
"work.put-away": url => { const days = url.searchParams.get("days"); return days !== null && /^[0-9]{1,3}$/.test(days) ? `/tasks/archive?days=${days}` : "/tasks/archive"; },
|
|
44
|
+
};
|
|
45
|
+
/** A retired GET's answer: 301 to where it lives now. Permanent: the old address never comes back. */
|
|
46
|
+
export function retiredRedirect(id, url, response) {
|
|
47
|
+
const to = RETIRED_ROUTES[id];
|
|
48
|
+
if (to === undefined)
|
|
49
|
+
throw new Error(`no retired route ${id}`);
|
|
50
|
+
response.setHeader("Location", to(url));
|
|
51
|
+
response.writeHead(301, { ...SAFETY });
|
|
52
|
+
response.end();
|
|
53
|
+
}
|
|
@@ -94,6 +94,9 @@ export interface RouteDeclaration {
|
|
|
94
94
|
*/
|
|
95
95
|
readonly local: "allow" | "deny";
|
|
96
96
|
readonly localAct: LocalOwnerAct | null;
|
|
97
|
+
/** A retired page (docs/plans/plain-toolroll.md P1.4): a permanent GET redirect to where it lives now
|
|
98
|
+
* (retired-routes.ts), admitted exactly as that target is, and no page handler of its own. */
|
|
99
|
+
readonly retired?: true;
|
|
97
100
|
}
|
|
98
101
|
/** Every edge row, decided: allow where a local owner's cookie may reach it, deny where its adapter refuses one (or no
|
|
99
102
|
* cookie is ever read there). A new edge row fails the table's load until it is listed here. */
|
|
@@ -45,6 +45,7 @@ function row(stage, domain, id, method, pattern, options = {}) {
|
|
|
45
45
|
...(options.roleRefusal === undefined ? {} : { roleRefusal: options.roleRefusal }),
|
|
46
46
|
...(options.bodyCap === undefined ? {} : { bodyCap: options.bodyCap }),
|
|
47
47
|
freshness: options.freshness ?? "never",
|
|
48
|
+
...(options.retired === true ? { retired: true } : {}),
|
|
48
49
|
...localMarkOf(stage, method, id),
|
|
49
50
|
});
|
|
50
51
|
}
|
|
@@ -54,6 +55,7 @@ function row(stage, domain, id, method, pattern, options = {}) {
|
|
|
54
55
|
/** The console POST rows a local owner may use, and the act each is. Everything else is refused. */
|
|
55
56
|
const LOCAL_POSTS = Object.freeze({
|
|
56
57
|
"tasks.add": "file-task",
|
|
58
|
+
"tasks.fast": "build-now",
|
|
57
59
|
"chat.file": "file-task",
|
|
58
60
|
"chat.send": "lead-send",
|
|
59
61
|
"chat.queued-remove": "lead-send",
|
|
@@ -66,6 +68,7 @@ const LOCAL_POSTS = Object.freeze({
|
|
|
66
68
|
"chat.proposal.dismiss": "lead-send",
|
|
67
69
|
"task.act.steer": "lead-send",
|
|
68
70
|
"task.act.approve": "approve-plan",
|
|
71
|
+
"task.act.keep-grown": "approve-plan",
|
|
69
72
|
"decision.answer": "answer-question",
|
|
70
73
|
"task.act.reply": "answer-question",
|
|
71
74
|
"task.act.stop": "stop-run",
|
|
@@ -91,11 +94,16 @@ const LOCAL_POSTS = Object.freeze({
|
|
|
91
94
|
"settings.lead-on": "choose-default-agent",
|
|
92
95
|
// Choosing which open project the pages show: a view filter, never authorization.
|
|
93
96
|
"projects.select": "read",
|
|
97
|
+
// On or off for one project: it moves no money, permission or approval (code-map-acts.ts re-checks this exact act).
|
|
98
|
+
"settings.code-map": "code-map-switch",
|
|
94
99
|
// Results routing: lowering only.
|
|
95
100
|
"settings.models-turn-off": "routing-turn-off",
|
|
96
101
|
"settings.models-not-now": "dismiss-suggestion",
|
|
97
102
|
"settings.models-suggest-off": "dismiss-suggestion",
|
|
98
103
|
"settings.models-stop": "trial-stop",
|
|
104
|
+
// Learning loops (D3): a person at the laptop decides lesson notes and clean-ups of project memory.
|
|
105
|
+
"settings.knowledge-note": "memory-review",
|
|
106
|
+
"settings.knowledge-tidy": "memory-review",
|
|
99
107
|
"agents.seen": "mark-seen",
|
|
100
108
|
"agents.watch": "watch-agent",
|
|
101
109
|
});
|
|
@@ -245,30 +253,43 @@ get("pages", "projects.page", "/projects", { limited: "unscoped", ...free });
|
|
|
245
253
|
// project this account can see and never switches the session's project; its Open project button posts to
|
|
246
254
|
// /projects/select. The handler resolves the name among the account's visible projects; anything else is not found.
|
|
247
255
|
get("pages", "projects.project", "^\\/projects\\/[^/]+$", { limited: "unscoped", ...free, sample: "/projects/payments-api" });
|
|
256
|
+
// One project's code map (docs/plans/code-map.md §6): reads only. The handler resolves the name among the account's
|
|
257
|
+
// visible projects, and looks areas and files up exactly in the stored version.
|
|
258
|
+
get("pages", "projects.map", "^\\/projects\\/[^/]+\\/map$", { limited: "unscoped", ...free, sample: "/projects/payments-api/map" });
|
|
259
|
+
// A project's flaky tests list (docs/plans/learning-loops.md): reads only, found as the project's page finds its project.
|
|
260
|
+
// Its one action, "Make a task to fix it", posts the ordinary /tasks/add form.
|
|
261
|
+
get("pages", "projects.flaky", "^\\/projects\\/[^/]+\\/flaky$", { limited: "unscoped", ...free, sample: "/projects/payments-api/flaky" });
|
|
248
262
|
get("pages", "home", "/", { limited: "collection", ...free });
|
|
249
263
|
get("pages", "search", "/search", { limited: "collection", ...free });
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
get("tasks", "work
|
|
254
|
-
|
|
255
|
-
|
|
264
|
+
// Retired pages (docs/plans/plain-toolroll.md P1.4): permanent redirects to Home and Tasks, admitted as their target is.
|
|
265
|
+
const RETIRED = { limited: "collection", ...free, retired: true };
|
|
266
|
+
get("tasks", "inbox", "/inbox", RETIRED);
|
|
267
|
+
get("tasks", "work", "/work", RETIRED);
|
|
268
|
+
// Archive old tasks (task-tidy.md): the preview reads only, at /tasks/archive; archiving is an approver's step-up in a
|
|
269
|
+
// browser session, and keeps its POST /work/put-away exactly.
|
|
270
|
+
get("tasks", "work.put-away", "/work/put-away", { ...RETIRED, callers: ["cookie"], ...approver("Only an approver can archive tasks.", "/tasks") });
|
|
271
|
+
get("tasks", "tasks.archive", "/tasks/archive", { limited: "collection", ...free, callers: ["cookie"], ...approver("Only an approver can archive tasks.", "/tasks") });
|
|
272
|
+
post("tasks", "work.put-away.apply", "/work/put-away", { scope: "step-up", limited: "collection", ...approver("Only an approver can archive tasks.", "/tasks") });
|
|
273
|
+
get("tasks", "next", "/next", RETIRED);
|
|
256
274
|
get("pages", "morning", "/morning", { limited: "collection", ...free }); // a redirect to / now
|
|
257
|
-
get("pages", "workbench", "/workbench",
|
|
258
|
-
get("tasks", "board", "/board",
|
|
259
|
-
|
|
275
|
+
get("pages", "workbench", "/workbench", RETIRED);
|
|
276
|
+
get("tasks", "board", "/board", RETIRED);
|
|
277
|
+
// A result keeps its own page here (/review?result=…); the bare list is retired to Tasks' Ready view.
|
|
278
|
+
get("tasks", "review", "/review", { limited: "collection", ...free });
|
|
279
|
+
// A push's task link (P1.4): /n/<the task's stored number>, resolved to its page under the viewer's own access.
|
|
280
|
+
get("tasks", "n.task", "^\\/n\\/[1-9][0-9]{0,14}$", { limited: "unscoped", ...free, project: "none", sample: "/n/1" });
|
|
260
281
|
get("settings", "spend", "/spend", { ...free, ...anyOperator("An instance operator sees spend.", "/") });
|
|
261
282
|
get("settings", "settings.spend", "/settings/spend", { ...free, ...anyOperator("An instance operator sets spending limits.", "/settings") });
|
|
262
283
|
get("pages", "ledger", "/ledger", { limited: "unscoped", ...free });
|
|
263
284
|
get("pages", "activity", "/activity", { limited: "collection", ...free }); // a redirect to / now (Home has the summary)
|
|
264
|
-
get("tasks", "done", "/done",
|
|
285
|
+
get("tasks", "done", "/done", RETIRED);
|
|
265
286
|
get("settings", "mode", "/mode");
|
|
266
287
|
get("people", "people.page", "/people", { limited: "unscoped", ...free });
|
|
267
288
|
get("pages", "system", "/system", free);
|
|
268
289
|
// Where every "Connect a builder" leads: read-only, open to a project-limited person (the handler shows only a visible project).
|
|
269
290
|
get("pages", "start-builder", "/start-builder", { limited: "unscoped", ...free });
|
|
270
|
-
get("tasks", "tasks", "/tasks", { limited: "collection", ...free });
|
|
271
|
-
get("tasks", "queue", "/queue");
|
|
291
|
+
get("tasks", "tasks", "/tasks", { limited: "collection", ...free });
|
|
292
|
+
get("tasks", "queue", "/queue", RETIRED);
|
|
272
293
|
get("pages", "peek", "/peek", free);
|
|
273
294
|
get("pages", "agents", "/agents", { limited: "unscoped", ...free });
|
|
274
295
|
// The Agents view's Live grid (docs/plans/agents-view.md §3): read-only, every request filtered to what the viewer may see.
|
|
@@ -440,6 +461,7 @@ post("settings", "spend.budget", "/spend/budget", { scope: "step-up", ...operato
|
|
|
440
461
|
post("settings", "settings.project-concurrency", "/settings/project/concurrency");
|
|
441
462
|
post("settings", "settings.project-live-view", "/settings/project/live-view", { scope: "step-up", callers: ["cookie"] });
|
|
442
463
|
post("settings", "settings.project-network", "/settings/project/network", { scope: "step-up", callers: ["cookie"] });
|
|
464
|
+
post("settings", "settings.project-fallback", "/settings/project/fallback", { scope: "step-up", callers: ["cookie"] });
|
|
443
465
|
post("settings", "settings.project-writes", "/settings/project/writes", { scope: "step-up", callers: ["cookie"] });
|
|
444
466
|
post("settings", "settings.project-check-access", "/settings/project/check-access", { scope: "step-up", callers: ["cookie"] });
|
|
445
467
|
post("settings", "settings.project-sandbox", "/settings/project/sandbox", { scope: "step-up", callers: ["cookie"] });
|
|
@@ -500,9 +522,13 @@ for (const one of ["accept", "keep", "suggest-on", "try"])
|
|
|
500
522
|
for (const one of ["turn-off", "not-now", "suggest-off", "stop"])
|
|
501
523
|
post("settings", `settings.models-${one}`, `/settings/models/${one}`, operator("An instance operator changes which models run.", "/settings/models"));
|
|
502
524
|
// Any other models action answers the models area's own refusal.
|
|
525
|
+
post("settings", "settings.code-map", "/settings/project/code-map", { project: "form", ...approver("An approver turns the code map on or off.", "/settings/project") });
|
|
526
|
+
post("settings", "settings.code-map-holdout", "/settings/project/code-map/holdout", { project: "form", ...approver("A person ends the holdout.", "/settings/project") });
|
|
503
527
|
post("settings", "settings.models-act", "^\\/settings\\/models\\/.*$", { sample: "/settings/models/unknown", ...MODELS });
|
|
504
528
|
post("settings", "settings.knowledge-refresh", "/settings/knowledge/refresh", { project: "form", limited: "unscoped", ...approver("Sign in as an approver to refresh project context.", "/settings/knowledge") });
|
|
505
529
|
post("settings", "settings.knowledge-proposal", "/settings/knowledge/proposal", { project: "form", ...approver("Sign in as an approver to decide memory proposals.", "/settings/knowledge") });
|
|
530
|
+
post("settings", "settings.knowledge-note", "/settings/knowledge/note", { project: "form", ...approver("Sign in as an approver to decide lesson notes.", "/settings/knowledge") });
|
|
531
|
+
post("settings", "settings.knowledge-tidy", "/settings/knowledge/tidy", { project: "form", ...approver("Sign in as an approver to clean up project memory.", "/settings/knowledge") });
|
|
506
532
|
post("settings", "settings.knowledge-decision", "/settings/knowledge/decision", { project: "form", ...approver("Sign in as an approver to change project decisions.", "/settings/knowledge") });
|
|
507
533
|
post("settings", "settings.knowledge-change", "/settings/knowledge/change", { project: "form", limited: "unscoped", ...approver("Sign in as an approver to change project knowledge.", "/settings/knowledge") });
|
|
508
534
|
post("settings", "settings.learning-change", "/settings/learning/change", { project: "form", limited: "unscoped" });
|
|
@@ -525,9 +551,12 @@ for (const one of ["messaging", "permission-default", "quality-default", "notifi
|
|
|
525
551
|
}
|
|
526
552
|
post("pages", "projects.github-list", "/projects/github", { callers: ["cookie"], ...anyApprover("your login can watch — adding projects is an approver's act") });
|
|
527
553
|
post("pages", "projects.select", "/projects/select", { project: "form-path", limited: "unscoped", viewer: true });
|
|
554
|
+
post("pages", "projects.map-refresh", "^\\/projects\\/[^/]+\\/map\\/refresh$", { project: "form", sample: "/projects/payments-api/map/refresh", ...approver("An approver asks for a check of main.", "/projects") });
|
|
528
555
|
post("pages", "projects.remove", "/projects/remove", { project: "form", ...operator("An instance operator removes projects.", "/settings/project") });
|
|
529
556
|
post("pages", "projects.open", "/projects/open", { project: "form-path" });
|
|
530
557
|
post("tasks", "tasks.add", "/tasks/add", { project: "form", limited: "collection", bodyCap: LARGE_FORM });
|
|
558
|
+
// Build (fast-start.ts): a person's own browser session only. No token, chat, agent or webhook reaches it.
|
|
559
|
+
post("tasks", "tasks.fast", "/tasks/fast", { callers: ["cookie"], project: "none", limited: "collection", ...approver("An approver starts builds.", "/tasks/new") });
|
|
531
560
|
post("tasks", "queue.move", "/queue/move");
|
|
532
561
|
post("tasks", "queue.note", "/queue/note");
|
|
533
562
|
post("pages", "fleet.register", "/fleet/runner/register", { scope: "step-up" });
|
|
@@ -541,6 +570,11 @@ post("people", "people.revoke", "/people/revoke", { scope: "step-up" });
|
|
|
541
570
|
post("pages", "fleet.retire", "/fleet/runner/retire", { scope: "step-up" });
|
|
542
571
|
// Answering a parked decision needs act access and irreversible-choice confirmation, not password step-up.
|
|
543
572
|
post("tasks", "decision.answer", `^\\/d\\/${ID}\\/answer$`, { project: "decision", limited: "resource", scope: "act", sample: "/d/1/answer" });
|
|
573
|
+
// A held automatic release goes on: a person, with their password typed now (release-auto.ts allowAutoPublish).
|
|
574
|
+
post("tasks", "task.release.go-on", `^\\/t\\/${TASK}\\/release\\/go-on$`, { project: "task", limited: "resource", scope: "step-up", sample: "/t/one/release/go-on", ...approver("An approver lets a release go on.", "/tasks") });
|
|
575
|
+
post("tasks", "task.act.keep-grown", `^\\/t\\/${TASK}\\/keep-grown$`, { project: "task", limited: "resource", sample: "/t/one/keep-grown", callers: ["cookie"], ...approver("An approver keeps a change.", "/tasks") });
|
|
576
|
+
// Findings, a failed check's repair, before-and-after evidence: a person's acts from a browser, none of them an approval.
|
|
577
|
+
post("tasks", "task.act.follow-through", `^\\/t\\/${TASK}\\/follow-through$`, { project: "task", limited: "resource", sample: "/t/one/follow-through", callers: ["cookie"], ...approver("An approver acts on a finding.", "/tasks") });
|
|
544
578
|
post("tasks", "task.act.hold", `^\\/t\\/${TASK}\\/hold$`, { project: "task", limited: "resource", sample: "/t/one/hold" });
|
|
545
579
|
post("tasks", "task.act.unhold", `^\\/t\\/${TASK}\\/unhold$`, { project: "task", limited: "resource", sample: "/t/one/unhold" });
|
|
546
580
|
post("tasks", "task.act.requeue", `^\\/t\\/${TASK}\\/requeue$`, { project: "task", limited: "resource", sample: "/t/one/requeue" });
|
|
@@ -648,6 +682,8 @@ export function assertRouteTable(routes = ROUTES) {
|
|
|
648
682
|
throw new Error(`route table: ${route.id} role and its refusal go together`);
|
|
649
683
|
if (route.role !== "any" && route.stage !== "console")
|
|
650
684
|
throw new Error(`route table: ${route.id} edge routes prove roles in their protocol`);
|
|
685
|
+
if (route.retired === true && (route.method !== "GET" || route.stage !== "console"))
|
|
686
|
+
throw new Error(`route table: ${route.id} a retired page is a console GET`);
|
|
651
687
|
const test = new RegExp(route.pattern);
|
|
652
688
|
if (!test.test(route.sample))
|
|
653
689
|
throw new Error(`route table: ${route.id} does not match its sample ${route.sample}`);
|