@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,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the page went, and whether it survived the trip.
|
|
3
|
+
*
|
|
4
|
+
* A session's readings are only meaningful against the document
|
|
5
|
+
* they were taken from, so a navigation is a fact worth keeping
|
|
6
|
+
* beside them. A crash is worth keeping for a stronger reason:
|
|
7
|
+
* everything recorded after one belongs to a different tab.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Whether the session is sitting on the tab that replaced a crash.
|
|
11
|
+
*
|
|
12
|
+
* A crash is not the end of a session: the tab is replaced and
|
|
13
|
+
* everything goes on working. What is not restored is where the
|
|
14
|
+
* session was, because the replacement starts blank and nothing
|
|
15
|
+
* sends it back. So every read after a crash describes a blank
|
|
16
|
+
* page, and describing a blank page accurately is the problem:
|
|
17
|
+
* an empty outline reads as a page with nothing on it rather
|
|
18
|
+
* than a page that is gone.
|
|
19
|
+
*
|
|
20
|
+
* Asked of the history rather than of the url, because the
|
|
21
|
+
* question is whether anything has been loaded since, and a
|
|
22
|
+
* session deliberately sitting on about:blank is not stranded.
|
|
23
|
+
*/
|
|
24
|
+
export function strandedByCrash(history) {
|
|
25
|
+
// Walking back from the end rather than filtering forward:
|
|
26
|
+
// the first of these two kinds to turn up is the answer, and
|
|
27
|
+
// findLastIndex is not available on a readonly array here.
|
|
28
|
+
for (let at = history.length - 1; at >= 0; at -= 1) {
|
|
29
|
+
const kind = history[at]?.kind;
|
|
30
|
+
if (kind === "navigated" || kind === "routeChanged")
|
|
31
|
+
return false;
|
|
32
|
+
if (kind === "crashed")
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
export function createLifecycleRecorder(mainFrameId) {
|
|
38
|
+
const events = [];
|
|
39
|
+
let main = mainFrameId;
|
|
40
|
+
// Chrome announces why it is about to navigate in a separate
|
|
41
|
+
// event just before the navigation itself, so the reason is
|
|
42
|
+
// held until the navigation it belongs to arrives.
|
|
43
|
+
let pendingReason;
|
|
44
|
+
return {
|
|
45
|
+
adoptFrame(frameId) {
|
|
46
|
+
main = frameId;
|
|
47
|
+
},
|
|
48
|
+
apply(input) {
|
|
49
|
+
if (input.kind === "crashed") {
|
|
50
|
+
events.push({ kind: "crashed" });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (input.kind === "recovered") {
|
|
54
|
+
events.push({
|
|
55
|
+
kind: "recovered",
|
|
56
|
+
...(input.url === undefined ? {} : { url: input.url }),
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// A subframe navigating is the page's business, not the
|
|
61
|
+
// session's: the session is looking at the main document,
|
|
62
|
+
// and an advertisement reloading itself is not news.
|
|
63
|
+
if (input.frameId !== main)
|
|
64
|
+
return;
|
|
65
|
+
if (input.kind === "requested") {
|
|
66
|
+
pendingReason = input.reason;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (input.kind === "navigated") {
|
|
70
|
+
events.push({
|
|
71
|
+
kind: "navigated",
|
|
72
|
+
url: input.url,
|
|
73
|
+
...(pendingReason === undefined ? {} : { reason: pendingReason }),
|
|
74
|
+
});
|
|
75
|
+
pendingReason = undefined;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// A framework that announces its route on startup says the
|
|
79
|
+
// page it is already on, so a plain arrival was recorded
|
|
80
|
+
// twice: once as the navigation and once as the app noticing
|
|
81
|
+
// it. That made the trail longer than the number of pages
|
|
82
|
+
// visited, which is misleading when the trail is what you are
|
|
83
|
+
// counting history depth from. A route change to where we
|
|
84
|
+
// already are is not a move.
|
|
85
|
+
const last = events[events.length - 1];
|
|
86
|
+
if (last && "url" in last && last.url === input.url)
|
|
87
|
+
return;
|
|
88
|
+
events.push({
|
|
89
|
+
kind: "routeChanged",
|
|
90
|
+
url: input.url,
|
|
91
|
+
...(input.navigationType === undefined
|
|
92
|
+
? {}
|
|
93
|
+
: { via: input.navigationType }),
|
|
94
|
+
});
|
|
95
|
+
},
|
|
96
|
+
all() {
|
|
97
|
+
return events;
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Where the page has been, in order. */
|
|
102
|
+
export function renderLifecycle(events) {
|
|
103
|
+
if (events.length === 0)
|
|
104
|
+
return "The page has not navigated.";
|
|
105
|
+
return events
|
|
106
|
+
.map((event) => {
|
|
107
|
+
if (event.kind === "crashed") {
|
|
108
|
+
return ("crashed: the tab died, and nothing read before it " +
|
|
109
|
+
"belongs to the tab reading now");
|
|
110
|
+
}
|
|
111
|
+
if (event.kind === "recovered") {
|
|
112
|
+
return `recovered: a fresh tab${event.url ? `, back at ${event.url}` : ""}`;
|
|
113
|
+
}
|
|
114
|
+
if (event.kind === "routeChanged") {
|
|
115
|
+
return `route changed to ${event.url}${event.via ? ` (${event.via})` : ""}`;
|
|
116
|
+
}
|
|
117
|
+
return `navigated to ${event.url}${event.reason ? ` (${event.reason})` : ""}`;
|
|
118
|
+
})
|
|
119
|
+
.join("\n");
|
|
120
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the page asked the network for, and what it got back.
|
|
3
|
+
*
|
|
4
|
+
* The protocol reports one request as a scatter of events over
|
|
5
|
+
* time: sent, replied to, finished or failed, and sometimes
|
|
6
|
+
* sent again when it redirects. Nothing here judges any of it;
|
|
7
|
+
* this only reassembles the pieces into the record the events
|
|
8
|
+
* were always describing.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* The phase timings Chrome reports for a reply.
|
|
12
|
+
*
|
|
13
|
+
* Every field but requestTime is an offset in milliseconds from
|
|
14
|
+
* it, and a phase that did not happen is reported as -1 rather
|
|
15
|
+
* than left out. Named rather than treated as a bag of numbers,
|
|
16
|
+
* so the shape matches what the protocol actually sends.
|
|
17
|
+
*/
|
|
18
|
+
export interface ResourceTiming {
|
|
19
|
+
readonly requestTime: number;
|
|
20
|
+
readonly proxyStart?: number;
|
|
21
|
+
readonly proxyEnd?: number;
|
|
22
|
+
readonly dnsStart?: number;
|
|
23
|
+
readonly dnsEnd?: number;
|
|
24
|
+
readonly connectStart?: number;
|
|
25
|
+
readonly connectEnd?: number;
|
|
26
|
+
readonly sslStart?: number;
|
|
27
|
+
readonly sslEnd?: number;
|
|
28
|
+
readonly workerStart?: number;
|
|
29
|
+
readonly workerReady?: number;
|
|
30
|
+
readonly workerFetchStart?: number;
|
|
31
|
+
readonly workerRespondWithSettled?: number;
|
|
32
|
+
readonly sendStart?: number;
|
|
33
|
+
readonly sendEnd?: number;
|
|
34
|
+
readonly pushStart?: number;
|
|
35
|
+
readonly pushEnd?: number;
|
|
36
|
+
readonly receiveHeadersStart?: number;
|
|
37
|
+
readonly receiveHeadersEnd?: number;
|
|
38
|
+
}
|
|
39
|
+
/** One hop a request took before arriving. */
|
|
40
|
+
export interface RedirectHop {
|
|
41
|
+
readonly url: string;
|
|
42
|
+
readonly status: number;
|
|
43
|
+
readonly location?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Where a request got to. */
|
|
46
|
+
export type RequestState = "pending" | "complete" | "failed" | "cancelled";
|
|
47
|
+
/** One request, whole. */
|
|
48
|
+
export interface NetworkRequest {
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly url: string;
|
|
51
|
+
readonly method: string;
|
|
52
|
+
readonly resourceType: string;
|
|
53
|
+
/** The protocol's monotonic clock, good for measuring spans. */
|
|
54
|
+
readonly startedAt: number;
|
|
55
|
+
/**
|
|
56
|
+
* Wall clock seconds since the epoch, good for saying when.
|
|
57
|
+
* Kept apart from startedAt because the monotonic clock has no
|
|
58
|
+
* relationship to any calendar.
|
|
59
|
+
*/
|
|
60
|
+
readonly wallTimeSeconds?: number;
|
|
61
|
+
readonly state: RequestState;
|
|
62
|
+
readonly requestHeaders: Readonly<Record<string, string>>;
|
|
63
|
+
readonly redirects: readonly RedirectHop[];
|
|
64
|
+
readonly postData?: string;
|
|
65
|
+
readonly status?: number;
|
|
66
|
+
readonly statusText?: string;
|
|
67
|
+
readonly mimeType?: string;
|
|
68
|
+
readonly responseHeaders?: Readonly<Record<string, string>>;
|
|
69
|
+
readonly remoteAddress?: string;
|
|
70
|
+
readonly fromCache?: boolean;
|
|
71
|
+
readonly durationMs?: number;
|
|
72
|
+
readonly transferredBytes?: number;
|
|
73
|
+
readonly failure?: string;
|
|
74
|
+
readonly initiator?: string;
|
|
75
|
+
readonly timing?: ResourceTiming;
|
|
76
|
+
}
|
|
77
|
+
/** Network.requestWillBeSent, as the protocol sends it. */
|
|
78
|
+
export interface RequestSent {
|
|
79
|
+
readonly requestId: string;
|
|
80
|
+
readonly timestamp: number;
|
|
81
|
+
readonly wallTime?: number;
|
|
82
|
+
readonly type?: string;
|
|
83
|
+
readonly request: {
|
|
84
|
+
readonly url: string;
|
|
85
|
+
readonly method: string;
|
|
86
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
87
|
+
readonly postData?: string;
|
|
88
|
+
readonly hasPostData?: boolean;
|
|
89
|
+
};
|
|
90
|
+
readonly initiator?: {
|
|
91
|
+
readonly type: string;
|
|
92
|
+
};
|
|
93
|
+
readonly redirectResponse?: {
|
|
94
|
+
readonly url: string;
|
|
95
|
+
readonly status: number;
|
|
96
|
+
readonly statusText?: string;
|
|
97
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Network.responseReceived, as the protocol sends it. */
|
|
101
|
+
export interface ResponseReceived {
|
|
102
|
+
readonly requestId: string;
|
|
103
|
+
readonly timestamp: number;
|
|
104
|
+
readonly type?: string;
|
|
105
|
+
readonly response: {
|
|
106
|
+
readonly url: string;
|
|
107
|
+
readonly status: number;
|
|
108
|
+
readonly statusText?: string;
|
|
109
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
110
|
+
readonly mimeType?: string;
|
|
111
|
+
readonly remoteIPAddress?: string;
|
|
112
|
+
readonly remotePort?: number;
|
|
113
|
+
readonly fromDiskCache?: boolean;
|
|
114
|
+
readonly encodedDataLength?: number;
|
|
115
|
+
readonly protocol?: string;
|
|
116
|
+
readonly timing?: ResourceTiming;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** Network.loadingFinished, as the protocol sends it. */
|
|
120
|
+
export interface LoadingFinished {
|
|
121
|
+
readonly requestId: string;
|
|
122
|
+
readonly timestamp: number;
|
|
123
|
+
readonly encodedDataLength?: number;
|
|
124
|
+
}
|
|
125
|
+
/** Network.loadingFailed, as the protocol sends it. */
|
|
126
|
+
export interface LoadingFailed {
|
|
127
|
+
readonly requestId: string;
|
|
128
|
+
readonly timestamp: number;
|
|
129
|
+
readonly errorText: string;
|
|
130
|
+
readonly canceled?: boolean;
|
|
131
|
+
readonly blockedReason?: string;
|
|
132
|
+
}
|
|
133
|
+
/** Any of the four events, tagged so the fold can tell them apart. */
|
|
134
|
+
export type NetworkEvent = {
|
|
135
|
+
readonly kind: "sent";
|
|
136
|
+
readonly event: RequestSent;
|
|
137
|
+
} | {
|
|
138
|
+
readonly kind: "received";
|
|
139
|
+
readonly event: ResponseReceived;
|
|
140
|
+
} | {
|
|
141
|
+
readonly kind: "finished";
|
|
142
|
+
readonly event: LoadingFinished;
|
|
143
|
+
} | {
|
|
144
|
+
readonly kind: "failed";
|
|
145
|
+
readonly event: LoadingFailed;
|
|
146
|
+
};
|
|
147
|
+
/** A running record of every request, in the order they started. */
|
|
148
|
+
export interface NetworkRecorder {
|
|
149
|
+
apply(event: NetworkEvent): void;
|
|
150
|
+
all(): readonly NetworkRequest[];
|
|
151
|
+
}
|
|
152
|
+
export declare function createNetworkRecorder(): NetworkRecorder;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the page asked the network for, and what it got back.
|
|
3
|
+
*
|
|
4
|
+
* The protocol reports one request as a scatter of events over
|
|
5
|
+
* time: sent, replied to, finished or failed, and sometimes
|
|
6
|
+
* sent again when it redirects. Nothing here judges any of it;
|
|
7
|
+
* this only reassembles the pieces into the record the events
|
|
8
|
+
* were always describing.
|
|
9
|
+
*/
|
|
10
|
+
/** Seconds, as the protocol counts, to milliseconds. */
|
|
11
|
+
const MS_PER_SECOND = 1000;
|
|
12
|
+
export function createNetworkRecorder() {
|
|
13
|
+
// Insertion-ordered, so requests read in the order the page
|
|
14
|
+
// asked for them without a sort that could tie.
|
|
15
|
+
const byId = new Map();
|
|
16
|
+
return {
|
|
17
|
+
apply(entry) {
|
|
18
|
+
if (entry.kind === "sent")
|
|
19
|
+
return applySent(byId, entry.event);
|
|
20
|
+
const existing = byId.get(entry.event.requestId);
|
|
21
|
+
// A reply to a request that started before capture was
|
|
22
|
+
// on says nothing on its own, and inventing a record for
|
|
23
|
+
// it would report a request with no url or method.
|
|
24
|
+
if (!existing)
|
|
25
|
+
return;
|
|
26
|
+
byId.set(entry.event.requestId, entry.kind === "received"
|
|
27
|
+
? withResponse(existing, entry.event)
|
|
28
|
+
: entry.kind === "finished"
|
|
29
|
+
? withCompletion(existing, entry.event)
|
|
30
|
+
: withFailure(existing, entry.event));
|
|
31
|
+
},
|
|
32
|
+
all() {
|
|
33
|
+
return [...byId.values()];
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A request starting, or the next hop of one that redirected.
|
|
39
|
+
*
|
|
40
|
+
* A redirect reuses the request id and arrives as another sent
|
|
41
|
+
* event carrying the reply that redirected it. Overwriting
|
|
42
|
+
* would lose the hop, which is often the thing being
|
|
43
|
+
* investigated.
|
|
44
|
+
*/
|
|
45
|
+
function applySent(byId, event) {
|
|
46
|
+
const previous = byId.get(event.requestId);
|
|
47
|
+
const hop = event.redirectResponse;
|
|
48
|
+
const redirects = previous && hop
|
|
49
|
+
? [
|
|
50
|
+
...previous.redirects,
|
|
51
|
+
{
|
|
52
|
+
url: hop.url,
|
|
53
|
+
status: hop.status,
|
|
54
|
+
...(hop.headers?.location === undefined
|
|
55
|
+
? {}
|
|
56
|
+
: { location: hop.headers.location }),
|
|
57
|
+
},
|
|
58
|
+
]
|
|
59
|
+
: (previous?.redirects ?? []);
|
|
60
|
+
byId.set(event.requestId, {
|
|
61
|
+
id: event.requestId,
|
|
62
|
+
url: event.request.url,
|
|
63
|
+
method: event.request.method,
|
|
64
|
+
resourceType: event.type ?? "Other",
|
|
65
|
+
startedAt: previous?.startedAt ?? event.timestamp,
|
|
66
|
+
...((previous?.wallTimeSeconds ?? event.wallTime) === undefined
|
|
67
|
+
? {}
|
|
68
|
+
: { wallTimeSeconds: previous?.wallTimeSeconds ?? event.wallTime }),
|
|
69
|
+
state: "pending",
|
|
70
|
+
requestHeaders: event.request.headers,
|
|
71
|
+
redirects,
|
|
72
|
+
...(event.request.postData === undefined
|
|
73
|
+
? {}
|
|
74
|
+
: { postData: event.request.postData }),
|
|
75
|
+
...(event.initiator?.type === undefined
|
|
76
|
+
? {}
|
|
77
|
+
: { initiator: event.initiator.type }),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** The reply, folded onto the request that asked for it. */
|
|
81
|
+
function withResponse(request, event) {
|
|
82
|
+
const response = event.response;
|
|
83
|
+
return {
|
|
84
|
+
...request,
|
|
85
|
+
status: response.status,
|
|
86
|
+
...(response.statusText === undefined
|
|
87
|
+
? {}
|
|
88
|
+
: { statusText: response.statusText }),
|
|
89
|
+
...(response.mimeType === undefined ? {} : { mimeType: response.mimeType }),
|
|
90
|
+
responseHeaders: response.headers,
|
|
91
|
+
...(response.remoteIPAddress === undefined
|
|
92
|
+
? {}
|
|
93
|
+
: {
|
|
94
|
+
remoteAddress: response.remotePort === undefined
|
|
95
|
+
? response.remoteIPAddress
|
|
96
|
+
: `${response.remoteIPAddress}:${response.remotePort}`,
|
|
97
|
+
}),
|
|
98
|
+
...(response.fromDiskCache === undefined
|
|
99
|
+
? {}
|
|
100
|
+
: { fromCache: response.fromDiskCache }),
|
|
101
|
+
...(response.timing === undefined ? {} : { timing: response.timing }),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** The request finished, however its status reads. */
|
|
105
|
+
function withCompletion(request, event) {
|
|
106
|
+
return {
|
|
107
|
+
...request,
|
|
108
|
+
// A 404 is a completed transaction. Whether the answer was
|
|
109
|
+
// the wanted one is the reader's judgment, not the
|
|
110
|
+
// protocol's, and not this module's either.
|
|
111
|
+
state: "complete",
|
|
112
|
+
durationMs: Math.round((event.timestamp - request.startedAt) * MS_PER_SECOND),
|
|
113
|
+
...(event.encodedDataLength === undefined
|
|
114
|
+
? {}
|
|
115
|
+
: { transferredBytes: event.encodedDataLength }),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** The request did not finish, and why. */
|
|
119
|
+
function withFailure(request, event) {
|
|
120
|
+
return {
|
|
121
|
+
...request,
|
|
122
|
+
// A cancellation is usually the page changing its mind,
|
|
123
|
+
// which is not the same news as a request that broke.
|
|
124
|
+
state: event.canceled ? "cancelled" : "failed",
|
|
125
|
+
failure: event.blockedReason
|
|
126
|
+
? `${event.errorText} (blocked: ${event.blockedReason})`
|
|
127
|
+
: event.errorText,
|
|
128
|
+
durationMs: Math.round((event.timestamp - request.startedAt) * MS_PER_SECOND),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a run of requests back.
|
|
3
|
+
*
|
|
4
|
+
* Presentation only. The one editorial choice is ordering the
|
|
5
|
+
* summary by what usually matters: a list of forty successful
|
|
6
|
+
* requests buries the one that failed, so the failures are
|
|
7
|
+
* counted before the list rather than found in it.
|
|
8
|
+
*/
|
|
9
|
+
import type { NetworkRequest } from "./network.js";
|
|
10
|
+
/**
|
|
11
|
+
* What the caller asked for, so an empty answer can say which
|
|
12
|
+
* kind of empty it is.
|
|
13
|
+
*/
|
|
14
|
+
export interface RequestQuery {
|
|
15
|
+
/** The filter applied, when one was. */
|
|
16
|
+
readonly filter?: string;
|
|
17
|
+
/** How many were recorded before filtering. */
|
|
18
|
+
readonly recorded?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function renderRequests(requests: readonly NetworkRequest[], query?: RequestQuery): string;
|
|
21
|
+
/** Whether the listing had to take the middle out of any url. */
|
|
22
|
+
export declare function anyUrlShortened(requests: readonly NetworkRequest[]): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The status, or the reason there is not one.
|
|
25
|
+
*
|
|
26
|
+
* A cancelled request often carries no failure text, and a
|
|
27
|
+
* request still in flight has no status, so every reader of
|
|
28
|
+
* either field needs this rule; printing the raw field puts the
|
|
29
|
+
* word undefined in front of someone debugging a network fault.
|
|
30
|
+
*/
|
|
31
|
+
export declare function requestStatus(request: NetworkRequest): string;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a run of requests back.
|
|
3
|
+
*
|
|
4
|
+
* Presentation only. The one editorial choice is ordering the
|
|
5
|
+
* summary by what usually matters: a list of forty successful
|
|
6
|
+
* requests buries the one that failed, so the failures are
|
|
7
|
+
* counted before the list rather than found in it.
|
|
8
|
+
*/
|
|
9
|
+
import { count } from "../../ui/count.js";
|
|
10
|
+
/** Where a status stops being a success. */
|
|
11
|
+
const FIRST_ERROR_STATUS = 400;
|
|
12
|
+
/** Bytes in a kilobyte, as a browser's network panel counts them. */
|
|
13
|
+
const BYTES_PER_KB = 1024;
|
|
14
|
+
/** Width of the method column, the longest common verb plus room. */
|
|
15
|
+
const METHOD_WIDTH = 6;
|
|
16
|
+
/** Width of the status column. */
|
|
17
|
+
const STATUS_WIDTH = 8;
|
|
18
|
+
export function renderRequests(requests, query = {}) {
|
|
19
|
+
if (requests.length === 0) {
|
|
20
|
+
// An empty filtered list is not a silent page, and saying so
|
|
21
|
+
// was actively misleading: asked for failures on a page that
|
|
22
|
+
// had made eighty requests and had none, the answer was "the
|
|
23
|
+
// page has not requested anything", which reads as the
|
|
24
|
+
// telemetry being broken rather than as good news.
|
|
25
|
+
if (query.filter !== undefined && (query.recorded ?? 0) > 0) {
|
|
26
|
+
return (`Nothing matched '${query.filter}', out of ` +
|
|
27
|
+
`${query.recorded} requests recorded.`);
|
|
28
|
+
}
|
|
29
|
+
return "The page has not requested anything.";
|
|
30
|
+
}
|
|
31
|
+
const lines = [summarize(requests), ""];
|
|
32
|
+
for (const [index, request] of requests.entries()) {
|
|
33
|
+
// An ordinal rather than the protocol's hex id: the reader
|
|
34
|
+
// has to be able to type it back to ask for a body.
|
|
35
|
+
lines.push(`${`#${index + 1}`.padStart(4)} ` +
|
|
36
|
+
`${request.method.padEnd(METHOD_WIDTH)}` +
|
|
37
|
+
`${requestStatus(request).padEnd(STATUS_WIDTH)}` +
|
|
38
|
+
`${timingOf(request).padStart(7)} ${scannable(request.url)}`);
|
|
39
|
+
for (const hop of request.redirects) {
|
|
40
|
+
lines.push(` ${hop.status} from ${scannable(hop.url)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return lines.join("\n");
|
|
44
|
+
}
|
|
45
|
+
/** Past this, a url is a payload rather than a label. */
|
|
46
|
+
const MAX_URL = 160;
|
|
47
|
+
/** How much of an over-long url still identifies it. */
|
|
48
|
+
const URL_TAIL = 24;
|
|
49
|
+
/**
|
|
50
|
+
* A url short enough to scan, with the middle taken out.
|
|
51
|
+
*
|
|
52
|
+
* One bundler request on a real page was twelve hundred
|
|
53
|
+
* characters, nearly all of it a module list. Three of those
|
|
54
|
+
* filled an eighth of the answer's budget each, and the budget
|
|
55
|
+
* pays for them by dropping whole requests, so a reader lost
|
|
56
|
+
* entire rows to preserve query strings nobody reads in a
|
|
57
|
+
* listing. The stored records keep every url whole, which is
|
|
58
|
+
* where a caller who wants the module list should be reading it.
|
|
59
|
+
*
|
|
60
|
+
* The front is kept because that is the origin and path, and the
|
|
61
|
+
* tail because that is where a cache key or a version usually
|
|
62
|
+
* sits, and those are the two ends that tell requests apart.
|
|
63
|
+
*/
|
|
64
|
+
function scannable(url) {
|
|
65
|
+
if (url.length <= MAX_URL)
|
|
66
|
+
return url;
|
|
67
|
+
const cut = url.length - (MAX_URL - URL_TAIL) - URL_TAIL;
|
|
68
|
+
return (`${url.slice(0, MAX_URL - URL_TAIL)}` +
|
|
69
|
+
`[...${cut} chars]${url.slice(-URL_TAIL)}`);
|
|
70
|
+
}
|
|
71
|
+
/** Whether the listing had to take the middle out of any url. */
|
|
72
|
+
export function anyUrlShortened(requests) {
|
|
73
|
+
return requests.some((request) => request.url.length > MAX_URL ||
|
|
74
|
+
request.redirects.some((hop) => hop.url.length > MAX_URL));
|
|
75
|
+
}
|
|
76
|
+
/** What happened, before the detail of what each one was. */
|
|
77
|
+
function summarize(requests) {
|
|
78
|
+
const failed = requests.filter((request) => request.state === "failed").length;
|
|
79
|
+
const cancelled = requests.filter((request) => request.state === "cancelled").length;
|
|
80
|
+
const pending = requests.filter((request) => request.state === "pending").length;
|
|
81
|
+
const errored = requests.filter((request) => request.status !== undefined && request.status >= FIRST_ERROR_STATUS).length;
|
|
82
|
+
const bytes = requests.reduce((total, request) => total + (request.transferredBytes ?? 0), 0);
|
|
83
|
+
const notes = [
|
|
84
|
+
count(requests.length, "request"),
|
|
85
|
+
`${(bytes / BYTES_PER_KB).toFixed(1)} KB transferred`,
|
|
86
|
+
];
|
|
87
|
+
if (failed > 0)
|
|
88
|
+
notes.push(`${failed} failed`);
|
|
89
|
+
if (cancelled > 0)
|
|
90
|
+
notes.push(`${cancelled} cancelled`);
|
|
91
|
+
if (errored > 0) {
|
|
92
|
+
notes.push(`${errored} error status${errored === 1 ? "" : "es"}`);
|
|
93
|
+
}
|
|
94
|
+
if (pending > 0)
|
|
95
|
+
notes.push(`${pending} still in flight`);
|
|
96
|
+
return `${notes.join(", ")}.`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The status, or the reason there is not one.
|
|
100
|
+
*
|
|
101
|
+
* A cancelled request often carries no failure text, and a
|
|
102
|
+
* request still in flight has no status, so every reader of
|
|
103
|
+
* either field needs this rule; printing the raw field puts the
|
|
104
|
+
* word undefined in front of someone debugging a network fault.
|
|
105
|
+
*/
|
|
106
|
+
export function requestStatus(request) {
|
|
107
|
+
if (request.state === "failed" || request.state === "cancelled") {
|
|
108
|
+
return request.failure ?? request.state;
|
|
109
|
+
}
|
|
110
|
+
if (request.status === undefined)
|
|
111
|
+
return "pending";
|
|
112
|
+
return String(request.status);
|
|
113
|
+
}
|
|
114
|
+
/** How long it took, and whether the network was involved at all. */
|
|
115
|
+
function timingOf(request) {
|
|
116
|
+
if (request.fromCache)
|
|
117
|
+
return "cached";
|
|
118
|
+
return request.durationMs === undefined ? "" : `${request.durationMs}ms`;
|
|
119
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a page said over its websockets.
|
|
3
|
+
*
|
|
4
|
+
* A request is a question with an answer attached, so the request
|
|
5
|
+
* record can hold both. A socket is a conversation that outlives
|
|
6
|
+
* any one message, and the whole point of a feature built on one
|
|
7
|
+
* is that messages arrive when nobody asked. None of that fits
|
|
8
|
+
* the request shape, so until this existed a live feature was
|
|
9
|
+
* invisible: the page did nothing observable and worked, or did
|
|
10
|
+
* nothing observable and did not.
|
|
11
|
+
*/
|
|
12
|
+
/** One thing that happened to a websocket. */
|
|
13
|
+
export type SocketEvent = {
|
|
14
|
+
kind: "opened";
|
|
15
|
+
id: string;
|
|
16
|
+
at: number;
|
|
17
|
+
url: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "sent";
|
|
20
|
+
id: string;
|
|
21
|
+
at: number;
|
|
22
|
+
payload: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "received";
|
|
25
|
+
id: string;
|
|
26
|
+
at: number;
|
|
27
|
+
payload: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "closed";
|
|
30
|
+
id: string;
|
|
31
|
+
at: number;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "failed";
|
|
34
|
+
id: string;
|
|
35
|
+
at: number;
|
|
36
|
+
error: string;
|
|
37
|
+
};
|
|
38
|
+
/** One frame in a conversation. */
|
|
39
|
+
export interface SocketFrame {
|
|
40
|
+
readonly direction: "sent" | "received";
|
|
41
|
+
readonly at: number;
|
|
42
|
+
readonly payload: string;
|
|
43
|
+
}
|
|
44
|
+
/** One socket and everything said over it. */
|
|
45
|
+
export interface SocketRecord {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
readonly url: string;
|
|
48
|
+
readonly openedAt?: number;
|
|
49
|
+
readonly closedAt?: number;
|
|
50
|
+
readonly error?: string;
|
|
51
|
+
readonly frames: readonly SocketFrame[];
|
|
52
|
+
}
|
|
53
|
+
/** Gather loose events into one record per socket, in order. */
|
|
54
|
+
export declare function foldSockets(events: readonly SocketEvent[]): readonly SocketRecord[];
|
|
55
|
+
/** Say what was said over each socket. */
|
|
56
|
+
export declare function renderSockets(sockets: readonly SocketRecord[]): string;
|