@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,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a page is actually built from, and where it drifted.
|
|
3
|
+
*
|
|
4
|
+
* A design system is a claim about consistency, and a rendered
|
|
5
|
+
* page is the evidence for or against it. Counting distinct
|
|
6
|
+
* values is the easy half. The useful half is noticing that four
|
|
7
|
+
* of the greys differ by one step out of 255, which is not a
|
|
8
|
+
* palette but an accident that happened four times.
|
|
9
|
+
*
|
|
10
|
+
* Nothing here decides whether drift is wrong. Two blues a step
|
|
11
|
+
* apart may be a bug or may be a hover state, and this cannot
|
|
12
|
+
* tell which. It reports the cluster and the evidence; the
|
|
13
|
+
* judgment is a person's.
|
|
14
|
+
*/
|
|
15
|
+
import { count } from "../../ui/count.js";
|
|
16
|
+
import { deltaE } from "../audit/colour.js";
|
|
17
|
+
import { renderVerdict } from "../audit/verdict.js";
|
|
18
|
+
/** How many places to remember per value. */
|
|
19
|
+
const MAX_EXAMPLES = 3;
|
|
20
|
+
/**
|
|
21
|
+
* Colours closer than this delta E are treated as one intent.
|
|
22
|
+
*
|
|
23
|
+
* Delta E rather than contrast ratio. Contrast compares relative
|
|
24
|
+
* luminance only and is blind to hue, so it called pure red and
|
|
25
|
+
* a mid grey the same colour: their ratio is about 1.001, well
|
|
26
|
+
* inside any sameness threshold. That is the right measure for
|
|
27
|
+
* whether text can be read and the wrong one for whether two
|
|
28
|
+
* values were meant to be one.
|
|
29
|
+
*
|
|
30
|
+
* Around 2 is a just-noticeable difference, so 5 catches the
|
|
31
|
+
* pairs a person would have to look twice at while leaving a
|
|
32
|
+
* deliberate step in a palette alone.
|
|
33
|
+
*/
|
|
34
|
+
export const COLOUR_SAMENESS = 5;
|
|
35
|
+
/**
|
|
36
|
+
* How close two opacities must be to belong to one intent.
|
|
37
|
+
*
|
|
38
|
+
* A solid colour and a half-transparent one are a deliberate
|
|
39
|
+
* pair, and delta E does not see alpha at all.
|
|
40
|
+
*/
|
|
41
|
+
export const ALPHA_SAMENESS = 0.05;
|
|
42
|
+
/**
|
|
43
|
+
* How close two lengths must be to read as one intent.
|
|
44
|
+
*
|
|
45
|
+
* Two thresholds, because one does not work. A purely relative
|
|
46
|
+
* test is too loose at large values and too strict at small
|
|
47
|
+
* ones: it clustered 14px with 16px, which is a deliberate step
|
|
48
|
+
* in any type scale, while leaving 4px and 5px apart, which is
|
|
49
|
+
* exactly the radius drift worth reporting. An absolute
|
|
50
|
+
* tolerance handles the small end and a tight relative one
|
|
51
|
+
* handles the large.
|
|
52
|
+
*/
|
|
53
|
+
export const LENGTH_SAMENESS = 0.08;
|
|
54
|
+
export const LENGTH_TOLERANCE_PX = 1.5;
|
|
55
|
+
/** Count every value of every property across the samples. */
|
|
56
|
+
export function tallyUsage(samples, property) {
|
|
57
|
+
const counts = new Map();
|
|
58
|
+
for (const sample of samples) {
|
|
59
|
+
const raw = sample.values[property];
|
|
60
|
+
if (raw === undefined || raw === "")
|
|
61
|
+
continue;
|
|
62
|
+
const value = canonicalLengths(raw);
|
|
63
|
+
const entry = counts.get(value) ?? { count: 0, examples: [] };
|
|
64
|
+
entry.count += 1;
|
|
65
|
+
if (entry.examples.length < MAX_EXAMPLES)
|
|
66
|
+
entry.examples.push(sample.selector);
|
|
67
|
+
counts.set(value, entry);
|
|
68
|
+
}
|
|
69
|
+
return [...counts.entries()]
|
|
70
|
+
.map(([value, entry]) => ({
|
|
71
|
+
value,
|
|
72
|
+
count: entry.count,
|
|
73
|
+
examples: entry.examples,
|
|
74
|
+
}))
|
|
75
|
+
.sort((a, b) => b.count - a.count || a.value.localeCompare(b.value));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Group values that are nearly the same.
|
|
79
|
+
*
|
|
80
|
+
* Greedy from the most used value outward, which is what makes
|
|
81
|
+
* the leader the likely intended one: a value used forty times
|
|
82
|
+
* with three near neighbours reads as a standard plus three
|
|
83
|
+
* mistakes, not as four equal options.
|
|
84
|
+
*/
|
|
85
|
+
export function clusterUsage(usages, near) {
|
|
86
|
+
const remaining = [...usages];
|
|
87
|
+
const clusters = [];
|
|
88
|
+
while (remaining.length > 0) {
|
|
89
|
+
const leader = remaining.shift();
|
|
90
|
+
if (!leader)
|
|
91
|
+
break;
|
|
92
|
+
const nearby = [];
|
|
93
|
+
for (let index = remaining.length - 1; index >= 0; index -= 1) {
|
|
94
|
+
const candidate = remaining[index];
|
|
95
|
+
if (!candidate)
|
|
96
|
+
continue;
|
|
97
|
+
if (!near(leader.value, candidate.value))
|
|
98
|
+
continue;
|
|
99
|
+
nearby.unshift(candidate);
|
|
100
|
+
remaining.splice(index, 1);
|
|
101
|
+
}
|
|
102
|
+
if (nearby.length === 0)
|
|
103
|
+
continue;
|
|
104
|
+
clusters.push({
|
|
105
|
+
leader,
|
|
106
|
+
nearby,
|
|
107
|
+
total: leader.count + nearby.reduce((sum, one) => sum + one.count, 0),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return clusters;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Read every colour a value names, for comparison.
|
|
114
|
+
*
|
|
115
|
+
* A colour property can be a shorthand: border-color names one
|
|
116
|
+
* side or four, and the browser serializes them space
|
|
117
|
+
* separated. Reading only the first turned a one-sided value
|
|
118
|
+
* and a three-sided one into the same colour.
|
|
119
|
+
*/
|
|
120
|
+
function readColours(css) {
|
|
121
|
+
const found = [];
|
|
122
|
+
for (const match of css.matchAll(/rgba?\(([^)]+)\)/g)) {
|
|
123
|
+
const parts = (match[1] ?? "")
|
|
124
|
+
.split(/[\s,/]+/)
|
|
125
|
+
.filter(Boolean)
|
|
126
|
+
.map(Number);
|
|
127
|
+
const [r, g, b, a] = parts;
|
|
128
|
+
if (r === undefined || g === undefined || b === undefined)
|
|
129
|
+
continue;
|
|
130
|
+
found.push({ r, g, b, a: a ?? 1 });
|
|
131
|
+
}
|
|
132
|
+
return found;
|
|
133
|
+
}
|
|
134
|
+
/** Two colours nobody could tell apart side by side. */
|
|
135
|
+
function oneColourIsNear(a, b) {
|
|
136
|
+
// Fully transparent is its own thing, not a near-black.
|
|
137
|
+
if (a.a === 0 || b.a === 0)
|
|
138
|
+
return a.a === b.a;
|
|
139
|
+
// Two colours at the same opacity, or near enough. A solid and
|
|
140
|
+
// a half-transparent version of one colour are a deliberate
|
|
141
|
+
// pair, not a drift.
|
|
142
|
+
if (Math.abs((a.a ?? 1) - (b.a ?? 1)) > ALPHA_SAMENESS)
|
|
143
|
+
return false;
|
|
144
|
+
return deltaE(a, b) < COLOUR_SAMENESS;
|
|
145
|
+
}
|
|
146
|
+
/** Two colour values nobody could tell apart side by side. */
|
|
147
|
+
export const coloursAreNear = (one, other) => {
|
|
148
|
+
const a = readColours(one);
|
|
149
|
+
const b = readColours(other);
|
|
150
|
+
if (a.length === 0 || b.length === 0)
|
|
151
|
+
return false;
|
|
152
|
+
// A different number of sides is a different kind of value,
|
|
153
|
+
// which is the rule lengths have always followed.
|
|
154
|
+
if (a.length !== b.length)
|
|
155
|
+
return false;
|
|
156
|
+
return a.every((colour, at) => {
|
|
157
|
+
const against = b[at];
|
|
158
|
+
return against !== undefined && oneColourIsNear(colour, against);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* How many decimal places of a pixel anyone could have meant.
|
|
163
|
+
*
|
|
164
|
+
* A computed length comes back at the precision the layout engine
|
|
165
|
+
* happens to hold it at, so the same authored value arrives as
|
|
166
|
+
* both "24px" and "24.0001px". Treated as two values, they then
|
|
167
|
+
* cluster, and the report announces design drift between a number
|
|
168
|
+
* and itself: nobody chose 24.0001px, and being told to reconcile
|
|
169
|
+
* it is worse than being told nothing.
|
|
170
|
+
*/
|
|
171
|
+
const LENGTH_PRECISION = 2;
|
|
172
|
+
/**
|
|
173
|
+
* Collapse sub-pixel noise so one authored value stays one value.
|
|
174
|
+
*
|
|
175
|
+
* Only the numbers move, and only in their last decimals, so a
|
|
176
|
+
* real difference of a third of a pixel survives while the layout
|
|
177
|
+
* engine's rounding does not.
|
|
178
|
+
*/
|
|
179
|
+
export function canonicalLengths(css) {
|
|
180
|
+
return css.replace(/(-?[\d.]+)px/g, (whole, number) => {
|
|
181
|
+
const value = Number(number);
|
|
182
|
+
if (!Number.isFinite(value))
|
|
183
|
+
return whole;
|
|
184
|
+
// Number() drops a trailing zero, so 24.10 reads back as 24.1
|
|
185
|
+
// rather than as a third distinct spelling of the same length.
|
|
186
|
+
return `${Number(value.toFixed(LENGTH_PRECISION))}px`;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/** Every pixel length in a value, in order. */
|
|
190
|
+
function lengths(css) {
|
|
191
|
+
return [...css.matchAll(/(-?[\d.]+)px/g)].map((found) => Number(found[1]));
|
|
192
|
+
}
|
|
193
|
+
/** Two single lengths close enough to have been meant as one. */
|
|
194
|
+
function oneLengthIsNear(a, b) {
|
|
195
|
+
if (a === b)
|
|
196
|
+
return true;
|
|
197
|
+
// Zero has no neighbours: nothing is nearly nothing.
|
|
198
|
+
if (a === 0 || b === 0)
|
|
199
|
+
return false;
|
|
200
|
+
const apart = Math.abs(a - b);
|
|
201
|
+
if (apart <= LENGTH_TOLERANCE_PX)
|
|
202
|
+
return true;
|
|
203
|
+
return apart / Math.max(Math.abs(a), Math.abs(b)) < LENGTH_SAMENESS;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Two lengths close enough to have been meant as one.
|
|
207
|
+
*
|
|
208
|
+
* Every number is compared, not just the first. A value like a
|
|
209
|
+
* box shadow or a four-sided padding carries several, and
|
|
210
|
+
* reading only the first made every shadow whose x offset is
|
|
211
|
+
* 0px cluster with every other, which is all of them, while
|
|
212
|
+
* `8px 16px` and `8px 4px` read as the same value.
|
|
213
|
+
*/
|
|
214
|
+
export const lengthsAreNear = (one, other) => {
|
|
215
|
+
const a = lengths(one);
|
|
216
|
+
const b = lengths(other);
|
|
217
|
+
if (a.length === 0 || b.length === 0)
|
|
218
|
+
return false;
|
|
219
|
+
// A different number of parts is a different kind of value.
|
|
220
|
+
if (a.length !== b.length)
|
|
221
|
+
return false;
|
|
222
|
+
return a.every((value, at) => oneLengthIsNear(value, b[at] ?? Number.NaN));
|
|
223
|
+
};
|
|
224
|
+
/** Values are the same or they are not. */
|
|
225
|
+
export const exactlyEqual = (one, other) => one === other;
|
|
226
|
+
/** Which properties are worth inventorying, and how they compare. */
|
|
227
|
+
export const DIMENSIONS = [
|
|
228
|
+
{ property: "color", near: coloursAreNear },
|
|
229
|
+
{ property: "background-color", near: coloursAreNear },
|
|
230
|
+
{ property: "border-color", near: coloursAreNear },
|
|
231
|
+
{ property: "font-family", near: exactlyEqual },
|
|
232
|
+
{ property: "font-size", near: lengthsAreNear },
|
|
233
|
+
{ property: "font-weight", near: exactlyEqual },
|
|
234
|
+
{ property: "line-height", near: lengthsAreNear },
|
|
235
|
+
{ property: "padding", near: lengthsAreNear },
|
|
236
|
+
{ property: "margin", near: lengthsAreNear },
|
|
237
|
+
{ property: "border-radius", near: lengthsAreNear },
|
|
238
|
+
{ property: "box-shadow", near: lengthsAreNear },
|
|
239
|
+
];
|
|
240
|
+
/** Take the inventory. */
|
|
241
|
+
export function takeInventory(samples, dimensions = DIMENSIONS) {
|
|
242
|
+
return dimensions
|
|
243
|
+
.map(({ property, near }) => {
|
|
244
|
+
const usages = tallyUsage(samples, property);
|
|
245
|
+
return {
|
|
246
|
+
property,
|
|
247
|
+
distinct: usages.length,
|
|
248
|
+
usages,
|
|
249
|
+
clusters: clusterUsage(usages, near),
|
|
250
|
+
};
|
|
251
|
+
})
|
|
252
|
+
.filter((dimension) => dimension.distinct > 0);
|
|
253
|
+
}
|
|
254
|
+
/** How many values to list per property before summarising. */
|
|
255
|
+
const MAX_LISTED = 8;
|
|
256
|
+
/** Say what the page is built from. */
|
|
257
|
+
export function renderInventory(dimensions, options = {}) {
|
|
258
|
+
if (dimensions.length === 0) {
|
|
259
|
+
return renderVerdict({ standing: "warn", headline: "Nothing was sampled from this page." }, "");
|
|
260
|
+
}
|
|
261
|
+
if (options.property) {
|
|
262
|
+
const found = dimensions.find((dimension) => dimension.property === options.property);
|
|
263
|
+
// Like the audit's rule drill-down, this carries a verdict head
|
|
264
|
+
// so a caller reading the standing gets it from the answer
|
|
265
|
+
// rather than from the shape of the prose.
|
|
266
|
+
if (!found) {
|
|
267
|
+
return renderVerdict({
|
|
268
|
+
standing: "warn",
|
|
269
|
+
headline: `Nothing was sampled for '${options.property}'.`,
|
|
270
|
+
measured: `Sampled: ${dimensions
|
|
271
|
+
.map((dimension) => dimension.property)
|
|
272
|
+
.join(", ")}.`,
|
|
273
|
+
}, "");
|
|
274
|
+
}
|
|
275
|
+
return renderVerdict({
|
|
276
|
+
standing: found.clusters.length > 0 ? "warn" : "pass",
|
|
277
|
+
headline: found.clusters.length > 0
|
|
278
|
+
? `${found.property}: ${count(found.clusters.length, "cluster")} ` +
|
|
279
|
+
"close enough to look accidental."
|
|
280
|
+
: `${found.property}: no two values were close enough to ` +
|
|
281
|
+
"look accidental.",
|
|
282
|
+
}, renderDimension(found, Number.POSITIVE_INFINITY));
|
|
283
|
+
}
|
|
284
|
+
const drifting = dimensions.filter((dimension) => dimension.clusters.length > 0);
|
|
285
|
+
const values = dimensions.reduce((sum, dimension) => sum + dimension.distinct, 0);
|
|
286
|
+
const lines = [];
|
|
287
|
+
for (const dimension of dimensions) {
|
|
288
|
+
lines.push(renderDimension(dimension, MAX_LISTED), "");
|
|
289
|
+
}
|
|
290
|
+
lines.push("Name a property to see every value and where it is used.");
|
|
291
|
+
return renderVerdict({
|
|
292
|
+
// Drift is a question, never a failure. Two blues a step
|
|
293
|
+
// apart may be a hover state, and this cannot tell.
|
|
294
|
+
standing: drifting.length === 0 ? "pass" : "warn",
|
|
295
|
+
headline: drifting.length === 0
|
|
296
|
+
? "No two values were close enough to look accidental."
|
|
297
|
+
: `${drifting.length} of ${dimensions.length} properties hold ` +
|
|
298
|
+
"values close enough to have been meant as one.",
|
|
299
|
+
measured: `Sampled ${values} distinct values across ${dimensions.length} properties.`,
|
|
300
|
+
}, lines.join("\n"));
|
|
301
|
+
}
|
|
302
|
+
function renderDimension(dimension, limit) {
|
|
303
|
+
const head = `${dimension.property}: ${dimension.distinct} distinct`;
|
|
304
|
+
const lines = [
|
|
305
|
+
dimension.clusters.length === 0
|
|
306
|
+
? head
|
|
307
|
+
: `${head}, ${dimension.clusters.length} looking like drift`,
|
|
308
|
+
];
|
|
309
|
+
for (const cluster of dimension.clusters) {
|
|
310
|
+
lines.push(` ${cluster.leader.value} (${cluster.leader.count}) sits beside ` +
|
|
311
|
+
cluster.nearby.map((one) => `${one.value} (${one.count})`).join(", "));
|
|
312
|
+
}
|
|
313
|
+
const shown = dimension.usages.slice(0, limit);
|
|
314
|
+
for (const usage of shown) {
|
|
315
|
+
const where = limit === Number.POSITIVE_INFINITY
|
|
316
|
+
? ` ${usage.examples.join(", ")}`
|
|
317
|
+
: "";
|
|
318
|
+
lines.push(` ${String(usage.count).padStart(4)} ${usage.value}${where}`);
|
|
319
|
+
}
|
|
320
|
+
if (dimension.usages.length > shown.length) {
|
|
321
|
+
lines.push(` ... and ${dimension.usages.length - shown.length} more`);
|
|
322
|
+
}
|
|
323
|
+
return lines.join("\n");
|
|
324
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sampling what the page is built from.
|
|
3
|
+
*
|
|
4
|
+
* Every value is a resolved computed style, which is the only
|
|
5
|
+
* honest source: the stylesheet says what was asked for, and the
|
|
6
|
+
* computed style says what the element got after the cascade,
|
|
7
|
+
* custom properties, media queries and inheritance all had their
|
|
8
|
+
* turn. An inventory built from CSS text would describe the
|
|
9
|
+
* intent rather than the page.
|
|
10
|
+
*
|
|
11
|
+
* Inherited values are the one thing filtered out, and for a
|
|
12
|
+
* reason worth stating: every element inherits a colour, so
|
|
13
|
+
* sampling all of them makes the body text look like the most
|
|
14
|
+
* popular decision on the page when nobody decided it at all.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SAMPLED_PROPERTIES: readonly ["color", "background-color", "border-color", "font-family", "font-size", "font-weight", "line-height", "padding", "margin", "border-radius", "box-shadow"];
|
|
17
|
+
/**
|
|
18
|
+
* Build the expression that samples the page's styles.
|
|
19
|
+
*
|
|
20
|
+
* A value is kept only where the element differs from its
|
|
21
|
+
* parent, which is what turns "every element is 16px" into "one
|
|
22
|
+
* element chose 14px".
|
|
23
|
+
*/
|
|
24
|
+
export declare function inventorySource(): string;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sampling what the page is built from.
|
|
3
|
+
*
|
|
4
|
+
* Every value is a resolved computed style, which is the only
|
|
5
|
+
* honest source: the stylesheet says what was asked for, and the
|
|
6
|
+
* computed style says what the element got after the cascade,
|
|
7
|
+
* custom properties, media queries and inheritance all had their
|
|
8
|
+
* turn. An inventory built from CSS text would describe the
|
|
9
|
+
* intent rather than the page.
|
|
10
|
+
*
|
|
11
|
+
* Inherited values are the one thing filtered out, and for a
|
|
12
|
+
* reason worth stating: every element inherits a colour, so
|
|
13
|
+
* sampling all of them makes the body text look like the most
|
|
14
|
+
* popular decision on the page when nobody decided it at all.
|
|
15
|
+
*/
|
|
16
|
+
/** The properties worth sampling, in the order they are read. */
|
|
17
|
+
import { DEEP_DOM } from "../snapshot/deep.js";
|
|
18
|
+
import { PRESENTED } from "../snapshot/presented.js";
|
|
19
|
+
export const SAMPLED_PROPERTIES = [
|
|
20
|
+
"color",
|
|
21
|
+
"background-color",
|
|
22
|
+
"border-color",
|
|
23
|
+
"font-family",
|
|
24
|
+
"font-size",
|
|
25
|
+
"font-weight",
|
|
26
|
+
"line-height",
|
|
27
|
+
"padding",
|
|
28
|
+
"margin",
|
|
29
|
+
"border-radius",
|
|
30
|
+
"box-shadow",
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Build the expression that samples the page's styles.
|
|
34
|
+
*
|
|
35
|
+
* A value is kept only where the element differs from its
|
|
36
|
+
* parent, which is what turns "every element is 16px" into "one
|
|
37
|
+
* element chose 14px".
|
|
38
|
+
*/
|
|
39
|
+
export function inventorySource() {
|
|
40
|
+
return `(() => {
|
|
41
|
+
${DEEP_DOM}
|
|
42
|
+
${PRESENTED}
|
|
43
|
+
const PROPERTIES = ${JSON.stringify(SAMPLED_PROPERTIES)};
|
|
44
|
+
|
|
45
|
+
const NOTHING = new Set([
|
|
46
|
+
"none", "normal", "auto", "0px", "rgba(0, 0, 0, 0)", "0px 0px 0px 0px",
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
const samples = [];
|
|
50
|
+
for (const el of deepElements(document)) {
|
|
51
|
+
const tag = el.tagName.toLowerCase();
|
|
52
|
+
if (tag === "script" || tag === "style" || tag === "head") continue;
|
|
53
|
+
// An inventory of what the design actually looks like, so it
|
|
54
|
+
// samples what somebody can actually see: not a closed
|
|
55
|
+
// dialog's contents, and not a screen-reader-only label whose
|
|
56
|
+
// colours nobody ever looks at.
|
|
57
|
+
if (!presented(el)) continue;
|
|
58
|
+
|
|
59
|
+
const own = getComputedStyle(el);
|
|
60
|
+
const parent = el.parentElement ? getComputedStyle(el.parentElement) : null;
|
|
61
|
+
|
|
62
|
+
// A border colour with no border is not a decision. Its
|
|
63
|
+
// initial value is currentColor, so every element reports
|
|
64
|
+
// one, and sampling them all just echoes the colour list
|
|
65
|
+
// back under a second heading.
|
|
66
|
+
const hasBorder =
|
|
67
|
+
own.borderStyle !== "none" &&
|
|
68
|
+
parseFloat(own.borderTopWidth) +
|
|
69
|
+
parseFloat(own.borderRightWidth) +
|
|
70
|
+
parseFloat(own.borderBottomWidth) +
|
|
71
|
+
parseFloat(own.borderLeftWidth) >
|
|
72
|
+
0;
|
|
73
|
+
|
|
74
|
+
const values = {};
|
|
75
|
+
for (const property of PROPERTIES) {
|
|
76
|
+
if (property === "border-color" && !hasBorder) continue;
|
|
77
|
+
const value = own.getPropertyValue(property);
|
|
78
|
+
if (!value || NOTHING.has(value)) continue;
|
|
79
|
+
// Only what this element decided, not what it was handed.
|
|
80
|
+
if (parent && parent.getPropertyValue(property) === value) continue;
|
|
81
|
+
values[property] = value;
|
|
82
|
+
}
|
|
83
|
+
if (Object.keys(values).length === 0) continue;
|
|
84
|
+
samples.push({ selector: deepSelectorFor(el), values });
|
|
85
|
+
}
|
|
86
|
+
return samples;
|
|
87
|
+
})()`;
|
|
88
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether an action can land, and what is stopping it.
|
|
3
|
+
*
|
|
4
|
+
* A click on an element that is not ready does nothing, and
|
|
5
|
+
* says nothing, which is the worst failure a driver has: the
|
|
6
|
+
* caller believes the page was acted on. Judging readiness
|
|
7
|
+
* first turns that silence into a sentence.
|
|
8
|
+
*/
|
|
9
|
+
import type { Rect } from "./box.js";
|
|
10
|
+
import type { VisibilityVerdict } from "./visibility.js";
|
|
11
|
+
/** What is known about an element's readiness. */
|
|
12
|
+
export interface ActionabilityFacts {
|
|
13
|
+
readonly present: boolean;
|
|
14
|
+
readonly visibility?: VisibilityVerdict;
|
|
15
|
+
readonly enabled: boolean;
|
|
16
|
+
/** Whether it has stopped moving since the last look. */
|
|
17
|
+
readonly settled: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Ready, or the one condition in the way. */
|
|
20
|
+
export interface Actionability {
|
|
21
|
+
readonly ready: boolean;
|
|
22
|
+
readonly blocker?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Judge whether an element can be acted on.
|
|
26
|
+
*
|
|
27
|
+
* The order matters for the same reason it does in the
|
|
28
|
+
* visibility verdict: several conditions can hold at once, and
|
|
29
|
+
* naming a shallow one sends someone looking at the wrong
|
|
30
|
+
* thing. A missing element is not usefully also disabled.
|
|
31
|
+
*/
|
|
32
|
+
export declare function judgeActionability(facts: ActionabilityFacts): Actionability;
|
|
33
|
+
/** Whether a box is where it was. */
|
|
34
|
+
export declare function sameBox(before: Rect | undefined, after: Rect | undefined, tolerance?: number): boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether an action can land, and what is stopping it.
|
|
3
|
+
*
|
|
4
|
+
* A click on an element that is not ready does nothing, and
|
|
5
|
+
* says nothing, which is the worst failure a driver has: the
|
|
6
|
+
* caller believes the page was acted on. Judging readiness
|
|
7
|
+
* first turns that silence into a sentence.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Judge whether an element can be acted on.
|
|
11
|
+
*
|
|
12
|
+
* The order matters for the same reason it does in the
|
|
13
|
+
* visibility verdict: several conditions can hold at once, and
|
|
14
|
+
* naming a shallow one sends someone looking at the wrong
|
|
15
|
+
* thing. A missing element is not usefully also disabled.
|
|
16
|
+
*/
|
|
17
|
+
export function judgeActionability(facts) {
|
|
18
|
+
if (!facts.present) {
|
|
19
|
+
return { ready: false, blocker: "it is not in the page" };
|
|
20
|
+
}
|
|
21
|
+
if (facts.visibility && facts.visibility.state !== "visible") {
|
|
22
|
+
// The verdict already explains itself. A second wording of
|
|
23
|
+
// the same fact is a second thing to keep in agreement.
|
|
24
|
+
return { ready: false, blocker: facts.visibility.because };
|
|
25
|
+
}
|
|
26
|
+
if (!facts.enabled)
|
|
27
|
+
return { ready: false, blocker: "it is disabled" };
|
|
28
|
+
if (!facts.settled)
|
|
29
|
+
return { ready: false, blocker: "it is still moving" };
|
|
30
|
+
return { ready: true };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* How far a box may drift and still count as still.
|
|
34
|
+
*
|
|
35
|
+
* Layout jitter below a pixel is not movement, and treating it
|
|
36
|
+
* as such would leave an element never settling.
|
|
37
|
+
*/
|
|
38
|
+
const WOBBLE = 0.5;
|
|
39
|
+
/** Whether a box is where it was. */
|
|
40
|
+
export function sameBox(before, after, tolerance = WOBBLE) {
|
|
41
|
+
// Appearing or vanishing is the largest movement there is.
|
|
42
|
+
if (!before || !after)
|
|
43
|
+
return false;
|
|
44
|
+
return (Math.abs(before.x - after.x) <= tolerance &&
|
|
45
|
+
Math.abs(before.y - after.y) <= tolerance &&
|
|
46
|
+
Math.abs(before.width - after.width) <= tolerance &&
|
|
47
|
+
Math.abs(before.height - after.height) <= tolerance);
|
|
48
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What is moving.
|
|
3
|
+
*
|
|
4
|
+
* Motion explains readings that otherwise look wrong: a style
|
|
5
|
+
* caught mid-transition, an element that is not where it will
|
|
6
|
+
* be a moment later. It is also an accessibility question,
|
|
7
|
+
* since something animating without end is a barrier for
|
|
8
|
+
* readers who need the page to hold still.
|
|
9
|
+
*/
|
|
10
|
+
/** An animation as the page reported it. */
|
|
11
|
+
export interface RawAnimation {
|
|
12
|
+
readonly name?: string;
|
|
13
|
+
readonly kind: string;
|
|
14
|
+
readonly playState: string;
|
|
15
|
+
readonly durationMs?: number;
|
|
16
|
+
readonly easing?: string;
|
|
17
|
+
/**
|
|
18
|
+
* How many times it repeats, as text. An endless animation
|
|
19
|
+
* counts Infinity, which becomes null once serialized, so the
|
|
20
|
+
* page sends the word instead.
|
|
21
|
+
*/
|
|
22
|
+
readonly iterations?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Something moving on an element. */
|
|
25
|
+
export interface Animation {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly kind: string;
|
|
28
|
+
readonly playState: string;
|
|
29
|
+
readonly durationMs?: number;
|
|
30
|
+
readonly easing?: string;
|
|
31
|
+
readonly iterations: string;
|
|
32
|
+
}
|
|
33
|
+
/** Read a capture's animations. */
|
|
34
|
+
export declare function normalizeAnimations(raw: readonly RawAnimation[]): readonly Animation[];
|
|
35
|
+
/** Say what is moving and how. */
|
|
36
|
+
export declare function renderAnimations(animations: readonly Animation[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* Read what is animating on an element.
|
|
39
|
+
*
|
|
40
|
+
* Runs with the element as its receiver. Iteration counts are
|
|
41
|
+
* stringified in the page because Infinity does not survive
|
|
42
|
+
* being serialized and would arrive as null, reading as though
|
|
43
|
+
* an endless animation had no repeat count at all.
|
|
44
|
+
*
|
|
45
|
+
* Page source rather than a function, for the reason given in
|
|
46
|
+
* the accessibility observer.
|
|
47
|
+
*/
|
|
48
|
+
export declare const ANIMATIONS_PROBE = "function () {\n if (!this.getAnimations) return [];\n return this.getAnimations().map(function (animation) {\n var timing = animation.effect && animation.effect.getTiming\n ? animation.effect.getTiming()\n : {};\n var duration = typeof timing.duration === \"number\"\n ? timing.duration\n : undefined;\n return {\n name: animation.animationName || animation.transitionProperty || \"\",\n kind: animation.transitionProperty ? \"transition\" : \"animation\",\n playState: animation.playState,\n durationMs: duration,\n easing: timing.easing,\n iterations: String(timing.iterations),\n };\n });\n}";
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What is moving.
|
|
3
|
+
*
|
|
4
|
+
* Motion explains readings that otherwise look wrong: a style
|
|
5
|
+
* caught mid-transition, an element that is not where it will
|
|
6
|
+
* be a moment later. It is also an accessibility question,
|
|
7
|
+
* since something animating without end is a barrier for
|
|
8
|
+
* readers who need the page to hold still.
|
|
9
|
+
*/
|
|
10
|
+
/** Read a capture's animations. */
|
|
11
|
+
export function normalizeAnimations(raw) {
|
|
12
|
+
return raw.map((animation) => ({
|
|
13
|
+
name: animation.name || "unnamed",
|
|
14
|
+
kind: animation.kind,
|
|
15
|
+
playState: animation.playState,
|
|
16
|
+
...(animation.durationMs === undefined
|
|
17
|
+
? {}
|
|
18
|
+
: { durationMs: animation.durationMs }),
|
|
19
|
+
...(animation.easing === undefined ? {} : { easing: animation.easing }),
|
|
20
|
+
iterations: animation.iterations === "Infinity"
|
|
21
|
+
? "endless"
|
|
22
|
+
: (animation.iterations ?? "1"),
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
/** Say what is moving and how. */
|
|
26
|
+
export function renderAnimations(animations) {
|
|
27
|
+
if (animations.length === 0)
|
|
28
|
+
return "Nothing is animating.";
|
|
29
|
+
return animations
|
|
30
|
+
.map((animation) => {
|
|
31
|
+
const parts = [animation.name, animation.kind, animation.playState];
|
|
32
|
+
if (animation.durationMs !== undefined) {
|
|
33
|
+
parts.push(`${animation.durationMs}ms`);
|
|
34
|
+
}
|
|
35
|
+
if (animation.easing)
|
|
36
|
+
parts.push(animation.easing);
|
|
37
|
+
// Repeating once is what everything does; only an
|
|
38
|
+
// unusual count is worth the words.
|
|
39
|
+
if (animation.iterations !== "1")
|
|
40
|
+
parts.push(animation.iterations);
|
|
41
|
+
return parts.join(" ");
|
|
42
|
+
})
|
|
43
|
+
.join("\n");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Read what is animating on an element.
|
|
47
|
+
*
|
|
48
|
+
* Runs with the element as its receiver. Iteration counts are
|
|
49
|
+
* stringified in the page because Infinity does not survive
|
|
50
|
+
* being serialized and would arrive as null, reading as though
|
|
51
|
+
* an endless animation had no repeat count at all.
|
|
52
|
+
*
|
|
53
|
+
* Page source rather than a function, for the reason given in
|
|
54
|
+
* the accessibility observer.
|
|
55
|
+
*/
|
|
56
|
+
export const ANIMATIONS_PROBE = `function () {
|
|
57
|
+
if (!this.getAnimations) return [];
|
|
58
|
+
return this.getAnimations().map(function (animation) {
|
|
59
|
+
var timing = animation.effect && animation.effect.getTiming
|
|
60
|
+
? animation.effect.getTiming()
|
|
61
|
+
: {};
|
|
62
|
+
var duration = typeof timing.duration === "number"
|
|
63
|
+
? timing.duration
|
|
64
|
+
: undefined;
|
|
65
|
+
return {
|
|
66
|
+
name: animation.animationName || animation.transitionProperty || "",
|
|
67
|
+
kind: animation.transitionProperty ? "transition" : "animation",
|
|
68
|
+
playState: animation.playState,
|
|
69
|
+
durationMs: duration,
|
|
70
|
+
easing: timing.easing,
|
|
71
|
+
iterations: String(timing.iterations),
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
}`;
|