@jitsusama/agentic-harness.core 0.1.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/README.md +52 -0
- package/dist/advisor/charter.d.ts +14 -0
- package/dist/advisor/charter.js +48 -0
- package/dist/advisor/findings.d.ts +43 -0
- package/dist/advisor/findings.js +82 -0
- package/dist/advisor/index.d.ts +24 -0
- package/dist/advisor/index.js +23 -0
- package/dist/advisor/settings.d.ts +16 -0
- package/dist/advisor/settings.js +30 -0
- package/dist/advisor/substantive.d.ts +14 -0
- package/dist/advisor/substantive.js +33 -0
- package/dist/advisor/tools.d.ts +38 -0
- package/dist/advisor/tools.js +202 -0
- package/dist/attribution/commit-hook.d.ts +53 -0
- package/dist/attribution/commit-hook.js +133 -0
- package/dist/attribution/gh-footer.d.ts +27 -0
- package/dist/attribution/gh-footer.js +80 -0
- package/dist/attribution/index.d.ts +11 -0
- package/dist/attribution/index.js +11 -0
- package/dist/attribution/model-name.d.ts +11 -0
- package/dist/attribution/model-name.js +26 -0
- package/dist/bin/attribution.d.ts +36 -0
- package/dist/bin/attribution.js +82 -0
- package/dist/bin/cli.d.ts +14 -0
- package/dist/bin/cli.js +236 -0
- package/dist/bin/gate-deps.d.ts +23 -0
- package/dist/bin/gate-deps.js +61 -0
- package/dist/bin/guardians.d.ts +51 -0
- package/dist/bin/guardians.js +174 -0
- package/dist/bin/memory.d.ts +16 -0
- package/dist/bin/memory.js +81 -0
- package/dist/bin/notes.d.ts +30 -0
- package/dist/bin/notes.js +67 -0
- package/dist/bin/process-exec.d.ts +14 -0
- package/dist/bin/process-exec.js +31 -0
- package/dist/bin/quest.d.ts +38 -0
- package/dist/bin/quest.js +187 -0
- package/dist/bin/slack-auth.d.ts +49 -0
- package/dist/bin/slack-auth.js +107 -0
- package/dist/clock/index.d.ts +46 -0
- package/dist/clock/index.js +72 -0
- package/dist/command/cwd.d.ts +21 -0
- package/dist/command/cwd.js +60 -0
- package/dist/command/edit.d.ts +14 -0
- package/dist/command/edit.js +22 -0
- package/dist/command/flags.d.ts +29 -0
- package/dist/command/flags.js +111 -0
- package/dist/command/index.d.ts +16 -0
- package/dist/command/index.js +12 -0
- package/dist/command/tokenize.d.ts +7 -0
- package/dist/command/tokenize.js +315 -0
- package/dist/command/types.d.ts +66 -0
- package/dist/command/types.js +9 -0
- package/dist/completion/index.d.ts +17 -0
- package/dist/completion/index.js +16 -0
- package/dist/completion/investigate.d.ts +63 -0
- package/dist/completion/investigate.js +198 -0
- package/dist/completion/resolve.d.ts +29 -0
- package/dist/completion/resolve.js +42 -0
- package/dist/completion/side.d.ts +51 -0
- package/dist/completion/side.js +93 -0
- package/dist/completion/types.d.ts +84 -0
- package/dist/completion/types.js +14 -0
- package/dist/exec/exec.d.ts +38 -0
- package/dist/exec/exec.js +51 -0
- package/dist/exec/index.d.ts +8 -0
- package/dist/exec/index.js +8 -0
- package/dist/gate/decision.d.ts +52 -0
- package/dist/gate/decision.js +68 -0
- package/dist/gate/deps.d.ts +14 -0
- package/dist/gate/deps.js +1 -0
- package/dist/gate/index.d.ts +2 -0
- package/dist/gate/index.js +1 -0
- package/dist/git-cli/index.d.ts +47 -0
- package/dist/git-cli/index.js +127 -0
- package/dist/github-cli/command-spec.d.ts +14 -0
- package/dist/github-cli/command-spec.js +18 -0
- package/dist/github-cli/index.d.ts +71 -0
- package/dist/github-cli/index.js +188 -0
- package/dist/google/apis/calendar.d.ts +64 -0
- package/dist/google/apis/calendar.js +297 -0
- package/dist/google/apis/docs.d.ts +29 -0
- package/dist/google/apis/docs.js +154 -0
- package/dist/google/apis/drive.d.ts +46 -0
- package/dist/google/apis/drive.js +189 -0
- package/dist/google/apis/gmail.d.ts +67 -0
- package/dist/google/apis/gmail.js +374 -0
- package/dist/google/apis/index.d.ts +10 -0
- package/dist/google/apis/index.js +10 -0
- package/dist/google/apis/sheets.d.ts +16 -0
- package/dist/google/apis/sheets.js +54 -0
- package/dist/google/apis/slides.d.ts +16 -0
- package/dist/google/apis/slides.js +40 -0
- package/dist/google/auth/browser.d.ts +5 -0
- package/dist/google/auth/browser.js +27 -0
- package/dist/google/auth/credentials.d.ts +26 -0
- package/dist/google/auth/credentials.js +69 -0
- package/dist/google/auth/errors.d.ts +15 -0
- package/dist/google/auth/errors.js +26 -0
- package/dist/google/auth/index.d.ts +12 -0
- package/dist/google/auth/index.js +12 -0
- package/dist/google/auth/oauth-app.d.ts +15 -0
- package/dist/google/auth/oauth-app.js +20 -0
- package/dist/google/auth/oauth.d.ts +46 -0
- package/dist/google/auth/oauth.js +146 -0
- package/dist/google/auth/server.d.ts +13 -0
- package/dist/google/auth/server.js +70 -0
- package/dist/google/auth/setup-instructions.d.ts +16 -0
- package/dist/google/auth/setup-instructions.js +24 -0
- package/dist/google/auth/store.d.ts +19 -0
- package/dist/google/auth/store.js +27 -0
- package/dist/google/index.d.ts +13 -0
- package/dist/google/index.js +12 -0
- package/dist/google/paths.d.ts +17 -0
- package/dist/google/paths.js +28 -0
- package/dist/google/renderers/calendar.d.ts +23 -0
- package/dist/google/renderers/calendar.js +312 -0
- package/dist/google/renderers/drive.d.ts +31 -0
- package/dist/google/renderers/drive.js +214 -0
- package/dist/google/renderers/email.d.ts +16 -0
- package/dist/google/renderers/email.js +130 -0
- package/dist/google/renderers/index.d.ts +8 -0
- package/dist/google/renderers/index.js +8 -0
- package/dist/google/types.d.ts +143 -0
- package/dist/google/types.js +27 -0
- package/dist/governance/distill.d.ts +31 -0
- package/dist/governance/distill.js +78 -0
- package/dist/governance/index.d.ts +11 -0
- package/dist/governance/index.js +10 -0
- package/dist/governance/render.d.ts +13 -0
- package/dist/governance/render.js +23 -0
- package/dist/governance/store.d.ts +32 -0
- package/dist/governance/store.js +102 -0
- package/dist/governance/types.d.ts +19 -0
- package/dist/governance/types.js +9 -0
- package/dist/guardian/index.d.ts +7 -0
- package/dist/guardian/index.js +7 -0
- package/dist/guardian/types.d.ts +37 -0
- package/dist/guardian/types.js +12 -0
- package/dist/internal/github/cli.d.ts +40 -0
- package/dist/internal/github/cli.js +102 -0
- package/dist/internal/guardian/commit-file.d.ts +7 -0
- package/dist/internal/guardian/commit-file.js +36 -0
- package/dist/internal/guardian/commit-format.d.ts +35 -0
- package/dist/internal/guardian/commit-format.js +63 -0
- package/dist/internal/guardian/commit-shell.d.ts +38 -0
- package/dist/internal/guardian/commit-shell.js +134 -0
- package/dist/internal/guardian/history-gate.d.ts +41 -0
- package/dist/internal/guardian/history-gate.js +76 -0
- package/dist/internal/guardian/prose-gate.d.ts +31 -0
- package/dist/internal/guardian/prose-gate.js +50 -0
- package/dist/internal/guardian/redirect-gate.d.ts +41 -0
- package/dist/internal/guardian/redirect-gate.js +114 -0
- package/dist/internal/guardian/section-gate.d.ts +20 -0
- package/dist/internal/guardian/section-gate.js +36 -0
- package/dist/internal/guardian/title-gate.d.ts +20 -0
- package/dist/internal/guardian/title-gate.js +36 -0
- package/dist/internal/json-array.d.ts +11 -0
- package/dist/internal/json-array.js +40 -0
- package/dist/internal/lsp/registry.d.ts +12 -0
- package/dist/internal/lsp/registry.js +16 -0
- package/dist/internal/notes/discovery.d.ts +59 -0
- package/dist/internal/notes/discovery.js +91 -0
- package/dist/internal/notes/frontmatter.d.ts +52 -0
- package/dist/internal/notes/frontmatter.js +163 -0
- package/dist/internal/notes/id.d.ts +42 -0
- package/dist/internal/notes/id.js +80 -0
- package/dist/internal/notes/io.d.ts +25 -0
- package/dist/internal/notes/io.js +51 -0
- package/dist/internal/notes/sanitize.d.ts +19 -0
- package/dist/internal/notes/sanitize.js +35 -0
- package/dist/internal/process-global.d.ts +20 -0
- package/dist/internal/process-global.js +28 -0
- package/dist/internal/quest/alias-index.d.ts +61 -0
- package/dist/internal/quest/alias-index.js +69 -0
- package/dist/internal/quest/append-journey.d.ts +22 -0
- package/dist/internal/quest/append-journey.js +63 -0
- package/dist/internal/quest/bash-write.d.ts +49 -0
- package/dist/internal/quest/bash-write.js +208 -0
- package/dist/internal/quest/dates.d.ts +14 -0
- package/dist/internal/quest/dates.js +20 -0
- package/dist/internal/quest/discovery.d.ts +96 -0
- package/dist/internal/quest/discovery.js +354 -0
- package/dist/internal/quest/fields.d.ts +37 -0
- package/dist/internal/quest/fields.js +94 -0
- package/dist/internal/quest/frontmatter.d.ts +88 -0
- package/dist/internal/quest/frontmatter.js +630 -0
- package/dist/internal/quest/git-signals.d.ts +53 -0
- package/dist/internal/quest/git-signals.js +192 -0
- package/dist/internal/quest/id.d.ts +50 -0
- package/dist/internal/quest/id.js +116 -0
- package/dist/internal/quest/io.d.ts +54 -0
- package/dist/internal/quest/io.js +233 -0
- package/dist/internal/quest/mentions.d.ts +45 -0
- package/dist/internal/quest/mentions.js +70 -0
- package/dist/internal/quest/mutate.d.ts +38 -0
- package/dist/internal/quest/mutate.js +83 -0
- package/dist/internal/quest/process-liveness.d.ts +98 -0
- package/dist/internal/quest/process-liveness.js +216 -0
- package/dist/internal/quest/quest-doc.d.ts +116 -0
- package/dist/internal/quest/quest-doc.js +239 -0
- package/dist/internal/quest/ranking.d.ts +48 -0
- package/dist/internal/quest/ranking.js +114 -0
- package/dist/internal/quest/reopen.d.ts +65 -0
- package/dist/internal/quest/reopen.js +113 -0
- package/dist/internal/quest/resolve-cwd.d.ts +32 -0
- package/dist/internal/quest/resolve-cwd.js +89 -0
- package/dist/internal/quest/sanitize.d.ts +42 -0
- package/dist/internal/quest/sanitize.js +69 -0
- package/dist/internal/quest/scaffold.d.ts +59 -0
- package/dist/internal/quest/scaffold.js +169 -0
- package/dist/internal/quest/scratch.d.ts +27 -0
- package/dist/internal/quest/scratch.js +106 -0
- package/dist/internal/quest/session-liveness.d.ts +125 -0
- package/dist/internal/quest/session-liveness.js +386 -0
- package/dist/internal/quest/session-ownership.d.ts +22 -0
- package/dist/internal/quest/session-ownership.js +100 -0
- package/dist/internal/quest/session-registry.d.ts +221 -0
- package/dist/internal/quest/session-registry.js +266 -0
- package/dist/internal/quest/status.d.ts +10 -0
- package/dist/internal/quest/status.js +15 -0
- package/dist/internal/quest/structural-journal.d.ts +41 -0
- package/dist/internal/quest/structural-journal.js +67 -0
- package/dist/internal/quest/structural.d.ts +43 -0
- package/dist/internal/quest/structural.js +77 -0
- package/dist/internal/quest/toc.d.ts +28 -0
- package/dist/internal/quest/toc.js +90 -0
- package/dist/internal/quest/trees.d.ts +53 -0
- package/dist/internal/quest/trees.js +145 -0
- package/dist/internal/quest/url-fetchers.d.ts +50 -0
- package/dist/internal/quest/url-fetchers.js +97 -0
- package/dist/internal/quest/write-classifier.d.ts +46 -0
- package/dist/internal/quest/write-classifier.js +59 -0
- package/dist/internal/refs/builtins.d.ts +32 -0
- package/dist/internal/refs/builtins.js +179 -0
- package/dist/internal/refs/registry.d.ts +25 -0
- package/dist/internal/refs/registry.js +42 -0
- package/dist/internal/registry/global-symbol-registry.d.ts +37 -0
- package/dist/internal/registry/global-symbol-registry.js +55 -0
- package/dist/internal/review/registry.d.ts +12 -0
- package/dist/internal/review/registry.js +16 -0
- package/dist/internal/sqlite/db.d.ts +16 -0
- package/dist/internal/sqlite/db.js +26 -0
- package/dist/internal/terminal/builtins.d.ts +8 -0
- package/dist/internal/terminal/builtins.js +14 -0
- package/dist/internal/terminal/drivers/fallback.d.ts +8 -0
- package/dist/internal/terminal/drivers/fallback.js +31 -0
- package/dist/internal/terminal/drivers/shared.d.ts +39 -0
- package/dist/internal/terminal/drivers/shared.js +51 -0
- package/dist/internal/terminal/drivers/tmux.d.ts +14 -0
- package/dist/internal/terminal/drivers/tmux.js +88 -0
- package/dist/internal/terminal/drivers/wezterm.d.ts +35 -0
- package/dist/internal/terminal/drivers/wezterm.js +175 -0
- package/dist/internal/terminal/registry.d.ts +12 -0
- package/dist/internal/terminal/registry.js +16 -0
- package/dist/internal/tree/builtins.d.ts +8 -0
- package/dist/internal/tree/builtins.js +10 -0
- package/dist/internal/tree/providers/git-worktree.d.ts +20 -0
- package/dist/internal/tree/providers/git-worktree.js +279 -0
- package/dist/internal/tree/registry.d.ts +12 -0
- package/dist/internal/tree/registry.js +16 -0
- package/dist/lsp/config.d.ts +77 -0
- package/dist/lsp/config.js +154 -0
- package/dist/lsp/external.d.ts +13 -0
- package/dist/lsp/external.js +52 -0
- package/dist/lsp/format.d.ts +11 -0
- package/dist/lsp/format.js +54 -0
- package/dist/lsp/index.d.ts +17 -0
- package/dist/lsp/index.js +16 -0
- package/dist/lsp/offsets.d.ts +22 -0
- package/dist/lsp/offsets.js +51 -0
- package/dist/lsp/registry.d.ts +28 -0
- package/dist/lsp/registry.js +45 -0
- package/dist/lsp/standalone/backend.d.ts +42 -0
- package/dist/lsp/standalone/backend.js +150 -0
- package/dist/lsp/standalone/document.d.ts +45 -0
- package/dist/lsp/standalone/document.js +81 -0
- package/dist/lsp/standalone/server.d.ts +84 -0
- package/dist/lsp/standalone/server.js +521 -0
- package/dist/lsp/types.d.ts +119 -0
- package/dist/lsp/types.js +13 -0
- package/dist/memory/db.d.ts +15 -0
- package/dist/memory/db.js +25 -0
- package/dist/memory/index.d.ts +12 -0
- package/dist/memory/index.js +11 -0
- package/dist/memory/paths.d.ts +19 -0
- package/dist/memory/paths.js +33 -0
- package/dist/memory/scope.d.ts +14 -0
- package/dist/memory/scope.js +22 -0
- package/dist/memory/store.d.ts +12 -0
- package/dist/memory/store.js +146 -0
- package/dist/memory/types.d.ts +80 -0
- package/dist/memory/types.js +6 -0
- package/dist/notes/types.d.ts +50 -0
- package/dist/notes/types.js +23 -0
- package/dist/notes/verbs/create.d.ts +5 -0
- package/dist/notes/verbs/create.js +55 -0
- package/dist/notes/verbs/mutate.d.ts +8 -0
- package/dist/notes/verbs/mutate.js +152 -0
- package/dist/notes/verbs/queries.d.ts +15 -0
- package/dist/notes/verbs/queries.js +116 -0
- package/dist/notes/verbs/reindex.d.ts +12 -0
- package/dist/notes/verbs/reindex.js +35 -0
- package/dist/notes/verbs/shared.d.ts +37 -0
- package/dist/notes/verbs/shared.js +29 -0
- package/dist/observability/index.d.ts +13 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/recorder.d.ts +50 -0
- package/dist/observability/recorder.js +77 -0
- package/dist/observability/store.d.ts +22 -0
- package/dist/observability/store.js +213 -0
- package/dist/observability/types.d.ts +82 -0
- package/dist/observability/types.js +1 -0
- package/dist/process/index.d.ts +9 -0
- package/dist/process/index.js +9 -0
- package/dist/process/process.d.ts +95 -0
- package/dist/process/process.js +153 -0
- package/dist/prose/block.d.ts +9 -0
- package/dist/prose/block.js +43 -0
- package/dist/prose/detect.d.ts +50 -0
- package/dist/prose/detect.js +217 -0
- package/dist/prose/gate.d.ts +14 -0
- package/dist/prose/gate.js +21 -0
- package/dist/prose/index.d.ts +4 -0
- package/dist/prose/index.js +4 -0
- package/dist/prose/wrap.d.ts +9 -0
- package/dist/prose/wrap.js +47 -0
- package/dist/quest/actions.d.ts +20 -0
- package/dist/quest/actions.js +107 -0
- package/dist/quest/config.d.ts +79 -0
- package/dist/quest/config.js +83 -0
- package/dist/quest/index.d.ts +29 -0
- package/dist/quest/index.js +28 -0
- package/dist/quest/lifecycle.d.ts +365 -0
- package/dist/quest/lifecycle.js +900 -0
- package/dist/quest/lookup.d.ts +243 -0
- package/dist/quest/lookup.js +496 -0
- package/dist/quest/machine.d.ts +48 -0
- package/dist/quest/machine.js +96 -0
- package/dist/quest/render-rows.d.ts +166 -0
- package/dist/quest/render-rows.js +214 -0
- package/dist/quest/state.d.ts +111 -0
- package/dist/quest/state.js +46 -0
- package/dist/quest/types.d.ts +224 -0
- package/dist/quest/types.js +10 -0
- package/dist/quest/verbs/alias.d.ts +9 -0
- package/dist/quest/verbs/alias.js +129 -0
- package/dist/quest/verbs/lifecycle.d.ts +36 -0
- package/dist/quest/verbs/lifecycle.js +407 -0
- package/dist/quest/verbs/queries.d.ts +24 -0
- package/dist/quest/verbs/queries.js +241 -0
- package/dist/quest/verbs/reorder.d.ts +15 -0
- package/dist/quest/verbs/reorder.js +85 -0
- package/dist/quest/verbs/shared.d.ts +63 -0
- package/dist/quest/verbs/shared.js +35 -0
- package/dist/quest/verbs/stage.d.ts +39 -0
- package/dist/quest/verbs/stage.js +506 -0
- package/dist/quest/verbs/structural.d.ts +23 -0
- package/dist/quest/verbs/structural.js +310 -0
- package/dist/quest/verbs/tree-ops.d.ts +20 -0
- package/dist/quest/verbs/tree-ops.js +289 -0
- package/dist/refs/index.d.ts +13 -0
- package/dist/refs/index.js +12 -0
- package/dist/refs/lookup.d.ts +53 -0
- package/dist/refs/lookup.js +102 -0
- package/dist/refs/register.d.ts +34 -0
- package/dist/refs/register.js +44 -0
- package/dist/refs/types.d.ts +81 -0
- package/dist/refs/types.js +17 -0
- package/dist/remote/index.d.ts +9 -0
- package/dist/remote/index.js +9 -0
- package/dist/remote/name.d.ts +22 -0
- package/dist/remote/name.js +30 -0
- package/dist/result/cite.d.ts +84 -0
- package/dist/result/cite.js +127 -0
- package/dist/result/counts.d.ts +15 -0
- package/dist/result/counts.js +17 -0
- package/dist/result/details.d.ts +61 -0
- package/dist/result/details.js +121 -0
- package/dist/result/digest.d.ts +37 -0
- package/dist/result/digest.js +227 -0
- package/dist/result/follow.d.ts +29 -0
- package/dist/result/follow.js +37 -0
- package/dist/result/index.d.ts +26 -0
- package/dist/result/index.js +26 -0
- package/dist/result/listing.d.ts +62 -0
- package/dist/result/listing.js +72 -0
- package/dist/result/location.d.ts +67 -0
- package/dist/result/location.js +125 -0
- package/dist/result/query.d.ts +67 -0
- package/dist/result/query.js +144 -0
- package/dist/result/spill.d.ts +41 -0
- package/dist/result/spill.js +121 -0
- package/dist/result/store.d.ts +83 -0
- package/dist/result/store.js +214 -0
- package/dist/result/view.d.ts +31 -0
- package/dist/result/view.js +38 -0
- package/dist/review/anchor.d.ts +84 -0
- package/dist/review/anchor.js +89 -0
- package/dist/review/ask/agents.d.ts +80 -0
- package/dist/review/ask/agents.js +296 -0
- package/dist/review/ask/anchorable.d.ts +35 -0
- package/dist/review/ask/anchorable.js +76 -0
- package/dist/review/ask/answer.d.ts +54 -0
- package/dist/review/ask/answer.js +209 -0
- package/dist/review/ask/audit.d.ts +71 -0
- package/dist/review/ask/audit.js +158 -0
- package/dist/review/ask/collect.d.ts +41 -0
- package/dist/review/ask/collect.js +82 -0
- package/dist/review/ask/council.d.ts +290 -0
- package/dist/review/ask/council.js +386 -0
- package/dist/review/ask/critique.d.ts +69 -0
- package/dist/review/ask/critique.js +157 -0
- package/dist/review/ask/harvest.d.ts +119 -0
- package/dist/review/ask/harvest.js +409 -0
- package/dist/review/ask/identity.d.ts +93 -0
- package/dist/review/ask/identity.js +134 -0
- package/dist/review/ask/judge.d.ts +37 -0
- package/dist/review/ask/judge.js +140 -0
- package/dist/review/ask/persona.d.ts +84 -0
- package/dist/review/ask/persona.js +127 -0
- package/dist/review/ask/progress.d.ts +117 -0
- package/dist/review/ask/progress.js +137 -0
- package/dist/review/ask/prompt.d.ts +131 -0
- package/dist/review/ask/prompt.js +242 -0
- package/dist/review/ask/roster.d.ts +94 -0
- package/dist/review/ask/roster.js +338 -0
- package/dist/review/ask/run.d.ts +435 -0
- package/dist/review/ask/run.js +340 -0
- package/dist/review/ask/span.d.ts +70 -0
- package/dist/review/ask/span.js +166 -0
- package/dist/review/ask/stack-round.d.ts +66 -0
- package/dist/review/ask/stack-round.js +125 -0
- package/dist/review/ask/start.d.ts +48 -0
- package/dist/review/ask/start.js +118 -0
- package/dist/review/ask/store.d.ts +83 -0
- package/dist/review/ask/store.js +226 -0
- package/dist/review/ask/wire.d.ts +89 -0
- package/dist/review/ask/wire.js +204 -0
- package/dist/review/attach.d.ts +161 -0
- package/dist/review/attach.js +357 -0
- package/dist/review/authoring.d.ts +84 -0
- package/dist/review/authoring.js +203 -0
- package/dist/review/backed.d.ts +90 -0
- package/dist/review/backed.js +168 -0
- package/dist/review/bind.d.ts +75 -0
- package/dist/review/bind.js +223 -0
- package/dist/review/budget.d.ts +133 -0
- package/dist/review/budget.js +278 -0
- package/dist/review/capabilities.d.ts +217 -0
- package/dist/review/capabilities.js +46 -0
- package/dist/review/change.d.ts +155 -0
- package/dist/review/change.js +15 -0
- package/dist/review/checks.d.ts +56 -0
- package/dist/review/checks.js +11 -0
- package/dist/review/config.d.ts +71 -0
- package/dist/review/config.js +125 -0
- package/dist/review/conventions.d.ts +35 -0
- package/dist/review/conventions.js +58 -0
- package/dist/review/conversation.d.ts +98 -0
- package/dist/review/conversation.js +16 -0
- package/dist/review/decided.d.ts +58 -0
- package/dist/review/decided.js +67 -0
- package/dist/review/diff.d.ts +116 -0
- package/dist/review/diff.js +237 -0
- package/dist/review/draft/continuation.d.ts +23 -0
- package/dist/review/draft/continuation.js +32 -0
- package/dist/review/draft/fanout.d.ts +57 -0
- package/dist/review/draft/fanout.js +46 -0
- package/dist/review/draft/handle.d.ts +55 -0
- package/dist/review/draft/handle.js +110 -0
- package/dist/review/draft/plan.d.ts +112 -0
- package/dist/review/draft/plan.js +343 -0
- package/dist/review/draft/publish.d.ts +38 -0
- package/dist/review/draft/publish.js +118 -0
- package/dist/review/draft/render.d.ts +32 -0
- package/dist/review/draft/render.js +100 -0
- package/dist/review/draft/state.d.ts +98 -0
- package/dist/review/draft/state.js +83 -0
- package/dist/review/draft/store.d.ts +33 -0
- package/dist/review/draft/store.js +100 -0
- package/dist/review/elsewhere.d.ts +27 -0
- package/dist/review/elsewhere.js +39 -0
- package/dist/review/engine.d.ts +106 -0
- package/dist/review/engine.js +243 -0
- package/dist/review/events.d.ts +59 -0
- package/dist/review/events.js +35 -0
- package/dist/review/failed.d.ts +46 -0
- package/dist/review/failed.js +56 -0
- package/dist/review/finding.d.ts +81 -0
- package/dist/review/finding.js +85 -0
- package/dist/review/fix.d.ts +147 -0
- package/dist/review/fix.js +175 -0
- package/dist/review/followup.d.ts +84 -0
- package/dist/review/followup.js +123 -0
- package/dist/review/index.d.ts +134 -0
- package/dist/review/index.js +80 -0
- package/dist/review/keys.d.ts +23 -0
- package/dist/review/keys.js +40 -0
- package/dist/review/landing.d.ts +37 -0
- package/dist/review/landing.js +68 -0
- package/dist/review/lenses.d.ts +132 -0
- package/dist/review/lenses.js +430 -0
- package/dist/review/propose-from.d.ts +76 -0
- package/dist/review/propose-from.js +86 -0
- package/dist/review/provider.d.ts +306 -0
- package/dist/review/provider.js +16 -0
- package/dist/review/providers/git/index.d.ts +23 -0
- package/dist/review/providers/git/index.js +214 -0
- package/dist/review/providers/github/authoring.d.ts +22 -0
- package/dist/review/providers/github/authoring.js +350 -0
- package/dist/review/providers/github/claims.d.ts +49 -0
- package/dist/review/providers/github/claims.js +136 -0
- package/dist/review/providers/github/conversation.d.ts +18 -0
- package/dist/review/providers/github/conversation.js +455 -0
- package/dist/review/providers/github/fields.d.ts +30 -0
- package/dist/review/providers/github/fields.js +47 -0
- package/dist/review/providers/github/index.d.ts +15 -0
- package/dist/review/providers/github/index.js +110 -0
- package/dist/review/providers/github/proposals.d.ts +14 -0
- package/dist/review/providers/github/proposals.js +298 -0
- package/dist/review/providers/github/queue.d.ts +46 -0
- package/dist/review/providers/github/queue.js +122 -0
- package/dist/review/providers/github/stacking.d.ts +20 -0
- package/dist/review/providers/github/stacking.js +107 -0
- package/dist/review/queue.d.ts +43 -0
- package/dist/review/queue.js +56 -0
- package/dist/review/reactable.d.ts +93 -0
- package/dist/review/reactable.js +140 -0
- package/dist/review/register.d.ts +52 -0
- package/dist/review/register.js +53 -0
- package/dist/review/resolve.d.ts +58 -0
- package/dist/review/resolve.js +150 -0
- package/dist/review/retarget.d.ts +73 -0
- package/dist/review/retarget.js +82 -0
- package/dist/review/revisited.d.ts +77 -0
- package/dist/review/revisited.js +121 -0
- package/dist/review/stack.d.ts +110 -0
- package/dist/review/stack.js +52 -0
- package/dist/sections/block.d.ts +9 -0
- package/dist/sections/block.js +42 -0
- package/dist/sections/detect.d.ts +31 -0
- package/dist/sections/detect.js +67 -0
- package/dist/sections/gate.d.ts +21 -0
- package/dist/sections/gate.js +22 -0
- package/dist/sections/index.d.ts +5 -0
- package/dist/sections/index.js +5 -0
- package/dist/sections/sanctioned.d.ts +13 -0
- package/dist/sections/sanctioned.js +21 -0
- package/dist/shell/index.d.ts +8 -0
- package/dist/shell/index.js +8 -0
- package/dist/shell/parse.d.ts +125 -0
- package/dist/shell/parse.js +298 -0
- package/dist/slack/api/channels.d.ts +12 -0
- package/dist/slack/api/channels.js +28 -0
- package/dist/slack/api/client.d.ts +94 -0
- package/dist/slack/api/client.js +272 -0
- package/dist/slack/api/files.d.ts +95 -0
- package/dist/slack/api/files.js +223 -0
- package/dist/slack/api/index.d.ts +11 -0
- package/dist/slack/api/index.js +11 -0
- package/dist/slack/api/messages.d.ts +98 -0
- package/dist/slack/api/messages.js +292 -0
- package/dist/slack/api/reactions.d.ts +47 -0
- package/dist/slack/api/reactions.js +50 -0
- package/dist/slack/api/resolve-conversations.d.ts +43 -0
- package/dist/slack/api/resolve-conversations.js +130 -0
- package/dist/slack/api/resolve-messages.d.ts +29 -0
- package/dist/slack/api/resolve-messages.js +93 -0
- package/dist/slack/api/resolve-users.d.ts +27 -0
- package/dist/slack/api/resolve-users.js +73 -0
- package/dist/slack/api/search.d.ts +86 -0
- package/dist/slack/api/search.js +186 -0
- package/dist/slack/api/users.d.ts +12 -0
- package/dist/slack/api/users.js +33 -0
- package/dist/slack/auth/browser-extract.d.ts +33 -0
- package/dist/slack/auth/browser-extract.js +201 -0
- package/dist/slack/auth/browser.d.ts +5 -0
- package/dist/slack/auth/browser.js +25 -0
- package/dist/slack/auth/credentials.d.ts +14 -0
- package/dist/slack/auth/credentials.js +24 -0
- package/dist/slack/auth/errors.d.ts +9 -0
- package/dist/slack/auth/errors.js +19 -0
- package/dist/slack/auth/extract.d.ts +23 -0
- package/dist/slack/auth/extract.js +44 -0
- package/dist/slack/auth/index.d.ts +12 -0
- package/dist/slack/auth/index.js +11 -0
- package/dist/slack/auth/oauth-app.d.ts +11 -0
- package/dist/slack/auth/oauth-app.js +20 -0
- package/dist/slack/auth/oauth.d.ts +31 -0
- package/dist/slack/auth/oauth.js +82 -0
- package/dist/slack/auth/server.d.ts +14 -0
- package/dist/slack/auth/server.js +75 -0
- package/dist/slack/auth/store.d.ts +17 -0
- package/dist/slack/auth/store.js +27 -0
- package/dist/slack/block-message.d.ts +9 -0
- package/dist/slack/block-message.js +30 -0
- package/dist/slack/blocks.d.ts +94 -0
- package/dist/slack/blocks.js +765 -0
- package/dist/slack/content-gate.d.ts +12 -0
- package/dist/slack/content-gate.js +22 -0
- package/dist/slack/detect.d.ts +31 -0
- package/dist/slack/detect.js +125 -0
- package/dist/slack/index.d.ts +18 -0
- package/dist/slack/index.js +17 -0
- package/dist/slack/paths.d.ts +28 -0
- package/dist/slack/paths.js +46 -0
- package/dist/slack/renderers/channel.d.ts +6 -0
- package/dist/slack/renderers/channel.js +27 -0
- package/dist/slack/renderers/index.d.ts +9 -0
- package/dist/slack/renderers/index.js +9 -0
- package/dist/slack/renderers/message.d.ts +21 -0
- package/dist/slack/renderers/message.js +214 -0
- package/dist/slack/renderers/reactions.d.ts +8 -0
- package/dist/slack/renderers/reactions.js +43 -0
- package/dist/slack/renderers/search.d.ts +6 -0
- package/dist/slack/renderers/search.js +39 -0
- package/dist/slack/renderers/user.d.ts +6 -0
- package/dist/slack/renderers/user.js +32 -0
- package/dist/slack/resolvers/cache.d.ts +29 -0
- package/dist/slack/resolvers/cache.js +70 -0
- package/dist/slack/resolvers/conversation-cache.d.ts +42 -0
- package/dist/slack/resolvers/conversation-cache.js +128 -0
- package/dist/slack/resolvers/conversation.d.ts +44 -0
- package/dist/slack/resolvers/conversation.js +229 -0
- package/dist/slack/resolvers/index.d.ts +8 -0
- package/dist/slack/resolvers/index.js +8 -0
- package/dist/slack/resolvers/target.d.ts +19 -0
- package/dist/slack/resolvers/target.js +45 -0
- package/dist/slack/resolvers/url.d.ts +20 -0
- package/dist/slack/resolvers/url.js +22 -0
- package/dist/slack/resolvers/user.d.ts +54 -0
- package/dist/slack/resolvers/user.js +134 -0
- package/dist/slack/types.d.ts +180 -0
- package/dist/slack/types.js +13 -0
- package/dist/tdd/attest.d.ts +21 -0
- package/dist/tdd/attest.js +21 -0
- package/dist/tdd/discipline.d.ts +11 -0
- package/dist/tdd/discipline.js +28 -0
- package/dist/tdd/index.d.ts +14 -0
- package/dist/tdd/index.js +13 -0
- package/dist/tdd/machine.d.ts +48 -0
- package/dist/tdd/machine.js +139 -0
- package/dist/tdd/presentation.d.ts +34 -0
- package/dist/tdd/presentation.js +38 -0
- package/dist/tdd/queries.d.ts +10 -0
- package/dist/tdd/queries.js +22 -0
- package/dist/terminal/index.d.ts +12 -0
- package/dist/terminal/index.js +11 -0
- package/dist/terminal/register.d.ts +21 -0
- package/dist/terminal/register.js +31 -0
- package/dist/terminal/resolve.d.ts +63 -0
- package/dist/terminal/resolve.js +117 -0
- package/dist/terminal/types.d.ts +134 -0
- package/dist/terminal/types.js +19 -0
- package/dist/thinking/index.d.ts +20 -0
- package/dist/thinking/index.js +27 -0
- package/dist/title/block.d.ts +9 -0
- package/dist/title/block.js +32 -0
- package/dist/title/detect.d.ts +25 -0
- package/dist/title/detect.js +154 -0
- package/dist/title/gate.d.ts +19 -0
- package/dist/title/gate.js +21 -0
- package/dist/title/index.d.ts +3 -0
- package/dist/title/index.js +3 -0
- package/dist/tree/index.d.ts +18 -0
- package/dist/tree/index.js +17 -0
- package/dist/tree/register.d.ts +21 -0
- package/dist/tree/register.js +31 -0
- package/dist/tree/resolve.d.ts +20 -0
- package/dist/tree/resolve.js +31 -0
- package/dist/tree/types.d.ts +83 -0
- package/dist/tree/types.js +12 -0
- package/dist/ui/count.d.ts +29 -0
- package/dist/ui/count.js +35 -0
- package/dist/ui/path.d.ts +25 -0
- package/dist/ui/path.js +40 -0
- package/dist/verify/index.d.ts +17 -0
- package/dist/verify/index.js +14 -0
- package/dist/verify/project.d.ts +21 -0
- package/dist/verify/project.js +49 -0
- package/dist/verify/resolve.d.ts +26 -0
- package/dist/verify/resolve.js +27 -0
- package/dist/verify/run.d.ts +31 -0
- package/dist/verify/run.js +145 -0
- package/dist/web/a11y/announcements.d.ts +67 -0
- package/dist/web/a11y/announcements.js +116 -0
- package/dist/web/a11y/budget.d.ts +75 -0
- package/dist/web/a11y/budget.js +97 -0
- package/dist/web/a11y/focus.d.ts +37 -0
- package/dist/web/a11y/focus.js +106 -0
- package/dist/web/a11y/index.d.ts +19 -0
- package/dist/web/a11y/index.js +25 -0
- package/dist/web/a11y/naming.d.ts +23 -0
- package/dist/web/a11y/naming.js +55 -0
- package/dist/web/a11y/outline.d.ts +23 -0
- package/dist/web/a11y/outline.js +42 -0
- package/dist/web/a11y/reading.d.ts +12 -0
- package/dist/web/a11y/reading.js +101 -0
- package/dist/web/a11y/scope.d.ts +23 -0
- package/dist/web/a11y/scope.js +99 -0
- package/dist/web/a11y/states.d.ts +22 -0
- package/dist/web/a11y/states.js +53 -0
- package/dist/web/a11y/tree.d.ts +124 -0
- package/dist/web/a11y/tree.js +269 -0
- package/dist/web/a11y/walk.d.ts +225 -0
- package/dist/web/a11y/walk.js +568 -0
- package/dist/web/a11y/walkprobe.d.ts +44 -0
- package/dist/web/a11y/walkprobe.js +365 -0
- package/dist/web/audit/axe.d.ts +219 -0
- package/dist/web/audit/axe.js +322 -0
- package/dist/web/audit/behind.d.ts +63 -0
- package/dist/web/audit/behind.js +142 -0
- package/dist/web/audit/capture.d.ts +43 -0
- package/dist/web/audit/capture.js +185 -0
- package/dist/web/audit/colour.d.ts +85 -0
- package/dist/web/audit/colour.js +189 -0
- package/dist/web/audit/contrast.d.ts +74 -0
- package/dist/web/audit/contrast.js +104 -0
- package/dist/web/audit/health.d.ts +27 -0
- package/dist/web/audit/health.js +57 -0
- package/dist/web/audit/index.d.ts +22 -0
- package/dist/web/audit/index.js +22 -0
- package/dist/web/audit/pair.d.ts +55 -0
- package/dist/web/audit/pair.js +157 -0
- package/dist/web/audit/probe.d.ts +31 -0
- package/dist/web/audit/probe.js +189 -0
- package/dist/web/audit/report.d.ts +22 -0
- package/dist/web/audit/report.js +250 -0
- package/dist/web/audit/structure.d.ts +126 -0
- package/dist/web/audit/structure.js +595 -0
- package/dist/web/audit/sweep.d.ts +66 -0
- package/dist/web/audit/sweep.js +117 -0
- package/dist/web/audit/target.d.ts +89 -0
- package/dist/web/audit/target.js +168 -0
- package/dist/web/audit/verdict.d.ts +48 -0
- package/dist/web/audit/verdict.js +52 -0
- package/dist/web/audit/visual.d.ts +161 -0
- package/dist/web/audit/visual.js +297 -0
- package/dist/web/browser.d.ts +213 -0
- package/dist/web/browser.js +927 -0
- package/dist/web/compare/images.d.ts +45 -0
- package/dist/web/compare/images.js +101 -0
- package/dist/web/compare/index.d.ts +15 -0
- package/dist/web/compare/index.js +15 -0
- package/dist/web/compare/provenance.d.ts +48 -0
- package/dist/web/compare/provenance.js +86 -0
- package/dist/web/compare/regions.d.ts +78 -0
- package/dist/web/compare/regions.js +211 -0
- package/dist/web/cookies/extract.d.ts +26 -0
- package/dist/web/cookies/extract.js +167 -0
- package/dist/web/cookies/index.d.ts +8 -0
- package/dist/web/cookies/index.js +7 -0
- package/dist/web/cookies/inject.d.ts +13 -0
- package/dist/web/cookies/inject.js +27 -0
- package/dist/web/cookies/setup.d.ts +31 -0
- package/dist/web/cookies/setup.js +94 -0
- package/dist/web/design/index.d.ts +9 -0
- package/dist/web/design/index.js +9 -0
- package/dist/web/design/inventory.d.ts +126 -0
- package/dist/web/design/inventory.js +324 -0
- package/dist/web/design/probe.d.ts +24 -0
- package/dist/web/design/probe.js +88 -0
- package/dist/web/element/actionable.d.ts +34 -0
- package/dist/web/element/actionable.js +48 -0
- package/dist/web/element/animations.d.ts +48 -0
- package/dist/web/element/animations.js +74 -0
- package/dist/web/element/box.d.ts +53 -0
- package/dist/web/element/box.js +58 -0
- package/dist/web/element/hover.d.ts +75 -0
- package/dist/web/element/hover.js +172 -0
- package/dist/web/element/index.d.ts +17 -0
- package/dist/web/element/index.js +17 -0
- package/dist/web/element/listeners.d.ts +72 -0
- package/dist/web/element/listeners.js +98 -0
- package/dist/web/element/measure.d.ts +40 -0
- package/dist/web/element/measure.js +118 -0
- package/dist/web/element/probes.d.ts +108 -0
- package/dist/web/element/probes.js +195 -0
- package/dist/web/element/pseudo.d.ts +51 -0
- package/dist/web/element/pseudo.js +96 -0
- package/dist/web/element/view.d.ts +30 -0
- package/dist/web/element/view.js +117 -0
- package/dist/web/element/visibility.d.ts +42 -0
- package/dist/web/element/visibility.js +67 -0
- package/dist/web/envelope/artifacts.d.ts +23 -0
- package/dist/web/envelope/artifacts.js +45 -0
- package/dist/web/envelope/index.d.ts +9 -0
- package/dist/web/envelope/index.js +9 -0
- package/dist/web/envelope/naming.d.ts +23 -0
- package/dist/web/envelope/naming.js +43 -0
- package/dist/web/envelope/paged.d.ts +42 -0
- package/dist/web/envelope/paged.js +99 -0
- package/dist/web/envelope/sink.d.ts +43 -0
- package/dist/web/envelope/sink.js +67 -0
- package/dist/web/environment/devices.d.ts +65 -0
- package/dist/web/environment/devices.js +82 -0
- package/dist/web/environment/emulation.d.ts +124 -0
- package/dist/web/environment/emulation.js +258 -0
- package/dist/web/environment/index.d.ts +15 -0
- package/dist/web/environment/index.js +15 -0
- package/dist/web/environment/probes.d.ts +18 -0
- package/dist/web/environment/probes.js +40 -0
- package/dist/web/environment/shaping.d.ts +90 -0
- package/dist/web/environment/shaping.js +141 -0
- package/dist/web/environment/status.d.ts +51 -0
- package/dist/web/environment/status.js +109 -0
- package/dist/web/environment/storage.d.ts +55 -0
- package/dist/web/environment/storage.js +142 -0
- package/dist/web/environment/tabs.d.ts +32 -0
- package/dist/web/environment/tabs.js +47 -0
- package/dist/web/environment/view.d.ts +10 -0
- package/dist/web/environment/view.js +42 -0
- package/dist/web/evaluate/index.d.ts +6 -0
- package/dist/web/evaluate/index.js +6 -0
- package/dist/web/evaluate/outcome.d.ts +74 -0
- package/dist/web/evaluate/outcome.js +91 -0
- package/dist/web/evaluate/probe.d.ts +31 -0
- package/dist/web/evaluate/probe.js +303 -0
- package/dist/web/index.d.ts +47 -0
- package/dist/web/index.js +47 -0
- package/dist/web/input/index.d.ts +11 -0
- package/dist/web/input/index.js +11 -0
- package/dist/web/input/keys.d.ts +48 -0
- package/dist/web/input/keys.js +189 -0
- package/dist/web/input/pointer.d.ts +56 -0
- package/dist/web/input/pointer.js +77 -0
- package/dist/web/input/touch.d.ts +61 -0
- package/dist/web/input/touch.js +83 -0
- package/dist/web/mermaid.d.ts +69 -0
- package/dist/web/mermaid.js +223 -0
- package/dist/web/paths.d.ts +16 -0
- package/dist/web/paths.js +27 -0
- package/dist/web/perf/heap.d.ts +42 -0
- package/dist/web/perf/heap.js +73 -0
- package/dist/web/perf/index.d.ts +14 -0
- package/dist/web/perf/index.js +14 -0
- package/dist/web/perf/layers.d.ts +98 -0
- package/dist/web/perf/layers.js +165 -0
- package/dist/web/perf/probe.d.ts +26 -0
- package/dist/web/perf/probe.js +123 -0
- package/dist/web/perf/profile.d.ts +53 -0
- package/dist/web/perf/profile.js +97 -0
- package/dist/web/perf/trace.d.ts +152 -0
- package/dist/web/perf/trace.js +429 -0
- package/dist/web/perf/view.d.ts +6 -0
- package/dist/web/perf/view.js +86 -0
- package/dist/web/perf/vitals.d.ts +141 -0
- package/dist/web/perf/vitals.js +175 -0
- package/dist/web/reader.d.ts +131 -0
- package/dist/web/reader.js +340 -0
- package/dist/web/screenshot.d.ts +50 -0
- package/dist/web/screenshot.js +108 -0
- package/dist/web/search.d.ts +49 -0
- package/dist/web/search.js +137 -0
- package/dist/web/session/artifacts.d.ts +32 -0
- package/dist/web/session/artifacts.js +47 -0
- package/dist/web/session/emulation.d.ts +118 -0
- package/dist/web/session/emulation.js +307 -0
- package/dist/web/session/recording.d.ts +51 -0
- package/dist/web/session/recording.js +64 -0
- package/dist/web/session/settling.d.ts +42 -0
- package/dist/web/session/settling.js +104 -0
- package/dist/web/session/shaping.d.ts +48 -0
- package/dist/web/session/shaping.js +113 -0
- package/dist/web/session/sourcemaps.d.ts +64 -0
- package/dist/web/session/sourcemaps.js +135 -0
- package/dist/web/session/telemetry.d.ts +219 -0
- package/dist/web/session/telemetry.js +486 -0
- package/dist/web/session/wires.d.ts +22 -0
- package/dist/web/session/wires.js +11 -0
- package/dist/web/session.d.ts +1153 -0
- package/dist/web/session.js +3400 -0
- package/dist/web/snapshot/deep.d.ts +36 -0
- package/dist/web/snapshot/deep.js +91 -0
- package/dist/web/snapshot/flatten.d.ts +101 -0
- package/dist/web/snapshot/flatten.js +131 -0
- package/dist/web/snapshot/index.d.ts +8 -0
- package/dist/web/snapshot/index.js +10 -0
- package/dist/web/snapshot/presented.d.ts +32 -0
- package/dist/web/snapshot/presented.js +74 -0
- package/dist/web/snapshot/query.d.ts +67 -0
- package/dist/web/snapshot/query.js +136 -0
- package/dist/web/sourcemap/index.d.ts +9 -0
- package/dist/web/sourcemap/index.js +9 -0
- package/dist/web/sourcemap/mappings.d.ts +111 -0
- package/dist/web/sourcemap/mappings.js +218 -0
- package/dist/web/styles/capture.d.ts +49 -0
- package/dist/web/styles/capture.js +85 -0
- package/dist/web/styles/cascade.d.ts +107 -0
- package/dist/web/styles/cascade.js +275 -0
- package/dist/web/styles/curation.d.ts +45 -0
- package/dist/web/styles/curation.js +282 -0
- package/dist/web/styles/index.d.ts +10 -0
- package/dist/web/styles/index.js +10 -0
- package/dist/web/target/index.d.ts +7 -0
- package/dist/web/target/index.js +7 -0
- package/dist/web/target/refusals.d.ts +59 -0
- package/dist/web/target/refusals.js +305 -0
- package/dist/web/target/target.d.ts +59 -0
- package/dist/web/target/target.js +94 -0
- package/dist/web/telemetry/buffer.d.ts +35 -0
- package/dist/web/telemetry/buffer.js +72 -0
- package/dist/web/telemetry/console.d.ts +127 -0
- package/dist/web/telemetry/console.js +217 -0
- package/dist/web/telemetry/dialogs.d.ts +41 -0
- package/dist/web/telemetry/dialogs.js +38 -0
- package/dist/web/telemetry/downloads.d.ts +42 -0
- package/dist/web/telemetry/downloads.js +65 -0
- package/dist/web/telemetry/failure.d.ts +31 -0
- package/dist/web/telemetry/failure.js +72 -0
- package/dist/web/telemetry/har.d.ts +97 -0
- package/dist/web/telemetry/har.js +227 -0
- package/dist/web/telemetry/index.d.ts +18 -0
- package/dist/web/telemetry/index.js +18 -0
- package/dist/web/telemetry/lifecycle.d.ts +69 -0
- package/dist/web/telemetry/lifecycle.js +120 -0
- package/dist/web/telemetry/network.d.ts +152 -0
- package/dist/web/telemetry/network.js +130 -0
- package/dist/web/telemetry/requests.d.ts +31 -0
- package/dist/web/telemetry/requests.js +119 -0
- package/dist/web/telemetry/sockets.d.ts +56 -0
- package/dist/web/telemetry/sockets.js +101 -0
- package/dist/web/telemetry/view.d.ts +16 -0
- package/dist/web/telemetry/view.js +125 -0
- package/dist/web/wait/conditions.d.ts +87 -0
- package/dist/web/wait/conditions.js +100 -0
- package/dist/web/wait/index.d.ts +6 -0
- package/dist/web/wait/index.js +6 -0
- package/dist/web/wait/settle.d.ts +54 -0
- package/dist/web/wait/settle.js +84 -0
- package/dist/work/ask.d.ts +45 -0
- package/dist/work/ask.js +85 -0
- package/dist/work/author.d.ts +61 -0
- package/dist/work/author.js +144 -0
- package/dist/work/broker.d.ts +151 -0
- package/dist/work/broker.js +165 -0
- package/dist/work/events.d.ts +98 -0
- package/dist/work/events.js +57 -0
- package/dist/work/history.d.ts +69 -0
- package/dist/work/history.js +174 -0
- package/dist/work/index.d.ts +49 -0
- package/dist/work/index.js +33 -0
- package/dist/work/inplay.d.ts +43 -0
- package/dist/work/inplay.js +42 -0
- package/dist/work/memory.d.ts +84 -0
- package/dist/work/memory.js +203 -0
- package/dist/work/objection.d.ts +92 -0
- package/dist/work/objection.js +72 -0
- package/dist/work/provider.d.ts +79 -0
- package/dist/work/provider.js +45 -0
- package/dist/work/providers/git.d.ts +29 -0
- package/dist/work/providers/git.js +87 -0
- package/dist/work/publish.d.ts +53 -0
- package/dist/work/publish.js +139 -0
- package/dist/work/rebase.d.ts +78 -0
- package/dist/work/rebase.js +261 -0
- package/dist/work/reclaim.d.ts +56 -0
- package/dist/work/reclaim.js +52 -0
- package/dist/work/register.d.ts +29 -0
- package/dist/work/register.js +41 -0
- package/dist/work/stack.d.ts +126 -0
- package/dist/work/stack.js +243 -0
- package/dist/work/stacks.d.ts +156 -0
- package/dist/work/stacks.js +524 -0
- package/dist/work/survey.d.ts +52 -0
- package/dist/work/survey.js +58 -0
- package/dist/work/tidy.d.ts +147 -0
- package/dist/work/tidy.js +136 -0
- package/dist/work/tree.d.ts +120 -0
- package/dist/work/tree.js +69 -0
- package/dist/work/unattended.d.ts +40 -0
- package/dist/work/unattended.js +57 -0
- package/package.json +145 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What bounds one reviewer's run, and which bound does which job.
|
|
3
|
+
*
|
|
4
|
+
* Two clocks answering two different questions, which is the whole
|
|
5
|
+
* point of the file. Is this reviewer wedged, which is liveness, and
|
|
6
|
+
* has it run long enough, which is a budget. One clock cannot answer
|
|
7
|
+
* both, and using the wall clock to answer the first is what killed
|
|
8
|
+
* working reviewers in six consecutive rounds.
|
|
9
|
+
*
|
|
10
|
+
* Separate from reading a reviewer's outcome because this is the half
|
|
11
|
+
* that consults config, and because a new knob here has nothing to do
|
|
12
|
+
* with a new terminal state there.
|
|
13
|
+
*/
|
|
14
|
+
import type { AskLimit, AskStop, Participant } from "./index.js";
|
|
15
|
+
/**
|
|
16
|
+
* How long a reviewer may run before something stops it regardless.
|
|
17
|
+
*
|
|
18
|
+
* A backstop, not a budget. It exists for a reviewer that nothing else
|
|
19
|
+
* will stop, and it is deliberately no tighter than the runner's own
|
|
20
|
+
* default, because the review path knows nothing the runner does not
|
|
21
|
+
* about how long honest work takes. The previous value was fifteen
|
|
22
|
+
* minutes, chosen against a two-and-a-half-minute observation and
|
|
23
|
+
* living in the panel module, and it killed working reviewers in six
|
|
24
|
+
* consecutive rounds.
|
|
25
|
+
*
|
|
26
|
+
* Held equal to the pi adapter's subagent runner default
|
|
27
|
+
* (`DEFAULT_RUN_PI_TIMEOUT_MS`), which is host-coupled and stays in
|
|
28
|
+
* the adapter; this module has no subagent runner of its own to defer
|
|
29
|
+
* to, so the number is inlined rather than imported.
|
|
30
|
+
*/
|
|
31
|
+
export declare const REVIEWER_BACKSTOP_MS: number;
|
|
32
|
+
/**
|
|
33
|
+
* How long a reviewer may say nothing at all before it is wedged.
|
|
34
|
+
*
|
|
35
|
+
* This is the guard that actually earns its keep, and the reason a
|
|
36
|
+
* generous backstop is safe. It fires on silence rather than on
|
|
37
|
+
* effort, so it cannot punish a reviewer for having a lot to read.
|
|
38
|
+
*
|
|
39
|
+
* Held at the supervisor's own default rather than tightened: a
|
|
40
|
+
* reviewer thinking hard against a large diff goes quiet for minutes,
|
|
41
|
+
* and shortening this would recreate the bug in a different clock.
|
|
42
|
+
*/
|
|
43
|
+
export declare const REVIEWER_IDLE_MS: number;
|
|
44
|
+
/**
|
|
45
|
+
* How much of the backstop is kept back for the answer.
|
|
46
|
+
*
|
|
47
|
+
* The third clock, and the only one that is not a limit. The other
|
|
48
|
+
* two decide when a reviewer has to stop; this one decides when it is
|
|
49
|
+
* asked to finish, which is a different question and a kinder one.
|
|
50
|
+
*
|
|
51
|
+
* Five minutes out of forty-five, because a wrap-up is a reviewer
|
|
52
|
+
* writing down what it already knows rather than doing any more work.
|
|
53
|
+
* Larger would buy nothing and would take real investigation time to
|
|
54
|
+
* pay for it.
|
|
55
|
+
*
|
|
56
|
+
* Held equal to the pi adapter's subagent wrap-up default
|
|
57
|
+
* (`WRAP_UP_TIMEOUT_MS`), inlined for the same reason as the backstop
|
|
58
|
+
* above.
|
|
59
|
+
*/
|
|
60
|
+
export declare const REVIEWER_ANSWER_MS: number;
|
|
61
|
+
/** What bounds one reviewer's run. */
|
|
62
|
+
export interface ReviewerBudget {
|
|
63
|
+
timeoutMs: number;
|
|
64
|
+
idleTimeoutMs: number;
|
|
65
|
+
/** Kept back out of `timeoutMs` so the answer can be asked for. */
|
|
66
|
+
wrapUpReserveMs: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The clocks a limit can be measured against.
|
|
70
|
+
*
|
|
71
|
+
* Narrower than the whole budget on purpose. Judging a retry needs
|
|
72
|
+
* the two numbers a limit can run out of and nothing else, and asking
|
|
73
|
+
* for the full budget would make every caller invent a reserve it has
|
|
74
|
+
* no opinion about just to ask the question.
|
|
75
|
+
*/
|
|
76
|
+
export type ReviewerClocks = Pick<ReviewerBudget, "timeoutMs" | "idleTimeoutMs"> & Partial<Pick<ReviewerBudget, "wrapUpReserveMs">>;
|
|
77
|
+
/**
|
|
78
|
+
* The clock a limit ran out of, where it is a clock at all.
|
|
79
|
+
*
|
|
80
|
+
* Shared with whatever records a stop, so the two cannot disagree
|
|
81
|
+
* about which number belongs to which limit. They were written twice
|
|
82
|
+
* and nothing joined them up.
|
|
83
|
+
*/
|
|
84
|
+
export declare function budgetForLimit(limit: AskLimit, budget: ReviewerClocks): number | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Why asking this participant again would end the same way.
|
|
87
|
+
*
|
|
88
|
+
* A reviewer stopped by a clock will be stopped by that clock again if
|
|
89
|
+
* nothing about it has moved, and the evidence is not ambiguous: every
|
|
90
|
+
* failed retry in the round that prompted this work ran for 15.03
|
|
91
|
+
* minutes and died identically. Three of them, at full price, to learn
|
|
92
|
+
* what the first one had already said.
|
|
93
|
+
*
|
|
94
|
+
* So the refusal carries the number and the key that holds it. A
|
|
95
|
+
* refusal that only says no leaves somebody hunting for the knob, and
|
|
96
|
+
* the likeliest outcome of that is running the same retry again.
|
|
97
|
+
*
|
|
98
|
+
* Silent where it cannot know: an old round recorded no budget, and
|
|
99
|
+
* refusing on a number nobody has would block every retry of every
|
|
100
|
+
* round recorded before this existed.
|
|
101
|
+
*/
|
|
102
|
+
export declare function retryWouldRepeat(stopped: AskStop | undefined, budget: ReviewerClocks, keptBy?: string): string | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* What bounds this one participant, given what bounds the round.
|
|
105
|
+
*
|
|
106
|
+
* One number for a whole fan-out has to be sized for its slowest
|
|
107
|
+
* member, so a roster mixing a small fast model with a large one at
|
|
108
|
+
* high thinking either holds slots the fast reviewers do not need or
|
|
109
|
+
* cuts the slow one off mid-thought. That is the shape of the incident
|
|
110
|
+
* this whole workstream came out of: the rounds that ran past fifteen
|
|
111
|
+
* minutes lost two, three, six and seven reviewers, and the eight
|
|
112
|
+
* minute rounds beside them lost none.
|
|
113
|
+
*
|
|
114
|
+
* Each clock on its own, because the three answer three different
|
|
115
|
+
* questions and a participant with a lot to read needs the wall moved
|
|
116
|
+
* and not the liveness guard.
|
|
117
|
+
*/
|
|
118
|
+
export declare function boundsFor(participant: Participant, round: ReviewerBudget): ReviewerBudget;
|
|
119
|
+
/**
|
|
120
|
+
* What bounds a round, taking any override from config.
|
|
121
|
+
*
|
|
122
|
+
* The fix for a bad constant is not a better constant. Both numbers
|
|
123
|
+
* are guesses about somebody else's hardware, model and diff, so they
|
|
124
|
+
* are overridable without patching source; a value that could not be
|
|
125
|
+
* used is ignored rather than honoured, because a typo that produced a
|
|
126
|
+
* zero budget would stop every reviewer the instant it started.
|
|
127
|
+
*
|
|
128
|
+
* This one is ignored rather than refused because it is read on the
|
|
129
|
+
* way into a round that is about to run, where the alternative to a
|
|
130
|
+
* default is no council at all. A participant's own clocks are read at
|
|
131
|
+
* config time with nothing yet spent, so those are refused instead.
|
|
132
|
+
*/
|
|
133
|
+
export declare function reviewerBudget(section: unknown): ReviewerBudget;
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What bounds one reviewer's run, and which bound does which job.
|
|
3
|
+
*
|
|
4
|
+
* Two clocks answering two different questions, which is the whole
|
|
5
|
+
* point of the file. Is this reviewer wedged, which is liveness, and
|
|
6
|
+
* has it run long enough, which is a budget. One clock cannot answer
|
|
7
|
+
* both, and using the wall clock to answer the first is what killed
|
|
8
|
+
* working reviewers in six consecutive rounds.
|
|
9
|
+
*
|
|
10
|
+
* Separate from reading a reviewer's outcome because this is the half
|
|
11
|
+
* that consults config, and because a new knob here has nothing to do
|
|
12
|
+
* with a new terminal state there.
|
|
13
|
+
*/
|
|
14
|
+
import { CLOCK_FLOOR_MS } from "../clock/index.js";
|
|
15
|
+
/**
|
|
16
|
+
* How long a reviewer may run before something stops it regardless.
|
|
17
|
+
*
|
|
18
|
+
* A backstop, not a budget. It exists for a reviewer that nothing else
|
|
19
|
+
* will stop, and it is deliberately no tighter than the runner's own
|
|
20
|
+
* default, because the review path knows nothing the runner does not
|
|
21
|
+
* about how long honest work takes. The previous value was fifteen
|
|
22
|
+
* minutes, chosen against a two-and-a-half-minute observation and
|
|
23
|
+
* living in the panel module, and it killed working reviewers in six
|
|
24
|
+
* consecutive rounds.
|
|
25
|
+
*
|
|
26
|
+
* Held equal to the pi adapter's subagent runner default
|
|
27
|
+
* (`DEFAULT_RUN_PI_TIMEOUT_MS`), which is host-coupled and stays in
|
|
28
|
+
* the adapter; this module has no subagent runner of its own to defer
|
|
29
|
+
* to, so the number is inlined rather than imported.
|
|
30
|
+
*/
|
|
31
|
+
export const REVIEWER_BACKSTOP_MS = 45 * 60 * 1000;
|
|
32
|
+
/**
|
|
33
|
+
* How long a reviewer may say nothing at all before it is wedged.
|
|
34
|
+
*
|
|
35
|
+
* This is the guard that actually earns its keep, and the reason a
|
|
36
|
+
* generous backstop is safe. It fires on silence rather than on
|
|
37
|
+
* effort, so it cannot punish a reviewer for having a lot to read.
|
|
38
|
+
*
|
|
39
|
+
* Held at the supervisor's own default rather than tightened: a
|
|
40
|
+
* reviewer thinking hard against a large diff goes quiet for minutes,
|
|
41
|
+
* and shortening this would recreate the bug in a different clock.
|
|
42
|
+
*/
|
|
43
|
+
export const REVIEWER_IDLE_MS = 15 * 60 * 1000;
|
|
44
|
+
/**
|
|
45
|
+
* How much of the backstop is kept back for the answer.
|
|
46
|
+
*
|
|
47
|
+
* The third clock, and the only one that is not a limit. The other
|
|
48
|
+
* two decide when a reviewer has to stop; this one decides when it is
|
|
49
|
+
* asked to finish, which is a different question and a kinder one.
|
|
50
|
+
*
|
|
51
|
+
* Five minutes out of forty-five, because a wrap-up is a reviewer
|
|
52
|
+
* writing down what it already knows rather than doing any more work.
|
|
53
|
+
* Larger would buy nothing and would take real investigation time to
|
|
54
|
+
* pay for it.
|
|
55
|
+
*
|
|
56
|
+
* Held equal to the pi adapter's subagent wrap-up default
|
|
57
|
+
* (`WRAP_UP_TIMEOUT_MS`), inlined for the same reason as the backstop
|
|
58
|
+
* above.
|
|
59
|
+
*/
|
|
60
|
+
export const REVIEWER_ANSWER_MS = 5 * 60 * 1000;
|
|
61
|
+
/**
|
|
62
|
+
* Which budget a limit is measured against, when it is one at all.
|
|
63
|
+
*
|
|
64
|
+
* Cancelled and parent-exit end a reviewer without any clock running
|
|
65
|
+
* out, so there is no number to compare and asking again is the right
|
|
66
|
+
* thing to do.
|
|
67
|
+
*/
|
|
68
|
+
const MEASURED_BY = {
|
|
69
|
+
"wall-clock": { of: "timeoutMs", named: "backstopMs" },
|
|
70
|
+
idle: { of: "idleTimeoutMs", named: "idleMs" },
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Where the soft deadline actually landed.
|
|
74
|
+
*
|
|
75
|
+
* Not in the table above, because it is the one limit that is not a
|
|
76
|
+
* clock somebody set: it is the difference between two of them. Read
|
|
77
|
+
* off `timeoutMs` alone it reported the backstop, so a reviewer
|
|
78
|
+
* stopped at forty minutes was recorded as having hit forty-five, and
|
|
79
|
+
* the refusal that quotes the number told the reader to raise a
|
|
80
|
+
* budget the reviewer never reached.
|
|
81
|
+
*
|
|
82
|
+
* Two knobs move it, so the refusal names both.
|
|
83
|
+
*/
|
|
84
|
+
const SOFT = { named: "answerMs or backstopMs" };
|
|
85
|
+
/** The moment a soft deadline falls, given the clocks around it. */
|
|
86
|
+
function softDeadlineAt(budget) {
|
|
87
|
+
const reserve = budget.wrapUpReserveMs;
|
|
88
|
+
if (reserve === undefined || reserve <= 0)
|
|
89
|
+
return undefined;
|
|
90
|
+
const at = budget.timeoutMs - reserve;
|
|
91
|
+
return at > 0 ? at : undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The clock a limit ran out of, where it is a clock at all.
|
|
95
|
+
*
|
|
96
|
+
* Shared with whatever records a stop, so the two cannot disagree
|
|
97
|
+
* about which number belongs to which limit. They were written twice
|
|
98
|
+
* and nothing joined them up.
|
|
99
|
+
*/
|
|
100
|
+
export function budgetForLimit(limit, budget) {
|
|
101
|
+
if (limit === "soft-deadline")
|
|
102
|
+
return softDeadlineAt(budget);
|
|
103
|
+
const measure = MEASURED_BY[limit];
|
|
104
|
+
return measure === undefined ? undefined : budget[measure.of];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Limits that will land in the same place if nothing changes.
|
|
108
|
+
*
|
|
109
|
+
* A wall clock is arithmetic: a reviewer that ran to the wall runs to
|
|
110
|
+
* it again, and the incident's failed retries all took 15.03 minutes
|
|
111
|
+
* to prove it. An idle clock is not. It fires when a reviewer went
|
|
112
|
+
* quiet, which is a hang, a slow tool, a provider stalling: things
|
|
113
|
+
* that may simply not happen twice. Refusing that retry blocks the
|
|
114
|
+
* one most likely to work, so it is allowed even though the number
|
|
115
|
+
* has not moved.
|
|
116
|
+
*/
|
|
117
|
+
const REPEATS = new Set([
|
|
118
|
+
"wall-clock",
|
|
119
|
+
// Arithmetic for the same reason a wall clock is, and derived
|
|
120
|
+
// from it: a reviewer asked to wrap up at forty minutes will be
|
|
121
|
+
// asked again at forty minutes. Left out, a round of seven soft
|
|
122
|
+
// deadlines would offer seven retries that all end identically,
|
|
123
|
+
// which is the bill this work exists to stop paying.
|
|
124
|
+
"soft-deadline",
|
|
125
|
+
]);
|
|
126
|
+
/**
|
|
127
|
+
* Why asking this participant again would end the same way.
|
|
128
|
+
*
|
|
129
|
+
* A reviewer stopped by a clock will be stopped by that clock again if
|
|
130
|
+
* nothing about it has moved, and the evidence is not ambiguous: every
|
|
131
|
+
* failed retry in the round that prompted this work ran for 15.03
|
|
132
|
+
* minutes and died identically. Three of them, at full price, to learn
|
|
133
|
+
* what the first one had already said.
|
|
134
|
+
*
|
|
135
|
+
* So the refusal carries the number and the key that holds it. A
|
|
136
|
+
* refusal that only says no leaves somebody hunting for the knob, and
|
|
137
|
+
* the likeliest outcome of that is running the same retry again.
|
|
138
|
+
*
|
|
139
|
+
* Silent where it cannot know: an old round recorded no budget, and
|
|
140
|
+
* refusing on a number nobody has would block every retry of every
|
|
141
|
+
* round recorded before this existed.
|
|
142
|
+
*/
|
|
143
|
+
export function retryWouldRepeat(stopped, budget,
|
|
144
|
+
// Whose clock this is, when it is not the round's. The refusal
|
|
145
|
+
// exists to name the knob that would let the retry through, and a
|
|
146
|
+
// participant keeping its own is precisely the reviewer whose limit
|
|
147
|
+
// the round's knob does not move: told to raise `review.ask.
|
|
148
|
+
// backstopMs`, somebody would raise it, retry, and be refused by the
|
|
149
|
+
// same number for the same reason.
|
|
150
|
+
keptBy) {
|
|
151
|
+
if (stopped?.budgetMs === undefined)
|
|
152
|
+
return undefined;
|
|
153
|
+
if (!REPEATS.has(stopped.limit))
|
|
154
|
+
return undefined;
|
|
155
|
+
const measure = stopped.limit === "soft-deadline" ? SOFT : MEASURED_BY[stopped.limit];
|
|
156
|
+
if (measure === undefined)
|
|
157
|
+
return undefined;
|
|
158
|
+
const now = budgetForLimit(stopped.limit, budget);
|
|
159
|
+
// A soft deadline that has since been switched off has no moment
|
|
160
|
+
// to compare against, and that is a change: the reviewer will now
|
|
161
|
+
// run to the wall instead, so the retry is a different question.
|
|
162
|
+
if (now === undefined || now > stopped.budgetMs)
|
|
163
|
+
return undefined;
|
|
164
|
+
return (`This reviewer was not failing, it was stopped: it hit the ${stopped.limit} ` +
|
|
165
|
+
`limit of ${stopped.budgetMs}ms and the limit is still ${now}ms, so asking ` +
|
|
166
|
+
`again buys the same wall at the same price. Raise ${knob(measure.named, keptBy)} ` +
|
|
167
|
+
"past what it needed and ask again, or take what it did send: a stopped " +
|
|
168
|
+
"reviewer's answer is kept, and the findings it finished are already read.");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Where the number that stopped this reviewer is written.
|
|
172
|
+
*
|
|
173
|
+
* A participant keeping its own is the reviewer whose limit the
|
|
174
|
+
* round's knob does not move, so naming the round's would send
|
|
175
|
+
* somebody to raise a number, retry, and meet the same wall.
|
|
176
|
+
*/
|
|
177
|
+
function knob(named, keptBy) {
|
|
178
|
+
if (keptBy === undefined)
|
|
179
|
+
return `review.ask.${named}`;
|
|
180
|
+
return `${named} on "${keptBy}" in review.ask.reviewers, which is where this one's clocks are kept, or pass it in who for one round`;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* What bounds this one participant, given what bounds the round.
|
|
184
|
+
*
|
|
185
|
+
* One number for a whole fan-out has to be sized for its slowest
|
|
186
|
+
* member, so a roster mixing a small fast model with a large one at
|
|
187
|
+
* high thinking either holds slots the fast reviewers do not need or
|
|
188
|
+
* cuts the slow one off mid-thought. That is the shape of the incident
|
|
189
|
+
* this whole workstream came out of: the rounds that ran past fifteen
|
|
190
|
+
* minutes lost two, three, six and seven reviewers, and the eight
|
|
191
|
+
* minute rounds beside them lost none.
|
|
192
|
+
*
|
|
193
|
+
* Each clock on its own, because the three answer three different
|
|
194
|
+
* questions and a participant with a lot to read needs the wall moved
|
|
195
|
+
* and not the liveness guard.
|
|
196
|
+
*/
|
|
197
|
+
export function boundsFor(participant, round) {
|
|
198
|
+
const timeoutMs = participant.backstopMs ?? round.timeoutMs;
|
|
199
|
+
return {
|
|
200
|
+
timeoutMs,
|
|
201
|
+
// Never past the wall it now sits inside. Each clock is taken on
|
|
202
|
+
// its own, and that is the right reading of what somebody wrote,
|
|
203
|
+
// but the three are not independent: an idle guard that outlives
|
|
204
|
+
// its wall is a pair the runner refuses outright, so a reviewer
|
|
205
|
+
// given a shorter wall than the round's would not have started at
|
|
206
|
+
// all. Held down rather than refused, because the wall firing
|
|
207
|
+
// first is exactly what asking for a shorter wall means.
|
|
208
|
+
idleTimeoutMs: Math.min(participant.idleMs ?? round.idleTimeoutMs, timeoutMs),
|
|
209
|
+
// Zero is honoured here for the same reason it is honoured in the
|
|
210
|
+
// round's own config: it is the documented way to say do not
|
|
211
|
+
// interrupt me early. Read as a typo, a participant asking not to
|
|
212
|
+
// be interrupted would fall back to the round's reserve and be
|
|
213
|
+
// interrupted anyway, which is the one outcome nobody wrote it
|
|
214
|
+
// for.
|
|
215
|
+
wrapUpReserveMs: reserveInside(participant.answerMs ?? round.wrapUpReserveMs, timeoutMs),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* A wrap-up reserve that leaves a reviewer something to wrap up.
|
|
220
|
+
*
|
|
221
|
+
* The reserve is carved out of the wall rather than added to it, so a
|
|
222
|
+
* reserve as large as the wall asks a reviewer for its findings before
|
|
223
|
+
* it has read anything. That could not happen while both numbers came
|
|
224
|
+
* from one config section; it can now, because a participant may
|
|
225
|
+
* shorten its wall and inherit the round's reserve, and five minutes
|
|
226
|
+
* out of forty-five is four minutes out of six.
|
|
227
|
+
*
|
|
228
|
+
* Held to half rather than refused, since the participant asked about
|
|
229
|
+
* the wall and has no opinion about the reserve it inherited. Below
|
|
230
|
+
* the floor it goes to zero, which is a reviewer that runs to the wall
|
|
231
|
+
* and is asked afterwards: the behaviour from before the reserve
|
|
232
|
+
* existed, and the honest answer for a wall too short to divide.
|
|
233
|
+
*/
|
|
234
|
+
function reserveInside(reserve, timeoutMs) {
|
|
235
|
+
if (reserve === 0)
|
|
236
|
+
return 0;
|
|
237
|
+
const held = Math.min(reserve, Math.floor(timeoutMs / 2));
|
|
238
|
+
return held < CLOCK_FLOOR_MS ? 0 : held;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* What bounds a round, taking any override from config.
|
|
242
|
+
*
|
|
243
|
+
* The fix for a bad constant is not a better constant. Both numbers
|
|
244
|
+
* are guesses about somebody else's hardware, model and diff, so they
|
|
245
|
+
* are overridable without patching source; a value that could not be
|
|
246
|
+
* used is ignored rather than honoured, because a typo that produced a
|
|
247
|
+
* zero budget would stop every reviewer the instant it started.
|
|
248
|
+
*
|
|
249
|
+
* This one is ignored rather than refused because it is read on the
|
|
250
|
+
* way into a round that is about to run, where the alternative to a
|
|
251
|
+
* default is no council at all. A participant's own clocks are read at
|
|
252
|
+
* config time with nothing yet spent, so those are refused instead.
|
|
253
|
+
*/
|
|
254
|
+
export function reviewerBudget(section) {
|
|
255
|
+
const held = isRecord(section) ? section : {};
|
|
256
|
+
return {
|
|
257
|
+
timeoutMs: positiveNumber(held.backstopMs) ?? REVIEWER_BACKSTOP_MS,
|
|
258
|
+
idleTimeoutMs: positiveNumber(held.idleMs) ?? REVIEWER_IDLE_MS,
|
|
259
|
+
// Zero is honoured rather than rejected, because it is the
|
|
260
|
+
// documented way to turn the soft deadline off. Every other
|
|
261
|
+
// clock here treats zero as a typo, and for them it is: a zero
|
|
262
|
+
// backstop stops every reviewer the instant it starts. A zero
|
|
263
|
+
// reserve just means do not ask early.
|
|
264
|
+
wrapUpReserveMs: held.answerMs === 0
|
|
265
|
+
? 0
|
|
266
|
+
: (positiveNumber(held.answerMs) ?? REVIEWER_ANSWER_MS),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/** A duration that could actually be used, or nothing. */
|
|
270
|
+
function positiveNumber(value) {
|
|
271
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
272
|
+
? value
|
|
273
|
+
: undefined;
|
|
274
|
+
}
|
|
275
|
+
/** Whether config handed us something with fields to read. */
|
|
276
|
+
function isRecord(value) {
|
|
277
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
278
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a provider can actually do.
|
|
3
|
+
*
|
|
4
|
+
* Facets say which broad abilities a provider has; these say
|
|
5
|
+
* how far each one goes. The distinction earns its keep at
|
|
6
|
+
* the point of publishing: two providers both post reviews,
|
|
7
|
+
* but one caps a batch at a hundred comments, one cannot
|
|
8
|
+
* thread a reply onto a top-level message, and one has no
|
|
9
|
+
* way to unresolve. A consumer that cannot ask about those
|
|
10
|
+
* differences has to discover them from a rejected request,
|
|
11
|
+
* which is the worst moment to find out.
|
|
12
|
+
*
|
|
13
|
+
* Declaring capabilities is how degradation stays loud. The
|
|
14
|
+
* publish plan reads them, decides what will land and what
|
|
15
|
+
* will not, and says so before anything is sent.
|
|
16
|
+
*
|
|
17
|
+
* Which means a capability nothing reads is not a capability,
|
|
18
|
+
* it is a promise. Three were removed once an audit went
|
|
19
|
+
* looking for readers and found none:
|
|
20
|
+
*
|
|
21
|
+
* - `suggestions`, a suggested edit a reader can apply. No
|
|
22
|
+
* finding or draft item in this substrate can carry one, so
|
|
23
|
+
* the field described a feature nothing could express.
|
|
24
|
+
* - `pendingReviews`, holding a review as a draft on the
|
|
25
|
+
* backend. The draft here is local and outlives the call,
|
|
26
|
+
* which is what lets it work identically on a backend with
|
|
27
|
+
* no such notion. The capability was obsolete by design.
|
|
28
|
+
* - `deleteBranchOnMerge`. The one thing the system now
|
|
29
|
+
* deliberately refuses, because GitHub permanently closes
|
|
30
|
+
* the dependent PRs and they cannot be reopened.
|
|
31
|
+
*
|
|
32
|
+
* A field is added here when a reader is added with it. That
|
|
33
|
+
* is the whole discipline, and these three are why.
|
|
34
|
+
*
|
|
35
|
+
* `autoMerge` went the same way and is the interesting one,
|
|
36
|
+
* because unlike those three it named something real. GitHub
|
|
37
|
+
* does merge once checks pass, and the capability report
|
|
38
|
+
* listed `auto-merge` among the verbs a caller was told they
|
|
39
|
+
* could use. There was no verb: no method on the authoring
|
|
40
|
+
* facet, no flag on a merge request, no action on the tool.
|
|
41
|
+
* Advertising a door that is painted on is worse than having
|
|
42
|
+
* no door, so it comes back the day it opens, which now means
|
|
43
|
+
* a `whenReady` flag on {@link MergeRequest} answered with an
|
|
44
|
+
* `enqueued` outcome, since that is exactly what it is.
|
|
45
|
+
*/
|
|
46
|
+
import type { Reaction, Verdict } from "./conversation.js";
|
|
47
|
+
import type { StackProvenance } from "./stack.js";
|
|
48
|
+
/** How a provider treats an anchor that no longer fits. */
|
|
49
|
+
export type StalenessModel =
|
|
50
|
+
/** Anchors stay valid; the provider pins a witness commit. */
|
|
51
|
+
"pinned"
|
|
52
|
+
/** The provider flags a stranded anchor. */
|
|
53
|
+
| "flagged"
|
|
54
|
+
/** The provider says nothing either way. */
|
|
55
|
+
| "none";
|
|
56
|
+
/**
|
|
57
|
+
* Where a remark about a whole file is allowed to be posted.
|
|
58
|
+
*
|
|
59
|
+
* `standalone` means it has to be posted on its own, outside a batch
|
|
60
|
+
* review, which is what both backends surveyed require. `batch` means it can
|
|
61
|
+
* ride along with a verdict and the line-anchored remarks, which is what a
|
|
62
|
+
* boolean used to claim for backends that do not allow it.
|
|
63
|
+
*/
|
|
64
|
+
export type FileLevelComments = "never" | "standalone" | "batch";
|
|
65
|
+
/** What a provider's conversation facet can do. */
|
|
66
|
+
export interface ConversationCapabilities {
|
|
67
|
+
/** Post a verdict and anchored comments in one submission. */
|
|
68
|
+
anchoredBatchReview: boolean;
|
|
69
|
+
/** Cap on comments per batch, when there is one. */
|
|
70
|
+
maxBatchComments?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Where a remark about a whole file can be posted, if anywhere.
|
|
73
|
+
*
|
|
74
|
+
* A boolean here could not be honest, and both backends proved it. Each
|
|
75
|
+
* declared `anchoredBatchReview: true` and `fileLevelComments: true` and
|
|
76
|
+
* each statement was true on its own, while their conjunction was false:
|
|
77
|
+
* neither will take a file-level comment inside a batch review. GitHub
|
|
78
|
+
* refuses the batch with `0.position (Expected value to not be null)` and
|
|
79
|
+
* gitstream with `comments[0].line missing_field`, and in both cases the
|
|
80
|
+
* whole review is rejected rather than the one remark. Posted on its own,
|
|
81
|
+
* with a subject type of file, both accept it.
|
|
82
|
+
*
|
|
83
|
+
* So the question is not whether a file-level remark is possible but
|
|
84
|
+
* where it can go, and a capability that cannot express a conjunction
|
|
85
|
+
* will lie about one.
|
|
86
|
+
*/
|
|
87
|
+
fileLevelComments: FileLevelComments;
|
|
88
|
+
/** Anchor a remark to a run of lines. */
|
|
89
|
+
multiLineRanges: boolean;
|
|
90
|
+
/** Reopen a resolved thread. */
|
|
91
|
+
unresolve: boolean;
|
|
92
|
+
/** Reactions the provider accepts. Empty means none. */
|
|
93
|
+
reactions: readonly Reaction[];
|
|
94
|
+
/** Reply onto a top-level message, not just a thread. */
|
|
95
|
+
topLevelThreading: boolean;
|
|
96
|
+
/** How the provider treats an anchor that no longer fits. */
|
|
97
|
+
staleness: StalenessModel;
|
|
98
|
+
/**
|
|
99
|
+
* Verdicts that require a summary body. One backend
|
|
100
|
+
* rejects a request for changes with an empty body.
|
|
101
|
+
*/
|
|
102
|
+
bodyRequiredFor?: readonly Verdict[];
|
|
103
|
+
/** Verdicts allowed on a change the actor authored. */
|
|
104
|
+
selfVerdicts?: readonly Verdict[];
|
|
105
|
+
/** Verdicts still allowed once a change has merged. */
|
|
106
|
+
verdictsAfterMerge?: readonly Verdict[];
|
|
107
|
+
}
|
|
108
|
+
/** What a provider's stacking facet can do. */
|
|
109
|
+
export interface StackingCapabilities {
|
|
110
|
+
/** Whether the shape is recorded or inferred. */
|
|
111
|
+
provenance: StackProvenance;
|
|
112
|
+
/** Report a stack that branches, not just a chain. */
|
|
113
|
+
fanOut: boolean;
|
|
114
|
+
}
|
|
115
|
+
/** What a provider's proposals facet can do. */
|
|
116
|
+
export interface ProposalCapabilities {
|
|
117
|
+
/** Fetch the change's commits into a local repo. */
|
|
118
|
+
fetchAsRef: boolean;
|
|
119
|
+
/** Report CI state for a change. */
|
|
120
|
+
checks: boolean;
|
|
121
|
+
/** List changes matching a filter. */
|
|
122
|
+
list: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* When a backend will accept reviewers on a change.
|
|
126
|
+
*
|
|
127
|
+
* Three states rather than a boolean, because one backend takes them
|
|
128
|
+
* only as the change is created. A caller told "not supported" would
|
|
129
|
+
* never learn about the one moment it is.
|
|
130
|
+
*/
|
|
131
|
+
export type ReviewersAt = "creation" | "any-time" | "never";
|
|
132
|
+
/**
|
|
133
|
+
* What retargeting a change's base means here.
|
|
134
|
+
*
|
|
135
|
+
* Not a boolean either. On one backend a base change goes through
|
|
136
|
+
* resubmitting the whole stack, so retargeting one change is not a
|
|
137
|
+
* smaller version of the same operation and a caller that treats it as
|
|
138
|
+
* one will move changes it did not mean to touch.
|
|
139
|
+
*/
|
|
140
|
+
export type RetargetScope = "change" | "stack" | "never";
|
|
141
|
+
/**
|
|
142
|
+
* How a backend names a person.
|
|
143
|
+
*
|
|
144
|
+
* The same string is a valid assignee on one backend and meaningless on
|
|
145
|
+
* another: GitHub wants a login, gitstream wants a Shopify email address.
|
|
146
|
+
* Declared rather than inferred, because the failure otherwise arrives
|
|
147
|
+
* from the create route after the change exists.
|
|
148
|
+
*
|
|
149
|
+
* `unknown` is for a backend that has not been measured. It is checked
|
|
150
|
+
* against nothing, since silence is not a licence to guess: picking a
|
|
151
|
+
* rule for a backend nobody asked would refuse values it accepts.
|
|
152
|
+
*/
|
|
153
|
+
export type PersonForm = "login" | "email" | "unknown";
|
|
154
|
+
/**
|
|
155
|
+
* What a provider's authoring facet can do.
|
|
156
|
+
*
|
|
157
|
+
* Every field here is a difference the CLI survey actually found. The
|
|
158
|
+
* ones that are booleans elsewhere and enums here are the ones where a
|
|
159
|
+
* boolean would have been a lie.
|
|
160
|
+
*/
|
|
161
|
+
export interface AuthoringCapabilities {
|
|
162
|
+
propose: boolean;
|
|
163
|
+
/** Propose a whole stack in dependency order, in one go. */
|
|
164
|
+
proposeStack: boolean;
|
|
165
|
+
reviewersAt: ReviewersAt;
|
|
166
|
+
retarget: RetargetScope;
|
|
167
|
+
/** Flip an existing change between draft and ready. */
|
|
168
|
+
setDraft: boolean;
|
|
169
|
+
close: boolean;
|
|
170
|
+
reopen: boolean;
|
|
171
|
+
merge: boolean;
|
|
172
|
+
labels: boolean;
|
|
173
|
+
assignees: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* The form this backend names people in, for assignees and reviewers.
|
|
176
|
+
*
|
|
177
|
+
* Required rather than optional so a new backend has to answer it. An
|
|
178
|
+
* absent field would read as "no opinion" for a backend that simply
|
|
179
|
+
* had not been asked, which is the ambiguity that lets a login reach a
|
|
180
|
+
* server that only knows email addresses.
|
|
181
|
+
*/
|
|
182
|
+
identifies: PersonForm;
|
|
183
|
+
/**
|
|
184
|
+
* Ask CI to run again.
|
|
185
|
+
*
|
|
186
|
+
* Here rather than beside `checks` on the proposals facet, which
|
|
187
|
+
* is where it reads more naturally, because this is a write and
|
|
188
|
+
* that facet is how a change is read. Every write goes through
|
|
189
|
+
* one gate and one `offerable` check, and a second write path
|
|
190
|
+
* hanging off the read facet would have to duplicate both or
|
|
191
|
+
* skip them.
|
|
192
|
+
*
|
|
193
|
+
* Reading CI and retriggering it are still different
|
|
194
|
+
* permissions, so a provider can report checks and decline to
|
|
195
|
+
* rerun them. What counts as a rerun is the backend's business:
|
|
196
|
+
* an API call against the change's own runs on one, and on
|
|
197
|
+
* another a build tool that is simply how that monorepo
|
|
198
|
+
* triggers CI.
|
|
199
|
+
*/
|
|
200
|
+
rerunChecks: boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Whether mutating a change ejects it from a merge queue.
|
|
203
|
+
*
|
|
204
|
+
* The expensive one. On a queue-backed backend a push, a rebase or a
|
|
205
|
+
* base change ejects the change and everything speculatively batched
|
|
206
|
+
* with it, and re-running CI for the rest is measured in hundreds of
|
|
207
|
+
* jobs. A caller has to be able to ask before it acts.
|
|
208
|
+
*/
|
|
209
|
+
refusesWhileEnqueued: boolean;
|
|
210
|
+
}
|
|
211
|
+
/** Everything a provider declares about itself, per repo. */
|
|
212
|
+
export interface Capabilities {
|
|
213
|
+
proposals?: ProposalCapabilities;
|
|
214
|
+
stacking?: StackingCapabilities;
|
|
215
|
+
conversation?: ConversationCapabilities;
|
|
216
|
+
authoring?: AuthoringCapabilities;
|
|
217
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a provider can actually do.
|
|
3
|
+
*
|
|
4
|
+
* Facets say which broad abilities a provider has; these say
|
|
5
|
+
* how far each one goes. The distinction earns its keep at
|
|
6
|
+
* the point of publishing: two providers both post reviews,
|
|
7
|
+
* but one caps a batch at a hundred comments, one cannot
|
|
8
|
+
* thread a reply onto a top-level message, and one has no
|
|
9
|
+
* way to unresolve. A consumer that cannot ask about those
|
|
10
|
+
* differences has to discover them from a rejected request,
|
|
11
|
+
* which is the worst moment to find out.
|
|
12
|
+
*
|
|
13
|
+
* Declaring capabilities is how degradation stays loud. The
|
|
14
|
+
* publish plan reads them, decides what will land and what
|
|
15
|
+
* will not, and says so before anything is sent.
|
|
16
|
+
*
|
|
17
|
+
* Which means a capability nothing reads is not a capability,
|
|
18
|
+
* it is a promise. Three were removed once an audit went
|
|
19
|
+
* looking for readers and found none:
|
|
20
|
+
*
|
|
21
|
+
* - `suggestions`, a suggested edit a reader can apply. No
|
|
22
|
+
* finding or draft item in this substrate can carry one, so
|
|
23
|
+
* the field described a feature nothing could express.
|
|
24
|
+
* - `pendingReviews`, holding a review as a draft on the
|
|
25
|
+
* backend. The draft here is local and outlives the call,
|
|
26
|
+
* which is what lets it work identically on a backend with
|
|
27
|
+
* no such notion. The capability was obsolete by design.
|
|
28
|
+
* - `deleteBranchOnMerge`. The one thing the system now
|
|
29
|
+
* deliberately refuses, because GitHub permanently closes
|
|
30
|
+
* the dependent PRs and they cannot be reopened.
|
|
31
|
+
*
|
|
32
|
+
* A field is added here when a reader is added with it. That
|
|
33
|
+
* is the whole discipline, and these three are why.
|
|
34
|
+
*
|
|
35
|
+
* `autoMerge` went the same way and is the interesting one,
|
|
36
|
+
* because unlike those three it named something real. GitHub
|
|
37
|
+
* does merge once checks pass, and the capability report
|
|
38
|
+
* listed `auto-merge` among the verbs a caller was told they
|
|
39
|
+
* could use. There was no verb: no method on the authoring
|
|
40
|
+
* facet, no flag on a merge request, no action on the tool.
|
|
41
|
+
* Advertising a door that is painted on is worse than having
|
|
42
|
+
* no door, so it comes back the day it opens, which now means
|
|
43
|
+
* a `whenReady` flag on {@link MergeRequest} answered with an
|
|
44
|
+
* `enqueued` outcome, since that is exactly what it is.
|
|
45
|
+
*/
|
|
46
|
+
export {};
|