@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,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents another harness already defined in the repo under review.
|
|
3
|
+
*
|
|
4
|
+
* A repo that has been worked in for a while has usually accumulated
|
|
5
|
+
* some: a reviewer, an architect, a debugger, each written by somebody
|
|
6
|
+
* who knew that codebase. They are lenses, which is what a persona is,
|
|
7
|
+
* and they are already there, which is more than can be said for any
|
|
8
|
+
* lens this tool ships. Offering them costs a directory read.
|
|
9
|
+
*
|
|
10
|
+
* Three rules make that safe, and the third is the one that matters.
|
|
11
|
+
*
|
|
12
|
+
* They are namespaced, because a roster naming a lens and silently
|
|
13
|
+
* getting the repo's version of it is the quiet substitution
|
|
14
|
+
* `bindPersonas` refuses: the findings still file under the name, and
|
|
15
|
+
* whoever reads them weighs them as the lens they asked for.
|
|
16
|
+
*
|
|
17
|
+
* Only the prose comes across. Measured across fifteen agent files on
|
|
18
|
+
* this machine, thirteen name tools and six name a model, in
|
|
19
|
+
* vocabulary that belongs to the harness that wrote them: `sonnet` is
|
|
20
|
+
* not a model pi resolves and `Bash, Read, Edit` are not tools it has.
|
|
21
|
+
*
|
|
22
|
+
* And the change under review may not be the thing that wrote them. A
|
|
23
|
+
* charter becomes the reviewer's `--system-prompt`, on a child holding
|
|
24
|
+
* bash and write, with its working directory inside the tree, and that
|
|
25
|
+
* tree is pinned to the commit under review. So without this rule the
|
|
26
|
+
* author of a change writes the standing instruction of the agent
|
|
27
|
+
* reviewing it, and the operator's consent is worth little, since the
|
|
28
|
+
* listing they chose from read a different tree. A lens the diff
|
|
29
|
+
* touches is refused. What remains is the repo's committed state,
|
|
30
|
+
* which is the same trust already extended to every other line in it.
|
|
31
|
+
*
|
|
32
|
+
* Reading the directory is somebody else's job, as it is for personas.
|
|
33
|
+
* This module is handed the files.
|
|
34
|
+
*/
|
|
35
|
+
import { parse as parseYaml } from "yaml";
|
|
36
|
+
import { splitFrontmatter } from "./persona.js";
|
|
37
|
+
/** The prefix that keeps these out of the persona namespace. */
|
|
38
|
+
export const NAMESPACE = "repo:";
|
|
39
|
+
/**
|
|
40
|
+
* How much charter a lens may carry.
|
|
41
|
+
*
|
|
42
|
+
* A charter becomes an argument on a child process, so unbounded is
|
|
43
|
+
* not a size, it is a limit somebody else picks. The longest agent
|
|
44
|
+
* file measured on this machine is 926 lines, which fits; a file that
|
|
45
|
+
* does not is refused rather than truncated, since half a charter is a
|
|
46
|
+
* lens nobody wrote.
|
|
47
|
+
*/
|
|
48
|
+
const MOST_CHARTER = 64_000;
|
|
49
|
+
/** What text costs where the limit actually is, in bytes. */
|
|
50
|
+
function weight(text) {
|
|
51
|
+
return new TextEncoder().encode(text).length;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Whether a path from a diff and a path from a directory walk name the
|
|
55
|
+
* same file.
|
|
56
|
+
*
|
|
57
|
+
* Exact equality was the first shape, and a diff does not promise the
|
|
58
|
+
* spelling a directory walk produces: git quotes a path with an
|
|
59
|
+
* unusual byte in it, and separators differ by platform. A comparison
|
|
60
|
+
* that is too strict fails open here, which is the wrong direction for
|
|
61
|
+
* the one rule that keeps the change under review out of the
|
|
62
|
+
* reviewer's prompt.
|
|
63
|
+
*/
|
|
64
|
+
function sameFile(fromDiff, found) {
|
|
65
|
+
return plain(fromDiff) === plain(found);
|
|
66
|
+
}
|
|
67
|
+
/** A path reduced to what two spellings of it agree on. */
|
|
68
|
+
function plain(path) {
|
|
69
|
+
const unquoted = path.startsWith('"') && path.endsWith('"')
|
|
70
|
+
? unquote(path.slice(1, -1))
|
|
71
|
+
: path;
|
|
72
|
+
return (unquoted
|
|
73
|
+
.replace(/\\/g, "/")
|
|
74
|
+
.replace(/^\.\//, "")
|
|
75
|
+
// The prefixes git writes on the two sides of a diff. A quoted
|
|
76
|
+
// path keeps them, and quoting is the default spelling for any
|
|
77
|
+
// path with a non-ascii byte in it, so leaving them on failed
|
|
78
|
+
// open exactly where the quoting was meant to be handled.
|
|
79
|
+
.replace(/^[ab]\//, "")
|
|
80
|
+
.normalize("NFC")
|
|
81
|
+
// Folded, because the filesystems this runs on mostly are, and a
|
|
82
|
+
// check treating two names one directory cannot tell apart as
|
|
83
|
+
// different names fails open.
|
|
84
|
+
.toLowerCase());
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A path the way git quotes one, read back.
|
|
88
|
+
*
|
|
89
|
+
* Byte by byte rather than character by character, because git escapes
|
|
90
|
+
* the bytes: an accented letter arrives as two octal escapes that are
|
|
91
|
+
* one character, and decoding them separately produces a string that
|
|
92
|
+
* matches nothing on disk.
|
|
93
|
+
*/
|
|
94
|
+
function unquote(quoted) {
|
|
95
|
+
const bytes = [];
|
|
96
|
+
for (let at = 0; at < quoted.length; at += 1) {
|
|
97
|
+
if (quoted[at] !== "\\") {
|
|
98
|
+
bytes.push(...new TextEncoder().encode(quoted[at]));
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const octal = quoted.slice(at + 1, at + 4);
|
|
102
|
+
if (/^[0-7]{3}$/.test(octal)) {
|
|
103
|
+
bytes.push(Number.parseInt(octal, 8));
|
|
104
|
+
at += 3;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const escaped = quoted[at + 1] ?? "";
|
|
108
|
+
const literal = { n: "\n", t: "\t", r: "\r" }[escaped] ?? escaped;
|
|
109
|
+
bytes.push(...new TextEncoder().encode(literal));
|
|
110
|
+
at += 1;
|
|
111
|
+
}
|
|
112
|
+
return new TextDecoder().decode(Uint8Array.from(bytes));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The frontmatter of an agent file, read as the YAML it is.
|
|
116
|
+
*
|
|
117
|
+
* The persona reader splits on the first colon of each line, which is
|
|
118
|
+
* enough for files this project's own contract governs. These files
|
|
119
|
+
* are not that: they are written for another harness, in real YAML,
|
|
120
|
+
* and the descriptions on this machine run to a paragraph with colons
|
|
121
|
+
* in them. A line splitter turns a quoted or folded value into
|
|
122
|
+
* something that parses and is wrong, which is worse than refusing.
|
|
123
|
+
*
|
|
124
|
+
* Only scalars are taken. A nested value is not a name or a
|
|
125
|
+
* description, and reporting it as one would put a `[object Object]`
|
|
126
|
+
* in a listing somebody chooses from.
|
|
127
|
+
*/
|
|
128
|
+
function frontmatterOf(text) {
|
|
129
|
+
const split = splitFrontmatter(text);
|
|
130
|
+
if (split === undefined)
|
|
131
|
+
return undefined;
|
|
132
|
+
let parsed;
|
|
133
|
+
try {
|
|
134
|
+
// The block the split itself found. Finding the fences a second
|
|
135
|
+
// way put whatever fell between the two rules into neither the
|
|
136
|
+
// fields nor the listing, and at the head of the charter.
|
|
137
|
+
parsed = parseYaml(split.block);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return {
|
|
141
|
+
why: `Its frontmatter is not readable as YAML: ${error instanceof Error ? error.message.split("\n")[0] : String(error)}`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
145
|
+
return { why: "Its frontmatter is not a block of fields." };
|
|
146
|
+
}
|
|
147
|
+
const fields = {};
|
|
148
|
+
const unreadable = [];
|
|
149
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
150
|
+
// Named before it is dropped. Dropping first left the report of
|
|
151
|
+
// what was not adopted silent about exactly the fields it promises
|
|
152
|
+
// to name, because it never saw them.
|
|
153
|
+
if (value === null || typeof value === "object") {
|
|
154
|
+
unreadable.push(key);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
fields[key] = String(value).trim();
|
|
158
|
+
}
|
|
159
|
+
return { fields, unreadable, body: split.body };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The two fields identity is made of.
|
|
163
|
+
*
|
|
164
|
+
* Everything else in the frontmatter belongs to the harness the file
|
|
165
|
+
* was written for, and is reported rather than adopted: the file is
|
|
166
|
+
* not wrong, it is right for something else. An allowlist of the
|
|
167
|
+
* mechanism seen so far was the first shape of this, and it named the
|
|
168
|
+
* fields already known about while staying silent on whatever a
|
|
169
|
+
* harness adds next, which is the reverse of what a report is for.
|
|
170
|
+
*/
|
|
171
|
+
const IDENTITY = ["name", "description"];
|
|
172
|
+
/**
|
|
173
|
+
* Read what a repo's agent files offer.
|
|
174
|
+
*
|
|
175
|
+
* Lenient where the persona reader is strict, and the difference is
|
|
176
|
+
* who asked. A persona is named in somebody's own config, so a
|
|
177
|
+
* malformed one is a mistake they want reported loudly. Nobody asked
|
|
178
|
+
* for these, so one malformed file in a repo this operator does not
|
|
179
|
+
* maintain must not refuse every round run against it.
|
|
180
|
+
*/
|
|
181
|
+
export function discoverAgents(files,
|
|
182
|
+
// Paths the change under review touches. A lens among them is
|
|
183
|
+
// refused rather than dropped quietly, because somebody asking for
|
|
184
|
+
// it by name has to learn that it was the diff that disqualified it
|
|
185
|
+
// and not a typo.
|
|
186
|
+
//
|
|
187
|
+
// Required, and deliberately so. It defaulted to the empty set at
|
|
188
|
+
// first, which meant the rule the whole design rests on was off
|
|
189
|
+
// unless a caller remembered to switch it on, and a caller that
|
|
190
|
+
// forgot got the unsafe behaviour silently. Pass an empty array to
|
|
191
|
+
// say the change touches nothing.
|
|
192
|
+
touched) {
|
|
193
|
+
const read = [];
|
|
194
|
+
const skipped = [];
|
|
195
|
+
const sourceOf = new Map();
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
const split = frontmatterOf(file.text);
|
|
198
|
+
if (split === undefined) {
|
|
199
|
+
skipped.push({
|
|
200
|
+
path: file.path,
|
|
201
|
+
why: "It opens with no frontmatter block, so it names no lens.",
|
|
202
|
+
});
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if ("why" in split) {
|
|
206
|
+
skipped.push({ path: file.path, why: split.why });
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const name = split.fields.name;
|
|
210
|
+
if (name === undefined || name === "") {
|
|
211
|
+
skipped.push({
|
|
212
|
+
path: file.path,
|
|
213
|
+
why: "Its frontmatter gives no name, so there is nothing to call it.",
|
|
214
|
+
});
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (!/^[\w.-]+$/.test(name)) {
|
|
218
|
+
// A name is an id somebody types and a listing prints, so it is
|
|
219
|
+
// held to what an id may be. Unbounded, it is a line of the
|
|
220
|
+
// operator's listing that the repo gets to write, newline
|
|
221
|
+
// included.
|
|
222
|
+
skipped.push({
|
|
223
|
+
path: file.path,
|
|
224
|
+
why: "Its name is not a plain identifier, and a name is printed where somebody chooses a lens.",
|
|
225
|
+
});
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const description = split.fields.description;
|
|
229
|
+
if (description === undefined || description === "") {
|
|
230
|
+
skipped.push({
|
|
231
|
+
path: file.path,
|
|
232
|
+
why: `The agent "${name}" gives no description, which is how somebody choosing a lens knows what it is for.`,
|
|
233
|
+
});
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
// Counted before anything can disqualify it. Skipping first let a
|
|
237
|
+
// change that edits one of two files claiming a name promote the
|
|
238
|
+
// other from contested to authoritative, handing the name to
|
|
239
|
+
// whichever file the change did not touch.
|
|
240
|
+
sourceOf.set(name, [...(sourceOf.get(name) ?? []), file.path]);
|
|
241
|
+
if (touched.some((path) => sameFile(path, file.path) ||
|
|
242
|
+
(file.reads !== undefined && sameFile(path, file.reads)))) {
|
|
243
|
+
skipped.push({
|
|
244
|
+
path: file.path,
|
|
245
|
+
why: `The change under review edits this file, so reading through "${name}" would let the author of the change write the reviewer's standing instruction.`,
|
|
246
|
+
});
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const charter = split.body.trim();
|
|
250
|
+
if (weight(charter) > MOST_CHARTER) {
|
|
251
|
+
// Bytes, because the limit being guarded is a limit on one argv
|
|
252
|
+
// entry and that is counted in bytes. UTF-16 units let a charter
|
|
253
|
+
// written in a language that does not fit a byte a character run
|
|
254
|
+
// well past the line this claims to hold.
|
|
255
|
+
skipped.push({
|
|
256
|
+
path: file.path,
|
|
257
|
+
why: `The charter for "${name}" is ${weight(charter)} bytes, past the ${MOST_CHARTER} a lens may carry. A charter becomes an argument on the reviewer's process.`,
|
|
258
|
+
});
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (charter === "") {
|
|
262
|
+
skipped.push({
|
|
263
|
+
path: file.path,
|
|
264
|
+
why: `The agent "${name}" has an empty body, so it is a name for a lens that does not exist.`,
|
|
265
|
+
});
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
// Everything that is not identity, rather than a list of the two
|
|
269
|
+
// fields seen so far. An allowlist reports the fields already known
|
|
270
|
+
// about and stays silent on the ones a harness adds next, which is
|
|
271
|
+
// the reverse of what a report is for.
|
|
272
|
+
const notAdopted = [
|
|
273
|
+
...Object.keys(split.fields).filter((field) => !IDENTITY.includes(field)),
|
|
274
|
+
...split.unreadable,
|
|
275
|
+
].sort();
|
|
276
|
+
read.push({
|
|
277
|
+
id: `${NAMESPACE}${name}`,
|
|
278
|
+
name,
|
|
279
|
+
description,
|
|
280
|
+
charter,
|
|
281
|
+
source: file.path,
|
|
282
|
+
...(notAdopted.length === 0 ? {} : { notAdopted }),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
// A name two files answer to identifies neither. Dropping both is
|
|
286
|
+
// the only answer that does not make which lens ran depend on the
|
|
287
|
+
// order a directory happened to list its entries.
|
|
288
|
+
const contested = (one) => (sourceOf.get(one.name) ?? []).length > 1;
|
|
289
|
+
for (const one of read.filter(contested)) {
|
|
290
|
+
skipped.push({
|
|
291
|
+
path: one.source,
|
|
292
|
+
why: `"${one.name}" is claimed by ${(sourceOf.get(one.name) ?? []).join(" and ")}, so the name identifies neither.`,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
return { agents: read.filter((one) => !contested(one)), skipped };
|
|
296
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a finding may legitimately point.
|
|
3
|
+
*
|
|
4
|
+
* A reviewer told only "anchor to the diff" will name a line it read
|
|
5
|
+
* in the file and never noticed was outside a hunk, and the anchor
|
|
6
|
+
* then degrades to a body comment carrying a line number that means
|
|
7
|
+
* nothing. Telling it the ranges up front costs a few lines of
|
|
8
|
+
* prompt and removes the whole class of mistake.
|
|
9
|
+
*
|
|
10
|
+
* Context lines count. A reviewer may legitimately point at an
|
|
11
|
+
* unchanged line inside a hunk to say what the change around it
|
|
12
|
+
* breaks, and every backend accepts an anchor there.
|
|
13
|
+
*/
|
|
14
|
+
import type { DiffModel } from "../diff.js";
|
|
15
|
+
/** A run of lines, inclusive at both ends. */
|
|
16
|
+
export interface LineRange {
|
|
17
|
+
from: number;
|
|
18
|
+
to: number;
|
|
19
|
+
}
|
|
20
|
+
/** Where one file will accept an anchor, per side. */
|
|
21
|
+
export interface FileRanges {
|
|
22
|
+
path: string;
|
|
23
|
+
new: LineRange[];
|
|
24
|
+
old: LineRange[];
|
|
25
|
+
}
|
|
26
|
+
/** Every file in a diff, with the ranges each side will accept. */
|
|
27
|
+
export declare function anchorableRanges(diff: DiffModel): FileRanges[];
|
|
28
|
+
/**
|
|
29
|
+
* One line per file, both sides named.
|
|
30
|
+
*
|
|
31
|
+
* A side with nothing is left out rather than printed as empty: a
|
|
32
|
+
* pure addition has no left side at all, and "old none" only invites
|
|
33
|
+
* a reviewer to wonder what it meant.
|
|
34
|
+
*/
|
|
35
|
+
export declare function describeRanges(ranges: FileRanges[]): string;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a finding may legitimately point.
|
|
3
|
+
*
|
|
4
|
+
* A reviewer told only "anchor to the diff" will name a line it read
|
|
5
|
+
* in the file and never noticed was outside a hunk, and the anchor
|
|
6
|
+
* then degrades to a body comment carrying a line number that means
|
|
7
|
+
* nothing. Telling it the ranges up front costs a few lines of
|
|
8
|
+
* prompt and removes the whole class of mistake.
|
|
9
|
+
*
|
|
10
|
+
* Context lines count. A reviewer may legitimately point at an
|
|
11
|
+
* unchanged line inside a hunk to say what the change around it
|
|
12
|
+
* breaks, and every backend accepts an anchor there.
|
|
13
|
+
*/
|
|
14
|
+
import { filePath } from "../diff.js";
|
|
15
|
+
/** Every file in a diff, with the ranges each side will accept. */
|
|
16
|
+
export function anchorableRanges(diff) {
|
|
17
|
+
return diff.files.map((file) => ({
|
|
18
|
+
path: filePath(file),
|
|
19
|
+
new: sideRanges(file, "new"),
|
|
20
|
+
old: sideRanges(file, "old"),
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One line per file, both sides named.
|
|
25
|
+
*
|
|
26
|
+
* A side with nothing is left out rather than printed as empty: a
|
|
27
|
+
* pure addition has no left side at all, and "old none" only invites
|
|
28
|
+
* a reviewer to wonder what it meant.
|
|
29
|
+
*/
|
|
30
|
+
export function describeRanges(ranges) {
|
|
31
|
+
if (ranges.length === 0) {
|
|
32
|
+
return "No line in this change can hold an anchor, so every finding has to be file-scoped or about the change as a whole.";
|
|
33
|
+
}
|
|
34
|
+
return ranges
|
|
35
|
+
.map((file) => {
|
|
36
|
+
const sides = [];
|
|
37
|
+
if (file.new.length > 0)
|
|
38
|
+
sides.push(`new ${list(file.new)}`);
|
|
39
|
+
if (file.old.length > 0)
|
|
40
|
+
sides.push(`old ${list(file.old)}`);
|
|
41
|
+
return `${file.path}: ${sides.join(" | ")}`;
|
|
42
|
+
})
|
|
43
|
+
.join("\n");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The ranges one side of one file will accept.
|
|
47
|
+
*
|
|
48
|
+
* Taken from the line numbers the hunks actually carry rather than
|
|
49
|
+
* from the hunk headers, since a header counts lines on its side
|
|
50
|
+
* while a range has to be bounded by lines that exist on it. One
|
|
51
|
+
* range per hunk: the gap between two hunks is not in the diff, so a
|
|
52
|
+
* range spanning it would invite an anchor nothing can hold.
|
|
53
|
+
*/
|
|
54
|
+
function sideRanges(file, side) {
|
|
55
|
+
const ranges = [];
|
|
56
|
+
for (const hunk of file.hunks) {
|
|
57
|
+
let from;
|
|
58
|
+
let to;
|
|
59
|
+
for (const line of hunk.lines) {
|
|
60
|
+
const at = side === "new" ? line.newLine : line.oldLine;
|
|
61
|
+
if (at === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
if (from === undefined || at < from)
|
|
64
|
+
from = at;
|
|
65
|
+
if (to === undefined || at > to)
|
|
66
|
+
to = at;
|
|
67
|
+
}
|
|
68
|
+
if (from !== undefined && to !== undefined)
|
|
69
|
+
ranges.push({ from, to });
|
|
70
|
+
}
|
|
71
|
+
return ranges;
|
|
72
|
+
}
|
|
73
|
+
/** Several ranges on one side, as a reader would say them. */
|
|
74
|
+
function list(ranges) {
|
|
75
|
+
return ranges.map((r) => `${r.from}-${r.to}`).join(", ");
|
|
76
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a round says when somebody reads it back.
|
|
3
|
+
*
|
|
4
|
+
* Composed here rather than where it is printed, because the order and
|
|
5
|
+
* the wording are the parts that go wrong and neither is visible from
|
|
6
|
+
* a test of the extension. A round's arithmetic had cases, its panel
|
|
7
|
+
* had cases, its store had cases, and the paragraph a reader actually
|
|
8
|
+
* sees was assembled in a private function nothing could reach.
|
|
9
|
+
*
|
|
10
|
+
* The view stays out. A line says what kind of thing it is and the
|
|
11
|
+
* side that draws it decides what that looks like, which keeps this
|
|
12
|
+
* module free of glyphs, colour and width while still owning what is
|
|
13
|
+
* said and in what order.
|
|
14
|
+
*/
|
|
15
|
+
import type { AskRun } from "./run.js";
|
|
16
|
+
/** One line of an answer, and what kind of line it is. */
|
|
17
|
+
export interface AnswerLine {
|
|
18
|
+
/**
|
|
19
|
+
* How to draw it: refused for something that changes how the round
|
|
20
|
+
* should be read, failed for a participant that did not answer.
|
|
21
|
+
* Absent for ordinary prose.
|
|
22
|
+
*/
|
|
23
|
+
mark?: "refused" | "failed";
|
|
24
|
+
text: string;
|
|
25
|
+
}
|
|
26
|
+
/** Anything the caller knows that the round does not. */
|
|
27
|
+
export interface AnswerContext {
|
|
28
|
+
/**
|
|
29
|
+
* Warnings gathered while the round ran.
|
|
30
|
+
*
|
|
31
|
+
* Taken as they are and put last. These arrive already painted by
|
|
32
|
+
* some callers, which is the one place the no-view rule leaks, and
|
|
33
|
+
* it leaks inward: this module still paints nothing.
|
|
34
|
+
*/
|
|
35
|
+
warnings?: string[];
|
|
36
|
+
/** Something about the reading itself, such as which tree was cut. */
|
|
37
|
+
caveat?: string;
|
|
38
|
+
/**
|
|
39
|
+
* That somebody answered in this exchange, which disproves anything
|
|
40
|
+
* the round says about the session being unable to run reviewers.
|
|
41
|
+
*
|
|
42
|
+
* The sequence the advisory exists for ends here: pi dies mid-round,
|
|
43
|
+
* the reader restarts, the reader retries, and the retry works.
|
|
44
|
+
* Every outcome that failed still carries the diagnosis, because
|
|
45
|
+
* they did fail, but printing it over a reviewer that has just
|
|
46
|
+
* answered tells somebody to restart a session they have already
|
|
47
|
+
* restarted and that is demonstrably fine.
|
|
48
|
+
*/
|
|
49
|
+
sessionAnswered?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/** One round, in a line, with whatever its stopped reviewers left. */
|
|
52
|
+
export declare function describeRun(run: AskRun): string;
|
|
53
|
+
/** What a round's answer says, in order. */
|
|
54
|
+
export declare function roundAnswer(run: AskRun, said?: AnswerContext): AnswerLine[];
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a round says when somebody reads it back.
|
|
3
|
+
*
|
|
4
|
+
* Composed here rather than where it is printed, because the order and
|
|
5
|
+
* the wording are the parts that go wrong and neither is visible from
|
|
6
|
+
* a test of the extension. A round's arithmetic had cases, its panel
|
|
7
|
+
* had cases, its store had cases, and the paragraph a reader actually
|
|
8
|
+
* sees was assembled in a private function nothing could reach.
|
|
9
|
+
*
|
|
10
|
+
* The view stays out. A line says what kind of thing it is and the
|
|
11
|
+
* side that draws it decides what that looks like, which keeps this
|
|
12
|
+
* module free of glyphs, colour and width while still owning what is
|
|
13
|
+
* said and in what order.
|
|
14
|
+
*/
|
|
15
|
+
import { count as group } from "../../result/counts.js";
|
|
16
|
+
// The leaf, not the barrel. `lib/ui/index.ts` re-exports the panel,
|
|
17
|
+
// which imports pi's TUI at module scope, and an ESM re-export
|
|
18
|
+
// evaluates what it re-exports from: one convenient import here would
|
|
19
|
+
// put pi's runtime in the module graph of a library that has never
|
|
20
|
+
// needed it. Every other `count` consumer in `lib/` takes the leaf
|
|
21
|
+
// for the same reason.
|
|
22
|
+
import { count } from "../../ui/count.js";
|
|
23
|
+
import { failureLines, runSummary, staleRuntimeAdvisory, stoppedNotes, } from "./run.js";
|
|
24
|
+
/** One round, in a line, with whatever its stopped reviewers left. */
|
|
25
|
+
export function describeRun(run) {
|
|
26
|
+
const summary = runSummary(run);
|
|
27
|
+
const failed = summary.failed > 0 ? `, ${summary.failed} failed` : "";
|
|
28
|
+
// Only a council carries this, and only while it is unsettled, so
|
|
29
|
+
// the sentence says what is actually known: it opened and nothing
|
|
30
|
+
// closed it. Whether that is a dead session or a round still
|
|
31
|
+
// running in another window is not ours to assert, and the useful
|
|
32
|
+
// half is the same either way, since the reviewers' answers are on
|
|
33
|
+
// disk under this id.
|
|
34
|
+
//
|
|
35
|
+
// Its arithmetic used to be a finished round's, and read as an
|
|
36
|
+
// accusation: a round that opened and has recorded nothing rendered
|
|
37
|
+
// as "0/7 answered, 7 failed", which says seven reviewers were
|
|
38
|
+
// asked and dropped. Nobody has asked them anything yet. The
|
|
39
|
+
// summary now separates the two, so this only has to say it.
|
|
40
|
+
const pending = summary.pending > 0 ? `, ${summary.pending} still to hear from` : "";
|
|
41
|
+
const abandoned = run.closed === true
|
|
42
|
+
? ", closed unfinished"
|
|
43
|
+
: run.open === true
|
|
44
|
+
? ", opened and never settled"
|
|
45
|
+
: "";
|
|
46
|
+
// Two words in the listing, not the whole sentence. This is the
|
|
47
|
+
// surface a reader browses sixty rounds through, and until now it
|
|
48
|
+
// was the one place that could not say a round had read the wrong
|
|
49
|
+
// tree: the sentence went into the answer of the session that
|
|
50
|
+
// started the round, and the listing showed findings and a bill
|
|
51
|
+
// beside a round whose findings were formed against something
|
|
52
|
+
// else. The sentence itself is on the run for whoever wants it.
|
|
53
|
+
const unpinned = run.unpinned === undefined ? "" : ", tree not pinned";
|
|
54
|
+
const head = `${run.id}: ${summary.answered}/${summary.asked} answered${failed}${pending}, ${count(summary.findings, "finding")}${spent(summary)}${unpinned}${conditions(run)}${abandoned}`;
|
|
55
|
+
// A stopped reviewer's answer was being recorded and never shown,
|
|
56
|
+
// which is most of the way to losing it: the path is only useful to
|
|
57
|
+
// somebody who knows to look for it.
|
|
58
|
+
return [head, ...stoppedNotes(run).map((note) => ` ${note}`)].join("\n");
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* What a round was run under, in as few words as it takes.
|
|
62
|
+
*
|
|
63
|
+
* A field nothing prints is a field nobody reads, and the guide told
|
|
64
|
+
* people to read this one off the run. So the listing says it, on the
|
|
65
|
+
* same terms as the tree caveat beside it: the exceptional states get
|
|
66
|
+
* words and the ordinary one gets silence.
|
|
67
|
+
*
|
|
68
|
+
* The exception here is what the reader would want stopped. A round
|
|
69
|
+
* whose reviewers ran with the operator's whole setup loaded is a
|
|
70
|
+
* round two people cannot reproduce between them, and a round whose
|
|
71
|
+
* conventions could not be quoted read a change against rules it was
|
|
72
|
+
* told about and never shown.
|
|
73
|
+
*
|
|
74
|
+
* A round that recorded nothing says nothing, because that is most of
|
|
75
|
+
* the ledger and a phrase on every historic round is a phrase nobody
|
|
76
|
+
* sees after the first screen.
|
|
77
|
+
*/
|
|
78
|
+
function conditions(run) {
|
|
79
|
+
const given = run.given;
|
|
80
|
+
if (given === undefined)
|
|
81
|
+
return "";
|
|
82
|
+
return [
|
|
83
|
+
given.isolated ? "" : ", reviewers not isolated",
|
|
84
|
+
given.quoted?.withheld === true ? ", conventions not quotable" : "",
|
|
85
|
+
given.quoted?.cut === true ? ", conventions cut" : "",
|
|
86
|
+
].join("");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* What the round burned, when anybody said.
|
|
90
|
+
*
|
|
91
|
+
* Held in the ledger since the first round and shown by nothing until
|
|
92
|
+
* now: a billion tokens and several hundred dollars across sixty-odd
|
|
93
|
+
* rounds, reachable only by reading the JSON. A council costs about
|
|
94
|
+
* as much as a good dinner, and the reader deciding whether to run
|
|
95
|
+
* another is the person who should be told.
|
|
96
|
+
*
|
|
97
|
+
* Silent when nobody reported, because a zero would claim the round
|
|
98
|
+
* was free rather than admit it was not measured.
|
|
99
|
+
*/
|
|
100
|
+
function spent(summary) {
|
|
101
|
+
const said = [];
|
|
102
|
+
// Grouped by hand rather than by locale. `toLocaleString` reads
|
|
103
|
+
// whatever ICU the host was built with, and a line that groups with
|
|
104
|
+
// spaces on one machine and commas on another is a line two readers
|
|
105
|
+
// cannot compare.
|
|
106
|
+
if (summary.tokens !== undefined)
|
|
107
|
+
said.push(`${grouped(summary.tokens)} tokens`);
|
|
108
|
+
if (summary.cost !== undefined)
|
|
109
|
+
said.push(money(summary.cost));
|
|
110
|
+
if (said.length === 0)
|
|
111
|
+
return "";
|
|
112
|
+
// "At least", when somebody who was asked reported nothing. A
|
|
113
|
+
// subtotal in the words of a total is the same lie as a zero for a
|
|
114
|
+
// round nobody priced, and it runs the wrong way: the participants
|
|
115
|
+
// most likely to be missing are the ones that died.
|
|
116
|
+
const so = summary.partlyPriced === true ? "at least " : "";
|
|
117
|
+
return `, ${so}${said.join(", ")}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* A cost, without rounding a real one away.
|
|
121
|
+
*
|
|
122
|
+
* Two decimals turn anything under half a cent into "$0.00", which is
|
|
123
|
+
* the one claim this refuses to make: that a round was free when it
|
|
124
|
+
* was billed.
|
|
125
|
+
*/
|
|
126
|
+
function money(cost) {
|
|
127
|
+
return cost > 0 && cost < 0.005 ? "under $0.01" : `$${cost.toFixed(2)}`;
|
|
128
|
+
}
|
|
129
|
+
/** A whole number with thousands separated, the same way everywhere. */
|
|
130
|
+
function grouped(value) {
|
|
131
|
+
// Rounded here, grouped there. The rule had been written out three
|
|
132
|
+
// times across the package, which is three chances for one of them
|
|
133
|
+
// to answer differently about the same number.
|
|
134
|
+
return group(Math.round(value));
|
|
135
|
+
}
|
|
136
|
+
/** What a round's answer says, in order. */
|
|
137
|
+
export function roundAnswer(run, said) {
|
|
138
|
+
const summary = runSummary(run);
|
|
139
|
+
// One element per line, because a mark paints a line: an element
|
|
140
|
+
// holding two would put the glyph on the first and leave the second
|
|
141
|
+
// looking like prose.
|
|
142
|
+
const lines = describeRun(run)
|
|
143
|
+
.split("\n")
|
|
144
|
+
.map((text) => ({ text }));
|
|
145
|
+
// Before everything, not after: a caveat about which tree was read
|
|
146
|
+
// changes how every finding below it should be weighed.
|
|
147
|
+
//
|
|
148
|
+
// Falling back to the run means a round collected by a later
|
|
149
|
+
// session says it too. That reader has nothing but the file, and
|
|
150
|
+
// the file records a witness commit whether or not the reviewers
|
|
151
|
+
// could be given it. The caller's own caveat wins where there is
|
|
152
|
+
// one, since a live round can be more specific than what was
|
|
153
|
+
// written down.
|
|
154
|
+
const caveat = said?.caveat ?? run.unpinned;
|
|
155
|
+
if (caveat !== undefined)
|
|
156
|
+
lines.push({ mark: "refused", text: caveat });
|
|
157
|
+
// Above the roll call rather than among it, and the roll call says
|
|
158
|
+
// "as above" instead of repeating the paragraph, or hoisting a
|
|
159
|
+
// sentence already on every outcome would make a seven-reviewer
|
|
160
|
+
// round eight copies long rather than one.
|
|
161
|
+
const advisory = said?.sessionAnswered === true ? undefined : staleRuntimeAdvisory(run);
|
|
162
|
+
if (advisory !== undefined)
|
|
163
|
+
lines.push({ mark: "refused", text: advisory });
|
|
164
|
+
// Told what was hoisted rather than deciding it again, so a
|
|
165
|
+
// suppressed advisory cannot leave a roll call of reviewers
|
|
166
|
+
// pointing at a line that is not there.
|
|
167
|
+
const failures = failureLines(run, advisory);
|
|
168
|
+
for (const line of failures)
|
|
169
|
+
lines.push({ mark: "failed", text: line });
|
|
170
|
+
const nothing = nothingCameBack(run, summary.answered, failures.length);
|
|
171
|
+
if (nothing !== undefined)
|
|
172
|
+
lines.push({ text: nothing });
|
|
173
|
+
for (const warning of said?.warnings ?? [])
|
|
174
|
+
lines.push({ text: warning });
|
|
175
|
+
return lines;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* That the round came back with nothing, when it did, said after the
|
|
179
|
+
* failures rather than before them.
|
|
180
|
+
*
|
|
181
|
+
* It used to say the failures above were the whole story while being
|
|
182
|
+
* printed above them, and to say it on a round that had failed at
|
|
183
|
+
* nothing: a council that has just opened has answered nobody and
|
|
184
|
+
* blamed nobody, and telling its reader that failures explain the
|
|
185
|
+
* silence invents seven that do not exist.
|
|
186
|
+
*
|
|
187
|
+
* Counted off the failures actually printed rather than off the
|
|
188
|
+
* summary. The two disagree on a settled round with a silent
|
|
189
|
+
* participant, which the summary calls failed and the roll call
|
|
190
|
+
* cannot name, and the sentence points at the roll call.
|
|
191
|
+
*
|
|
192
|
+
* An open round is the third case and the one the collect path
|
|
193
|
+
* reaches: every participant carries a failure saying nothing was on
|
|
194
|
+
* disk, and the warnings under it say the transcripts may be
|
|
195
|
+
* somewhere else and the round is deliberately left open. Calling
|
|
196
|
+
* that the whole story contradicts the next line down.
|
|
197
|
+
*/
|
|
198
|
+
function nothingCameBack(run, answered, named) {
|
|
199
|
+
if (answered > 0)
|
|
200
|
+
return undefined;
|
|
201
|
+
if (run.open === true) {
|
|
202
|
+
return named > 0
|
|
203
|
+
? "Nothing came back from anybody, and the round is still open, so what is above may not be the end of it."
|
|
204
|
+
: "Nobody has answered yet, and nothing has gone wrong: the round is still open.";
|
|
205
|
+
}
|
|
206
|
+
return named > 0
|
|
207
|
+
? "Nobody answered, so nothing was recorded. The failures above are the whole story."
|
|
208
|
+
: "Nobody answered, and nothing was recorded to say why.";
|
|
209
|
+
}
|