@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,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What was asked of whom, and what came back.
|
|
3
|
+
*
|
|
4
|
+
* A run is a record rather than a working state: it says who was
|
|
5
|
+
* asked, in which pass, and what each of them came back with. A
|
|
6
|
+
* finding points at its run by id, so a run that got edited under
|
|
7
|
+
* one would change what an already-recorded finding means. Nothing
|
|
8
|
+
* here mutates; substituting an outcome returns a new run.
|
|
9
|
+
*
|
|
10
|
+
* The counts are kept as a function rather than fields, because a
|
|
11
|
+
* stored count and a stored list of outcomes are two things that
|
|
12
|
+
* can disagree, and only one of them is the evidence.
|
|
13
|
+
*/
|
|
14
|
+
import { count } from "../../ui/count.js";
|
|
15
|
+
/**
|
|
16
|
+
* What a round was given, in the shape a run records it.
|
|
17
|
+
*
|
|
18
|
+
* @see whatItRead
|
|
19
|
+
*
|
|
20
|
+
* The counterpart of `whatItRead`, and one helper for the same reason:
|
|
21
|
+
* it is one fact, six builders write it, and the last fact that had to
|
|
22
|
+
* reach all six reached four.
|
|
23
|
+
*/
|
|
24
|
+
export function whatItGave(request) {
|
|
25
|
+
return request.given === undefined ? {} : { given: request.given };
|
|
26
|
+
}
|
|
27
|
+
/** How many digits a sequence is padded to, so ids sort as text. */
|
|
28
|
+
const SEQ_WIDTH = 6;
|
|
29
|
+
/**
|
|
30
|
+
* Name a run.
|
|
31
|
+
*
|
|
32
|
+
* The round leads, so a bare id says what pass it was without
|
|
33
|
+
* anything having to look it up. The timestamp sorts. The sequence
|
|
34
|
+
* is part of the name rather than a tiebreak applied later, because
|
|
35
|
+
* two runs inside one millisecond would otherwise collide and make
|
|
36
|
+
* one run's findings unreachable, and it is zero-padded so it keeps
|
|
37
|
+
* sorting as text rather than putting 10 before 9.
|
|
38
|
+
*/
|
|
39
|
+
export function newRunId(round, at, seq) {
|
|
40
|
+
const stamp = at.toISOString().replace(/[-:.]/g, "").replace("Z", "");
|
|
41
|
+
return `${round}-${stamp}-${String(seq).padStart(SEQ_WIDTH, "0")}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* What is wrong with the session rather than with the reviewers.
|
|
45
|
+
*
|
|
46
|
+
* Measured. Pi upgraded mid-session and deleted the versioned install
|
|
47
|
+
* directory the running session pins its children to, so every
|
|
48
|
+
* reviewer died on dispatch. The runner diagnosed it correctly and
|
|
49
|
+
* put the same sentence on all seven, and the round printed it seven
|
|
50
|
+
* times as though seven separate things had gone wrong.
|
|
51
|
+
*
|
|
52
|
+
* The repetition is not the cost. Seven failures beside a retry hint
|
|
53
|
+
* read as seven flaky reviewers, and retrying is the one thing that
|
|
54
|
+
* cannot work: it fails identically until the session restarts.
|
|
55
|
+
*
|
|
56
|
+
* Read off the outcome rather than sniffed out of the message. This
|
|
57
|
+
* matched a prefix first, which made one library string-match another
|
|
58
|
+
* library's prose, and both are free to reword: the diagnosis is a
|
|
59
|
+
* fact the dispatching side knows, so it is carried as one.
|
|
60
|
+
*
|
|
61
|
+
* One participant is enough. A stale install kills every reviewer it
|
|
62
|
+
* reaches, and a round where one dispatch raced the deletion is
|
|
63
|
+
* exactly as unrecoverable by retry as one where all seven did.
|
|
64
|
+
*/
|
|
65
|
+
export function staleRuntimeAdvisory(run) {
|
|
66
|
+
return run.outcomes.find((one) => one.advisory !== undefined)?.advisory;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* One line for each participant that failed, without saying the same
|
|
70
|
+
* paragraph twice.
|
|
71
|
+
*
|
|
72
|
+
* The roll call has to survive an advisory: a reader needs to see who
|
|
73
|
+
* was asked and that none of them answered, or the round looks like it
|
|
74
|
+
* never ran. What it does not need is the advisory repeated under
|
|
75
|
+
* every name, which is what hoisting a sentence already on every
|
|
76
|
+
* outcome would otherwise produce, one copy longer than before.
|
|
77
|
+
*
|
|
78
|
+
* What was hoisted is told rather than worked out again. Deciding it
|
|
79
|
+
* twice means the two can disagree, and the way they disagree is the
|
|
80
|
+
* worst of both: a caller that suppressed the advisory gets a roll
|
|
81
|
+
* call of reviewers pointing at a line that is not there.
|
|
82
|
+
*/
|
|
83
|
+
export function failureLines(run, hoisted) {
|
|
84
|
+
const lines = [];
|
|
85
|
+
for (const outcome of run.outcomes) {
|
|
86
|
+
if (outcome.failure === undefined)
|
|
87
|
+
continue;
|
|
88
|
+
lines.push(outcome.failure === hoisted
|
|
89
|
+
? `${outcome.participantId}: as above.`
|
|
90
|
+
: `${outcome.participantId}: ${outcome.failure}`);
|
|
91
|
+
}
|
|
92
|
+
return lines;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* What became of each participant a limit took away.
|
|
96
|
+
*
|
|
97
|
+
* The round already records that a reviewer was stopped and where its
|
|
98
|
+
* answer was kept, and recorded both without ever printing them, which
|
|
99
|
+
* is most of the way to losing the answer regardless: nobody opens a
|
|
100
|
+
* ledger they have no reason to open. One line each, naming who, what
|
|
101
|
+
* stopped them and where to read what they said.
|
|
102
|
+
*/
|
|
103
|
+
export function stoppedNotes(run) {
|
|
104
|
+
const notes = [];
|
|
105
|
+
for (const outcome of run.outcomes) {
|
|
106
|
+
const stopped = outcome.stopped;
|
|
107
|
+
if (stopped === undefined)
|
|
108
|
+
continue;
|
|
109
|
+
const kept = outcome.answerPath === undefined
|
|
110
|
+
? "nothing of its answer was kept"
|
|
111
|
+
: `its answer is at ${outcome.answerPath}`;
|
|
112
|
+
// A soft deadline is the round asking, not the round failing,
|
|
113
|
+
// and the ledger has to say so too. Reframing it in one surface
|
|
114
|
+
// and calling it a stop in the next just moves the alarm.
|
|
115
|
+
const how = stopped.limit === "soft-deadline"
|
|
116
|
+
? "asked to wrap up early"
|
|
117
|
+
: `stopped (${stopped.limit})`;
|
|
118
|
+
notes.push(`${outcome.participantId} ${how}, ${count(outcome.findingIds.length, "finding")} read, ${kept}`);
|
|
119
|
+
}
|
|
120
|
+
return notes;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* How a run went.
|
|
124
|
+
*
|
|
125
|
+
* Someone asked with no outcome at all counts as failed rather than
|
|
126
|
+
* as pending, since a run being reported on has finished and a
|
|
127
|
+
* participant that never reported is one that dropped. Answering
|
|
128
|
+
* nothing is an answer: a reviewer that read the change and had no
|
|
129
|
+
* complaint is not a failure, and counting it as one would make a
|
|
130
|
+
* clean review look broken.
|
|
131
|
+
*
|
|
132
|
+
* Unless the round is still open, where the same silence means the
|
|
133
|
+
* opposite. Nobody has asked those reviewers for anything yet: a
|
|
134
|
+
* started round that has recorded nothing summarised as seven failed
|
|
135
|
+
* out of seven, and every sentence built on that read as an
|
|
136
|
+
* accusation against reviewers who were at that moment working.
|
|
137
|
+
*/
|
|
138
|
+
export function runSummary(run) {
|
|
139
|
+
let answered = 0;
|
|
140
|
+
let reported = 0;
|
|
141
|
+
let findings = 0;
|
|
142
|
+
let tokens;
|
|
143
|
+
let cost;
|
|
144
|
+
for (const participant of run.participants) {
|
|
145
|
+
const outcome = run.outcomes.find((o) => o.participantId === participant.id);
|
|
146
|
+
if (outcome === undefined)
|
|
147
|
+
continue;
|
|
148
|
+
// Before the failure check, because a reviewer that died still
|
|
149
|
+
// spent what it spent.
|
|
150
|
+
if (outcome.usage?.tokens !== undefined) {
|
|
151
|
+
tokens = (tokens ?? 0) + outcome.usage.tokens;
|
|
152
|
+
}
|
|
153
|
+
if (outcome.usage?.cost !== undefined) {
|
|
154
|
+
cost = (cost ?? 0) + outcome.usage.cost;
|
|
155
|
+
}
|
|
156
|
+
if (outcome.failure !== undefined) {
|
|
157
|
+
reported += 1;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
answered += 1;
|
|
161
|
+
findings += outcome.findingIds.length;
|
|
162
|
+
}
|
|
163
|
+
// A failure somebody recorded is a failure whatever state the round
|
|
164
|
+
// is in. Only silence changes meaning: on a settled round it is a
|
|
165
|
+
// participant that dropped, and on an open one it is a participant
|
|
166
|
+
// nobody has asked about yet.
|
|
167
|
+
const silent = run.participants.length - answered - reported;
|
|
168
|
+
const priced = run.outcomes.filter((outcome) => outcome.usage !== undefined).length;
|
|
169
|
+
return {
|
|
170
|
+
asked: run.participants.length,
|
|
171
|
+
answered,
|
|
172
|
+
failed: reported + (run.open === true ? 0 : silent),
|
|
173
|
+
pending: run.open === true ? silent : 0,
|
|
174
|
+
findings,
|
|
175
|
+
...(tokens === undefined ? {} : { tokens }),
|
|
176
|
+
...(cost === undefined ? {} : { cost }),
|
|
177
|
+
...(priced > 0 && priced < run.participants.length
|
|
178
|
+
? { partlyPriced: true }
|
|
179
|
+
: {}),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* A retried outcome, carrying what the attempt it replaces cost.
|
|
184
|
+
*
|
|
185
|
+
* The findings are replaced, because the new attempt supersedes the
|
|
186
|
+
* old one and the round should not show both. The money is not: it
|
|
187
|
+
* was spent, and the reviewer being asked twice is precisely why the
|
|
188
|
+
* round cost what it did. Replacing the usage as well made the total
|
|
189
|
+
* fall after money had gone out, so the rounds with retries in them,
|
|
190
|
+
* which are the expensive ones, were the ones that under-reported.
|
|
191
|
+
*/
|
|
192
|
+
function billedWith(outcome, replaced) {
|
|
193
|
+
const before = replaced.usage;
|
|
194
|
+
if (before === undefined)
|
|
195
|
+
return outcome;
|
|
196
|
+
const tokens = sum(outcome.usage?.tokens, before.tokens);
|
|
197
|
+
const cost = sum(outcome.usage?.cost, before.cost);
|
|
198
|
+
if (tokens === undefined && cost === undefined)
|
|
199
|
+
return outcome;
|
|
200
|
+
return {
|
|
201
|
+
...outcome,
|
|
202
|
+
usage: {
|
|
203
|
+
...(tokens === undefined ? {} : { tokens }),
|
|
204
|
+
...(cost === undefined ? {} : { cost }),
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/** Two numbers added, where absent still means not told. */
|
|
209
|
+
function sum(one, two) {
|
|
210
|
+
if (one === undefined)
|
|
211
|
+
return two;
|
|
212
|
+
return two === undefined ? one : one + two;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* What a round read, in the shape a run records it.
|
|
216
|
+
*
|
|
217
|
+
* One helper rather than a conditional spread per builder, because
|
|
218
|
+
* these two are one fact. Recording the commit without the caveat is
|
|
219
|
+
* the failure this exists to stop: the run then claims the reviewers
|
|
220
|
+
* read the change when they read whatever the caller had checked out.
|
|
221
|
+
* Six sites spread the commit by hand, and it took until the ledger
|
|
222
|
+
* was counted to notice that half of them recorded nothing at all.
|
|
223
|
+
*/
|
|
224
|
+
export function whatItRead(read) {
|
|
225
|
+
return {
|
|
226
|
+
...(read.witness === undefined ? {} : { witness: read.witness }),
|
|
227
|
+
...(read.unpinned === undefined ? {} : { unpinned: read.unpinned }),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The commit an anchor from this round may claim.
|
|
232
|
+
*
|
|
233
|
+
* An anchor's witness means the commit it was formed against, and the
|
|
234
|
+
* substrate reads it to tell a thread the backend kept from one a
|
|
235
|
+
* force-push stranded. A round that fell back to the caller's
|
|
236
|
+
* checkout was never formed against the commit under review, so
|
|
237
|
+
* stamping it there makes the substrate confidently wrong in exactly
|
|
238
|
+
* the case the field exists to disambiguate.
|
|
239
|
+
*
|
|
240
|
+
* Nothing, then, rather than the commit: not knowing which tree a
|
|
241
|
+
* finding came from is the truth, and an anchor that says so degrades
|
|
242
|
+
* to what anchors did before witnesses existed. The run keeps both
|
|
243
|
+
* facts, because what the change is at and what the reviewers read
|
|
244
|
+
* are two different things and the ledger wants each.
|
|
245
|
+
*/
|
|
246
|
+
export function anchorWitness(read) {
|
|
247
|
+
return read.unpinned === undefined ? read.witness : undefined;
|
|
248
|
+
}
|
|
249
|
+
/** The identity a run asked under this id, if it asked one. */
|
|
250
|
+
export function askedOf(run, participantId) {
|
|
251
|
+
return run.participants.find((p) => p.id === participantId);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Why a retry may not be given new settings, if it may not.
|
|
255
|
+
*
|
|
256
|
+
* A retry re-asks one participant and substitutes the answer into a
|
|
257
|
+
* round that already recorded who it asked and what each was set to.
|
|
258
|
+
* Asking on a different model puts one participant's answer into a run
|
|
259
|
+
* whose ledger names another, and the identity ledger cannot catch it,
|
|
260
|
+
* because the substitution keeps the held run's participants: nothing
|
|
261
|
+
* ever claims the new configuration.
|
|
262
|
+
*
|
|
263
|
+
* The clocks are the exception, and they are the reason somebody is
|
|
264
|
+
* retrying at all. How long a reviewer was allowed does not change
|
|
265
|
+
* what its findings mean, the ledger does not record it against the
|
|
266
|
+
* participant, and a reviewer stopped by a wall is refused the retry
|
|
267
|
+
* outright unless that wall moves. Refusing the one setting that makes
|
|
268
|
+
* the retry worth running would leave editing a committed file as the
|
|
269
|
+
* only road.
|
|
270
|
+
*
|
|
271
|
+
* A predicate rather than a branch inside the tool, so the rule can be
|
|
272
|
+
* read and tested without a round on disk to retry.
|
|
273
|
+
*/
|
|
274
|
+
export function retryCannotResettle(who, run, participantId) {
|
|
275
|
+
if (who === undefined)
|
|
276
|
+
return undefined;
|
|
277
|
+
const resettles = Object.values(who).flatMap((over) => Object.keys(over).filter((key) => !CLOCKS.has(key)));
|
|
278
|
+
if (resettles.length === 0)
|
|
279
|
+
return undefined;
|
|
280
|
+
return (`A retry re-asks "${participantId}" as round ${run.id} asked it, so ` +
|
|
281
|
+
`it cannot take new settings: its answer is substituted into that ` +
|
|
282
|
+
`round, whose ledger records what it originally asked under. ` +
|
|
283
|
+
`${resettles.map((key) => `"${key}"`).join(", ")} would change that. ` +
|
|
284
|
+
`Run a fresh council with who, or release the id and ask again. The ` +
|
|
285
|
+
`clocks are the exception and may be raised here, since how long a ` +
|
|
286
|
+
`reviewer was allowed does not change what it found.`);
|
|
287
|
+
}
|
|
288
|
+
/** The settings a retry may take, being the ones that change no meaning. */
|
|
289
|
+
const CLOCKS = new Set([
|
|
290
|
+
"backstopMs",
|
|
291
|
+
"idleMs",
|
|
292
|
+
"answerMs",
|
|
293
|
+
]);
|
|
294
|
+
/**
|
|
295
|
+
* Replace one participant's outcome, returning a new run.
|
|
296
|
+
*
|
|
297
|
+
* This is what a retry does. The outcome keeps its position, since
|
|
298
|
+
* a retry that moved a reviewer to the end would reorder every
|
|
299
|
+
* report of the run for no reason a reader could see, and a
|
|
300
|
+
* participant who had no outcome yet gets one appended.
|
|
301
|
+
*
|
|
302
|
+
* Substituting for somebody outside the roster throws rather than
|
|
303
|
+
* refusing softly: it would make the run claim it asked somebody it
|
|
304
|
+
* never did, and no caller has a sensible way to carry on from
|
|
305
|
+
* that.
|
|
306
|
+
*
|
|
307
|
+
* What this attempt read is required rather than optional, since
|
|
308
|
+
* omitting it means "the same tree the round had", which is the most
|
|
309
|
+
* optimistic reading available and the wrong default for the case
|
|
310
|
+
* that matters: a retry that fell back leaves the round less faithful
|
|
311
|
+
* than it was. Pass an empty record to say there is nothing to add.
|
|
312
|
+
*/
|
|
313
|
+
export function substituteOutcome(run, outcome, read) {
|
|
314
|
+
if (askedOf(run, outcome.participantId) === undefined) {
|
|
315
|
+
throw new Error(`This run never asked "${outcome.participantId}", so there is no outcome of theirs to replace. It asked ${run.participants.map((p) => p.id).join(", ")}.`);
|
|
316
|
+
}
|
|
317
|
+
const at = run.outcomes.findIndex((o) => o.participantId === outcome.participantId);
|
|
318
|
+
const outcomes = at === -1
|
|
319
|
+
? [...run.outcomes, outcome]
|
|
320
|
+
: run.outcomes.map((held, index) => index === at ? billedWith(outcome, held) : held);
|
|
321
|
+
// Filling the last gap in an interrupted round settles it.
|
|
322
|
+
//
|
|
323
|
+
// Without this the flag is one-way and the recovery it points at
|
|
324
|
+
// dead-ends: a session dies holding a council, every participant is
|
|
325
|
+
// asked again, and the completed round still reports itself as
|
|
326
|
+
// never settled forever. An alarm nobody can answer stops being
|
|
327
|
+
// read, which costs the one case it was raised for.
|
|
328
|
+
const waiting = run.participants.some((asked) => !outcomes.some((held) => held.participantId === asked.id));
|
|
329
|
+
// A retry that fell back to the caller's checkout makes the round
|
|
330
|
+
// less faithful than it was, and the run is the only place that can
|
|
331
|
+
// say so. Told rather than inferred, since only the caller knows
|
|
332
|
+
// which tree this attempt got, and one-way: a retry that happened
|
|
333
|
+
// to be pinned does not clear a caveat earned by the reviewers
|
|
334
|
+
// already in the round.
|
|
335
|
+
const fell = read?.unpinned === undefined ? {} : { unpinned: read.unpinned };
|
|
336
|
+
const { open: _wasOpen, ...rest } = run;
|
|
337
|
+
return waiting
|
|
338
|
+
? { ...run, outcomes, ...fell }
|
|
339
|
+
: { ...rest, outcomes, ...fell };
|
|
340
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A finding that belongs to a stack rather than to one change.
|
|
3
|
+
*
|
|
4
|
+
* Reviewing a stack one change at a time hides the findings that only
|
|
5
|
+
* exist between changes: an interface introduced at the base and used
|
|
6
|
+
* wrongly at the tip, a migration split so the middle change cannot
|
|
7
|
+
* deploy on its own. Asking about the whole stack at once surfaces
|
|
8
|
+
* those, but only if a finding can say it is about several changes.
|
|
9
|
+
*
|
|
10
|
+
* So a span, and not a duplicate on each change. Repeating one
|
|
11
|
+
* observation on every change it touches makes a reader answer it
|
|
12
|
+
* three times and leaves three places to resolve it, and the thing
|
|
13
|
+
* that made it worth saying, that it is *between* them, is exactly
|
|
14
|
+
* what gets lost.
|
|
15
|
+
*
|
|
16
|
+
* A span names refs rather than positions. A stack renumbers itself
|
|
17
|
+
* every time somebody restacks it, so a finding recorded as "the
|
|
18
|
+
* second change" is wrong as soon as anything lands underneath.
|
|
19
|
+
*/
|
|
20
|
+
import type { Finding, FindingOrigin } from "../finding.js";
|
|
21
|
+
/** The changes a finding is about, in stack order. */
|
|
22
|
+
export interface FindingSpan {
|
|
23
|
+
/** One ref for an ordinary finding, several for a cross-change one. */
|
|
24
|
+
refs: string[];
|
|
25
|
+
}
|
|
26
|
+
/** A finding plus the changes it is about. */
|
|
27
|
+
export interface SpannedFinding {
|
|
28
|
+
span: FindingSpan;
|
|
29
|
+
finding: Omit<Finding, "id">;
|
|
30
|
+
}
|
|
31
|
+
/** What came out of one stack-wide answer. */
|
|
32
|
+
export interface StackHarvest {
|
|
33
|
+
/**
|
|
34
|
+
* Of the warnings, the ones about recorded entries rather than
|
|
35
|
+
* about the answer's shape. Named for the same reason the single
|
|
36
|
+
* change's harvest names them: the caller that needs them is the
|
|
37
|
+
* one replacing the whole list.
|
|
38
|
+
*/
|
|
39
|
+
recordedWarnings?: string[];
|
|
40
|
+
findings: SpannedFinding[];
|
|
41
|
+
warnings: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read a stack-wide answer, warning about what it dropped.
|
|
45
|
+
*
|
|
46
|
+
* `witnessFor` is asked for the witness of the change a finding is
|
|
47
|
+
* said at, because each change has its own diff: checking a line
|
|
48
|
+
* finding on the tip against the base's diff would degrade a perfectly
|
|
49
|
+
* good anchor for no reason.
|
|
50
|
+
*/
|
|
51
|
+
export declare function harvestStackFindings(text: string, origin: FindingOrigin, stackRefs: readonly string[], witnessFor?: (ref: string) => string | undefined): StackHarvest;
|
|
52
|
+
/**
|
|
53
|
+
* The stack answer, plus what the reviewer wrote down reaching it.
|
|
54
|
+
*
|
|
55
|
+
* The same bargain as a single change's round, with one extra
|
|
56
|
+
* requirement: a recorded finding still has to say which changes it is
|
|
57
|
+
* about, because a stack round's whole job is placing one. An entry
|
|
58
|
+
* that names none is dropped with a warning, exactly as it would be
|
|
59
|
+
* inside an answer.
|
|
60
|
+
*/
|
|
61
|
+
export declare function alsoRecordedInStack(said: StackHarvest, recorded: readonly unknown[] | undefined, origin: FindingOrigin, stackRefs: readonly string[], witnessFor?: (ref: string) => string | undefined): StackHarvest;
|
|
62
|
+
/**
|
|
63
|
+
* Where a span gets said.
|
|
64
|
+
*
|
|
65
|
+
* The earliest change it touches, because that is where the decision
|
|
66
|
+
* was made and where a reader walking the stack meets it first. Saying
|
|
67
|
+
* it at the tip sends somebody to the consequence and leaves them to
|
|
68
|
+
* work back to the cause.
|
|
69
|
+
*/
|
|
70
|
+
export declare function saidAt(span: FindingSpan, stackRefs: readonly string[]): string;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A finding that belongs to a stack rather than to one change.
|
|
3
|
+
*
|
|
4
|
+
* Reviewing a stack one change at a time hides the findings that only
|
|
5
|
+
* exist between changes: an interface introduced at the base and used
|
|
6
|
+
* wrongly at the tip, a migration split so the middle change cannot
|
|
7
|
+
* deploy on its own. Asking about the whole stack at once surfaces
|
|
8
|
+
* those, but only if a finding can say it is about several changes.
|
|
9
|
+
*
|
|
10
|
+
* So a span, and not a duplicate on each change. Repeating one
|
|
11
|
+
* observation on every change it touches makes a reader answer it
|
|
12
|
+
* three times and leaves three places to resolve it, and the thing
|
|
13
|
+
* that made it worth saying, that it is *between* them, is exactly
|
|
14
|
+
* what gets lost.
|
|
15
|
+
*
|
|
16
|
+
* A span names refs rather than positions. A stack renumbers itself
|
|
17
|
+
* every time somebody restacks it, so a finding recorded as "the
|
|
18
|
+
* second change" is wrong as soon as anything lands underneath.
|
|
19
|
+
*/
|
|
20
|
+
import { readWireFinding, SAID_NOTHING, saysTheSame } from "./harvest.js";
|
|
21
|
+
import { ANSWER_WAS_CUT_OFF, isRecord, readAnswer, wireText } from "./wire.js";
|
|
22
|
+
/**
|
|
23
|
+
* Read a stack-wide answer, warning about what it dropped.
|
|
24
|
+
*
|
|
25
|
+
* `witnessFor` is asked for the witness of the change a finding is
|
|
26
|
+
* said at, because each change has its own diff: checking a line
|
|
27
|
+
* finding on the tip against the base's diff would degrade a perfectly
|
|
28
|
+
* good anchor for no reason.
|
|
29
|
+
*/
|
|
30
|
+
export function harvestStackFindings(text, origin, stackRefs, witnessFor) {
|
|
31
|
+
const { parsed, truncated } = readAnswer(text, "findings");
|
|
32
|
+
const held = parsed?.findings;
|
|
33
|
+
if (!Array.isArray(held)) {
|
|
34
|
+
return {
|
|
35
|
+
findings: [],
|
|
36
|
+
// A reviewer that produced nothing has not broken a contract
|
|
37
|
+
// about the shape of an answer it never reached. Same rule as
|
|
38
|
+
// a single change's round, and for the same reason: it is the
|
|
39
|
+
// case a journal exists to rescue.
|
|
40
|
+
warnings: [
|
|
41
|
+
text.trim() === ""
|
|
42
|
+
? SAID_NOTHING
|
|
43
|
+
: "Nothing in this answer parsed as a findings array, so no findings could be read from it. An answer with nothing to say should still say findings: [].",
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const findings = [];
|
|
48
|
+
const warnings = [];
|
|
49
|
+
if (truncated)
|
|
50
|
+
warnings.push(ANSWER_WAS_CUT_OFF);
|
|
51
|
+
for (const [index, entry] of held.entries()) {
|
|
52
|
+
const at = `findings[${index}]`;
|
|
53
|
+
const span = readSpan(entry, at, stackRefs, warnings);
|
|
54
|
+
if (span === undefined)
|
|
55
|
+
continue;
|
|
56
|
+
const read = readWireFinding(entry, at, origin, witnessFor?.(saidAt(span, stackRefs)));
|
|
57
|
+
warnings.push(...read.warnings);
|
|
58
|
+
if (read.finding !== undefined) {
|
|
59
|
+
findings.push({ span, finding: read.finding });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { findings, warnings };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The stack answer, plus what the reviewer wrote down reaching it.
|
|
66
|
+
*
|
|
67
|
+
* The same bargain as a single change's round, with one extra
|
|
68
|
+
* requirement: a recorded finding still has to say which changes it is
|
|
69
|
+
* about, because a stack round's whole job is placing one. An entry
|
|
70
|
+
* that names none is dropped with a warning, exactly as it would be
|
|
71
|
+
* inside an answer.
|
|
72
|
+
*/
|
|
73
|
+
export function alsoRecordedInStack(said, recorded, origin, stackRefs, witnessFor) {
|
|
74
|
+
if (recorded === undefined || recorded.length === 0)
|
|
75
|
+
return said;
|
|
76
|
+
const findings = [...said.findings];
|
|
77
|
+
const recordedWarnings = [];
|
|
78
|
+
const before = findings.length;
|
|
79
|
+
// Keyed with the span, not just the finding. Two changes in a
|
|
80
|
+
// stack can carry the same line at the same path, which is what a
|
|
81
|
+
// stack is, so the same sentence about two of them is two findings
|
|
82
|
+
// and collapsing them would report the wrong change.
|
|
83
|
+
for (const [index, entry] of recorded.entries()) {
|
|
84
|
+
const at = `recorded[${index}]`;
|
|
85
|
+
const span = readSpan(entry, at, stackRefs, recordedWarnings);
|
|
86
|
+
if (span === undefined)
|
|
87
|
+
continue;
|
|
88
|
+
const read = readWireFinding(entry, at, origin, witnessFor?.(saidAt(span, stackRefs)));
|
|
89
|
+
recordedWarnings.push(...read.warnings);
|
|
90
|
+
const found = read.finding;
|
|
91
|
+
if (found === undefined)
|
|
92
|
+
continue;
|
|
93
|
+
if (findings.some((held) => sameSpannedFinding(held, { span, finding: found })))
|
|
94
|
+
continue;
|
|
95
|
+
findings.push({ span, finding: found });
|
|
96
|
+
}
|
|
97
|
+
const aboutTheAnswer = findings.length > before
|
|
98
|
+
? said.warnings.filter((warning) => warning !== SAID_NOTHING)
|
|
99
|
+
: said.warnings;
|
|
100
|
+
return {
|
|
101
|
+
findings,
|
|
102
|
+
warnings: [...aboutTheAnswer, ...recordedWarnings],
|
|
103
|
+
recordedWarnings,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The same finding said about the same changes.
|
|
108
|
+
*
|
|
109
|
+
* The span has to match exactly while the finding is compared the
|
|
110
|
+
* forgiving way, because two changes in a stack can carry the same
|
|
111
|
+
* line at the same path, which is what a stack is: the same sentence
|
|
112
|
+
* about two of them is two findings, and collapsing them would report
|
|
113
|
+
* the wrong change.
|
|
114
|
+
*/
|
|
115
|
+
function sameSpannedFinding(one, two) {
|
|
116
|
+
return (JSON.stringify(one.span) === JSON.stringify(two.span) &&
|
|
117
|
+
saysTheSame(one.finding, two.finding));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Where a span gets said.
|
|
121
|
+
*
|
|
122
|
+
* The earliest change it touches, because that is where the decision
|
|
123
|
+
* was made and where a reader walking the stack meets it first. Saying
|
|
124
|
+
* it at the tip sends somebody to the consequence and leaves them to
|
|
125
|
+
* work back to the cause.
|
|
126
|
+
*/
|
|
127
|
+
export function saidAt(span, stackRefs) {
|
|
128
|
+
const ordered = inStackOrder(span.refs, stackRefs);
|
|
129
|
+
return ordered[0] ?? span.refs[0] ?? "";
|
|
130
|
+
}
|
|
131
|
+
/** The changes an entry claims to be about, or nothing plus a warning. */
|
|
132
|
+
function readSpan(entry, at, stackRefs, warnings) {
|
|
133
|
+
if (!isRecord(entry)) {
|
|
134
|
+
warnings.push(`${at} is not an object, so it was dropped.`);
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
const claimed = Array.isArray(entry.refs) ? entry.refs : [];
|
|
138
|
+
const named = claimed.flatMap((value) => {
|
|
139
|
+
const ref = wireText(value);
|
|
140
|
+
return ref === undefined ? [] : [ref];
|
|
141
|
+
});
|
|
142
|
+
const known = named.filter((ref) => stackRefs.includes(ref));
|
|
143
|
+
const unknown = named.filter((ref) => !stackRefs.includes(ref));
|
|
144
|
+
if (unknown.length > 0) {
|
|
145
|
+
// Dropping the ref rather than the finding when others survive:
|
|
146
|
+
// a reviewer that named three changes and got one wrong still
|
|
147
|
+
// saw something real about the other two.
|
|
148
|
+
warnings.push(`${at} names ${unknown.join(", ")}, which ${unknown.length === 1 ? "is not a change" : "are not changes"} in this stack, so ${unknown.length === 1 ? "it was" : "they were"} left out.`);
|
|
149
|
+
}
|
|
150
|
+
if (known.length === 0) {
|
|
151
|
+
warnings.push(`${at} names no change in this stack, so it was dropped: a finding nobody can place is a finding nobody can read.`);
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
return { refs: inStackOrder(known, stackRefs) };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Refs in the order the stack reports them, roots before children.
|
|
158
|
+
*
|
|
159
|
+
* A span reported tip-first would read backwards against the stack it
|
|
160
|
+
* describes, and the order a model happened to list them in carries no
|
|
161
|
+
* meaning worth preserving.
|
|
162
|
+
*/
|
|
163
|
+
function inStackOrder(refs, stackRefs) {
|
|
164
|
+
const unique = [...new Set(refs)];
|
|
165
|
+
return unique.sort((a, b) => stackRefs.indexOf(a) - stackRefs.indexOf(b));
|
|
166
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asking a roster about a whole stack at once.
|
|
3
|
+
*
|
|
4
|
+
* The fan-out is the council's, reused rather than rewritten: the
|
|
5
|
+
* rules worth getting right, that participants are asked concurrently,
|
|
6
|
+
* that a thrown error and a reported one are the same event, and that
|
|
7
|
+
* findings are numbered in roster order, are the same rules here and
|
|
8
|
+
* would have to change together. What differs is what a reply means. A
|
|
9
|
+
* council reply is findings about one change; a stack reply is
|
|
10
|
+
* findings about a stack, each naming the changes it is about.
|
|
11
|
+
*
|
|
12
|
+
* Which is why `record` takes a ref. A stack round produces findings
|
|
13
|
+
* for several changes at once, and the store needs to know which
|
|
14
|
+
* change each belongs to. A spanning finding is filed once, at its
|
|
15
|
+
* earliest change, because filing it on every change it touches makes
|
|
16
|
+
* a reader answer one observation three times.
|
|
17
|
+
*/
|
|
18
|
+
import type { Finding } from "../finding.js";
|
|
19
|
+
import { type Ask, type CouncilResult } from "./council.js";
|
|
20
|
+
import { type AskProgress } from "./progress.js";
|
|
21
|
+
import type { Roster } from "./roster.js";
|
|
22
|
+
import { type RoundGiven } from "./run.js";
|
|
23
|
+
/** The impure things a stack round needs. */
|
|
24
|
+
export interface StackCouncilDeps {
|
|
25
|
+
/**
|
|
26
|
+
* Run one participant against the prompt.
|
|
27
|
+
*
|
|
28
|
+
* Reporting matters most here: a stack round is the longest there
|
|
29
|
+
* is, because it reads every change.
|
|
30
|
+
*/
|
|
31
|
+
ask: Ask;
|
|
32
|
+
/** File findings against one change in the stack. */
|
|
33
|
+
record(ref: string, findings: Omit<Finding, "id">[]): Promise<Finding[]>;
|
|
34
|
+
now(): Date;
|
|
35
|
+
/** Told what is happening while it happens. Optional. */
|
|
36
|
+
progress?: AskProgress;
|
|
37
|
+
}
|
|
38
|
+
/** What to ask, of whom, about which changes. */
|
|
39
|
+
export interface StackCouncilRequest {
|
|
40
|
+
roster: Roster;
|
|
41
|
+
prompt: string;
|
|
42
|
+
/** Distinguishes two rounds started in the same millisecond. */
|
|
43
|
+
seq: number;
|
|
44
|
+
/** Every change in the stack, roots before children. */
|
|
45
|
+
stackRefs: string[];
|
|
46
|
+
/**
|
|
47
|
+
* The commit one change's anchors are formed against.
|
|
48
|
+
*
|
|
49
|
+
* Per change, because each has its own diff: checking a finding on
|
|
50
|
+
* the tip against the base's diff would degrade a good anchor for
|
|
51
|
+
* nothing.
|
|
52
|
+
*/
|
|
53
|
+
witnessFor?: (ref: string) => string | undefined;
|
|
54
|
+
/** Said when the tree the reviewers read was not the stack's tip. */
|
|
55
|
+
unpinned?: string;
|
|
56
|
+
/**
|
|
57
|
+
* What the reviewers were handed, besides the changes.
|
|
58
|
+
*
|
|
59
|
+
* Not exempted the way the witness is. A stack is read in one tree
|
|
60
|
+
* under one set of conditions, so what its reviewers were given is
|
|
61
|
+
* a single fact however many changes they read.
|
|
62
|
+
*/
|
|
63
|
+
given?: RoundGiven;
|
|
64
|
+
}
|
|
65
|
+
/** Ask a roster about a stack and file what it says. */
|
|
66
|
+
export declare function runStackCouncil(request: StackCouncilRequest, deps: StackCouncilDeps): Promise<CouncilResult>;
|