@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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a participant id means, and keeping it meaning that.
|
|
3
|
+
*
|
|
4
|
+
* A finding's origin names the reviewer that raised it, and a
|
|
5
|
+
* reader trusts that name to identify one thing. Let an id be
|
|
6
|
+
* re-pointed at a different model halfway through and every origin
|
|
7
|
+
* recorded before the change quietly starts lying, with nothing on
|
|
8
|
+
* the record to say so. So an id that has produced findings is
|
|
9
|
+
* held to what it meant.
|
|
10
|
+
*
|
|
11
|
+
* The ledger is told the findings rather than going to look for
|
|
12
|
+
* them. What counts as attributed is a fact about a finding, and a
|
|
13
|
+
* module that had to know where findings are stored would be
|
|
14
|
+
* answerable to every future place they might be.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Reduce a participant's config to the identity it claims.
|
|
18
|
+
*
|
|
19
|
+
* Absent fields are left out rather than set undefined, so two
|
|
20
|
+
* identities compare equal when they say the same thing, and a
|
|
21
|
+
* reader is never shown a key that was never configured.
|
|
22
|
+
*/
|
|
23
|
+
export function participantIdentity(role, participant) {
|
|
24
|
+
return {
|
|
25
|
+
id: participant.id,
|
|
26
|
+
role,
|
|
27
|
+
...(participant.model === undefined ? {} : { model: participant.model }),
|
|
28
|
+
...(participant.thinkingLevel === undefined
|
|
29
|
+
? {}
|
|
30
|
+
: { thinkingLevel: participant.thinkingLevel }),
|
|
31
|
+
...(participant.tools === undefined
|
|
32
|
+
? {}
|
|
33
|
+
: { tools: [...participant.tools] }),
|
|
34
|
+
...(participant.persona === undefined
|
|
35
|
+
? {}
|
|
36
|
+
: { persona: participant.persona }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Whether a finding names this id, as its author or as agreement.
|
|
41
|
+
*
|
|
42
|
+
* A consolidating pass records which reviewers raised the same
|
|
43
|
+
* thing, and those ids are as referenced as the author's: a
|
|
44
|
+
* release that ignored them would report that nothing points at an
|
|
45
|
+
* id while several findings name it.
|
|
46
|
+
*/
|
|
47
|
+
export function attributedTo(finding, id) {
|
|
48
|
+
const origin = finding.origin;
|
|
49
|
+
if (origin.kind !== "hand" && origin.reviewerId === id)
|
|
50
|
+
return true;
|
|
51
|
+
return finding.raisedBy?.includes(id) ?? false;
|
|
52
|
+
}
|
|
53
|
+
/** A fresh ledger, holding nothing. */
|
|
54
|
+
export function createIdentityLedger() {
|
|
55
|
+
const identities = new Map();
|
|
56
|
+
return {
|
|
57
|
+
claim(role, participant, findings) {
|
|
58
|
+
const next = participantIdentity(role, participant);
|
|
59
|
+
const existing = identities.get(participant.id);
|
|
60
|
+
if (existing && !same(existing, next)) {
|
|
61
|
+
// An id nothing points at can be re-pointed in silence.
|
|
62
|
+
// The trail only matters where there is output to
|
|
63
|
+
// attribute, and refusing otherwise would make fixing a
|
|
64
|
+
// roster typo a chore.
|
|
65
|
+
if (findings.some((f) => attributedTo(f, participant.id))) {
|
|
66
|
+
return { refusal: refuse(existing, next) };
|
|
67
|
+
}
|
|
68
|
+
identities.delete(participant.id);
|
|
69
|
+
}
|
|
70
|
+
identities.set(participant.id, next);
|
|
71
|
+
return { held: next };
|
|
72
|
+
},
|
|
73
|
+
release(id) {
|
|
74
|
+
return identities.delete(id);
|
|
75
|
+
},
|
|
76
|
+
held() {
|
|
77
|
+
return [...identities.values()];
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Whether two identities say the same thing. */
|
|
82
|
+
function same(left, right) {
|
|
83
|
+
return (left.id === right.id &&
|
|
84
|
+
left.role === right.role &&
|
|
85
|
+
left.model === right.model &&
|
|
86
|
+
left.thinkingLevel === right.thinkingLevel &&
|
|
87
|
+
left.persona === right.persona &&
|
|
88
|
+
sameTools(left.tools, right.tools));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Whether two tool palettes grant the same thing.
|
|
92
|
+
*
|
|
93
|
+
* Compared as sets: what a reviewer can reach is what changes its
|
|
94
|
+
* answers, and the order they were listed in does not. Refusing on
|
|
95
|
+
* a reordering would be a false alarm about a roster nobody
|
|
96
|
+
* meaningfully edited.
|
|
97
|
+
*/
|
|
98
|
+
function sameTools(left, right) {
|
|
99
|
+
if (left === undefined || right === undefined)
|
|
100
|
+
return left === right;
|
|
101
|
+
if (left.length !== right.length)
|
|
102
|
+
return false;
|
|
103
|
+
const held = new Set(left);
|
|
104
|
+
return right.every((tool) => held.has(tool));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The refusal, which names both ways out.
|
|
108
|
+
*
|
|
109
|
+
* One is to use another id, which keeps the trail exact. The other
|
|
110
|
+
* is to release this one, which does not, and saying so plainly is
|
|
111
|
+
* what makes it a choice rather than a workaround someone finds
|
|
112
|
+
* later.
|
|
113
|
+
*/
|
|
114
|
+
function refuse(existing, next) {
|
|
115
|
+
return (`The id "${existing.id}" already means ${describe(existing)}, ` +
|
|
116
|
+
`and findings are attributed to it. Asking it to mean ` +
|
|
117
|
+
`${describe(next)} would change what those findings say about ` +
|
|
118
|
+
`who raised them. Use a different id for ${describe(next)}, or ` +
|
|
119
|
+
`release "${existing.id}" to accept that its findings become ` +
|
|
120
|
+
`ambiguous about which participant they came from.`);
|
|
121
|
+
}
|
|
122
|
+
/** An identity in words, for a sentence a person reads. */
|
|
123
|
+
function describe(identity) {
|
|
124
|
+
const parts = [identity.role];
|
|
125
|
+
if (identity.persona)
|
|
126
|
+
parts.push(`persona ${identity.persona}`);
|
|
127
|
+
if (identity.model)
|
|
128
|
+
parts.push(`model ${identity.model}`);
|
|
129
|
+
if (identity.thinkingLevel)
|
|
130
|
+
parts.push(`thinking ${identity.thinkingLevel}`);
|
|
131
|
+
if (identity.tools)
|
|
132
|
+
parts.push(`tools ${identity.tools.join(", ")}`);
|
|
133
|
+
return parts.join(" · ");
|
|
134
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidating what a council said.
|
|
3
|
+
*
|
|
4
|
+
* A judge is one participant asked once, so this is much simpler
|
|
5
|
+
* than a council, and it is a separate round rather than a council of
|
|
6
|
+
* one for two reasons a reader downstream depends on.
|
|
7
|
+
*
|
|
8
|
+
* Its findings carry origin kind `judge`, which is what tells anyone
|
|
9
|
+
* reading them later that this pass consolidated rather than
|
|
10
|
+
* discovered. And its participant holds role `judge`, which is what
|
|
11
|
+
* the identity ledger uses to refuse letting one id be both: a reader
|
|
12
|
+
* of the origins would have no way to tell the consolidation from the
|
|
13
|
+
* thing it consolidated.
|
|
14
|
+
*/
|
|
15
|
+
import { type CouncilDeps } from "./council.js";
|
|
16
|
+
import { type Participant } from "./identity.js";
|
|
17
|
+
import { type AskRun, type RoundGiven } from "./run.js";
|
|
18
|
+
/** Who consolidates, and what they are told. */
|
|
19
|
+
export interface JudgeRequest {
|
|
20
|
+
judge: Participant;
|
|
21
|
+
prompt: string;
|
|
22
|
+
/** Distinguishes two rounds started in the same millisecond. */
|
|
23
|
+
seq: number;
|
|
24
|
+
/** Commit under review, which anchors claim when the tree is it. */
|
|
25
|
+
witness?: string;
|
|
26
|
+
/** Said when the tree the reviewers read was not that commit. */
|
|
27
|
+
unpinned?: string;
|
|
28
|
+
/** What the judge was handed, besides the change. */
|
|
29
|
+
given?: RoundGiven;
|
|
30
|
+
}
|
|
31
|
+
/** The run, and anything worth telling the caller. */
|
|
32
|
+
export interface JudgeResult {
|
|
33
|
+
run: AskRun;
|
|
34
|
+
warnings: string[];
|
|
35
|
+
}
|
|
36
|
+
/** Ask a judge to consolidate, and record what it concluded. */
|
|
37
|
+
export declare function runJudge(request: JudgeRequest, deps: CouncilDeps): Promise<JudgeResult>;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidating what a council said.
|
|
3
|
+
*
|
|
4
|
+
* A judge is one participant asked once, so this is much simpler
|
|
5
|
+
* than a council, and it is a separate round rather than a council of
|
|
6
|
+
* one for two reasons a reader downstream depends on.
|
|
7
|
+
*
|
|
8
|
+
* Its findings carry origin kind `judge`, which is what tells anyone
|
|
9
|
+
* reading them later that this pass consolidated rather than
|
|
10
|
+
* discovered. And its participant holds role `judge`, which is what
|
|
11
|
+
* the identity ledger uses to refuse letting one id be both: a reader
|
|
12
|
+
* of the origins would have no way to tell the consolidation from the
|
|
13
|
+
* thing it consolidated.
|
|
14
|
+
*/
|
|
15
|
+
import { askOne } from "./council.js";
|
|
16
|
+
import { alsoRecorded, harvestFindings } from "./harvest.js";
|
|
17
|
+
import { participantIdentity } from "./identity.js";
|
|
18
|
+
import { newRunId, whatItGave, whatItRead, } from "./run.js";
|
|
19
|
+
/** Ask a judge to consolidate, and record what it concluded. */
|
|
20
|
+
export async function runJudge(request, deps) {
|
|
21
|
+
const startedAt = deps.now();
|
|
22
|
+
const id = newRunId("judge", startedAt, request.seq);
|
|
23
|
+
const warnings = [];
|
|
24
|
+
// Written down before it is asked, for the reason a council is. A
|
|
25
|
+
// judge is cheaper than the round it consolidates and not cheap: a
|
|
26
|
+
// session that dies partway through leaves a reviewer directory on
|
|
27
|
+
// disk with nothing saying which change it belonged to or that it
|
|
28
|
+
// was ever a round, so the sweep takes it on the ordinary window
|
|
29
|
+
// while it holds the only copy of what was concluded.
|
|
30
|
+
//
|
|
31
|
+
// This callback was on the shared dependency type and honoured by
|
|
32
|
+
// one of the two runners that take it, so a caller keeping a ledger
|
|
33
|
+
// had its judge rounds silently left out of it.
|
|
34
|
+
try {
|
|
35
|
+
await deps.opened?.({
|
|
36
|
+
id,
|
|
37
|
+
round: "judge",
|
|
38
|
+
startedAt: startedAt.toISOString(),
|
|
39
|
+
participants: [participantIdentity("judge", request.judge)],
|
|
40
|
+
outcomes: [],
|
|
41
|
+
open: true,
|
|
42
|
+
// The provenance too, and a gate caught me leaving it out. An
|
|
43
|
+
// interrupted round is the one a reader has least context for,
|
|
44
|
+
// so recording it without what it read and what it was given
|
|
45
|
+
// is where the omission costs most rather than least.
|
|
46
|
+
...whatItRead(request),
|
|
47
|
+
...whatItGave(request),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Guarded like the council's, and for the same reason: a
|
|
52
|
+
// bookkeeping callback that throws must not take down the round
|
|
53
|
+
// it was recording. The cost is that an interrupted judge may
|
|
54
|
+
// not be findable, which is what it was before this existed.
|
|
55
|
+
}
|
|
56
|
+
// Reported, which this round did not used to be. A judge is one
|
|
57
|
+
// participant, so it never went through the roster path that does the
|
|
58
|
+
// reporting, and nothing here did it instead: a consolidation of sixty
|
|
59
|
+
// findings ran to completion showing no sign of life. `askOne` also
|
|
60
|
+
// folds a thrown runner into a reported failure, which is why the
|
|
61
|
+
// try/catch that used to say so is gone rather than kept beside it.
|
|
62
|
+
const answer = await askOne(request.judge, request.prompt, id, deps);
|
|
63
|
+
const outcome = await (async () => {
|
|
64
|
+
if ("failure" in answer) {
|
|
65
|
+
return {
|
|
66
|
+
participantId: request.judge.id,
|
|
67
|
+
findingIds: [],
|
|
68
|
+
failure: answer.failure,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const origin = {
|
|
72
|
+
kind: "judge",
|
|
73
|
+
runId: id,
|
|
74
|
+
reviewerId: request.judge.id,
|
|
75
|
+
};
|
|
76
|
+
// A judge writes findings down as it goes for the same reason a
|
|
77
|
+
// reviewer does, and it runs against every reviewer's answer at
|
|
78
|
+
// once, so it is the participant most likely to run long.
|
|
79
|
+
//
|
|
80
|
+
// Only as a fallback, though, unlike a reviewer's. A judge's
|
|
81
|
+
// job is deciding what survives, so a finding it recorded early
|
|
82
|
+
// and left out of its consolidation was dropped on purpose, and
|
|
83
|
+
// unioning would overrule the one participant paid to choose.
|
|
84
|
+
// When it produced no consolidation at all, what it wrote down
|
|
85
|
+
// on the way is all there is.
|
|
86
|
+
const said = harvestFindings(answer.text, origin, request);
|
|
87
|
+
const harvest = said.findings.length > 0
|
|
88
|
+
? said
|
|
89
|
+
: alsoRecorded(said, answer.recorded, origin, request);
|
|
90
|
+
for (const warning of [...harvest.warnings, ...(answer.notes ?? [])]) {
|
|
91
|
+
warnings.push(`${request.judge.id}: ${warning}`);
|
|
92
|
+
}
|
|
93
|
+
const recorded = harvest.findings.length === 0 ? [] : await deps.record(harvest.findings);
|
|
94
|
+
// Counted from what was filed rather than from the answer, the same
|
|
95
|
+
// rule the roster rounds settle by: a finding that would not parse
|
|
96
|
+
// never became one, and saying otherwise on the way past would
|
|
97
|
+
// overcount the round in the only place anyone sees it live.
|
|
98
|
+
deps.progress?.recorded(request.judge.id, recorded.length);
|
|
99
|
+
return {
|
|
100
|
+
participantId: request.judge.id,
|
|
101
|
+
findingIds: recorded.map((finding) => finding.id),
|
|
102
|
+
// A judge can be stopped exactly as a reviewer can, and a
|
|
103
|
+
// round that does not record it reports the same lie the
|
|
104
|
+
// council round was fixed for: a participant taken away
|
|
105
|
+
// mid-sentence, filed as one that answered.
|
|
106
|
+
...(answer.stopped === undefined ? {} : { stopped: answer.stopped }),
|
|
107
|
+
...(answer.answerPath === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { answerPath: answer.answerPath }),
|
|
110
|
+
...(answer.usage === undefined ? {} : { usage: answer.usage }),
|
|
111
|
+
};
|
|
112
|
+
})();
|
|
113
|
+
// The board is about to be replaced by the round's own answer, and a
|
|
114
|
+
// stale one outlives the thing it described.
|
|
115
|
+
deps.progress?.finish();
|
|
116
|
+
return {
|
|
117
|
+
run: {
|
|
118
|
+
id,
|
|
119
|
+
round: "judge",
|
|
120
|
+
startedAt: startedAt.toISOString(),
|
|
121
|
+
participants: [participantIdentity("judge", request.judge)],
|
|
122
|
+
outcomes: [outcome],
|
|
123
|
+
// The same commit the findings above are anchored against,
|
|
124
|
+
// said on the round as well. It was used and not recorded,
|
|
125
|
+
// so every judge round in the ledger could anchor a finding
|
|
126
|
+
// honestly and still not say what it had judged: sixteen of
|
|
127
|
+
// sixteen, beside councils that all could.
|
|
128
|
+
//
|
|
129
|
+
// The ledger is the reason, and the only one. A judge round
|
|
130
|
+
// is never left open, so no collect will read this, and
|
|
131
|
+
// claiming otherwise would be justifying a fact with a path
|
|
132
|
+
// that cannot be taken. What it answers is a reader asking
|
|
133
|
+
// what a round was formed against, which until now the
|
|
134
|
+
// record could not say for three kinds out of four.
|
|
135
|
+
...whatItRead(request),
|
|
136
|
+
...whatItGave(request),
|
|
137
|
+
},
|
|
138
|
+
warnings,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A review lens, authored as prose.
|
|
3
|
+
*
|
|
4
|
+
* A persona is what makes six reviewers worth more than one reviewer
|
|
5
|
+
* asked six times: they read the same change looking for different
|
|
6
|
+
* things. The lens is prose because that is what shapes a reader, and
|
|
7
|
+
* because a lens somebody can argue with in a text editor is a lens
|
|
8
|
+
* that gets better.
|
|
9
|
+
*
|
|
10
|
+
* The frontmatter is identity and carries no mechanism. Which model a
|
|
11
|
+
* persona runs on, how hard it thinks and what tools it can reach are
|
|
12
|
+
* decisions about cost and capability, and they belong in the roster
|
|
13
|
+
* beside the other participants rather than buried in a charter. The
|
|
14
|
+
* same lens at two thinking levels is two roster entries, not two
|
|
15
|
+
* files.
|
|
16
|
+
*
|
|
17
|
+
* Reading the file is somebody else's job. This module is handed the
|
|
18
|
+
* text, so the analysis can be tested without a directory and the
|
|
19
|
+
* question of where personas live stays where the answer differs.
|
|
20
|
+
*/
|
|
21
|
+
import type { Participant } from "./identity.js";
|
|
22
|
+
import type { Roster } from "./roster.js";
|
|
23
|
+
/** A lens a reviewer reads through. */
|
|
24
|
+
export interface Persona {
|
|
25
|
+
/** Stable id, which is the file's name. */
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
/** The charter prose: the file body, frontmatter stripped. */
|
|
30
|
+
charter: string;
|
|
31
|
+
}
|
|
32
|
+
/** A persona, or why it could not be read. */
|
|
33
|
+
export type PersonaParse = {
|
|
34
|
+
persona: Persona;
|
|
35
|
+
} | {
|
|
36
|
+
refusal: string;
|
|
37
|
+
};
|
|
38
|
+
/** Where a charter comes from, by persona id. */
|
|
39
|
+
export type CharterLookup = (personaId: string) => string | undefined;
|
|
40
|
+
/** A participant and the charter it reads through, if any. */
|
|
41
|
+
export interface PersonaBinding {
|
|
42
|
+
participant: Participant;
|
|
43
|
+
charter?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Every participant bound to its charter, or why not. */
|
|
46
|
+
export type PersonaBind = {
|
|
47
|
+
bindings: PersonaBinding[];
|
|
48
|
+
} | {
|
|
49
|
+
refusal: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Read a persona file.
|
|
53
|
+
*
|
|
54
|
+
* The id comes from the caller rather than the file, because the id
|
|
55
|
+
* has to be unique and only the directory can enforce that: two files
|
|
56
|
+
* cannot share a name, and nothing written inside a file can promise
|
|
57
|
+
* the same.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parsePersona(id: string, text: string): PersonaParse;
|
|
60
|
+
/**
|
|
61
|
+
* Bind every participant in a roster to the charter it names.
|
|
62
|
+
*
|
|
63
|
+
* A missing persona is a refusal rather than a fallback. A reviewer
|
|
64
|
+
* meant to be a security lens that silently became a generic one still
|
|
65
|
+
* files its findings under the name "security", and whoever reads them
|
|
66
|
+
* afterwards weighs them as a specialist's. Better to say the file is
|
|
67
|
+
* missing than to quietly answer a different question.
|
|
68
|
+
*/
|
|
69
|
+
export declare function bindPersonas(roster: Roster, lookup: CharterLookup): PersonaBind;
|
|
70
|
+
/**
|
|
71
|
+
* The frontmatter fields and the body after them, or nothing.
|
|
72
|
+
*
|
|
73
|
+
* Exported within the module rather than kept private, because the
|
|
74
|
+
* repo-agent reader needs the same split and needs the raw fields
|
|
75
|
+
* besides: it reports which of them it declined to adopt, and a parse
|
|
76
|
+
* that hands back only a `Persona` has already thrown those away.
|
|
77
|
+
* Deliberately not in the barrel, since the frontmatter contract is
|
|
78
|
+
* this module's business and not a consumer's.
|
|
79
|
+
*/
|
|
80
|
+
export declare function splitFrontmatter(text: string): {
|
|
81
|
+
fields: Record<string, string>;
|
|
82
|
+
block: string;
|
|
83
|
+
body: string;
|
|
84
|
+
} | undefined;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A review lens, authored as prose.
|
|
3
|
+
*
|
|
4
|
+
* A persona is what makes six reviewers worth more than one reviewer
|
|
5
|
+
* asked six times: they read the same change looking for different
|
|
6
|
+
* things. The lens is prose because that is what shapes a reader, and
|
|
7
|
+
* because a lens somebody can argue with in a text editor is a lens
|
|
8
|
+
* that gets better.
|
|
9
|
+
*
|
|
10
|
+
* The frontmatter is identity and carries no mechanism. Which model a
|
|
11
|
+
* persona runs on, how hard it thinks and what tools it can reach are
|
|
12
|
+
* decisions about cost and capability, and they belong in the roster
|
|
13
|
+
* beside the other participants rather than buried in a charter. The
|
|
14
|
+
* same lens at two thinking levels is two roster entries, not two
|
|
15
|
+
* files.
|
|
16
|
+
*
|
|
17
|
+
* Reading the file is somebody else's job. This module is handed the
|
|
18
|
+
* text, so the analysis can be tested without a directory and the
|
|
19
|
+
* question of where personas live stays where the answer differs.
|
|
20
|
+
*/
|
|
21
|
+
/** The line that opens and closes a frontmatter block. */
|
|
22
|
+
const FENCE = "---";
|
|
23
|
+
/**
|
|
24
|
+
* Read a persona file.
|
|
25
|
+
*
|
|
26
|
+
* The id comes from the caller rather than the file, because the id
|
|
27
|
+
* has to be unique and only the directory can enforce that: two files
|
|
28
|
+
* cannot share a name, and nothing written inside a file can promise
|
|
29
|
+
* the same.
|
|
30
|
+
*/
|
|
31
|
+
export function parsePersona(id, text) {
|
|
32
|
+
const split = splitFrontmatter(text);
|
|
33
|
+
if (split === undefined) {
|
|
34
|
+
return {
|
|
35
|
+
refusal: `The persona "${id}" has no frontmatter block, so it names no lens. A persona opens with ${FENCE}, a name and a description, and closes with ${FENCE} before its charter.`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const name = split.fields.name;
|
|
39
|
+
if (name === undefined || name === "") {
|
|
40
|
+
return {
|
|
41
|
+
refusal: `The persona "${id}" gives no name in its frontmatter, so there is nothing to call it.`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const description = split.fields.description;
|
|
45
|
+
if (description === undefined || description === "") {
|
|
46
|
+
return {
|
|
47
|
+
refusal: `The persona "${id}" gives no description in its frontmatter. The description is how somebody choosing a roster knows what this lens is for.`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const charter = split.body.trim();
|
|
51
|
+
if (charter === "") {
|
|
52
|
+
// A named lens with nothing behind it is worse than no persona:
|
|
53
|
+
// the roster reads as though a specialist is on it.
|
|
54
|
+
return {
|
|
55
|
+
refusal: `The persona "${id}" has an empty charter, so it is a name for a lens that does not exist. The body of the file is what shapes the reviewer.`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return { persona: { id, name, description, charter } };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Bind every participant in a roster to the charter it names.
|
|
62
|
+
*
|
|
63
|
+
* A missing persona is a refusal rather than a fallback. A reviewer
|
|
64
|
+
* meant to be a security lens that silently became a generic one still
|
|
65
|
+
* files its findings under the name "security", and whoever reads them
|
|
66
|
+
* afterwards weighs them as a specialist's. Better to say the file is
|
|
67
|
+
* missing than to quietly answer a different question.
|
|
68
|
+
*/
|
|
69
|
+
export function bindPersonas(roster, lookup) {
|
|
70
|
+
const participants = [
|
|
71
|
+
...roster.reviewers,
|
|
72
|
+
...(roster.judge === undefined ? [] : [roster.judge]),
|
|
73
|
+
];
|
|
74
|
+
const bindings = [];
|
|
75
|
+
for (const participant of participants) {
|
|
76
|
+
if (participant.persona === undefined) {
|
|
77
|
+
bindings.push({ participant });
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const charter = lookup(participant.persona);
|
|
81
|
+
if (charter === undefined) {
|
|
82
|
+
return {
|
|
83
|
+
refusal: `The participant "${participant.id}" names the persona "${participant.persona}", and no such persona could be read. Add it, or drop the persona from this participant: running it without its lens would file generic findings under a specialist's name.`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
bindings.push({ participant, charter });
|
|
87
|
+
}
|
|
88
|
+
return { bindings };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The frontmatter fields and the body after them, or nothing.
|
|
92
|
+
*
|
|
93
|
+
* Exported within the module rather than kept private, because the
|
|
94
|
+
* repo-agent reader needs the same split and needs the raw fields
|
|
95
|
+
* besides: it reports which of them it declined to adopt, and a parse
|
|
96
|
+
* that hands back only a `Persona` has already thrown those away.
|
|
97
|
+
* Deliberately not in the barrel, since the frontmatter contract is
|
|
98
|
+
* this module's business and not a consumer's.
|
|
99
|
+
*/
|
|
100
|
+
export function splitFrontmatter(text) {
|
|
101
|
+
const lines = text.split("\n");
|
|
102
|
+
if (lines[0]?.trim() !== FENCE)
|
|
103
|
+
return undefined;
|
|
104
|
+
const close = lines.findIndex((line, at) => at > 0 && line.trim() === FENCE);
|
|
105
|
+
if (close === -1)
|
|
106
|
+
return undefined;
|
|
107
|
+
const fields = {};
|
|
108
|
+
for (const line of lines.slice(1, close)) {
|
|
109
|
+
const at = line.indexOf(":");
|
|
110
|
+
if (at === -1)
|
|
111
|
+
continue;
|
|
112
|
+
const key = line.slice(0, at).trim();
|
|
113
|
+
if (key === "")
|
|
114
|
+
continue;
|
|
115
|
+
fields[key] = line.slice(at + 1).trim();
|
|
116
|
+
}
|
|
117
|
+
// The block verbatim as well as the fields, so a reader that wants
|
|
118
|
+
// to parse it properly finds the fences with the same rule the body
|
|
119
|
+
// was found with. Two rules for one boundary is a gap between them,
|
|
120
|
+
// and a gap between the fields and the body is text that shows up in
|
|
121
|
+
// neither the listing nor the frontmatter and heads the charter.
|
|
122
|
+
return {
|
|
123
|
+
fields,
|
|
124
|
+
block: lines.slice(1, close).join("\n"),
|
|
125
|
+
body: lines.slice(close + 1).join("\n"),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an ask round is doing while it does it.
|
|
3
|
+
*
|
|
4
|
+
* A council fans its roster out concurrently, which means the useful
|
|
5
|
+
* minutes of a round are minutes in which nothing is returned. A
|
|
6
|
+
* caller with no way to watch cannot tell a roster that is working
|
|
7
|
+
* from one that has hung, and the difference matters most when it is
|
|
8
|
+
* six subprocesses deep.
|
|
9
|
+
*
|
|
10
|
+
* The library emits events and holds no view. It also cannot see a
|
|
11
|
+
* subprocess: activity arrives because whoever implements `ask`
|
|
12
|
+
* reports it, which is what keeps this side free of any knowledge of
|
|
13
|
+
* streams, terminals or pi's wire format.
|
|
14
|
+
*/
|
|
15
|
+
import type { Participant } from "./identity.js";
|
|
16
|
+
/**
|
|
17
|
+
* Where one participant has got to.
|
|
18
|
+
*
|
|
19
|
+
* Five, because a reviewer somebody stopped is not a reviewer that
|
|
20
|
+
* answered. With four states a cancelled one kept the mark and the
|
|
21
|
+
* colour of success, so the panel said the round had gone well at the
|
|
22
|
+
* exact moment somebody was telling it otherwise.
|
|
23
|
+
*/
|
|
24
|
+
export type AskProgressState = "pending" | "running" | "answered" | "cancelled" | "failed";
|
|
25
|
+
/** One participant's row, as a reporter would draw it. */
|
|
26
|
+
export interface AskProgressEntry {
|
|
27
|
+
readonly participantId: string;
|
|
28
|
+
/**
|
|
29
|
+
* Which model is answering, when the participant named one.
|
|
30
|
+
*
|
|
31
|
+
* Carried for the panel to show, because on a roster of seven personas
|
|
32
|
+
* the model is what tells you whether the slow one is slow for a
|
|
33
|
+
* reason. It is on the participant already; a reporter that dropped it
|
|
34
|
+
* would have to be handed the roster a second time to draw a row.
|
|
35
|
+
*/
|
|
36
|
+
readonly model?: string;
|
|
37
|
+
readonly state: AskProgressState;
|
|
38
|
+
/** What it is doing right now, or empty once it has settled. */
|
|
39
|
+
readonly activity: string;
|
|
40
|
+
/**
|
|
41
|
+
* When it was sent away, in epoch milliseconds.
|
|
42
|
+
*
|
|
43
|
+
* A round is silent for a long time and the honest question a
|
|
44
|
+
* watcher has is how long this one has been going. Recorded on
|
|
45
|
+
* the row rather than computed by whoever draws, so every
|
|
46
|
+
* surface answers it the same way and a row that has settled
|
|
47
|
+
* still says how long it took.
|
|
48
|
+
*/
|
|
49
|
+
readonly startedAtMs?: number;
|
|
50
|
+
/** When it settled, however it settled. */
|
|
51
|
+
readonly settledAtMs?: number;
|
|
52
|
+
/** Findings recorded from it, once they have been numbered. */
|
|
53
|
+
readonly findings?: number;
|
|
54
|
+
/** Why it failed, when it did. */
|
|
55
|
+
readonly reason?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Told what is happening, in the order it happens.
|
|
59
|
+
*
|
|
60
|
+
* Every method returns nothing and must not throw: a reporter that
|
|
61
|
+
* fails should never take a round down with it.
|
|
62
|
+
*/
|
|
63
|
+
export interface AskProgress {
|
|
64
|
+
/** The whole roster, before anything runs, so a reporter can size itself. */
|
|
65
|
+
start(participants: readonly Participant[]): void;
|
|
66
|
+
/** This participant is away. */
|
|
67
|
+
started(participantId: string): void;
|
|
68
|
+
/** What it is doing right now. */
|
|
69
|
+
activity(participantId: string, what: string): void;
|
|
70
|
+
/** It answered. Its findings have not been counted yet. */
|
|
71
|
+
answered(participantId: string): void;
|
|
72
|
+
/** It failed, and why. */
|
|
73
|
+
failed(participantId: string, reason: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Somebody stopped it.
|
|
76
|
+
*
|
|
77
|
+
* Separate from failing, because it is the one settled state that is
|
|
78
|
+
* not news about the change. It outranks a later answer: the runner
|
|
79
|
+
* can report a reviewer home after the kill reached the panel, and
|
|
80
|
+
* repainting that row green loses the only thing the watcher knew.
|
|
81
|
+
*/
|
|
82
|
+
cancelled(participantId: string): void;
|
|
83
|
+
/** Its findings have landed and been numbered. */
|
|
84
|
+
recorded(participantId: string, findings: number): void;
|
|
85
|
+
/** The round is over. */
|
|
86
|
+
finish(): void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Record and report each reply in turn, in roster order.
|
|
90
|
+
*
|
|
91
|
+
* Both rounds settle their replies the same way and differ only in how
|
|
92
|
+
* a reply is filed, so the reporting lives here rather than in each.
|
|
93
|
+
* That is not tidiness: the stack round already shipped without it,
|
|
94
|
+
* because the reporting was two lines a caller had to remember, and
|
|
95
|
+
* the round that reports nothing is the longest one there is.
|
|
96
|
+
*
|
|
97
|
+
* Sequential and in roster order deliberately, which is what makes
|
|
98
|
+
* finding numbers deterministic. Recording concurrently would hand out
|
|
99
|
+
* ids in completion order.
|
|
100
|
+
*/
|
|
101
|
+
export declare function settleReplies<Reply, Outcome>(replies: readonly Reply[], file: (reply: Reply) => Promise<Outcome>, count: (outcome: Outcome) => {
|
|
102
|
+
participantId: string;
|
|
103
|
+
findings: number;
|
|
104
|
+
}, progress: AskProgress | undefined): Promise<Outcome[]>;
|
|
105
|
+
/** An observer that does nothing, for a caller that does not care. */
|
|
106
|
+
export declare const noAskProgress: AskProgress;
|
|
107
|
+
/**
|
|
108
|
+
* An observer that folds what it is told into rows.
|
|
109
|
+
*
|
|
110
|
+
* Every reporter needs this same fold, so it lives here rather than
|
|
111
|
+
* being written again per surface. `entries` is a snapshot: read it
|
|
112
|
+
* whenever you want to draw.
|
|
113
|
+
*/
|
|
114
|
+
export declare function trackAskProgress(now?: () => number): {
|
|
115
|
+
progress: AskProgress;
|
|
116
|
+
entries(): AskProgressEntry[];
|
|
117
|
+
};
|