@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,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural verbs: reparent (single or bulk). These move
|
|
3
|
+
* quests within the tree under an explicit scope, offer a
|
|
4
|
+
* dry-run preview and report exactly what changed, so a cleanup
|
|
5
|
+
* can be trusted and reversed.
|
|
6
|
+
*/
|
|
7
|
+
import { appendJourneyByPath } from "../../internal/quest/append-journey.js";
|
|
8
|
+
import { discoverQuests, siblingRanks, } from "../../internal/quest/discovery.js";
|
|
9
|
+
import { lensForField } from "../../internal/quest/fields.js";
|
|
10
|
+
import { nextRank } from "../../internal/quest/ranking.js";
|
|
11
|
+
import { isSealedStatus } from "../../internal/quest/status.js";
|
|
12
|
+
import { planReparent, planStatusChange, } from "../../internal/quest/structural.js";
|
|
13
|
+
import { dropLastStructuralOp, lastStructuralOp, recordStructuralOp, } from "../../internal/quest/structural-journal.js";
|
|
14
|
+
import { count, verb } from "../../ui/count.js";
|
|
15
|
+
import { sealQuestDocuments, setQuestFieldByDir, setQuestParent, setQuestPriorityByDir, setQuestRankByDir, setQuestStatusByDir, } from "../lifecycle.js";
|
|
16
|
+
import { ok, refuse, } from "./shared.js";
|
|
17
|
+
/**
|
|
18
|
+
* Reparent one or more quests under a new parent (or to top
|
|
19
|
+
* level with `parent: null`). The whole batch is atomic: if any
|
|
20
|
+
* target is missing or would form a cycle, nothing is written.
|
|
21
|
+
* With `dryRun`, the plan is returned without any writes.
|
|
22
|
+
*/
|
|
23
|
+
export function reparent(state, params) {
|
|
24
|
+
const targets = (params.id ?? "")
|
|
25
|
+
.split(",")
|
|
26
|
+
.map((t) => t.trim())
|
|
27
|
+
.filter((t) => t.length > 0);
|
|
28
|
+
if (targets.length === 0) {
|
|
29
|
+
return refuse("Pass the quest id to move in `id`, comma-separated for a batch.");
|
|
30
|
+
}
|
|
31
|
+
if (params.parent === undefined) {
|
|
32
|
+
return refuse("Pass the new `parent` quest id, or `null` to move to top level.");
|
|
33
|
+
}
|
|
34
|
+
const newParent = params.parent === "null" ? null : params.parent.trim();
|
|
35
|
+
const { index } = discoverQuests(state.questsRoot);
|
|
36
|
+
const plan = planReparent(index, targets, newParent);
|
|
37
|
+
if (plan.errors.length > 0) {
|
|
38
|
+
return refuse(`Refusing the batch; nothing was moved:\n- ${plan.errors.join("\n- ")}`);
|
|
39
|
+
}
|
|
40
|
+
if (plan.changes.length === 0) {
|
|
41
|
+
return ok("Nothing to reparent; every target is already there.", {
|
|
42
|
+
changes: [],
|
|
43
|
+
dryRun: Boolean(params.dryRun),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (params.dryRun) {
|
|
47
|
+
const lines = plan.changes
|
|
48
|
+
.map((c) => ` ${c.id}: ${c.oldParent ?? "top level"} -> ${c.newParent ?? "top level"}`)
|
|
49
|
+
.join("\n");
|
|
50
|
+
return ok(`Dry run: would reparent ${count(plan.changes.length, "quest")}.\n${lines}`, { changes: plan.changes, dryRun: true });
|
|
51
|
+
}
|
|
52
|
+
// Journal incrementally: record each write the moment it lands so
|
|
53
|
+
// a mid-batch failure leaves the journal reflecting exactly what
|
|
54
|
+
// is on disk, and undo can reverse the partial application.
|
|
55
|
+
//
|
|
56
|
+
// A moved quest leaves its old sibling set and joins a new one, so
|
|
57
|
+
// its old rank can collide there. Place it at the next free rank in
|
|
58
|
+
// the destination (parent, priority) group and journal the rank
|
|
59
|
+
// change too, so undo restores both. `taken` tracks ranks claimed
|
|
60
|
+
// this batch so several quests moved into the same group get
|
|
61
|
+
// distinct ranks rather than all landing on the same next free one.
|
|
62
|
+
const applied = [];
|
|
63
|
+
const takenByGroup = new Map();
|
|
64
|
+
const placeRank = (parent, priority) => {
|
|
65
|
+
const key = `${parent ?? ""}|${priority}`;
|
|
66
|
+
let taken = takenByGroup.get(key);
|
|
67
|
+
if (!taken) {
|
|
68
|
+
taken = new Set(siblingRanks(index, parent, priority));
|
|
69
|
+
takenByGroup.set(key, taken);
|
|
70
|
+
}
|
|
71
|
+
const rank = nextRank([...taken]);
|
|
72
|
+
taken.add(rank);
|
|
73
|
+
return rank;
|
|
74
|
+
};
|
|
75
|
+
for (const change of plan.changes) {
|
|
76
|
+
const entry = index.quests.get(change.id);
|
|
77
|
+
if (!entry)
|
|
78
|
+
continue;
|
|
79
|
+
const result = setQuestParent(entry.dir, change.newParent);
|
|
80
|
+
if (!result.ok) {
|
|
81
|
+
if (applied.length > 0) {
|
|
82
|
+
recordStructuralOp(state.questsRoot, "reparent", applied);
|
|
83
|
+
}
|
|
84
|
+
return refuse(`${result.guidance} Applied ${applied.length} of ${plan.changes.length} before the failure; recorded for undo.`);
|
|
85
|
+
}
|
|
86
|
+
applied.push({
|
|
87
|
+
id: change.id,
|
|
88
|
+
field: "parent",
|
|
89
|
+
old: change.oldParent,
|
|
90
|
+
new: change.newParent,
|
|
91
|
+
});
|
|
92
|
+
const priority = entry.doc.frontMatter.priority;
|
|
93
|
+
const oldRank = entry.doc.frontMatter.rank;
|
|
94
|
+
const newRank = placeRank(change.newParent, priority);
|
|
95
|
+
if (newRank !== oldRank) {
|
|
96
|
+
const rankResult = setQuestRankByDir(entry.dir, newRank);
|
|
97
|
+
if (!rankResult.ok) {
|
|
98
|
+
recordStructuralOp(state.questsRoot, "reparent", applied);
|
|
99
|
+
return refuse(`${rankResult.guidance} Applied ${count(applied.length, "change")} before the failure; recorded for undo.`);
|
|
100
|
+
}
|
|
101
|
+
applied.push({
|
|
102
|
+
id: change.id,
|
|
103
|
+
field: "rank",
|
|
104
|
+
old: String(oldRank),
|
|
105
|
+
new: String(newRank),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
recordStructuralOp(state.questsRoot, "reparent", applied);
|
|
110
|
+
return ok(`Reparented ${count(plan.changes.length, "quest")}.`, {
|
|
111
|
+
changes: plan.changes,
|
|
112
|
+
dryRun: false,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Bulk conclude or retire an explicit comma-separated id set.
|
|
117
|
+
* Atomic on any missing target, dry-run previewable, journalled
|
|
118
|
+
* for undo. Unlike the single-quest conclude, this does not
|
|
119
|
+
* prune trees: it is a lightweight, reversible status sweep.
|
|
120
|
+
*/
|
|
121
|
+
export function bulkConcludeOrRetire(state, action, params) {
|
|
122
|
+
const targets = (params.id ?? "")
|
|
123
|
+
.split(",")
|
|
124
|
+
.map((t) => t.trim())
|
|
125
|
+
.filter((t) => t.length > 0);
|
|
126
|
+
if (targets.length === 0) {
|
|
127
|
+
return refuse("Pass the quest ids to sweep in `id`, comma-separated.");
|
|
128
|
+
}
|
|
129
|
+
const reason = params.reason?.trim();
|
|
130
|
+
if (action === "retire" && !reason) {
|
|
131
|
+
return refuse("Bulk retire needs a `reason`: why are these being abandoned?");
|
|
132
|
+
}
|
|
133
|
+
const newStatus = action === "conclude" ? "concluded" : "retired";
|
|
134
|
+
const { index } = discoverQuests(state.questsRoot);
|
|
135
|
+
const plan = planStatusChange(index, targets, newStatus);
|
|
136
|
+
if (plan.errors.length > 0) {
|
|
137
|
+
return refuse(`Refusing the batch; nothing was changed:\n- ${plan.errors.join("\n- ")}`);
|
|
138
|
+
}
|
|
139
|
+
if (plan.changes.length === 0) {
|
|
140
|
+
return ok(`Nothing to ${action}; every target is already ${newStatus}.`, {
|
|
141
|
+
changes: [],
|
|
142
|
+
dryRun: Boolean(params.dryRun),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (params.dryRun) {
|
|
146
|
+
const lines = plan.changes
|
|
147
|
+
.map((c) => ` ${c.id}: ${c.oldStatus} -> ${c.newStatus}`)
|
|
148
|
+
.join("\n");
|
|
149
|
+
return ok(`Dry run: would ${action} ${count(plan.changes.length, "quest")}.\n${lines}`, { changes: plan.changes, dryRun: true });
|
|
150
|
+
}
|
|
151
|
+
const journey = action === "conclude"
|
|
152
|
+
? "Concluded the quest (bulk)."
|
|
153
|
+
: `Retired the quest (bulk): ${reason}.`;
|
|
154
|
+
const applied = [];
|
|
155
|
+
for (const change of plan.changes) {
|
|
156
|
+
const entry = index.quests.get(change.id);
|
|
157
|
+
if (!entry)
|
|
158
|
+
continue;
|
|
159
|
+
const result = setQuestStatusByDir(entry.dir, newStatus);
|
|
160
|
+
if (!result.ok) {
|
|
161
|
+
if (applied.length > 0) {
|
|
162
|
+
recordStructuralOp(state.questsRoot, action, applied);
|
|
163
|
+
}
|
|
164
|
+
return refuse(`${result.guidance} Applied ${applied.length} of ${plan.changes.length} before the failure; recorded for undo.`);
|
|
165
|
+
}
|
|
166
|
+
// Cascade the seal the same way the loaded-quest path does: drop
|
|
167
|
+
// the priority to someday (journalled, so undo restores it) and
|
|
168
|
+
// seal every still-active document to the terminal stage.
|
|
169
|
+
const oldPriority = entry.doc.frontMatter.priority;
|
|
170
|
+
if (oldPriority !== "someday") {
|
|
171
|
+
setQuestPriorityByDir(entry.dir, "someday");
|
|
172
|
+
applied.push({
|
|
173
|
+
id: change.id,
|
|
174
|
+
field: "priority",
|
|
175
|
+
old: oldPriority,
|
|
176
|
+
new: "someday",
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
sealQuestDocuments(entry.dir, newStatus);
|
|
180
|
+
appendJourneyByPath(entry.dir, journey);
|
|
181
|
+
applied.push({
|
|
182
|
+
id: change.id,
|
|
183
|
+
field: "status",
|
|
184
|
+
old: change.oldStatus,
|
|
185
|
+
new: change.newStatus,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
recordStructuralOp(state.questsRoot, action, applied);
|
|
189
|
+
// A sealed quest with live children leaves them orphaned but live.
|
|
190
|
+
// Warn rather than cascade: the operator chose these ids, so seal
|
|
191
|
+
// only what was named and surface the children to decide on next.
|
|
192
|
+
const sealedIds = new Set(plan.changes.map((c) => c.id));
|
|
193
|
+
const liveChildren = [];
|
|
194
|
+
for (const id of sealedIds) {
|
|
195
|
+
for (const childId of index.children.get(id) ?? []) {
|
|
196
|
+
const child = index.quests.get(childId);
|
|
197
|
+
if (child && !isSealedStatus(child.doc.frontMatter.status)) {
|
|
198
|
+
liveChildren.push(childId);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const warning = liveChildren.length > 0
|
|
203
|
+
? ` Warning: ${count(liveChildren.length, "live child quest")} ${verb(liveChildren.length, "remains", "remain")} under a sealed parent: ${liveChildren.join(", ")}.`
|
|
204
|
+
: "";
|
|
205
|
+
return ok(`${action === "conclude" ? "Concluded" : "Retired"} ${count(plan.changes.length, "quest")}.${warning}`, {
|
|
206
|
+
changes: plan.changes,
|
|
207
|
+
dryRun: false,
|
|
208
|
+
liveChildren,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Read the current on-disk value of a journalled field, so undo can
|
|
213
|
+
* check it still equals what the operation wrote before reverting.
|
|
214
|
+
*/
|
|
215
|
+
function currentValue(fm, field) {
|
|
216
|
+
const lens = lensForField(field);
|
|
217
|
+
if (lens)
|
|
218
|
+
return lens.read(fm);
|
|
219
|
+
// No lens means the field is not on a quest README at all (`stage`
|
|
220
|
+
// is journallable but belongs to a document). Return a sentinel that
|
|
221
|
+
// can never equal the recorded `new`, so the change is skipped and
|
|
222
|
+
// preserved in the journal rather than mis-reverted.
|
|
223
|
+
return UNREVERTABLE_FIELD;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* A value no real front-matter field can hold, used to force an
|
|
227
|
+
* unhandled journalled field down undo's skip-and-preserve path.
|
|
228
|
+
*/
|
|
229
|
+
const UNREVERTABLE_FIELD = "|__unrevertable_field__";
|
|
230
|
+
/** Reverse a single journalled change, restoring its recorded old value. */
|
|
231
|
+
function revertField(dir, change) {
|
|
232
|
+
const lens = lensForField(change.field);
|
|
233
|
+
if (!lens) {
|
|
234
|
+
// Unreachable for today's journalled ops, since currentValue skips
|
|
235
|
+
// a lensless field before this is ever called for it. Kept as a
|
|
236
|
+
// refusal so a field that starts being journalled without a lens
|
|
237
|
+
// cannot land on whichever branch happened to be last.
|
|
238
|
+
return {
|
|
239
|
+
ok: false,
|
|
240
|
+
guidance: `undo cannot reverse a ${change.field} change yet.`,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// Validate the journalled value against the field's vocabulary
|
|
244
|
+
// before writing it. This used to be an unchecked cast, which is
|
|
245
|
+
// safe only while every entry was written by the current build.
|
|
246
|
+
const result = setQuestFieldByDir(dir, lens, change.old);
|
|
247
|
+
if (!result.ok)
|
|
248
|
+
return result;
|
|
249
|
+
// Reparenting announces itself in the Journey, and undoing one has
|
|
250
|
+
// to say so too, or the original line stands uncontradicted.
|
|
251
|
+
if (change.field === "parent") {
|
|
252
|
+
appendJourneyByPath(dir, `Reparented to ${change.old ?? "top level"}.`);
|
|
253
|
+
}
|
|
254
|
+
return { ok: true };
|
|
255
|
+
}
|
|
256
|
+
export function undo(state) {
|
|
257
|
+
const last = lastStructuralOp(state.questsRoot);
|
|
258
|
+
if (!last) {
|
|
259
|
+
return refuse("Nothing to undo; the structural journal is empty.");
|
|
260
|
+
}
|
|
261
|
+
const { index } = discoverQuests(state.questsRoot);
|
|
262
|
+
const skipped = [];
|
|
263
|
+
const skippedChanges = [];
|
|
264
|
+
const reverted = [];
|
|
265
|
+
for (const change of last.changes) {
|
|
266
|
+
const entry = index.quests.get(change.id);
|
|
267
|
+
if (!entry) {
|
|
268
|
+
skipped.push(change.id);
|
|
269
|
+
skippedChanges.push(change);
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
// Verify the on-disk value still equals what this operation
|
|
273
|
+
// wrote. An intervening manual edit means the recorded `new` no
|
|
274
|
+
// longer holds, so reverting to `old` would clobber that edit;
|
|
275
|
+
// skip instead.
|
|
276
|
+
const current = currentValue(entry.doc.frontMatter, change.field);
|
|
277
|
+
if (current !== change.new) {
|
|
278
|
+
skipped.push(change.id);
|
|
279
|
+
skippedChanges.push(change);
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const result = revertField(entry.dir, change);
|
|
283
|
+
if (!result.ok)
|
|
284
|
+
return refuse(result.guidance);
|
|
285
|
+
// revertField announces a reparent in the Journey; a status
|
|
286
|
+
// reversal needs an explicit compensating entry too, so the
|
|
287
|
+
// original conclude/retire line does not stand uncontradicted.
|
|
288
|
+
if (change.field === "status") {
|
|
289
|
+
appendJourneyByPath(entry.dir, `Reverted the ${last.op} (undo).`);
|
|
290
|
+
}
|
|
291
|
+
reverted.push(change.id);
|
|
292
|
+
}
|
|
293
|
+
// Consume the op, but keep the changes we could not apply: rewrite
|
|
294
|
+
// the journal so the skipped changes survive as the operation's
|
|
295
|
+
// residue. A later undo can reverse them once the divergence
|
|
296
|
+
// resolves, instead of the partial undo swallowing them for good.
|
|
297
|
+
dropLastStructuralOp(state.questsRoot);
|
|
298
|
+
if (skippedChanges.length > 0) {
|
|
299
|
+
recordStructuralOp(state.questsRoot, last.op, skippedChanges);
|
|
300
|
+
}
|
|
301
|
+
const note = skipped.length > 0
|
|
302
|
+
? ` (skipped ${count(skipped.length, "quest")} missing or changed since: ${skipped.join(", ")})`
|
|
303
|
+
: "";
|
|
304
|
+
return ok(`Undid ${last.op} of ${count(reverted.length, "quest")}${note}.`, {
|
|
305
|
+
op: last.op,
|
|
306
|
+
changes: last.changes,
|
|
307
|
+
reverted,
|
|
308
|
+
skipped,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-operation verbs: tree-add, tree-list, tree-prune,
|
|
3
|
+
* tree-expand. Each delegates to the resolved tree
|
|
4
|
+
* provider (built-in git-worktree, or a downstream
|
|
5
|
+
* provider like dev-tree for the World monorepo).
|
|
6
|
+
*/
|
|
7
|
+
import type { QuestState } from "../state.js";
|
|
8
|
+
import { type QuestResult, type QuestToolParams } from "./shared.js";
|
|
9
|
+
export declare function treeAdd(state: QuestState, params: QuestToolParams): Promise<QuestResult>;
|
|
10
|
+
/**
|
|
11
|
+
* Adopt the existing git tree at the cwd: register it on the quest
|
|
12
|
+
* without creating anything, marked `adopted` so conclude and retire
|
|
13
|
+
* never auto-prune it. This is the deliberate, explicit alternative
|
|
14
|
+
* to scaffolding a fresh worktree; the act of running it is the
|
|
15
|
+
* consent, so there is no inference and no silent binding.
|
|
16
|
+
*/
|
|
17
|
+
export declare function treeAdopt(state: QuestState, params: QuestToolParams): QuestResult;
|
|
18
|
+
export declare function treeList(state: QuestState): QuestResult;
|
|
19
|
+
export declare function treePrune(state: QuestState, params: QuestToolParams): Promise<QuestResult>;
|
|
20
|
+
export declare function treeExpand(state: QuestState, params: QuestToolParams): Promise<QuestResult>;
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-operation verbs: tree-add, tree-list, tree-prune,
|
|
3
|
+
* tree-expand. Each delegates to the resolved tree
|
|
4
|
+
* provider (built-in git-worktree, or a downstream
|
|
5
|
+
* provider like dev-tree for the World monorepo).
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { discoverQuests } from "../../internal/quest/discovery.js";
|
|
10
|
+
import { parseQuestFrontMatter } from "../../internal/quest/frontmatter.js";
|
|
11
|
+
import { canonicalPath, gitTreeRootOf, isMainWorkingTree, isWithin, } from "../../internal/quest/git-signals.js";
|
|
12
|
+
import { isSealedStatus } from "../../internal/quest/status.js";
|
|
13
|
+
import { addTreeToQuest, listTreesOnQuest, removeTreeFromQuest, setPendingPrune, } from "../../internal/quest/trees.js";
|
|
14
|
+
import { getTreeProvider, resolveTreeProvider } from "../../tree/index.js";
|
|
15
|
+
import { count, noun } from "../../ui/count.js";
|
|
16
|
+
import { displayPath } from "../../ui/path.js";
|
|
17
|
+
import { appendJourneyEntry, inventoryWorktrees } from "../lifecycle.js";
|
|
18
|
+
import { ok, refuse, } from "./shared.js";
|
|
19
|
+
function defaultRepoRoot(_state, params) {
|
|
20
|
+
if (params.cwd)
|
|
21
|
+
return params.cwd;
|
|
22
|
+
return process.cwd();
|
|
23
|
+
}
|
|
24
|
+
function readSessionsFromQuest(state) {
|
|
25
|
+
if (!state.questDir)
|
|
26
|
+
return [];
|
|
27
|
+
try {
|
|
28
|
+
const readme = join(state.questDir, "README.md");
|
|
29
|
+
const text = readFileSync(readme, "utf8");
|
|
30
|
+
const parsed = parseQuestFrontMatter(text);
|
|
31
|
+
return parsed?.frontMatter.sessions ?? [];
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Quest README missing or unreadable; treat as no
|
|
35
|
+
// sessions so we don't accidentally block pruning.
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function treeAdd(state, params) {
|
|
40
|
+
if (!state.questDir || !state.questId) {
|
|
41
|
+
return refuse("Load a quest first.");
|
|
42
|
+
}
|
|
43
|
+
let repoRoot = defaultRepoRoot(state, params);
|
|
44
|
+
let provider = resolveTreeProvider(repoRoot);
|
|
45
|
+
if (!provider) {
|
|
46
|
+
// The cwd may be a subdirectory of a repository, where the
|
|
47
|
+
// built-in git-worktree provider (which looks for .git at the
|
|
48
|
+
// root) does not apply. Resolve to the enclosing git root and
|
|
49
|
+
// retry, so tree-add from a deep working directory no longer
|
|
50
|
+
// hard-fails on the wrong cwd. Downstream providers that match
|
|
51
|
+
// the raw root are untouched; this only rescues the no-match case.
|
|
52
|
+
const root = gitTreeRootOf(repoRoot);
|
|
53
|
+
if (root) {
|
|
54
|
+
repoRoot = root;
|
|
55
|
+
provider = resolveTreeProvider(repoRoot);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!provider) {
|
|
59
|
+
return refuse(`No tree provider applies to ${repoRoot}, and it is not inside a git repository. Pass cwd pointing at your repo (you do not need to change your session's directory), or register a provider (the harness ships git-worktree as a default).`);
|
|
60
|
+
}
|
|
61
|
+
const name = params.name?.trim() || params.title?.trim() || state.questId.toLowerCase();
|
|
62
|
+
try {
|
|
63
|
+
const handle = await provider.create({
|
|
64
|
+
name,
|
|
65
|
+
repoRoot,
|
|
66
|
+
baseBranch: params.ref,
|
|
67
|
+
});
|
|
68
|
+
const tree = {
|
|
69
|
+
path: handle.path,
|
|
70
|
+
branch: handle.branch,
|
|
71
|
+
repoRoot: handle.repoRoot,
|
|
72
|
+
providerId: handle.providerId,
|
|
73
|
+
origin: "scaffolded",
|
|
74
|
+
};
|
|
75
|
+
const result = addTreeToQuest(state.questDir, tree);
|
|
76
|
+
if (!result.ok)
|
|
77
|
+
return refuse(result.reason);
|
|
78
|
+
appendJourneyEntry(state, `Added ${handle.providerId} tree at ${handle.path}.`);
|
|
79
|
+
return ok(`Tree ready at ${handle.path}.`, { tree });
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
83
|
+
return refuse(`Tree create failed: ${message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Adopt the existing git tree at the cwd: register it on the quest
|
|
88
|
+
* without creating anything, marked `adopted` so conclude and retire
|
|
89
|
+
* never auto-prune it. This is the deliberate, explicit alternative
|
|
90
|
+
* to scaffolding a fresh worktree; the act of running it is the
|
|
91
|
+
* consent, so there is no inference and no silent binding.
|
|
92
|
+
*/
|
|
93
|
+
export function treeAdopt(state, params) {
|
|
94
|
+
if (!state.questDir || !state.questId) {
|
|
95
|
+
return refuse("Load a quest first.");
|
|
96
|
+
}
|
|
97
|
+
const start = defaultRepoRoot(state, params);
|
|
98
|
+
const root = gitTreeRootOf(start);
|
|
99
|
+
if (!root) {
|
|
100
|
+
return refuse(`${start} is not inside a git working tree. Pass cwd pointing at a path inside the tree you want to adopt; you do not need to change your session's directory.`);
|
|
101
|
+
}
|
|
102
|
+
// Guard a shared checkout before binding: a path another quest
|
|
103
|
+
// already tracks, or a repository's main working tree, is the shape
|
|
104
|
+
// that lets many quests bind to one checkout and magnetize a
|
|
105
|
+
// session ambiguously. Warn and require force rather than adopt
|
|
106
|
+
// silently; tree-adopt stays first-class, the guard just makes a
|
|
107
|
+
// shared bind a deliberate act.
|
|
108
|
+
if (!params.force) {
|
|
109
|
+
const otherQuest = pathAdoptedByAnotherQuest(state, root);
|
|
110
|
+
if (otherQuest) {
|
|
111
|
+
return refuse(`${root} is already tracked by ${otherQuest}. Adopting one checkout on several quests is what makes a fresh session resolve to an arbitrary quest. Pass force:true to adopt it here as well, or scaffold a private worktree with tree-add.`);
|
|
112
|
+
}
|
|
113
|
+
if (isMainWorkingTree(root)) {
|
|
114
|
+
return refuse(`${root} is a repository's main working tree, not a scaffolded worktree. Adopting a shared main checkout binds this quest to it. Pass force:true to confirm, or scaffold a private worktree with tree-add.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const provider = resolveTreeProvider(root);
|
|
118
|
+
// repoRoot is recorded as the adopted tree's own root. For a
|
|
119
|
+
// linked worktree that is the worktree dir rather than the main
|
|
120
|
+
// repo, unlike a scaffolded tree, but it is sufficient here: an
|
|
121
|
+
// adopted tree is never auto-pruned, and the provider resolves
|
|
122
|
+
// from the path either way, so the value is only a reference.
|
|
123
|
+
const tree = {
|
|
124
|
+
path: root,
|
|
125
|
+
repoRoot: root,
|
|
126
|
+
providerId: provider?.id ?? "git-worktree",
|
|
127
|
+
origin: "adopted",
|
|
128
|
+
};
|
|
129
|
+
const result = addTreeToQuest(state.questDir, tree);
|
|
130
|
+
if (!result.ok)
|
|
131
|
+
return refuse(result.reason);
|
|
132
|
+
if (!result.added) {
|
|
133
|
+
return ok(`Tree at ${root} is already tracked on this quest.`, { tree });
|
|
134
|
+
}
|
|
135
|
+
// The Journey is prose held to the column rule, and an absolute
|
|
136
|
+
// path is the one thing in it that cannot be wrapped. A tilde is a
|
|
137
|
+
// courtesy for a reader, and the Journey has no other kind of
|
|
138
|
+
// audience: nothing reads a path back out of it.
|
|
139
|
+
appendJourneyEntry(state, `Adopted tree at ${displayPath(root)}.`);
|
|
140
|
+
return ok(`Adopted tree at ${root}; it will not be auto-pruned.`, { tree });
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The id of another quest that already tracks a tree at this path, or
|
|
144
|
+
* undefined when only the loaded quest (or no quest) does. Paths are
|
|
145
|
+
* canonicalized so a /var versus /private/var spelling still matches.
|
|
146
|
+
*/
|
|
147
|
+
function pathAdoptedByAnotherQuest(state, root) {
|
|
148
|
+
const target = canonicalPath(root);
|
|
149
|
+
const { index } = discoverQuests(state.questsRoot);
|
|
150
|
+
for (const entry of index.quests.values()) {
|
|
151
|
+
const fm = entry.doc.frontMatter;
|
|
152
|
+
if (fm.id === state.questId)
|
|
153
|
+
continue;
|
|
154
|
+
// Only a live quest is a competing claim. The guard exists because
|
|
155
|
+
// two quests holding one checkout make a fresh session resolve to
|
|
156
|
+
// an arbitrary one, and a sealed quest cannot magnetize a session:
|
|
157
|
+
// the cwd resolver prefers a live quest over a sealed one wherever
|
|
158
|
+
// both match. Counting a finished quest's claim strands the
|
|
159
|
+
// checkout instead, because the only quest that could release it
|
|
160
|
+
// is the one that is over.
|
|
161
|
+
if (isSealedStatus(fm.status))
|
|
162
|
+
continue;
|
|
163
|
+
for (const tree of fm.trees ?? []) {
|
|
164
|
+
if (canonicalPath(tree.path) === target)
|
|
165
|
+
return fm.id;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
export function treeList(state) {
|
|
171
|
+
if (!state.questDir) {
|
|
172
|
+
// No quest loaded: return the cross-quest inventory so
|
|
173
|
+
// the harness-created trees can be seen in one place.
|
|
174
|
+
const inventory = inventoryWorktrees(state);
|
|
175
|
+
// scope tells a consumer which shape `trees` carries: the
|
|
176
|
+
// global inventory entries are attributed (questId/questTitle),
|
|
177
|
+
// the per-quest records are not.
|
|
178
|
+
const missing = inventory.filter((t) => !t.exists).length;
|
|
179
|
+
const missingNote = missing > 0 ? ` (${missing} missing on disk)` : "";
|
|
180
|
+
return ok(`${count(inventory.length, "tree")} across all quests${missingNote}.`, {
|
|
181
|
+
scope: "global",
|
|
182
|
+
trees: inventory,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const result = listTreesOnQuest(state.questDir);
|
|
186
|
+
if (!result.ok)
|
|
187
|
+
return refuse(result.reason);
|
|
188
|
+
return ok(`${count(result.trees.length, "tree")} on the loaded quest.`, {
|
|
189
|
+
scope: "quest",
|
|
190
|
+
trees: result.trees,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
export async function treePrune(state, params) {
|
|
194
|
+
if (!state.questDir || !state.questId) {
|
|
195
|
+
return refuse("Load a quest first.");
|
|
196
|
+
}
|
|
197
|
+
const listing = listTreesOnQuest(state.questDir);
|
|
198
|
+
if (!listing.ok)
|
|
199
|
+
return refuse(listing.reason);
|
|
200
|
+
if (listing.trees.length === 0) {
|
|
201
|
+
return refuse("No trees on the loaded quest to prune.");
|
|
202
|
+
}
|
|
203
|
+
const target = listing.trees.find((t) => t.path === params.target || t.path === params.ref) ?? listing.trees[0];
|
|
204
|
+
// `force` is a typed boolean parameter. The caller flips it only
|
|
205
|
+
// after confirming destructive intent with the user. We
|
|
206
|
+
// deliberately do NOT key off a `note` string because notes are
|
|
207
|
+
// free-form prose, not consent. `force: true` is the consent
|
|
208
|
+
// signal.
|
|
209
|
+
const force = params.force === true;
|
|
210
|
+
// Only a tool-scaffolded tree may be pruned without force. An
|
|
211
|
+
// adopted or unmarked (legacy, hand-registered) tree is a shared
|
|
212
|
+
// checkout the tool did not create, so deleting it needs explicit,
|
|
213
|
+
// confirmed consent rather than a mistyped target.
|
|
214
|
+
if (target.origin !== "scaffolded" && !force) {
|
|
215
|
+
const kind = target.origin ?? "unmarked";
|
|
216
|
+
return refuse(`Tree at ${displayPath(target.path)} is ${kind}, not scaffolded by the tool. Pruning it would delete a shared checkout; pass force:true after confirming with the user.`);
|
|
217
|
+
}
|
|
218
|
+
const sessions = readSessionsFromQuest(state);
|
|
219
|
+
const attached = sessions.filter((s) => s.cwd && isWithin(s.cwd, target.path));
|
|
220
|
+
if (attached.length > 0 && !force) {
|
|
221
|
+
const names = attached.map((s) => s.name ?? s.id).join(", ");
|
|
222
|
+
return refuse(`Tree at ${displayPath(target.path)} has an attached ${noun(attached.length, "session")} (${names}). Detach them with \`session-detach\` before pruning, or pass force:true after confirming with the user.`);
|
|
223
|
+
}
|
|
224
|
+
// Prefer the provider that created the tree, recorded as its
|
|
225
|
+
// providerId, so a prune reaches the same provider even if the
|
|
226
|
+
// registry's resolution order changed since the tree was made.
|
|
227
|
+
// Fall back to repo-root resolution for legacy trees with no id.
|
|
228
|
+
const provider = (target.providerId ? getTreeProvider(target.providerId) : undefined) ??
|
|
229
|
+
resolveTreeProvider(target.repoRoot ?? target.path) ??
|
|
230
|
+
resolveTreeProvider(process.cwd());
|
|
231
|
+
if (!provider) {
|
|
232
|
+
return refuse(`No tree provider applies to ${target.repoRoot ?? target.path}.`);
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
await provider.prune({ path: target.path, force });
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
239
|
+
const detectedAt = new Date().toISOString();
|
|
240
|
+
setPendingPrune(state.questDir, {
|
|
241
|
+
path: target.path,
|
|
242
|
+
reason: message,
|
|
243
|
+
detectedAt,
|
|
244
|
+
});
|
|
245
|
+
return refuse(`Tree prune blocked: ${message} Resolve the conflict and retry, or pass force:true after confirming with the user.`);
|
|
246
|
+
}
|
|
247
|
+
const removal = removeTreeFromQuest(state.questDir, target.path);
|
|
248
|
+
if (!removal.ok)
|
|
249
|
+
return refuse(removal.reason);
|
|
250
|
+
setPendingPrune(state.questDir, null, { clearPath: target.path });
|
|
251
|
+
appendJourneyEntry(state, `Pruned tree at ${target.path}.`);
|
|
252
|
+
// The tilde form for the person reading; the absolute path stays in details,
|
|
253
|
+
// which is what a caller acts on.
|
|
254
|
+
return ok(`Tree at ${displayPath(target.path)} pruned.`, {
|
|
255
|
+
path: target.path,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
export async function treeExpand(state, params) {
|
|
259
|
+
if (!state.questDir)
|
|
260
|
+
return refuse("Load a quest first.");
|
|
261
|
+
const zone = params.ref?.trim();
|
|
262
|
+
if (!zone) {
|
|
263
|
+
return refuse("Pass the zone to add in `ref` (e.g. system/gitstream).");
|
|
264
|
+
}
|
|
265
|
+
const listing = listTreesOnQuest(state.questDir);
|
|
266
|
+
if (!listing.ok)
|
|
267
|
+
return refuse(listing.reason);
|
|
268
|
+
if (listing.trees.length === 0) {
|
|
269
|
+
return refuse("No trees on the loaded quest. Run tree-add first.");
|
|
270
|
+
}
|
|
271
|
+
const target = listing.trees[0];
|
|
272
|
+
const provider = resolveTreeProvider(target.repoRoot ?? target.path);
|
|
273
|
+
if (!provider) {
|
|
274
|
+
return refuse("No tree provider applies to the loaded quest's tree.");
|
|
275
|
+
}
|
|
276
|
+
const expander = provider.expand;
|
|
277
|
+
if (typeof expander !== "function") {
|
|
278
|
+
return refuse(`Provider ${provider.id} does not support expand. (zone-aware providers, like dev-tree in joel.gerber.pi, implement this.)`);
|
|
279
|
+
}
|
|
280
|
+
try {
|
|
281
|
+
await expander({ path: target.path, zone });
|
|
282
|
+
appendJourneyEntry(state, `Expanded ${target.path} with zone ${zone}.`);
|
|
283
|
+
return ok(`Zone ${zone} added to ${displayPath(target.path)}.`, { zone });
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
287
|
+
return refuse(`Tree expand failed: ${message}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface of the refs library.
|
|
3
|
+
*
|
|
4
|
+
* Pluggable registry of external-system reference types
|
|
5
|
+
* (GitHub issues, Slack threads, anything with a URL and a
|
|
6
|
+
* recognisable shape). Consumers register their types; the
|
|
7
|
+
* library extracts matches from text and builds canonical
|
|
8
|
+
* URLs on demand. Built-in types are opt-in via
|
|
9
|
+
* `registerBuiltinRefTypes`.
|
|
10
|
+
*/
|
|
11
|
+
export { getRefType, listRefTypes, parseAllRefs, parseRef, urlForRef, whyRefHasNoUrl, } from "./lookup.js";
|
|
12
|
+
export { clearRefTypes, registerBuiltinRefTypes, registerRefType, unregisterRefType, } from "./register.js";
|
|
13
|
+
export type { Ref, RefType } from "./types.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface of the refs library.
|
|
3
|
+
*
|
|
4
|
+
* Pluggable registry of external-system reference types
|
|
5
|
+
* (GitHub issues, Slack threads, anything with a URL and a
|
|
6
|
+
* recognisable shape). Consumers register their types; the
|
|
7
|
+
* library extracts matches from text and builds canonical
|
|
8
|
+
* URLs on demand. Built-in types are opt-in via
|
|
9
|
+
* `registerBuiltinRefTypes`.
|
|
10
|
+
*/
|
|
11
|
+
export { getRefType, listRefTypes, parseAllRefs, parseRef, urlForRef, whyRefHasNoUrl, } from "./lookup.js";
|
|
12
|
+
export { clearRefTypes, registerBuiltinRefTypes, registerRefType, unregisterRefType, } from "./register.js";
|