@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,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publishing a branch, which is the step between committing and proposing.
|
|
3
|
+
*
|
|
4
|
+
* It was missing, and its absence was the one place this surface made you
|
|
5
|
+
* leave it: `work record` committed, `review_offer propose` needed the branch
|
|
6
|
+
* on the remote, and nothing in between was a tool. Every other seam here is
|
|
7
|
+
* something you can call.
|
|
8
|
+
*
|
|
9
|
+
* Two rules are built in rather than offered. A first push sets upstream,
|
|
10
|
+
* because a branch that pushes without one has to be told its own name every
|
|
11
|
+
* time afterwards and eventually gets told the wrong one. And a force is
|
|
12
|
+
* always a lease: `--force` overwrites whatever arrived while you were
|
|
13
|
+
* rebasing, which on a shared branch is somebody else's work, and the honest
|
|
14
|
+
* version of "I know what is there" is to say what you think is there and be
|
|
15
|
+
* refused when you are wrong.
|
|
16
|
+
*/
|
|
17
|
+
/** The remote a tree pushes to when nothing says otherwise. */
|
|
18
|
+
const DEFAULT_REMOTE = "origin";
|
|
19
|
+
/**
|
|
20
|
+
* Read one git value, or undefined when git says nothing.
|
|
21
|
+
*
|
|
22
|
+
* Every call is scoped with `-C`, because the exec seam has no working
|
|
23
|
+
* directory of its own: an unscoped git call runs wherever the process
|
|
24
|
+
* happens to sit and answers confidently about the wrong repository.
|
|
25
|
+
*/
|
|
26
|
+
async function ask(exec, treePath, args) {
|
|
27
|
+
const result = await exec("git", ["-C", treePath, ...args]);
|
|
28
|
+
if (result.code !== 0)
|
|
29
|
+
return undefined;
|
|
30
|
+
const said = result.stdout.trim();
|
|
31
|
+
return said === "" ? undefined : said;
|
|
32
|
+
}
|
|
33
|
+
/** Publish with plain git. */
|
|
34
|
+
export function createGitPublisher(deps) {
|
|
35
|
+
const { exec } = deps;
|
|
36
|
+
return {
|
|
37
|
+
async push(treePath, options = {}) {
|
|
38
|
+
const branch = await ask(exec, treePath, [
|
|
39
|
+
"rev-parse",
|
|
40
|
+
"--abbrev-ref",
|
|
41
|
+
"HEAD",
|
|
42
|
+
]);
|
|
43
|
+
if (branch === undefined || branch === "HEAD") {
|
|
44
|
+
return {
|
|
45
|
+
kind: "refused",
|
|
46
|
+
reason: "This tree is not on a branch, so there is nothing to publish. Check one out, or make one with a branch action.",
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// An existing upstream is the honest default: pushing a tracked
|
|
50
|
+
// branch somewhere else is how a fork ends up with a copy of a
|
|
51
|
+
// branch nobody is watching.
|
|
52
|
+
const upstream = await ask(exec, treePath, [
|
|
53
|
+
"rev-parse",
|
|
54
|
+
"--abbrev-ref",
|
|
55
|
+
`${branch}@{upstream}`,
|
|
56
|
+
]);
|
|
57
|
+
const tracked = upstream !== undefined;
|
|
58
|
+
const remote = options.remote ?? upstream?.split("/")[0] ?? DEFAULT_REMOTE;
|
|
59
|
+
const known = await ask(exec, treePath, ["remote"]);
|
|
60
|
+
if (known === undefined || !known.split("\n").includes(remote)) {
|
|
61
|
+
return {
|
|
62
|
+
kind: "refused",
|
|
63
|
+
branch,
|
|
64
|
+
reason: `This tree has no remote called ${remote}${known === undefined ? " and no remotes at all" : `, only ${known.split("\n").join(", ")}`}, so ${branch} has nowhere to go.`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const args = ["-C", treePath, "push"];
|
|
68
|
+
// Lease, never bare force. The lease is what turns "overwrite it"
|
|
69
|
+
// into "overwrite it if it is still what I last saw".
|
|
70
|
+
if (options.replace)
|
|
71
|
+
args.push("--force-with-lease");
|
|
72
|
+
if (!tracked)
|
|
73
|
+
args.push("--set-upstream");
|
|
74
|
+
args.push(remote, branch);
|
|
75
|
+
const result = await exec("git", args);
|
|
76
|
+
if (result.code !== 0) {
|
|
77
|
+
const said = [result.stderr.trim(), result.stdout.trim()]
|
|
78
|
+
.filter((stream) => stream !== "")
|
|
79
|
+
.join("\n");
|
|
80
|
+
const stale = said.includes("stale info");
|
|
81
|
+
if (stale) {
|
|
82
|
+
return {
|
|
83
|
+
kind: "refused",
|
|
84
|
+
branch,
|
|
85
|
+
reason: `${remote}/${branch} moved since this tree last fetched it, so the lease was refused rather than overwriting work that arrived in the meantime. Fetch, look at what landed, then push again.\n\n${said}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// A branch that has diverged from its remote, which git reports with a
|
|
89
|
+
// hint to run `git pull`. That hint is the reason this case is handled
|
|
90
|
+
// rather than passed along: the commonest way to arrive here is having
|
|
91
|
+
// rebased, and pulling then merges the old history back into the
|
|
92
|
+
// rewritten one, producing exactly the tangle the rebase was for. The
|
|
93
|
+
// right move is the lease, and this layer knows that because it is the
|
|
94
|
+
// layer that does the rebasing.
|
|
95
|
+
//
|
|
96
|
+
// Which of the two happened is not knowable from here: a rewritten
|
|
97
|
+
// history and somebody else's push look the same at the ref. So both
|
|
98
|
+
// are named, with the counts, and the reader picks. Saying only the
|
|
99
|
+
// likelier one would be the same mistake git's hint makes.
|
|
100
|
+
if (!options.replace && said.includes("[rejected]")) {
|
|
101
|
+
const counts = await ask(exec, treePath, [
|
|
102
|
+
"rev-list",
|
|
103
|
+
"--left-right",
|
|
104
|
+
"--count",
|
|
105
|
+
`${branch}...${remote}/${branch}`,
|
|
106
|
+
]);
|
|
107
|
+
const [mine, theirs] = (counts ?? "").split(/\s+/);
|
|
108
|
+
const apart = mine && theirs
|
|
109
|
+
? `${remote}/${branch} has ${theirs} ${theirs === "1" ? "commit" : "commits"} this branch does not, and ${branch} has ${mine} ${mine === "1" ? "commit" : "commits"} it does not. `
|
|
110
|
+
: `${branch} and ${remote}/${branch} have diverged. `;
|
|
111
|
+
return {
|
|
112
|
+
kind: "refused",
|
|
113
|
+
branch,
|
|
114
|
+
reason: `${apart}Git refused rather than dropping either side.\n\nIf you rebased this branch, that is your own history rewritten: push again with replace, which is a lease and still refuses if the remote moved since this tree last fetched. If somebody else pushed, fetch and read what landed first. Git's own hint below suggests pulling, which would merge their work into your rebase.\n\n${said}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
kind: "refused",
|
|
119
|
+
branch,
|
|
120
|
+
reason: said || `git push exited ${result.code}`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Git says this on stdout or stderr depending on version, and it
|
|
124
|
+
// is the difference between a push that did something and one that
|
|
125
|
+
// politely did nothing.
|
|
126
|
+
const said = `${result.stdout}\n${result.stderr}`;
|
|
127
|
+
if (said.includes("Everything up-to-date")) {
|
|
128
|
+
return { kind: "already-there", branch, remote };
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
kind: "published",
|
|
132
|
+
branch,
|
|
133
|
+
remote,
|
|
134
|
+
tracked: !tracked,
|
|
135
|
+
replaced: options.replace === true,
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replaying a branch onto a new base.
|
|
3
|
+
*
|
|
4
|
+
* The interesting outcome is not success, it is the halt. A rebase that stops
|
|
5
|
+
* on a conflict leaves the tree in a state that is neither where it was nor
|
|
6
|
+
* where it was going, and a tool that reports "failed" and says no more has
|
|
7
|
+
* handed back a repository the caller now has to diagnose from scratch. So a
|
|
8
|
+
* halt is a first-class answer that names the commit it stopped on, the paths
|
|
9
|
+
* that disagree, and the two ways out.
|
|
10
|
+
*
|
|
11
|
+
* Nothing here decides for you. Continuing needs the conflicts resolved, which
|
|
12
|
+
* is work only a person or an agent reading the code can do, and abandoning
|
|
13
|
+
* throws away whatever replaying had achieved so far. Both are refusals to
|
|
14
|
+
* guess rather than missing features.
|
|
15
|
+
*/
|
|
16
|
+
import type { Exec } from "../exec/index.js";
|
|
17
|
+
/** Where a replay got to. */
|
|
18
|
+
export type RebaseOutcome = {
|
|
19
|
+
kind: "replayed";
|
|
20
|
+
branch: string;
|
|
21
|
+
onto: string;
|
|
22
|
+
commits: number;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "already-there";
|
|
25
|
+
branch: string;
|
|
26
|
+
onto: string;
|
|
27
|
+
} | {
|
|
28
|
+
kind: "halted";
|
|
29
|
+
branch: string;
|
|
30
|
+
onto: string;
|
|
31
|
+
/** The commit being replayed when it stopped, when git says. */
|
|
32
|
+
at?: string;
|
|
33
|
+
/** Paths that disagree, which is what has to be settled. */
|
|
34
|
+
conflicted: readonly string[];
|
|
35
|
+
} | {
|
|
36
|
+
kind: "refused";
|
|
37
|
+
reason: string;
|
|
38
|
+
};
|
|
39
|
+
/** How a halted replay ends. */
|
|
40
|
+
export type ResumeOutcome = {
|
|
41
|
+
kind: "replayed";
|
|
42
|
+
branch: string;
|
|
43
|
+
} | {
|
|
44
|
+
kind: "halted";
|
|
45
|
+
/**
|
|
46
|
+
* Which branch stopped, and onto what, when git's replay state says.
|
|
47
|
+
*
|
|
48
|
+
* Optional because a halt is reported from a tree whose HEAD is detached,
|
|
49
|
+
* so this is read from the replay in progress rather than from the tree,
|
|
50
|
+
* and a state git has half torn down may no longer say. It went unread
|
|
51
|
+
* for a while and the second halt of a stack printed no branch at all,
|
|
52
|
+
* which is the moment a reader most needs to know which one.
|
|
53
|
+
*/
|
|
54
|
+
branch?: string;
|
|
55
|
+
onto?: string;
|
|
56
|
+
at?: string;
|
|
57
|
+
conflicted: readonly string[];
|
|
58
|
+
} | {
|
|
59
|
+
kind: "abandoned";
|
|
60
|
+
branch: string;
|
|
61
|
+
} | {
|
|
62
|
+
kind: "refused";
|
|
63
|
+
reason: string;
|
|
64
|
+
};
|
|
65
|
+
/** Replaying work in a tree. */
|
|
66
|
+
export interface WorkRebaser {
|
|
67
|
+
rebase(treePath: string, onto: string): Promise<RebaseOutcome>;
|
|
68
|
+
/** Carry on a halted replay, once the conflicts are settled. */
|
|
69
|
+
resume(treePath: string): Promise<ResumeOutcome>;
|
|
70
|
+
/** Put the tree back the way it was before the replay started. */
|
|
71
|
+
abandon(treePath: string): Promise<ResumeOutcome>;
|
|
72
|
+
/** Whether a replay is part-way through, which changes what is safe. */
|
|
73
|
+
halted(treePath: string): Promise<boolean>;
|
|
74
|
+
}
|
|
75
|
+
/** Replay with plain git. */
|
|
76
|
+
export declare function createGitRebaser(deps: {
|
|
77
|
+
exec: Exec;
|
|
78
|
+
}): WorkRebaser;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replaying a branch onto a new base.
|
|
3
|
+
*
|
|
4
|
+
* The interesting outcome is not success, it is the halt. A rebase that stops
|
|
5
|
+
* on a conflict leaves the tree in a state that is neither where it was nor
|
|
6
|
+
* where it was going, and a tool that reports "failed" and says no more has
|
|
7
|
+
* handed back a repository the caller now has to diagnose from scratch. So a
|
|
8
|
+
* halt is a first-class answer that names the commit it stopped on, the paths
|
|
9
|
+
* that disagree, and the two ways out.
|
|
10
|
+
*
|
|
11
|
+
* Nothing here decides for you. Continuing needs the conflicts resolved, which
|
|
12
|
+
* is work only a person or an agent reading the code can do, and abandoning
|
|
13
|
+
* throws away whatever replaying had achieved so far. Both are refusals to
|
|
14
|
+
* guess rather than missing features.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
17
|
+
import { isAbsolute, join } from "node:path";
|
|
18
|
+
import { unattended } from "./unattended.js";
|
|
19
|
+
/** Read one git value, scoped to the tree, or undefined when git says nothing. */
|
|
20
|
+
async function ask(exec, treePath, args) {
|
|
21
|
+
const result = await exec("git", ["-C", treePath, ...args]);
|
|
22
|
+
if (result.code !== 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
const said = result.stdout.trim();
|
|
25
|
+
return said === "" ? undefined : said;
|
|
26
|
+
}
|
|
27
|
+
/** Paths git reports as unmerged. */
|
|
28
|
+
async function conflictedIn(exec, treePath) {
|
|
29
|
+
const said = await ask(exec, treePath, [
|
|
30
|
+
"diff",
|
|
31
|
+
"--name-only",
|
|
32
|
+
"--diff-filter=U",
|
|
33
|
+
]);
|
|
34
|
+
return said === undefined ? [] : said.split("\n").filter((one) => one !== "");
|
|
35
|
+
}
|
|
36
|
+
/** Replay with plain git. */
|
|
37
|
+
export function createGitRebaser(deps) {
|
|
38
|
+
const { exec } = deps;
|
|
39
|
+
async function isHalted(treePath) {
|
|
40
|
+
// Git keeps a directory while a rebase is in progress, and asking for it
|
|
41
|
+
// is cheaper and more certain than parsing status output.
|
|
42
|
+
//
|
|
43
|
+
// Looked at directly rather than through `test -d`. A subprocess runs in
|
|
44
|
+
// the process's own working directory, and git reports this path relative
|
|
45
|
+
// to the tree, so the probe was asking about a directory beside whatever
|
|
46
|
+
// directory pi happened to be started in. It answered "not rebasing" for
|
|
47
|
+
// a tree that was mid-rebase, which is the answer that makes resume and
|
|
48
|
+
// abandon refuse to work at the exact moment they are needed.
|
|
49
|
+
for (const what of ["rebase-merge", "rebase-apply"]) {
|
|
50
|
+
const said = await ask(exec, treePath, ["rev-parse", "--git-path", what]);
|
|
51
|
+
if (said === undefined)
|
|
52
|
+
continue;
|
|
53
|
+
if (existsSync(isAbsolute(said) ? said : join(treePath, said)))
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* What the replay in progress is doing, as far as git's state says.
|
|
60
|
+
*
|
|
61
|
+
* Read from the replay rather than from the tree, because a tree part-way
|
|
62
|
+
* through one has a detached HEAD: every ordinary way of asking which branch
|
|
63
|
+
* you are on answers "HEAD", which is why this went unreported for so long.
|
|
64
|
+
* Git writes the answer down, so the fix is to read what it wrote.
|
|
65
|
+
*
|
|
66
|
+
* Every field is best-effort. Nothing here is worth failing a halt over: a
|
|
67
|
+
* halt with no branch named is thin, and a halt that errored while trying to
|
|
68
|
+
* name one is worse.
|
|
69
|
+
*/
|
|
70
|
+
async function replaying(treePath) {
|
|
71
|
+
const read = async (what) => {
|
|
72
|
+
const said = await ask(exec, treePath, [
|
|
73
|
+
"rev-parse",
|
|
74
|
+
"--git-path",
|
|
75
|
+
`rebase-merge/${what}`,
|
|
76
|
+
]);
|
|
77
|
+
if (said === undefined)
|
|
78
|
+
return undefined;
|
|
79
|
+
const where = isAbsolute(said) ? said : join(treePath, said);
|
|
80
|
+
if (!existsSync(where))
|
|
81
|
+
return undefined;
|
|
82
|
+
try {
|
|
83
|
+
const text = readFileSync(where, "utf8").trim();
|
|
84
|
+
return text === "" ? undefined : text;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Unreadable is the same as unsaid here: the halt is still a halt.
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const head = await read("head-name");
|
|
92
|
+
const onto = await read("onto");
|
|
93
|
+
const at = await ask(exec, treePath, [
|
|
94
|
+
"rev-parse",
|
|
95
|
+
"--short",
|
|
96
|
+
"REBASE_HEAD",
|
|
97
|
+
]);
|
|
98
|
+
return {
|
|
99
|
+
// Git records the full ref; a reader wants the branch.
|
|
100
|
+
...(head ? { branch: head.replace(/^refs\/heads\//, "") } : {}),
|
|
101
|
+
...(onto ? { onto: await nameFor(treePath, onto) } : {}),
|
|
102
|
+
...(at ? { at } : {}),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* What to call the commit a replay is heading for.
|
|
107
|
+
*
|
|
108
|
+
* Git records the target as a commit, because by then the ref that named it is
|
|
109
|
+
* beside the point: the replay is onto that commit whatever anybody does to the
|
|
110
|
+
* branch afterwards. But a halt reported from a resume then said "onto fc00dccd"
|
|
111
|
+
* where the same halt from starting the replay said "onto main", and the two are
|
|
112
|
+
* the same event to the person reading them.
|
|
113
|
+
*
|
|
114
|
+
* So the commit is named after a branch when exactly one branch is sitting on it.
|
|
115
|
+
* Exactly one, because more than one is genuinely ambiguous: the replay was onto
|
|
116
|
+
* some ref and nothing here records which, so picking one would be inventing the
|
|
117
|
+
* answer rather than reading it. The commit is the honest fallback, and it is
|
|
118
|
+
* what git had.
|
|
119
|
+
*/
|
|
120
|
+
async function nameFor(treePath, commit) {
|
|
121
|
+
const short = commit.slice(0, 8);
|
|
122
|
+
const said = await ask(exec, treePath, [
|
|
123
|
+
"for-each-ref",
|
|
124
|
+
"--format=%(refname:short)",
|
|
125
|
+
"--points-at",
|
|
126
|
+
commit,
|
|
127
|
+
"refs/heads",
|
|
128
|
+
]);
|
|
129
|
+
if (said === undefined)
|
|
130
|
+
return short;
|
|
131
|
+
const names = said.split("\n").filter((one) => one !== "");
|
|
132
|
+
return names.length === 1 && names[0] !== undefined ? names[0] : short;
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
halted: isHalted,
|
|
136
|
+
async rebase(treePath, onto) {
|
|
137
|
+
if (await isHalted(treePath)) {
|
|
138
|
+
return {
|
|
139
|
+
kind: "refused",
|
|
140
|
+
reason: "A replay is already part-way through in this tree. Settle it first: resume it once the conflicts are resolved, or abandon it to put the tree back.",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const branch = await ask(exec, treePath, [
|
|
144
|
+
"rev-parse",
|
|
145
|
+
"--abbrev-ref",
|
|
146
|
+
"HEAD",
|
|
147
|
+
]);
|
|
148
|
+
if (branch === undefined || branch === "HEAD") {
|
|
149
|
+
return {
|
|
150
|
+
kind: "refused",
|
|
151
|
+
reason: "This tree is not on a branch, so there is nothing to replay.",
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Uncommitted work and a rebase do not mix, and git's own autostash
|
|
155
|
+
// would hide the problem rather than state it. A caller who wants
|
|
156
|
+
// the changes kept should commit them; one who does not should say
|
|
157
|
+
// so out loud.
|
|
158
|
+
const dirty = await ask(exec, treePath, ["status", "--porcelain"]);
|
|
159
|
+
if (dirty !== undefined) {
|
|
160
|
+
return {
|
|
161
|
+
kind: "refused",
|
|
162
|
+
reason: `This tree has uncommitted changes, and replaying would have to move them. Record them first, or set them aside deliberately.\n\n${dirty}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const before = await ask(exec, treePath, [
|
|
166
|
+
"rev-list",
|
|
167
|
+
"--count",
|
|
168
|
+
`${onto}..HEAD`,
|
|
169
|
+
]);
|
|
170
|
+
if (before === "0") {
|
|
171
|
+
return { kind: "already-there", branch, onto };
|
|
172
|
+
}
|
|
173
|
+
const result = await exec("git", unattended(["-C", treePath, "rebase", onto]));
|
|
174
|
+
if (result.code === 0) {
|
|
175
|
+
return {
|
|
176
|
+
kind: "replayed",
|
|
177
|
+
branch,
|
|
178
|
+
onto,
|
|
179
|
+
commits: Number.parseInt(before ?? "0", 10) || 0,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const conflicted = await conflictedIn(exec, treePath);
|
|
183
|
+
if (conflicted.length > 0 || (await isHalted(treePath))) {
|
|
184
|
+
const at = await ask(exec, treePath, [
|
|
185
|
+
"rev-parse",
|
|
186
|
+
"--short",
|
|
187
|
+
"REBASE_HEAD",
|
|
188
|
+
]);
|
|
189
|
+
return {
|
|
190
|
+
kind: "halted",
|
|
191
|
+
branch,
|
|
192
|
+
onto,
|
|
193
|
+
...(at === undefined ? {} : { at }),
|
|
194
|
+
conflicted,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const said = [result.stderr.trim(), result.stdout.trim()]
|
|
198
|
+
.filter((stream) => stream !== "")
|
|
199
|
+
.join("\n");
|
|
200
|
+
return {
|
|
201
|
+
kind: "refused",
|
|
202
|
+
reason: said || `git rebase exited ${result.code}`,
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
async resume(treePath) {
|
|
206
|
+
if (!(await isHalted(treePath))) {
|
|
207
|
+
return {
|
|
208
|
+
kind: "refused",
|
|
209
|
+
reason: "No replay is part-way through in this tree.",
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
const left = await conflictedIn(exec, treePath);
|
|
213
|
+
if (left.length > 0) {
|
|
214
|
+
return {
|
|
215
|
+
kind: "halted",
|
|
216
|
+
conflicted: left,
|
|
217
|
+
...(await replaying(treePath)),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// The call that hung. Continuing a conflicted pick commits with `-e`,
|
|
221
|
+
// so without this git opens an editor on a stdin nobody is attached to
|
|
222
|
+
// and waits for a human who will never arrive.
|
|
223
|
+
const result = await exec("git", unattended(["-C", treePath, "rebase", "--continue"]));
|
|
224
|
+
if (result.code !== 0) {
|
|
225
|
+
const still = await conflictedIn(exec, treePath);
|
|
226
|
+
if (still.length > 0)
|
|
227
|
+
return {
|
|
228
|
+
kind: "halted",
|
|
229
|
+
conflicted: still,
|
|
230
|
+
...(await replaying(treePath)),
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
kind: "refused",
|
|
234
|
+
reason: result.stderr.trim() ||
|
|
235
|
+
`git rebase --continue exited ${result.code}`,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const branch = (await ask(exec, treePath, ["rev-parse", "--abbrev-ref", "HEAD"])) ??
|
|
239
|
+
"HEAD";
|
|
240
|
+
return { kind: "replayed", branch };
|
|
241
|
+
},
|
|
242
|
+
async abandon(treePath) {
|
|
243
|
+
if (!(await isHalted(treePath))) {
|
|
244
|
+
return {
|
|
245
|
+
kind: "refused",
|
|
246
|
+
reason: "No replay is part-way through in this tree.",
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const result = await exec("git", unattended(["-C", treePath, "rebase", "--abort"]));
|
|
250
|
+
if (result.code !== 0) {
|
|
251
|
+
return {
|
|
252
|
+
kind: "refused",
|
|
253
|
+
reason: result.stderr.trim() || `git rebase --abort exited ${result.code}`,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
const branch = (await ask(exec, treePath, ["rev-parse", "--abbrev-ref", "HEAD"])) ??
|
|
257
|
+
"HEAD";
|
|
258
|
+
return { kind: "abandoned", branch };
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taking back a tree nothing owns any more.
|
|
3
|
+
*
|
|
4
|
+
* This is the one cleanup verb here that acts rather than reporting,
|
|
5
|
+
* and the asymmetry with {@link tidyPlan} is deliberate. Deleting a
|
|
6
|
+
* branch destroys the only name a commit had, so tidy refuses to do
|
|
7
|
+
* it. Removing a worktree destroys a directory and git's bookkeeping
|
|
8
|
+
* for it, and leaves the branch exactly where it was: the commits stay
|
|
9
|
+
* reachable, and re-cutting the tree at the same branch puts a person
|
|
10
|
+
* back where they were. A report whose only follow-through is the
|
|
11
|
+
* `git worktree` call the guide says never to make is not a path, so
|
|
12
|
+
* this supplies the path.
|
|
13
|
+
*
|
|
14
|
+
* What may be taken back is {@link orphanedTrees}'s decision, and this
|
|
15
|
+
* removes nothing it did not offer. The dirty tree and the tree whose
|
|
16
|
+
* work trunk cannot vouch for stay where they are.
|
|
17
|
+
*/
|
|
18
|
+
import { type Exec } from "../exec/index.js";
|
|
19
|
+
import type { Reclaimable } from "./tidy.js";
|
|
20
|
+
/** What became of one tree. */
|
|
21
|
+
export type ReclaimedTree = {
|
|
22
|
+
kind: "reclaimed";
|
|
23
|
+
path: string;
|
|
24
|
+
branch?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Git would not let go of it, and the tree is still there.
|
|
28
|
+
*
|
|
29
|
+
* Reported per tree rather than thrown, because the whole point of
|
|
30
|
+
* this verb is a backlog: one tree git objects to must not strand
|
|
31
|
+
* the fourteen behind it.
|
|
32
|
+
*/
|
|
33
|
+
| {
|
|
34
|
+
kind: "refused";
|
|
35
|
+
path: string;
|
|
36
|
+
why: string;
|
|
37
|
+
};
|
|
38
|
+
/** What a sweep did, tree by tree, in the order it went. */
|
|
39
|
+
export interface ReclaimOutcome {
|
|
40
|
+
trees: ReclaimedTree[];
|
|
41
|
+
}
|
|
42
|
+
/** Where a reclaim runs and what it runs with. */
|
|
43
|
+
export interface ReclaimDeps {
|
|
44
|
+
exec: Exec;
|
|
45
|
+
/** The checkout git's worktree bookkeeping lives in. */
|
|
46
|
+
mainPath: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Take back each tree offered, and say what happened to every one.
|
|
50
|
+
*
|
|
51
|
+
* The branch is never touched. `git worktree remove` takes the
|
|
52
|
+
* directory and the administrative files; whatever was checked out
|
|
53
|
+
* there is still a branch afterwards, which is what makes this
|
|
54
|
+
* recoverable and therefore allowed to act.
|
|
55
|
+
*/
|
|
56
|
+
export declare function reclaimTrees(deps: ReclaimDeps, offered: readonly Reclaimable[]): Promise<ReclaimOutcome>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taking back a tree nothing owns any more.
|
|
3
|
+
*
|
|
4
|
+
* This is the one cleanup verb here that acts rather than reporting,
|
|
5
|
+
* and the asymmetry with {@link tidyPlan} is deliberate. Deleting a
|
|
6
|
+
* branch destroys the only name a commit had, so tidy refuses to do
|
|
7
|
+
* it. Removing a worktree destroys a directory and git's bookkeeping
|
|
8
|
+
* for it, and leaves the branch exactly where it was: the commits stay
|
|
9
|
+
* reachable, and re-cutting the tree at the same branch puts a person
|
|
10
|
+
* back where they were. A report whose only follow-through is the
|
|
11
|
+
* `git worktree` call the guide says never to make is not a path, so
|
|
12
|
+
* this supplies the path.
|
|
13
|
+
*
|
|
14
|
+
* What may be taken back is {@link orphanedTrees}'s decision, and this
|
|
15
|
+
* removes nothing it did not offer. The dirty tree and the tree whose
|
|
16
|
+
* work trunk cannot vouch for stay where they are.
|
|
17
|
+
*/
|
|
18
|
+
import { run } from "../exec/index.js";
|
|
19
|
+
import { displayPath } from "../ui/path.js";
|
|
20
|
+
/**
|
|
21
|
+
* Take back each tree offered, and say what happened to every one.
|
|
22
|
+
*
|
|
23
|
+
* The branch is never touched. `git worktree remove` takes the
|
|
24
|
+
* directory and the administrative files; whatever was checked out
|
|
25
|
+
* there is still a branch afterwards, which is what makes this
|
|
26
|
+
* recoverable and therefore allowed to act.
|
|
27
|
+
*/
|
|
28
|
+
export async function reclaimTrees(deps, offered) {
|
|
29
|
+
const trees = [];
|
|
30
|
+
for (const tree of offered) {
|
|
31
|
+
try {
|
|
32
|
+
await run(deps.exec, "git", ["-C", deps.mainPath, "worktree", "remove", tree.path], `Taking back ${displayPath(tree.path)}`);
|
|
33
|
+
trees.push({
|
|
34
|
+
kind: "reclaimed",
|
|
35
|
+
path: tree.path,
|
|
36
|
+
...(tree.branch ? { branch: tree.branch } : {}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
// Git's own words. It refuses a tree with anything untracked in
|
|
41
|
+
// it even when status called the tree clean, since an ignored
|
|
42
|
+
// build directory is untracked too, and hearing that from git
|
|
43
|
+
// beats being told the tree "could not be removed".
|
|
44
|
+
trees.push({
|
|
45
|
+
kind: "refused",
|
|
46
|
+
path: tree.path,
|
|
47
|
+
why: error instanceof Error ? error.message : String(error),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { trees };
|
|
52
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree provider registration.
|
|
3
|
+
*
|
|
4
|
+
* Process-global and keyed by id, so a provider in another package
|
|
5
|
+
* registers itself and is used, whichever order the two happened to
|
|
6
|
+
* load in. Mirrors the review and tree registries and uses the same
|
|
7
|
+
* shared globalThis-slot helper, so a module reimport does not lose
|
|
8
|
+
* registrations.
|
|
9
|
+
*
|
|
10
|
+
* Listing sorts by specificity rather than registration order,
|
|
11
|
+
* because the order providers are consulted in is part of the
|
|
12
|
+
* contract and no caller should have to re-sort to get it right.
|
|
13
|
+
*/
|
|
14
|
+
import type { TreeProvider } from "./broker.js";
|
|
15
|
+
/**
|
|
16
|
+
* Register a tree provider, replacing any provider already
|
|
17
|
+
* registered under the same id.
|
|
18
|
+
*
|
|
19
|
+
* Replacing rather than adding matters: a provider re-registers
|
|
20
|
+
* after a reload, and the host announces itself again, so
|
|
21
|
+
* registering twice is the ordinary case rather than a mistake.
|
|
22
|
+
*/
|
|
23
|
+
export declare function registerTreeProvider(provider: TreeProvider): void;
|
|
24
|
+
/** Remove a provider from the registry. Idempotent. */
|
|
25
|
+
export declare function unregisterTreeProvider(id: string): void;
|
|
26
|
+
/** Every registered provider, most specific first. */
|
|
27
|
+
export declare function listTreeProviders(): TreeProvider[];
|
|
28
|
+
/** Empty the registry. Intended for tests. */
|
|
29
|
+
export declare function clearTreeProviders(): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree provider registration.
|
|
3
|
+
*
|
|
4
|
+
* Process-global and keyed by id, so a provider in another package
|
|
5
|
+
* registers itself and is used, whichever order the two happened to
|
|
6
|
+
* load in. Mirrors the review and tree registries and uses the same
|
|
7
|
+
* shared globalThis-slot helper, so a module reimport does not lose
|
|
8
|
+
* registrations.
|
|
9
|
+
*
|
|
10
|
+
* Listing sorts by specificity rather than registration order,
|
|
11
|
+
* because the order providers are consulted in is part of the
|
|
12
|
+
* contract and no caller should have to re-sort to get it right.
|
|
13
|
+
*/
|
|
14
|
+
import { createGlobalSymbolRegistry } from "../internal/registry/global-symbol-registry.js";
|
|
15
|
+
const registry = createGlobalSymbolRegistry({
|
|
16
|
+
slot: "pi:agentic-harness:work-tree-providers",
|
|
17
|
+
getId: (provider) => provider.id,
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Register a tree provider, replacing any provider already
|
|
21
|
+
* registered under the same id.
|
|
22
|
+
*
|
|
23
|
+
* Replacing rather than adding matters: a provider re-registers
|
|
24
|
+
* after a reload, and the host announces itself again, so
|
|
25
|
+
* registering twice is the ordinary case rather than a mistake.
|
|
26
|
+
*/
|
|
27
|
+
export function registerTreeProvider(provider) {
|
|
28
|
+
registry.register(provider);
|
|
29
|
+
}
|
|
30
|
+
/** Remove a provider from the registry. Idempotent. */
|
|
31
|
+
export function unregisterTreeProvider(id) {
|
|
32
|
+
registry.unregister(id);
|
|
33
|
+
}
|
|
34
|
+
/** Every registered provider, most specific first. */
|
|
35
|
+
export function listTreeProviders() {
|
|
36
|
+
return [...registry.list()].sort((a, b) => b.specificity - a.specificity);
|
|
37
|
+
}
|
|
38
|
+
/** Empty the registry. Intended for tests. */
|
|
39
|
+
export function clearTreeProviders() {
|
|
40
|
+
registry.clear();
|
|
41
|
+
}
|