@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,595 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural accessibility rules of our own.
|
|
3
|
+
*
|
|
4
|
+
* These sit beside axe rather than duplicating it. Some are
|
|
5
|
+
* things axe reports only as best practice, where the failure is
|
|
6
|
+
* in fact severe; some it declines to decide; some it does not
|
|
7
|
+
* look at. Every one of them is a question about how a page is
|
|
8
|
+
* put together rather than how it is painted, which is why they
|
|
9
|
+
* can run against a stored capture.
|
|
10
|
+
*
|
|
11
|
+
* Nothing here parses CSS or re-derives a role. Roles and names
|
|
12
|
+
* come from the browser's accessibility tree and attributes come
|
|
13
|
+
* from its snapshot, joined before they arrive. What this module
|
|
14
|
+
* contributes is the reasoning about relationships between them:
|
|
15
|
+
* which reference points nowhere, which control is buried inside
|
|
16
|
+
* another, which heading skipped a level.
|
|
17
|
+
*/
|
|
18
|
+
/** Attributes whose value is one or more element ids. */
|
|
19
|
+
export const IDREF_ATTRIBUTES = [
|
|
20
|
+
"aria-labelledby",
|
|
21
|
+
"aria-describedby",
|
|
22
|
+
"aria-controls",
|
|
23
|
+
"aria-owns",
|
|
24
|
+
"aria-details",
|
|
25
|
+
"aria-errormessage",
|
|
26
|
+
"aria-flowto",
|
|
27
|
+
];
|
|
28
|
+
/** Attributes holding exactly one id. */
|
|
29
|
+
export const SINGLE_IDREF_ATTRIBUTES = [
|
|
30
|
+
"aria-activedescendant",
|
|
31
|
+
"for",
|
|
32
|
+
];
|
|
33
|
+
/** Roles that name a region of the page. */
|
|
34
|
+
export const LANDMARK_ROLES = [
|
|
35
|
+
"banner",
|
|
36
|
+
"complementary",
|
|
37
|
+
"contentinfo",
|
|
38
|
+
"form",
|
|
39
|
+
"main",
|
|
40
|
+
"navigation",
|
|
41
|
+
"region",
|
|
42
|
+
"search",
|
|
43
|
+
];
|
|
44
|
+
/** Roles a person operates, for the nesting rule. */
|
|
45
|
+
const INTERACTIVE_ROLES = new Set([
|
|
46
|
+
"button",
|
|
47
|
+
"checkbox",
|
|
48
|
+
"combobox",
|
|
49
|
+
"link",
|
|
50
|
+
"menuitem",
|
|
51
|
+
"menuitemcheckbox",
|
|
52
|
+
"menuitemradio",
|
|
53
|
+
"option",
|
|
54
|
+
"radio",
|
|
55
|
+
"searchbox",
|
|
56
|
+
"slider",
|
|
57
|
+
"spinbutton",
|
|
58
|
+
"switch",
|
|
59
|
+
"tab",
|
|
60
|
+
"textbox",
|
|
61
|
+
]);
|
|
62
|
+
/** Roles that must hold a name from the author, not the content. */
|
|
63
|
+
const NEEDS_LABEL_ROLES = new Set([
|
|
64
|
+
"checkbox",
|
|
65
|
+
"combobox",
|
|
66
|
+
"listbox",
|
|
67
|
+
"radio",
|
|
68
|
+
"searchbox",
|
|
69
|
+
"slider",
|
|
70
|
+
"spinbutton",
|
|
71
|
+
"switch",
|
|
72
|
+
"textbox",
|
|
73
|
+
]);
|
|
74
|
+
function finding(rule, nodes) {
|
|
75
|
+
if (nodes.length === 0)
|
|
76
|
+
return [];
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
rule: rule.rule,
|
|
80
|
+
kind: "violation",
|
|
81
|
+
impact: rule.impact,
|
|
82
|
+
authority: rule.criteria.length > 0 ? "wcag" : "best-practice",
|
|
83
|
+
criteria: rule.criteria,
|
|
84
|
+
levels: rule.levels,
|
|
85
|
+
help: rule.help,
|
|
86
|
+
nodes,
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
function nodeOf(node, message) {
|
|
91
|
+
return {
|
|
92
|
+
selector: node.selector,
|
|
93
|
+
html: node.html ?? "",
|
|
94
|
+
messages: [message],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* References that point at nothing.
|
|
99
|
+
*
|
|
100
|
+
* A broken aria-labelledby does not degrade, it erases: the
|
|
101
|
+
* element ends up with no accessible name at all rather than
|
|
102
|
+
* falling back to its content. That makes this more severe than
|
|
103
|
+
* the "invalid attribute value" it is usually filed under.
|
|
104
|
+
*
|
|
105
|
+
* Two attributes are not like the others. aria-controls and
|
|
106
|
+
* aria-owns routinely point at something the widget has not built
|
|
107
|
+
* yet: a closed combobox or disclosure has no popup in the
|
|
108
|
+
* document, and every popular menu library ships exactly that
|
|
109
|
+
* markup. axe settles it the same way and says so in its own
|
|
110
|
+
* source, refusing to fail either attribute while aria-expanded
|
|
111
|
+
* is "false". This rule used to fail both as critical, so a real
|
|
112
|
+
* app opened with two critical WCAG failures for a pattern that
|
|
113
|
+
* is correct.
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Attributes whose target may legitimately not exist yet.
|
|
117
|
+
*
|
|
118
|
+
* Both name something the widget owns and renders on demand, so
|
|
119
|
+
* their absence while collapsed says nothing about correctness.
|
|
120
|
+
*/
|
|
121
|
+
const DEFERS_TO_EXPANDED = new Set(["aria-controls", "aria-owns"]);
|
|
122
|
+
/**
|
|
123
|
+
* Whether a widget is currently showing what it controls.
|
|
124
|
+
*
|
|
125
|
+
* Absent aria-expanded means this is not a disclosure at all, so
|
|
126
|
+
* there is no excuse to extend: only an explicit "false" earns
|
|
127
|
+
* one. aria-selected is included because axe treats a deselected
|
|
128
|
+
* tab the same way, and for the same reason.
|
|
129
|
+
*/
|
|
130
|
+
function isExpanded(node) {
|
|
131
|
+
return (node.attributes["aria-expanded"] !== "false" &&
|
|
132
|
+
node.attributes["aria-selected"] !== "false");
|
|
133
|
+
}
|
|
134
|
+
export function brokenReferences(nodes) {
|
|
135
|
+
const present = new Set(nodes.map((node) => node.attributes.id).filter(Boolean));
|
|
136
|
+
const broken = [];
|
|
137
|
+
for (const node of nodes) {
|
|
138
|
+
for (const attribute of [...IDREF_ATTRIBUTES, ...SINGLE_IDREF_ATTRIBUTES]) {
|
|
139
|
+
const value = node.attributes[attribute];
|
|
140
|
+
if (!value)
|
|
141
|
+
continue;
|
|
142
|
+
const single = SINGLE_IDREF_ATTRIBUTES.includes(attribute);
|
|
143
|
+
const wanted = single ? [value.trim()] : value.trim().split(/\s+/);
|
|
144
|
+
const missing = wanted.filter((id) => id !== "" && !present.has(id));
|
|
145
|
+
if (missing.length === 0)
|
|
146
|
+
continue;
|
|
147
|
+
if (DEFERS_TO_EXPANDED.has(attribute) && !isExpanded(node))
|
|
148
|
+
continue;
|
|
149
|
+
broken.push(nodeOf(node, `${attribute} points at ${missing
|
|
150
|
+
.map((id) => `'${id}'`)
|
|
151
|
+
.join(", ")}, which ${missing.length === 1 ? "is not" : "are not"} on the page.`));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return finding({
|
|
155
|
+
rule: "reference-resolves",
|
|
156
|
+
impact: "critical",
|
|
157
|
+
criteria: ["1.3.1", "4.1.2"],
|
|
158
|
+
levels: ["A"],
|
|
159
|
+
help: "ARIA references must point at elements that exist. A broken " +
|
|
160
|
+
"aria-labelledby erases the name rather than falling back to it.",
|
|
161
|
+
}, broken);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Things hidden from assistive technology but still tabbable.
|
|
165
|
+
*
|
|
166
|
+
* This is the worst kind of inconsistency, because the page
|
|
167
|
+
* behaves differently depending on which way somebody uses it:
|
|
168
|
+
* focus lands on something a screen reader will not announce, so
|
|
169
|
+
* the user is somewhere they cannot be told about.
|
|
170
|
+
*/
|
|
171
|
+
export function hiddenButFocusable(nodes) {
|
|
172
|
+
const byId = new Map(nodes.map((node) => [node.id, node]));
|
|
173
|
+
const found = [];
|
|
174
|
+
for (const node of nodes) {
|
|
175
|
+
if (!node.focusable || !node.rendered)
|
|
176
|
+
continue;
|
|
177
|
+
if (node.attributes["aria-hidden"] === "true") {
|
|
178
|
+
found.push(nodeOf(node, "It is aria-hidden and can still be focused."));
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const hiding = node.ancestors
|
|
182
|
+
.map((id) => byId.get(id))
|
|
183
|
+
.find((ancestor) => ancestor?.attributes["aria-hidden"] === "true");
|
|
184
|
+
if (hiding) {
|
|
185
|
+
found.push(nodeOf(node, `An ancestor (${hiding.selector}) is aria-hidden, so this ` +
|
|
186
|
+
"is announced to nobody but still takes focus."));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return finding({
|
|
190
|
+
rule: "hidden-focusable",
|
|
191
|
+
impact: "critical",
|
|
192
|
+
criteria: ["1.3.1", "4.1.2"],
|
|
193
|
+
levels: ["A"],
|
|
194
|
+
help: "Anything aria-hidden must not be focusable. Focus lands " +
|
|
195
|
+
"somewhere a screen reader will not announce.",
|
|
196
|
+
}, found);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Controls buried inside other controls.
|
|
200
|
+
*
|
|
201
|
+
* What happens on a click is then undefined in practice: the
|
|
202
|
+
* browser flattens the pair differently from the accessibility
|
|
203
|
+
* tree, so what a mouse does and what a screen reader reports
|
|
204
|
+
* stop agreeing.
|
|
205
|
+
*/
|
|
206
|
+
export function nestedInteractives(nodes) {
|
|
207
|
+
const byId = new Map(nodes.map((node) => [node.id, node]));
|
|
208
|
+
const found = [];
|
|
209
|
+
for (const node of nodes) {
|
|
210
|
+
if (!node.role || !INTERACTIVE_ROLES.has(node.role))
|
|
211
|
+
continue;
|
|
212
|
+
const inside = node.ancestors
|
|
213
|
+
.map((id) => byId.get(id))
|
|
214
|
+
.find((ancestor) => ancestor?.role && INTERACTIVE_ROLES.has(ancestor.role));
|
|
215
|
+
if (!inside)
|
|
216
|
+
continue;
|
|
217
|
+
found.push(nodeOf(node, `A ${node.role} inside a ${inside.role} (${inside.selector}). ` +
|
|
218
|
+
"Only one of them can receive the interaction."));
|
|
219
|
+
}
|
|
220
|
+
return finding({
|
|
221
|
+
rule: "nested-interactive",
|
|
222
|
+
impact: "serious",
|
|
223
|
+
criteria: ["1.3.1", "4.1.2"],
|
|
224
|
+
levels: ["A"],
|
|
225
|
+
help: "An interactive element must not contain another. The mouse " +
|
|
226
|
+
"and the accessibility tree disagree about what was operated.",
|
|
227
|
+
}, found);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Headings that skip a level, and pages with several firsts.
|
|
231
|
+
*
|
|
232
|
+
* Headings are how most screen reader users navigate a long
|
|
233
|
+
* page, so a broken outline is a broken table of contents rather
|
|
234
|
+
* than a cosmetic complaint.
|
|
235
|
+
*/
|
|
236
|
+
export function headingOutline(nodes) {
|
|
237
|
+
// See SUPERSEDED_BY: axe reports the skip too, and classifies
|
|
238
|
+
// it as best practice rather than a criterion. Its judgment
|
|
239
|
+
// wins where both fire; this runs for captures with no axe.
|
|
240
|
+
const headings = nodes
|
|
241
|
+
.filter((node) => node.rendered)
|
|
242
|
+
.map((node) => ({ node, level: headingLevel(node) }))
|
|
243
|
+
.filter((entry) => Boolean(entry.level));
|
|
244
|
+
const skipped = [];
|
|
245
|
+
const firsts = [];
|
|
246
|
+
let previous = 0;
|
|
247
|
+
for (const { node, level } of headings) {
|
|
248
|
+
if (level === 1)
|
|
249
|
+
firsts.push(nodeOf(node, `Heading level 1: ${node.name ?? ""}`));
|
|
250
|
+
if (previous > 0 && level > previous + 1) {
|
|
251
|
+
skipped.push(nodeOf(node, `Jumps from level ${previous} to level ${level}, so the ` +
|
|
252
|
+
`level ${previous + 1} it belongs under is missing.`));
|
|
253
|
+
}
|
|
254
|
+
previous = level;
|
|
255
|
+
}
|
|
256
|
+
return [
|
|
257
|
+
...finding({
|
|
258
|
+
rule: "heading-skips-level",
|
|
259
|
+
impact: "moderate",
|
|
260
|
+
criteria: ["1.3.1"],
|
|
261
|
+
levels: ["A"],
|
|
262
|
+
help: "Heading levels must not skip. Headings are how a page is " +
|
|
263
|
+
"navigated without sight, and a gap breaks the outline.",
|
|
264
|
+
}, skipped),
|
|
265
|
+
...finding({
|
|
266
|
+
rule: "single-first-heading",
|
|
267
|
+
impact: "moderate",
|
|
268
|
+
criteria: [],
|
|
269
|
+
levels: [],
|
|
270
|
+
help: "A page should have one level 1 heading naming what the " +
|
|
271
|
+
"page is. Several leaves no single answer.",
|
|
272
|
+
}, firsts.length > 1 ? firsts : []),
|
|
273
|
+
];
|
|
274
|
+
}
|
|
275
|
+
function headingLevel(node) {
|
|
276
|
+
const fromTag = /^h([1-6])$/.exec(node.tag);
|
|
277
|
+
if (fromTag?.[1])
|
|
278
|
+
return Number(fromTag[1]);
|
|
279
|
+
if (node.role !== "heading")
|
|
280
|
+
return undefined;
|
|
281
|
+
const declared = node.attributes["aria-level"];
|
|
282
|
+
return declared ? Number(declared) : undefined;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Landmarks that cannot be told apart.
|
|
286
|
+
*
|
|
287
|
+
* Two navigations are fine and common. Two navigations with no
|
|
288
|
+
* names are a menu with two identical entries: the reader is
|
|
289
|
+
* offered a choice they have no way to make.
|
|
290
|
+
*/
|
|
291
|
+
export function landmarkNaming(nodes) {
|
|
292
|
+
const landmarks = nodes.filter((node) => node.rendered &&
|
|
293
|
+
node.role &&
|
|
294
|
+
LANDMARK_ROLES.includes(node.role));
|
|
295
|
+
const found = [];
|
|
296
|
+
const byRole = new Map();
|
|
297
|
+
for (const node of landmarks) {
|
|
298
|
+
const role = node.role ?? "";
|
|
299
|
+
byRole.set(role, [...(byRole.get(role) ?? []), node]);
|
|
300
|
+
}
|
|
301
|
+
for (const [role, group] of byRole) {
|
|
302
|
+
if (group.length < 2)
|
|
303
|
+
continue;
|
|
304
|
+
const unnamed = group.filter((node) => !node.name?.trim());
|
|
305
|
+
if (unnamed.length < 2)
|
|
306
|
+
continue;
|
|
307
|
+
for (const node of unnamed) {
|
|
308
|
+
found.push(nodeOf(node, `One of ${group.length} ${role} landmarks, and ${unnamed.length} ` +
|
|
309
|
+
"of them have no name to tell them apart."));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return finding({
|
|
313
|
+
rule: "landmark-distinguishable",
|
|
314
|
+
impact: "moderate",
|
|
315
|
+
criteria: ["1.3.1"],
|
|
316
|
+
levels: ["A"],
|
|
317
|
+
help: "Repeated landmarks of the same role need names. Without them " +
|
|
318
|
+
"the landmark menu offers a choice nobody can make.",
|
|
319
|
+
}, found);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Controls with nothing to call them, and errors nobody is told
|
|
323
|
+
* about.
|
|
324
|
+
*
|
|
325
|
+
* The second half is the one tools usually miss: aria-invalid
|
|
326
|
+
* announces that something is wrong without saying what, and the
|
|
327
|
+
* message sitting next to it in the layout is not connected to
|
|
328
|
+
* it in any way a screen reader can follow.
|
|
329
|
+
*/
|
|
330
|
+
export function formLabelling(nodes) {
|
|
331
|
+
const unnamed = [];
|
|
332
|
+
const unexplained = [];
|
|
333
|
+
for (const node of nodes) {
|
|
334
|
+
if (!node.rendered || !node.role)
|
|
335
|
+
continue;
|
|
336
|
+
// Native fields are axe's ground, and it checks them more
|
|
337
|
+
// thoroughly than this could: wrapped labels, explicit
|
|
338
|
+
// labels, titles and placeholders each have their own rule.
|
|
339
|
+
// What is left to us is a field made out of ARIA, which its
|
|
340
|
+
// label rule does not look at.
|
|
341
|
+
const isNative = node.tag === "input" || node.tag === "select" || node.tag === "textarea";
|
|
342
|
+
if (!isNative && !NEEDS_LABEL_ROLES.has(node.role))
|
|
343
|
+
continue;
|
|
344
|
+
if (isNative && node.attributes.type === "hidden")
|
|
345
|
+
continue;
|
|
346
|
+
if (!isNative && !node.name?.trim()) {
|
|
347
|
+
unnamed.push(nodeOf(node, "No accessible name: nothing tells the user what to type."));
|
|
348
|
+
}
|
|
349
|
+
// Error association, though, is nobody else's ground: axe
|
|
350
|
+
// has no rule for it, and it matters on a native field just
|
|
351
|
+
// as much as on an ARIA one.
|
|
352
|
+
if (node.attributes["aria-invalid"] === "true" &&
|
|
353
|
+
!node.attributes["aria-errormessage"] &&
|
|
354
|
+
!node.attributes["aria-describedby"]) {
|
|
355
|
+
unexplained.push(nodeOf(node, "Marked invalid with no aria-errormessage or " +
|
|
356
|
+
"aria-describedby, so the reason is announced to nobody."));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return [
|
|
360
|
+
...finding({
|
|
361
|
+
rule: "aria-field-has-name",
|
|
362
|
+
impact: "critical",
|
|
363
|
+
criteria: ["4.1.2"],
|
|
364
|
+
levels: ["A"],
|
|
365
|
+
help: "A field built from an ARIA role needs an accessible " +
|
|
366
|
+
"name, the same as a native one.",
|
|
367
|
+
}, unnamed),
|
|
368
|
+
...finding({
|
|
369
|
+
rule: "error-is-announced",
|
|
370
|
+
impact: "serious",
|
|
371
|
+
criteria: ["3.3.1"],
|
|
372
|
+
levels: ["A"],
|
|
373
|
+
help: "A field marked invalid must point at the text explaining " +
|
|
374
|
+
"why, or the error exists only visually.",
|
|
375
|
+
}, unexplained),
|
|
376
|
+
];
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* The autocomplete tokens the specification defines.
|
|
380
|
+
*
|
|
381
|
+
* Only the ones describing the person filling the form in, since
|
|
382
|
+
* 1.3.5 is about input collecting information about the user.
|
|
383
|
+
* Taken from the HTML specification's list rather than invented.
|
|
384
|
+
*/
|
|
385
|
+
const KNOWN_TOKENS = new Set([
|
|
386
|
+
"name",
|
|
387
|
+
"honorific-prefix",
|
|
388
|
+
"given-name",
|
|
389
|
+
"additional-name",
|
|
390
|
+
"family-name",
|
|
391
|
+
"honorific-suffix",
|
|
392
|
+
"nickname",
|
|
393
|
+
"username",
|
|
394
|
+
"new-password",
|
|
395
|
+
"current-password",
|
|
396
|
+
"one-time-code",
|
|
397
|
+
"organization-title",
|
|
398
|
+
"organization",
|
|
399
|
+
"street-address",
|
|
400
|
+
"address-line1",
|
|
401
|
+
"address-line2",
|
|
402
|
+
"address-line3",
|
|
403
|
+
"address-level4",
|
|
404
|
+
"address-level3",
|
|
405
|
+
"address-level2",
|
|
406
|
+
"address-level1",
|
|
407
|
+
"country",
|
|
408
|
+
"country-name",
|
|
409
|
+
"postal-code",
|
|
410
|
+
"cc-name",
|
|
411
|
+
"cc-given-name",
|
|
412
|
+
"cc-additional-name",
|
|
413
|
+
"cc-family-name",
|
|
414
|
+
"cc-number",
|
|
415
|
+
"cc-exp",
|
|
416
|
+
"cc-exp-month",
|
|
417
|
+
"cc-exp-year",
|
|
418
|
+
"cc-csc",
|
|
419
|
+
"cc-type",
|
|
420
|
+
"transaction-currency",
|
|
421
|
+
"transaction-amount",
|
|
422
|
+
"language",
|
|
423
|
+
"bday",
|
|
424
|
+
"bday-day",
|
|
425
|
+
"bday-month",
|
|
426
|
+
"bday-year",
|
|
427
|
+
"sex",
|
|
428
|
+
"url",
|
|
429
|
+
"photo",
|
|
430
|
+
"tel",
|
|
431
|
+
"tel-country-code",
|
|
432
|
+
"tel-national",
|
|
433
|
+
"tel-area-code",
|
|
434
|
+
"tel-local",
|
|
435
|
+
"tel-extension",
|
|
436
|
+
"email",
|
|
437
|
+
"impp",
|
|
438
|
+
]);
|
|
439
|
+
/**
|
|
440
|
+
* Words in a field's own name or id that say it wants something
|
|
441
|
+
* about the person filling it in.
|
|
442
|
+
*
|
|
443
|
+
* Deliberately narrow. A false finding here sends someone adding
|
|
444
|
+
* a token to a field that never wanted one, and the cost of
|
|
445
|
+
* missing a field is that it stays as it is today.
|
|
446
|
+
*/
|
|
447
|
+
const PERSONAL_HINTS = [
|
|
448
|
+
[/^(e-?mail)$|(^|[^a-z])e-?mail([^a-z]|$)/i, "email"],
|
|
449
|
+
[/(^|[^a-z])(first-?name|given-?name)([^a-z]|$)/i, "given-name"],
|
|
450
|
+
[/(^|[^a-z])(last-?name|surname|family-?name)([^a-z]|$)/i, "family-name"],
|
|
451
|
+
[/(^|[^a-z])(full-?name)([^a-z]|$)/i, "name"],
|
|
452
|
+
[/(^|[^a-z])(phone|tel|mobile)([^a-z]|$)/i, "tel"],
|
|
453
|
+
[/(^|[^a-z])(street|address-?1|addr1)([^a-z]|$)/i, "street-address"],
|
|
454
|
+
[/(^|[^a-z])(zip|postal-?code|postcode)([^a-z]|$)/i, "postal-code"],
|
|
455
|
+
[/(^|[^a-z])(country)([^a-z]|$)/i, "country-name"],
|
|
456
|
+
[/(^|[^a-z])(city|town)([^a-z]|$)/i, "address-level2"],
|
|
457
|
+
[/(^|[^a-z])(organization|company)([^a-z]|$)/i, "organization"],
|
|
458
|
+
];
|
|
459
|
+
/** Input types that are about the person by their nature. */
|
|
460
|
+
const PERSONAL_TYPES = {
|
|
461
|
+
email: "email",
|
|
462
|
+
tel: "tel",
|
|
463
|
+
};
|
|
464
|
+
/**
|
|
465
|
+
* What a field appears to be asking the user for, if anything.
|
|
466
|
+
*
|
|
467
|
+
* The type is trusted before the name, because type="email" is
|
|
468
|
+
* the browser's own declaration and a name is a guess.
|
|
469
|
+
*/
|
|
470
|
+
function wants(node) {
|
|
471
|
+
const type = (node.attributes.type ?? "text").toLowerCase();
|
|
472
|
+
const byType = PERSONAL_TYPES[type];
|
|
473
|
+
if (byType !== undefined)
|
|
474
|
+
return byType;
|
|
475
|
+
// Only plain text fields are guessed at from their name. A
|
|
476
|
+
// search, a number or a checkbox named "city" is not an address.
|
|
477
|
+
if (type !== "text")
|
|
478
|
+
return undefined;
|
|
479
|
+
const described = `${node.attributes.name ?? ""} ${node.attributes.id ?? ""}`;
|
|
480
|
+
for (const [pattern, token] of PERSONAL_HINTS) {
|
|
481
|
+
if (pattern.test(described))
|
|
482
|
+
return token;
|
|
483
|
+
}
|
|
484
|
+
return undefined;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Fields the browser could fill, if it were told what they are.
|
|
488
|
+
*
|
|
489
|
+
* WCAG 1.3.5. Without a token the browser will not fill the
|
|
490
|
+
* field and a password manager cannot either, so somebody who
|
|
491
|
+
* finds typing hard retypes their own address on every site that
|
|
492
|
+
* asks. axe has no rule for this, so it has been passing in
|
|
493
|
+
* silence.
|
|
494
|
+
*/
|
|
495
|
+
export function autocompleteTokens(nodes) {
|
|
496
|
+
const missing = [];
|
|
497
|
+
for (const node of nodes) {
|
|
498
|
+
if (!node.rendered || node.tag !== "input")
|
|
499
|
+
continue;
|
|
500
|
+
const wanted = wants(node);
|
|
501
|
+
if (wanted === undefined)
|
|
502
|
+
continue;
|
|
503
|
+
const declared = node.attributes.autocomplete?.trim().toLowerCase();
|
|
504
|
+
// An author who wrote "off" has said the browser must not
|
|
505
|
+
// remember this, and for a one-time passcode they are right.
|
|
506
|
+
// Overruling them would be this tool claiming to know better
|
|
507
|
+
// about a decision only they can make.
|
|
508
|
+
if (declared === "off" || declared === "on")
|
|
509
|
+
continue;
|
|
510
|
+
if (declared === undefined || declared === "") {
|
|
511
|
+
missing.push(nodeOf(node, `Asks for the user's own details but carries no ` +
|
|
512
|
+
`autocomplete token. autocomplete="${wanted}" would let ` +
|
|
513
|
+
"the browser fill it."));
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
// The specification allows prefixes: a section name, then
|
|
517
|
+
// shipping or billing, then the token itself. Reading only the
|
|
518
|
+
// bare attribute would fail every well-built checkout.
|
|
519
|
+
const last = declared.split(/\s+/).at(-1);
|
|
520
|
+
if (last === undefined || !KNOWN_TOKENS.has(last)) {
|
|
521
|
+
missing.push(nodeOf(node, `autocomplete="${declared}" is not a token the ` +
|
|
522
|
+
`specification defines, so it does nothing. ` +
|
|
523
|
+
`"${wanted}" is the one that fits.`));
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return finding({
|
|
527
|
+
rule: "field-has-autocomplete",
|
|
528
|
+
impact: "serious",
|
|
529
|
+
criteria: ["1.3.5"],
|
|
530
|
+
levels: ["AA"],
|
|
531
|
+
help: "A field collecting the user's own information needs an " +
|
|
532
|
+
"autocomplete token, or the browser cannot fill it and " +
|
|
533
|
+
"they type it again on every site.",
|
|
534
|
+
}, missing);
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Tab order set by hand.
|
|
538
|
+
*
|
|
539
|
+
* A positive tabindex pulls an element to the front of the tab
|
|
540
|
+
* order for the whole page, so one of them rearranges everything
|
|
541
|
+
* after it. It is almost always a local fix with a global cost.
|
|
542
|
+
*/
|
|
543
|
+
export function manualTabOrder(nodes) {
|
|
544
|
+
const found = nodes
|
|
545
|
+
.filter((node) => Number(node.attributes.tabindex ?? "0") > 0)
|
|
546
|
+
.map((node) => nodeOf(node, `tabindex="${node.attributes.tabindex}" puts this ahead of ` +
|
|
547
|
+
"everything with a natural order."));
|
|
548
|
+
return finding({
|
|
549
|
+
rule: "no-positive-tabindex",
|
|
550
|
+
impact: "serious",
|
|
551
|
+
criteria: ["2.4.3"],
|
|
552
|
+
levels: ["A"],
|
|
553
|
+
help: "A positive tabindex reorders the whole page, not just the " +
|
|
554
|
+
"element it is on.",
|
|
555
|
+
}, found);
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Rules of ours that axe also reports, and under what name.
|
|
559
|
+
*
|
|
560
|
+
* These were written before running both against the same page,
|
|
561
|
+
* which is the only way the overlap shows up. Where axe reports
|
|
562
|
+
* the same thing, its finding wins: it carries a help URL, a
|
|
563
|
+
* wider tag list, and a classification its authors argued
|
|
564
|
+
* through. Two of these had been given WCAG criteria here that
|
|
565
|
+
* axe deliberately withholds, and asserting a criterion a mature
|
|
566
|
+
* rule set declined to assert wants better grounds than a
|
|
567
|
+
* preference.
|
|
568
|
+
*
|
|
569
|
+
* Ours still run, because a capture audited without axe should
|
|
570
|
+
* not lose the check entirely.
|
|
571
|
+
*/
|
|
572
|
+
export const SUPERSEDED_BY = {
|
|
573
|
+
"heading-skips-level": "heading-order",
|
|
574
|
+
"no-positive-tabindex": "tabindex",
|
|
575
|
+
"landmark-distinguishable": "landmark-unique",
|
|
576
|
+
// Both of these overlap an axe rule that was missing from this
|
|
577
|
+
// map, so one defect was reported twice, at critical, and the
|
|
578
|
+
// violation count the accessibility skill tells a reader to
|
|
579
|
+
// compare across a change was doubled with it.
|
|
580
|
+
"hidden-focusable": "aria-hidden-focus",
|
|
581
|
+
"aria-field-has-name": "aria-input-field-name",
|
|
582
|
+
};
|
|
583
|
+
/** Every structural rule, run against one capture. */
|
|
584
|
+
export function analyseStructure(nodes) {
|
|
585
|
+
return [
|
|
586
|
+
...brokenReferences(nodes),
|
|
587
|
+
...hiddenButFocusable(nodes),
|
|
588
|
+
...nestedInteractives(nodes),
|
|
589
|
+
...headingOutline(nodes),
|
|
590
|
+
...landmarkNaming(nodes),
|
|
591
|
+
...formLabelling(nodes),
|
|
592
|
+
...autocompleteTokens(nodes),
|
|
593
|
+
...manualTabOrder(nodes),
|
|
594
|
+
];
|
|
595
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running a check under several conditions at once.
|
|
3
|
+
*
|
|
4
|
+
* Most layout and contrast faults are conditional. A page is
|
|
5
|
+
* fine at 1280 and unusable at 375; a colour pair passes in
|
|
6
|
+
* light and fails in dark. Checking one condition and reporting
|
|
7
|
+
* a pass is how those ship.
|
|
8
|
+
*
|
|
9
|
+
* The table comes first and the detail second, because the
|
|
10
|
+
* useful question is almost never "what is wrong" but "where
|
|
11
|
+
* does it start going wrong". A run of passes ending in two
|
|
12
|
+
* failures at the narrow end says more than either verdict does
|
|
13
|
+
* alone.
|
|
14
|
+
*/
|
|
15
|
+
import type { Standing, Verdict } from "./verdict.js";
|
|
16
|
+
/** One condition a check was run under. */
|
|
17
|
+
export interface Condition {
|
|
18
|
+
/** How the condition reads in a table, e.g. "375px". */
|
|
19
|
+
readonly label: string;
|
|
20
|
+
readonly standing: Standing;
|
|
21
|
+
/** The one-line result under this condition. */
|
|
22
|
+
readonly headline: string;
|
|
23
|
+
/** The full report, kept for when it is asked for. */
|
|
24
|
+
readonly detail: string;
|
|
25
|
+
}
|
|
26
|
+
/** The worst standing among several. */
|
|
27
|
+
export declare function worstOf(standings: readonly Standing[]): Standing;
|
|
28
|
+
/**
|
|
29
|
+
* Say where a sweep started going wrong.
|
|
30
|
+
*
|
|
31
|
+
* Conditions are reported in the order they were run, never
|
|
32
|
+
* sorted by severity, because their order is the finding: a
|
|
33
|
+
* table that reads pass, pass, fail, fail names a breakpoint,
|
|
34
|
+
* and the same rows sorted worst-first name nothing.
|
|
35
|
+
*/
|
|
36
|
+
export declare function renderSweep(conditions: readonly Condition[], options?: {
|
|
37
|
+
readonly only?: string;
|
|
38
|
+
}): string;
|
|
39
|
+
/** The widths a sweep uses when the caller names none. */
|
|
40
|
+
export declare const DEFAULT_WIDTHS: readonly [375, 768, 1280, 1920];
|
|
41
|
+
/** A named condition to run under, ready to apply. */
|
|
42
|
+
export interface Sweepable<T> {
|
|
43
|
+
readonly label: string;
|
|
44
|
+
readonly setting: T;
|
|
45
|
+
}
|
|
46
|
+
/** Turn a list of widths into conditions to sweep. */
|
|
47
|
+
export declare function widthsToSweep(widths?: readonly number[]): readonly Sweepable<{
|
|
48
|
+
width: number;
|
|
49
|
+
}>[];
|
|
50
|
+
/**
|
|
51
|
+
* Read a verdict's standing back out of a rendered report.
|
|
52
|
+
*
|
|
53
|
+
* A report that carries no verdict head reads as "warn", never
|
|
54
|
+
* "pass". This defaulted to pass once, and because two drill-down
|
|
55
|
+
* renderers returned bare prose, a swept rule query reported PASS
|
|
56
|
+
* at every width while the named rule was failing at all of them.
|
|
57
|
+
* Approval is the one answer a parser must never invent: prefer
|
|
58
|
+
* the standing a caller passes as data, and treat this as the
|
|
59
|
+
* fallback for prose we did not produce.
|
|
60
|
+
*/
|
|
61
|
+
export declare function standingOf(report: string): Standing;
|
|
62
|
+
/** Read a verdict's headline back out of a rendered report. */
|
|
63
|
+
export declare function headlineOf(report: string): string;
|
|
64
|
+
/** Build a condition from a rendered report. */
|
|
65
|
+
export declare function conditionFrom(label: string, report: string): Condition;
|
|
66
|
+
export type { Verdict };
|