@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,185 @@
|
|
|
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
|
+
/** Roles the browser reports for things nobody can see. */
|
|
17
|
+
const INVISIBLE_ROLES = new Set(["none", "presentation", "InlineTextBox"]);
|
|
18
|
+
/** Elements the browser lets focus land on without being told. */
|
|
19
|
+
const FOCUSABLE_TAGS = new Set([
|
|
20
|
+
"BUTTON",
|
|
21
|
+
"INPUT",
|
|
22
|
+
"SELECT",
|
|
23
|
+
"TEXTAREA",
|
|
24
|
+
"SUMMARY",
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Whether the markup makes this focusable.
|
|
28
|
+
*
|
|
29
|
+
* Used when the accessibility tree declines to say, which it
|
|
30
|
+
* does for every node it ignored, including everything inside an
|
|
31
|
+
* aria-hidden subtree. That is precisely the case the
|
|
32
|
+
* hidden-but-focusable rule is about, so without this the rule
|
|
33
|
+
* has no way to see its own subject.
|
|
34
|
+
*/
|
|
35
|
+
function focusableByMarkup(node) {
|
|
36
|
+
const tabindex = node.attributes.tabindex;
|
|
37
|
+
if (tabindex !== undefined)
|
|
38
|
+
return Number(tabindex) > -1;
|
|
39
|
+
if (node.attributes.disabled !== undefined)
|
|
40
|
+
return false;
|
|
41
|
+
if (node.nodeName === "A")
|
|
42
|
+
return node.attributes.href !== undefined;
|
|
43
|
+
return FOCUSABLE_TAGS.has(node.nodeName);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Give an element an address a person can act on.
|
|
47
|
+
*
|
|
48
|
+
* An id is best, then a test hook, then a class, and a tag with
|
|
49
|
+
* its position as the last resort. This is presentation, not
|
|
50
|
+
* measurement: the browser did not offer a selector, and one
|
|
51
|
+
* that reads well is worth more than one that is unique.
|
|
52
|
+
*/
|
|
53
|
+
export function selectorFor(node) {
|
|
54
|
+
const tag = node.nodeName.toLowerCase();
|
|
55
|
+
const { id, class: className } = node.attributes;
|
|
56
|
+
if (id)
|
|
57
|
+
return `#${id}`;
|
|
58
|
+
const hook = node.attributes["data-testid"] ?? node.attributes["data-test-id"];
|
|
59
|
+
if (hook)
|
|
60
|
+
return `${tag}[data-testid="${hook}"]`;
|
|
61
|
+
if (className) {
|
|
62
|
+
const first = className.trim().split(/\s+/)[0];
|
|
63
|
+
if (first)
|
|
64
|
+
return `${tag}.${first}`;
|
|
65
|
+
}
|
|
66
|
+
return tag;
|
|
67
|
+
}
|
|
68
|
+
/** How much markup to keep against a finding. */
|
|
69
|
+
const MAX_HTML = 160;
|
|
70
|
+
/**
|
|
71
|
+
* Rebuild an element's opening tag from its attributes.
|
|
72
|
+
*
|
|
73
|
+
* The snapshot does not carry outerHTML, and fetching it per
|
|
74
|
+
* node would be a protocol round trip each. The opening tag is
|
|
75
|
+
* what a person needs to recognise the element anyway.
|
|
76
|
+
*/
|
|
77
|
+
function openingTag(node) {
|
|
78
|
+
const tag = node.nodeName.toLowerCase();
|
|
79
|
+
const attributes = Object.entries(node.attributes)
|
|
80
|
+
.map(([name, value]) => (value === "" ? name : `${name}="${value}"`))
|
|
81
|
+
.join(" ");
|
|
82
|
+
const rendered = attributes === "" ? `<${tag}>` : `<${tag} ${attributes}>`;
|
|
83
|
+
return rendered.length <= MAX_HTML
|
|
84
|
+
? rendered
|
|
85
|
+
: `${rendered.slice(0, MAX_HTML)}...`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Join a snapshot to an accessibility tree.
|
|
89
|
+
*
|
|
90
|
+
* Text nodes are dropped: every structural rule is about
|
|
91
|
+
* elements, and keeping the text would double the size of the
|
|
92
|
+
* capture to no purpose.
|
|
93
|
+
*/
|
|
94
|
+
export function buildStructure(nodes, facts) {
|
|
95
|
+
const byBackendId = new Map(facts.map((fact) => [fact.backendNodeId, fact]));
|
|
96
|
+
const byId = new Map(nodes.map((node) => [node.id, node]));
|
|
97
|
+
const ancestorsOf = (node) => {
|
|
98
|
+
const chain = [];
|
|
99
|
+
let current = node.parent;
|
|
100
|
+
while (current !== undefined) {
|
|
101
|
+
chain.push(current);
|
|
102
|
+
current = byId.get(current)?.parent;
|
|
103
|
+
}
|
|
104
|
+
return chain;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Whether anything from here up has been made inert.
|
|
108
|
+
*
|
|
109
|
+
* inert takes a subtree out of the focus order without changing
|
|
110
|
+
* how any of it looks, so no style or markup question about the
|
|
111
|
+
* element itself can see it. A closed dialog is the ordinary
|
|
112
|
+
* case, and its contents are usually aria-hidden too, which is
|
|
113
|
+
* exactly the pair that made this matter: on one real page 45
|
|
114
|
+
* controls inside two closed dialogs were reported as critical
|
|
115
|
+
* WCAG failures for being aria-hidden and focusable, when none
|
|
116
|
+
* of the 45 could take focus at all.
|
|
117
|
+
*/
|
|
118
|
+
const inertHere = (node) => {
|
|
119
|
+
if (node.attributes.inert !== undefined)
|
|
120
|
+
return true;
|
|
121
|
+
for (const id of ancestorsOf(node)) {
|
|
122
|
+
if (byId.get(id)?.attributes.inert !== undefined)
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Whether focus could actually land here, for a node the
|
|
129
|
+
* accessibility tree declined to describe.
|
|
130
|
+
*
|
|
131
|
+
* Markup says an input is focusable. It cannot say that this one
|
|
132
|
+
* was never laid out, sits under visibility:hidden, or belongs
|
|
133
|
+
* to an inert subtree, and each of those settles the question
|
|
134
|
+
* the other way. Measured on one real page, 48 controls met the
|
|
135
|
+
* markup test inside aria-hidden subtrees and exactly none of
|
|
136
|
+
* them could take focus: 42 hidden by visibility, 3 by display,
|
|
137
|
+
* 3 inert. Reported as they were, that is 48 critical WCAG
|
|
138
|
+
* failures on a page with none.
|
|
139
|
+
*
|
|
140
|
+
* visibility is asked of the element rather than its ancestors
|
|
141
|
+
* because it inherits, so the computed value already carries
|
|
142
|
+
* the answer, including a child that opts back in with
|
|
143
|
+
* visibility:visible.
|
|
144
|
+
*/
|
|
145
|
+
const couldTakeFocus = (node) => {
|
|
146
|
+
if (!node.rendered)
|
|
147
|
+
return false;
|
|
148
|
+
const visibility = node.styles.visibility;
|
|
149
|
+
if (visibility === "hidden" || visibility === "collapse")
|
|
150
|
+
return false;
|
|
151
|
+
return !inertHere(node);
|
|
152
|
+
};
|
|
153
|
+
return nodes
|
|
154
|
+
.filter((node) => node.nodeName !== "#text" && node.nodeName !== "#comment")
|
|
155
|
+
.map((node) => {
|
|
156
|
+
const fact = byBackendId.get(node.backendNodeId);
|
|
157
|
+
const role = fact?.role && !INVISIBLE_ROLES.has(fact.role) ? fact.role : undefined;
|
|
158
|
+
return {
|
|
159
|
+
id: node.id,
|
|
160
|
+
selector: selectorFor(node),
|
|
161
|
+
tag: node.nodeName.toLowerCase(),
|
|
162
|
+
attributes: node.attributes,
|
|
163
|
+
...(role === undefined ? {} : { role }),
|
|
164
|
+
...(fact?.name === undefined || fact.name === ""
|
|
165
|
+
? {}
|
|
166
|
+
: { name: fact.name }),
|
|
167
|
+
// The accessibility tree only reports focusable on nodes
|
|
168
|
+
// it did not ignore, and an aria-hidden subtree is exactly
|
|
169
|
+
// what it ignores: measured against a live page, every
|
|
170
|
+
// ignored node arrives with an empty property list. So
|
|
171
|
+
// asking the tree whether a hidden thing can take focus
|
|
172
|
+
// always answered no, and the rule built on that question
|
|
173
|
+
// could never fire. Fall back to the markup, which is
|
|
174
|
+
// where focusability comes from in the first place.
|
|
175
|
+
//
|
|
176
|
+
// The fallback has to carry its own weight, though: see
|
|
177
|
+
// couldTakeFocus, which is what stops a page's closed
|
|
178
|
+
// dialogs arriving as a wall of critical failures.
|
|
179
|
+
focusable: fact?.focusable ?? (focusableByMarkup(node) && couldTakeFocus(node)),
|
|
180
|
+
rendered: node.rendered,
|
|
181
|
+
ancestors: ancestorsOf(node),
|
|
182
|
+
html: openingTag(node),
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colour arithmetic for accessibility judgments.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately narrow. This module does the arithmetic WCAG
|
|
5
|
+
* specifies and nothing else: it does not know what oklch is,
|
|
6
|
+
* how display-p3 clamps into sRGB, or what colour-mix resolves
|
|
7
|
+
* to. Chrome returns modern colour syntax from getComputedStyle
|
|
8
|
+
* unconverted, and converting it here would mean reimplementing
|
|
9
|
+
* colour science that the renderer already does exactly.
|
|
10
|
+
*
|
|
11
|
+
* So the session asks the browser to paint a colour and reads
|
|
12
|
+
* the pixel back, and everything below works in sRGB bytes.
|
|
13
|
+
*/
|
|
14
|
+
/** A colour in sRGB, channels 0 to 255 and alpha 0 to 1. */
|
|
15
|
+
export interface Rgba {
|
|
16
|
+
readonly r: number;
|
|
17
|
+
readonly g: number;
|
|
18
|
+
readonly b: number;
|
|
19
|
+
readonly a: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* How much light a colour reflects, by WCAG's definition.
|
|
23
|
+
*
|
|
24
|
+
* Alpha is ignored, because a translucent colour has no
|
|
25
|
+
* luminance of its own: composite it over something first.
|
|
26
|
+
*/
|
|
27
|
+
export declare function relativeLuminance(colour: Rgba): number;
|
|
28
|
+
/**
|
|
29
|
+
* The contrast between two colours, from 1 to 21.
|
|
30
|
+
*
|
|
31
|
+
* Order does not matter: the lighter colour always goes on top
|
|
32
|
+
* of the fraction, so a light-on-dark pair reads the same as its
|
|
33
|
+
* reverse.
|
|
34
|
+
*/
|
|
35
|
+
export declare function contrastRatio(one: Rgba, other: Rgba): number;
|
|
36
|
+
/**
|
|
37
|
+
* Paint one colour over another and say what results.
|
|
38
|
+
*
|
|
39
|
+
* This is source-over compositing, the same operation the
|
|
40
|
+
* renderer performs, and it is what makes a translucent
|
|
41
|
+
* foreground judgeable at all.
|
|
42
|
+
*/
|
|
43
|
+
export declare function composite(over: Rgba, under: Rgba): Rgba;
|
|
44
|
+
/** Whether a colour hides whatever is behind it. */
|
|
45
|
+
export declare function isOpaque(colour: Rgba): boolean;
|
|
46
|
+
/** Whether a colour shows everything behind it. */
|
|
47
|
+
export declare function isTransparent(colour: Rgba): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Read the colour syntaxes the browser reliably produces.
|
|
50
|
+
*
|
|
51
|
+
* getComputedStyle serializes most colours as rgb() or rgba(),
|
|
52
|
+
* and a stylesheet written in modern colour syntax comes back as
|
|
53
|
+
* color(srgb ...) instead, unconverted. Both are read here.
|
|
54
|
+
* Anything else, oklch and the wider color() spaces among them,
|
|
55
|
+
* returns nothing rather than being guessed at, so the caller can
|
|
56
|
+
* ask the browser to resolve it instead of getting a confidently
|
|
57
|
+
* wrong answer.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseRgb(css: string): Rgba | undefined;
|
|
60
|
+
/** Say a colour the way CSS would. */
|
|
61
|
+
export declare function formatRgb(colour: Rgba): string;
|
|
62
|
+
/**
|
|
63
|
+
* How far apart two colours look, as CIE76 delta E.
|
|
64
|
+
*
|
|
65
|
+
* Contrast is not a measure of sameness. It compares relative
|
|
66
|
+
* luminance only, so it is blind to hue by construction: pure
|
|
67
|
+
* red and a mid grey differ by a contrast ratio of about 1.001,
|
|
68
|
+
* which any threshold for "these look the same" will accept.
|
|
69
|
+
* That is the right answer to "can text be read on this" and the
|
|
70
|
+
* wrong answer to "are these one colour".
|
|
71
|
+
*
|
|
72
|
+
* Delta E is the measure for the second question. Roughly, 1 is
|
|
73
|
+
* the smallest difference an eye can catch under ideal
|
|
74
|
+
* conditions, 2 to 3 is a just-noticeable difference in
|
|
75
|
+
* practice, and anything past about 10 reads as two colours.
|
|
76
|
+
*
|
|
77
|
+
* CIE76 rather than CIEDE2000: it is a plain Euclidean distance
|
|
78
|
+
* in Lab, it is close enough at the small distances this is used
|
|
79
|
+
* for, and it can be read and checked by anyone.
|
|
80
|
+
*
|
|
81
|
+
* Alpha is not considered. A caller that cares about opacity
|
|
82
|
+
* should compare it separately, or composite both colours over
|
|
83
|
+
* a known background first.
|
|
84
|
+
*/
|
|
85
|
+
export declare function deltaE(one: Rgba, other: Rgba): number;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colour arithmetic for accessibility judgments.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately narrow. This module does the arithmetic WCAG
|
|
5
|
+
* specifies and nothing else: it does not know what oklch is,
|
|
6
|
+
* how display-p3 clamps into sRGB, or what colour-mix resolves
|
|
7
|
+
* to. Chrome returns modern colour syntax from getComputedStyle
|
|
8
|
+
* unconverted, and converting it here would mean reimplementing
|
|
9
|
+
* colour science that the renderer already does exactly.
|
|
10
|
+
*
|
|
11
|
+
* So the session asks the browser to paint a colour and reads
|
|
12
|
+
* the pixel back, and everything below works in sRGB bytes.
|
|
13
|
+
*/
|
|
14
|
+
/** The threshold WCAG names, which is not the sRGB spec's. */
|
|
15
|
+
const LINEAR_CUTOFF = 0.03928;
|
|
16
|
+
const LINEAR_DIVISOR = 12.92;
|
|
17
|
+
const GAMMA_OFFSET = 0.055;
|
|
18
|
+
const GAMMA_SCALE = 1.055;
|
|
19
|
+
const GAMMA_EXPONENT = 2.4;
|
|
20
|
+
/** How much each channel contributes to perceived lightness. */
|
|
21
|
+
const RED_WEIGHT = 0.2126;
|
|
22
|
+
const GREEN_WEIGHT = 0.7152;
|
|
23
|
+
const BLUE_WEIGHT = 0.0722;
|
|
24
|
+
/** Keeps a ratio finite when both colours are pure black. */
|
|
25
|
+
const RATIO_OFFSET = 0.05;
|
|
26
|
+
const CHANNEL_MAX = 255;
|
|
27
|
+
function linearize(channel) {
|
|
28
|
+
const scaled = channel / CHANNEL_MAX;
|
|
29
|
+
return scaled <= LINEAR_CUTOFF
|
|
30
|
+
? scaled / LINEAR_DIVISOR
|
|
31
|
+
: ((scaled + GAMMA_OFFSET) / GAMMA_SCALE) ** GAMMA_EXPONENT;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* How much light a colour reflects, by WCAG's definition.
|
|
35
|
+
*
|
|
36
|
+
* Alpha is ignored, because a translucent colour has no
|
|
37
|
+
* luminance of its own: composite it over something first.
|
|
38
|
+
*/
|
|
39
|
+
export function relativeLuminance(colour) {
|
|
40
|
+
return (RED_WEIGHT * linearize(colour.r) +
|
|
41
|
+
GREEN_WEIGHT * linearize(colour.g) +
|
|
42
|
+
BLUE_WEIGHT * linearize(colour.b));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The contrast between two colours, from 1 to 21.
|
|
46
|
+
*
|
|
47
|
+
* Order does not matter: the lighter colour always goes on top
|
|
48
|
+
* of the fraction, so a light-on-dark pair reads the same as its
|
|
49
|
+
* reverse.
|
|
50
|
+
*/
|
|
51
|
+
export function contrastRatio(one, other) {
|
|
52
|
+
const a = relativeLuminance(one);
|
|
53
|
+
const b = relativeLuminance(other);
|
|
54
|
+
const lighter = Math.max(a, b);
|
|
55
|
+
const darker = Math.min(a, b);
|
|
56
|
+
return (lighter + RATIO_OFFSET) / (darker + RATIO_OFFSET);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Paint one colour over another and say what results.
|
|
60
|
+
*
|
|
61
|
+
* This is source-over compositing, the same operation the
|
|
62
|
+
* renderer performs, and it is what makes a translucent
|
|
63
|
+
* foreground judgeable at all.
|
|
64
|
+
*/
|
|
65
|
+
export function composite(over, under) {
|
|
66
|
+
if (over.a >= 1)
|
|
67
|
+
return over;
|
|
68
|
+
if (over.a <= 0)
|
|
69
|
+
return under;
|
|
70
|
+
const alpha = over.a + under.a * (1 - over.a);
|
|
71
|
+
if (alpha <= 0)
|
|
72
|
+
return { r: 0, g: 0, b: 0, a: 0 };
|
|
73
|
+
const blend = (top, bottom) => Math.round((top * over.a + bottom * under.a * (1 - over.a)) / alpha);
|
|
74
|
+
return {
|
|
75
|
+
r: blend(over.r, under.r),
|
|
76
|
+
g: blend(over.g, under.g),
|
|
77
|
+
b: blend(over.b, under.b),
|
|
78
|
+
a: alpha,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Whether a colour hides whatever is behind it. */
|
|
82
|
+
export function isOpaque(colour) {
|
|
83
|
+
return colour.a >= 1;
|
|
84
|
+
}
|
|
85
|
+
/** Whether a colour shows everything behind it. */
|
|
86
|
+
export function isTransparent(colour) {
|
|
87
|
+
return colour.a <= 0;
|
|
88
|
+
}
|
|
89
|
+
const RGB_PATTERN = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)$/;
|
|
90
|
+
/**
|
|
91
|
+
* The srgb arm of color(), whose channels are fractions of full.
|
|
92
|
+
*
|
|
93
|
+
* Only srgb is matched. display-p3 and the rest are written the
|
|
94
|
+
* same way but describe a wider gamut, so reading their numbers
|
|
95
|
+
* on this scale would be wrong without a conversion nobody here
|
|
96
|
+
* is doing.
|
|
97
|
+
*/
|
|
98
|
+
const SRGB_PATTERN = /^color\(\s*srgb\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+%?))?\s*\)$/;
|
|
99
|
+
/** Full scale for a channel color(srgb ...) states as a fraction. */
|
|
100
|
+
const FULL_CHANNEL = 255;
|
|
101
|
+
/**
|
|
102
|
+
* Read the colour syntaxes the browser reliably produces.
|
|
103
|
+
*
|
|
104
|
+
* getComputedStyle serializes most colours as rgb() or rgba(),
|
|
105
|
+
* and a stylesheet written in modern colour syntax comes back as
|
|
106
|
+
* color(srgb ...) instead, unconverted. Both are read here.
|
|
107
|
+
* Anything else, oklch and the wider color() spaces among them,
|
|
108
|
+
* returns nothing rather than being guessed at, so the caller can
|
|
109
|
+
* ask the browser to resolve it instead of getting a confidently
|
|
110
|
+
* wrong answer.
|
|
111
|
+
*/
|
|
112
|
+
export function parseRgb(css) {
|
|
113
|
+
const text = css.trim();
|
|
114
|
+
const found = RGB_PATTERN.exec(text);
|
|
115
|
+
const fractions = found ? undefined : SRGB_PATTERN.exec(text);
|
|
116
|
+
const matched = found ?? fractions;
|
|
117
|
+
if (!matched)
|
|
118
|
+
return undefined;
|
|
119
|
+
const [, red, green, blue, alpha] = matched;
|
|
120
|
+
// color(srgb ...) states each channel as a fraction of full, so it
|
|
121
|
+
// needs the scale rgb() already speaks in. The rgb() path is left
|
|
122
|
+
// exactly as it was, fractional channels included.
|
|
123
|
+
const channel = (t) => fractions ? Math.round(Number(t ?? "0") * FULL_CHANNEL) : Number(t ?? "0");
|
|
124
|
+
const opacity = alpha === undefined
|
|
125
|
+
? 1
|
|
126
|
+
: alpha.endsWith("%")
|
|
127
|
+
? Number(alpha.slice(0, -1)) / 100
|
|
128
|
+
: Number(alpha);
|
|
129
|
+
const colour = {
|
|
130
|
+
r: channel(red),
|
|
131
|
+
g: channel(green),
|
|
132
|
+
b: channel(blue),
|
|
133
|
+
a: opacity,
|
|
134
|
+
};
|
|
135
|
+
return Object.values(colour).some(Number.isNaN) ? undefined : colour;
|
|
136
|
+
}
|
|
137
|
+
/** Say a colour the way CSS would. */
|
|
138
|
+
export function formatRgb(colour) {
|
|
139
|
+
return isOpaque(colour)
|
|
140
|
+
? `rgb(${colour.r}, ${colour.g}, ${colour.b})`
|
|
141
|
+
: `rgba(${colour.r}, ${colour.g}, ${colour.b}, ${Math.round(colour.a * 1000) / 1000})`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* How far apart two colours look, as CIE76 delta E.
|
|
145
|
+
*
|
|
146
|
+
* Contrast is not a measure of sameness. It compares relative
|
|
147
|
+
* luminance only, so it is blind to hue by construction: pure
|
|
148
|
+
* red and a mid grey differ by a contrast ratio of about 1.001,
|
|
149
|
+
* which any threshold for "these look the same" will accept.
|
|
150
|
+
* That is the right answer to "can text be read on this" and the
|
|
151
|
+
* wrong answer to "are these one colour".
|
|
152
|
+
*
|
|
153
|
+
* Delta E is the measure for the second question. Roughly, 1 is
|
|
154
|
+
* the smallest difference an eye can catch under ideal
|
|
155
|
+
* conditions, 2 to 3 is a just-noticeable difference in
|
|
156
|
+
* practice, and anything past about 10 reads as two colours.
|
|
157
|
+
*
|
|
158
|
+
* CIE76 rather than CIEDE2000: it is a plain Euclidean distance
|
|
159
|
+
* in Lab, it is close enough at the small distances this is used
|
|
160
|
+
* for, and it can be read and checked by anyone.
|
|
161
|
+
*
|
|
162
|
+
* Alpha is not considered. A caller that cares about opacity
|
|
163
|
+
* should compare it separately, or composite both colours over
|
|
164
|
+
* a known background first.
|
|
165
|
+
*/
|
|
166
|
+
export function deltaE(one, other) {
|
|
167
|
+
const [l1, a1, b1] = toLab(one);
|
|
168
|
+
const [l2, a2, b2] = toLab(other);
|
|
169
|
+
return Math.sqrt((l1 - l2) ** 2 + (a1 - a2) ** 2 + (b1 - b2) ** 2);
|
|
170
|
+
}
|
|
171
|
+
/** D65, the white point sRGB is defined against. */
|
|
172
|
+
const WHITE = { x: 0.95047, y: 1, z: 1.08883 };
|
|
173
|
+
/** The knee in the Lab transfer function. */
|
|
174
|
+
const LAB_EPSILON = 216 / 24389;
|
|
175
|
+
const LAB_KAPPA = 24389 / 27;
|
|
176
|
+
/** sRGB to CIELAB, by way of XYZ. */
|
|
177
|
+
function toLab(colour) {
|
|
178
|
+
const r = linearize(colour.r);
|
|
179
|
+
const g = linearize(colour.g);
|
|
180
|
+
const b = linearize(colour.b);
|
|
181
|
+
const x = (0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / WHITE.x;
|
|
182
|
+
const y = (0.2126729 * r + 0.7151522 * g + 0.072175 * b) / WHITE.y;
|
|
183
|
+
const z = (0.0193339 * r + 0.119192 * g + 0.9503041 * b) / WHITE.z;
|
|
184
|
+
const f = (value) => value > LAB_EPSILON ? Math.cbrt(value) : (LAB_KAPPA * value + 16) / 116;
|
|
185
|
+
const fx = f(x);
|
|
186
|
+
const fy = f(y);
|
|
187
|
+
const fz = f(z);
|
|
188
|
+
return [116 * fy - 16, 500 * (fx - fy), 200 * (fy - fz)];
|
|
189
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Judging contrast against WCAG's thresholds.
|
|
3
|
+
*
|
|
4
|
+
* The arithmetic is in colour.ts; this is the part that says
|
|
5
|
+
* what counts as enough, which depends on how big the text is
|
|
6
|
+
* and which level is being held to.
|
|
7
|
+
*
|
|
8
|
+
* A judgment can also decline. A gradient, a background image
|
|
9
|
+
* or a background nobody could determine is not a failure and
|
|
10
|
+
* not a pass: it is a case where the honest answer is that a
|
|
11
|
+
* person has to look. Reporting those as passes is how an
|
|
12
|
+
* automated audit becomes a liability.
|
|
13
|
+
*/
|
|
14
|
+
import { type Rgba } from "./colour.js";
|
|
15
|
+
/** Which WCAG conformance level a judgment is held to. */
|
|
16
|
+
export type ContrastLevel = "AA" | "AAA";
|
|
17
|
+
/** Text at or above this size counts as large. */
|
|
18
|
+
export declare const LARGE_TEXT_PX = 24;
|
|
19
|
+
/** Bold text at or above this size counts as large: 14pt. */
|
|
20
|
+
export declare const LARGE_BOLD_PX = 18.66;
|
|
21
|
+
/** The weight at which text is bold for sizing purposes. */
|
|
22
|
+
export declare const BOLD_WEIGHT = 700;
|
|
23
|
+
/** 1.4.11 Non-text Contrast, for controls and meaningful graphics. */
|
|
24
|
+
export declare const NON_TEXT_MINIMUM = 3;
|
|
25
|
+
/** How text is set, which decides which threshold applies. */
|
|
26
|
+
export interface TextSizing {
|
|
27
|
+
readonly fontSizePx: number;
|
|
28
|
+
readonly fontWeight: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether text is large enough for the relaxed threshold.
|
|
32
|
+
*
|
|
33
|
+
* The bold cutoff is 14pt against 18pt for normal, which is
|
|
34
|
+
* 18.66px against 24px once points become CSS pixels.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isLargeText(sizing: TextSizing): boolean;
|
|
37
|
+
/** The ratio text of this size must reach at this level. */
|
|
38
|
+
export declare function textThreshold(sizing: TextSizing, level: ContrastLevel): number;
|
|
39
|
+
/** What a contrast judgment concluded. */
|
|
40
|
+
export type ContrastVerdict = {
|
|
41
|
+
readonly kind: "judged";
|
|
42
|
+
readonly ratio: number;
|
|
43
|
+
readonly required: number;
|
|
44
|
+
readonly passes: boolean;
|
|
45
|
+
readonly level: ContrastLevel;
|
|
46
|
+
readonly foreground: Rgba;
|
|
47
|
+
readonly background: Rgba;
|
|
48
|
+
readonly large: boolean;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: "undecidable";
|
|
51
|
+
/** Why nobody could say, in words a person can act on. */
|
|
52
|
+
readonly because: string;
|
|
53
|
+
};
|
|
54
|
+
/** Judge text against the threshold for its size. */
|
|
55
|
+
export declare function judgeText(input: {
|
|
56
|
+
readonly foreground: Rgba;
|
|
57
|
+
readonly background: Rgba;
|
|
58
|
+
readonly sizing: TextSizing;
|
|
59
|
+
readonly level?: ContrastLevel;
|
|
60
|
+
}): ContrastVerdict;
|
|
61
|
+
/**
|
|
62
|
+
* Judge a control's own colours, where size never relaxes it.
|
|
63
|
+
*
|
|
64
|
+
* A focus ring, a checkbox border and an icon that carries
|
|
65
|
+
* meaning are all held to 3:1 regardless of how big they are.
|
|
66
|
+
*/
|
|
67
|
+
export declare function judgeNonText(input: {
|
|
68
|
+
readonly foreground: Rgba;
|
|
69
|
+
readonly background: Rgba;
|
|
70
|
+
}): ContrastVerdict;
|
|
71
|
+
/** Decline to judge, and say why. */
|
|
72
|
+
export declare function undecidable(because: string): ContrastVerdict;
|
|
73
|
+
/** Say what the judgment was. */
|
|
74
|
+
export declare function renderContrast(verdict: ContrastVerdict): string;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Judging contrast against WCAG's thresholds.
|
|
3
|
+
*
|
|
4
|
+
* The arithmetic is in colour.ts; this is the part that says
|
|
5
|
+
* what counts as enough, which depends on how big the text is
|
|
6
|
+
* and which level is being held to.
|
|
7
|
+
*
|
|
8
|
+
* A judgment can also decline. A gradient, a background image
|
|
9
|
+
* or a background nobody could determine is not a failure and
|
|
10
|
+
* not a pass: it is a case where the honest answer is that a
|
|
11
|
+
* person has to look. Reporting those as passes is how an
|
|
12
|
+
* automated audit becomes a liability.
|
|
13
|
+
*/
|
|
14
|
+
import { contrastRatio, formatRgb } from "./colour.js";
|
|
15
|
+
/** Text at or above this size counts as large. */
|
|
16
|
+
export const LARGE_TEXT_PX = 24;
|
|
17
|
+
/** Bold text at or above this size counts as large: 14pt. */
|
|
18
|
+
export const LARGE_BOLD_PX = 18.66;
|
|
19
|
+
/** The weight at which text is bold for sizing purposes. */
|
|
20
|
+
export const BOLD_WEIGHT = 700;
|
|
21
|
+
/** 1.4.3 Contrast (Minimum), normal and large text. */
|
|
22
|
+
const AA_NORMAL = 4.5;
|
|
23
|
+
const AA_LARGE = 3;
|
|
24
|
+
/** 1.4.6 Contrast (Enhanced). */
|
|
25
|
+
const AAA_NORMAL = 7;
|
|
26
|
+
const AAA_LARGE = 4.5;
|
|
27
|
+
/** 1.4.11 Non-text Contrast, for controls and meaningful graphics. */
|
|
28
|
+
export const NON_TEXT_MINIMUM = 3;
|
|
29
|
+
/**
|
|
30
|
+
* Whether text is large enough for the relaxed threshold.
|
|
31
|
+
*
|
|
32
|
+
* The bold cutoff is 14pt against 18pt for normal, which is
|
|
33
|
+
* 18.66px against 24px once points become CSS pixels.
|
|
34
|
+
*/
|
|
35
|
+
export function isLargeText(sizing) {
|
|
36
|
+
return sizing.fontWeight >= BOLD_WEIGHT
|
|
37
|
+
? sizing.fontSizePx >= LARGE_BOLD_PX
|
|
38
|
+
: sizing.fontSizePx >= LARGE_TEXT_PX;
|
|
39
|
+
}
|
|
40
|
+
/** The ratio text of this size must reach at this level. */
|
|
41
|
+
export function textThreshold(sizing, level) {
|
|
42
|
+
const large = isLargeText(sizing);
|
|
43
|
+
if (level === "AAA")
|
|
44
|
+
return large ? AAA_LARGE : AAA_NORMAL;
|
|
45
|
+
return large ? AA_LARGE : AA_NORMAL;
|
|
46
|
+
}
|
|
47
|
+
/** Judge text against the threshold for its size. */
|
|
48
|
+
export function judgeText(input) {
|
|
49
|
+
const level = input.level ?? "AA";
|
|
50
|
+
const required = textThreshold(input.sizing, level);
|
|
51
|
+
return judged(input.foreground, input.background, required, level, {
|
|
52
|
+
large: isLargeText(input.sizing),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Judge a control's own colours, where size never relaxes it.
|
|
57
|
+
*
|
|
58
|
+
* A focus ring, a checkbox border and an icon that carries
|
|
59
|
+
* meaning are all held to 3:1 regardless of how big they are.
|
|
60
|
+
*/
|
|
61
|
+
export function judgeNonText(input) {
|
|
62
|
+
return judged(input.foreground, input.background, NON_TEXT_MINIMUM, "AA", {
|
|
63
|
+
large: false,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Rounded the way the ratio is always quoted. */
|
|
67
|
+
const RATIO_PLACES = 100;
|
|
68
|
+
function judged(foreground, background, required, level, extra) {
|
|
69
|
+
const exact = contrastRatio(foreground, background);
|
|
70
|
+
// Reported rounded, judged exact.
|
|
71
|
+
//
|
|
72
|
+
// Rounding before the comparison passed 4.4951 as AA, which is
|
|
73
|
+
// leniency in the one module that must not have any: it
|
|
74
|
+
// disagrees with axe on the same pair inside the same report,
|
|
75
|
+
// and the direction of the error is always to approve. A ratio
|
|
76
|
+
// that reads 4.5 and fails is worth one line of explanation;
|
|
77
|
+
// a failure reported as a pass is not worth anything.
|
|
78
|
+
const ratio = Math.round(exact * RATIO_PLACES) / RATIO_PLACES;
|
|
79
|
+
return {
|
|
80
|
+
kind: "judged",
|
|
81
|
+
ratio,
|
|
82
|
+
required,
|
|
83
|
+
passes: exact >= required,
|
|
84
|
+
level,
|
|
85
|
+
foreground,
|
|
86
|
+
background,
|
|
87
|
+
large: extra.large,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Decline to judge, and say why. */
|
|
91
|
+
export function undecidable(because) {
|
|
92
|
+
return { kind: "undecidable", because };
|
|
93
|
+
}
|
|
94
|
+
/** Say what the judgment was. */
|
|
95
|
+
export function renderContrast(verdict) {
|
|
96
|
+
if (verdict.kind === "undecidable") {
|
|
97
|
+
return `Contrast could not be determined: ${verdict.because}`;
|
|
98
|
+
}
|
|
99
|
+
const { ratio, required, passes, level, foreground, background } = verdict;
|
|
100
|
+
const size = verdict.large ? "large text" : "normal text";
|
|
101
|
+
const outcome = passes ? "meets" : "falls short of";
|
|
102
|
+
return (`${ratio}:1 ${outcome} the ${required}:1 ${level} minimum for ` +
|
|
103
|
+
`${size}. ${formatRgb(foreground)} on ${formatRgb(background)}`);
|
|
104
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One question that asks all the others.
|
|
3
|
+
*
|
|
4
|
+
* A person who has just changed something wants to know whether
|
|
5
|
+
* they broke anything, and does not want to run five checks to
|
|
6
|
+
* find out. This composes them into one answer: the worst
|
|
7
|
+
* standing across all of them, a line each, and the detail left
|
|
8
|
+
* behind a named kind.
|
|
9
|
+
*
|
|
10
|
+
* The digest deliberately reports what it could not run. A check
|
|
11
|
+
* that failed to execute is not a check that passed, and a
|
|
12
|
+
* digest that quietly drops one is worse than no digest, because
|
|
13
|
+
* it looks like coverage.
|
|
14
|
+
*/
|
|
15
|
+
import type { Standing } from "./verdict.js";
|
|
16
|
+
/** One check's contribution to the digest. */
|
|
17
|
+
export interface Part {
|
|
18
|
+
readonly kind: string;
|
|
19
|
+
readonly standing: Standing;
|
|
20
|
+
readonly headline: string;
|
|
21
|
+
/** Set when the check could not run at all. */
|
|
22
|
+
readonly failedToRun?: string;
|
|
23
|
+
}
|
|
24
|
+
/** The worst standing among the parts. */
|
|
25
|
+
export declare function overallOf(parts: readonly Part[]): Standing;
|
|
26
|
+
/** Say how the page is doing, across every check. */
|
|
27
|
+
export declare function renderHealth(parts: readonly Part[]): string;
|