@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,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files the page handed back.
|
|
3
|
+
*
|
|
4
|
+
* A download is the one result that never appears in the page,
|
|
5
|
+
* so without capturing it there is no way to check that an
|
|
6
|
+
* export button produced the right csv, or produced anything
|
|
7
|
+
* at all.
|
|
8
|
+
*/
|
|
9
|
+
/** Where a download got to. */
|
|
10
|
+
export type DownloadState = "inProgress" | "completed" | "canceled";
|
|
11
|
+
/** One file, from the moment the browser knew about it. */
|
|
12
|
+
export interface DownloadRecord {
|
|
13
|
+
readonly guid: string;
|
|
14
|
+
readonly url: string;
|
|
15
|
+
readonly suggestedFilename: string;
|
|
16
|
+
readonly state: DownloadState;
|
|
17
|
+
readonly totalBytes?: number;
|
|
18
|
+
readonly receivedBytes?: number;
|
|
19
|
+
readonly filePath?: string;
|
|
20
|
+
}
|
|
21
|
+
/** The protocol events this fold consumes. */
|
|
22
|
+
export type DownloadInput = {
|
|
23
|
+
readonly kind: "begin";
|
|
24
|
+
readonly guid: string;
|
|
25
|
+
readonly url: string;
|
|
26
|
+
readonly suggestedFilename: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "progress";
|
|
29
|
+
readonly guid: string;
|
|
30
|
+
readonly state: DownloadState;
|
|
31
|
+
readonly totalBytes?: number;
|
|
32
|
+
readonly receivedBytes?: number;
|
|
33
|
+
readonly filePath?: string;
|
|
34
|
+
};
|
|
35
|
+
/** A running record of every file the page produced. */
|
|
36
|
+
export interface DownloadRecorder {
|
|
37
|
+
apply(input: DownloadInput): void;
|
|
38
|
+
all(): readonly DownloadRecord[];
|
|
39
|
+
}
|
|
40
|
+
export declare function createDownloadRecorder(): DownloadRecorder;
|
|
41
|
+
/** What the page has handed back. */
|
|
42
|
+
export declare function renderDownloads(downloads: readonly DownloadRecord[]): string;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files the page handed back.
|
|
3
|
+
*
|
|
4
|
+
* A download is the one result that never appears in the page,
|
|
5
|
+
* so without capturing it there is no way to check that an
|
|
6
|
+
* export button produced the right csv, or produced anything
|
|
7
|
+
* at all.
|
|
8
|
+
*/
|
|
9
|
+
export function createDownloadRecorder() {
|
|
10
|
+
const byGuid = new Map();
|
|
11
|
+
return {
|
|
12
|
+
apply(input) {
|
|
13
|
+
if (input.kind === "begin") {
|
|
14
|
+
byGuid.set(input.guid, {
|
|
15
|
+
guid: input.guid,
|
|
16
|
+
url: input.url,
|
|
17
|
+
suggestedFilename: input.suggestedFilename,
|
|
18
|
+
state: "inProgress",
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const existing = byGuid.get(input.guid);
|
|
23
|
+
// Progress for a download that began before capture was on
|
|
24
|
+
// has no name or source, and a record without those says
|
|
25
|
+
// nothing worth saying.
|
|
26
|
+
if (!existing)
|
|
27
|
+
return;
|
|
28
|
+
byGuid.set(input.guid, {
|
|
29
|
+
...existing,
|
|
30
|
+
state: input.state,
|
|
31
|
+
...(input.totalBytes === undefined
|
|
32
|
+
? {}
|
|
33
|
+
: { totalBytes: input.totalBytes }),
|
|
34
|
+
// A cancelled download reports zero received, which would
|
|
35
|
+
// otherwise overwrite the progress it really made.
|
|
36
|
+
...(input.receivedBytes === undefined || input.state === "canceled"
|
|
37
|
+
? {}
|
|
38
|
+
: { receivedBytes: input.receivedBytes }),
|
|
39
|
+
...(input.filePath === undefined ? {} : { filePath: input.filePath }),
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
all() {
|
|
43
|
+
return [...byGuid.values()];
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** What the page has handed back. */
|
|
48
|
+
export function renderDownloads(downloads) {
|
|
49
|
+
if (downloads.length === 0)
|
|
50
|
+
return "The page has not downloaded anything.";
|
|
51
|
+
return downloads
|
|
52
|
+
.map((download) => {
|
|
53
|
+
const size = download.totalBytes === undefined
|
|
54
|
+
? ""
|
|
55
|
+
: ` (${download.totalBytes} bytes)`;
|
|
56
|
+
if (download.state === "completed") {
|
|
57
|
+
return `${download.suggestedFilename}${size}\n ${download.filePath ?? "written, but the path was not reported"}`;
|
|
58
|
+
}
|
|
59
|
+
if (download.state === "canceled") {
|
|
60
|
+
return `${download.suggestedFilename}: cancelled before it finished`;
|
|
61
|
+
}
|
|
62
|
+
return `${download.suggestedFilename}: still arriving${size}`;
|
|
63
|
+
})
|
|
64
|
+
.join("\n");
|
|
65
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Saying what the network said, in the words a person can act on.
|
|
3
|
+
*
|
|
4
|
+
* A navigation that never arrives used to throw the driver's own
|
|
5
|
+
* error, wrapper and stack and all, out through an API whose
|
|
6
|
+
* documentation promised the opposite. The useful part of
|
|
7
|
+
* "net::ERR_INTERNET_DISCONNECTED at http://example.test/, waiting
|
|
8
|
+
* until networkidle2" is the first token, and the rest is noise
|
|
9
|
+
* that pushes it off the line.
|
|
10
|
+
*
|
|
11
|
+
* The message is the browser's; the tidying is ours, and it is
|
|
12
|
+
* only tidying. Nothing here decides whether a failure happened
|
|
13
|
+
* or invents a reason for one.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Whether a failure means the tab died under the operation.
|
|
17
|
+
*
|
|
18
|
+
* Chrome reports the death to whoever was driving the tab before
|
|
19
|
+
* it announces the crash that caused it, so a caller that reads
|
|
20
|
+
* only "is a recovery under way" concludes no and hands its next
|
|
21
|
+
* call to the corpse. Recognising the failure is what lets the
|
|
22
|
+
* call wait for the replacement instead of being lost.
|
|
23
|
+
*/
|
|
24
|
+
export declare function diedWithTheTab(failure: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* The one line worth showing for a thrown navigation failure.
|
|
27
|
+
*
|
|
28
|
+
* Chrome's error code wins when there is one, since it is the
|
|
29
|
+
* thing worth searching for and the thing a reader recognises.
|
|
30
|
+
*/
|
|
31
|
+
export declare function failureText(error: unknown): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Saying what the network said, in the words a person can act on.
|
|
3
|
+
*
|
|
4
|
+
* A navigation that never arrives used to throw the driver's own
|
|
5
|
+
* error, wrapper and stack and all, out through an API whose
|
|
6
|
+
* documentation promised the opposite. The useful part of
|
|
7
|
+
* "net::ERR_INTERNET_DISCONNECTED at http://example.test/, waiting
|
|
8
|
+
* until networkidle2" is the first token, and the rest is noise
|
|
9
|
+
* that pushes it off the line.
|
|
10
|
+
*
|
|
11
|
+
* The message is the browser's; the tidying is ours, and it is
|
|
12
|
+
* only tidying. Nothing here decides whether a failure happened
|
|
13
|
+
* or invents a reason for one.
|
|
14
|
+
*/
|
|
15
|
+
/** Chrome's own error codes, which read well enough as they are. */
|
|
16
|
+
const CHROME_CODE = /\b(net::[A-Z_]+)\b/;
|
|
17
|
+
/** What the driver adds around the message, and we take off. */
|
|
18
|
+
const DRIVER_NOISE = [
|
|
19
|
+
/^Error:\s*/i,
|
|
20
|
+
/^Navigation failed because\s*/i,
|
|
21
|
+
/\s+at\s+https?:\/\/\S+/,
|
|
22
|
+
/,?\s*waiting until\s+\S+/i,
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* What the driver says when the thing it was driving died.
|
|
26
|
+
*
|
|
27
|
+
* These are about the tab going away underneath a call, which is
|
|
28
|
+
* a different event from the network refusing to answer. A
|
|
29
|
+
* navigation that provokes a crash is aborted rather than
|
|
30
|
+
* detached, and it must not match: retrying it would kill the
|
|
31
|
+
* replacement tab as reliably as it killed the first one.
|
|
32
|
+
*/
|
|
33
|
+
const DIED_WITH_THE_TAB = [
|
|
34
|
+
/frame was detached/i,
|
|
35
|
+
/session closed/i,
|
|
36
|
+
/target closed/i,
|
|
37
|
+
/target crashed/i,
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Whether a failure means the tab died under the operation.
|
|
41
|
+
*
|
|
42
|
+
* Chrome reports the death to whoever was driving the tab before
|
|
43
|
+
* it announces the crash that caused it, so a caller that reads
|
|
44
|
+
* only "is a recovery under way" concludes no and hands its next
|
|
45
|
+
* call to the corpse. Recognising the failure is what lets the
|
|
46
|
+
* call wait for the replacement instead of being lost.
|
|
47
|
+
*/
|
|
48
|
+
export function diedWithTheTab(failure) {
|
|
49
|
+
return DIED_WITH_THE_TAB.some((pattern) => pattern.test(failure));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The one line worth showing for a thrown navigation failure.
|
|
53
|
+
*
|
|
54
|
+
* Chrome's error code wins when there is one, since it is the
|
|
55
|
+
* thing worth searching for and the thing a reader recognises.
|
|
56
|
+
*/
|
|
57
|
+
export function failureText(error) {
|
|
58
|
+
const raw = error instanceof Error
|
|
59
|
+
? error.message
|
|
60
|
+
: typeof error === "string"
|
|
61
|
+
? error
|
|
62
|
+
: String(error);
|
|
63
|
+
const code = CHROME_CODE.exec(raw);
|
|
64
|
+
if (code?.[1])
|
|
65
|
+
return code[1];
|
|
66
|
+
const tidied = DRIVER_NOISE.reduce((said, noise) => said.replace(noise, ""), raw)
|
|
67
|
+
.split("\n")[0]
|
|
68
|
+
?.trim();
|
|
69
|
+
// An error with nothing to say still has to say something, or
|
|
70
|
+
// the caller reports a failure with a blank reason.
|
|
71
|
+
return tidied && tidied.length > 0 ? tidied : "the navigation failed";
|
|
72
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recorded requests as an HTTP Archive.
|
|
3
|
+
*
|
|
4
|
+
* HAR is what every other tool reads, so exporting it is how a
|
|
5
|
+
* capture leaves here without being trapped in our own shape.
|
|
6
|
+
* The format has invariants of its own, and they are the reason
|
|
7
|
+
* this is a module rather than a JSON.stringify: entry.time has
|
|
8
|
+
* to equal the sum of the timings that are not -1, send, wait
|
|
9
|
+
* and receive have to be present and non-negative, and any
|
|
10
|
+
* field the spec does not define has to start with an
|
|
11
|
+
* underscore or a reader is entitled to reject the file.
|
|
12
|
+
*
|
|
13
|
+
* Where the protocol gives no answer, this says so with -1
|
|
14
|
+
* rather than guessing, and puts anything extra we do know in
|
|
15
|
+
* an underscore field instead of overstating a spec one.
|
|
16
|
+
*/
|
|
17
|
+
import type { NetworkRequest } from "./network.js";
|
|
18
|
+
/** A name and value, as HAR writes headers and query parameters. */
|
|
19
|
+
export interface HarPair {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
readonly value: string;
|
|
22
|
+
}
|
|
23
|
+
/** HAR's per-request timing breakdown, in milliseconds. */
|
|
24
|
+
export interface HarTimings {
|
|
25
|
+
readonly blocked: number;
|
|
26
|
+
readonly dns: number;
|
|
27
|
+
readonly connect: number;
|
|
28
|
+
readonly ssl: number;
|
|
29
|
+
readonly send: number;
|
|
30
|
+
readonly wait: number;
|
|
31
|
+
readonly receive: number;
|
|
32
|
+
}
|
|
33
|
+
/** One archived request and its reply. */
|
|
34
|
+
export interface HarEntry {
|
|
35
|
+
readonly startedDateTime: string;
|
|
36
|
+
readonly time: number;
|
|
37
|
+
readonly request: {
|
|
38
|
+
readonly method: string;
|
|
39
|
+
readonly url: string;
|
|
40
|
+
readonly httpVersion: string;
|
|
41
|
+
readonly cookies: readonly HarPair[];
|
|
42
|
+
readonly headers: readonly HarPair[];
|
|
43
|
+
readonly queryString: readonly HarPair[];
|
|
44
|
+
readonly headersSize: number;
|
|
45
|
+
readonly bodySize: number;
|
|
46
|
+
readonly postData?: {
|
|
47
|
+
readonly mimeType: string;
|
|
48
|
+
readonly text: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
readonly response: {
|
|
52
|
+
readonly status: number;
|
|
53
|
+
readonly statusText: string;
|
|
54
|
+
readonly httpVersion: string;
|
|
55
|
+
readonly cookies: readonly HarPair[];
|
|
56
|
+
readonly headers: readonly HarPair[];
|
|
57
|
+
readonly content: {
|
|
58
|
+
readonly size: number;
|
|
59
|
+
readonly mimeType: string;
|
|
60
|
+
readonly text?: string;
|
|
61
|
+
readonly encoding?: string;
|
|
62
|
+
};
|
|
63
|
+
readonly redirectURL: string;
|
|
64
|
+
readonly headersSize: number;
|
|
65
|
+
readonly bodySize: number;
|
|
66
|
+
};
|
|
67
|
+
readonly cache: Record<string, never>;
|
|
68
|
+
readonly timings: HarTimings;
|
|
69
|
+
readonly serverIPAddress?: string;
|
|
70
|
+
readonly connection?: string;
|
|
71
|
+
/** What the request was for, which HAR has no field for. */
|
|
72
|
+
readonly _resourceType?: string;
|
|
73
|
+
/** Why it failed, which HAR has no field for either. */
|
|
74
|
+
readonly _failure?: string;
|
|
75
|
+
/** Bytes over the wire including headers, which bodySize is not. */
|
|
76
|
+
readonly _transferredBytes?: number;
|
|
77
|
+
}
|
|
78
|
+
/** The archive itself. */
|
|
79
|
+
export interface Har {
|
|
80
|
+
readonly log: {
|
|
81
|
+
readonly version: "1.2";
|
|
82
|
+
readonly creator: {
|
|
83
|
+
readonly name: string;
|
|
84
|
+
readonly version: string;
|
|
85
|
+
};
|
|
86
|
+
readonly pages: readonly unknown[];
|
|
87
|
+
readonly entries: readonly HarEntry[];
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** A body already fetched for a request, keyed by request id. */
|
|
91
|
+
export interface HarOptions {
|
|
92
|
+
readonly bodies?: ReadonlyMap<string, {
|
|
93
|
+
body: string;
|
|
94
|
+
base64Encoded: boolean;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
export declare function toHar(requests: readonly NetworkRequest[], options?: HarOptions): Har;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recorded requests as an HTTP Archive.
|
|
3
|
+
*
|
|
4
|
+
* HAR is what every other tool reads, so exporting it is how a
|
|
5
|
+
* capture leaves here without being trapped in our own shape.
|
|
6
|
+
* The format has invariants of its own, and they are the reason
|
|
7
|
+
* this is a module rather than a JSON.stringify: entry.time has
|
|
8
|
+
* to equal the sum of the timings that are not -1, send, wait
|
|
9
|
+
* and receive have to be present and non-negative, and any
|
|
10
|
+
* field the spec does not define has to start with an
|
|
11
|
+
* underscore or a reader is entitled to reject the file.
|
|
12
|
+
*
|
|
13
|
+
* Where the protocol gives no answer, this says so with -1
|
|
14
|
+
* rather than guessing, and puts anything extra we do know in
|
|
15
|
+
* an underscore field instead of overstating a spec one.
|
|
16
|
+
*/
|
|
17
|
+
/** What HAR uses for a measurement that does not apply. */
|
|
18
|
+
const NOT_APPLICABLE = -1;
|
|
19
|
+
/** Milliseconds in a second, for the protocol's seconds-based clocks. */
|
|
20
|
+
const MS_PER_SECOND = 1000;
|
|
21
|
+
export function toHar(requests, options = {}) {
|
|
22
|
+
return {
|
|
23
|
+
log: {
|
|
24
|
+
version: "1.2",
|
|
25
|
+
creator: { name: "pi browser-integration", version: "1" },
|
|
26
|
+
pages: [],
|
|
27
|
+
entries: requests.map((request) => entryOf(request, options)),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** One request, in the shape a HAR reader expects. */
|
|
32
|
+
function entryOf(request, options) {
|
|
33
|
+
const timings = timingsOf(request);
|
|
34
|
+
const body = options.bodies?.get(request.id);
|
|
35
|
+
const contentType = headerOf(request.responseHeaders, "content-type");
|
|
36
|
+
const location = headerOf(request.responseHeaders, "location");
|
|
37
|
+
return {
|
|
38
|
+
startedDateTime: startedAt(request),
|
|
39
|
+
// The spec requires this to be the sum, so it is computed
|
|
40
|
+
// from the parts rather than from the measured duration,
|
|
41
|
+
// which would usually differ by a rounding.
|
|
42
|
+
time: total(timings),
|
|
43
|
+
request: {
|
|
44
|
+
method: request.method,
|
|
45
|
+
url: request.url,
|
|
46
|
+
httpVersion: "",
|
|
47
|
+
cookies: [],
|
|
48
|
+
headers: pairsOf(request.requestHeaders),
|
|
49
|
+
queryString: queryOf(request.url),
|
|
50
|
+
headersSize: NOT_APPLICABLE,
|
|
51
|
+
bodySize: request.postData ? request.postData.length : NOT_APPLICABLE,
|
|
52
|
+
...(request.postData === undefined
|
|
53
|
+
? {}
|
|
54
|
+
: {
|
|
55
|
+
postData: {
|
|
56
|
+
mimeType: headerOf(request.requestHeaders, "content-type") ?? "",
|
|
57
|
+
text: request.postData,
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
},
|
|
61
|
+
response: {
|
|
62
|
+
status: request.status ?? 0,
|
|
63
|
+
statusText: request.statusText ?? "",
|
|
64
|
+
httpVersion: "",
|
|
65
|
+
cookies: [],
|
|
66
|
+
headers: pairsOf(request.responseHeaders),
|
|
67
|
+
content: {
|
|
68
|
+
// Bytes, not characters. This was the length of whatever
|
|
69
|
+
// string we were holding, which for a base64 body is a
|
|
70
|
+
// third larger than the content and for text is UTF-16
|
|
71
|
+
// code units. A body we never fetched now says -1, the
|
|
72
|
+
// same way bodySize does four lines below, rather than
|
|
73
|
+
// claiming the response was empty.
|
|
74
|
+
size: body === undefined ? NOT_APPLICABLE : sizeOf(body),
|
|
75
|
+
mimeType: request.mimeType ?? contentType ?? "",
|
|
76
|
+
...(body === undefined ? {} : { text: body.body }),
|
|
77
|
+
...(body?.base64Encoded ? { encoding: "base64" } : {}),
|
|
78
|
+
},
|
|
79
|
+
// Empty rather than absent: the field is required, and a
|
|
80
|
+
// reader distinguishes "no redirect" from "not recorded".
|
|
81
|
+
redirectURL: location ?? "",
|
|
82
|
+
headersSize: NOT_APPLICABLE,
|
|
83
|
+
// The protocol counts bytes over the wire, headers
|
|
84
|
+
// included, which is not what bodySize means. Saying -1 is
|
|
85
|
+
// honest; the number we do have goes in its own field.
|
|
86
|
+
bodySize: NOT_APPLICABLE,
|
|
87
|
+
},
|
|
88
|
+
cache: {},
|
|
89
|
+
timings,
|
|
90
|
+
...(request.remoteAddress === undefined
|
|
91
|
+
? {}
|
|
92
|
+
: { serverIPAddress: request.remoteAddress }),
|
|
93
|
+
_resourceType: request.resourceType,
|
|
94
|
+
...(request.failure === undefined ? {} : { _failure: request.failure }),
|
|
95
|
+
...(request.transferredBytes === undefined
|
|
96
|
+
? {}
|
|
97
|
+
: { _transferredBytes: request.transferredBytes }),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* When the request started, on a clock that means something.
|
|
102
|
+
*
|
|
103
|
+
* The protocol's own timestamp is monotonic and has no relation
|
|
104
|
+
* to any calendar, so the wall clock is the only one that can
|
|
105
|
+
* answer this. Without it there is nothing honest to say, and
|
|
106
|
+
* the epoch is the conventional placeholder.
|
|
107
|
+
*/
|
|
108
|
+
function startedAt(request) {
|
|
109
|
+
const seconds = request.wallTimeSeconds;
|
|
110
|
+
return seconds === undefined
|
|
111
|
+
? new Date(0).toISOString()
|
|
112
|
+
: new Date(seconds * MS_PER_SECOND).toISOString();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The phases of the request, in HAR's vocabulary.
|
|
116
|
+
*
|
|
117
|
+
* The protocol reports offsets in milliseconds from the moment
|
|
118
|
+
* the request began, with -1 for a phase that did not happen.
|
|
119
|
+
* HAR wants durations instead, and treats -1 the same way, so
|
|
120
|
+
* the translation is subtraction where both ends are real and
|
|
121
|
+
* -1 wherever either is not.
|
|
122
|
+
*/
|
|
123
|
+
function timingsOf(request) {
|
|
124
|
+
const timing = request.timing;
|
|
125
|
+
if (!timing) {
|
|
126
|
+
// Nothing was measured. Rather than invent a breakdown, put
|
|
127
|
+
// the whole measured duration in receive, which keeps the
|
|
128
|
+
// sum invariant true and the total honest.
|
|
129
|
+
return {
|
|
130
|
+
blocked: NOT_APPLICABLE,
|
|
131
|
+
dns: NOT_APPLICABLE,
|
|
132
|
+
connect: NOT_APPLICABLE,
|
|
133
|
+
ssl: NOT_APPLICABLE,
|
|
134
|
+
send: 0,
|
|
135
|
+
wait: 0,
|
|
136
|
+
receive: Math.max(0, request.durationMs ?? 0),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const dns = span(timing.dnsStart, timing.dnsEnd);
|
|
140
|
+
const connect = span(timing.connectStart, timing.connectEnd);
|
|
141
|
+
const ssl = span(timing.sslStart, timing.sslEnd);
|
|
142
|
+
const send = Math.max(0, span(timing.sendStart, timing.sendEnd));
|
|
143
|
+
const wait = Math.max(0, span(timing.sendEnd, timing.receiveHeadersEnd));
|
|
144
|
+
// Whatever came before the first phase that happened is time
|
|
145
|
+
// the request spent queued.
|
|
146
|
+
const firstPhase = [timing.dnsStart, timing.connectStart, timing.sendStart]
|
|
147
|
+
.filter((offset) => offset !== undefined && offset >= 0)
|
|
148
|
+
.sort((left, right) => left - right)[0];
|
|
149
|
+
const blocked = firstPhase === undefined ? NOT_APPLICABLE : firstPhase;
|
|
150
|
+
// Everything after the headers arrived was spent reading the
|
|
151
|
+
// body, when we know how long the whole thing took.
|
|
152
|
+
const headersDone = timing.receiveHeadersEnd ?? 0;
|
|
153
|
+
const receive = request.durationMs === undefined
|
|
154
|
+
? 0
|
|
155
|
+
: Math.max(0, request.durationMs - headersDone);
|
|
156
|
+
return { blocked, dns, connect, ssl, send, wait, receive };
|
|
157
|
+
}
|
|
158
|
+
/** A duration between two offsets, or -1 if either did not happen. */
|
|
159
|
+
function span(start, end) {
|
|
160
|
+
if (start === undefined || end === undefined)
|
|
161
|
+
return NOT_APPLICABLE;
|
|
162
|
+
if (start < 0 || end < 0)
|
|
163
|
+
return NOT_APPLICABLE;
|
|
164
|
+
return end - start;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The sum HAR requires entry.time to equal.
|
|
168
|
+
*
|
|
169
|
+
* ssl is deliberately left out. HAR 1.2 says the TLS handshake
|
|
170
|
+
* time is also included in connect, and the protocol agrees:
|
|
171
|
+
* sslStart and sslEnd sit inside connectStart and connectEnd. So
|
|
172
|
+
* summing every field counted the handshake twice and overstated
|
|
173
|
+
* the duration of every https request in the archive, in the one
|
|
174
|
+
* file whose header names this invariant as its reason to exist.
|
|
175
|
+
*/
|
|
176
|
+
function total(timings) {
|
|
177
|
+
const counted = [
|
|
178
|
+
"blocked",
|
|
179
|
+
"dns",
|
|
180
|
+
"connect",
|
|
181
|
+
"send",
|
|
182
|
+
"wait",
|
|
183
|
+
"receive",
|
|
184
|
+
];
|
|
185
|
+
return counted
|
|
186
|
+
.map((field) => timings[field])
|
|
187
|
+
.filter((value) => value !== undefined && value >= 0)
|
|
188
|
+
.reduce((sum, value) => sum + value, 0);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* How many bytes a captured body is.
|
|
192
|
+
*
|
|
193
|
+
* A base64 body carries four characters for every three bytes,
|
|
194
|
+
* and a text body counts UTF-16 code units rather than the bytes
|
|
195
|
+
* that crossed the wire, so neither string's length is a size.
|
|
196
|
+
*/
|
|
197
|
+
function sizeOf(body) {
|
|
198
|
+
return body.base64Encoded
|
|
199
|
+
? Buffer.from(body.body, "base64").length
|
|
200
|
+
: Buffer.byteLength(body.body, "utf8");
|
|
201
|
+
}
|
|
202
|
+
/** Headers as HAR's name and value pairs. */
|
|
203
|
+
function pairsOf(headers) {
|
|
204
|
+
return Object.entries(headers ?? {}).map(([name, value]) => ({
|
|
205
|
+
name,
|
|
206
|
+
value,
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
/** One header, found without caring how it was capitalized. */
|
|
210
|
+
function headerOf(headers, wanted) {
|
|
211
|
+
const found = Object.entries(headers ?? {}).find(([name]) => name.toLowerCase() === wanted);
|
|
212
|
+
return found?.[1];
|
|
213
|
+
}
|
|
214
|
+
/** The query string, split the way a url says it splits. */
|
|
215
|
+
function queryOf(url) {
|
|
216
|
+
try {
|
|
217
|
+
return [...new URL(url).searchParams].map(([name, value]) => ({
|
|
218
|
+
name,
|
|
219
|
+
value,
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// A url the URL parser rejects has no query worth reporting,
|
|
224
|
+
// and failing the whole export over it would be worse.
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry: what the page did while nobody was looking.
|
|
3
|
+
*
|
|
4
|
+
* Buffers here are plain data structures over serializable
|
|
5
|
+
* entries, so a record captured from CDP, from a fixture or
|
|
6
|
+
* from another driver is read the same way.
|
|
7
|
+
*/
|
|
8
|
+
export { type BufferLimits, createRingBuffer, type Recorded, type RingBuffer, } from "./buffer.js";
|
|
9
|
+
export { type BrowserLogged, browserEntry, type CallFrame, type ConsoleCalled, consoleEntry, consoleText, type ExceptionThrown, exceptionEntry, type LogEntry, type RemoteArg, type RemotePreview, type RemotePreviewProperty, renderArg, } from "./console.js";
|
|
10
|
+
export { answerFor, DEFAULT_DIALOG_POLICY, type DialogEvent, type DialogKind, type DialogPolicy, renderDialogs, } from "./dialogs.js";
|
|
11
|
+
export { createDownloadRecorder, type DownloadInput, type DownloadRecord, type DownloadRecorder, type DownloadState, renderDownloads, } from "./downloads.js";
|
|
12
|
+
export { diedWithTheTab, failureText } from "./failure.js";
|
|
13
|
+
export { type Har, type HarEntry, type HarOptions, type HarPair, type HarTimings, toHar, } from "./har.js";
|
|
14
|
+
export { createLifecycleRecorder, type LifecycleEvent, type LifecycleInput, type LifecycleKind, type LifecycleRecorder, renderLifecycle, strandedByCrash, } from "./lifecycle.js";
|
|
15
|
+
export { createNetworkRecorder, type LoadingFailed, type LoadingFinished, type NetworkEvent, type NetworkRecorder, type NetworkRequest, type RedirectHop, type RequestSent, type RequestState, type ResourceTiming, type ResponseReceived, } from "./network.js";
|
|
16
|
+
export { anyUrlShortened, type RequestQuery, renderRequests, requestStatus, } from "./requests.js";
|
|
17
|
+
export { foldSockets, renderSockets, type SocketEvent, type SocketFrame, type SocketRecord, } from "./sockets.js";
|
|
18
|
+
export { type Captured, renderLogs } from "./view.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry: what the page did while nobody was looking.
|
|
3
|
+
*
|
|
4
|
+
* Buffers here are plain data structures over serializable
|
|
5
|
+
* entries, so a record captured from CDP, from a fixture or
|
|
6
|
+
* from another driver is read the same way.
|
|
7
|
+
*/
|
|
8
|
+
export { createRingBuffer, } from "./buffer.js";
|
|
9
|
+
export { browserEntry, consoleEntry, consoleText, exceptionEntry, renderArg, } from "./console.js";
|
|
10
|
+
export { answerFor, DEFAULT_DIALOG_POLICY, renderDialogs, } from "./dialogs.js";
|
|
11
|
+
export { createDownloadRecorder, renderDownloads, } from "./downloads.js";
|
|
12
|
+
export { diedWithTheTab, failureText } from "./failure.js";
|
|
13
|
+
export { toHar, } from "./har.js";
|
|
14
|
+
export { createLifecycleRecorder, renderLifecycle, strandedByCrash, } from "./lifecycle.js";
|
|
15
|
+
export { createNetworkRecorder, } from "./network.js";
|
|
16
|
+
export { anyUrlShortened, renderRequests, requestStatus, } from "./requests.js";
|
|
17
|
+
export { foldSockets, renderSockets, } from "./sockets.js";
|
|
18
|
+
export { renderLogs } from "./view.js";
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
/** What happened to the page. */
|
|
10
|
+
export type LifecycleKind = "navigated" | "routeChanged" | "crashed" | "recovered";
|
|
11
|
+
/** One thing that happened to the page. */
|
|
12
|
+
export interface LifecycleEvent {
|
|
13
|
+
readonly kind: LifecycleKind;
|
|
14
|
+
readonly url?: string;
|
|
15
|
+
/**
|
|
16
|
+
* How an in-page route change was made. Chrome reports
|
|
17
|
+
* pushState and replaceState identically as "historyApi", so
|
|
18
|
+
* this never claims to know which was called.
|
|
19
|
+
*/
|
|
20
|
+
readonly via?: string;
|
|
21
|
+
/** Why Chrome said the navigation was happening, when it said. */
|
|
22
|
+
readonly reason?: string;
|
|
23
|
+
}
|
|
24
|
+
/** The protocol events this fold consumes. */
|
|
25
|
+
export type LifecycleInput = {
|
|
26
|
+
readonly kind: "requested";
|
|
27
|
+
readonly frameId: string;
|
|
28
|
+
readonly reason: string;
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: "navigated";
|
|
31
|
+
readonly frameId: string;
|
|
32
|
+
readonly url: string;
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "within";
|
|
35
|
+
readonly frameId: string;
|
|
36
|
+
readonly url: string;
|
|
37
|
+
readonly navigationType?: string;
|
|
38
|
+
} | {
|
|
39
|
+
readonly kind: "crashed";
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: "recovered";
|
|
42
|
+
readonly url?: string;
|
|
43
|
+
};
|
|
44
|
+
/** A running record of where the page has been. */
|
|
45
|
+
export interface LifecycleRecorder {
|
|
46
|
+
apply(input: LifecycleInput): void;
|
|
47
|
+
all(): readonly LifecycleEvent[];
|
|
48
|
+
/** Follow a new main frame, after a recovery replaced the tab. */
|
|
49
|
+
adoptFrame(frameId: string): void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Whether the session is sitting on the tab that replaced a crash.
|
|
53
|
+
*
|
|
54
|
+
* A crash is not the end of a session: the tab is replaced and
|
|
55
|
+
* everything goes on working. What is not restored is where the
|
|
56
|
+
* session was, because the replacement starts blank and nothing
|
|
57
|
+
* sends it back. So every read after a crash describes a blank
|
|
58
|
+
* page, and describing a blank page accurately is the problem:
|
|
59
|
+
* an empty outline reads as a page with nothing on it rather
|
|
60
|
+
* than a page that is gone.
|
|
61
|
+
*
|
|
62
|
+
* Asked of the history rather than of the url, because the
|
|
63
|
+
* question is whether anything has been loaded since, and a
|
|
64
|
+
* session deliberately sitting on about:blank is not stranded.
|
|
65
|
+
*/
|
|
66
|
+
export declare function strandedByCrash(history: readonly LifecycleEvent[]): boolean;
|
|
67
|
+
export declare function createLifecycleRecorder(mainFrameId: string): LifecycleRecorder;
|
|
68
|
+
/** Where the page has been, in order. */
|
|
69
|
+
export declare function renderLifecycle(events: readonly LifecycleEvent[]): string;
|