@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,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux driver. Uses `tmux new-window` for tabs and windows
|
|
3
|
+
* (tmux has no separate window concept; a new tmux "window"
|
|
4
|
+
* is what we call a tab), and `tmux split-window` for panes.
|
|
5
|
+
*
|
|
6
|
+
* Available when both:
|
|
7
|
+
*
|
|
8
|
+
* - The `tmux` binary is on PATH.
|
|
9
|
+
* - The current process is inside a tmux session (`TMUX`
|
|
10
|
+
* env var is set). Otherwise the new tab has nowhere to
|
|
11
|
+
* attach.
|
|
12
|
+
*/
|
|
13
|
+
import { execFile, spawn as nodeSpawn } from "node:child_process";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
import { wrapCommandWithEnv } from "./shared.js";
|
|
16
|
+
const execFileAsync = promisify(execFile);
|
|
17
|
+
async function tmuxOnPath() {
|
|
18
|
+
try {
|
|
19
|
+
await execFileAsync("command", ["-v", "tmux"]);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
try {
|
|
24
|
+
await execFileAsync("which", ["tmux"]);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function buildArgs(request) {
|
|
33
|
+
const args = [];
|
|
34
|
+
switch (request.layout) {
|
|
35
|
+
case "tab":
|
|
36
|
+
case "window":
|
|
37
|
+
// Tmux's "window" is what other emulators call a
|
|
38
|
+
// tab. There is no native multi-window concept;
|
|
39
|
+
// callers asking for a window get a new tab.
|
|
40
|
+
args.push("new-window");
|
|
41
|
+
if (request.title)
|
|
42
|
+
args.push("-n", request.title);
|
|
43
|
+
if (request.cwd)
|
|
44
|
+
args.push("-c", request.cwd);
|
|
45
|
+
break;
|
|
46
|
+
case "pane":
|
|
47
|
+
args.push("split-window");
|
|
48
|
+
if (request.cwd)
|
|
49
|
+
args.push("-c", request.cwd);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
// Tmux runs the spawned command in the server's
|
|
53
|
+
// environment, not the calling CLI's. Wrapping the
|
|
54
|
+
// command in a shell that sets env vars and execs
|
|
55
|
+
// the target is portable across tmux versions and
|
|
56
|
+
// avoids relying on `-e KEY=value`, which was added
|
|
57
|
+
// in tmux 3.0 and not always present.
|
|
58
|
+
// No command means the caller wants the surface itself, so let
|
|
59
|
+
// tmux start the user's own login shell: that is the only way the
|
|
60
|
+
// shell's startup files run.
|
|
61
|
+
if (request.command === undefined)
|
|
62
|
+
return args;
|
|
63
|
+
args.push(wrapCommandWithEnv(request.command, request.env));
|
|
64
|
+
return args;
|
|
65
|
+
}
|
|
66
|
+
export const tmux = {
|
|
67
|
+
id: "tmux",
|
|
68
|
+
async available() {
|
|
69
|
+
if (!process.env.TMUX)
|
|
70
|
+
return false;
|
|
71
|
+
return tmuxOnPath();
|
|
72
|
+
},
|
|
73
|
+
async spawn(request) {
|
|
74
|
+
const args = buildArgs(request);
|
|
75
|
+
await new Promise((resolve, reject) => {
|
|
76
|
+
const child = nodeSpawn("tmux", args, {
|
|
77
|
+
stdio: "ignore",
|
|
78
|
+
});
|
|
79
|
+
child.on("error", reject);
|
|
80
|
+
child.on("exit", (code) => {
|
|
81
|
+
if (code === 0)
|
|
82
|
+
resolve();
|
|
83
|
+
else
|
|
84
|
+
reject(new Error(`tmux exited with code ${code}`));
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wezterm driver. Uses `wezterm cli spawn` to launch new
|
|
3
|
+
* tabs and windows, and `wezterm cli split-pane` for panes.
|
|
4
|
+
*
|
|
5
|
+
* Available when the `wezterm` binary is on PATH. We don't
|
|
6
|
+
* verify that wezterm is the active terminal: the `cli`
|
|
7
|
+
* subcommand connects to the running mux over a socket, so
|
|
8
|
+
* it works from anywhere as long as wezterm itself is
|
|
9
|
+
* running somewhere reachable.
|
|
10
|
+
*/
|
|
11
|
+
import { type TerminalDriver, type TerminalLivenessCapability, type TerminalProbe, type TerminalSessionHandle, type TerminalTypeCapability } from "../../../terminal/types.js";
|
|
12
|
+
/** What a `wezterm cli list` read observed, or that it could not read. */
|
|
13
|
+
export type WeztermObservation = {
|
|
14
|
+
reachable: false;
|
|
15
|
+
} | {
|
|
16
|
+
reachable: true;
|
|
17
|
+
hostId: string;
|
|
18
|
+
scope: string;
|
|
19
|
+
livePaneIds: ReadonlySet<string>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Classify each recorded pane handle against a live observation. A
|
|
23
|
+
* pane is present or absent only when the observation is reachable
|
|
24
|
+
* and the handle's host and scope match the observed mux; otherwise
|
|
25
|
+
* the honest answer is unknown, because a pane id is meaningful only
|
|
26
|
+
* within the socket and host that issued it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function classifyWeztermPanes(handles: readonly TerminalSessionHandle[], observation: WeztermObservation): Map<string, TerminalProbe>;
|
|
29
|
+
/**
|
|
30
|
+
* The pane id `wezterm cli spawn` prints, or undefined when the
|
|
31
|
+
* output is not one. The cli prints the new pane id on stdout,
|
|
32
|
+
* which is the only reliable way to name what was just created.
|
|
33
|
+
*/
|
|
34
|
+
export declare function paneIdFromSpawn(stdout: string): string | undefined;
|
|
35
|
+
export declare const wezterm: TerminalDriver & TerminalLivenessCapability & TerminalTypeCapability;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wezterm driver. Uses `wezterm cli spawn` to launch new
|
|
3
|
+
* tabs and windows, and `wezterm cli split-pane` for panes.
|
|
4
|
+
*
|
|
5
|
+
* Available when the `wezterm` binary is on PATH. We don't
|
|
6
|
+
* verify that wezterm is the active terminal: the `cli`
|
|
7
|
+
* subcommand connects to the running mux over a socket, so
|
|
8
|
+
* it works from anywhere as long as wezterm itself is
|
|
9
|
+
* running somewhere reachable.
|
|
10
|
+
*/
|
|
11
|
+
import { execFile } from "node:child_process";
|
|
12
|
+
import { hostname } from "node:os";
|
|
13
|
+
import { promisify } from "node:util";
|
|
14
|
+
import { terminalHandleKey, } from "../../../terminal/types.js";
|
|
15
|
+
import { wrapCommandWithEnv } from "./shared.js";
|
|
16
|
+
/**
|
|
17
|
+
* Classify each recorded pane handle against a live observation. A
|
|
18
|
+
* pane is present or absent only when the observation is reachable
|
|
19
|
+
* and the handle's host and scope match the observed mux; otherwise
|
|
20
|
+
* the honest answer is unknown, because a pane id is meaningful only
|
|
21
|
+
* within the socket and host that issued it.
|
|
22
|
+
*/
|
|
23
|
+
export function classifyWeztermPanes(handles, observation) {
|
|
24
|
+
const out = new Map();
|
|
25
|
+
for (const handle of handles) {
|
|
26
|
+
out.set(terminalHandleKey(handle), classifyOne(handle, observation));
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
function classifyOne(handle, observation) {
|
|
31
|
+
if (!observation.reachable)
|
|
32
|
+
return "unknown";
|
|
33
|
+
if (handle.hostId !== observation.hostId)
|
|
34
|
+
return "unknown";
|
|
35
|
+
if (!handle.scope || handle.scope !== observation.scope)
|
|
36
|
+
return "unknown";
|
|
37
|
+
return observation.livePaneIds.has(handle.value) ? "present" : "absent";
|
|
38
|
+
}
|
|
39
|
+
const execFileAsync = promisify(execFile);
|
|
40
|
+
async function isOnPath(binary) {
|
|
41
|
+
try {
|
|
42
|
+
await execFileAsync("command", ["-v", binary]);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
try {
|
|
47
|
+
await execFileAsync("which", [binary]);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function buildArgs(request) {
|
|
56
|
+
const args = ["cli"];
|
|
57
|
+
switch (request.layout) {
|
|
58
|
+
case "tab":
|
|
59
|
+
args.push("spawn");
|
|
60
|
+
break;
|
|
61
|
+
case "window":
|
|
62
|
+
args.push("spawn", "--new-window");
|
|
63
|
+
break;
|
|
64
|
+
case "pane":
|
|
65
|
+
args.push("split-pane");
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
if (request.cwd)
|
|
69
|
+
args.push("--cwd", request.cwd);
|
|
70
|
+
// No command means the caller wants the surface itself: let
|
|
71
|
+
// wezterm start the user's own login shell, which is the only way
|
|
72
|
+
// the shell's startup files run. Handing even a trivial command to
|
|
73
|
+
// `-c` skips them.
|
|
74
|
+
if (request.command === undefined)
|
|
75
|
+
return args;
|
|
76
|
+
// `wezterm cli` hands the command to the mux daemon,
|
|
77
|
+
// which runs it in the daemon's own environment. The
|
|
78
|
+
// Node-side env on `nodeSpawn` reaches only the cli
|
|
79
|
+
// process itself, not the new pane, so env that must
|
|
80
|
+
// reach the pane has to be wrapped into the command.
|
|
81
|
+
const command = wrapCommandWithEnv(request.command, request.env);
|
|
82
|
+
args.push("--", "/bin/sh", "-c", command);
|
|
83
|
+
return args;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The pane id `wezterm cli spawn` prints, or undefined when the
|
|
87
|
+
* output is not one. The cli prints the new pane id on stdout,
|
|
88
|
+
* which is the only reliable way to name what was just created.
|
|
89
|
+
*/
|
|
90
|
+
export function paneIdFromSpawn(stdout) {
|
|
91
|
+
const trimmed = stdout.trim();
|
|
92
|
+
return /^\d+$/.test(trimmed) ? trimmed : undefined;
|
|
93
|
+
}
|
|
94
|
+
export const wezterm = {
|
|
95
|
+
id: "wezterm",
|
|
96
|
+
async available() {
|
|
97
|
+
return isOnPath("wezterm");
|
|
98
|
+
},
|
|
99
|
+
async spawn(request) {
|
|
100
|
+
const args = buildArgs(request);
|
|
101
|
+
// Wait for the cli to finish rather than detaching, so its
|
|
102
|
+
// stdout can be read: it prints the new pane id, and without
|
|
103
|
+
// that the caller has no way to name what it just created. The
|
|
104
|
+
// cli returns as soon as the mux has spawned the pane, so this
|
|
105
|
+
// does not wait on the pane's own lifetime.
|
|
106
|
+
try {
|
|
107
|
+
const { stdout } = await execFileAsync("wezterm", args);
|
|
108
|
+
const pane = paneIdFromSpawn(stdout);
|
|
109
|
+
if (!pane)
|
|
110
|
+
return undefined;
|
|
111
|
+
return {
|
|
112
|
+
driverId: "wezterm",
|
|
113
|
+
kind: "wezterm-pane",
|
|
114
|
+
hostId: hostname(),
|
|
115
|
+
value: pane,
|
|
116
|
+
...(process.env.WEZTERM_UNIX_SOCKET
|
|
117
|
+
? { scope: process.env.WEZTERM_UNIX_SOCKET }
|
|
118
|
+
: {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
// A spawn that failed is worth reporting: the caller asked for
|
|
123
|
+
// a surface and has not got one.
|
|
124
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
async typeInto(handle, text) {
|
|
128
|
+
// --no-paste sends the text as individual keystrokes rather than
|
|
129
|
+
// a bracketed paste, so the shell treats it as typed input and
|
|
130
|
+
// runs it on the newline.
|
|
131
|
+
await execFileAsync("wezterm", ["cli", "send-text", "--pane-id", handle.value, "--no-paste", text], { env: process.env });
|
|
132
|
+
},
|
|
133
|
+
identifyCurrent() {
|
|
134
|
+
const pane = process.env.WEZTERM_PANE;
|
|
135
|
+
if (!pane)
|
|
136
|
+
return undefined;
|
|
137
|
+
return {
|
|
138
|
+
driverId: "wezterm",
|
|
139
|
+
kind: "wezterm-pane",
|
|
140
|
+
hostId: hostname(),
|
|
141
|
+
scope: process.env.WEZTERM_UNIX_SOCKET,
|
|
142
|
+
value: pane,
|
|
143
|
+
};
|
|
144
|
+
},
|
|
145
|
+
async probe(handles, signal) {
|
|
146
|
+
const observation = await observePanes(signal);
|
|
147
|
+
return classifyWeztermPanes(handles, observation);
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
/** Read the live pane set from the wezterm mux, or report it unreachable. */
|
|
151
|
+
async function observePanes(signal) {
|
|
152
|
+
const socket = process.env.WEZTERM_UNIX_SOCKET;
|
|
153
|
+
if (!socket)
|
|
154
|
+
return { reachable: false };
|
|
155
|
+
try {
|
|
156
|
+
const { stdout } = await execFileAsync("wezterm", ["cli", "list", "--format", "json"], { signal });
|
|
157
|
+
const panes = JSON.parse(stdout);
|
|
158
|
+
const live = new Set();
|
|
159
|
+
for (const pane of panes) {
|
|
160
|
+
if (typeof pane.pane_id === "number")
|
|
161
|
+
live.add(String(pane.pane_id));
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
reachable: true,
|
|
165
|
+
hostId: hostname(),
|
|
166
|
+
scope: socket,
|
|
167
|
+
livePaneIds: live,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Mux unreachable, wezterm absent, or unparseable output: an
|
|
172
|
+
// observation failure is unknown, never a false absent.
|
|
173
|
+
return { reachable: false };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal driver registry: process-global map from driver
|
|
3
|
+
* id to `TerminalDriver`. Symmetric with refs and tree
|
|
4
|
+
* registries; uses the shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import type { TerminalDriver } from "../../terminal/types.js";
|
|
8
|
+
export declare const register: (driver: TerminalDriver) => void;
|
|
9
|
+
export declare const unregister: (id: string) => void;
|
|
10
|
+
export declare const clear: () => void;
|
|
11
|
+
export declare const get: (id: string) => TerminalDriver | undefined;
|
|
12
|
+
export declare const list: () => TerminalDriver[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal driver registry: process-global map from driver
|
|
3
|
+
* id to `TerminalDriver`. Symmetric with refs and tree
|
|
4
|
+
* registries; uses the shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import { createGlobalSymbolRegistry } from "../registry/global-symbol-registry.js";
|
|
8
|
+
const registry = createGlobalSymbolRegistry({
|
|
9
|
+
slot: "pi:agentic-harness:terminal-drivers",
|
|
10
|
+
getId: (d) => d.id,
|
|
11
|
+
});
|
|
12
|
+
export const register = (driver) => registry.register(driver);
|
|
13
|
+
export const unregister = (id) => registry.unregister(id);
|
|
14
|
+
export const clear = () => registry.clear();
|
|
15
|
+
export const get = (id) => registry.get(id);
|
|
16
|
+
export const list = () => registry.list();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in tree providers. Seeded via
|
|
3
|
+
* `registerBuiltinTreeProviders`; downstream packages
|
|
4
|
+
* register their own at lower priority numbers to take
|
|
5
|
+
* over for specific repo roots.
|
|
6
|
+
*/
|
|
7
|
+
import type { TreeProvider } from "../../tree/types.js";
|
|
8
|
+
export declare const BUILTIN_TREE_PROVIDERS: TreeProvider[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in tree providers. Seeded via
|
|
3
|
+
* `registerBuiltinTreeProviders`; downstream packages
|
|
4
|
+
* register their own at lower priority numbers to take
|
|
5
|
+
* over for specific repo roots.
|
|
6
|
+
*/
|
|
7
|
+
import { createGitWorktreeProvider } from "./providers/git-worktree.js";
|
|
8
|
+
export const BUILTIN_TREE_PROVIDERS = [
|
|
9
|
+
createGitWorktreeProvider(),
|
|
10
|
+
];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in git-worktree provider.
|
|
3
|
+
*
|
|
4
|
+
* Creates trees at `<repo>/.worktrees/<name>/` and ensures
|
|
5
|
+
* `.worktrees/` is gitignored in the host repo on first
|
|
6
|
+
* use. Prune refuses dirty working trees and unmerged
|
|
7
|
+
* branches unless `force: true`; a higher-level safety gate
|
|
8
|
+
* forwards the caller's resolution answer through the
|
|
9
|
+
* `force` flag.
|
|
10
|
+
*
|
|
11
|
+
* Default branch detection uses `git symbolic-ref` on
|
|
12
|
+
* `refs/remotes/origin/HEAD`, falling back to `main` then
|
|
13
|
+
* `master`. The `appliesTo` check is universal: this
|
|
14
|
+
* provider returns true for any directory inside a git
|
|
15
|
+
* working tree, so downstream packages register at lower
|
|
16
|
+
* priority to take over for specific repos.
|
|
17
|
+
*/
|
|
18
|
+
import type { TreeProvider } from "../../../tree/types.js";
|
|
19
|
+
/** Build the provider. */
|
|
20
|
+
export declare function createGitWorktreeProvider(priority?: number): TreeProvider;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in git-worktree provider.
|
|
3
|
+
*
|
|
4
|
+
* Creates trees at `<repo>/.worktrees/<name>/` and ensures
|
|
5
|
+
* `.worktrees/` is gitignored in the host repo on first
|
|
6
|
+
* use. Prune refuses dirty working trees and unmerged
|
|
7
|
+
* branches unless `force: true`; a higher-level safety gate
|
|
8
|
+
* forwards the caller's resolution answer through the
|
|
9
|
+
* `force` flag.
|
|
10
|
+
*
|
|
11
|
+
* Default branch detection uses `git symbolic-ref` on
|
|
12
|
+
* `refs/remotes/origin/HEAD`, falling back to `main` then
|
|
13
|
+
* `master`. The `appliesTo` check is universal: this
|
|
14
|
+
* provider returns true for any directory inside a git
|
|
15
|
+
* working tree, so downstream packages register at lower
|
|
16
|
+
* priority to take over for specific repos.
|
|
17
|
+
*/
|
|
18
|
+
import { execFile } from "node:child_process";
|
|
19
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
20
|
+
import { dirname, join, resolve } from "node:path";
|
|
21
|
+
import { promisify } from "node:util";
|
|
22
|
+
const execFileAsync = promisify(execFile);
|
|
23
|
+
const PROVIDER_ID = "git-worktree";
|
|
24
|
+
const DEFAULT_PRIORITY = 100;
|
|
25
|
+
const WORKTREES_DIR = ".worktrees";
|
|
26
|
+
/**
|
|
27
|
+
* Slug pattern for tree names and base branches that
|
|
28
|
+
* flow into a path join and a git argv. Restrictive on
|
|
29
|
+
* purpose: alphanumeric plus dot, slash, underscore and
|
|
30
|
+
* dash, must not start with a dot or dash, and rejects
|
|
31
|
+
* `..` segments anywhere.
|
|
32
|
+
*/
|
|
33
|
+
const NAME_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9_./-]*$/;
|
|
34
|
+
function assertValidName(label, value) {
|
|
35
|
+
if (!value) {
|
|
36
|
+
throw new Error(`${label} cannot be empty.`);
|
|
37
|
+
}
|
|
38
|
+
if (!NAME_PATTERN.test(value)) {
|
|
39
|
+
throw new Error(`${label} must match ${NAME_PATTERN.source}; got ${JSON.stringify(value)}.`);
|
|
40
|
+
}
|
|
41
|
+
if (value.split("/").some((part) => part === "" || part === "..")) {
|
|
42
|
+
throw new Error(`${label} cannot contain empty or '..' path segments; got ${JSON.stringify(value)}.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Run a git command in a directory and return stdout
|
|
47
|
+
* trimmed. Throws on non-zero exit.
|
|
48
|
+
*/
|
|
49
|
+
async function git(cwd, ...args) {
|
|
50
|
+
const { stdout } = await execFileAsync("git", args, { cwd });
|
|
51
|
+
return stdout.toString().trim();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Try a git command; return undefined on failure rather
|
|
55
|
+
* than throwing. Used for probes where "not a git repo"
|
|
56
|
+
* is a legitimate answer.
|
|
57
|
+
*/
|
|
58
|
+
async function tryGit(cwd, ...args) {
|
|
59
|
+
try {
|
|
60
|
+
return await git(cwd, ...args);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Probe failed; caller treats this as "no answer".
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Determine the repo's default branch. */
|
|
68
|
+
async function detectDefaultBranch(repoRoot) {
|
|
69
|
+
const headRef = await tryGit(repoRoot, "symbolic-ref", "refs/remotes/origin/HEAD");
|
|
70
|
+
if (headRef?.startsWith("refs/remotes/origin/")) {
|
|
71
|
+
return headRef.slice("refs/remotes/origin/".length);
|
|
72
|
+
}
|
|
73
|
+
const main = await tryGit(repoRoot, "rev-parse", "--verify", "main");
|
|
74
|
+
if (main)
|
|
75
|
+
return "main";
|
|
76
|
+
const master = await tryGit(repoRoot, "rev-parse", "--verify", "master");
|
|
77
|
+
if (master)
|
|
78
|
+
return "master";
|
|
79
|
+
// As a last resort, return HEAD's current branch.
|
|
80
|
+
const current = await tryGit(repoRoot, "rev-parse", "--abbrev-ref", "HEAD");
|
|
81
|
+
return current ?? "main";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Make sure `.worktrees/` is gitignored at the repo root so
|
|
85
|
+
* the worktree directories don't show up as untracked
|
|
86
|
+
* files. Idempotent.
|
|
87
|
+
*/
|
|
88
|
+
function ensureGitignore(repoRoot) {
|
|
89
|
+
const path = join(repoRoot, ".gitignore");
|
|
90
|
+
const entry = `${WORKTREES_DIR}/`;
|
|
91
|
+
const existing = existsSync(path) ? readFileSync(path, "utf8") : "";
|
|
92
|
+
const lines = existing.split("\n");
|
|
93
|
+
if (lines.some((line) => line.trim() === entry))
|
|
94
|
+
return;
|
|
95
|
+
const next = existing.length === 0 || existing.endsWith("\n")
|
|
96
|
+
? `${existing}${entry}\n`
|
|
97
|
+
: `${existing}\n${entry}\n`;
|
|
98
|
+
writeFileSync(path, next, "utf8");
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* `git status --porcelain` produces one line per dirty
|
|
102
|
+
* file. Empty stdout means the tree is clean.
|
|
103
|
+
*/
|
|
104
|
+
async function isDirty(treePath) {
|
|
105
|
+
const status = await tryGit(treePath, "status", "--porcelain");
|
|
106
|
+
return Boolean(status && status.length > 0);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Return true when `branch` contains commits that the
|
|
110
|
+
* default branch does not.
|
|
111
|
+
*
|
|
112
|
+
* Tries `origin/<default>` first (the common shared-state
|
|
113
|
+
* comparison), then falls back to the local default
|
|
114
|
+
* branch when no origin remote is wired. If neither
|
|
115
|
+
* comparison succeeds the function returns true and lets
|
|
116
|
+
* the caller surface the lack of a target: silently
|
|
117
|
+
* returning false would let a force-less prune destroy
|
|
118
|
+
* unmerged work in a repo with no origin remote.
|
|
119
|
+
*/
|
|
120
|
+
async function hasUnmergedCommits(repoRoot, branch) {
|
|
121
|
+
const defaultBranch = await detectDefaultBranch(repoRoot);
|
|
122
|
+
if (defaultBranch === branch) {
|
|
123
|
+
return { unmerged: false, comparedAgainst: defaultBranch };
|
|
124
|
+
}
|
|
125
|
+
const originAhead = await tryGit(repoRoot, "rev-list", "--count", `origin/${defaultBranch}..${branch}`);
|
|
126
|
+
if (originAhead !== undefined) {
|
|
127
|
+
return {
|
|
128
|
+
unmerged: Number.parseInt(originAhead, 10) > 0,
|
|
129
|
+
comparedAgainst: `origin/${defaultBranch}`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const localAhead = await tryGit(repoRoot, "rev-list", "--count", `${defaultBranch}..${branch}`);
|
|
133
|
+
if (localAhead !== undefined) {
|
|
134
|
+
return {
|
|
135
|
+
unmerged: Number.parseInt(localAhead, 10) > 0,
|
|
136
|
+
comparedAgainst: defaultBranch,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// No comparison target. Fail safe: claim unmerged so a
|
|
140
|
+
// non-force prune refuses with a clear message, and let
|
|
141
|
+
// the caller force when they know better.
|
|
142
|
+
return { unmerged: true, comparedAgainst: undefined };
|
|
143
|
+
}
|
|
144
|
+
/** Build the provider. */
|
|
145
|
+
export function createGitWorktreeProvider(priority = DEFAULT_PRIORITY) {
|
|
146
|
+
return {
|
|
147
|
+
id: PROVIDER_ID,
|
|
148
|
+
priority,
|
|
149
|
+
appliesTo(repoRoot) {
|
|
150
|
+
// Cheap structural probe: `.git` exists either
|
|
151
|
+
// as a directory (normal clone) or a file
|
|
152
|
+
// (worktree). Symbolic-ref probes the real
|
|
153
|
+
// repository.
|
|
154
|
+
return existsSync(join(repoRoot, ".git"));
|
|
155
|
+
},
|
|
156
|
+
async create(input) {
|
|
157
|
+
assertValidName("Tree name", input.name);
|
|
158
|
+
if (input.baseBranch !== undefined) {
|
|
159
|
+
assertValidName("Base branch", input.baseBranch);
|
|
160
|
+
}
|
|
161
|
+
const repoRoot = resolve(input.repoRoot);
|
|
162
|
+
const treePath = join(repoRoot, WORKTREES_DIR, input.name);
|
|
163
|
+
if (existsSync(treePath)) {
|
|
164
|
+
throw new Error(`A tree already exists at ${treePath}. Pick a different name or prune the existing one first.`);
|
|
165
|
+
}
|
|
166
|
+
ensureGitignore(repoRoot);
|
|
167
|
+
const base = input.baseBranch ?? (await detectDefaultBranch(repoRoot));
|
|
168
|
+
// `--` separates positional args from refs so a base
|
|
169
|
+
// or branch name that happens to start with a dash
|
|
170
|
+
// (already refused by assertValidName) cannot be
|
|
171
|
+
// reparsed as a flag by older git versions.
|
|
172
|
+
await git(repoRoot, "worktree", "add", "-b", input.name, treePath, "--", base);
|
|
173
|
+
return {
|
|
174
|
+
path: treePath,
|
|
175
|
+
branch: input.name,
|
|
176
|
+
repoRoot,
|
|
177
|
+
providerId: PROVIDER_ID,
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
async prune(input) {
|
|
181
|
+
const treePath = resolve(input.path);
|
|
182
|
+
if (!existsSync(treePath)) {
|
|
183
|
+
// Tree directory is gone but git's admin entry
|
|
184
|
+
// may still be around. Walk up looking for the
|
|
185
|
+
// containing repo so we can run
|
|
186
|
+
// `git worktree prune` against it. When we
|
|
187
|
+
// can't find it, treat the prune as already
|
|
188
|
+
// done.
|
|
189
|
+
let ancestor = dirname(treePath);
|
|
190
|
+
while (ancestor !== dirname(ancestor)) {
|
|
191
|
+
if (existsSync(join(ancestor, ".git"))) {
|
|
192
|
+
await tryGit(ancestor, "worktree", "prune");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
ancestor = dirname(ancestor);
|
|
196
|
+
}
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// `--show-toplevel` from inside a worktree returns
|
|
200
|
+
// the worktree path itself, not the main repo.
|
|
201
|
+
// `--git-common-dir` always points at the shared
|
|
202
|
+
// `.git`; the main repo is its parent.
|
|
203
|
+
const commonDir = await git(treePath, "rev-parse", "--git-common-dir");
|
|
204
|
+
const absoluteCommonDir = resolve(treePath, commonDir);
|
|
205
|
+
const repoRoot = dirname(absoluteCommonDir);
|
|
206
|
+
const branch = (await tryGit(treePath, "rev-parse", "--abbrev-ref", "HEAD")) ?? "";
|
|
207
|
+
if (!input.force) {
|
|
208
|
+
if (await isDirty(treePath)) {
|
|
209
|
+
throw new Error(`Tree at ${treePath} has uncommitted changes. Commit, stash or force-prune.`);
|
|
210
|
+
}
|
|
211
|
+
if (branch) {
|
|
212
|
+
const { unmerged, comparedAgainst } = await hasUnmergedCommits(repoRoot, branch);
|
|
213
|
+
if (unmerged) {
|
|
214
|
+
const target = comparedAgainst
|
|
215
|
+
? `against ${comparedAgainst}`
|
|
216
|
+
: "and no default-branch comparison target exists (no origin remote, no local main/master)";
|
|
217
|
+
throw new Error(`Branch ${branch} has commits not merged ${target}. Push and merge first, or force-prune.`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
await git(repoRoot, "worktree", "remove", treePath, ...(input.force ? ["--force"] : []));
|
|
222
|
+
if (branch) {
|
|
223
|
+
// Delete the branch when it's fully merged
|
|
224
|
+
// or the caller forced. Failures here are
|
|
225
|
+
// non-fatal: the worktree itself is gone.
|
|
226
|
+
const deleteFlag = input.force ? "-D" : "-d";
|
|
227
|
+
await tryGit(repoRoot, "branch", deleteFlag, branch);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
async list(repoRoot) {
|
|
231
|
+
const root = resolve(repoRoot);
|
|
232
|
+
const stdout = await tryGit(root, "worktree", "list", "--porcelain");
|
|
233
|
+
if (!stdout)
|
|
234
|
+
return [];
|
|
235
|
+
const handles = [];
|
|
236
|
+
let current = {};
|
|
237
|
+
for (const line of stdout.split("\n")) {
|
|
238
|
+
if (line.startsWith("worktree ")) {
|
|
239
|
+
if (current.path) {
|
|
240
|
+
handles.push({
|
|
241
|
+
path: current.path,
|
|
242
|
+
branch: current.branch,
|
|
243
|
+
repoRoot: root,
|
|
244
|
+
providerId: PROVIDER_ID,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
current = { path: line.slice("worktree ".length) };
|
|
248
|
+
}
|
|
249
|
+
else if (line.startsWith("branch ")) {
|
|
250
|
+
const ref = line.slice("branch ".length);
|
|
251
|
+
current.branch = ref.replace(/^refs\/heads\//, "");
|
|
252
|
+
}
|
|
253
|
+
else if (line === "") {
|
|
254
|
+
if (current.path) {
|
|
255
|
+
handles.push({
|
|
256
|
+
path: current.path,
|
|
257
|
+
branch: current.branch,
|
|
258
|
+
repoRoot: root,
|
|
259
|
+
providerId: PROVIDER_ID,
|
|
260
|
+
});
|
|
261
|
+
current = {};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (current.path) {
|
|
266
|
+
handles.push({
|
|
267
|
+
path: current.path,
|
|
268
|
+
branch: current.branch,
|
|
269
|
+
repoRoot: root,
|
|
270
|
+
providerId: PROVIDER_ID,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
// The first entry is always the main worktree;
|
|
274
|
+
// drop it so callers see only the
|
|
275
|
+
// `.worktrees/<name>` siblings.
|
|
276
|
+
return handles.slice(1);
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree provider registry: process-global map from provider
|
|
3
|
+
* id to `TreeProvider`. Mirrors the refs and terminal
|
|
4
|
+
* libraries; uses the same shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import type { TreeProvider } from "../../tree/types.js";
|
|
8
|
+
export declare const register: (provider: TreeProvider) => void;
|
|
9
|
+
export declare const unregister: (id: string) => void;
|
|
10
|
+
export declare const clear: () => void;
|
|
11
|
+
export declare const get: (id: string) => TreeProvider | undefined;
|
|
12
|
+
export declare const list: () => TreeProvider[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree provider registry: process-global map from provider
|
|
3
|
+
* id to `TreeProvider`. Mirrors the refs and terminal
|
|
4
|
+
* libraries; uses the same shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import { createGlobalSymbolRegistry } from "../registry/global-symbol-registry.js";
|
|
8
|
+
const registry = createGlobalSymbolRegistry({
|
|
9
|
+
slot: "pi:agentic-harness:tree-providers",
|
|
10
|
+
getId: (p) => p.id,
|
|
11
|
+
});
|
|
12
|
+
export const register = (provider) => registry.register(provider);
|
|
13
|
+
export const unregister = (id) => registry.unregister(id);
|
|
14
|
+
export const clear = () => registry.clear();
|
|
15
|
+
export const get = (id) => registry.get(id);
|
|
16
|
+
export const list = () => registry.list();
|