@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,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading axe-core's results.
|
|
3
|
+
*
|
|
4
|
+
* axe is the WCAG baseline here: a mature, widely trusted rule
|
|
5
|
+
* set that there is no reason to reimplement. What it needs is
|
|
6
|
+
* translating, for two reasons.
|
|
7
|
+
*
|
|
8
|
+
* The first is size. A thirteen element test page produces 54 KB
|
|
9
|
+
* of JSON, and a real application produces far more, most of it
|
|
10
|
+
* repeated rule metadata and full outerHTML for every node. Read
|
|
11
|
+
* whole, it would crowd out the answer it was fetched to give.
|
|
12
|
+
*
|
|
13
|
+
* The second is that axe draws a distinction people routinely
|
|
14
|
+
* lose, and it is worth preserving loudly. Some of its rules are
|
|
15
|
+
* WCAG success criteria and some are best practice, and a report
|
|
16
|
+
* that mixes them tells somebody their page fails a standard
|
|
17
|
+
* when it does not. Incomplete results matter for the same
|
|
18
|
+
* reason in reverse: axe declines to judge text over a gradient,
|
|
19
|
+
* and turning that silence into a pass is how a tool starts
|
|
20
|
+
* lying.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* The experimental axe rules that test a real WCAG criterion.
|
|
24
|
+
*
|
|
25
|
+
* axe ships these switched off because it does not trust them to
|
|
26
|
+
* be right, which is its call to make about its own rules. But
|
|
27
|
+
* off means never asked, and for 2.5.3 there is no other rule to
|
|
28
|
+
* ask: leaving the default alone means that criterion is not
|
|
29
|
+
* covered at all, while the report says the page passed the
|
|
30
|
+
* standard. Silence read as a pass is the failure this package
|
|
31
|
+
* cares most about.
|
|
32
|
+
*
|
|
33
|
+
* They are switched on and their findings come back as needing a
|
|
34
|
+
* person, so axe's doubt travels with them rather than being
|
|
35
|
+
* dropped on the floor.
|
|
36
|
+
*
|
|
37
|
+
* The list is checked against the installed axe by a test, so an
|
|
38
|
+
* upgrade that adds or retires one is a failure to read rather
|
|
39
|
+
* than a silent change in what gets audited.
|
|
40
|
+
*/
|
|
41
|
+
export const EXPERIMENTAL_WCAG_RULES = [
|
|
42
|
+
"css-orientation-lock",
|
|
43
|
+
"label-content-name-mismatch",
|
|
44
|
+
"p-as-heading",
|
|
45
|
+
"table-fake-caption",
|
|
46
|
+
"td-has-header",
|
|
47
|
+
];
|
|
48
|
+
/** How far each bar reaches, for comparing one against another. */
|
|
49
|
+
const BAR_REACH = { A: 1, AA: 2, AAA: 3 };
|
|
50
|
+
/**
|
|
51
|
+
* The AAA rules axe ships switched off.
|
|
52
|
+
*
|
|
53
|
+
* Measured against axe 4.12.1: exactly three rules carry a AAA
|
|
54
|
+
* tag and every one of them is disabled by default, so a run that
|
|
55
|
+
* does not name them checks no AAA criterion at all. Judging at
|
|
56
|
+
* AAA without switching these on would report a page as meeting
|
|
57
|
+
* the enhanced bar on the strength of never having tested it.
|
|
58
|
+
*
|
|
59
|
+
* Checked against the installed axe by a test, like the
|
|
60
|
+
* experimental list, so an upgrade that adds or retires one is a
|
|
61
|
+
* failure to read rather than a silent gap.
|
|
62
|
+
*/
|
|
63
|
+
export const ENHANCED_WCAG_RULES = [
|
|
64
|
+
"color-contrast-enhanced",
|
|
65
|
+
"identical-links-same-purpose",
|
|
66
|
+
"meta-refresh-no-exceptions",
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Whether a finding is something the chosen bar actually asks for.
|
|
70
|
+
*
|
|
71
|
+
* A finding carrying no level is a best-practice rule rather than
|
|
72
|
+
* a conformance claim, and those are always reported: they were
|
|
73
|
+
* never the standard's to demand, so a bar cannot excuse them.
|
|
74
|
+
*/
|
|
75
|
+
export function withinBar(levels, bar) {
|
|
76
|
+
if (levels.length === 0)
|
|
77
|
+
return true;
|
|
78
|
+
return levels.some((level) => {
|
|
79
|
+
const reach = BAR_REACH[level];
|
|
80
|
+
return reach !== undefined && reach <= BAR_REACH[bar];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** The strictest level any of these findings failed. */
|
|
84
|
+
export function hardestLevel(findings) {
|
|
85
|
+
let hardest;
|
|
86
|
+
for (const finding of findings) {
|
|
87
|
+
for (const level of finding.levels) {
|
|
88
|
+
const bar = level;
|
|
89
|
+
if (BAR_REACH[bar] === undefined)
|
|
90
|
+
continue;
|
|
91
|
+
if (hardest === undefined || BAR_REACH[bar] < BAR_REACH[hardest]) {
|
|
92
|
+
hardest = bar;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return hardest;
|
|
97
|
+
}
|
|
98
|
+
/** How much markup to keep per node. */
|
|
99
|
+
export const MAX_NODE_HTML = 160;
|
|
100
|
+
const IMPACTS = ["critical", "serious", "moderate", "minor"];
|
|
101
|
+
/** A criterion tag: wcag412 is 4.1.2. */
|
|
102
|
+
const CRITERION = /^wcag(\d)(\d)(\d{1,2})$/;
|
|
103
|
+
/** A level tag: wcag2a, wcag21aa, wcag22aa. */
|
|
104
|
+
const LEVEL = /^wcag\d{1,2}(a{1,3})$/;
|
|
105
|
+
/**
|
|
106
|
+
* Read the WCAG criteria a rule maps to.
|
|
107
|
+
*
|
|
108
|
+
* axe tags rules for several standards at once. Only the WCAG
|
|
109
|
+
* ones are read here, since quoting EN 301 549 clauses at
|
|
110
|
+
* somebody who asked about WCAG is noise.
|
|
111
|
+
*/
|
|
112
|
+
export function criteriaOf(tags) {
|
|
113
|
+
const found = [];
|
|
114
|
+
for (const tag of tags) {
|
|
115
|
+
const parts = CRITERION.exec(tag);
|
|
116
|
+
if (parts)
|
|
117
|
+
found.push(`${parts[1]}.${parts[2]}.${parts[3]}`);
|
|
118
|
+
}
|
|
119
|
+
return found;
|
|
120
|
+
}
|
|
121
|
+
/** Read the conformance levels a rule belongs to. */
|
|
122
|
+
export function levelsOf(tags) {
|
|
123
|
+
const found = new Set();
|
|
124
|
+
for (const tag of tags) {
|
|
125
|
+
const parts = LEVEL.exec(tag);
|
|
126
|
+
if (parts?.[1])
|
|
127
|
+
found.add(parts[1].toUpperCase());
|
|
128
|
+
}
|
|
129
|
+
return [...found].sort();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Whether a rule states a standard or an opinion.
|
|
133
|
+
*
|
|
134
|
+
* axe marks its own recommendations best-practice. They are good
|
|
135
|
+
* advice and they are not WCAG, and a report that blurs the two
|
|
136
|
+
* tells somebody their page fails a standard when it does not.
|
|
137
|
+
*/
|
|
138
|
+
export function authorityOf(tags) {
|
|
139
|
+
if (criteriaOf(tags).length > 0)
|
|
140
|
+
return "wcag";
|
|
141
|
+
// A level tag on its own still says this is a WCAG rule. Every
|
|
142
|
+
// rule axe ships today carries both, so this changes nothing
|
|
143
|
+
// today; it matters because the mark at the top of the report
|
|
144
|
+
// now turns on this answer, and the failure it would cause is
|
|
145
|
+
// the bad one. Reading a real criterion as advice downgrades a
|
|
146
|
+
// violation to WARN and hides it.
|
|
147
|
+
return levelsOf(tags).length > 0 ? "wcag" : "best-practice";
|
|
148
|
+
}
|
|
149
|
+
function impactOf(value) {
|
|
150
|
+
return IMPACTS.find((impact) => impact === value) ?? "minor";
|
|
151
|
+
}
|
|
152
|
+
function selectorOf(node) {
|
|
153
|
+
const first = node.target?.[0];
|
|
154
|
+
if (typeof first === "string")
|
|
155
|
+
return first;
|
|
156
|
+
// A nested array is axe's way of naming a frame path.
|
|
157
|
+
if (Array.isArray(first))
|
|
158
|
+
return first.join(" >> ");
|
|
159
|
+
return "(unlocated)";
|
|
160
|
+
}
|
|
161
|
+
function messagesOf(node) {
|
|
162
|
+
const checks = [
|
|
163
|
+
...(node.any ?? []),
|
|
164
|
+
...(node.all ?? []),
|
|
165
|
+
...(node.none ?? []),
|
|
166
|
+
];
|
|
167
|
+
const messages = checks
|
|
168
|
+
.map((check) => check.message)
|
|
169
|
+
.filter((message) => Boolean(message));
|
|
170
|
+
return messages.length > 0
|
|
171
|
+
? [...new Set(messages)]
|
|
172
|
+
: node.failureSummary
|
|
173
|
+
? [node.failureSummary]
|
|
174
|
+
: [];
|
|
175
|
+
}
|
|
176
|
+
function clip(html) {
|
|
177
|
+
if (!html)
|
|
178
|
+
return "";
|
|
179
|
+
const flat = html.replace(/\s+/g, " ").trim();
|
|
180
|
+
return flat.length <= MAX_NODE_HTML
|
|
181
|
+
? flat
|
|
182
|
+
: `${flat.slice(0, MAX_NODE_HTML)}...`;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The rule switches to hand axe, turning on the experimental
|
|
186
|
+
* rules that carry a WCAG criterion and touching nothing else.
|
|
187
|
+
*
|
|
188
|
+
* Enabling by name rather than by tag on purpose: a runOnly tag
|
|
189
|
+
* list replaces the default set instead of adding to it, so any
|
|
190
|
+
* rule whose tags fell outside the list would quietly stop
|
|
191
|
+
* running. Widening an audit must not narrow it.
|
|
192
|
+
*/
|
|
193
|
+
export function enabledRules(bar = "AAA") {
|
|
194
|
+
const switches = {};
|
|
195
|
+
for (const rule of EXPERIMENTAL_WCAG_RULES) {
|
|
196
|
+
switches[rule] = { enabled: true };
|
|
197
|
+
}
|
|
198
|
+
// The enhanced rules are only asked for when the enhanced bar is,
|
|
199
|
+
// because switching them on always would report AAA failures
|
|
200
|
+
// against a page that never claimed to reach for AAA.
|
|
201
|
+
if (bar === "AAA") {
|
|
202
|
+
for (const rule of ENHANCED_WCAG_RULES) {
|
|
203
|
+
switches[rule] = { enabled: true };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return switches;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Turn one raw axe result into a finding.
|
|
210
|
+
*
|
|
211
|
+
* A rule axe tags experimental never comes back decided. Five of
|
|
212
|
+
* those rules carry real WCAG criteria and are switched off by
|
|
213
|
+
* default, so running them is the only way some criteria get
|
|
214
|
+
* checked at all, 2.5.3 among them. But axe declines to trust
|
|
215
|
+
* their judgement, and repeating what they say as a settled
|
|
216
|
+
* failure would be claiming an authority its author did not.
|
|
217
|
+
* They are reported as needing a person, which is what they are.
|
|
218
|
+
*/
|
|
219
|
+
export function readResult(result, kind) {
|
|
220
|
+
const tags = result.tags ?? [];
|
|
221
|
+
return {
|
|
222
|
+
rule: result.id,
|
|
223
|
+
kind: tags.includes("experimental") ? "needs-review" : kind,
|
|
224
|
+
impact: impactOf(result.impact),
|
|
225
|
+
authority: authorityOf(tags),
|
|
226
|
+
criteria: criteriaOf(tags),
|
|
227
|
+
levels: levelsOf(tags),
|
|
228
|
+
help: result.help ?? result.description ?? result.id,
|
|
229
|
+
...(result.helpUrl === undefined ? {} : { helpUrl: result.helpUrl }),
|
|
230
|
+
nodes: (result.nodes ?? []).map((node) => ({
|
|
231
|
+
selector: selectorOf(node),
|
|
232
|
+
html: clip(node.html),
|
|
233
|
+
messages: messagesOf(node),
|
|
234
|
+
})),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Read a whole axe run.
|
|
239
|
+
*
|
|
240
|
+
* Findings are ordered by how much they bite, then by rule, so
|
|
241
|
+
* the first thing read is the worst thing found. Violations come
|
|
242
|
+
* before the ones needing review, because a thing known to be
|
|
243
|
+
* broken outranks a thing that might be.
|
|
244
|
+
*/
|
|
245
|
+
export function readAxeRun(run) {
|
|
246
|
+
const findings = [
|
|
247
|
+
...(run.violations ?? []).map((result) => readResult(result, "violation")),
|
|
248
|
+
...(run.incomplete ?? []).map((result) => readResult(result, "needs-review")),
|
|
249
|
+
];
|
|
250
|
+
return orderFindings(findings);
|
|
251
|
+
}
|
|
252
|
+
/** Worst first, and what is known broken before what might be. */
|
|
253
|
+
export function orderFindings(findings) {
|
|
254
|
+
return [...findings].sort((a, b) => {
|
|
255
|
+
if (a.kind !== b.kind)
|
|
256
|
+
return a.kind === "violation" ? -1 : 1;
|
|
257
|
+
const severity = IMPACTS.indexOf(a.impact) - IMPACTS.indexOf(b.impact);
|
|
258
|
+
return severity === 0 ? a.rule.localeCompare(b.rule) : severity;
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Put two rule sets into one ordered report.
|
|
263
|
+
*
|
|
264
|
+
* A reader should not have to know which rule set caught a
|
|
265
|
+
* thing in order to act on it, so the sets are interleaved by
|
|
266
|
+
* severity rather than listed one after the other.
|
|
267
|
+
*
|
|
268
|
+
* Where both report the same thing, the primary set wins. Two
|
|
269
|
+
* entries saying the same thing is worse than either alone, and
|
|
270
|
+
* the overlap is not always visible from the rule names: a
|
|
271
|
+
* secondary rule can declare which primary rule supersedes it.
|
|
272
|
+
*/
|
|
273
|
+
export function mergeFindings(primary, secondary, supersededBy = {}) {
|
|
274
|
+
const taken = new Set(primary.map((finding) => finding.rule));
|
|
275
|
+
return orderFindings([
|
|
276
|
+
...primary,
|
|
277
|
+
...secondary.filter((finding) => !taken.has(finding.rule) &&
|
|
278
|
+
!taken.has(supersededBy[finding.rule] ?? "")),
|
|
279
|
+
]);
|
|
280
|
+
}
|
|
281
|
+
/** Count what was found. */
|
|
282
|
+
export function tallyFindings(findings) {
|
|
283
|
+
const byImpact = {
|
|
284
|
+
critical: 0,
|
|
285
|
+
serious: 0,
|
|
286
|
+
moderate: 0,
|
|
287
|
+
minor: 0,
|
|
288
|
+
};
|
|
289
|
+
let elements = 0;
|
|
290
|
+
let reviewElements = 0;
|
|
291
|
+
let wcag = 0;
|
|
292
|
+
let bestPractice = 0;
|
|
293
|
+
let violations = 0;
|
|
294
|
+
let needsReview = 0;
|
|
295
|
+
for (const finding of findings) {
|
|
296
|
+
if (finding.kind === "violation") {
|
|
297
|
+
// Counted apart, because an element nobody could judge has
|
|
298
|
+
// not been shown to be broken and must not inflate a
|
|
299
|
+
// failure count.
|
|
300
|
+
elements += finding.nodes.length;
|
|
301
|
+
violations += 1;
|
|
302
|
+
byImpact[finding.impact] += 1;
|
|
303
|
+
if (finding.authority === "wcag")
|
|
304
|
+
wcag += 1;
|
|
305
|
+
else
|
|
306
|
+
bestPractice += 1;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
reviewElements += finding.nodes.length;
|
|
310
|
+
needsReview += 1;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
violations,
|
|
315
|
+
needsReview,
|
|
316
|
+
elements,
|
|
317
|
+
reviewElements,
|
|
318
|
+
byImpact,
|
|
319
|
+
wcag,
|
|
320
|
+
bestPractice,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contrast for text whose background axe declines to judge.
|
|
3
|
+
*
|
|
4
|
+
* A gradient or a photograph defeats the usual reading: there is no
|
|
5
|
+
* single background colour to compare against, so axe reports the
|
|
6
|
+
* element as needing a person. The pixels are available, but they
|
|
7
|
+
* cannot be classified on colour alone, because where contrast is
|
|
8
|
+
* worst the glyph and its background are the same colour by
|
|
9
|
+
* definition, and antialiasing puts blends between the two.
|
|
10
|
+
*
|
|
11
|
+
* What works is a subtraction. Shoot the region, hide the text, shoot
|
|
12
|
+
* it again: the pixels that changed are exactly where the glyphs
|
|
13
|
+
* landed, edges included, and the second shot shows what lies under
|
|
14
|
+
* them. Every ratio here is measured over that mask and no wider, so
|
|
15
|
+
* the answer is about the text a reader has to read rather than about
|
|
16
|
+
* the box it sits in.
|
|
17
|
+
*/
|
|
18
|
+
import { type ContrastLevel, type TextSizing } from "./contrast.js";
|
|
19
|
+
/** A decoded region: RGBA, row-major, as a PNG decodes. */
|
|
20
|
+
export interface Pixels {
|
|
21
|
+
readonly width: number;
|
|
22
|
+
readonly height: number;
|
|
23
|
+
readonly data: Uint8Array | Buffer;
|
|
24
|
+
}
|
|
25
|
+
/** An sRGB colour, as a computed style reports one. */
|
|
26
|
+
export interface Rgb {
|
|
27
|
+
readonly r: number;
|
|
28
|
+
readonly g: number;
|
|
29
|
+
readonly b: number;
|
|
30
|
+
}
|
|
31
|
+
/** What the subtraction found. */
|
|
32
|
+
export interface BehindReport {
|
|
33
|
+
/** How many pixels the glyphs touched. Zero means nothing to judge. */
|
|
34
|
+
readonly glyphPixels: number;
|
|
35
|
+
/** The worst ratio the text meets anywhere it lands. */
|
|
36
|
+
readonly worstRatio: number;
|
|
37
|
+
/** The ratio the criterion asks of text this size at this bar. */
|
|
38
|
+
readonly required: number;
|
|
39
|
+
readonly verdict: "pass" | "fail" | "undecidable";
|
|
40
|
+
/** Which undecidable this was, when it was one. */
|
|
41
|
+
readonly undecided: "no-text-pixels" | "unreadable-text-colour" | undefined;
|
|
42
|
+
/** Where the worst pixel sat, relative to the region. */
|
|
43
|
+
readonly worstAt: {
|
|
44
|
+
readonly x: number;
|
|
45
|
+
readonly y: number;
|
|
46
|
+
} | undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Judge text against the background actually behind its glyphs.
|
|
50
|
+
*
|
|
51
|
+
* The two regions must be the same size and the same view: only the
|
|
52
|
+
* text may differ between them. Hiding text is a paint-only change,
|
|
53
|
+
* so nothing moves and the subtraction stays aligned.
|
|
54
|
+
*/
|
|
55
|
+
export declare function foldBehind(input: {
|
|
56
|
+
readonly withText: Pixels;
|
|
57
|
+
readonly bare: Pixels;
|
|
58
|
+
readonly textColour: Rgb | undefined;
|
|
59
|
+
readonly sizing: TextSizing;
|
|
60
|
+
readonly bar: ContrastLevel;
|
|
61
|
+
}): BehindReport;
|
|
62
|
+
/** Render a subtraction as a verdict a reader can act on. */
|
|
63
|
+
export declare function renderBehind(report: BehindReport): string;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contrast for text whose background axe declines to judge.
|
|
3
|
+
*
|
|
4
|
+
* A gradient or a photograph defeats the usual reading: there is no
|
|
5
|
+
* single background colour to compare against, so axe reports the
|
|
6
|
+
* element as needing a person. The pixels are available, but they
|
|
7
|
+
* cannot be classified on colour alone, because where contrast is
|
|
8
|
+
* worst the glyph and its background are the same colour by
|
|
9
|
+
* definition, and antialiasing puts blends between the two.
|
|
10
|
+
*
|
|
11
|
+
* What works is a subtraction. Shoot the region, hide the text, shoot
|
|
12
|
+
* it again: the pixels that changed are exactly where the glyphs
|
|
13
|
+
* landed, edges included, and the second shot shows what lies under
|
|
14
|
+
* them. Every ratio here is measured over that mask and no wider, so
|
|
15
|
+
* the answer is about the text a reader has to read rather than about
|
|
16
|
+
* the box it sits in.
|
|
17
|
+
*/
|
|
18
|
+
import { isLargeText, } from "./contrast.js";
|
|
19
|
+
/** Relative luminance, per WCAG's definition. */
|
|
20
|
+
function luminance(r, g, b) {
|
|
21
|
+
const channel = (raw) => {
|
|
22
|
+
const s = raw / 255;
|
|
23
|
+
return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
|
|
24
|
+
};
|
|
25
|
+
return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);
|
|
26
|
+
}
|
|
27
|
+
/** The contrast ratio between two luminances, per WCAG. */
|
|
28
|
+
function ratio(one, other) {
|
|
29
|
+
const [lighter, darker] = one > other ? [one, other] : [other, one];
|
|
30
|
+
return (lighter + 0.05) / (darker + 0.05);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Judge text against the background actually behind its glyphs.
|
|
34
|
+
*
|
|
35
|
+
* The two regions must be the same size and the same view: only the
|
|
36
|
+
* text may differ between them. Hiding text is a paint-only change,
|
|
37
|
+
* so nothing moves and the subtraction stays aligned.
|
|
38
|
+
*/
|
|
39
|
+
export function foldBehind(input) {
|
|
40
|
+
const { withText, bare, textColour, sizing, bar } = input;
|
|
41
|
+
const large = isLargeText(sizing);
|
|
42
|
+
// The four numbers WCAG 1.4.3 and 1.4.6 actually specify.
|
|
43
|
+
const required = bar === "AAA" ? (large ? 4.5 : 7) : large ? 3 : 4.5;
|
|
44
|
+
const width = Math.min(withText.width, bare.width);
|
|
45
|
+
const height = Math.min(withText.height, bare.height);
|
|
46
|
+
const textLum = textColour
|
|
47
|
+
? luminance(textColour.r, textColour.g, textColour.b)
|
|
48
|
+
: undefined;
|
|
49
|
+
let glyphPixels = 0;
|
|
50
|
+
let worstRatio = Number.POSITIVE_INFINITY;
|
|
51
|
+
let worstAt;
|
|
52
|
+
for (let y = 0; y < height; y++) {
|
|
53
|
+
for (let x = 0; x < width; x++) {
|
|
54
|
+
const inText = (y * withText.width + x) * 4;
|
|
55
|
+
const inBare = (y * bare.width + x) * 4;
|
|
56
|
+
// Any difference at all counts. An antialiased edge can move a
|
|
57
|
+
// single channel by one, and that pixel is still text; a
|
|
58
|
+
// threshold here would quietly stop judging thin glyphs.
|
|
59
|
+
const touched = withText.data[inText] !== bare.data[inBare] ||
|
|
60
|
+
withText.data[inText + 1] !== bare.data[inBare + 1] ||
|
|
61
|
+
withText.data[inText + 2] !== bare.data[inBare + 2];
|
|
62
|
+
if (!touched)
|
|
63
|
+
continue;
|
|
64
|
+
glyphPixels++;
|
|
65
|
+
// The mask is worth building even with no colour to judge
|
|
66
|
+
// against: the count is then a measurement rather than a
|
|
67
|
+
// stand-in for one.
|
|
68
|
+
if (textLum === undefined)
|
|
69
|
+
continue;
|
|
70
|
+
const behind = ratio(textLum, luminance(bare.data[inBare] ?? 0, bare.data[inBare + 1] ?? 0, bare.data[inBare + 2] ?? 0));
|
|
71
|
+
if (behind < worstRatio) {
|
|
72
|
+
worstRatio = behind;
|
|
73
|
+
worstAt = { x, y };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (glyphPixels === 0) {
|
|
78
|
+
return {
|
|
79
|
+
glyphPixels: 0,
|
|
80
|
+
worstRatio: 0,
|
|
81
|
+
required,
|
|
82
|
+
verdict: "undecidable",
|
|
83
|
+
undecided: "no-text-pixels",
|
|
84
|
+
worstAt: undefined,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (textLum === undefined) {
|
|
88
|
+
// The glyphs are there and the background is readable; what is
|
|
89
|
+
// missing is the one colour the ratio needs. Substituting a
|
|
90
|
+
// plausible one would answer confidently about a colour nobody
|
|
91
|
+
// read, which is the failure this whole module exists to avoid.
|
|
92
|
+
return {
|
|
93
|
+
glyphPixels,
|
|
94
|
+
worstRatio: 0,
|
|
95
|
+
required,
|
|
96
|
+
verdict: "undecidable",
|
|
97
|
+
undecided: "unreadable-text-colour",
|
|
98
|
+
worstAt: undefined,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
glyphPixels,
|
|
103
|
+
worstRatio,
|
|
104
|
+
required,
|
|
105
|
+
verdict: worstRatio >= required ? "pass" : "fail",
|
|
106
|
+
undecided: undefined,
|
|
107
|
+
worstAt,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** How much of the region the glyphs actually covered. */
|
|
111
|
+
function glyphArea(pixels) {
|
|
112
|
+
return pixels === 1 ? "1 pixel" : `${pixels} pixels`;
|
|
113
|
+
}
|
|
114
|
+
/** Render a subtraction as a verdict a reader can act on. */
|
|
115
|
+
export function renderBehind(report) {
|
|
116
|
+
if (report.verdict === "undecidable") {
|
|
117
|
+
const many = glyphArea(report.glyphPixels);
|
|
118
|
+
const why = report.undecided === "unreadable-text-colour"
|
|
119
|
+
? `The glyphs are here, covering ${many}, but the text's own ` +
|
|
120
|
+
"colour could not be read, so there is nothing to compare " +
|
|
121
|
+
"the background against. A stylesheet using a colour " +
|
|
122
|
+
"syntax this build cannot parse will do that."
|
|
123
|
+
: "Hiding the text changed no pixels, so there is no text here " +
|
|
124
|
+
"to measure, or it was already invisible.";
|
|
125
|
+
return ["WARN contrast behind the text could not be judged", "", why].join("\n");
|
|
126
|
+
}
|
|
127
|
+
const mark = report.verdict === "pass" ? "PASS" : "FAIL";
|
|
128
|
+
const ratioText = `${report.worstRatio.toFixed(2)}:1`;
|
|
129
|
+
const where = report.worstAt
|
|
130
|
+
? ` Worst at ${report.worstAt.x},${report.worstAt.y} in the region.`
|
|
131
|
+
: "";
|
|
132
|
+
// The pixel count is what keeps the ratio honest: it says the
|
|
133
|
+
// number describes the glyphs rather than the whole box.
|
|
134
|
+
const many = glyphArea(report.glyphPixels);
|
|
135
|
+
return [
|
|
136
|
+
`${mark} worst contrast behind the text is ${ratioText}` +
|
|
137
|
+
`, against ${report.required}:1 required`,
|
|
138
|
+
"",
|
|
139
|
+
`Measured over the ${many} the glyphs cover, against the ` +
|
|
140
|
+
`background underneath them.${where}`,
|
|
141
|
+
].join("\n");
|
|
142
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Building the structural view from two of the browser's own
|
|
3
|
+
* accounts of the page.
|
|
4
|
+
*
|
|
5
|
+
* The snapshot knows every element, its attributes, whether it
|
|
6
|
+
* was drawn and where it sits in the tree. The accessibility
|
|
7
|
+
* tree knows what each one is and what it is called. Neither
|
|
8
|
+
* knows both, and every structural rule needs both, so they are
|
|
9
|
+
* joined here on the backend node id that appears in each.
|
|
10
|
+
*
|
|
11
|
+
* The join is the whole of this module's job. No role is
|
|
12
|
+
* inferred from a tag, no name is derived from content, and
|
|
13
|
+
* nothing is guessed when a node appears in one account and not
|
|
14
|
+
* the other. What the browser did not say, this does not say.
|
|
15
|
+
*/
|
|
16
|
+
import type { IndexedNode } from "../snapshot/index.js";
|
|
17
|
+
import type { StructureNode } from "./structure.js";
|
|
18
|
+
/** The accessibility facts a structural rule needs. */
|
|
19
|
+
export interface AxFacts {
|
|
20
|
+
readonly backendNodeId: number;
|
|
21
|
+
readonly role?: string;
|
|
22
|
+
readonly name?: string;
|
|
23
|
+
/** Absent when the tree did not say, which it does not for
|
|
24
|
+
* any node it ignored. Not the same as false. */
|
|
25
|
+
readonly focusable?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Give an element an address a person can act on.
|
|
29
|
+
*
|
|
30
|
+
* An id is best, then a test hook, then a class, and a tag with
|
|
31
|
+
* its position as the last resort. This is presentation, not
|
|
32
|
+
* measurement: the browser did not offer a selector, and one
|
|
33
|
+
* that reads well is worth more than one that is unique.
|
|
34
|
+
*/
|
|
35
|
+
export declare function selectorFor(node: IndexedNode): string;
|
|
36
|
+
/**
|
|
37
|
+
* Join a snapshot to an accessibility tree.
|
|
38
|
+
*
|
|
39
|
+
* Text nodes are dropped: every structural rule is about
|
|
40
|
+
* elements, and keeping the text would double the size of the
|
|
41
|
+
* capture to no purpose.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildStructure(nodes: readonly IndexedNode[], facts: readonly AxFacts[]): readonly StructureNode[];
|