@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,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Making and changing pull requests on GitHub.
|
|
3
|
+
*
|
|
4
|
+
* Every write goes through the REST API with a JSON body on disk,
|
|
5
|
+
* rather than through `gh pr create` and its siblings. The porcelain
|
|
6
|
+
* commands are friendlier to type and worse to call: they infer the
|
|
7
|
+
* base from the current checkout, they read a title out of the last
|
|
8
|
+
* commit when one is not given, and their flags have defaults that
|
|
9
|
+
* change what an omitted argument means. A caller here has already
|
|
10
|
+
* decided all of that, and inference at this layer would quietly
|
|
11
|
+
* overrule it.
|
|
12
|
+
*
|
|
13
|
+
* The body goes through a file for the same reason a commit message
|
|
14
|
+
* does. A pull request body is prose with newlines, quotes and
|
|
15
|
+
* backticks in it, and putting that on a command line is a quoting bug
|
|
16
|
+
* waiting for the first person who writes a shell snippet in a
|
|
17
|
+
* description.
|
|
18
|
+
*/
|
|
19
|
+
import { unlink, writeFile } from "node:fs/promises";
|
|
20
|
+
import { tmpdir } from "node:os";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { run } from "../../../exec/index.js";
|
|
23
|
+
import { githubChange, ownerRepoFromKey } from "./claims.js";
|
|
24
|
+
import { labelsAndAssignees } from "./fields.js";
|
|
25
|
+
/** `owner/name`, as every GitHub route wants it. */
|
|
26
|
+
function slugOf(repo) {
|
|
27
|
+
const owned = ownerRepoFromKey(repo.key);
|
|
28
|
+
if (!owned)
|
|
29
|
+
throw new Error(`${repo.key} is not a GitHub repo key`);
|
|
30
|
+
return `${owned.owner}/${owned.repo}`;
|
|
31
|
+
}
|
|
32
|
+
/** Build the authoring facet. */
|
|
33
|
+
export function githubAuthoring(exec) {
|
|
34
|
+
/**
|
|
35
|
+
* One API call carrying a JSON body.
|
|
36
|
+
*
|
|
37
|
+
* The temp file is cleaned up in a finally, and a failure to clean
|
|
38
|
+
* it up is swallowed: a leftover file is harmless, and letting it
|
|
39
|
+
* fail would turn a successful write into a reported error.
|
|
40
|
+
*/
|
|
41
|
+
async function send(method, route, payload, what) {
|
|
42
|
+
const file = join(tmpdir(), `pi-review-authoring-${Date.now()}-${Math.random()}.json`);
|
|
43
|
+
try {
|
|
44
|
+
await writeFile(file, JSON.stringify(payload), "utf8");
|
|
45
|
+
return await run(exec, "gh", ["api", "--method", method, route, "--input", file], what);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
try {
|
|
49
|
+
await unlink(file);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// A leftover temp file is harmless, and failing to remove
|
|
53
|
+
// one must not fail the write that already succeeded.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** A GraphQL mutation, for the two things REST will not do. */
|
|
58
|
+
async function mutate(query, id, what) {
|
|
59
|
+
await run(exec, "gh", ["api", "graphql", "-f", `query=${query}`, "-F", `id=${id}`], what);
|
|
60
|
+
}
|
|
61
|
+
/** One API call with no body, for the routes that take none. */
|
|
62
|
+
async function call(method, route, what) {
|
|
63
|
+
await run(exec, "gh", ["api", "--method", method, route], what);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Apply a set edit to labels or assignees.
|
|
67
|
+
*
|
|
68
|
+
* Both live on the issue rather than the pull request. GitHub models a
|
|
69
|
+
* pull request as an issue with a branch attached, so `PATCH
|
|
70
|
+
* /pulls/{n}` takes a title, a body and a base and knows nothing about
|
|
71
|
+
* labels; the `/issues/{n}` routes own those. The pull request
|
|
72
|
+
* representation does report them on the way out, which is why reading
|
|
73
|
+
* costs nothing extra and writing costs a separate call.
|
|
74
|
+
*
|
|
75
|
+
* `add` and `remove` are native here, and that is the point of
|
|
76
|
+
* {@link SetEdit}: doing either through a wholesale replace means
|
|
77
|
+
* reading the current list and writing it back, which drops whatever
|
|
78
|
+
* anybody else changed in between.
|
|
79
|
+
*/
|
|
80
|
+
async function applySetEdit(ref, field, edit) {
|
|
81
|
+
const issue = `repos/${slugOf(ref.repo)}/issues/${ref.id}`;
|
|
82
|
+
const what = `changing the ${field} of pull request ${ref.id}`;
|
|
83
|
+
if (edit.action === "clear") {
|
|
84
|
+
await send("PATCH", issue, { [field]: [] }, what);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (edit.action === "set") {
|
|
88
|
+
await send("PATCH", issue, { [field]: edit.value }, what);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (edit.value.length === 0)
|
|
92
|
+
return;
|
|
93
|
+
if (edit.action === "add") {
|
|
94
|
+
await send("POST", `${issue}/${field}`, { [field]: edit.value }, what);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Removing differs between the two, which is GitHub's asymmetry
|
|
98
|
+
// rather than a choice here: a label is named in the path, one call
|
|
99
|
+
// each, and assignees come off together in a body.
|
|
100
|
+
if (field === "assignees") {
|
|
101
|
+
await send("DELETE", `${issue}/assignees`, { assignees: edit.value }, what);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
for (const label of edit.value) {
|
|
105
|
+
await call("DELETE", `${issue}/labels/${encodeURIComponent(label)}`, what);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** The node id GitHub's GraphQL wants, which REST does not carry. */
|
|
109
|
+
async function nodeId(ref) {
|
|
110
|
+
const stdout = await run(exec, "gh", ["api", `repos/${slugOf(ref.repo)}/pulls/${ref.id}`, "--jq", ".node_id"], `reading the id of pull request ${ref.id}`);
|
|
111
|
+
return stdout.trim();
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
async propose(draft) {
|
|
115
|
+
const raw = await send("POST", `repos/${slugOf(draft.repo)}/pulls`, {
|
|
116
|
+
base: draft.base,
|
|
117
|
+
head: draft.head,
|
|
118
|
+
title: draft.title,
|
|
119
|
+
body: draft.body,
|
|
120
|
+
// Always sent, never omitted. This backend defaults to
|
|
121
|
+
// ready and another defaults to draft, so an absent flag
|
|
122
|
+
// means two different things and the same call would
|
|
123
|
+
// produce a different change depending on where it landed.
|
|
124
|
+
draft: draft.draft,
|
|
125
|
+
}, `proposing ${draft.head} onto ${draft.base}`);
|
|
126
|
+
const proposed = proposalFrom(draft.repo, raw);
|
|
127
|
+
// A second call, because the create route does not take them: a
|
|
128
|
+
// pull request is an issue with a branch, and labels belong to
|
|
129
|
+
// the issue half. Sent after the change exists rather than not
|
|
130
|
+
// at all, since a caller who asked for a label and silently did
|
|
131
|
+
// not get one has no way to tell.
|
|
132
|
+
if (draft.labels?.length) {
|
|
133
|
+
await applySetEdit(proposed.ref, "labels", {
|
|
134
|
+
action: "add",
|
|
135
|
+
value: draft.labels,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (draft.assignees?.length) {
|
|
139
|
+
await applySetEdit(proposed.ref, "assignees", {
|
|
140
|
+
action: "add",
|
|
141
|
+
value: draft.assignees,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return proposed;
|
|
145
|
+
},
|
|
146
|
+
async edit(ref, edit) {
|
|
147
|
+
const payload = {};
|
|
148
|
+
if (edit.title) {
|
|
149
|
+
payload.title = edit.title.action === "clear" ? "" : edit.title.value;
|
|
150
|
+
}
|
|
151
|
+
if (edit.body) {
|
|
152
|
+
payload.body = edit.body.action === "clear" ? "" : edit.body.value;
|
|
153
|
+
}
|
|
154
|
+
if (edit.base) {
|
|
155
|
+
if (edit.base.action === "clear") {
|
|
156
|
+
// A change with no base is not a change. Sending an empty
|
|
157
|
+
// string here would be accepted as a branch named "" and
|
|
158
|
+
// rejected far from the call that caused it.
|
|
159
|
+
throw new Error("A change has to target something, so its base cannot be cleared. Set it to another branch instead.");
|
|
160
|
+
}
|
|
161
|
+
payload.base = edit.base.value;
|
|
162
|
+
}
|
|
163
|
+
if (edit.labels)
|
|
164
|
+
await applySetEdit(ref, "labels", edit.labels);
|
|
165
|
+
if (edit.assignees)
|
|
166
|
+
await applySetEdit(ref, "assignees", edit.assignees);
|
|
167
|
+
// Read the change back rather than PATCHing nothing, for an edit
|
|
168
|
+
// that only touched labels. Sending an empty body here is
|
|
169
|
+
// accepted and returns the change unchanged, so this is about
|
|
170
|
+
// saying what happened rather than about correctness.
|
|
171
|
+
const route = `repos/${slugOf(ref.repo)}/pulls/${ref.id}`;
|
|
172
|
+
const raw = Object.keys(payload).length === 0
|
|
173
|
+
? await run(exec, "gh", ["api", route], `reading pull request ${ref.id} back`)
|
|
174
|
+
: await send("PATCH", route, payload, `editing pull request ${ref.id}`);
|
|
175
|
+
return proposalFrom(ref.repo, raw);
|
|
176
|
+
},
|
|
177
|
+
async setDraft(ref, draft) {
|
|
178
|
+
// Not a field on the pull request. GitHub moves a change
|
|
179
|
+
// between draft and ready only through these two mutations,
|
|
180
|
+
// which is why this is its own method rather than part of edit.
|
|
181
|
+
const id = await nodeId(ref);
|
|
182
|
+
await mutate(draft ? CONVERT_TO_DRAFT : MARK_READY, id, `${draft ? "returning" : "readying"} pull request ${ref.id}`);
|
|
183
|
+
},
|
|
184
|
+
async close(ref, comment) {
|
|
185
|
+
// The comment goes first. A close that fails afterwards still
|
|
186
|
+
// leaves the reason behind, where the other order leaves a
|
|
187
|
+
// silently shut change nobody can account for.
|
|
188
|
+
if (comment !== undefined && comment.trim() !== "") {
|
|
189
|
+
await send("POST", `repos/${slugOf(ref.repo)}/issues/${ref.id}/comments`, { body: comment }, `saying why pull request ${ref.id} is being closed`);
|
|
190
|
+
}
|
|
191
|
+
await send("PATCH", `repos/${slugOf(ref.repo)}/pulls/${ref.id}`, { state: "closed" }, `closing pull request ${ref.id}`);
|
|
192
|
+
},
|
|
193
|
+
async reopen(ref) {
|
|
194
|
+
await send("PATCH", `repos/${slugOf(ref.repo)}/pulls/${ref.id}`, { state: "open" }, `reopening pull request ${ref.id}`);
|
|
195
|
+
},
|
|
196
|
+
async merge(ref, request) {
|
|
197
|
+
const answered = await send("PUT", `repos/${slugOf(ref.repo)}/pulls/${ref.id}/merge`, {
|
|
198
|
+
// Only when asked. Which merge a repo wants is its settled
|
|
199
|
+
// policy, and choosing one here would rewrite history a way
|
|
200
|
+
// the project did not pick.
|
|
201
|
+
...(request.method === undefined
|
|
202
|
+
? {}
|
|
203
|
+
: { merge_method: request.method }),
|
|
204
|
+
...(request.expectedHead === undefined
|
|
205
|
+
? {}
|
|
206
|
+
: { sha: request.expectedHead }),
|
|
207
|
+
}, `merging pull request ${ref.id}`);
|
|
208
|
+
// This endpoint lands the change then and there, so `merged` is the
|
|
209
|
+
// honest word for it. A repo fronted by GitHub's own merge queue does
|
|
210
|
+
// not merge through here at all, which is why there is no second case.
|
|
211
|
+
//
|
|
212
|
+
// The sha is passed on when the answer carries one and left out when
|
|
213
|
+
// it does not, rather than being defaulted to the head we sent: absent
|
|
214
|
+
// means unreported, and a commit is the one field a caller might go
|
|
215
|
+
// and look up.
|
|
216
|
+
const commit = shaFrom(answered);
|
|
217
|
+
return { kind: "merged", ...(commit === undefined ? {} : { commit }) };
|
|
218
|
+
},
|
|
219
|
+
async rerun(ref, which) {
|
|
220
|
+
// Actions reruns are keyed by run and a change is not a run, so
|
|
221
|
+
// the head commit is the join between them. Read back rather
|
|
222
|
+
// than taken on trust: a rerun aimed at a commit that has been
|
|
223
|
+
// pushed past spends CI on code nobody is looking at.
|
|
224
|
+
const head = await run(exec, "gh", [
|
|
225
|
+
"pr",
|
|
226
|
+
"view",
|
|
227
|
+
ref.id,
|
|
228
|
+
"--repo",
|
|
229
|
+
slugOf(ref.repo),
|
|
230
|
+
"--json",
|
|
231
|
+
"headRefOid",
|
|
232
|
+
"--jq",
|
|
233
|
+
".headRefOid",
|
|
234
|
+
], `reading the head of pull request ${ref.id}`);
|
|
235
|
+
const sha = head.trim();
|
|
236
|
+
if (sha === "") {
|
|
237
|
+
return {
|
|
238
|
+
kind: "declined",
|
|
239
|
+
reason: "its head commit could not be read",
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const listed = await run(exec, "gh", [
|
|
243
|
+
"api",
|
|
244
|
+
`/repos/${slugOf(ref.repo)}/actions/runs?head_sha=${sha}&per_page=20`,
|
|
245
|
+
"--jq",
|
|
246
|
+
".workflow_runs[] | [.id, .name] | @tsv",
|
|
247
|
+
], `listing workflow runs for ${sha.slice(0, 7)}`);
|
|
248
|
+
const runs = listed
|
|
249
|
+
.split("\n")
|
|
250
|
+
.map((line) => line.split("\t"))
|
|
251
|
+
.flatMap(([id, name]) => id && name && (which === undefined || name === which)
|
|
252
|
+
? [{ id, name }]
|
|
253
|
+
: []);
|
|
254
|
+
// Declined rather than a start nobody made. A repo can report
|
|
255
|
+
// checks this cannot rerun, because a check can come from any
|
|
256
|
+
// app and only Actions has runs, and a silent no-op here reads
|
|
257
|
+
// as "CI is going again" while nothing is.
|
|
258
|
+
if (runs.length === 0) {
|
|
259
|
+
return {
|
|
260
|
+
kind: "declined",
|
|
261
|
+
reason: which === undefined
|
|
262
|
+
? `no GitHub Actions run exists for ${sha.slice(0, 7)}, so whatever reports these checks is not Actions and has to be rerun where it lives`
|
|
263
|
+
: `no GitHub Actions run named ${which} exists for ${sha.slice(0, 7)}`,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
for (const { id } of runs) {
|
|
267
|
+
await send("POST", `repos/${slugOf(ref.repo)}/actions/runs/${id}/rerun`, {}, `rerunning workflow run ${id}`);
|
|
268
|
+
}
|
|
269
|
+
return { kind: "started", ...(which ? { which } : {}) };
|
|
270
|
+
},
|
|
271
|
+
async requestReviewers(ref, actors) {
|
|
272
|
+
// GitHub accepts an empty request and does nothing with it,
|
|
273
|
+
// which would leave a caller believing it asked somebody.
|
|
274
|
+
if (actors.length === 0)
|
|
275
|
+
return;
|
|
276
|
+
await send("POST", `repos/${slugOf(ref.repo)}/pulls/${ref.id}/requested_reviewers`, { reviewers: actors }, `requesting reviewers on pull request ${ref.id}`);
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
/** The change the API handed back, read the way a fetch reads one. */
|
|
280
|
+
function proposalFrom(repo, stdout) {
|
|
281
|
+
const raw = JSON.parse(stdout);
|
|
282
|
+
if (typeof raw !== "object" || raw === null) {
|
|
283
|
+
throw new Error("GitHub answered with something that is not a change.");
|
|
284
|
+
}
|
|
285
|
+
return restProposal(repo, raw);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** Move a ready change back to draft. */
|
|
289
|
+
const CONVERT_TO_DRAFT = "mutation($id: ID!) { convertPullRequestToDraft(input: {pullRequestId: $id}) { pullRequest { id } } }";
|
|
290
|
+
/** Move a draft change to ready. */
|
|
291
|
+
const MARK_READY = "mutation($id: ID!) { markPullRequestReadyForReview(input: {pullRequestId: $id}) { pullRequest { id } } }";
|
|
292
|
+
/** A string, or nothing. */
|
|
293
|
+
function str(value) {
|
|
294
|
+
return typeof value === "string" && value !== "" ? value : undefined;
|
|
295
|
+
}
|
|
296
|
+
/** The commit a merge answer names, when it names one and the text parses. */
|
|
297
|
+
function shaFrom(answered) {
|
|
298
|
+
try {
|
|
299
|
+
const body = JSON.parse(answered);
|
|
300
|
+
if (typeof body !== "object" || body === null)
|
|
301
|
+
return undefined;
|
|
302
|
+
return str(body.sha);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// The merge went through; only the sha is unreadable. Failing the call
|
|
306
|
+
// over that would turn a landed change into a reported error, which is
|
|
307
|
+
// the one outcome worse than not naming the commit.
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/** A nested object, or an empty one. */
|
|
312
|
+
function nested(value, key) {
|
|
313
|
+
const held = value[key];
|
|
314
|
+
return typeof held === "object" && held !== null
|
|
315
|
+
? held
|
|
316
|
+
: {};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* One pull request as REST spells it.
|
|
320
|
+
*
|
|
321
|
+
* A local copy rather than the proposals facet's, because that one is
|
|
322
|
+
* private to its module and exporting it would widen a surface only to
|
|
323
|
+
* save a dozen lines. If a third caller appears, that is the moment to
|
|
324
|
+
* move it.
|
|
325
|
+
*/
|
|
326
|
+
function restProposal(repo, raw) {
|
|
327
|
+
const id = String(raw.number ?? "");
|
|
328
|
+
const state = raw.merged_at
|
|
329
|
+
? "merged"
|
|
330
|
+
: str(raw.state) === "closed"
|
|
331
|
+
? "closed"
|
|
332
|
+
: "open";
|
|
333
|
+
return {
|
|
334
|
+
ref: githubChange(repo, id),
|
|
335
|
+
title: str(raw.title) ?? "",
|
|
336
|
+
body: str(raw.body) ?? "",
|
|
337
|
+
state,
|
|
338
|
+
draft: raw.draft === true,
|
|
339
|
+
author: { id: str(nested(raw, "user").login) ?? "" },
|
|
340
|
+
base: str(nested(raw, "base").ref) ?? "",
|
|
341
|
+
head: str(nested(raw, "head").ref) ?? "",
|
|
342
|
+
...(str(nested(raw, "head").sha)
|
|
343
|
+
? { headCommit: str(nested(raw, "head").sha) }
|
|
344
|
+
: {}),
|
|
345
|
+
...(str(raw.created_at) ? { createdAt: str(raw.created_at) } : {}),
|
|
346
|
+
...(str(raw.updated_at) ? { updatedAt: str(raw.updated_at) } : {}),
|
|
347
|
+
...(str(raw.html_url) ? { url: str(raw.html_url) } : {}),
|
|
348
|
+
...labelsAndAssignees(raw),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What GitHub recognizes as one of its own.
|
|
3
|
+
*
|
|
4
|
+
* Pure pattern matching, deliberately separate from anything
|
|
5
|
+
* that runs a command, because claiming happens on every
|
|
6
|
+
* resolution and must stay cheap. The Graphite URL is included
|
|
7
|
+
* because it is a different view onto the same pull request,
|
|
8
|
+
* not a different backend.
|
|
9
|
+
*/
|
|
10
|
+
import type { ChangeRef, RepoLocator } from "../../change.js";
|
|
11
|
+
import type { RepoProbe } from "../../provider.js";
|
|
12
|
+
/** Provider id, used as the prefix of every repo key it mints. */
|
|
13
|
+
export declare const GITHUB_PROVIDER_ID = "github";
|
|
14
|
+
/** The repo key GitHub uses: `github:owner/repo`. */
|
|
15
|
+
export declare function githubRepoKey(owner: string, repo: string): string;
|
|
16
|
+
/** Owner and repo from a GitHub remote URL, if it is one. */
|
|
17
|
+
export declare function ownerRepoFromRemote(remoteUrl: string): {
|
|
18
|
+
owner: string;
|
|
19
|
+
repo: string;
|
|
20
|
+
} | null;
|
|
21
|
+
/** Owner and repo from a repo key this provider minted. */
|
|
22
|
+
export declare function ownerRepoFromKey(key: string): {
|
|
23
|
+
owner: string;
|
|
24
|
+
repo: string;
|
|
25
|
+
} | null;
|
|
26
|
+
/**
|
|
27
|
+
* A reference to a pull request in a repo this provider
|
|
28
|
+
* already identified. Every GitHub reference is built here, so
|
|
29
|
+
* one place decides how a pull request is spelled: the way a
|
|
30
|
+
* person writes it, which is also what `gh` accepts back.
|
|
31
|
+
*/
|
|
32
|
+
export declare function githubChange(repo: RepoLocator, id: string): ChangeRef;
|
|
33
|
+
/**
|
|
34
|
+
* Recognize a reference. A bare number needs a repo to belong
|
|
35
|
+
* to, and only counts when that repo is one of GitHub's: a
|
|
36
|
+
* number typed while standing in a gitstream checkout is not a
|
|
37
|
+
* GitHub pull request.
|
|
38
|
+
*/
|
|
39
|
+
export declare function claimGitHubReference(input: string, repo?: RepoLocator): ChangeRef | null;
|
|
40
|
+
/** Recognize a checkout by its remotes. */
|
|
41
|
+
export declare function claimGitHubRepo(probe: RepoProbe): RepoLocator | null;
|
|
42
|
+
/**
|
|
43
|
+
* Who GitHub attributes content to once its author is gone.
|
|
44
|
+
*
|
|
45
|
+
* A deleted account comes back as a null author, and GitHub itself
|
|
46
|
+
* reassigns that content to the ghost user, so this is reporting
|
|
47
|
+
* what the forge says rather than filling a hole with a guess.
|
|
48
|
+
*/
|
|
49
|
+
export declare const GHOST = "ghost";
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What GitHub recognizes as one of its own.
|
|
3
|
+
*
|
|
4
|
+
* Pure pattern matching, deliberately separate from anything
|
|
5
|
+
* that runs a command, because claiming happens on every
|
|
6
|
+
* resolution and must stay cheap. The Graphite URL is included
|
|
7
|
+
* because it is a different view onto the same pull request,
|
|
8
|
+
* not a different backend.
|
|
9
|
+
*/
|
|
10
|
+
/** Provider id, used as the prefix of every repo key it mints. */
|
|
11
|
+
export const GITHUB_PROVIDER_ID = "github";
|
|
12
|
+
const PULL_URL = /^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/;
|
|
13
|
+
const GRAPHITE_URL = /^https?:\/\/app\.graphite\.com\/github\/pr\/([^/]+)\/([^/]+)\/(\d+)/;
|
|
14
|
+
const SHORT_FORM = /^([^/\s]+)\/([^/#\s]+)#(\d+)$/;
|
|
15
|
+
const BARE_NUMBER = /^#?(\d+)$/;
|
|
16
|
+
const HTTPS_REMOTE = /^https?:\/\/(?:[^@]+@)?github\.com\/([^/]+)\/([^/]+?)(?:\.git)?$/;
|
|
17
|
+
const SSH_REMOTE = /^git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/;
|
|
18
|
+
/** The repo key GitHub uses: `github:owner/repo`. */
|
|
19
|
+
export function githubRepoKey(owner, repo) {
|
|
20
|
+
return `${GITHUB_PROVIDER_ID}:${owner}/${repo}`;
|
|
21
|
+
}
|
|
22
|
+
/** Owner and repo from a GitHub remote URL, if it is one. */
|
|
23
|
+
export function ownerRepoFromRemote(remoteUrl) {
|
|
24
|
+
const https = HTTPS_REMOTE.exec(remoteUrl);
|
|
25
|
+
if (https)
|
|
26
|
+
return { owner: https[1], repo: https[2] };
|
|
27
|
+
const ssh = SSH_REMOTE.exec(remoteUrl);
|
|
28
|
+
if (ssh)
|
|
29
|
+
return { owner: ssh[1], repo: ssh[2] };
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/** Owner and repo from a repo key this provider minted. */
|
|
33
|
+
export function ownerRepoFromKey(key) {
|
|
34
|
+
const prefix = `${GITHUB_PROVIDER_ID}:`;
|
|
35
|
+
if (!key.startsWith(prefix))
|
|
36
|
+
return null;
|
|
37
|
+
const [owner, repo] = key.slice(prefix.length).split("/");
|
|
38
|
+
return owner && repo ? { owner, repo } : null;
|
|
39
|
+
}
|
|
40
|
+
function change(owner, repo, number) {
|
|
41
|
+
return githubChange({ key: githubRepoKey(owner, repo) }, number);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The richer of two locators for the same repo.
|
|
45
|
+
*
|
|
46
|
+
* A reference written out in full carries an owner and a name and nothing
|
|
47
|
+
* else, so it used to describe the repo as a key alone even when the
|
|
48
|
+
* caller was standing in a checkout of it. Anything wanting the working
|
|
49
|
+
* copy then had nowhere to look: a round asking for a snapshot pinned to
|
|
50
|
+
* the commit under review was refused for a repo with "neither a local
|
|
51
|
+
* checkout nor a remote", and reviewers silently read the mutable
|
|
52
|
+
* directory they happened to be in instead.
|
|
53
|
+
*
|
|
54
|
+
* Only ever the same repo. Keys are compared before anything is borrowed,
|
|
55
|
+
* because standing in one checkout says nothing about where a different
|
|
56
|
+
* repo lives, and quietly attaching the wrong path would have a round
|
|
57
|
+
* review the wrong code.
|
|
58
|
+
*/
|
|
59
|
+
function enriched(named, probed) {
|
|
60
|
+
if (!probed || probed.key !== named.key)
|
|
61
|
+
return named;
|
|
62
|
+
return {
|
|
63
|
+
...named,
|
|
64
|
+
...(probed.remoteUrl === undefined ? {} : { remoteUrl: probed.remoteUrl }),
|
|
65
|
+
...(probed.localPath === undefined ? {} : { localPath: probed.localPath }),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A reference to a pull request in a repo this provider
|
|
70
|
+
* already identified. Every GitHub reference is built here, so
|
|
71
|
+
* one place decides how a pull request is spelled: the way a
|
|
72
|
+
* person writes it, which is also what `gh` accepts back.
|
|
73
|
+
*/
|
|
74
|
+
export function githubChange(repo, id) {
|
|
75
|
+
const owned = ownerRepoFromKey(repo.key);
|
|
76
|
+
return {
|
|
77
|
+
provider: GITHUB_PROVIDER_ID,
|
|
78
|
+
repo,
|
|
79
|
+
id,
|
|
80
|
+
label: owned ? `${owned.owner}/${owned.repo}#${id}` : `${repo.key}#${id}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Recognize a reference. A bare number needs a repo to belong
|
|
85
|
+
* to, and only counts when that repo is one of GitHub's: a
|
|
86
|
+
* number typed while standing in a gitstream checkout is not a
|
|
87
|
+
* GitHub pull request.
|
|
88
|
+
*/
|
|
89
|
+
export function claimGitHubReference(input, repo) {
|
|
90
|
+
const trimmed = input.trim();
|
|
91
|
+
// Each explicit form is told what the caller is standing in, so a
|
|
92
|
+
// reference to the repo around you knows where that repo is on disk.
|
|
93
|
+
const here = (named) => ({
|
|
94
|
+
...named,
|
|
95
|
+
repo: enriched(named.repo, repo),
|
|
96
|
+
});
|
|
97
|
+
const pull = PULL_URL.exec(trimmed);
|
|
98
|
+
if (pull)
|
|
99
|
+
return here(change(pull[1], pull[2], pull[3]));
|
|
100
|
+
const graphite = GRAPHITE_URL.exec(trimmed);
|
|
101
|
+
if (graphite)
|
|
102
|
+
return here(change(graphite[1], graphite[2], graphite[3]));
|
|
103
|
+
const short = SHORT_FORM.exec(trimmed);
|
|
104
|
+
if (short)
|
|
105
|
+
return here(change(short[1], short[2], short[3]));
|
|
106
|
+
const bare = BARE_NUMBER.exec(trimmed);
|
|
107
|
+
if (!bare || !repo)
|
|
108
|
+
return null;
|
|
109
|
+
const owned = ownerRepoFromKey(repo.key);
|
|
110
|
+
// Enriched like the rest. This form reads the repo off the probe to
|
|
111
|
+
// understand the number at all, and then threw the rest of it away by
|
|
112
|
+
// rebuilding the locator from the owner and name it had just read.
|
|
113
|
+
return owned ? here(change(owned.owner, owned.repo, bare[1])) : null;
|
|
114
|
+
}
|
|
115
|
+
/** Recognize a checkout by its remotes. */
|
|
116
|
+
export function claimGitHubRepo(probe) {
|
|
117
|
+
for (const remoteUrl of probe.remoteUrls ?? []) {
|
|
118
|
+
const owned = ownerRepoFromRemote(remoteUrl);
|
|
119
|
+
if (!owned)
|
|
120
|
+
continue;
|
|
121
|
+
return {
|
|
122
|
+
key: githubRepoKey(owned.owner, owned.repo),
|
|
123
|
+
remoteUrl,
|
|
124
|
+
...(probe.repoRoot ? { localPath: probe.repoRoot } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Who GitHub attributes content to once its author is gone.
|
|
131
|
+
*
|
|
132
|
+
* A deleted account comes back as a null author, and GitHub itself
|
|
133
|
+
* reassigns that content to the ghost user, so this is reporting
|
|
134
|
+
* what the forge says rather than filling a hole with a guess.
|
|
135
|
+
*/
|
|
136
|
+
export const GHOST = "ghost";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading and writing the conversation on a GitHub change.
|
|
3
|
+
*
|
|
4
|
+
* Three of GitHub's habits are absorbed here rather than
|
|
5
|
+
* leaked. It calls the two sides of a diff LEFT and RIGHT,
|
|
6
|
+
* which is a display convention, so the neutral old and new
|
|
7
|
+
* are translated at this boundary. It keeps review threads in
|
|
8
|
+
* GraphQL and reactions in REST, with different id systems, so
|
|
9
|
+
* message ids are minted with a prefix saying which route they
|
|
10
|
+
* belong to. And it pages review threads a hundred at a time,
|
|
11
|
+
* so the reader keeps asking until GitHub says there is no
|
|
12
|
+
* more; stopping at the first page silently loses the tail of
|
|
13
|
+
* a long review.
|
|
14
|
+
*/
|
|
15
|
+
import type { Exec } from "../../../exec/index.js";
|
|
16
|
+
import type { ConversationFacet } from "../../provider.js";
|
|
17
|
+
/** Build the conversation facet. */
|
|
18
|
+
export declare function githubConversation(exec: Exec): ConversationFacet;
|