@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,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The states an element is in, said the same way everywhere.
|
|
3
|
+
*
|
|
4
|
+
* The outline and the reading differ in layout but must not
|
|
5
|
+
* differ on facts: if one says a control is disabled, so does
|
|
6
|
+
* the other. Both ask this module.
|
|
7
|
+
*/
|
|
8
|
+
import type { AxNode } from "./tree.js";
|
|
9
|
+
/** How the caller wants the states phrased. */
|
|
10
|
+
export interface StateOptions {
|
|
11
|
+
/** Leave the heading level out, for a reader that says it with the role. */
|
|
12
|
+
readonly skipLevel?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The states worth saying out loud, in a fixed order so two
|
|
16
|
+
* outlines of the same page read the same way.
|
|
17
|
+
*
|
|
18
|
+
* Only states that are in effect are reported. A field that is
|
|
19
|
+
* not required and not invalid is the ordinary case, and
|
|
20
|
+
* saying so on every line would bury the lines that matter.
|
|
21
|
+
*/
|
|
22
|
+
export declare function describeStates(node: AxNode, options?: StateOptions): string[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The states an element is in, said the same way everywhere.
|
|
3
|
+
*
|
|
4
|
+
* The outline and the reading differ in layout but must not
|
|
5
|
+
* differ on facts: if one says a control is disabled, so does
|
|
6
|
+
* the other. Both ask this module.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The states worth saying out loud, in a fixed order so two
|
|
10
|
+
* outlines of the same page read the same way.
|
|
11
|
+
*
|
|
12
|
+
* Only states that are in effect are reported. A field that is
|
|
13
|
+
* not required and not invalid is the ordinary case, and
|
|
14
|
+
* saying so on every line would bury the lines that matter.
|
|
15
|
+
*/
|
|
16
|
+
export function describeStates(node, options = {}) {
|
|
17
|
+
const { properties: props } = node;
|
|
18
|
+
const states = [];
|
|
19
|
+
if (props.level !== undefined && !options.skipLevel) {
|
|
20
|
+
states.push(`level ${props.level}`);
|
|
21
|
+
}
|
|
22
|
+
if (props.checked === "true")
|
|
23
|
+
states.push("checked");
|
|
24
|
+
if (props.checked === "mixed")
|
|
25
|
+
states.push("partially checked");
|
|
26
|
+
if (props.disabled === true)
|
|
27
|
+
states.push("disabled");
|
|
28
|
+
if (props.expanded === true)
|
|
29
|
+
states.push("expanded");
|
|
30
|
+
if (props.expanded === false)
|
|
31
|
+
states.push("collapsed");
|
|
32
|
+
if (props.selected === true)
|
|
33
|
+
states.push("selected");
|
|
34
|
+
if (props.required === true)
|
|
35
|
+
states.push("required");
|
|
36
|
+
if (isInvalid(props.invalid))
|
|
37
|
+
states.push("invalid");
|
|
38
|
+
if (props.readonly === true)
|
|
39
|
+
states.push("read only");
|
|
40
|
+
if (props.focused === true)
|
|
41
|
+
states.push("focused");
|
|
42
|
+
if (typeof props.live === "string" && props.live && props.live !== "off") {
|
|
43
|
+
states.push(`live ${props.live}`);
|
|
44
|
+
}
|
|
45
|
+
if (node.value !== undefined && node.value !== "") {
|
|
46
|
+
states.push(`value ${JSON.stringify(node.value)}`);
|
|
47
|
+
}
|
|
48
|
+
return states;
|
|
49
|
+
}
|
|
50
|
+
/** Chrome reports validity as a token, where "false" means valid. */
|
|
51
|
+
function isInvalid(invalid) {
|
|
52
|
+
return invalid !== undefined && invalid !== false && invalid !== "false";
|
|
53
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The enriched accessibility tree.
|
|
3
|
+
*
|
|
4
|
+
* Chrome's accessibility tree is the page as assistive
|
|
5
|
+
* technology sees it. This normalizes a raw CDP capture into a
|
|
6
|
+
* tree that keeps what a screen reader would announce: not
|
|
7
|
+
* just role and name, but the states, values and levels that
|
|
8
|
+
* say what a control is doing right now.
|
|
9
|
+
*
|
|
10
|
+
* The input is plain serializable data, so a capture from
|
|
11
|
+
* anywhere (CDP, Playwright, a fixture on disk) can be
|
|
12
|
+
* analyzed by the same code.
|
|
13
|
+
*/
|
|
14
|
+
import { type NameSource } from "./naming.js";
|
|
15
|
+
/** One way Chrome tried to name an element. */
|
|
16
|
+
export interface RawAxNameSource {
|
|
17
|
+
type: string;
|
|
18
|
+
attribute?: string;
|
|
19
|
+
nativeSource?: string;
|
|
20
|
+
value?: {
|
|
21
|
+
type?: string;
|
|
22
|
+
value?: string | number;
|
|
23
|
+
};
|
|
24
|
+
/** Chrome found a name here but a higher-priority source won. */
|
|
25
|
+
superseded?: boolean;
|
|
26
|
+
/** The page pointed this source at something that is not there. */
|
|
27
|
+
invalid?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** A property Chrome reports against an accessibility node. */
|
|
30
|
+
export interface RawAxProperty {
|
|
31
|
+
name: string;
|
|
32
|
+
value?: {
|
|
33
|
+
type?: string;
|
|
34
|
+
value?: string | number | boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** A raw CDP accessibility node (the fields we read). */
|
|
38
|
+
export interface RawAxNode {
|
|
39
|
+
nodeId: string;
|
|
40
|
+
parentId?: string;
|
|
41
|
+
backendDOMNodeId?: number;
|
|
42
|
+
childIds?: string[];
|
|
43
|
+
role?: {
|
|
44
|
+
value?: string;
|
|
45
|
+
};
|
|
46
|
+
name?: {
|
|
47
|
+
value?: string;
|
|
48
|
+
sources?: RawAxNameSource[];
|
|
49
|
+
};
|
|
50
|
+
description?: {
|
|
51
|
+
value?: string;
|
|
52
|
+
};
|
|
53
|
+
value?: {
|
|
54
|
+
type?: string;
|
|
55
|
+
value?: string | number;
|
|
56
|
+
};
|
|
57
|
+
properties?: RawAxProperty[];
|
|
58
|
+
ignored?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/** The states and relationships reported against a node. */
|
|
61
|
+
export type AxProperties = Readonly<Record<string, string | number | boolean>>;
|
|
62
|
+
/** A normalized accessibility node. */
|
|
63
|
+
export interface AxNode {
|
|
64
|
+
readonly role: string;
|
|
65
|
+
readonly name: string;
|
|
66
|
+
/** CDP backend DOM node id, used internally to resolve an element. */
|
|
67
|
+
readonly backendDomId?: number;
|
|
68
|
+
/** The control's current value, when it has one. */
|
|
69
|
+
readonly value?: string | number;
|
|
70
|
+
/** Which mechanism produced the accessible name. */
|
|
71
|
+
readonly nameFrom?: NameSource;
|
|
72
|
+
readonly description?: string;
|
|
73
|
+
readonly properties: AxProperties;
|
|
74
|
+
readonly children: readonly AxNode[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Normalize a raw CDP accessibility capture into a tree.
|
|
78
|
+
*
|
|
79
|
+
* A node the page does not expose is folded, not pruned: a real
|
|
80
|
+
* capture buries the whole document under ignored html and body
|
|
81
|
+
* wrappers, so its exposed children rise in its place.
|
|
82
|
+
*
|
|
83
|
+
* A text carrier whose name only repeats a named ancestor is
|
|
84
|
+
* folded away too: the page says "Save" once, so the tree should
|
|
85
|
+
* too. Text that no ancestor is named after is content, and
|
|
86
|
+
* survives.
|
|
87
|
+
*/
|
|
88
|
+
export declare function normalizeAxTree(nodes: readonly RawAxNode[]): AxNode;
|
|
89
|
+
/**
|
|
90
|
+
* Whether a node says anything on its own. An unnamed wrapper
|
|
91
|
+
* does not: it is scaffolding the page needed and the reader
|
|
92
|
+
* does not. Rendering folds these away, and scoping does not
|
|
93
|
+
* count them as a level, so the two agree on what a level is.
|
|
94
|
+
*/
|
|
95
|
+
export declare function isMeaningful(node: AxNode): boolean;
|
|
96
|
+
/** One frame's accessibility tree, and the element that holds it. */
|
|
97
|
+
export interface FrameAxTree {
|
|
98
|
+
/** Backend DOM node id of the iframe element that owns the frame. */
|
|
99
|
+
readonly ownerBackendNodeId: number;
|
|
100
|
+
readonly nodes: readonly RawAxNode[];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Hang each frame's tree under the iframe element that owns it.
|
|
104
|
+
*
|
|
105
|
+
* Chrome answers for one frame at a time: the page's tree stops
|
|
106
|
+
* at an Iframe node with no children, and the frame's own tree
|
|
107
|
+
* arrives separately, rooted at its own RootWebArea. Left
|
|
108
|
+
* unjoined, every reading of the page ended at the boundary, and
|
|
109
|
+
* an outline, a structural audit or a keyboard walk simply did
|
|
110
|
+
* not contain what the frame held. Nothing said so, which is the
|
|
111
|
+
* worst part: an embedded checkout form read as an empty box.
|
|
112
|
+
*
|
|
113
|
+
* Every frame's nodes are renumbered on the way in. Both trees
|
|
114
|
+
* number from one, so merging them as they arrive makes the
|
|
115
|
+
* frame's root a duplicate of the page's, and a walk over the
|
|
116
|
+
* result either loses nodes or goes round forever.
|
|
117
|
+
*
|
|
118
|
+
* Frames whose owner is not present are dropped rather than
|
|
119
|
+
* attached to the root. That covers a cross-origin frame, which
|
|
120
|
+
* cannot be read at all, and a frame that went away while we were
|
|
121
|
+
* asking; inventing a parent for either would put content
|
|
122
|
+
* somewhere the page does not have it.
|
|
123
|
+
*/
|
|
124
|
+
export declare function spliceFrames(main: readonly RawAxNode[], frames: readonly FrameAxTree[]): RawAxNode[];
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The enriched accessibility tree.
|
|
3
|
+
*
|
|
4
|
+
* Chrome's accessibility tree is the page as assistive
|
|
5
|
+
* technology sees it. This normalizes a raw CDP capture into a
|
|
6
|
+
* tree that keeps what a screen reader would announce: not
|
|
7
|
+
* just role and name, but the states, values and levels that
|
|
8
|
+
* say what a control is doing right now.
|
|
9
|
+
*
|
|
10
|
+
* The input is plain serializable data, so a capture from
|
|
11
|
+
* anywhere (CDP, Playwright, a fixture on disk) can be
|
|
12
|
+
* analyzed by the same code.
|
|
13
|
+
*/
|
|
14
|
+
import { nameSource } from "./naming.js";
|
|
15
|
+
/** An empty tree, for a capture with nothing in it. */
|
|
16
|
+
const EMPTY = { role: "", name: "", properties: {}, children: [] };
|
|
17
|
+
/**
|
|
18
|
+
* Roles whose node carries no meaning of its own: it exists to
|
|
19
|
+
* hold the text its parent is already named after.
|
|
20
|
+
*/
|
|
21
|
+
const TEXT_CARRIER_ROLES = new Set([
|
|
22
|
+
"StaticText",
|
|
23
|
+
"InlineTextBox",
|
|
24
|
+
"text",
|
|
25
|
+
"LabelText",
|
|
26
|
+
]);
|
|
27
|
+
/** Roles that exist to draw something, and say nothing. */
|
|
28
|
+
const PRESENTATIONAL_ROLES = new Set(["ListMarker"]);
|
|
29
|
+
/**
|
|
30
|
+
* Roles that are named by the text inside them.
|
|
31
|
+
*
|
|
32
|
+
* Only these can make a repeat of a text node below them, and
|
|
33
|
+
* the distinction is not pedantry. A container labelled from
|
|
34
|
+
* somewhere else, by aria-label or aria-labelledby, can be
|
|
35
|
+
* named the same as words it happens to contain: Wikipedia
|
|
36
|
+
* labels an article's body with the article's title, and the
|
|
37
|
+
* article opens with that title in bold. Folding on any named
|
|
38
|
+
* ancestor deleted the subject of the first sentence, which
|
|
39
|
+
* then read " is the design of products".
|
|
40
|
+
*/
|
|
41
|
+
const NAMED_FROM_CONTENT_ROLES = new Set([
|
|
42
|
+
"button",
|
|
43
|
+
"caption",
|
|
44
|
+
"cell",
|
|
45
|
+
"checkbox",
|
|
46
|
+
"columnheader",
|
|
47
|
+
"gridcell",
|
|
48
|
+
"heading",
|
|
49
|
+
"legend",
|
|
50
|
+
"link",
|
|
51
|
+
"menuitem",
|
|
52
|
+
"menuitemcheckbox",
|
|
53
|
+
"menuitemradio",
|
|
54
|
+
"option",
|
|
55
|
+
"radio",
|
|
56
|
+
"row",
|
|
57
|
+
"rowheader",
|
|
58
|
+
"switch",
|
|
59
|
+
"tab",
|
|
60
|
+
"tooltip",
|
|
61
|
+
"treeitem",
|
|
62
|
+
]);
|
|
63
|
+
/**
|
|
64
|
+
* Normalize a raw CDP accessibility capture into a tree.
|
|
65
|
+
*
|
|
66
|
+
* A node the page does not expose is folded, not pruned: a real
|
|
67
|
+
* capture buries the whole document under ignored html and body
|
|
68
|
+
* wrappers, so its exposed children rise in its place.
|
|
69
|
+
*
|
|
70
|
+
* A text carrier whose name only repeats a named ancestor is
|
|
71
|
+
* folded away too: the page says "Save" once, so the tree should
|
|
72
|
+
* too. Text that no ancestor is named after is content, and
|
|
73
|
+
* survives.
|
|
74
|
+
*/
|
|
75
|
+
export function normalizeAxTree(nodes) {
|
|
76
|
+
const byId = new Map(nodes.map((node) => [node.nodeId, node]));
|
|
77
|
+
const build = (id, namedAncestors) => {
|
|
78
|
+
const rawNode = byId.get(id);
|
|
79
|
+
if (!rawNode)
|
|
80
|
+
return [];
|
|
81
|
+
const role = rawNode.role?.value ?? "";
|
|
82
|
+
const name = rawNode.name?.value ?? "";
|
|
83
|
+
// An unexposed node is a wrapper as far as we are
|
|
84
|
+
// concerned: it contributes nothing itself, but what it
|
|
85
|
+
// contains may still be part of the page.
|
|
86
|
+
if (rawNode.ignored) {
|
|
87
|
+
return (rawNode.childIds ?? []).flatMap((childId) => build(childId, namedAncestors));
|
|
88
|
+
}
|
|
89
|
+
// A carrier repeating a name an ancestor already announced
|
|
90
|
+
// is a duplicate; its children repeat it too, so the whole
|
|
91
|
+
// branch goes.
|
|
92
|
+
if (TEXT_CARRIER_ROLES.has(role) && namedAncestors.includes(name)) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
// A line box is one rendered line of the text above it, so it
|
|
96
|
+
// repeats a fragment rather than the whole and never matches
|
|
97
|
+
// exactly. Containment is the test that catches it, and it is
|
|
98
|
+
// applied only to this role: a short StaticText can sit inside
|
|
99
|
+
// a longer name legitimately, whereas a line box never carries
|
|
100
|
+
// anything its parent's text does not already contain.
|
|
101
|
+
//
|
|
102
|
+
// When no ancestor announced the words, the line box is the
|
|
103
|
+
// only copy there is, which happens once its StaticText parent
|
|
104
|
+
// is ignored and its children rise. Then it stays.
|
|
105
|
+
if (role === "InlineTextBox" &&
|
|
106
|
+
namedAncestors.some((announced) => announced.includes(name))) {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
if (PRESENTATIONAL_ROLES.has(role))
|
|
110
|
+
return [];
|
|
111
|
+
const value = rawNode.value?.value;
|
|
112
|
+
// The value is shown against the control itself, so text
|
|
113
|
+
// beneath it saying the same thing is a second copy.
|
|
114
|
+
// A carrier's name is its own text, so it announces too: that
|
|
115
|
+
// is what lets its line boxes fold into it.
|
|
116
|
+
const announces = name &&
|
|
117
|
+
(NAMED_FROM_CONTENT_ROLES.has(role) || TEXT_CARRIER_ROLES.has(role));
|
|
118
|
+
const spoken = announces ? [...namedAncestors, name] : namedAncestors;
|
|
119
|
+
const inherited = value === undefined ? spoken : [...spoken, String(value)];
|
|
120
|
+
const children = dropRepeatedText((rawNode.childIds ?? []).flatMap((childId) => build(childId, inherited)));
|
|
121
|
+
const backend = rawNode.backendDOMNodeId;
|
|
122
|
+
const description = rawNode.description?.value;
|
|
123
|
+
// Only say where a name came from when the capture
|
|
124
|
+
// actually reported the mechanisms it tried.
|
|
125
|
+
const from = rawNode.name?.sources ? nameSource(rawNode) : undefined;
|
|
126
|
+
return [
|
|
127
|
+
{
|
|
128
|
+
role,
|
|
129
|
+
name,
|
|
130
|
+
...(backend !== undefined ? { backendDomId: backend } : {}),
|
|
131
|
+
...(value !== undefined ? { value } : {}),
|
|
132
|
+
...(from ? { nameFrom: from } : {}),
|
|
133
|
+
...(description ? { description } : {}),
|
|
134
|
+
properties: readProperties(rawNode),
|
|
135
|
+
children,
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
};
|
|
139
|
+
const root = nodes.find((node) => !node.parentId) ?? nodes[0];
|
|
140
|
+
if (!root)
|
|
141
|
+
return EMPTY;
|
|
142
|
+
return build(root.nodeId, [])[0] ?? EMPTY;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Drop text among a set of siblings that another sibling has
|
|
146
|
+
* already announced. A label sits beside the control it names,
|
|
147
|
+
* so its text reaches the caller through the control and does
|
|
148
|
+
* not need a line of its own.
|
|
149
|
+
*/
|
|
150
|
+
function dropRepeatedText(siblings) {
|
|
151
|
+
const spokenElsewhere = new Set(siblings
|
|
152
|
+
.filter((node) => !isTextOnly(node))
|
|
153
|
+
.map((node) => node.name)
|
|
154
|
+
.filter((name) => name.length > 0));
|
|
155
|
+
if (spokenElsewhere.size === 0)
|
|
156
|
+
return [...siblings];
|
|
157
|
+
return siblings.filter((node) => !(isTextOnly(node) && spokenElsewhere.has(carriedText(node))));
|
|
158
|
+
}
|
|
159
|
+
/** Whether a node is nothing but the text it carries. */
|
|
160
|
+
function isTextOnly(node) {
|
|
161
|
+
if (!TEXT_CARRIER_ROLES.has(node.role))
|
|
162
|
+
return false;
|
|
163
|
+
return node.children.every(isTextOnly);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The text a carrier presents. A label holds its words in a
|
|
167
|
+
* child rather than its own name, so read through to them.
|
|
168
|
+
*/
|
|
169
|
+
function carriedText(node) {
|
|
170
|
+
if (node.name)
|
|
171
|
+
return node.name;
|
|
172
|
+
return node.children.map(carriedText).join("").trim();
|
|
173
|
+
}
|
|
174
|
+
/** Roles that add no meaning on their own and are folded away when unnamed. */
|
|
175
|
+
const NOISE_ROLES = new Set([
|
|
176
|
+
"generic",
|
|
177
|
+
"none",
|
|
178
|
+
"presentation",
|
|
179
|
+
"document",
|
|
180
|
+
"RootWebArea",
|
|
181
|
+
"InlineTextBox",
|
|
182
|
+
"StaticText",
|
|
183
|
+
"text",
|
|
184
|
+
]);
|
|
185
|
+
/**
|
|
186
|
+
* Whether a node says anything on its own. An unnamed wrapper
|
|
187
|
+
* does not: it is scaffolding the page needed and the reader
|
|
188
|
+
* does not. Rendering folds these away, and scoping does not
|
|
189
|
+
* count them as a level, so the two agree on what a level is.
|
|
190
|
+
*/
|
|
191
|
+
export function isMeaningful(node) {
|
|
192
|
+
if (node.name.trim().length > 0)
|
|
193
|
+
return true;
|
|
194
|
+
return !NOISE_ROLES.has(node.role);
|
|
195
|
+
}
|
|
196
|
+
/** Collect a node's reported properties into a flat record. */
|
|
197
|
+
function readProperties(node) {
|
|
198
|
+
const properties = {};
|
|
199
|
+
for (const property of node.properties ?? []) {
|
|
200
|
+
const value = property.value?.value;
|
|
201
|
+
if (value !== undefined)
|
|
202
|
+
properties[property.name] = value;
|
|
203
|
+
}
|
|
204
|
+
return properties;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Hang each frame's tree under the iframe element that owns it.
|
|
208
|
+
*
|
|
209
|
+
* Chrome answers for one frame at a time: the page's tree stops
|
|
210
|
+
* at an Iframe node with no children, and the frame's own tree
|
|
211
|
+
* arrives separately, rooted at its own RootWebArea. Left
|
|
212
|
+
* unjoined, every reading of the page ended at the boundary, and
|
|
213
|
+
* an outline, a structural audit or a keyboard walk simply did
|
|
214
|
+
* not contain what the frame held. Nothing said so, which is the
|
|
215
|
+
* worst part: an embedded checkout form read as an empty box.
|
|
216
|
+
*
|
|
217
|
+
* Every frame's nodes are renumbered on the way in. Both trees
|
|
218
|
+
* number from one, so merging them as they arrive makes the
|
|
219
|
+
* frame's root a duplicate of the page's, and a walk over the
|
|
220
|
+
* result either loses nodes or goes round forever.
|
|
221
|
+
*
|
|
222
|
+
* Frames whose owner is not present are dropped rather than
|
|
223
|
+
* attached to the root. That covers a cross-origin frame, which
|
|
224
|
+
* cannot be read at all, and a frame that went away while we were
|
|
225
|
+
* asking; inventing a parent for either would put content
|
|
226
|
+
* somewhere the page does not have it.
|
|
227
|
+
*/
|
|
228
|
+
export function spliceFrames(main, frames) {
|
|
229
|
+
if (frames.length === 0)
|
|
230
|
+
return [...main];
|
|
231
|
+
const merged = main.map((node) => ({ ...node }));
|
|
232
|
+
const byBackendId = new Map();
|
|
233
|
+
for (const node of merged) {
|
|
234
|
+
if (node.backendDOMNodeId !== undefined) {
|
|
235
|
+
byBackendId.set(node.backendDOMNodeId, node);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// In order, so a frame nested inside another is spliced after
|
|
239
|
+
// its parent frame has been merged and its owner is findable.
|
|
240
|
+
frames.forEach((frame, index) => {
|
|
241
|
+
const owner = byBackendId.get(frame.ownerBackendNodeId);
|
|
242
|
+
if (!owner)
|
|
243
|
+
return;
|
|
244
|
+
const prefix = `f${index}:`;
|
|
245
|
+
const rename = (id) => `${prefix}${id}`;
|
|
246
|
+
const renamed = frame.nodes.map((node) => ({
|
|
247
|
+
...node,
|
|
248
|
+
nodeId: rename(node.nodeId),
|
|
249
|
+
...(node.parentId === undefined
|
|
250
|
+
? {}
|
|
251
|
+
: { parentId: rename(node.parentId) }),
|
|
252
|
+
...(node.childIds === undefined
|
|
253
|
+
? {}
|
|
254
|
+
: { childIds: node.childIds.map(rename) }),
|
|
255
|
+
}));
|
|
256
|
+
const root = renamed.find((node) => node.parentId === undefined);
|
|
257
|
+
if (!root)
|
|
258
|
+
return;
|
|
259
|
+
root.parentId = owner.nodeId;
|
|
260
|
+
owner.childIds = [...(owner.childIds ?? []), root.nodeId];
|
|
261
|
+
for (const node of renamed) {
|
|
262
|
+
merged.push(node);
|
|
263
|
+
if (node.backendDOMNodeId !== undefined) {
|
|
264
|
+
byBackendId.set(node.backendDOMNodeId, node);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
return merged;
|
|
269
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The keyboard walk: what a person who never touches a mouse
|
|
3
|
+
* can actually reach.
|
|
4
|
+
*
|
|
5
|
+
* Every finding here comes from what the browser did when Tab
|
|
6
|
+
* was pressed, not from reading markup and predicting what it
|
|
7
|
+
* ought to do. A focus trap written by hand, a positive tabindex
|
|
8
|
+
* reordering the page, a div wearing a button's clothes: none of
|
|
9
|
+
* these are visible in the markup as bugs, and all of them are
|
|
10
|
+
* obvious the moment you try to tab through.
|
|
11
|
+
*
|
|
12
|
+
* The one judgment that is presentational, and labelled as such,
|
|
13
|
+
* is whether a focus indicator exists: that is decided by
|
|
14
|
+
* comparing what the browser computed for the element at rest
|
|
15
|
+
* against what it computed with focus on it. Whether the
|
|
16
|
+
* resulting indicator is bright enough to see is a contrast
|
|
17
|
+
* question, and belongs with the contrast audit rather than
|
|
18
|
+
* here; this module records the indicator so that audit can
|
|
19
|
+
* judge it.
|
|
20
|
+
*/
|
|
21
|
+
/** The style properties a focus indicator could live in. */
|
|
22
|
+
export interface FocusStyle {
|
|
23
|
+
readonly outlineStyle: string;
|
|
24
|
+
readonly outlineWidth: string;
|
|
25
|
+
readonly outlineColor: string;
|
|
26
|
+
readonly boxShadow: string;
|
|
27
|
+
readonly backgroundColor: string;
|
|
28
|
+
readonly borderColor: string;
|
|
29
|
+
readonly color: string;
|
|
30
|
+
}
|
|
31
|
+
/** Something the browser says can hold focus. */
|
|
32
|
+
export interface WalkCandidate {
|
|
33
|
+
/** Position in document order, and the identity used throughout. */
|
|
34
|
+
readonly index: number;
|
|
35
|
+
readonly tag: string;
|
|
36
|
+
readonly id?: string;
|
|
37
|
+
readonly role?: string;
|
|
38
|
+
readonly name: string;
|
|
39
|
+
readonly tabindex?: number;
|
|
40
|
+
/** Inside an open dialog that is holding focus on purpose. */
|
|
41
|
+
readonly inModal?: boolean;
|
|
42
|
+
readonly resting: FocusStyle;
|
|
43
|
+
}
|
|
44
|
+
/** Where focus actually landed, once. */
|
|
45
|
+
export interface WalkStop {
|
|
46
|
+
/** The candidate this is, or -1 when focus left them all. */
|
|
47
|
+
readonly index: number;
|
|
48
|
+
readonly tag: string;
|
|
49
|
+
readonly id?: string;
|
|
50
|
+
readonly name: string;
|
|
51
|
+
readonly inViewport: boolean;
|
|
52
|
+
/** Inside an open dialog that is holding focus on purpose. */
|
|
53
|
+
readonly inModal?: boolean;
|
|
54
|
+
readonly focused: FocusStyle;
|
|
55
|
+
/** Where it sits, when the browser gave it a box. */
|
|
56
|
+
readonly rect?: {
|
|
57
|
+
readonly x: number;
|
|
58
|
+
readonly y: number;
|
|
59
|
+
readonly width: number;
|
|
60
|
+
readonly height: number;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Two controls on one line that tab against the way they read. */
|
|
64
|
+
export interface VisualJump {
|
|
65
|
+
readonly before: WalkStop;
|
|
66
|
+
readonly after: WalkStop;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Tab order that contradicts the order things are read in.
|
|
70
|
+
*
|
|
71
|
+
* Only same-line inversions, and deliberately so. The general
|
|
72
|
+
* question, whether tab order follows the visual flow of the
|
|
73
|
+
* page, cannot be answered without deciding whether a layout is
|
|
74
|
+
* meant to be read in rows or in columns, and a two-column form
|
|
75
|
+
* that tabs down one column and then the other is both extremely
|
|
76
|
+
* common and perfectly correct. A check that flagged it would be
|
|
77
|
+
* wrong far more often than right, and a false accessibility
|
|
78
|
+
* finding costs more than a missing one.
|
|
79
|
+
*
|
|
80
|
+
* Two controls side by side, tabbed in the opposite order to the
|
|
81
|
+
* one they are read in, has no such excuse. It is what
|
|
82
|
+
* row-reverse and hand-set order values do, and the keyboard
|
|
83
|
+
* order it produces contradicts the page for everybody.
|
|
84
|
+
*/
|
|
85
|
+
export declare function outOfVisualOrder(stops: readonly WalkStop[], direction: "ltr" | "rtl"): readonly VisualJump[];
|
|
86
|
+
/** Something that behaves interactively but cannot be reached. */
|
|
87
|
+
export interface Unreachable {
|
|
88
|
+
readonly tag: string;
|
|
89
|
+
readonly role?: string;
|
|
90
|
+
readonly name: string;
|
|
91
|
+
/** What made it look interactive. */
|
|
92
|
+
readonly because: string;
|
|
93
|
+
}
|
|
94
|
+
/** Everything the driver observed while walking. */
|
|
95
|
+
export interface WalkCapture {
|
|
96
|
+
readonly candidates: readonly WalkCandidate[];
|
|
97
|
+
readonly stops: readonly WalkStop[];
|
|
98
|
+
readonly unreachable: readonly Unreachable[];
|
|
99
|
+
/** Whether pressing Escape freed focus, when it was stuck. */
|
|
100
|
+
readonly escapeFreed?: boolean;
|
|
101
|
+
/** True when the walk stopped at its cap rather than cycling. */
|
|
102
|
+
readonly cappedAt?: number;
|
|
103
|
+
/** Which way the page reads, from the document itself. */
|
|
104
|
+
readonly direction?: "ltr" | "rtl";
|
|
105
|
+
}
|
|
106
|
+
/** Where a focus indicator lives, if anywhere. */
|
|
107
|
+
export type Indicator = "outline" | "boxShadow" | "background" | "border" | "colour" | "none";
|
|
108
|
+
/** A focus ring that is there and cannot be seen. */
|
|
109
|
+
export interface FaintIndicator {
|
|
110
|
+
readonly stop: WalkStop;
|
|
111
|
+
/** Against what it is drawn on, where 2.4.11 asks for 3. */
|
|
112
|
+
readonly ratio: number;
|
|
113
|
+
}
|
|
114
|
+
/** A group of stops focus could not get out of. */
|
|
115
|
+
export interface Trap {
|
|
116
|
+
readonly members: readonly WalkStop[];
|
|
117
|
+
readonly escapeFreed: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Controls outside the cycle, which is what makes it a trap.
|
|
120
|
+
*
|
|
121
|
+
* Not the same as the walk's `missed`: these may well have been
|
|
122
|
+
* visited on the way in. What matters is that focus cannot get
|
|
123
|
+
* back to them once it is inside.
|
|
124
|
+
*/
|
|
125
|
+
readonly stranded: readonly WalkCandidate[];
|
|
126
|
+
}
|
|
127
|
+
/** What the walk found. */
|
|
128
|
+
export interface WalkFindings {
|
|
129
|
+
readonly stops: readonly WalkStop[];
|
|
130
|
+
readonly trap?: Trap;
|
|
131
|
+
/** Focusable things the walk never arrived at. */
|
|
132
|
+
readonly missed: readonly WalkCandidate[];
|
|
133
|
+
/** Stops whose appearance does not change when focused. */
|
|
134
|
+
readonly noIndicator: readonly WalkStop[];
|
|
135
|
+
/**
|
|
136
|
+
* Stops whose indicator exists but is too faint to make out.
|
|
137
|
+
*
|
|
138
|
+
* Kept apart from `noIndicator` because the repair differs: one
|
|
139
|
+
* needs a rule written, the other needs a colour changed.
|
|
140
|
+
*/
|
|
141
|
+
readonly faintIndicator: readonly FaintIndicator[];
|
|
142
|
+
/**
|
|
143
|
+
* Pairs on one line that tab against the way they read.
|
|
144
|
+
*
|
|
145
|
+
* Undecided rather than failed: the geometry is certain, but
|
|
146
|
+
* whether it confuses anyone is a judgement about the page.
|
|
147
|
+
*/
|
|
148
|
+
readonly outOfOrder: readonly VisualJump[];
|
|
149
|
+
/** Where the indicator lives, for those that have one. */
|
|
150
|
+
readonly indicators: ReadonlyMap<number, Indicator>;
|
|
151
|
+
/** Stops that were focused while off screen. */
|
|
152
|
+
readonly offscreen: readonly WalkStop[];
|
|
153
|
+
/** Candidates with a positive tabindex, which reorders the page. */
|
|
154
|
+
readonly positiveTabindex: readonly WalkCandidate[];
|
|
155
|
+
readonly unreachable: readonly Unreachable[];
|
|
156
|
+
/** True when the tab order does not follow document order. */
|
|
157
|
+
readonly reordered: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* The stop budget, when the walk ran out of it.
|
|
160
|
+
*
|
|
161
|
+
* Set means the page was not walked to the end, so anything in
|
|
162
|
+
* `missed` is unvisited rather than unreachable and cannot be
|
|
163
|
+
* counted as a failure.
|
|
164
|
+
*/
|
|
165
|
+
readonly cappedAt?: number;
|
|
166
|
+
/** True when focus stayed inside a dialog that meant to hold it. */
|
|
167
|
+
readonly modalHeldFocus: boolean;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Where the focus indicator lives, by comparing rest with focus.
|
|
171
|
+
*
|
|
172
|
+
* This is the honest test, and the only one that survives
|
|
173
|
+
* contact with real pages: not whether the author wrote an
|
|
174
|
+
* outline rule, but whether the browser draws anything
|
|
175
|
+
* differently when the element has focus.
|
|
176
|
+
*/
|
|
177
|
+
export declare function indicatorOf(resting: FocusStyle, focused: FocusStyle): Indicator;
|
|
178
|
+
/** What judging a focus indicator's visibility concluded. */
|
|
179
|
+
export interface IndicatorVerdict {
|
|
180
|
+
readonly standing: "pass" | "fail" | "undecided";
|
|
181
|
+
readonly ratio?: number;
|
|
182
|
+
readonly reason: string;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Whether a focus indicator can actually be seen.
|
|
186
|
+
*
|
|
187
|
+
* The walk decides an indicator exists by seeing the computed
|
|
188
|
+
* style change. That is a weaker claim than it sounds, and the
|
|
189
|
+
* gap between the two is where the real defect lives: a ring in
|
|
190
|
+
* a colour a shade off the background satisfies every existence
|
|
191
|
+
* check ever written and still leaves someone unable to tell
|
|
192
|
+
* where they are. WCAG 2.4.11 puts the bar at 3:1 against what
|
|
193
|
+
* the indicator is drawn against, which is the same bar 1.4.11
|
|
194
|
+
* sets for any control's own colours.
|
|
195
|
+
*
|
|
196
|
+
* Only an outline is judged. A box shadow can be any number of
|
|
197
|
+
* layers offset in any direction, a background or colour change
|
|
198
|
+
* moves the very surface the comparison would use, and in
|
|
199
|
+
* neither case does the computed value say which pixels changed.
|
|
200
|
+
* Those come back undecided, which is this package's word for a
|
|
201
|
+
* question it will not answer by guessing. A transparent surface
|
|
202
|
+
* is undecided for the same reason: the colour behind the ring
|
|
203
|
+
* belongs to some ancestor the computed style does not name, and
|
|
204
|
+
* compositing against a guess is how a page gets accused of a
|
|
205
|
+
* failure it does not have.
|
|
206
|
+
*/
|
|
207
|
+
export declare function judgeIndicator(input: {
|
|
208
|
+
readonly indicator: Indicator;
|
|
209
|
+
readonly resting: FocusStyle;
|
|
210
|
+
readonly focused: FocusStyle;
|
|
211
|
+
}): IndicatorVerdict;
|
|
212
|
+
/** Read the walk. */
|
|
213
|
+
export declare function analyseWalk(capture: WalkCapture): WalkFindings;
|
|
214
|
+
/**
|
|
215
|
+
* How many of anything else is worth naming before counting.
|
|
216
|
+
*
|
|
217
|
+
* The tab order has always stopped at forty and said how many
|
|
218
|
+
* more there were. The finding lists beside it printed every
|
|
219
|
+
* entry, so one article answered with two hundred and fifty
|
|
220
|
+
* unvisited control names, longer than the rest of the report
|
|
221
|
+
* together and mostly repetitions of the same word.
|
|
222
|
+
*/
|
|
223
|
+
export declare const MAX_LISTED_FINDINGS = 12;
|
|
224
|
+
/** The walk, as a person would report it. */
|
|
225
|
+
export declare function renderWalk(findings: WalkFindings): string;
|