@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,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Laying out what was found about one element.
|
|
3
|
+
*
|
|
4
|
+
* Kept apart from the judging so the two have separate reasons
|
|
5
|
+
* to change: what is true about an element and how it reads are
|
|
6
|
+
* different questions.
|
|
7
|
+
*/
|
|
8
|
+
/** Round a measurement to something a person would say. */
|
|
9
|
+
function round(value) {
|
|
10
|
+
return String(Math.round(value * 100) / 100);
|
|
11
|
+
}
|
|
12
|
+
/** The verdict, as a sentence. */
|
|
13
|
+
export function renderVisibility(verdict) {
|
|
14
|
+
return `${verdict.state}: ${verdict.because}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The boxes, innermost outwards, with the offsets between them
|
|
18
|
+
* stated only where they exist. Four zeroes for the margin of
|
|
19
|
+
* an element with no margin is noise.
|
|
20
|
+
*
|
|
21
|
+
* The position says which space it is measured in. These numbers
|
|
22
|
+
* come from the box model, which measures from the viewport, while
|
|
23
|
+
* a page query reports the same element measured down the document.
|
|
24
|
+
* On a scrolled page the two differ by however far it has moved,
|
|
25
|
+
* and an unlabelled pair of numbers invites reading one as the
|
|
26
|
+
* other: that confusion hid a real defect for hours, because every
|
|
27
|
+
* reading was true in its own frame and none were comparable.
|
|
28
|
+
*/
|
|
29
|
+
export function renderBox(box) {
|
|
30
|
+
const lines = [
|
|
31
|
+
`content ${round(box.content.width)} by ${round(box.content.height)}` +
|
|
32
|
+
` at (${round(box.content.x)}, ${round(box.content.y)})` +
|
|
33
|
+
" in the viewport",
|
|
34
|
+
];
|
|
35
|
+
const padding = insetsBetween(box.content, box.padding);
|
|
36
|
+
if (padding)
|
|
37
|
+
lines.push(`padding ${padding}`);
|
|
38
|
+
const border = insetsBetween(box.padding, box.border);
|
|
39
|
+
if (border)
|
|
40
|
+
lines.push(`border ${border}`);
|
|
41
|
+
const margin = insetsBetween(box.border, box.margin);
|
|
42
|
+
if (margin)
|
|
43
|
+
lines.push(`margin ${margin}`);
|
|
44
|
+
return lines.join("\n");
|
|
45
|
+
}
|
|
46
|
+
/** The gap on each side between an inner and an outer box. */
|
|
47
|
+
function insetsBetween(inner, outer) {
|
|
48
|
+
const top = inner.y - outer.y;
|
|
49
|
+
const left = inner.x - outer.x;
|
|
50
|
+
const right = outer.x + outer.width - (inner.x + inner.width);
|
|
51
|
+
const bottom = outer.y + outer.height - (inner.y + inner.height);
|
|
52
|
+
if ([top, right, bottom, left].every((side) => side === 0))
|
|
53
|
+
return undefined;
|
|
54
|
+
if (top === right && right === bottom && bottom === left) {
|
|
55
|
+
return round(top);
|
|
56
|
+
}
|
|
57
|
+
if (top === bottom && left === right)
|
|
58
|
+
return `${round(top)} ${round(right)}`;
|
|
59
|
+
return `${round(top)} ${round(right)} ${round(bottom)} ${round(left)}`;
|
|
60
|
+
}
|
|
61
|
+
/** Curated styles, grouped as they were curated. */
|
|
62
|
+
export function renderStyles(groups) {
|
|
63
|
+
if (groups.length === 0)
|
|
64
|
+
return "Nothing was set beyond the defaults.";
|
|
65
|
+
return groups
|
|
66
|
+
.map((group) => `${group.name}\n` +
|
|
67
|
+
group.entries
|
|
68
|
+
.map((entry) => ` ${entry.property}: ${entry.value}`)
|
|
69
|
+
.join("\n"))
|
|
70
|
+
.join("\n");
|
|
71
|
+
}
|
|
72
|
+
/** One declaration, said the way a person would read it. */
|
|
73
|
+
function renderDeclaration(declaration, won) {
|
|
74
|
+
const mark = won ? "wins " : " ";
|
|
75
|
+
const value = declaration.important
|
|
76
|
+
? `${declaration.value} !important`
|
|
77
|
+
: declaration.value;
|
|
78
|
+
const where = declaration.origin === "inline"
|
|
79
|
+
? "inline style"
|
|
80
|
+
: (declaration.selector ?? declaration.origin);
|
|
81
|
+
const parts = [`${mark} ${declaration.property}: ${value}`, `from ${where}`];
|
|
82
|
+
if (declaration.media)
|
|
83
|
+
parts.push(`@media ${declaration.media.join(", ")}`);
|
|
84
|
+
if (declaration.origin === "user-agent")
|
|
85
|
+
parts.push("(browser default)");
|
|
86
|
+
if (declaration.origin === "inherited")
|
|
87
|
+
parts.push("(inherited)");
|
|
88
|
+
if (declaration.via)
|
|
89
|
+
parts.push(`via ${declaration.via}`);
|
|
90
|
+
const authored = declaration.source?.authored;
|
|
91
|
+
if (authored) {
|
|
92
|
+
// The authored position is the one worth reading, but the
|
|
93
|
+
// generated line stays beside it: a stale map is a real
|
|
94
|
+
// thing, and hiding the disagreement hides the bug.
|
|
95
|
+
parts.push(`${authored.source}:${authored.line + 1}`);
|
|
96
|
+
if (declaration.source?.line !== undefined) {
|
|
97
|
+
parts.push(`(built line ${declaration.source.line + 1})`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (declaration.source?.line !== undefined) {
|
|
101
|
+
parts.push(`line ${declaration.source.line + 1}`);
|
|
102
|
+
}
|
|
103
|
+
return parts.join(" ");
|
|
104
|
+
}
|
|
105
|
+
/** Everything that had a say in one property, strongest first. */
|
|
106
|
+
export function renderTrace(trace) {
|
|
107
|
+
if (trace.declarations.length === 0) {
|
|
108
|
+
return `Nothing declared ${trace.property}.`;
|
|
109
|
+
}
|
|
110
|
+
const heading = trace.computed === undefined
|
|
111
|
+
? trace.property
|
|
112
|
+
: `${trace.property} computed to ${trace.computed}`;
|
|
113
|
+
return [
|
|
114
|
+
heading,
|
|
115
|
+
...trace.declarations.map((declaration) => renderDeclaration(declaration, declaration === trace.winner)),
|
|
116
|
+
].join("\n");
|
|
117
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a person could actually see and click this.
|
|
3
|
+
*
|
|
4
|
+
* "Is it there" has several answers that look alike from the
|
|
5
|
+
* outside and need entirely different fixes: not rendered at
|
|
6
|
+
* all, rendered with no size, rendered off screen, rendered
|
|
7
|
+
* under something else, rendered invisibly. A caller whose
|
|
8
|
+
* click went nowhere needs to be told which.
|
|
9
|
+
*/
|
|
10
|
+
import type { Rect } from "./box.js";
|
|
11
|
+
/** What a person would find when they looked. */
|
|
12
|
+
export type Visible = "visible" | "not rendered" | "zero size" | "off screen" | "covered" | "transparent";
|
|
13
|
+
/** The area a person can currently see. */
|
|
14
|
+
export interface Viewport {
|
|
15
|
+
readonly width: number;
|
|
16
|
+
readonly height: number;
|
|
17
|
+
}
|
|
18
|
+
/** What is known about an element's presence. */
|
|
19
|
+
export interface VisibilityFacts {
|
|
20
|
+
/** Whether the capture could measure a box at all. */
|
|
21
|
+
readonly rendered: boolean;
|
|
22
|
+
readonly border?: Rect;
|
|
23
|
+
readonly viewport?: Viewport;
|
|
24
|
+
/** What the hit test found instead, described for a person. */
|
|
25
|
+
readonly coveredBy?: string;
|
|
26
|
+
readonly opacity?: number;
|
|
27
|
+
readonly visibility?: string;
|
|
28
|
+
}
|
|
29
|
+
/** One plain answer, with the reason it was reached. */
|
|
30
|
+
export interface VisibilityVerdict {
|
|
31
|
+
readonly state: Visible;
|
|
32
|
+
readonly because: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Judge an element's presence.
|
|
36
|
+
*
|
|
37
|
+
* The order matters. An element that is not rendered cannot
|
|
38
|
+
* usefully also be called covered, and saying so would send
|
|
39
|
+
* someone hunting an overlay that is not the cause. So the most
|
|
40
|
+
* fundamental problem is the one reported.
|
|
41
|
+
*/
|
|
42
|
+
export declare function judgeVisibility(facts: VisibilityFacts): VisibilityVerdict;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a person could actually see and click this.
|
|
3
|
+
*
|
|
4
|
+
* "Is it there" has several answers that look alike from the
|
|
5
|
+
* outside and need entirely different fixes: not rendered at
|
|
6
|
+
* all, rendered with no size, rendered off screen, rendered
|
|
7
|
+
* under something else, rendered invisibly. A caller whose
|
|
8
|
+
* click went nowhere needs to be told which.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Judge an element's presence.
|
|
12
|
+
*
|
|
13
|
+
* The order matters. An element that is not rendered cannot
|
|
14
|
+
* usefully also be called covered, and saying so would send
|
|
15
|
+
* someone hunting an overlay that is not the cause. So the most
|
|
16
|
+
* fundamental problem is the one reported.
|
|
17
|
+
*/
|
|
18
|
+
export function judgeVisibility(facts) {
|
|
19
|
+
if (!facts.rendered || !facts.border) {
|
|
20
|
+
return {
|
|
21
|
+
state: "not rendered",
|
|
22
|
+
because: "it has no box, so display is none or it is not in the page",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (facts.visibility === "hidden" || facts.visibility === "collapse") {
|
|
26
|
+
return {
|
|
27
|
+
state: "not rendered",
|
|
28
|
+
because: `its visibility is ${facts.visibility}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const { width, height } = facts.border;
|
|
32
|
+
if (width === 0 || height === 0) {
|
|
33
|
+
return { state: "zero size", because: `it measures ${width} by ${height}` };
|
|
34
|
+
}
|
|
35
|
+
if (facts.opacity === 0) {
|
|
36
|
+
return { state: "transparent", because: "its opacity is 0" };
|
|
37
|
+
}
|
|
38
|
+
const viewport = facts.viewport;
|
|
39
|
+
if (viewport && !overlaps(facts.border, viewport)) {
|
|
40
|
+
return {
|
|
41
|
+
state: "off screen",
|
|
42
|
+
because: `it sits outside the ${viewport.width} by ${viewport.height} ` +
|
|
43
|
+
"viewport and needs scrolling to",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (facts.coveredBy) {
|
|
47
|
+
return {
|
|
48
|
+
state: "covered",
|
|
49
|
+
because: `${facts.coveredBy} is painted over its centre`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
state: "visible",
|
|
54
|
+
because: "it is on screen and receives its own centre",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether any part of the box is on screen. Half a control is
|
|
59
|
+
* still usable, and calling it off screen would send a caller
|
|
60
|
+
* scrolling for no reason.
|
|
61
|
+
*/
|
|
62
|
+
function overlaps(border, viewport) {
|
|
63
|
+
return (border.x < viewport.width &&
|
|
64
|
+
border.y < viewport.height &&
|
|
65
|
+
border.x + border.width > 0 &&
|
|
66
|
+
border.y + border.height > 0);
|
|
67
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divert-to-disk: the uncapped form of any capped answer.
|
|
3
|
+
*
|
|
4
|
+
* A response has a byte budget; a file does not. Anything the
|
|
5
|
+
* budget cannot carry inline goes to the session's bundle
|
|
6
|
+
* directory whole, and the answer carries the path, so no
|
|
7
|
+
* result is ever unobtainable, only relocated.
|
|
8
|
+
*/
|
|
9
|
+
import type { Paged } from "./paged.js";
|
|
10
|
+
import type { BundleSink } from "./sink.js";
|
|
11
|
+
/** How the whole list should read on disk. */
|
|
12
|
+
export interface ArtifactOptions<T> {
|
|
13
|
+
/** File name to write under, before uniquing. */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** How to render the artifact; JSON when the caller has no opinion. */
|
|
16
|
+
readonly render?: (all: readonly T[]) => string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Write the whole list to the sink and return the same page
|
|
20
|
+
* carrying the path, so the caller keeps its summary and its
|
|
21
|
+
* window alongside the complete answer.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withArtifact<T>(page: Paged<T>, all: readonly T[], sink: BundleSink, options: ArtifactOptions<T>): Paged<T>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divert-to-disk: the uncapped form of any capped answer.
|
|
3
|
+
*
|
|
4
|
+
* A response has a byte budget; a file does not. Anything the
|
|
5
|
+
* budget cannot carry inline goes to the session's bundle
|
|
6
|
+
* directory whole, and the answer carries the path, so no
|
|
7
|
+
* result is ever unobtainable, only relocated.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Names already written to each sink, so no divert clobbers
|
|
11
|
+
* another. Keyed by the sink so the tally dies with the
|
|
12
|
+
* session's bundle directory rather than growing for the life
|
|
13
|
+
* of the process.
|
|
14
|
+
*/
|
|
15
|
+
const used = new WeakMap();
|
|
16
|
+
/**
|
|
17
|
+
* Write the whole list to the sink and return the same page
|
|
18
|
+
* carrying the path, so the caller keeps its summary and its
|
|
19
|
+
* window alongside the complete answer.
|
|
20
|
+
*/
|
|
21
|
+
export function withArtifact(page, all, sink, options) {
|
|
22
|
+
const render = options.render ?? defaultRender;
|
|
23
|
+
const artifactPath = sink.writeText(unique(sink, options.name), render(all));
|
|
24
|
+
return { ...page, artifactPath };
|
|
25
|
+
}
|
|
26
|
+
/** A name no earlier divert to this sink has taken. */
|
|
27
|
+
function unique(sink, name) {
|
|
28
|
+
let taken = used.get(sink);
|
|
29
|
+
if (!taken) {
|
|
30
|
+
taken = new Map();
|
|
31
|
+
used.set(sink, taken);
|
|
32
|
+
}
|
|
33
|
+
const seen = taken.get(name) ?? 0;
|
|
34
|
+
taken.set(name, seen + 1);
|
|
35
|
+
if (seen === 0)
|
|
36
|
+
return name;
|
|
37
|
+
const dot = name.lastIndexOf(".");
|
|
38
|
+
return dot <= 0
|
|
39
|
+
? `${name}-${seen + 1}`
|
|
40
|
+
: `${name.slice(0, dot)}-${seen + 1}${name.slice(dot)}`;
|
|
41
|
+
}
|
|
42
|
+
/** The artifact when the caller names no format. */
|
|
43
|
+
function defaultRender(all) {
|
|
44
|
+
return JSON.stringify(all, null, 2);
|
|
45
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared envelope: how every list-shaped answer is
|
|
3
|
+
* windowed, budgeted and, when it outgrows a response,
|
|
4
|
+
* diverted to disk.
|
|
5
|
+
*/
|
|
6
|
+
export { type ArtifactOptions, withArtifact } from "./artifacts.js";
|
|
7
|
+
export { pathComponent } from "./naming.js";
|
|
8
|
+
export { DEFAULT_BUDGET_BYTES, DEFAULT_LIMIT, type ListArgs, type Paged, type PageShape, paginate, } from "./paged.js";
|
|
9
|
+
export { BUNDLE_ROOT, type BundleSink, DIR_MODE, diskSink, FILE_MODE, LEGACY_BUNDLE_ROOTS, sessionDir, } from "./sink.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared envelope: how every list-shaped answer is
|
|
3
|
+
* windowed, budgeted and, when it outgrows a response,
|
|
4
|
+
* diverted to disk.
|
|
5
|
+
*/
|
|
6
|
+
export { withArtifact } from "./artifacts.js";
|
|
7
|
+
export { pathComponent } from "./naming.js";
|
|
8
|
+
export { DEFAULT_BUDGET_BYTES, DEFAULT_LIMIT, paginate, } from "./paged.js";
|
|
9
|
+
export { BUNDLE_ROOT, DIR_MODE, diskSink, FILE_MODE, LEGACY_BUNDLE_ROOTS, sessionDir, } from "./sink.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning caller-chosen words into one safe path component.
|
|
3
|
+
*
|
|
4
|
+
* Session names and baseline labels are chosen by whoever is
|
|
5
|
+
* driving, which in practice means a language model, and both end
|
|
6
|
+
* up joined onto a directory. A name of "../../../../tmp/evil"
|
|
7
|
+
* put a baseline write at /Users/tmp/evil rather than under the
|
|
8
|
+
* extension's data directory, because only the label was being
|
|
9
|
+
* cleaned and the session name went through untouched.
|
|
10
|
+
*
|
|
11
|
+
* The rule is stated once here and used by both, so the next
|
|
12
|
+
* caller-chosen word that becomes a path gets it for free rather
|
|
13
|
+
* than repeating the omission.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* One path component, safe to join onto a directory.
|
|
17
|
+
*
|
|
18
|
+
* Refuses nothing and always returns something joinable. A name
|
|
19
|
+
* made entirely of separators becomes the fallback rather than an
|
|
20
|
+
* error, because the caller asked to look at a page, not to be
|
|
21
|
+
* lectured about their session name.
|
|
22
|
+
*/
|
|
23
|
+
export declare function pathComponent(value: string): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning caller-chosen words into one safe path component.
|
|
3
|
+
*
|
|
4
|
+
* Session names and baseline labels are chosen by whoever is
|
|
5
|
+
* driving, which in practice means a language model, and both end
|
|
6
|
+
* up joined onto a directory. A name of "../../../../tmp/evil"
|
|
7
|
+
* put a baseline write at /Users/tmp/evil rather than under the
|
|
8
|
+
* extension's data directory, because only the label was being
|
|
9
|
+
* cleaned and the session name went through untouched.
|
|
10
|
+
*
|
|
11
|
+
* The rule is stated once here and used by both, so the next
|
|
12
|
+
* caller-chosen word that becomes a path gets it for free rather
|
|
13
|
+
* than repeating the omission.
|
|
14
|
+
*/
|
|
15
|
+
/** What is allowed to survive into a path component. */
|
|
16
|
+
const UNSAFE = /[^a-zA-Z0-9._-]+/g;
|
|
17
|
+
/**
|
|
18
|
+
* A name to fall back on when nothing usable is left.
|
|
19
|
+
*
|
|
20
|
+
* Something has to be written somewhere, and an empty component
|
|
21
|
+
* makes path.join silently return the parent directory, which is
|
|
22
|
+
* how a file lands one level up from where it was meant to.
|
|
23
|
+
*/
|
|
24
|
+
const FALLBACK = "unnamed";
|
|
25
|
+
/**
|
|
26
|
+
* One path component, safe to join onto a directory.
|
|
27
|
+
*
|
|
28
|
+
* Refuses nothing and always returns something joinable. A name
|
|
29
|
+
* made entirely of separators becomes the fallback rather than an
|
|
30
|
+
* error, because the caller asked to look at a page, not to be
|
|
31
|
+
* lectured about their session name.
|
|
32
|
+
*/
|
|
33
|
+
export function pathComponent(value) {
|
|
34
|
+
// "." and ".." survive the character filter untouched, and both
|
|
35
|
+
// mean a directory rather than a name. Stripping the leading dots
|
|
36
|
+
// handles those and the merely-hidden ".secret" in one move, but
|
|
37
|
+
// it can empty the name outright, which is why the fallback is
|
|
38
|
+
// applied after it rather than before: "..." cleaned first and
|
|
39
|
+
// checked second came back as the empty string, and path.join of
|
|
40
|
+
// an empty component returns the parent directory.
|
|
41
|
+
const cleaned = value.replace(UNSAFE, "-").replace(/^\.+/, "");
|
|
42
|
+
return cleaned === "" ? FALLBACK : cleaned;
|
|
43
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The envelope every list-shaped answer arrives in.
|
|
3
|
+
*
|
|
4
|
+
* The context window is the screen these answers render to, so
|
|
5
|
+
* the shape is summary first: what the whole list looks like,
|
|
6
|
+
* then as much of it as the window and the byte budget allow,
|
|
7
|
+
* then how to get the rest. Limits here are presentation
|
|
8
|
+
* defaults, never ceilings: every one can be raised per call,
|
|
9
|
+
* and anything cut says so and says how to retrieve it.
|
|
10
|
+
*/
|
|
11
|
+
/** What a caller may ask of any list. */
|
|
12
|
+
export interface ListArgs {
|
|
13
|
+
readonly limit?: number;
|
|
14
|
+
readonly cursor?: string;
|
|
15
|
+
readonly ids?: readonly number[];
|
|
16
|
+
readonly toDisk?: boolean;
|
|
17
|
+
readonly budget?: number;
|
|
18
|
+
}
|
|
19
|
+
/** A window onto a list, with the whole list's shape around it. */
|
|
20
|
+
export interface Paged<T> {
|
|
21
|
+
readonly total: number;
|
|
22
|
+
readonly groups?: Record<string, number>;
|
|
23
|
+
readonly items: readonly T[];
|
|
24
|
+
readonly nextCursor?: string;
|
|
25
|
+
readonly dropped?: number;
|
|
26
|
+
readonly elided?: string;
|
|
27
|
+
readonly artifactPath?: string;
|
|
28
|
+
}
|
|
29
|
+
/** What paging needs to know about the items it is windowing. */
|
|
30
|
+
export interface PageShape<T> {
|
|
31
|
+
readonly idOf: (item: T) => number;
|
|
32
|
+
readonly groupOf?: (item: T) => string;
|
|
33
|
+
readonly sizeOf?: (item: T) => number;
|
|
34
|
+
readonly more?: string;
|
|
35
|
+
readonly dropped?: number;
|
|
36
|
+
}
|
|
37
|
+
/** How many items a window holds when the caller says nothing. */
|
|
38
|
+
export declare const DEFAULT_LIMIT = 20;
|
|
39
|
+
/** How many bytes a response spends on items when nothing says otherwise. */
|
|
40
|
+
export declare const DEFAULT_BUDGET_BYTES = 8192;
|
|
41
|
+
/** Window a list into the shared envelope. */
|
|
42
|
+
export declare function paginate<T>(all: readonly T[], args: ListArgs, shape: PageShape<T>): Paged<T>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The envelope every list-shaped answer arrives in.
|
|
3
|
+
*
|
|
4
|
+
* The context window is the screen these answers render to, so
|
|
5
|
+
* the shape is summary first: what the whole list looks like,
|
|
6
|
+
* then as much of it as the window and the byte budget allow,
|
|
7
|
+
* then how to get the rest. Limits here are presentation
|
|
8
|
+
* defaults, never ceilings: every one can be raised per call,
|
|
9
|
+
* and anything cut says so and says how to retrieve it.
|
|
10
|
+
*/
|
|
11
|
+
/** How many items a window holds when the caller says nothing. */
|
|
12
|
+
export const DEFAULT_LIMIT = 20;
|
|
13
|
+
/** How many bytes a response spends on items when nothing says otherwise. */
|
|
14
|
+
export const DEFAULT_BUDGET_BYTES = 8192;
|
|
15
|
+
/** Window a list into the shared envelope. */
|
|
16
|
+
export function paginate(all, args, shape) {
|
|
17
|
+
const summary = {
|
|
18
|
+
total: all.length,
|
|
19
|
+
...(shape.groupOf ? { groups: countByGroup(all, shape.groupOf) } : {}),
|
|
20
|
+
...(shape.dropped ? { dropped: shape.dropped } : {}),
|
|
21
|
+
};
|
|
22
|
+
// Naming ids is a detail fetch, not a walk: the window and
|
|
23
|
+
// the cursor have nothing to say about it.
|
|
24
|
+
if (args.ids) {
|
|
25
|
+
const wanted = new Set(args.ids);
|
|
26
|
+
return {
|
|
27
|
+
...summary,
|
|
28
|
+
items: all.filter((one) => wanted.has(shape.idOf(one))),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const start = resumePoint(all, args.cursor, shape.idOf);
|
|
32
|
+
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
33
|
+
const budget = args.budget ?? DEFAULT_BUDGET_BYTES;
|
|
34
|
+
const candidates = all.slice(start, start + limit);
|
|
35
|
+
const items = withinBudget(candidates, budget, shape.sizeOf ?? measure);
|
|
36
|
+
const consumed = start + items.length;
|
|
37
|
+
const remaining = all.length - consumed;
|
|
38
|
+
const cut = candidates.length - items.length;
|
|
39
|
+
return {
|
|
40
|
+
...summary,
|
|
41
|
+
items,
|
|
42
|
+
// A cursor needs something to point at. With a limit of zero
|
|
43
|
+
// there are no items and this read index -1, so asking for an
|
|
44
|
+
// empty window of a non-empty list threw a TypeError instead
|
|
45
|
+
// of answering with nothing.
|
|
46
|
+
...(remaining > 0 && items.length > 0
|
|
47
|
+
? { nextCursor: String(shape.idOf(items[items.length - 1])) }
|
|
48
|
+
: {}),
|
|
49
|
+
...(cut > 0 ? { elided: elision(cut, budget, shape.more) } : {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Where a cursor says to carry on from. */
|
|
53
|
+
function resumePoint(all, cursor, idOf) {
|
|
54
|
+
if (cursor === undefined)
|
|
55
|
+
return 0;
|
|
56
|
+
const last = Number(cursor);
|
|
57
|
+
const at = all.findIndex((one) => idOf(one) === last);
|
|
58
|
+
// A cursor whose item is gone (evicted, re-run) starts over
|
|
59
|
+
// rather than silently skipping into the middle of the list.
|
|
60
|
+
return at === -1 ? 0 : at + 1;
|
|
61
|
+
}
|
|
62
|
+
/** As many items as the byte budget affords, and never none. */
|
|
63
|
+
function withinBudget(candidates, budget, sizeOf) {
|
|
64
|
+
const kept = [];
|
|
65
|
+
let spent = 0;
|
|
66
|
+
for (const one of candidates) {
|
|
67
|
+
const cost = sizeOf(one);
|
|
68
|
+
// One item always goes through: a record too big for the
|
|
69
|
+
// budget must still be reachable, not invisible.
|
|
70
|
+
if (kept.length > 0 && spent + cost > budget)
|
|
71
|
+
break;
|
|
72
|
+
kept.push(one);
|
|
73
|
+
spent += cost;
|
|
74
|
+
}
|
|
75
|
+
return kept;
|
|
76
|
+
}
|
|
77
|
+
/** Say what the budget cut, and how the caller gets it anyway. */
|
|
78
|
+
function elision(cut, budget, more) {
|
|
79
|
+
const ways = [
|
|
80
|
+
"raise budget",
|
|
81
|
+
...(more ? [more] : []),
|
|
82
|
+
"or pass toDisk for the whole set",
|
|
83
|
+
];
|
|
84
|
+
return (`${cut} more ${cut === 1 ? "item" : "items"} in this window did not ` +
|
|
85
|
+
`fit the ${budget} byte budget: ${ways.join(", ")}.`);
|
|
86
|
+
}
|
|
87
|
+
/** How many bytes an item costs when the caller has no opinion. */
|
|
88
|
+
function measure(item) {
|
|
89
|
+
return JSON.stringify(item)?.length ?? 0;
|
|
90
|
+
}
|
|
91
|
+
/** How many items fall in each group across the whole list. */
|
|
92
|
+
function countByGroup(all, groupOf) {
|
|
93
|
+
const counts = {};
|
|
94
|
+
for (const one of all) {
|
|
95
|
+
const group = groupOf(one);
|
|
96
|
+
counts[group] = (counts[group] ?? 0) + 1;
|
|
97
|
+
}
|
|
98
|
+
return counts;
|
|
99
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where anything too large to return goes.
|
|
3
|
+
*
|
|
4
|
+
* A response has a byte budget and an image has none, so
|
|
5
|
+
* captures are written to a private per-session directory and
|
|
6
|
+
* the answer carries the path. This lives beside the paging and
|
|
7
|
+
* artifact rules rather than with the page reader, because
|
|
8
|
+
* everything that outgrows a response needs it: screenshots,
|
|
9
|
+
* traces, network archives, whole DOMs.
|
|
10
|
+
*/
|
|
11
|
+
/** Where every session's bundle directory is rooted. */
|
|
12
|
+
export declare const BUNDLE_ROOT: string;
|
|
13
|
+
/**
|
|
14
|
+
* Where bundles used to be written, still swept so nothing is
|
|
15
|
+
* orphaned.
|
|
16
|
+
*
|
|
17
|
+
* The directory was named after web_read because that was the only
|
|
18
|
+
* thing writing to it. It now holds screenshots, HAR archives, DOM
|
|
19
|
+
* captures and visual baselines from four browser tools, and a
|
|
20
|
+
* person looking at their temp directory to find out what wrote
|
|
21
|
+
* two hundred megabytes there was told the wrong answer.
|
|
22
|
+
*
|
|
23
|
+
* Two of them: the original was hard-coded under /tmp, and the
|
|
24
|
+
* next version moved it under the real temp directory without
|
|
25
|
+
* renaming it.
|
|
26
|
+
*/
|
|
27
|
+
export declare const LEGACY_BUNDLE_ROOTS: readonly string[];
|
|
28
|
+
/** Bundle directories are private to the user who made them. */
|
|
29
|
+
export declare const DIR_MODE = 448;
|
|
30
|
+
/** Artifacts are readable only by their owner. */
|
|
31
|
+
export declare const FILE_MODE = 384;
|
|
32
|
+
/** Somewhere to put what a response cannot carry. */
|
|
33
|
+
export interface BundleSink {
|
|
34
|
+
dir: string;
|
|
35
|
+
/** Write a text artifact and return its path. */
|
|
36
|
+
writeText(name: string, content: string): string;
|
|
37
|
+
/** Write a binary artifact from base64 and return its path. */
|
|
38
|
+
writeBinary(name: string, base64: string): string;
|
|
39
|
+
}
|
|
40
|
+
/** This process's private bundle directory. */
|
|
41
|
+
export declare function sessionDir(): string;
|
|
42
|
+
/** A filesystem sink that creates a private bundle dir. */
|
|
43
|
+
export declare function diskSink(root?: string): BundleSink;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where anything too large to return goes.
|
|
3
|
+
*
|
|
4
|
+
* A response has a byte budget and an image has none, so
|
|
5
|
+
* captures are written to a private per-session directory and
|
|
6
|
+
* the answer carries the path. This lives beside the paging and
|
|
7
|
+
* artifact rules rather than with the page reader, because
|
|
8
|
+
* everything that outgrows a response needs it: screenshots,
|
|
9
|
+
* traces, network archives, whole DOMs.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as os from "node:os";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
/** Where every session's bundle directory is rooted. */
|
|
15
|
+
export const BUNDLE_ROOT = path.join(os.tmpdir(), "pi-web");
|
|
16
|
+
/**
|
|
17
|
+
* Where bundles used to be written, still swept so nothing is
|
|
18
|
+
* orphaned.
|
|
19
|
+
*
|
|
20
|
+
* The directory was named after web_read because that was the only
|
|
21
|
+
* thing writing to it. It now holds screenshots, HAR archives, DOM
|
|
22
|
+
* captures and visual baselines from four browser tools, and a
|
|
23
|
+
* person looking at their temp directory to find out what wrote
|
|
24
|
+
* two hundred megabytes there was told the wrong answer.
|
|
25
|
+
*
|
|
26
|
+
* Two of them: the original was hard-coded under /tmp, and the
|
|
27
|
+
* next version moved it under the real temp directory without
|
|
28
|
+
* renaming it.
|
|
29
|
+
*/
|
|
30
|
+
export const LEGACY_BUNDLE_ROOTS = [
|
|
31
|
+
"/tmp/pi-web-read",
|
|
32
|
+
path.join(os.tmpdir(), "pi-web-read"),
|
|
33
|
+
];
|
|
34
|
+
/** Bundle directories are private to the user who made them. */
|
|
35
|
+
export const DIR_MODE = 0o700;
|
|
36
|
+
/** Artifacts are readable only by their owner. */
|
|
37
|
+
export const FILE_MODE = 0o600;
|
|
38
|
+
/** This process's private bundle directory. */
|
|
39
|
+
export function sessionDir() {
|
|
40
|
+
return path.join(BUNDLE_ROOT, String(process.pid));
|
|
41
|
+
}
|
|
42
|
+
/** A filesystem sink that creates a private bundle dir. */
|
|
43
|
+
export function diskSink(root = sessionDir()) {
|
|
44
|
+
fs.mkdirSync(root, { recursive: true, mode: DIR_MODE });
|
|
45
|
+
// The "r-" prefix keeps the temp dir inside root, where the
|
|
46
|
+
// reaper looks, rather than creating a sibling of it.
|
|
47
|
+
const dir = fs.mkdtempSync(path.join(root, "r-"));
|
|
48
|
+
fs.chmodSync(dir, DIR_MODE);
|
|
49
|
+
return {
|
|
50
|
+
dir,
|
|
51
|
+
writeText(name, content) {
|
|
52
|
+
const filePath = path.join(dir, name);
|
|
53
|
+
fs.writeFileSync(filePath, content, {
|
|
54
|
+
encoding: "utf-8",
|
|
55
|
+
mode: FILE_MODE,
|
|
56
|
+
});
|
|
57
|
+
return filePath;
|
|
58
|
+
},
|
|
59
|
+
writeBinary(name, base64) {
|
|
60
|
+
const filePath = path.join(dir, name);
|
|
61
|
+
fs.writeFileSync(filePath, Buffer.from(base64, "base64"), {
|
|
62
|
+
mode: FILE_MODE,
|
|
63
|
+
});
|
|
64
|
+
return filePath;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|