@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,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asking a whole roster at once.
|
|
3
|
+
*
|
|
4
|
+
* Participants are asked concurrently, because the wait is the whole
|
|
5
|
+
* cost and there is no reason for six models to queue. Their
|
|
6
|
+
* findings are recorded **in roster order** regardless of who
|
|
7
|
+
* answered first, because people say finding numbers out loud and a
|
|
8
|
+
* number that depends on which model happened to be quickest would
|
|
9
|
+
* make the same run describe itself differently every time.
|
|
10
|
+
*
|
|
11
|
+
* Nothing one participant does can take the round down. A failure
|
|
12
|
+
* reported by the runner and an exception thrown by it are the same
|
|
13
|
+
* event seen from two sides, and both are recorded against that
|
|
14
|
+
* participant so the rest of the round survives. Losing five good
|
|
15
|
+
* reviews to one unavailable model would be the worst possible
|
|
16
|
+
* trade, given what a round costs to run.
|
|
17
|
+
*/
|
|
18
|
+
import { count } from "../../ui/count.js";
|
|
19
|
+
import { alsoRecorded, harvestFindings } from "./harvest.js";
|
|
20
|
+
import { participantIdentity } from "./identity.js";
|
|
21
|
+
import { noAskProgress, settleReplies } from "./progress.js";
|
|
22
|
+
import { newRunId, whatItGave, whatItRead, } from "./run.js";
|
|
23
|
+
/**
|
|
24
|
+
* Ask every reviewer at once and hand the answers back in roster
|
|
25
|
+
* order.
|
|
26
|
+
*
|
|
27
|
+
* Shared with the stack round rather than written twice, because this
|
|
28
|
+
* is the part with the rules in it: concurrent asking, a thrown error
|
|
29
|
+
* and a reported one becoming the same thing, and the ordering that
|
|
30
|
+
* makes finding numbers stable. A stack round differs in what a reply
|
|
31
|
+
* *means*, not in how a roster is asked, and if the ordering rule ever
|
|
32
|
+
* changes both rounds have to change with it.
|
|
33
|
+
*/
|
|
34
|
+
export async function askRoster(roster, prompt, runId, deps) {
|
|
35
|
+
const progress = deps.progress ?? noAskProgress;
|
|
36
|
+
progress.start(roster.reviewers);
|
|
37
|
+
return await Promise.all(roster.reviewers.map(async (participant) => {
|
|
38
|
+
progress.started(participant.id);
|
|
39
|
+
const answer = await asked(participant, prompt, deps, {
|
|
40
|
+
runId,
|
|
41
|
+
report: (activity) => progress.activity(participant.id, activity),
|
|
42
|
+
});
|
|
43
|
+
// A failure the runner hands back and one it throws are the
|
|
44
|
+
// same event to somebody watching a board.
|
|
45
|
+
if ("failure" in answer)
|
|
46
|
+
progress.failed(participant.id, answer.failure);
|
|
47
|
+
else
|
|
48
|
+
progress.answered(participant.id);
|
|
49
|
+
return { participant, answer };
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Ask one participant, reported the same way a roster is.
|
|
54
|
+
*
|
|
55
|
+
* A round with a single participant is still a round somebody is waiting
|
|
56
|
+
* on, and the wait is no shorter for being one subagent: a judge
|
|
57
|
+
* consolidating sixty findings takes as long as the council that raised
|
|
58
|
+
* them. Reporting was left to each round to remember, and the judge did
|
|
59
|
+
* not, so it ran to completion showing nothing at all.
|
|
60
|
+
*
|
|
61
|
+
* Beside `askRoster` rather than inside it, because a fan-out of one is
|
|
62
|
+
* not what this is: there is no ordering rule to share and no concurrency
|
|
63
|
+
* to arrange. What the two have in common is the beats they report, and
|
|
64
|
+
* this is the place that says what those are for one participant.
|
|
65
|
+
*/
|
|
66
|
+
export async function askOne(participant, prompt, runId, deps) {
|
|
67
|
+
const progress = deps.progress ?? noAskProgress;
|
|
68
|
+
progress.start([participant]);
|
|
69
|
+
progress.started(participant.id);
|
|
70
|
+
const answer = await asked(participant, prompt, deps, {
|
|
71
|
+
runId,
|
|
72
|
+
report: (activity) => progress.activity(participant.id, activity),
|
|
73
|
+
});
|
|
74
|
+
// A failure the runner hands back and one it throws are the same event
|
|
75
|
+
// to somebody watching a board.
|
|
76
|
+
if ("failure" in answer)
|
|
77
|
+
progress.failed(participant.id, answer.failure);
|
|
78
|
+
else
|
|
79
|
+
progress.answered(participant.id);
|
|
80
|
+
return answer;
|
|
81
|
+
}
|
|
82
|
+
/** Ask a roster about a change and record what it says. */
|
|
83
|
+
export async function runCouncil(request, deps) {
|
|
84
|
+
const opening = openingRun(request, deps.now());
|
|
85
|
+
const { id, round, participants } = opening;
|
|
86
|
+
const startedAt = opening.startedAt;
|
|
87
|
+
// What this round says about itself beyond its own outcomes: the
|
|
88
|
+
// tree its reviewers read, and the conditions they read it under.
|
|
89
|
+
//
|
|
90
|
+
// Taken off the opening record rather than computed again from the
|
|
91
|
+
// request. The two are written three hundred lines apart and have to
|
|
92
|
+
// agree, and a second call agrees only for as long as nobody edits
|
|
93
|
+
// one of the two sites: reading it back from what was already
|
|
94
|
+
// written down makes disagreement impossible rather than unlikely.
|
|
95
|
+
const provenance = { ...whatItRead(opening), ...whatItGave(opening) };
|
|
96
|
+
// Written down before anything is asked, because everything after
|
|
97
|
+
// this line costs money and takes minutes, and until now the round
|
|
98
|
+
// was recorded only once it was over. A session that died halfway
|
|
99
|
+
// through left seven reviewer directories on disk and nothing
|
|
100
|
+
// saying which change they belonged to or that they were ever a
|
|
101
|
+
// round.
|
|
102
|
+
//
|
|
103
|
+
// Guarded here rather than trusted to each caller. The docstring
|
|
104
|
+
// on the callback promises a round is worth more than the
|
|
105
|
+
// bookkeeping around it, and awaiting it bare put that promise in
|
|
106
|
+
// the hands of whoever implements it: one that throws would take
|
|
107
|
+
// the council down before a single reviewer was dispatched. The
|
|
108
|
+
// seam is public, so the first caller in another package would
|
|
109
|
+
// have found that out the expensive way.
|
|
110
|
+
try {
|
|
111
|
+
await deps.opened?.(opening);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Nothing to say to: the round has not started, so there is no
|
|
115
|
+
// warnings list yet. The cost is that an interrupted round may
|
|
116
|
+
// not be findable, which is what it was before this existed.
|
|
117
|
+
}
|
|
118
|
+
const replies = await askRoster(request.roster, request.prompt, id, deps);
|
|
119
|
+
const warnings = [];
|
|
120
|
+
const outcomes = await settleReplies(replies, (reply) => recordReply(reply, { runId: id, ...whatItRead(request) }, deps, warnings), (outcome) => ({
|
|
121
|
+
participantId: outcome.participantId,
|
|
122
|
+
findings: outcome.findingIds.length,
|
|
123
|
+
}), deps.progress);
|
|
124
|
+
return {
|
|
125
|
+
run: {
|
|
126
|
+
id,
|
|
127
|
+
round,
|
|
128
|
+
startedAt,
|
|
129
|
+
participants,
|
|
130
|
+
outcomes,
|
|
131
|
+
...provenance,
|
|
132
|
+
// No `open`, which is what settles it: the field is present
|
|
133
|
+
// only while a round is unfinished.
|
|
134
|
+
},
|
|
135
|
+
warnings,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* A round at the moment it exists and nobody has been asked.
|
|
140
|
+
*
|
|
141
|
+
* Shared by the runner that waits for a round and the one that walks
|
|
142
|
+
* away from it, because a round's identity is one concept and two
|
|
143
|
+
* copies of it would drift. A detached round is collected back into
|
|
144
|
+
* the same listing as a live one, so an id minted differently, or a
|
|
145
|
+
* participant identified differently, would show up as two kinds of
|
|
146
|
+
* round rather than one round run two ways.
|
|
147
|
+
*/
|
|
148
|
+
export function openingRun(request, startedAt) {
|
|
149
|
+
const round = request.round ?? "council";
|
|
150
|
+
return {
|
|
151
|
+
id: newRunId(round, startedAt, request.seq),
|
|
152
|
+
round,
|
|
153
|
+
startedAt: startedAt.toISOString(),
|
|
154
|
+
participants: request.roster.reviewers.map((participant) => participantIdentity("reviewer", participant)),
|
|
155
|
+
outcomes: [],
|
|
156
|
+
open: true,
|
|
157
|
+
...whatItRead(request),
|
|
158
|
+
...whatItGave(request),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Ask one participant, turning a thrown error into a reported one.
|
|
163
|
+
*
|
|
164
|
+
* A runner that rejects and one that answers with a failure are the
|
|
165
|
+
* same event, and a caller downstream should not have to care which
|
|
166
|
+
* shape it arrived in.
|
|
167
|
+
*/
|
|
168
|
+
async function asked(participant, prompt, deps, context) {
|
|
169
|
+
try {
|
|
170
|
+
return await deps.ask(participant, prompt, context);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return { failure: thrownAt(error) };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* What was thrown, said well enough to act on.
|
|
178
|
+
*
|
|
179
|
+
* A failure a runner reports is a sentence somebody wrote for a
|
|
180
|
+
* person, and it is left exactly as it is. A failure that was thrown
|
|
181
|
+
* is usually nobody's sentence: it is a message the runtime wrote,
|
|
182
|
+
* and on its own it does not say what kind of fault it was or where
|
|
183
|
+
* it happened.
|
|
184
|
+
*
|
|
185
|
+
* Measured, on a council that lost all seven reviewers to one
|
|
186
|
+
* TypeError. The ledger held "Cannot read properties of undefined
|
|
187
|
+
* (reading 'split')" and nothing else, which is true of every call to
|
|
188
|
+
* split in the dispatch path, so the diagnosis was an afternoon of
|
|
189
|
+
* reading them. The round is the expensive thing here and the ledger
|
|
190
|
+
* is what survives it, so the ledger has to carry enough to name the
|
|
191
|
+
* line.
|
|
192
|
+
*
|
|
193
|
+
* One frame, not the whole stack. The rest is this file's own
|
|
194
|
+
* machinery on every occasion, and a ledger entry is read in a table.
|
|
195
|
+
*
|
|
196
|
+
* A cause is carried when there is one. An error wrapped in another
|
|
197
|
+
* says the same little as the message this exists to improve on: the
|
|
198
|
+
* outer sentence names the layer that gave up and the inner one names
|
|
199
|
+
* what actually happened.
|
|
200
|
+
*/
|
|
201
|
+
export function thrownAt(error) {
|
|
202
|
+
// A thrown object that is not an Error still usually says
|
|
203
|
+
// something, and `String` of one is "[object Object]", the worst
|
|
204
|
+
// answer available: it names neither what was thrown nor where.
|
|
205
|
+
// Measured on the detached path, where a health check threw a
|
|
206
|
+
// plain record and seven reviewers were reported that way.
|
|
207
|
+
if (!(error instanceof Error))
|
|
208
|
+
return said(error) ?? String(error);
|
|
209
|
+
const kind = error.name === "Error" ? "" : `${error.name}: `;
|
|
210
|
+
const frame = firstFrame(error.stack, `${error.name}: ${error.message}`);
|
|
211
|
+
const where = frame === undefined ? "" : ` (${frame})`;
|
|
212
|
+
const cause = error.cause instanceof Error ? `, caused by ${thrownAt(error.cause)}` : "";
|
|
213
|
+
return `${kind}${error.message}${where}${cause}`;
|
|
214
|
+
}
|
|
215
|
+
/** Whatever a thrown non-Error has to say for itself. */
|
|
216
|
+
function said(thrown) {
|
|
217
|
+
if (typeof thrown !== "object" || thrown === null)
|
|
218
|
+
return undefined;
|
|
219
|
+
const { message } = thrown;
|
|
220
|
+
return typeof message === "string" && message !== "" ? message : undefined;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* The innermost frame of a stack, trimmed of its noise.
|
|
224
|
+
*
|
|
225
|
+
* The message is skipped rather than parsed past. A stack begins with
|
|
226
|
+
* the message, a message is free text, and one quoting a stack of its
|
|
227
|
+
* own is exactly what a failed subprocess hands back: its lines are
|
|
228
|
+
* shape-identical to real frames, so no pattern can tell them apart
|
|
229
|
+
* and the first quoted line would be reported as the place this error
|
|
230
|
+
* came from. What can be told apart is where the message ends, since
|
|
231
|
+
* the runtime wrote both.
|
|
232
|
+
*
|
|
233
|
+
* A frame still has to carry a location, for a runtime that leaves the
|
|
234
|
+
* message off the stack entirely and leaves nothing to skip.
|
|
235
|
+
*
|
|
236
|
+
* The path is said relative to where the process is running, when it
|
|
237
|
+
* is under it. An absolute path is somebody's home directory, and this
|
|
238
|
+
* string is read back by a model, shown on a panel and kept in a
|
|
239
|
+
* ledger that outlives the round.
|
|
240
|
+
*/
|
|
241
|
+
function firstFrame(stack, header) {
|
|
242
|
+
if (stack === undefined)
|
|
243
|
+
return undefined;
|
|
244
|
+
const frames = stack.startsWith(header) ? stack.slice(header.length) : stack;
|
|
245
|
+
for (const line of frames.split("\n")) {
|
|
246
|
+
const trimmed = line.trim();
|
|
247
|
+
// Node writes a frame as "at name (file:line:col)" or, with no
|
|
248
|
+
// name to give, "at file:line:col". Either is worth keeping
|
|
249
|
+
// whole: the name says what was running and the location says
|
|
250
|
+
// where to look, and neither is much use alone.
|
|
251
|
+
if (!/^at .*:\d+:\d+\)?$/.test(trimmed))
|
|
252
|
+
continue;
|
|
253
|
+
return shortenPaths(trimmed.slice("at ".length));
|
|
254
|
+
}
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
/** The same frame, without the part of the path that is somebody's home. */
|
|
258
|
+
function shortenPaths(frame) {
|
|
259
|
+
const root = process.cwd();
|
|
260
|
+
return root === "/" ? frame : frame.split(`${root}/`).join("");
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* What to say about a reviewer we stopped.
|
|
264
|
+
*
|
|
265
|
+
* It names what was kept as well as what ended it, because those are
|
|
266
|
+
* two different decisions for the reader: whether to trust the pass,
|
|
267
|
+
* and whether to give it more room next time.
|
|
268
|
+
*/
|
|
269
|
+
/** Whichever reading of a participant's words found more. */
|
|
270
|
+
function richer(said, earlier) {
|
|
271
|
+
if (earlier === undefined)
|
|
272
|
+
return said;
|
|
273
|
+
return earlier.findings.length > said.findings.length ? earlier : said;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* What to say about a participant that did not get to finish.
|
|
277
|
+
*
|
|
278
|
+
* Shared with the stack round, which is the round most likely to be
|
|
279
|
+
* stopped and was saying nothing about it at all: it pushed the
|
|
280
|
+
* harvest's own warnings through, so a reviewer we interrupted was
|
|
281
|
+
* reported as having written a malformed answer.
|
|
282
|
+
*/
|
|
283
|
+
export function stopWarning(stop, kept, cutOff) {
|
|
284
|
+
const held = kept === 0
|
|
285
|
+
? "Nothing had been read from it yet"
|
|
286
|
+
: `${count(kept, "finding")} had been read from it first`;
|
|
287
|
+
// A soft deadline is the round working as intended, so it does not
|
|
288
|
+
// get the sentence written for a reviewer that was cut off. Saying
|
|
289
|
+
// "stopped before it finished" about a reviewer we deliberately
|
|
290
|
+
// asked early would report our own design as an incident, and a
|
|
291
|
+
// reader who saw that on seven participants would go looking for
|
|
292
|
+
// the fault.
|
|
293
|
+
//
|
|
294
|
+
// It still gets the cut-off clause. Being asked early does not
|
|
295
|
+
// stop an answer being truncated on the way out, and that clause
|
|
296
|
+
// is the only thing that says how much is missing. Returning
|
|
297
|
+
// before it threw the sentence away in the case it was written
|
|
298
|
+
// for.
|
|
299
|
+
if (stop.limit === "soft-deadline") {
|
|
300
|
+
return `asked to wrap up early so it had time to answer: ${stop.detail} ${held}, so treat this pass as partial.${cutOff ? CUT_OFF : ""}`;
|
|
301
|
+
}
|
|
302
|
+
// Said here rather than left in the harvest's own warnings, which
|
|
303
|
+
// this branch replaces. Those describe the shape of the text and
|
|
304
|
+
// would blame the reviewer for our deadline; this one is about our
|
|
305
|
+
// deadline, and dropping it was hiding the fact in the exact case
|
|
306
|
+
// it was written for.
|
|
307
|
+
const cut = cutOff ? CUT_OFF : "";
|
|
308
|
+
return `stopped before it finished (${stop.limit}): ${stop.detail} ${held}, so treat this pass as partial.${cut}`;
|
|
309
|
+
}
|
|
310
|
+
/** Said whenever an answer stopped mid-entry, however it stopped. */
|
|
311
|
+
const CUT_OFF = " Its answer was cut off mid-entry, so what it was writing when it stopped is gone and there is no telling how much more there would have been.";
|
|
312
|
+
/**
|
|
313
|
+
* Harvest one reply, record what it held, and say how it went.
|
|
314
|
+
*
|
|
315
|
+
* Shared with collecting a round afterwards rather than written
|
|
316
|
+
* twice, because this is the part with the rules in it: reading a
|
|
317
|
+
* fragment against a wrap-up, folding in what was recorded, and
|
|
318
|
+
* deciding which warnings belong to the reviewer rather than to our
|
|
319
|
+
* deadline. A collected answer is the same answer arriving late, and
|
|
320
|
+
* a second copy of these rules would drift from this one.
|
|
321
|
+
*/
|
|
322
|
+
export async function recordReply(reply, run, deps, warnings) {
|
|
323
|
+
const { participant, answer } = reply;
|
|
324
|
+
if ("failure" in answer) {
|
|
325
|
+
return {
|
|
326
|
+
participantId: participant.id,
|
|
327
|
+
findingIds: [],
|
|
328
|
+
failure: answer.failure,
|
|
329
|
+
...(answer.advisory === undefined ? {} : { advisory: answer.advisory }),
|
|
330
|
+
...(answer.usage === undefined ? {} : { usage: answer.usage }),
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
const origin = {
|
|
334
|
+
kind: "reviewer",
|
|
335
|
+
runId: run.runId,
|
|
336
|
+
reviewerId: participant.id,
|
|
337
|
+
};
|
|
338
|
+
// A stopped reviewer can have said something twice: once as the
|
|
339
|
+
// fragment it was cut off in, and once when asked afterwards for
|
|
340
|
+
// what it had. Read both and keep whichever carried more, since the
|
|
341
|
+
// wrap-up is asked for only what the reviewer was sure of and may
|
|
342
|
+
// honestly be the shorter of the two. Ties go to the later answer,
|
|
343
|
+
// which is the considered one.
|
|
344
|
+
// The harvest is handed what the round read, not a commit, so it
|
|
345
|
+
// is the harvest that decides whether an anchor may claim one.
|
|
346
|
+
const harvest = alsoRecorded(richer(harvestFindings(answer.text, origin, run), answer.earlierText === undefined
|
|
347
|
+
? undefined
|
|
348
|
+
: harvestFindings(answer.earlierText, origin, run)), answer.recorded, origin, run);
|
|
349
|
+
// A stopped reviewer answers for its own harvest warnings. Those
|
|
350
|
+
// warnings describe the shape of the text, and the text is a
|
|
351
|
+
// sentence we interrupted, so passing them on blames the reviewer
|
|
352
|
+
// for our deadline and tells the reader to fix the wrong thing.
|
|
353
|
+
//
|
|
354
|
+
// A warning about something it recorded is not that. That is a whole
|
|
355
|
+
// line the reviewer wrote deliberately, minutes before the stop, and
|
|
356
|
+
// it failed the contract on its own merits. Dropping it would be the
|
|
357
|
+
// silent drop this module opens by refusing to make: the reader
|
|
358
|
+
// would take the missing finding for the reviewer having nothing
|
|
359
|
+
// more to say.
|
|
360
|
+
const said = [
|
|
361
|
+
...(answer.stopped === undefined
|
|
362
|
+
? harvest.warnings
|
|
363
|
+
: [
|
|
364
|
+
stopWarning(answer.stopped, harvest.findings.length, harvest.truncated === true),
|
|
365
|
+
...(harvest.recordedWarnings ?? []),
|
|
366
|
+
]),
|
|
367
|
+
// Whatever went wrong that the answer cannot show for itself: a
|
|
368
|
+
// process that died after recording something, a journal that
|
|
369
|
+
// came back short. Outside the branch above, because a stop
|
|
370
|
+
// explains neither of them.
|
|
371
|
+
...(answer.notes ?? []),
|
|
372
|
+
];
|
|
373
|
+
for (const warning of said) {
|
|
374
|
+
warnings.push(`${participant.id}: ${warning}`);
|
|
375
|
+
}
|
|
376
|
+
const recorded = harvest.findings.length === 0 ? [] : await deps.record(harvest.findings);
|
|
377
|
+
return {
|
|
378
|
+
participantId: participant.id,
|
|
379
|
+
findingIds: recorded.map((finding) => finding.id),
|
|
380
|
+
...(answer.stopped === undefined ? {} : { stopped: answer.stopped }),
|
|
381
|
+
...(answer.answerPath === undefined
|
|
382
|
+
? {}
|
|
383
|
+
: { answerPath: answer.answerPath }),
|
|
384
|
+
...(answer.usage === undefined ? {} : { usage: answer.usage }),
|
|
385
|
+
};
|
|
386
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pushing back on what a judge concluded.
|
|
3
|
+
*
|
|
4
|
+
* A critique records **positions, not findings**. A critic that could
|
|
5
|
+
* also raise findings would make the round both a discovery pass and a
|
|
6
|
+
* challenge to one, and neither could be read on its own afterwards.
|
|
7
|
+
* So the output is a position per finding with the argument for it,
|
|
8
|
+
* and the run's outcomes carry no finding ids at all.
|
|
9
|
+
*
|
|
10
|
+
* Silence about a finding is no position, never assent. Reading an
|
|
11
|
+
* absent critique as agreement would manufacture consensus out of a
|
|
12
|
+
* critic that ran out of budget, which is the worst way to be wrong
|
|
13
|
+
* here: it makes a weakly supported finding look corroborated.
|
|
14
|
+
*/
|
|
15
|
+
import { type Ask } from "./council.js";
|
|
16
|
+
import type { AskProgress } from "./progress.js";
|
|
17
|
+
import type { Roster } from "./roster.js";
|
|
18
|
+
import { type AskRun, type RoundGiven } from "./run.js";
|
|
19
|
+
/** Where a critic stands on a finding. */
|
|
20
|
+
export type Position = "agree" | "disagree" | "qualify" | "unsure";
|
|
21
|
+
/** One critic's position on one finding. */
|
|
22
|
+
export interface Critique {
|
|
23
|
+
findingId: number;
|
|
24
|
+
participantId: string;
|
|
25
|
+
position: Position;
|
|
26
|
+
rationale: string;
|
|
27
|
+
}
|
|
28
|
+
/** What came out of one critic's answer. */
|
|
29
|
+
export interface CritiqueHarvest {
|
|
30
|
+
critiques: Critique[];
|
|
31
|
+
warnings: string[];
|
|
32
|
+
}
|
|
33
|
+
/** The impure things a critique needs. */
|
|
34
|
+
export interface CritiqueDeps {
|
|
35
|
+
ask: Ask;
|
|
36
|
+
now(): Date;
|
|
37
|
+
/** Told what is happening while it happens. Optional. */
|
|
38
|
+
progress?: AskProgress;
|
|
39
|
+
}
|
|
40
|
+
/** What to put to whom. */
|
|
41
|
+
export interface CritiqueRequest {
|
|
42
|
+
roster: Roster;
|
|
43
|
+
prompt: string;
|
|
44
|
+
seq: number;
|
|
45
|
+
/** The findings being put up for challenge. */
|
|
46
|
+
findingIds: number[];
|
|
47
|
+
/**
|
|
48
|
+
* The commit this round was formed against.
|
|
49
|
+
*
|
|
50
|
+
* Recorded for the same reason a council records one. A position
|
|
51
|
+
* on a finding is about code at a moment, and a round that cannot
|
|
52
|
+
* say which moment cannot be weighed later.
|
|
53
|
+
*/
|
|
54
|
+
witness?: string;
|
|
55
|
+
/** Said when the tree the reviewers read was not that commit. */
|
|
56
|
+
unpinned?: string;
|
|
57
|
+
/** What the critics were handed, besides the change. */
|
|
58
|
+
given?: RoundGiven;
|
|
59
|
+
}
|
|
60
|
+
/** The round, the positions taken, and anything worth saying. */
|
|
61
|
+
export interface CritiqueResult {
|
|
62
|
+
run: AskRun;
|
|
63
|
+
critiques: Critique[];
|
|
64
|
+
warnings: string[];
|
|
65
|
+
}
|
|
66
|
+
/** Read one critic's answer, warning about what it dropped. */
|
|
67
|
+
export declare function harvestCritiques(text: string, participantId: string, findingIds: readonly number[]): CritiqueHarvest;
|
|
68
|
+
/** Put a judge's findings to the roster and gather what they say. */
|
|
69
|
+
export declare function runCritique(request: CritiqueRequest, deps: CritiqueDeps): Promise<CritiqueResult>;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pushing back on what a judge concluded.
|
|
3
|
+
*
|
|
4
|
+
* A critique records **positions, not findings**. A critic that could
|
|
5
|
+
* also raise findings would make the round both a discovery pass and a
|
|
6
|
+
* challenge to one, and neither could be read on its own afterwards.
|
|
7
|
+
* So the output is a position per finding with the argument for it,
|
|
8
|
+
* and the run's outcomes carry no finding ids at all.
|
|
9
|
+
*
|
|
10
|
+
* Silence about a finding is no position, never assent. Reading an
|
|
11
|
+
* absent critique as agreement would manufacture consensus out of a
|
|
12
|
+
* critic that ran out of budget, which is the worst way to be wrong
|
|
13
|
+
* here: it makes a weakly supported finding look corroborated.
|
|
14
|
+
*/
|
|
15
|
+
import { askRoster } from "./council.js";
|
|
16
|
+
import { participantIdentity } from "./identity.js";
|
|
17
|
+
import { newRunId, whatItGave, whatItRead, } from "./run.js";
|
|
18
|
+
import { ANSWER_WAS_CUT_OFF, isRecord, readAnswer, wireText } from "./wire.js";
|
|
19
|
+
/** The positions a critic may take. */
|
|
20
|
+
const POSITIONS = ["agree", "disagree", "qualify", "unsure"];
|
|
21
|
+
/** Read one critic's answer, warning about what it dropped. */
|
|
22
|
+
export function harvestCritiques(text, participantId, findingIds) {
|
|
23
|
+
const { parsed, truncated } = readAnswer(text, "critiques");
|
|
24
|
+
const held = parsed?.critiques;
|
|
25
|
+
if (!Array.isArray(held)) {
|
|
26
|
+
return {
|
|
27
|
+
critiques: [],
|
|
28
|
+
warnings: [
|
|
29
|
+
"Nothing in this answer parsed as a critiques array, so no positions could be read from it.",
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const put = new Set(findingIds);
|
|
34
|
+
const critiques = [];
|
|
35
|
+
const warnings = [];
|
|
36
|
+
if (truncated)
|
|
37
|
+
warnings.push(ANSWER_WAS_CUT_OFF);
|
|
38
|
+
for (const [index, entry] of held.entries()) {
|
|
39
|
+
const one = readCritique(entry, index, participantId, put, warnings);
|
|
40
|
+
if (one !== undefined)
|
|
41
|
+
critiques.push(one);
|
|
42
|
+
}
|
|
43
|
+
return { critiques, warnings };
|
|
44
|
+
}
|
|
45
|
+
/** Put a judge's findings to the roster and gather what they say. */
|
|
46
|
+
export async function runCritique(request, deps) {
|
|
47
|
+
const startedAt = deps.now();
|
|
48
|
+
const id = newRunId("critique", startedAt, request.seq);
|
|
49
|
+
// Asking six models to push back on an empty list is a bill for
|
|
50
|
+
// nothing, so a round with nothing to challenge asks nobody and
|
|
51
|
+
// says so by holding no participants.
|
|
52
|
+
if (request.findingIds.length === 0) {
|
|
53
|
+
return {
|
|
54
|
+
run: {
|
|
55
|
+
id,
|
|
56
|
+
round: "critique",
|
|
57
|
+
startedAt: startedAt.toISOString(),
|
|
58
|
+
participants: [],
|
|
59
|
+
outcomes: [],
|
|
60
|
+
...whatItRead(request),
|
|
61
|
+
...whatItGave(request),
|
|
62
|
+
},
|
|
63
|
+
critiques: [],
|
|
64
|
+
warnings: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// askRoster rather than a second fan-out of its own. Everything
|
|
68
|
+
// that makes asking correct lives there, and it would all have to
|
|
69
|
+
// change together: concurrent asking, a thrown failure and a
|
|
70
|
+
// reported one being one event, roster ordering, reporting.
|
|
71
|
+
const replies = await askRoster(request.roster, request.prompt, id, deps);
|
|
72
|
+
const critiques = [];
|
|
73
|
+
const warnings = [];
|
|
74
|
+
const outcomes = [];
|
|
75
|
+
// In roster order, so a report of the round reads the same way
|
|
76
|
+
// whoever answered first.
|
|
77
|
+
for (const { participant, answer } of replies) {
|
|
78
|
+
if ("failure" in answer) {
|
|
79
|
+
outcomes.push({
|
|
80
|
+
participantId: participant.id,
|
|
81
|
+
findingIds: [],
|
|
82
|
+
failure: answer.failure,
|
|
83
|
+
});
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const harvest = harvestCritiques(answer.text, participant.id, request.findingIds);
|
|
87
|
+
critiques.push(...harvest.critiques);
|
|
88
|
+
for (const warning of harvest.warnings) {
|
|
89
|
+
warnings.push(`${participant.id}: ${warning}`);
|
|
90
|
+
}
|
|
91
|
+
outcomes.push({
|
|
92
|
+
participantId: participant.id,
|
|
93
|
+
// A critique raises no findings, on purpose.
|
|
94
|
+
findingIds: [],
|
|
95
|
+
...(answer.stopped === undefined ? {} : { stopped: answer.stopped }),
|
|
96
|
+
...(answer.answerPath === undefined
|
|
97
|
+
? {}
|
|
98
|
+
: { answerPath: answer.answerPath }),
|
|
99
|
+
...(answer.usage === undefined ? {} : { usage: answer.usage }),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Raising no findings is why this has to say so itself: the rounds
|
|
103
|
+
// that record them finish through `settleReplies`, and a critique never
|
|
104
|
+
// goes near it, so the board it put up would have outlived the round
|
|
105
|
+
// and sat there describing work that had stopped.
|
|
106
|
+
deps.progress?.finish();
|
|
107
|
+
return {
|
|
108
|
+
run: {
|
|
109
|
+
id,
|
|
110
|
+
round: "critique",
|
|
111
|
+
startedAt: startedAt.toISOString(),
|
|
112
|
+
participants: request.roster.reviewers.map((participant) => participantIdentity("reviewer", participant)),
|
|
113
|
+
outcomes,
|
|
114
|
+
...whatItRead(request),
|
|
115
|
+
...whatItGave(request),
|
|
116
|
+
},
|
|
117
|
+
critiques,
|
|
118
|
+
warnings,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** One critique, or nothing plus a warning saying why. */
|
|
122
|
+
function readCritique(entry, index, participantId, put, warnings) {
|
|
123
|
+
const at = `critiques[${index}]`;
|
|
124
|
+
if (!isRecord(entry)) {
|
|
125
|
+
warnings.push(`${at} is not an object, so it was dropped.`);
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
const findingId = entry.findingId;
|
|
129
|
+
if (typeof findingId !== "number" || !Number.isInteger(findingId)) {
|
|
130
|
+
warnings.push(`${at} names no finding, so it was dropped.`);
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
if (!put.has(findingId)) {
|
|
134
|
+
// A critic inventing an id would attach an opinion to some
|
|
135
|
+
// other finding's number, which is worse than losing it.
|
|
136
|
+
warnings.push(`${at} takes a position on finding ${findingId}, which was not among the findings put up for challenge, so it was dropped.`);
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
const position = wireText(entry.position);
|
|
140
|
+
if (position === undefined || !POSITIONS.includes(position)) {
|
|
141
|
+
warnings.push(`${at} takes the position "${position ?? "nothing"}", which is not one of ${POSITIONS.join(", ")}, so it was dropped.`);
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
const rationale = wireText(entry.rationale);
|
|
145
|
+
if (rationale === undefined) {
|
|
146
|
+
// A position with no argument cannot be weighed against the
|
|
147
|
+
// finding it disputes, so it is worth less than silence.
|
|
148
|
+
warnings.push(`${at} gives no rationale, and a bare vote cannot be weighed against the finding it disputes, so it was dropped.`);
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
findingId,
|
|
153
|
+
participantId,
|
|
154
|
+
position: position,
|
|
155
|
+
rationale,
|
|
156
|
+
};
|
|
157
|
+
}
|