@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,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A produced finding, held by the substrate.
|
|
3
|
+
*
|
|
4
|
+
* Something reviewed a change and has an observation about it.
|
|
5
|
+
* That observation outlives the thing that produced it: a council
|
|
6
|
+
* run ends, the session carries on, and the findings have to still
|
|
7
|
+
* be there to be read, curated and turned into remarks. So the
|
|
8
|
+
* substrate holds them, not whichever machinery raised them.
|
|
9
|
+
*
|
|
10
|
+
* A finding points at a place through the same `Anchor` a remark
|
|
11
|
+
* uses. That is deliberate rather than convenient: it means a
|
|
12
|
+
* finding carries a witness commit, so one raised against an
|
|
13
|
+
* earlier commit can be told it has gone stale instead of being
|
|
14
|
+
* posted at a line that has since moved.
|
|
15
|
+
*/
|
|
16
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { changeKey } from "./keys.js";
|
|
19
|
+
/** Findings on disk, one file per change. */
|
|
20
|
+
export function createFindingStore(root) {
|
|
21
|
+
async function read(change) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = await readFile(join(root, fileFor(change)), "utf8");
|
|
24
|
+
const parsed = JSON.parse(raw);
|
|
25
|
+
if (typeof parsed === "object" &&
|
|
26
|
+
parsed !== null &&
|
|
27
|
+
"findings" in parsed &&
|
|
28
|
+
Array.isArray(parsed.findings)) {
|
|
29
|
+
const ledger = parsed;
|
|
30
|
+
return {
|
|
31
|
+
findings: ledger.findings,
|
|
32
|
+
issued: ledger.issued ?? ledger.findings.length,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// No file, or one nothing can read. Either way this
|
|
38
|
+
// change has no findings to report, which is an answer
|
|
39
|
+
// rather than a failure.
|
|
40
|
+
}
|
|
41
|
+
return { findings: [], issued: 0 };
|
|
42
|
+
}
|
|
43
|
+
async function write(change, ledger) {
|
|
44
|
+
await mkdir(root, { recursive: true });
|
|
45
|
+
await writeFile(join(root, fileFor(change)), JSON.stringify(ledger, null, 2), "utf8");
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
async record(change, raised) {
|
|
49
|
+
const ledger = await read(change);
|
|
50
|
+
const added = raised.map((finding, index) => ({
|
|
51
|
+
...finding,
|
|
52
|
+
id: ledger.issued + index + 1,
|
|
53
|
+
}));
|
|
54
|
+
await write(change, {
|
|
55
|
+
findings: [...ledger.findings, ...added],
|
|
56
|
+
issued: ledger.issued + added.length,
|
|
57
|
+
});
|
|
58
|
+
return added;
|
|
59
|
+
},
|
|
60
|
+
async list(change) {
|
|
61
|
+
return (await read(change)).findings;
|
|
62
|
+
},
|
|
63
|
+
async clear(change) {
|
|
64
|
+
const ledger = await read(change);
|
|
65
|
+
if (ledger.issued === 0) {
|
|
66
|
+
await rm(join(root, fileFor(change)), { force: true });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
await write(change, { findings: [], issued: ledger.issued });
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* One file per change.
|
|
75
|
+
*
|
|
76
|
+
* Keyed by the change's key rather than its label, because a
|
|
77
|
+
* label is for people and can hold characters a path cannot, and
|
|
78
|
+
* two systems can spell one label the same way.
|
|
79
|
+
*/
|
|
80
|
+
function fileFor(change) {
|
|
81
|
+
const safe = changeKey(change)
|
|
82
|
+
.replace(/[^A-Za-z0-9._-]/g, "_")
|
|
83
|
+
.replace(/^\.+/, "_");
|
|
84
|
+
return `${safe}.json`;
|
|
85
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Findings somebody decided to fix rather than say.
|
|
3
|
+
*
|
|
4
|
+
* A review produces two kinds of conclusion, and only one of them is a
|
|
5
|
+
* remark. The other is work: a finding you agree with on your own
|
|
6
|
+
* change is not something to post, it is something to go and do. This
|
|
7
|
+
* is where those wait.
|
|
8
|
+
*
|
|
9
|
+
* The walk is deliberately not autonomous. `next` says what to work on
|
|
10
|
+
* and nothing else; the editing, the checking and the commit happen in
|
|
11
|
+
* the caller's own loop, where a person can interrupt at any point.
|
|
12
|
+
* Then `record` says what became of it. A queue that applied its own
|
|
13
|
+
* fixes would be a queue nobody could stop halfway.
|
|
14
|
+
*
|
|
15
|
+
* Nothing is ever removed. A fix that was abandoned stays with the
|
|
16
|
+
* reason it was abandoned, because somebody deciding a finding was
|
|
17
|
+
* wrong is a judgement worth reading back, and a queue that forgets
|
|
18
|
+
* its refusals will offer the same finding again next week.
|
|
19
|
+
*
|
|
20
|
+
* Two kinds of thing land here, and for a while only one of them
|
|
21
|
+
* could. A finding is something a reviewer raised, ours or a model's.
|
|
22
|
+
* A thread is somebody else's remark on our change, waiting for an
|
|
23
|
+
* answer, and working through those is the commonest review journey
|
|
24
|
+
* there is: it is what a person does on the morning after a review.
|
|
25
|
+
* A queue that held only findings could not represent that day at
|
|
26
|
+
* all, so it was a worklist for the rarer half of the work.
|
|
27
|
+
*/
|
|
28
|
+
import type { ChangeRef } from "./change.js";
|
|
29
|
+
import type { Finding } from "./finding.js";
|
|
30
|
+
/** What became of a queued fix. */
|
|
31
|
+
export type FixOutcome = {
|
|
32
|
+
kind: "committed";
|
|
33
|
+
commit: string;
|
|
34
|
+
} | {
|
|
35
|
+
kind: "skipped";
|
|
36
|
+
reason: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Answered in the conversation, with no code change.
|
|
40
|
+
*
|
|
41
|
+
* Only a thread can end this way, and it is not a skip. A remark
|
|
42
|
+
* answered by explaining why the code is as it is has been dealt
|
|
43
|
+
* with, and recording it as skipped would put it in the same bucket
|
|
44
|
+
* as one nobody got to.
|
|
45
|
+
*/
|
|
46
|
+
| {
|
|
47
|
+
kind: "answered";
|
|
48
|
+
reply: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* What a queued item is about.
|
|
52
|
+
*
|
|
53
|
+
* A discriminated union rather than two optional fields, so a reader
|
|
54
|
+
* cannot forget to check which one it has. The two need different
|
|
55
|
+
* things done to them: a finding is closed by a commit, a thread is
|
|
56
|
+
* closed by an answer and often a commit as well.
|
|
57
|
+
*/
|
|
58
|
+
export type FixSubject = {
|
|
59
|
+
kind: "finding";
|
|
60
|
+
finding: Finding;
|
|
61
|
+
} | {
|
|
62
|
+
kind: "thread";
|
|
63
|
+
thread: QueuedThread;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* The part of a thread worth carrying into the queue.
|
|
67
|
+
*
|
|
68
|
+
* Flattened rather than holding the whole {@link Thread}, because a
|
|
69
|
+
* queue entry is read weeks later and the live thread will have moved
|
|
70
|
+
* on. What is kept is what a person needs to recognise the item
|
|
71
|
+
* without fetching anything: who said it, where, and what they said.
|
|
72
|
+
*/
|
|
73
|
+
export interface QueuedThread {
|
|
74
|
+
/** Provider-scoped id, so the answer can be posted to it later. */
|
|
75
|
+
id: string;
|
|
76
|
+
/** Who opened it, when the provider says. */
|
|
77
|
+
author?: string;
|
|
78
|
+
/** Where it attaches, as a path and line when it has one. */
|
|
79
|
+
where?: string;
|
|
80
|
+
/** The opening remark, which is what is being answered. */
|
|
81
|
+
said: string;
|
|
82
|
+
}
|
|
83
|
+
/** One item on the queue. */
|
|
84
|
+
export interface QueuedFix {
|
|
85
|
+
/** Stable within a change, and what `record` is called with. */
|
|
86
|
+
findingId: number;
|
|
87
|
+
/**
|
|
88
|
+
* What the item is about.
|
|
89
|
+
*
|
|
90
|
+
* Optional only for the sake of ledgers written before threads
|
|
91
|
+
* could be queued; {@link subjectOf} fills it in from the older
|
|
92
|
+
* shape rather than making every reader handle both.
|
|
93
|
+
*/
|
|
94
|
+
subject?: FixSubject;
|
|
95
|
+
/**
|
|
96
|
+
* The finding, as the first version of this file stored it.
|
|
97
|
+
*
|
|
98
|
+
* Kept so an existing queue still reads. Nothing writes it now.
|
|
99
|
+
*/
|
|
100
|
+
finding?: Finding;
|
|
101
|
+
/** What whoever queued it knew about how to fix it. */
|
|
102
|
+
note?: string;
|
|
103
|
+
/** Absent while it is still pending. */
|
|
104
|
+
outcome?: FixOutcome;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* What an entry is about, however old the entry is.
|
|
108
|
+
*
|
|
109
|
+
* The migration lives here rather than in a one-shot rewrite of every
|
|
110
|
+
* file on disk. A queue is small, read often and written rarely, so
|
|
111
|
+
* adapting on read costs nothing and cannot half-finish. Returns
|
|
112
|
+
* undefined only for an entry that carries neither, which is a
|
|
113
|
+
* corrupt record rather than an old one.
|
|
114
|
+
*/
|
|
115
|
+
export declare function subjectOf(entry: QueuedFix): FixSubject | undefined;
|
|
116
|
+
/** A one-line description of what a queued item is, for a listing. */
|
|
117
|
+
export declare function describeSubject(entry: QueuedFix): string;
|
|
118
|
+
/** How the queue stands. */
|
|
119
|
+
export interface FixTally {
|
|
120
|
+
pending: number;
|
|
121
|
+
committed: number;
|
|
122
|
+
skipped: number;
|
|
123
|
+
/** Threads answered in the conversation, with no code change. */
|
|
124
|
+
answered: number;
|
|
125
|
+
}
|
|
126
|
+
/** The queue of fixes for a change. */
|
|
127
|
+
export interface FixQueue {
|
|
128
|
+
queue(change: ChangeRef, finding: Finding, note?: string): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Put somebody's remark on the worklist.
|
|
131
|
+
*
|
|
132
|
+
* Numbered in the same sequence as findings, because a person
|
|
133
|
+
* working through a morning's review does not care which half of
|
|
134
|
+
* the surface an item came from, and two numbering schemes on one
|
|
135
|
+
* change would make "item 4" ambiguous out loud. Answers the number
|
|
136
|
+
* it was given.
|
|
137
|
+
*/
|
|
138
|
+
queueThread(change: ChangeRef, thread: QueuedThread, note?: string): Promise<number>;
|
|
139
|
+
/** The oldest fix with no outcome yet. */
|
|
140
|
+
next(change: ChangeRef): Promise<QueuedFix | undefined>;
|
|
141
|
+
record(change: ChangeRef, findingId: number, outcome: FixOutcome): Promise<void>;
|
|
142
|
+
/** Everything ever queued, settled or not, in order. */
|
|
143
|
+
list(change: ChangeRef): Promise<QueuedFix[]>;
|
|
144
|
+
tally(change: ChangeRef): Promise<FixTally>;
|
|
145
|
+
}
|
|
146
|
+
/** A queue kept on disk, one file per change. */
|
|
147
|
+
export declare function createFixQueue(root: string): FixQueue;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Findings somebody decided to fix rather than say.
|
|
3
|
+
*
|
|
4
|
+
* A review produces two kinds of conclusion, and only one of them is a
|
|
5
|
+
* remark. The other is work: a finding you agree with on your own
|
|
6
|
+
* change is not something to post, it is something to go and do. This
|
|
7
|
+
* is where those wait.
|
|
8
|
+
*
|
|
9
|
+
* The walk is deliberately not autonomous. `next` says what to work on
|
|
10
|
+
* and nothing else; the editing, the checking and the commit happen in
|
|
11
|
+
* the caller's own loop, where a person can interrupt at any point.
|
|
12
|
+
* Then `record` says what became of it. A queue that applied its own
|
|
13
|
+
* fixes would be a queue nobody could stop halfway.
|
|
14
|
+
*
|
|
15
|
+
* Nothing is ever removed. A fix that was abandoned stays with the
|
|
16
|
+
* reason it was abandoned, because somebody deciding a finding was
|
|
17
|
+
* wrong is a judgement worth reading back, and a queue that forgets
|
|
18
|
+
* its refusals will offer the same finding again next week.
|
|
19
|
+
*
|
|
20
|
+
* Two kinds of thing land here, and for a while only one of them
|
|
21
|
+
* could. A finding is something a reviewer raised, ours or a model's.
|
|
22
|
+
* A thread is somebody else's remark on our change, waiting for an
|
|
23
|
+
* answer, and working through those is the commonest review journey
|
|
24
|
+
* there is: it is what a person does on the morning after a review.
|
|
25
|
+
* A queue that held only findings could not represent that day at
|
|
26
|
+
* all, so it was a worklist for the rarer half of the work.
|
|
27
|
+
*/
|
|
28
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
29
|
+
import { join } from "node:path";
|
|
30
|
+
import { changeKey } from "./keys.js";
|
|
31
|
+
/**
|
|
32
|
+
* What an entry is about, however old the entry is.
|
|
33
|
+
*
|
|
34
|
+
* The migration lives here rather than in a one-shot rewrite of every
|
|
35
|
+
* file on disk. A queue is small, read often and written rarely, so
|
|
36
|
+
* adapting on read costs nothing and cannot half-finish. Returns
|
|
37
|
+
* undefined only for an entry that carries neither, which is a
|
|
38
|
+
* corrupt record rather than an old one.
|
|
39
|
+
*/
|
|
40
|
+
export function subjectOf(entry) {
|
|
41
|
+
if (entry.subject !== undefined)
|
|
42
|
+
return entry.subject;
|
|
43
|
+
if (entry.finding !== undefined) {
|
|
44
|
+
return { kind: "finding", finding: entry.finding };
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
/** A one-line description of what a queued item is, for a listing. */
|
|
49
|
+
export function describeSubject(entry) {
|
|
50
|
+
const subject = subjectOf(entry);
|
|
51
|
+
if (subject === undefined)
|
|
52
|
+
return "an item with nothing recorded on it";
|
|
53
|
+
if (subject.kind === "finding")
|
|
54
|
+
return subject.finding.subject;
|
|
55
|
+
const { thread } = subject;
|
|
56
|
+
const who = thread.author === undefined ? "somebody" : thread.author;
|
|
57
|
+
const where = thread.where === undefined ? "" : ` on ${thread.where}`;
|
|
58
|
+
return `${who}${where}: ${thread.said}`;
|
|
59
|
+
}
|
|
60
|
+
/** A queue kept on disk, one file per change. */
|
|
61
|
+
export function createFixQueue(root) {
|
|
62
|
+
async function read(change) {
|
|
63
|
+
try {
|
|
64
|
+
const raw = await readFile(join(root, fileFor(change)), "utf8");
|
|
65
|
+
const parsed = JSON.parse(raw);
|
|
66
|
+
if (typeof parsed === "object" &&
|
|
67
|
+
parsed !== null &&
|
|
68
|
+
"fixes" in parsed &&
|
|
69
|
+
Array.isArray(parsed.fixes)) {
|
|
70
|
+
return { fixes: parsed.fixes };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// No file, or one nothing can read. Either way this change has
|
|
75
|
+
// nothing queued, which is an answer rather than a failure.
|
|
76
|
+
}
|
|
77
|
+
return { fixes: [] };
|
|
78
|
+
}
|
|
79
|
+
async function write(change, ledger) {
|
|
80
|
+
await mkdir(root, { recursive: true });
|
|
81
|
+
await writeFile(join(root, fileFor(change)), JSON.stringify(ledger, null, 2), "utf8");
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
async queue(change, finding, note) {
|
|
85
|
+
const ledger = await read(change);
|
|
86
|
+
if (ledger.fixes.some((one) => one.findingId === finding.id)) {
|
|
87
|
+
// Queued twice means fixed twice, or worse, fixed once and
|
|
88
|
+
// then reported as still outstanding.
|
|
89
|
+
throw new Error(`Finding ${finding.id} is already queued for fixing on ${change.label}.`);
|
|
90
|
+
}
|
|
91
|
+
ledger.fixes.push({
|
|
92
|
+
findingId: finding.id,
|
|
93
|
+
subject: { kind: "finding", finding },
|
|
94
|
+
...(note === undefined || note.trim() === ""
|
|
95
|
+
? {}
|
|
96
|
+
: { note: note.trim() }),
|
|
97
|
+
});
|
|
98
|
+
await write(change, ledger);
|
|
99
|
+
},
|
|
100
|
+
async queueThread(change, thread, note) {
|
|
101
|
+
const ledger = await read(change);
|
|
102
|
+
const already = ledger.fixes.find((one) => {
|
|
103
|
+
const subject = subjectOf(one);
|
|
104
|
+
return subject?.kind === "thread" && subject.thread.id === thread.id;
|
|
105
|
+
});
|
|
106
|
+
if (already) {
|
|
107
|
+
// Same reasoning as a finding queued twice, and more likely
|
|
108
|
+
// here: a caller sweeping unresolved threads will sweep the
|
|
109
|
+
// same ones again tomorrow.
|
|
110
|
+
throw new Error(`That thread is already on the worklist for ${change.label}, as item ${already.findingId}.`);
|
|
111
|
+
}
|
|
112
|
+
// One sequence for both kinds. Findings carry numbers minted by
|
|
113
|
+
// the finding store, so this takes the next number above
|
|
114
|
+
// everything present rather than counting its own entries,
|
|
115
|
+
// which would collide the moment a finding was queued after it.
|
|
116
|
+
const id = ledger.fixes.reduce((top, one) => Math.max(top, one.findingId), 0) + 1;
|
|
117
|
+
ledger.fixes.push({
|
|
118
|
+
findingId: id,
|
|
119
|
+
subject: { kind: "thread", thread },
|
|
120
|
+
...(note === undefined || note.trim() === ""
|
|
121
|
+
? {}
|
|
122
|
+
: { note: note.trim() }),
|
|
123
|
+
});
|
|
124
|
+
await write(change, ledger);
|
|
125
|
+
return id;
|
|
126
|
+
},
|
|
127
|
+
async next(change) {
|
|
128
|
+
const { fixes } = await read(change);
|
|
129
|
+
// Insertion order, so the same queue read twice is the same
|
|
130
|
+
// queue. A reader who saw a list and then asked for the next
|
|
131
|
+
// one should get the one they were looking at.
|
|
132
|
+
return fixes.find((one) => one.outcome === undefined);
|
|
133
|
+
},
|
|
134
|
+
async record(change, findingId, outcome) {
|
|
135
|
+
const ledger = await read(change);
|
|
136
|
+
const held = ledger.fixes.find((one) => one.findingId === findingId);
|
|
137
|
+
if (held === undefined) {
|
|
138
|
+
throw new Error(`Finding ${findingId} is not queued for fixing on ${change.label}, so there is nothing to record against it.`);
|
|
139
|
+
}
|
|
140
|
+
if (held.outcome !== undefined) {
|
|
141
|
+
// The first answer is the true one. Overwriting would let a
|
|
142
|
+
// later mistake erase a commit that really happened.
|
|
143
|
+
throw new Error(`Finding ${findingId} was already recorded as ${held.outcome.kind}. Reopen it by queueing the follow-up as its own finding.`);
|
|
144
|
+
}
|
|
145
|
+
held.outcome = outcome;
|
|
146
|
+
await write(change, ledger);
|
|
147
|
+
},
|
|
148
|
+
async list(change) {
|
|
149
|
+
return (await read(change)).fixes;
|
|
150
|
+
},
|
|
151
|
+
async tally(change) {
|
|
152
|
+
const { fixes } = await read(change);
|
|
153
|
+
return {
|
|
154
|
+
pending: fixes.filter((one) => one.outcome === undefined).length,
|
|
155
|
+
committed: fixes.filter((one) => one.outcome?.kind === "committed")
|
|
156
|
+
.length,
|
|
157
|
+
skipped: fixes.filter((one) => one.outcome?.kind === "skipped").length,
|
|
158
|
+
answered: fixes.filter((one) => one.outcome?.kind === "answered")
|
|
159
|
+
.length,
|
|
160
|
+
};
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* File name for a change's queue.
|
|
166
|
+
*
|
|
167
|
+
* Folded to something safe, so a change key carrying a slash or a pair
|
|
168
|
+
* of dots cannot name a path outside the queue directory.
|
|
169
|
+
*/
|
|
170
|
+
function fileFor(change) {
|
|
171
|
+
const safe = changeKey(change)
|
|
172
|
+
.replace(/[^A-Za-z0-9._-]/g, "_")
|
|
173
|
+
.replace(/^\.+/, "_");
|
|
174
|
+
return `${safe}.json`;
|
|
175
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coming back to a change you have already reviewed.
|
|
3
|
+
*
|
|
4
|
+
* The audit round asks where an inbound thread stands: somebody remarked on my
|
|
5
|
+
* change and I need to answer honestly. This is the mirror, and it was missing.
|
|
6
|
+
* I left findings on somebody else's change, they pushed, and the question is
|
|
7
|
+
* whether they addressed them or simply resolved the thread. Those two look
|
|
8
|
+
* identical in a thread listing, and only one of them is fine.
|
|
9
|
+
*
|
|
10
|
+
* It is deliberately a computation rather than a round. No model is needed to
|
|
11
|
+
* notice that a thread was closed with no reply and no change to the code under
|
|
12
|
+
* it. Asking one would be slower, more expensive and less certain, and it would
|
|
13
|
+
* dress a fact up as a judgement.
|
|
14
|
+
*
|
|
15
|
+
* What it cannot do is say whether the change was the *right* change. That needs
|
|
16
|
+
* reading the diff, which is a review, and this is the thing that tells you
|
|
17
|
+
* which threads are worth re-reading.
|
|
18
|
+
*/
|
|
19
|
+
import type { Actor } from "./change.js";
|
|
20
|
+
import type { Thread } from "./conversation.js";
|
|
21
|
+
/**
|
|
22
|
+
* How one of my remarks was received, now the change has moved on.
|
|
23
|
+
*
|
|
24
|
+
* Called a reception rather than a standing because the audit round already
|
|
25
|
+
* owns that word for the opposite direction: where an inbound thread stands
|
|
26
|
+
* against my change. Two different questions sharing one noun would make every
|
|
27
|
+
* later reader check which one they were holding.
|
|
28
|
+
*/
|
|
29
|
+
export type Reception =
|
|
30
|
+
/** Somebody replied after my last remark. Read it. */
|
|
31
|
+
"answered"
|
|
32
|
+
/** The anchor no longer describes the change, so something moved under it. */
|
|
33
|
+
| "changed"
|
|
34
|
+
/**
|
|
35
|
+
* Closed with no reply, and nothing here shows the code moved.
|
|
36
|
+
*
|
|
37
|
+
* The one worth looking at, and worth stating carefully. It does not claim
|
|
38
|
+
* the code is unchanged, because that is not knowable from a thread: a
|
|
39
|
+
* remark can be answered by a conversation elsewhere, or be wrong, or be
|
|
40
|
+
* about something the author decided against. What it says is narrower and
|
|
41
|
+
* still useful: the thread says settled and nothing in the thread supports
|
|
42
|
+
* that, so it is the one to re-read.
|
|
43
|
+
*/
|
|
44
|
+
| "resolved-quietly"
|
|
45
|
+
/** Still open and nobody has replied. */
|
|
46
|
+
| "waiting"
|
|
47
|
+
/** Not one of mine, so there is nothing to say about it. */
|
|
48
|
+
| "unknown";
|
|
49
|
+
/** One of my threads, and how it was received. */
|
|
50
|
+
export interface FollowUp {
|
|
51
|
+
thread: Thread;
|
|
52
|
+
reception: Reception;
|
|
53
|
+
/** Said in words, for a listing. */
|
|
54
|
+
because: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* How one thread was received, for the actor who remarked on it.
|
|
58
|
+
*
|
|
59
|
+
* Order matters. A reply is the strongest signal, because somebody wrote words
|
|
60
|
+
* aimed at the remark; a moved anchor is next, because something happened even
|
|
61
|
+
* if nobody said so. Quiet is only reported once neither of those is true.
|
|
62
|
+
*
|
|
63
|
+
* What this deliberately does **not** do is read `stale: false` as "the code did
|
|
64
|
+
* not move". Those are different claims, and the backends prove it: GitHub's
|
|
65
|
+
* flag is whether the diff hunk is still present, so false does correlate with
|
|
66
|
+
* unchanged code, while Meteorite reports false always, because its server keeps
|
|
67
|
+
* the witness commit reachable and an anchor there can never strand. Inferring
|
|
68
|
+
* "nothing changed" from that would accuse an author who fixed the code of
|
|
69
|
+
* closing a thread and ignoring it, on the backend where most of this work
|
|
70
|
+
* happens. So a positive `stale` is evidence and its absence is not evidence of
|
|
71
|
+
* the opposite.
|
|
72
|
+
*/
|
|
73
|
+
export declare function receptionOf(thread: Thread, viewer: Actor): Reception;
|
|
74
|
+
/**
|
|
75
|
+
* My threads on a change, and where each stands.
|
|
76
|
+
*
|
|
77
|
+
* Only threads I spoke in, since a thread I never joined is somebody else's
|
|
78
|
+
* conversation and belongs to the audit round instead. Ordered so the ones
|
|
79
|
+
* worth attention come first: a thread closed in silence, then one waiting, then
|
|
80
|
+
* the ones something has already happened to.
|
|
81
|
+
*/
|
|
82
|
+
export declare function followUpOn(threads: readonly Thread[], viewer: Actor): readonly FollowUp[];
|
|
83
|
+
/** How many of each reception, for a one-line summary. */
|
|
84
|
+
export declare function tallyReceptions(found: readonly FollowUp[]): Partial<Record<Reception, number>>;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coming back to a change you have already reviewed.
|
|
3
|
+
*
|
|
4
|
+
* The audit round asks where an inbound thread stands: somebody remarked on my
|
|
5
|
+
* change and I need to answer honestly. This is the mirror, and it was missing.
|
|
6
|
+
* I left findings on somebody else's change, they pushed, and the question is
|
|
7
|
+
* whether they addressed them or simply resolved the thread. Those two look
|
|
8
|
+
* identical in a thread listing, and only one of them is fine.
|
|
9
|
+
*
|
|
10
|
+
* It is deliberately a computation rather than a round. No model is needed to
|
|
11
|
+
* notice that a thread was closed with no reply and no change to the code under
|
|
12
|
+
* it. Asking one would be slower, more expensive and less certain, and it would
|
|
13
|
+
* dress a fact up as a judgement.
|
|
14
|
+
*
|
|
15
|
+
* What it cannot do is say whether the change was the *right* change. That needs
|
|
16
|
+
* reading the diff, which is a review, and this is the thing that tells you
|
|
17
|
+
* which threads are worth re-reading.
|
|
18
|
+
*/
|
|
19
|
+
/** Whether two actors are the same person, as this backend names them. */
|
|
20
|
+
function same(one, other) {
|
|
21
|
+
// Ids only. A display name is not an identity: two people share one, and
|
|
22
|
+
// one person changes theirs, and matching on it eventually attributes
|
|
23
|
+
// somebody else's remark to you.
|
|
24
|
+
return one.id === other.id;
|
|
25
|
+
}
|
|
26
|
+
/** The last comment in a thread written by this actor. */
|
|
27
|
+
function lastFrom(thread, who) {
|
|
28
|
+
let at = -1;
|
|
29
|
+
thread.comments.forEach((comment, index) => {
|
|
30
|
+
if (same(comment.author, who))
|
|
31
|
+
at = index;
|
|
32
|
+
});
|
|
33
|
+
return at;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* How one thread was received, for the actor who remarked on it.
|
|
37
|
+
*
|
|
38
|
+
* Order matters. A reply is the strongest signal, because somebody wrote words
|
|
39
|
+
* aimed at the remark; a moved anchor is next, because something happened even
|
|
40
|
+
* if nobody said so. Quiet is only reported once neither of those is true.
|
|
41
|
+
*
|
|
42
|
+
* What this deliberately does **not** do is read `stale: false` as "the code did
|
|
43
|
+
* not move". Those are different claims, and the backends prove it: GitHub's
|
|
44
|
+
* flag is whether the diff hunk is still present, so false does correlate with
|
|
45
|
+
* unchanged code, while Meteorite reports false always, because its server keeps
|
|
46
|
+
* the witness commit reachable and an anchor there can never strand. Inferring
|
|
47
|
+
* "nothing changed" from that would accuse an author who fixed the code of
|
|
48
|
+
* closing a thread and ignoring it, on the backend where most of this work
|
|
49
|
+
* happens. So a positive `stale` is evidence and its absence is not evidence of
|
|
50
|
+
* the opposite.
|
|
51
|
+
*/
|
|
52
|
+
export function receptionOf(thread, viewer) {
|
|
53
|
+
const mine = lastFrom(thread, viewer);
|
|
54
|
+
if (mine === -1)
|
|
55
|
+
return "unknown";
|
|
56
|
+
const after = thread.comments.slice(mine + 1);
|
|
57
|
+
if (after.some((comment) => !same(comment.author, viewer))) {
|
|
58
|
+
return "answered";
|
|
59
|
+
}
|
|
60
|
+
if (thread.stale === true)
|
|
61
|
+
return "changed";
|
|
62
|
+
return thread.resolved ? "resolved-quietly" : "waiting";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Why a reception reads the way it does, in words a listing can print.
|
|
66
|
+
*
|
|
67
|
+
* The wording carries the uncertainty, which is where it belongs. A quiet
|
|
68
|
+
* resolution reads differently depending on whether the backend says anything
|
|
69
|
+
* about the anchor at all, and saying which of the two you are looking at is the
|
|
70
|
+
* difference between a reader who checks and a reader who accuses.
|
|
71
|
+
*/
|
|
72
|
+
function becauseOf(reception, thread) {
|
|
73
|
+
switch (reception) {
|
|
74
|
+
case "answered":
|
|
75
|
+
return "somebody replied after your remark";
|
|
76
|
+
case "changed":
|
|
77
|
+
return "the anchor no longer describes the change, so something moved under it";
|
|
78
|
+
case "resolved-quietly": {
|
|
79
|
+
const who = thread.resolvedBy === undefined
|
|
80
|
+
? "resolved"
|
|
81
|
+
: `resolved by ${thread.resolvedBy.name ?? thread.resolvedBy.id}`;
|
|
82
|
+
return thread.stale === undefined
|
|
83
|
+
? `${who} with no reply, and this backend does not say whether the code moved`
|
|
84
|
+
: `${who} with no reply, and the anchor still describes the change`;
|
|
85
|
+
}
|
|
86
|
+
case "waiting":
|
|
87
|
+
return "still open, and nobody has replied";
|
|
88
|
+
case "unknown":
|
|
89
|
+
return "you have not spoken in this thread";
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* My threads on a change, and where each stands.
|
|
94
|
+
*
|
|
95
|
+
* Only threads I spoke in, since a thread I never joined is somebody else's
|
|
96
|
+
* conversation and belongs to the audit round instead. Ordered so the ones
|
|
97
|
+
* worth attention come first: a thread closed in silence, then one waiting, then
|
|
98
|
+
* the ones something has already happened to.
|
|
99
|
+
*/
|
|
100
|
+
export function followUpOn(threads, viewer) {
|
|
101
|
+
const rank = {
|
|
102
|
+
"resolved-quietly": 0,
|
|
103
|
+
waiting: 1,
|
|
104
|
+
answered: 2,
|
|
105
|
+
changed: 3,
|
|
106
|
+
unknown: 4,
|
|
107
|
+
};
|
|
108
|
+
return threads
|
|
109
|
+
.filter((thread) => lastFrom(thread, viewer) !== -1)
|
|
110
|
+
.map((thread) => {
|
|
111
|
+
const reception = receptionOf(thread, viewer);
|
|
112
|
+
return { thread, reception, because: becauseOf(reception, thread) };
|
|
113
|
+
})
|
|
114
|
+
.sort((one, other) => rank[one.reception] - rank[other.reception]);
|
|
115
|
+
}
|
|
116
|
+
/** How many of each reception, for a one-line summary. */
|
|
117
|
+
export function tallyReceptions(found) {
|
|
118
|
+
const counted = {};
|
|
119
|
+
for (const one of found) {
|
|
120
|
+
counted[one.reception] = (counted[one.reception] ?? 0) + 1;
|
|
121
|
+
}
|
|
122
|
+
return counted;
|
|
123
|
+
}
|