@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,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything a session overhears: console lines, exceptions,
|
|
3
|
+
* requests, dialogs, navigations, downloads and live-region
|
|
4
|
+
* announcements, each kept from the moment the tab opens.
|
|
5
|
+
*
|
|
6
|
+
* One keeper for all of it because the buffers share a life:
|
|
7
|
+
* they are installed together at open, reinstalled together
|
|
8
|
+
* after a crash, and recited together by status. The session
|
|
9
|
+
* decides when to listen; this decides what is heard and how it
|
|
10
|
+
* is kept.
|
|
11
|
+
*/
|
|
12
|
+
import { ANNOUNCE_BINDING, ANNOUNCEMENT_OBSERVER, CANDIDATE_REGISTRY, } from "../a11y/index.js";
|
|
13
|
+
import { answerFor, browserEntry, consoleEntry, createDownloadRecorder, createLifecycleRecorder, createNetworkRecorder, createRingBuffer, DEFAULT_DIALOG_POLICY, exceptionEntry, foldSockets, } from "../telemetry/index.js";
|
|
14
|
+
/** Milliseconds in a second, where two clocks have to meet. */
|
|
15
|
+
const MS_PER_SECOND = 1000;
|
|
16
|
+
/** The buffers a session fills by listening, and their readers. */
|
|
17
|
+
export class SessionTelemetry {
|
|
18
|
+
wires;
|
|
19
|
+
hooks;
|
|
20
|
+
/** What the page announced, oldest first, within its budget. */
|
|
21
|
+
announcements = createRingBuffer();
|
|
22
|
+
/**
|
|
23
|
+
* What the browser said about each nominated region, keyed by
|
|
24
|
+
* document epoch and registry index. Null means the browser
|
|
25
|
+
* ruled it not live.
|
|
26
|
+
*/
|
|
27
|
+
livenessByRegion = new Map();
|
|
28
|
+
/** Everything the page has said since it opened. */
|
|
29
|
+
logBuffer = createRingBuffer();
|
|
30
|
+
/** Every request the page has made since it opened. */
|
|
31
|
+
requestLog = createNetworkRecorder();
|
|
32
|
+
/**
|
|
33
|
+
* Every websocket event, bounded like everything else here.
|
|
34
|
+
*
|
|
35
|
+
* A chatty socket can push frames faster than anything reads
|
|
36
|
+
* them, so this is the same ring buffer the logs use: the most
|
|
37
|
+
* recent within a budget, and a count of what it had to drop.
|
|
38
|
+
*/
|
|
39
|
+
socketLog = createRingBuffer();
|
|
40
|
+
/** Every dialog the page has raised, and how it was answered. */
|
|
41
|
+
dialogLog = [];
|
|
42
|
+
/** Where the page has been, and whether it survived. */
|
|
43
|
+
lifecycleLog;
|
|
44
|
+
/** How dialogs get answered while nobody is watching. */
|
|
45
|
+
dialogPolicy = DEFAULT_DIALOG_POLICY;
|
|
46
|
+
/** Files the page has handed back. */
|
|
47
|
+
downloadLog = createDownloadRecorder();
|
|
48
|
+
/**
|
|
49
|
+
* Wall seconds minus the protocol's monotonic seconds.
|
|
50
|
+
*
|
|
51
|
+
* The protocol's clock counts from when the browser started,
|
|
52
|
+
* so it reads around 586,000 while ours reads 1.78 billion.
|
|
53
|
+
* Comparing a recorded request against our own clock without
|
|
54
|
+
* this correction does not merely give a wrong answer, it
|
|
55
|
+
* gives a confidently idle one, because every request looks
|
|
56
|
+
* like it finished aeons ago.
|
|
57
|
+
*/
|
|
58
|
+
clockOffset;
|
|
59
|
+
/**
|
|
60
|
+
* Announcements still being ruled on. Candidates resolve one
|
|
61
|
+
* at a time along this chain, so a slow lookup cannot overtake
|
|
62
|
+
* a fast one and record two out of the order they were said.
|
|
63
|
+
*/
|
|
64
|
+
pending = Promise.resolve();
|
|
65
|
+
constructor(wires, hooks) {
|
|
66
|
+
this.wires = wires;
|
|
67
|
+
this.hooks = hooks;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Listen for everything the page says, from the moment it
|
|
71
|
+
* opens.
|
|
72
|
+
*
|
|
73
|
+
* Three sources, because no one of them is complete. The
|
|
74
|
+
* console is what the page chose to say; exceptions are what
|
|
75
|
+
* it did not choose; and the browser's own log carries what
|
|
76
|
+
* the page never hears at all, a resource that failed to load
|
|
77
|
+
* or a request the browser refused.
|
|
78
|
+
*/
|
|
79
|
+
async listenForLogs() {
|
|
80
|
+
const cdp = this.wires.cdp();
|
|
81
|
+
cdp.on("Runtime.consoleAPICalled", (event) => {
|
|
82
|
+
this.logBuffer.push(consoleEntry(event));
|
|
83
|
+
});
|
|
84
|
+
cdp.on("Runtime.exceptionThrown", (event) => {
|
|
85
|
+
this.logBuffer.push(exceptionEntry(event.exceptionDetails, event.timestamp));
|
|
86
|
+
});
|
|
87
|
+
cdp.on("Log.entryAdded", (event) => {
|
|
88
|
+
const logged = event;
|
|
89
|
+
this.logBuffer.push(browserEntry(logged.entry));
|
|
90
|
+
});
|
|
91
|
+
await cdp.send("Runtime.enable");
|
|
92
|
+
await cdp.send("Log.enable");
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Watch every request the page makes.
|
|
96
|
+
*
|
|
97
|
+
* The protocol reports one request as four separate events
|
|
98
|
+
* over its life, so the recorder does the reassembly and this
|
|
99
|
+
* only relabels the CDP names it consumes.
|
|
100
|
+
*/
|
|
101
|
+
async listenForRequests() {
|
|
102
|
+
const cdp = this.wires.cdp();
|
|
103
|
+
cdp.on("Network.requestWillBeSent", (event) => {
|
|
104
|
+
// This is the one event carrying both clocks at once, which
|
|
105
|
+
// makes it the only place the offset between them can be
|
|
106
|
+
// learned rather than assumed.
|
|
107
|
+
if (event.wallTime !== undefined) {
|
|
108
|
+
this.clockOffset = event.wallTime - event.timestamp;
|
|
109
|
+
}
|
|
110
|
+
this.requestLog.apply({ kind: "sent", event });
|
|
111
|
+
});
|
|
112
|
+
cdp.on("Network.responseReceived", (event) => {
|
|
113
|
+
this.requestLog.apply({ kind: "received", event });
|
|
114
|
+
});
|
|
115
|
+
cdp.on("Network.loadingFinished", (event) => {
|
|
116
|
+
this.requestLog.apply({ kind: "finished", event });
|
|
117
|
+
});
|
|
118
|
+
cdp.on("Network.loadingFailed", (event) => {
|
|
119
|
+
this.requestLog.apply({ kind: "failed", event });
|
|
120
|
+
});
|
|
121
|
+
// Sockets ride on the same domain, so they cost no extra
|
|
122
|
+
// enable and are recorded whenever requests are.
|
|
123
|
+
cdp.on("Network.webSocketCreated", (event) => {
|
|
124
|
+
this.socketLog.push({
|
|
125
|
+
kind: "opened",
|
|
126
|
+
id: event.requestId,
|
|
127
|
+
at: Date.now(),
|
|
128
|
+
url: event.url,
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
cdp.on("Network.webSocketFrameSent", (event) => {
|
|
132
|
+
this.socketLog.push({
|
|
133
|
+
kind: "sent",
|
|
134
|
+
id: event.requestId,
|
|
135
|
+
at: Date.now(),
|
|
136
|
+
payload: event.response.payloadData,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
cdp.on("Network.webSocketFrameReceived", (event) => {
|
|
140
|
+
this.socketLog.push({
|
|
141
|
+
kind: "received",
|
|
142
|
+
id: event.requestId,
|
|
143
|
+
at: Date.now(),
|
|
144
|
+
payload: event.response.payloadData,
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
cdp.on("Network.webSocketClosed", (event) => {
|
|
148
|
+
this.socketLog.push({
|
|
149
|
+
kind: "closed",
|
|
150
|
+
id: event.requestId,
|
|
151
|
+
at: Date.now(),
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
cdp.on("Network.webSocketFrameError", (event) => {
|
|
155
|
+
this.socketLog.push({
|
|
156
|
+
kind: "failed",
|
|
157
|
+
id: event.requestId,
|
|
158
|
+
at: Date.now(),
|
|
159
|
+
error: event.errorMessage,
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
await cdp.send("Network.enable");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Answer dialogs, because an unanswered one stops the page.
|
|
166
|
+
*
|
|
167
|
+
* Until something replies, no script runs and no action lands,
|
|
168
|
+
* so there is no such thing as declining to have a policy.
|
|
169
|
+
* Every answer given is recorded, since a dismissed confirm
|
|
170
|
+
* changes what the page did next and the reader has to be able
|
|
171
|
+
* to see that it happened.
|
|
172
|
+
*/
|
|
173
|
+
async listenForDialogs() {
|
|
174
|
+
const cdp = this.wires.cdp();
|
|
175
|
+
cdp.on("Page.javascriptDialogOpening", (event) => {
|
|
176
|
+
const kind = event.type;
|
|
177
|
+
const reply = answerFor(kind, this.dialogPolicy);
|
|
178
|
+
this.dialogLog.push({
|
|
179
|
+
kind,
|
|
180
|
+
message: event.message,
|
|
181
|
+
accepted: reply.accept,
|
|
182
|
+
...(event.defaultPrompt === undefined || event.defaultPrompt === ""
|
|
183
|
+
? {}
|
|
184
|
+
: { defaultPrompt: event.defaultPrompt }),
|
|
185
|
+
...(reply.promptText === undefined ? {} : { reply: reply.promptText }),
|
|
186
|
+
...(event.url === undefined ? {} : { url: event.url }),
|
|
187
|
+
});
|
|
188
|
+
cdp
|
|
189
|
+
.send("Page.handleJavaScriptDialog", reply)
|
|
190
|
+
// A dialog the page closed itself is already gone, and
|
|
191
|
+
// failing to answer it is not news.
|
|
192
|
+
.catch(() => { });
|
|
193
|
+
});
|
|
194
|
+
await cdp.send("Page.enable");
|
|
195
|
+
}
|
|
196
|
+
/** Decide how dialogs will be answered from here on. */
|
|
197
|
+
setDialogPolicy(policy) {
|
|
198
|
+
this.dialogPolicy = policy;
|
|
199
|
+
}
|
|
200
|
+
/** How dialogs are currently answered. */
|
|
201
|
+
get dialogs() {
|
|
202
|
+
return { policy: this.dialogPolicy, seen: this.dialogLog };
|
|
203
|
+
}
|
|
204
|
+
/** Every request the page has made. */
|
|
205
|
+
requests() {
|
|
206
|
+
return this.requestLog.all();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The body of one recorded reply, fetched on demand.
|
|
210
|
+
*
|
|
211
|
+
* Bodies are not captured as they stream past: most are never
|
|
212
|
+
* asked for, and holding every one would cost far more memory
|
|
213
|
+
* than the rest of the session put together. Chrome keeps them
|
|
214
|
+
* for the current document, so this asks only when asked.
|
|
215
|
+
*/
|
|
216
|
+
async bodyOf(requestId) {
|
|
217
|
+
try {
|
|
218
|
+
return await this.wires
|
|
219
|
+
.cdp()
|
|
220
|
+
.send("Network.getResponseBody", { requestId });
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Chrome discards bodies on navigation, and never had one
|
|
224
|
+
// for a request that failed. Neither is an error here.
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* What the page has said, from a cursor onward.
|
|
230
|
+
*
|
|
231
|
+
* The buffer survives navigation on purpose: a message logged
|
|
232
|
+
* just before a redirect is often the one that explains it.
|
|
233
|
+
*/
|
|
234
|
+
logs(since) {
|
|
235
|
+
return {
|
|
236
|
+
entries: since === undefined
|
|
237
|
+
? this.logBuffer.all()
|
|
238
|
+
: this.logBuffer.since(since),
|
|
239
|
+
dropped: this.logBuffer.dropped,
|
|
240
|
+
cursor: this.logBuffer.cursor,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Watch where the page goes, and notice if it dies.
|
|
245
|
+
*
|
|
246
|
+
* The crash half is not optional. After the tab crashes every
|
|
247
|
+
* call against it hangs rather than failing, measured against
|
|
248
|
+
* a deliberately crashed tab, so a session that waited to find
|
|
249
|
+
* out lazily would simply stop responding. Recovery therefore
|
|
250
|
+
* happens the moment the crash is announced.
|
|
251
|
+
*/
|
|
252
|
+
async listenForLifecycle() {
|
|
253
|
+
const { frameTree } = await this.wires.cdp().send("Page.getFrameTree");
|
|
254
|
+
const log = createLifecycleRecorder(frameTree.frame.id);
|
|
255
|
+
this.lifecycleLog = log;
|
|
256
|
+
this.attachLifecycle(log);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Point the lifecycle handlers at a replacement tab.
|
|
260
|
+
*
|
|
261
|
+
* A new tab is a new main frame, and a recorder still watching
|
|
262
|
+
* the old id would ignore every navigation from here on while
|
|
263
|
+
* looking perfectly healthy.
|
|
264
|
+
*/
|
|
265
|
+
readoptLifecycle(frameId) {
|
|
266
|
+
const log = this.lifecycleLog;
|
|
267
|
+
if (!log)
|
|
268
|
+
return;
|
|
269
|
+
log.adoptFrame(frameId);
|
|
270
|
+
this.attachLifecycle(log);
|
|
271
|
+
log.apply({ kind: "recovered" });
|
|
272
|
+
}
|
|
273
|
+
/** Point the lifecycle handlers at the current protocol channel. */
|
|
274
|
+
attachLifecycle(log) {
|
|
275
|
+
const cdp = this.wires.cdp();
|
|
276
|
+
cdp.on("Page.frameRequestedNavigation", (event) => {
|
|
277
|
+
log.apply({
|
|
278
|
+
kind: "requested",
|
|
279
|
+
frameId: event.frameId,
|
|
280
|
+
reason: event.reason,
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
cdp.on("Page.frameNavigated", (event) => {
|
|
284
|
+
log.apply({
|
|
285
|
+
kind: "navigated",
|
|
286
|
+
frameId: event.frame.id,
|
|
287
|
+
url: event.frame.url,
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
cdp.on("Page.navigatedWithinDocument", (event) => {
|
|
291
|
+
log.apply({
|
|
292
|
+
kind: "within",
|
|
293
|
+
frameId: event.frameId,
|
|
294
|
+
url: event.url,
|
|
295
|
+
...(event.navigationType === undefined
|
|
296
|
+
? {}
|
|
297
|
+
: { navigationType: event.navigationType }),
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
cdp.on("Inspector.targetCrashed", () => {
|
|
301
|
+
log.apply({ kind: "crashed" });
|
|
302
|
+
this.hooks.onCrash();
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Catch files the page hands back.
|
|
307
|
+
*
|
|
308
|
+
* The behaviour has to be set against this session's browser
|
|
309
|
+
* context, not merely the connection. Set without the context
|
|
310
|
+
* id, Chrome cancels every download in a non-default context
|
|
311
|
+
* and writes nothing, which looks exactly like a page that
|
|
312
|
+
* never offered a file.
|
|
313
|
+
*/
|
|
314
|
+
async listenForDownloads() {
|
|
315
|
+
const cdp = this.wires.cdp();
|
|
316
|
+
cdp.on("Browser.downloadWillBegin", (event) => {
|
|
317
|
+
this.downloadLog.apply({
|
|
318
|
+
kind: "begin",
|
|
319
|
+
guid: event.guid,
|
|
320
|
+
url: event.url,
|
|
321
|
+
suggestedFilename: event.suggestedFilename,
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
cdp.on("Browser.downloadProgress", (event) => {
|
|
325
|
+
this.downloadLog.apply({
|
|
326
|
+
kind: "progress",
|
|
327
|
+
guid: event.guid,
|
|
328
|
+
state: event.state,
|
|
329
|
+
...(event.totalBytes === undefined
|
|
330
|
+
? {}
|
|
331
|
+
: { totalBytes: event.totalBytes }),
|
|
332
|
+
...(event.receivedBytes === undefined
|
|
333
|
+
? {}
|
|
334
|
+
: { receivedBytes: event.receivedBytes }),
|
|
335
|
+
...("filePath" in event && typeof event.filePath === "string"
|
|
336
|
+
? { filePath: event.filePath }
|
|
337
|
+
: {}),
|
|
338
|
+
});
|
|
339
|
+
if (event.state === "completed") {
|
|
340
|
+
const landed = this.downloadLog
|
|
341
|
+
.all()
|
|
342
|
+
.find((record) => record.guid === event.guid);
|
|
343
|
+
if (landed?.filePath)
|
|
344
|
+
this.hooks.keep(landed.filePath);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
await cdp.send("Browser.setDownloadBehavior", {
|
|
348
|
+
behavior: "allow",
|
|
349
|
+
downloadPath: this.hooks.downloadDir(),
|
|
350
|
+
eventsEnabled: true,
|
|
351
|
+
browserContextId: this.wires.context().id,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
/** Files the page has handed back. */
|
|
355
|
+
downloads() {
|
|
356
|
+
return this.downloadLog.all();
|
|
357
|
+
}
|
|
358
|
+
/** Every websocket conversation, folded from its events. */
|
|
359
|
+
sockets() {
|
|
360
|
+
return foldSockets(this.socketLog.all().map((held) => held.item));
|
|
361
|
+
}
|
|
362
|
+
/** Socket events dropped to stay within the buffer's budget. */
|
|
363
|
+
get socketFramesDropped() {
|
|
364
|
+
return this.socketLog.dropped;
|
|
365
|
+
}
|
|
366
|
+
/** Where the page has been. */
|
|
367
|
+
get history() {
|
|
368
|
+
return this.lifecycleLog?.all() ?? [];
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Now, on the protocol's clock, so it can be compared with
|
|
372
|
+
* what requests carry.
|
|
373
|
+
*
|
|
374
|
+
* Before any request has been seen there is no offset to
|
|
375
|
+
* apply, but there are also no requests to compare against,
|
|
376
|
+
* so the figure cannot mislead anyone.
|
|
377
|
+
*/
|
|
378
|
+
protocolNow() {
|
|
379
|
+
return Date.now() / MS_PER_SECOND - (this.clockOffset ?? 0);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Start hearing what the page says. The binding is installed
|
|
383
|
+
* once and survives navigation; the observer is registered
|
|
384
|
+
* for every document, so announcements made during load are
|
|
385
|
+
* caught too.
|
|
386
|
+
*
|
|
387
|
+
* Candidates arrive faster than they can be ruled on, so they
|
|
388
|
+
* are resolved one at a time along a chain. Resolving them
|
|
389
|
+
* concurrently would let a slow lookup overtake a fast one and
|
|
390
|
+
* record two announcements out of the order they were said.
|
|
391
|
+
*/
|
|
392
|
+
async listenForAnnouncements() {
|
|
393
|
+
await this.wires
|
|
394
|
+
.page()
|
|
395
|
+
.exposeFunction(ANNOUNCE_BINDING, (candidate) => {
|
|
396
|
+
this.pending = this.pending.then(() => this.recordIfLive(candidate));
|
|
397
|
+
});
|
|
398
|
+
await this.wires.page().evaluateOnNewDocument(ANNOUNCEMENT_OBSERVER);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* What the page has announced since a cursor, with the cursor
|
|
402
|
+
* to read from next time and how many were dropped.
|
|
403
|
+
*/
|
|
404
|
+
async heard(since = 0) {
|
|
405
|
+
// A candidate raised a moment ago is still being ruled on.
|
|
406
|
+
// Answering before the browser has spoken would report
|
|
407
|
+
// silence for something the page just said.
|
|
408
|
+
await this.pending;
|
|
409
|
+
return {
|
|
410
|
+
entries: this.announcements.since(since),
|
|
411
|
+
cursor: this.announcements.cursor,
|
|
412
|
+
dropped: this.announcements.dropped,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Record a nominated change only if the browser calls its
|
|
417
|
+
* region live, at the politeness the browser computed.
|
|
418
|
+
*/
|
|
419
|
+
async recordIfLive(candidate) {
|
|
420
|
+
const politeness = await this.politenessOf(candidate);
|
|
421
|
+
if (!politeness)
|
|
422
|
+
return;
|
|
423
|
+
this.announcements.push({
|
|
424
|
+
politeness,
|
|
425
|
+
text: candidate.text,
|
|
426
|
+
at: candidate.at,
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Ask the browser what it computed for a nominated region.
|
|
431
|
+
*
|
|
432
|
+
* The answer is cached per document: liveness is a property of
|
|
433
|
+
* the markup, and a navigation starts a new registry with a
|
|
434
|
+
* new epoch, so a stale entry can never be read back.
|
|
435
|
+
*/
|
|
436
|
+
async politenessOf(candidate) {
|
|
437
|
+
const key = `${candidate.epoch}:${candidate.index}`;
|
|
438
|
+
const known = this.livenessByRegion.get(key);
|
|
439
|
+
if (known !== undefined)
|
|
440
|
+
return known ?? undefined;
|
|
441
|
+
const computed = await this.readLiveness(candidate.index);
|
|
442
|
+
this.livenessByRegion.set(key, computed ?? null);
|
|
443
|
+
return computed;
|
|
444
|
+
}
|
|
445
|
+
/** Read a region's computed live politeness from the AX tree. */
|
|
446
|
+
async readLiveness(index) {
|
|
447
|
+
const cdp = this.wires.cdp();
|
|
448
|
+
let objectId;
|
|
449
|
+
try {
|
|
450
|
+
const { result } = await cdp.send("Runtime.evaluate", {
|
|
451
|
+
expression: `globalThis[${JSON.stringify(CANDIDATE_REGISTRY)}][${index}]`,
|
|
452
|
+
});
|
|
453
|
+
objectId = result.objectId;
|
|
454
|
+
if (!objectId)
|
|
455
|
+
return undefined;
|
|
456
|
+
const { node } = await cdp.send("DOM.describeNode", { objectId });
|
|
457
|
+
const { nodes } = await cdp.send("Accessibility.getPartialAXTree", {
|
|
458
|
+
backendNodeId: node.backendNodeId,
|
|
459
|
+
fetchRelatives: false,
|
|
460
|
+
});
|
|
461
|
+
// The nominated node is last; anything before it is the
|
|
462
|
+
// ancestry the protocol threw in.
|
|
463
|
+
const target = nodes.at(-1);
|
|
464
|
+
const live = target?.properties?.find((p) => p.name === "live")?.value
|
|
465
|
+
.value;
|
|
466
|
+
if (live === "polite" || live === "assertive")
|
|
467
|
+
return live;
|
|
468
|
+
return undefined;
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
// The page can navigate or drop the node between the
|
|
472
|
+
// nomination and the lookup. A change nobody can point at
|
|
473
|
+
// any more is not worth reporting as an announcement.
|
|
474
|
+
return undefined;
|
|
475
|
+
}
|
|
476
|
+
finally {
|
|
477
|
+
if (objectId) {
|
|
478
|
+
await cdp
|
|
479
|
+
.send("Runtime.releaseObject", { objectId })
|
|
480
|
+
// Releasing a handle the page already discarded is
|
|
481
|
+
// not a failure worth surfacing.
|
|
482
|
+
.catch(() => { });
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live wires a session collaborator drives the browser
|
|
3
|
+
* through.
|
|
4
|
+
*
|
|
5
|
+
* Handed over as accessors rather than as captured references,
|
|
6
|
+
* because crash recovery replaces the session's page and its
|
|
7
|
+
* protocol channel wholesale. A collaborator holding the
|
|
8
|
+
* originals would keep driving a tab that is never going to
|
|
9
|
+
* answer, which is exactly the hang recovery exists to end.
|
|
10
|
+
*/
|
|
11
|
+
import type { BrowserContext, CDPSession, Page } from "puppeteer-core";
|
|
12
|
+
/** What a collaborator may reach of the session's machinery. */
|
|
13
|
+
export interface SessionWires {
|
|
14
|
+
/** The current tab. */
|
|
15
|
+
readonly page: () => Page;
|
|
16
|
+
/** The current protocol channel. */
|
|
17
|
+
readonly cdp: () => CDPSession;
|
|
18
|
+
/** The browser context the session owns. */
|
|
19
|
+
readonly context: () => BrowserContext;
|
|
20
|
+
/** Wait out any crash recovery before touching the tab. */
|
|
21
|
+
readonly ready: () => Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live wires a session collaborator drives the browser
|
|
3
|
+
* through.
|
|
4
|
+
*
|
|
5
|
+
* Handed over as accessors rather than as captured references,
|
|
6
|
+
* because crash recovery replaces the session's page and its
|
|
7
|
+
* protocol channel wholesale. A collaborator holding the
|
|
8
|
+
* originals would keep driving a tab that is never going to
|
|
9
|
+
* answer, which is exactly the hang recovery exists to end.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|