@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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural edits to the quest tree: reparenting and bulk
|
|
3
|
+
* status changes. The planners here are pure: they read an
|
|
4
|
+
* in-memory index and compute what would change, validating
|
|
5
|
+
* scope and refusing cycles, so a caller can preview before it
|
|
6
|
+
* writes and report exactly what moved.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Plan the parent changes for `targetIds` against `newParent`
|
|
10
|
+
* without touching disk. No-op moves are dropped; missing
|
|
11
|
+
* quests, a missing new parent, self-parenting and cycle-forming
|
|
12
|
+
* moves are reported in `errors`.
|
|
13
|
+
*/
|
|
14
|
+
export function planReparent(index, targetIds, newParent) {
|
|
15
|
+
const changes = [];
|
|
16
|
+
const errors = [];
|
|
17
|
+
if (newParent !== null && !index.quests.has(newParent)) {
|
|
18
|
+
return { changes: [], errors: [`New parent ${newParent} not found.`] };
|
|
19
|
+
}
|
|
20
|
+
for (const id of targetIds) {
|
|
21
|
+
const entry = index.quests.get(id);
|
|
22
|
+
if (!entry) {
|
|
23
|
+
errors.push(`Quest ${id} not found.`);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (newParent === id) {
|
|
27
|
+
errors.push(`${id} cannot be its own parent (cycle).`);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (newParent !== null && isDescendant(index, newParent, id)) {
|
|
31
|
+
errors.push(`Reparenting ${id} under ${newParent} would form a cycle.`);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const oldParent = entry.doc.frontMatter.parent ?? null;
|
|
35
|
+
if (oldParent === newParent)
|
|
36
|
+
continue;
|
|
37
|
+
changes.push({ id, oldParent, newParent });
|
|
38
|
+
}
|
|
39
|
+
return { changes, errors };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Plan the status changes for `targetIds` to `newStatus` without
|
|
43
|
+
* touching disk. Quests already at the target status are dropped;
|
|
44
|
+
* missing quests are reported in `errors`.
|
|
45
|
+
*/
|
|
46
|
+
export function planStatusChange(index, targetIds, newStatus) {
|
|
47
|
+
const changes = [];
|
|
48
|
+
const errors = [];
|
|
49
|
+
for (const id of targetIds) {
|
|
50
|
+
const entry = index.quests.get(id);
|
|
51
|
+
if (!entry) {
|
|
52
|
+
errors.push(`Quest ${id} not found.`);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const oldStatus = entry.doc.frontMatter.status;
|
|
56
|
+
if (oldStatus === newStatus)
|
|
57
|
+
continue;
|
|
58
|
+
changes.push({ id, oldStatus, newStatus });
|
|
59
|
+
}
|
|
60
|
+
return { changes, errors };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Is `candidate` inside `ancestor`'s subtree? Walks up the parent
|
|
64
|
+
* chain from `candidate`; a visited set keeps pre-existing cyclic
|
|
65
|
+
* data from spinning.
|
|
66
|
+
*/
|
|
67
|
+
function isDescendant(index, candidate, ancestor) {
|
|
68
|
+
const seen = new Set();
|
|
69
|
+
let cursor = candidate;
|
|
70
|
+
while (cursor !== null && !seen.has(cursor)) {
|
|
71
|
+
seen.add(cursor);
|
|
72
|
+
if (cursor === ancestor)
|
|
73
|
+
return true;
|
|
74
|
+
cursor = index.quests.get(cursor)?.doc.frontMatter.parent ?? null;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table-of-contents renderer: produce the at-a-glance index
|
|
3
|
+
* of the whole tree on demand. This builds the markdown; it
|
|
4
|
+
* does not write a file. Nothing auto-generates a QUESTS.md,
|
|
5
|
+
* so a consumer that wants one calls this and writes the
|
|
6
|
+
* result itself.
|
|
7
|
+
*
|
|
8
|
+
* Shape:
|
|
9
|
+
*
|
|
10
|
+
* # Quests
|
|
11
|
+
*
|
|
12
|
+
* ## 🚀 Driving
|
|
13
|
+
*
|
|
14
|
+
* - ◆ QEST-... Title One [status]
|
|
15
|
+
* - ◇ QEST-... Title Two [status]
|
|
16
|
+
*
|
|
17
|
+
* ## ⚡ Active
|
|
18
|
+
*
|
|
19
|
+
* ...
|
|
20
|
+
*
|
|
21
|
+
* Quests are grouped by priority (Driving, Active, Queued,
|
|
22
|
+
* Bench, Someday) and within each group sorted by rank.
|
|
23
|
+
* Concluded and retired quests collapse into a single
|
|
24
|
+
* trailing section so they don't crowd the live work.
|
|
25
|
+
*/
|
|
26
|
+
import type { QuestIndex } from "./discovery.js";
|
|
27
|
+
/** Render the TOC as a markdown string. */
|
|
28
|
+
export declare function renderToc(index: QuestIndex): string;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table-of-contents renderer: produce the at-a-glance index
|
|
3
|
+
* of the whole tree on demand. This builds the markdown; it
|
|
4
|
+
* does not write a file. Nothing auto-generates a QUESTS.md,
|
|
5
|
+
* so a consumer that wants one calls this and writes the
|
|
6
|
+
* result itself.
|
|
7
|
+
*
|
|
8
|
+
* Shape:
|
|
9
|
+
*
|
|
10
|
+
* # Quests
|
|
11
|
+
*
|
|
12
|
+
* ## 🚀 Driving
|
|
13
|
+
*
|
|
14
|
+
* - ◆ QEST-... Title One [status]
|
|
15
|
+
* - ◇ QEST-... Title Two [status]
|
|
16
|
+
*
|
|
17
|
+
* ## ⚡ Active
|
|
18
|
+
*
|
|
19
|
+
* ...
|
|
20
|
+
*
|
|
21
|
+
* Quests are grouped by priority (Driving, Active, Queued,
|
|
22
|
+
* Bench, Someday) and within each group sorted by rank.
|
|
23
|
+
* Concluded and retired quests collapse into a single
|
|
24
|
+
* trailing section so they don't crowd the live work.
|
|
25
|
+
*/
|
|
26
|
+
const PRIORITY_LABELS = [
|
|
27
|
+
{ priority: "driving", label: "🚀 Driving" },
|
|
28
|
+
{ priority: "active", label: "⚡ Active" },
|
|
29
|
+
{ priority: "queued", label: "📋 Queued" },
|
|
30
|
+
{ priority: "bench", label: "🪑 Bench" },
|
|
31
|
+
{ priority: "someday", label: "🌌 Someday" },
|
|
32
|
+
];
|
|
33
|
+
const KIND_GLYPHS = {
|
|
34
|
+
quest: "◆",
|
|
35
|
+
subquest: "◈",
|
|
36
|
+
sidequest: "◇",
|
|
37
|
+
};
|
|
38
|
+
const PROGRESS_BAR = {
|
|
39
|
+
active: "○",
|
|
40
|
+
paused: "◔",
|
|
41
|
+
blocked: "◑",
|
|
42
|
+
concluded: "●",
|
|
43
|
+
retired: "◕",
|
|
44
|
+
};
|
|
45
|
+
function questLine(entry) {
|
|
46
|
+
const fm = entry.doc.frontMatter;
|
|
47
|
+
const kindGlyph = KIND_GLYPHS[fm.kind] ?? "·";
|
|
48
|
+
const statusGlyph = PROGRESS_BAR[fm.status] ?? "·";
|
|
49
|
+
const title = entry.doc.title ?? "(untitled)";
|
|
50
|
+
return `- ${kindGlyph} ${statusGlyph} \`${fm.id}\` ${title}`;
|
|
51
|
+
}
|
|
52
|
+
function sortEntries(entries) {
|
|
53
|
+
return [...entries].sort((a, b) => {
|
|
54
|
+
const rankCmp = a.doc.frontMatter.rank - b.doc.frontMatter.rank;
|
|
55
|
+
if (rankCmp !== 0)
|
|
56
|
+
return rankCmp;
|
|
57
|
+
return a.doc.frontMatter.id.localeCompare(b.doc.frontMatter.id);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** Render the TOC as a markdown string. */
|
|
61
|
+
export function renderToc(index) {
|
|
62
|
+
const live = [];
|
|
63
|
+
const concluded = [];
|
|
64
|
+
for (const entry of index.quests.values()) {
|
|
65
|
+
const status = entry.doc.frontMatter.status;
|
|
66
|
+
if (status === "concluded" || status === "retired") {
|
|
67
|
+
concluded.push(entry);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
live.push(entry);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const sections = ["# Quests", ""];
|
|
74
|
+
for (const { priority, label } of PRIORITY_LABELS) {
|
|
75
|
+
const group = sortEntries(live.filter((e) => e.doc.frontMatter.priority === priority));
|
|
76
|
+
if (group.length === 0)
|
|
77
|
+
continue;
|
|
78
|
+
sections.push(`## ${label}`, "");
|
|
79
|
+
for (const entry of group)
|
|
80
|
+
sections.push(questLine(entry));
|
|
81
|
+
sections.push("");
|
|
82
|
+
}
|
|
83
|
+
if (concluded.length > 0) {
|
|
84
|
+
sections.push("## 🗄️ Concluded and Retired", "");
|
|
85
|
+
for (const entry of sortEntries(concluded))
|
|
86
|
+
sections.push(questLine(entry));
|
|
87
|
+
sections.push("");
|
|
88
|
+
}
|
|
89
|
+
return `${sections.join("\n").replace(/\n+$/, "")}\n`;
|
|
90
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest tree operations. Pure file-and-frontmatter
|
|
3
|
+
* helpers; the extension wires them to a loaded quest.
|
|
4
|
+
*
|
|
5
|
+
* Trees live on a quest's frontmatter `trees:` array.
|
|
6
|
+
* Aliases mirror each tree as `git-worktree:<path>` and
|
|
7
|
+
* `git-branch:<branch>` so the cwd-walk auto-attach can
|
|
8
|
+
* find the quest from inside the tree.
|
|
9
|
+
*/
|
|
10
|
+
import type { QuestTree } from "../../quest/types.js";
|
|
11
|
+
/** Append a tree to the quest's `trees:` list with its aliases. */
|
|
12
|
+
export declare function addTreeToQuest(questDir: string, tree: QuestTree): {
|
|
13
|
+
ok: true;
|
|
14
|
+
added: boolean;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
reason: string;
|
|
18
|
+
};
|
|
19
|
+
/** Remove a tree (by path) from the quest's `trees:` list. */
|
|
20
|
+
export declare function removeTreeFromQuest(questDir: string, path: string): {
|
|
21
|
+
ok: true;
|
|
22
|
+
removed: boolean;
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
reason: string;
|
|
26
|
+
};
|
|
27
|
+
/** Snapshot the quest's tree list. */
|
|
28
|
+
export declare function listTreesOnQuest(questDir: string): {
|
|
29
|
+
ok: true;
|
|
30
|
+
trees: QuestTree[];
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
reason: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Append or replace a pendingPrune entry on the quest. Each
|
|
37
|
+
* blocked tree is keyed by `path`: a second blocker for the
|
|
38
|
+
* same path overwrites the first; blockers for distinct
|
|
39
|
+
* paths accumulate. Pass `null` to clear every entry, or
|
|
40
|
+
* pass `clearPath` to clear one entry by tree path.
|
|
41
|
+
*/
|
|
42
|
+
export declare function setPendingPrune(questDir: string, pending: {
|
|
43
|
+
path: string;
|
|
44
|
+
reason: string;
|
|
45
|
+
detectedAt: string;
|
|
46
|
+
} | null, options?: {
|
|
47
|
+
clearPath?: string;
|
|
48
|
+
}): {
|
|
49
|
+
ok: true;
|
|
50
|
+
} | {
|
|
51
|
+
ok: false;
|
|
52
|
+
reason: string;
|
|
53
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest tree operations. Pure file-and-frontmatter
|
|
3
|
+
* helpers; the extension wires them to a loaded quest.
|
|
4
|
+
*
|
|
5
|
+
* Trees live on a quest's frontmatter `trees:` array.
|
|
6
|
+
* Aliases mirror each tree as `git-worktree:<path>` and
|
|
7
|
+
* `git-branch:<branch>` so the cwd-walk auto-attach can
|
|
8
|
+
* find the quest from inside the tree.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { parseQuestFrontMatter } from "./frontmatter.js";
|
|
13
|
+
import { mutateQuestFrontMatter } from "./mutate.js";
|
|
14
|
+
/** Path to a quest's README. */
|
|
15
|
+
function questReadme(questDir) {
|
|
16
|
+
return join(questDir, "README.md");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Apply a tree or alias change through the shared mutation core.
|
|
20
|
+
*
|
|
21
|
+
* This used to be a second copy of that core, living here because
|
|
22
|
+
* trees were written before it existed. It locked, parsed, validated
|
|
23
|
+
* by parse-back and wrote, all correctly, and stamped no `updated`
|
|
24
|
+
* and journalled nothing, so adopting a tree left the quest reading
|
|
25
|
+
* older than it was. Two implementations of one rule means one of
|
|
26
|
+
* them is wrong, and it was this one.
|
|
27
|
+
*
|
|
28
|
+
* The transform reports what it did through the caller's own
|
|
29
|
+
* closure, so nothing needs to travel back out of the lock.
|
|
30
|
+
*/
|
|
31
|
+
function changeQuestFrontMatter(questDir, transform, op) {
|
|
32
|
+
const outcome = mutateQuestFrontMatter(questDir, transform, { op });
|
|
33
|
+
return outcome.ok ? { ok: true } : { ok: false, reason: outcome.guidance };
|
|
34
|
+
}
|
|
35
|
+
function ensureAlias(aliases, alias) {
|
|
36
|
+
const exists = aliases.some((a) => a.type === alias.type && a.value === alias.value);
|
|
37
|
+
if (exists)
|
|
38
|
+
return false;
|
|
39
|
+
aliases.push(alias);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
function removeAlias(aliases, alias) {
|
|
43
|
+
const before = aliases.length;
|
|
44
|
+
for (let i = aliases.length - 1; i >= 0; i--) {
|
|
45
|
+
if (aliases[i].type === alias.type && aliases[i].value === alias.value) {
|
|
46
|
+
aliases.splice(i, 1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return aliases.length !== before;
|
|
50
|
+
}
|
|
51
|
+
/** Append a tree to the quest's `trees:` list with its aliases. */
|
|
52
|
+
export function addTreeToQuest(questDir, tree) {
|
|
53
|
+
let addedFlag = false;
|
|
54
|
+
const outcome = changeQuestFrontMatter(questDir, (fm) => {
|
|
55
|
+
const trees = fm.trees ?? [];
|
|
56
|
+
// Already there: no change at all, rather than a rewrite that
|
|
57
|
+
// stamps `updated` for a quest nothing happened to.
|
|
58
|
+
if (trees.some((t) => t.path === tree.path))
|
|
59
|
+
return undefined;
|
|
60
|
+
addedFlag = true;
|
|
61
|
+
const nextTrees = [...trees, tree];
|
|
62
|
+
const nextAliases = [...fm.aliases];
|
|
63
|
+
ensureAlias(nextAliases, { type: "git-worktree", value: tree.path });
|
|
64
|
+
if (tree.branch) {
|
|
65
|
+
ensureAlias(nextAliases, { type: "git-branch", value: tree.branch });
|
|
66
|
+
}
|
|
67
|
+
return { ...fm, trees: nextTrees, aliases: nextAliases };
|
|
68
|
+
}, "tree-add");
|
|
69
|
+
if (!outcome.ok)
|
|
70
|
+
return outcome;
|
|
71
|
+
return { ok: true, added: addedFlag };
|
|
72
|
+
}
|
|
73
|
+
/** Remove a tree (by path) from the quest's `trees:` list. */
|
|
74
|
+
export function removeTreeFromQuest(questDir, path) {
|
|
75
|
+
let removedFlag = false;
|
|
76
|
+
const outcome = changeQuestFrontMatter(questDir, (fm) => {
|
|
77
|
+
const trees = fm.trees ?? [];
|
|
78
|
+
const target = trees.find((t) => t.path === path);
|
|
79
|
+
if (!target)
|
|
80
|
+
return undefined;
|
|
81
|
+
removedFlag = true;
|
|
82
|
+
const nextTrees = trees.filter((t) => t.path !== path);
|
|
83
|
+
const nextAliases = [...fm.aliases];
|
|
84
|
+
removeAlias(nextAliases, { type: "git-worktree", value: path });
|
|
85
|
+
if (target.branch) {
|
|
86
|
+
removeAlias(nextAliases, { type: "git-branch", value: target.branch });
|
|
87
|
+
}
|
|
88
|
+
const next = { ...fm, aliases: nextAliases };
|
|
89
|
+
if (nextTrees.length > 0)
|
|
90
|
+
next.trees = nextTrees;
|
|
91
|
+
else
|
|
92
|
+
delete next.trees;
|
|
93
|
+
return next;
|
|
94
|
+
}, "tree-remove");
|
|
95
|
+
if (!outcome.ok)
|
|
96
|
+
return outcome;
|
|
97
|
+
return { ok: true, removed: removedFlag };
|
|
98
|
+
}
|
|
99
|
+
/** Snapshot the quest's tree list. */
|
|
100
|
+
export function listTreesOnQuest(questDir) {
|
|
101
|
+
const path = questReadme(questDir);
|
|
102
|
+
if (!existsSync(path))
|
|
103
|
+
return { ok: false, reason: "Quest README not found." };
|
|
104
|
+
// Read-only: the atomic-rename write contract guarantees
|
|
105
|
+
// observers see either the old or the new file in full,
|
|
106
|
+
// so this readFileSync cannot tear against a concurrent
|
|
107
|
+
// writer.
|
|
108
|
+
const text = readFileSync(path, "utf8");
|
|
109
|
+
const parsed = parseQuestFrontMatter(text);
|
|
110
|
+
if (!parsed) {
|
|
111
|
+
return { ok: false, reason: "Quest README has no readable frontmatter." };
|
|
112
|
+
}
|
|
113
|
+
return { ok: true, trees: parsed.frontMatter.trees ?? [] };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Append or replace a pendingPrune entry on the quest. Each
|
|
117
|
+
* blocked tree is keyed by `path`: a second blocker for the
|
|
118
|
+
* same path overwrites the first; blockers for distinct
|
|
119
|
+
* paths accumulate. Pass `null` to clear every entry, or
|
|
120
|
+
* pass `clearPath` to clear one entry by tree path.
|
|
121
|
+
*/
|
|
122
|
+
export function setPendingPrune(questDir, pending, options) {
|
|
123
|
+
const outcome = changeQuestFrontMatter(questDir, (fm) => {
|
|
124
|
+
const next = { ...fm };
|
|
125
|
+
const existing = next.pendingPrune ?? [];
|
|
126
|
+
let merged = existing;
|
|
127
|
+
if (pending === null && !options?.clearPath) {
|
|
128
|
+
merged = [];
|
|
129
|
+
}
|
|
130
|
+
else if (options?.clearPath) {
|
|
131
|
+
merged = existing.filter((e) => e.path !== options.clearPath);
|
|
132
|
+
}
|
|
133
|
+
if (pending) {
|
|
134
|
+
merged = [...merged.filter((e) => e.path !== pending.path), pending];
|
|
135
|
+
}
|
|
136
|
+
if (merged.length > 0)
|
|
137
|
+
next.pendingPrune = merged;
|
|
138
|
+
else
|
|
139
|
+
delete next.pendingPrune;
|
|
140
|
+
return next;
|
|
141
|
+
}, "tree-pending-prune");
|
|
142
|
+
if (!outcome.ok)
|
|
143
|
+
return outcome;
|
|
144
|
+
return { ok: true };
|
|
145
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL fetchers for the `quest create --url=...` path.
|
|
3
|
+
*
|
|
4
|
+
* A fetcher takes a parsed ref (type + value) and returns
|
|
5
|
+
* a `SeedHints` payload the create action uses to fill in
|
|
6
|
+
* the new quest's title, originator and first Journey
|
|
7
|
+
* entry. Fetchers are pluggable: built-ins handle
|
|
8
|
+
* `github-issue` and `github-pr` via the `gh` CLI; new
|
|
9
|
+
* fetchers (Slack, internal trackers, etc.) plug in through
|
|
10
|
+
* `registerUrlFetcher`.
|
|
11
|
+
*
|
|
12
|
+
* Fetchers must be non-interactive. They never open OAuth
|
|
13
|
+
* flows or write to disk. When an integration is not
|
|
14
|
+
* available, return `undefined`.
|
|
15
|
+
*/
|
|
16
|
+
import type { Ref } from "../../refs/index.js";
|
|
17
|
+
/** Hints a fetcher returns to seed the new quest. */
|
|
18
|
+
export interface SeedHints {
|
|
19
|
+
/** Suggested H1 title. */
|
|
20
|
+
title?: string;
|
|
21
|
+
/** Body or excerpt of the source, for the first Journey entry. */
|
|
22
|
+
excerpt?: string;
|
|
23
|
+
/** Source author's handle, as `type:value` (e.g. `github:octocat`). */
|
|
24
|
+
originator?: {
|
|
25
|
+
type: string;
|
|
26
|
+
value: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface UrlFetcher {
|
|
30
|
+
/** Ref type this fetcher handles. */
|
|
31
|
+
type: string;
|
|
32
|
+
/** Fetch hints for one ref of this type. */
|
|
33
|
+
fetch(ref: Ref): Promise<SeedHints | undefined>;
|
|
34
|
+
}
|
|
35
|
+
/** Register a URL fetcher for a ref type. */
|
|
36
|
+
export declare const registerUrlFetcher: (fetcher: UrlFetcher) => void;
|
|
37
|
+
/** Remove a fetcher. Idempotent. */
|
|
38
|
+
export declare const unregisterUrlFetcher: (type: string) => void;
|
|
39
|
+
/** Empty the registry. Tests only. */
|
|
40
|
+
export declare const clearUrlFetchers: () => void;
|
|
41
|
+
/** Look up a fetcher by ref type. */
|
|
42
|
+
export declare const getUrlFetcher: (type: string) => UrlFetcher | undefined;
|
|
43
|
+
/** Snapshot of every registered fetcher. */
|
|
44
|
+
export declare const listUrlFetchers: () => UrlFetcher[];
|
|
45
|
+
/** Fetch hints for a ref, or undefined when nothing handles it. */
|
|
46
|
+
export declare function fetchUrlHints(ref: Ref): Promise<SeedHints | undefined>;
|
|
47
|
+
export declare const githubIssueFetcher: UrlFetcher;
|
|
48
|
+
export declare const githubPrFetcher: UrlFetcher;
|
|
49
|
+
/** Seed the built-in fetchers. Idempotent. */
|
|
50
|
+
export declare function registerBuiltinUrlFetchers(): void;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL fetchers for the `quest create --url=...` path.
|
|
3
|
+
*
|
|
4
|
+
* A fetcher takes a parsed ref (type + value) and returns
|
|
5
|
+
* a `SeedHints` payload the create action uses to fill in
|
|
6
|
+
* the new quest's title, originator and first Journey
|
|
7
|
+
* entry. Fetchers are pluggable: built-ins handle
|
|
8
|
+
* `github-issue` and `github-pr` via the `gh` CLI; new
|
|
9
|
+
* fetchers (Slack, internal trackers, etc.) plug in through
|
|
10
|
+
* `registerUrlFetcher`.
|
|
11
|
+
*
|
|
12
|
+
* Fetchers must be non-interactive. They never open OAuth
|
|
13
|
+
* flows or write to disk. When an integration is not
|
|
14
|
+
* available, return `undefined`.
|
|
15
|
+
*/
|
|
16
|
+
import { execFile } from "node:child_process";
|
|
17
|
+
import { promisify } from "node:util";
|
|
18
|
+
import { sanitizeExcerpt, sanitizeHandle, sanitizeSingleLine, } from "./sanitize.js";
|
|
19
|
+
const execFileAsync = promisify(execFile);
|
|
20
|
+
import { createGlobalSymbolRegistry } from "../registry/global-symbol-registry.js";
|
|
21
|
+
const registry = createGlobalSymbolRegistry({
|
|
22
|
+
slot: "pi:agentic-harness:quest-url-fetchers",
|
|
23
|
+
getId: (f) => f.type,
|
|
24
|
+
});
|
|
25
|
+
/** Register a URL fetcher for a ref type. */
|
|
26
|
+
export const registerUrlFetcher = (fetcher) => registry.register(fetcher);
|
|
27
|
+
/** Remove a fetcher. Idempotent. */
|
|
28
|
+
export const unregisterUrlFetcher = (type) => registry.unregister(type);
|
|
29
|
+
/** Empty the registry. Tests only. */
|
|
30
|
+
export const clearUrlFetchers = () => registry.clear();
|
|
31
|
+
/** Look up a fetcher by ref type. */
|
|
32
|
+
export const getUrlFetcher = (type) => registry.get(type);
|
|
33
|
+
/** Snapshot of every registered fetcher. */
|
|
34
|
+
export const listUrlFetchers = () => registry.list();
|
|
35
|
+
/** Fetch hints for a ref, or undefined when nothing handles it. */
|
|
36
|
+
export async function fetchUrlHints(ref) {
|
|
37
|
+
const fetcher = registry.get(ref.type);
|
|
38
|
+
if (!fetcher)
|
|
39
|
+
return undefined;
|
|
40
|
+
try {
|
|
41
|
+
return await fetcher.fetch(ref);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Fetcher failures are non-fatal; the caller falls back
|
|
45
|
+
// to alias-only seeding.
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function fetchGhJson(subcommand, value) {
|
|
50
|
+
// Ref value is `<owner>/<repo>#<number>`. Translate to gh
|
|
51
|
+
// CLI args.
|
|
52
|
+
const match = /^([^/]+)\/([^#]+)#(\d+)$/.exec(value);
|
|
53
|
+
if (!match)
|
|
54
|
+
return undefined;
|
|
55
|
+
const [, owner, repo, number] = match;
|
|
56
|
+
const { stdout } = await execFileAsync("gh", [
|
|
57
|
+
subcommand,
|
|
58
|
+
"view",
|
|
59
|
+
number,
|
|
60
|
+
"--repo",
|
|
61
|
+
`${owner}/${repo}`,
|
|
62
|
+
"--json",
|
|
63
|
+
"title,body,author",
|
|
64
|
+
]);
|
|
65
|
+
const data = JSON.parse(stdout);
|
|
66
|
+
const hints = {};
|
|
67
|
+
if (data.title) {
|
|
68
|
+
hints.title = sanitizeSingleLine(data.title);
|
|
69
|
+
}
|
|
70
|
+
if (data.body) {
|
|
71
|
+
hints.excerpt = sanitizeExcerpt(data.body);
|
|
72
|
+
}
|
|
73
|
+
if (data.author?.login) {
|
|
74
|
+
const handle = sanitizeHandle(data.author.login);
|
|
75
|
+
if (handle.length > 0) {
|
|
76
|
+
hints.originator = { type: "github", value: handle };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return Object.keys(hints).length > 0 ? hints : undefined;
|
|
80
|
+
}
|
|
81
|
+
export const githubIssueFetcher = {
|
|
82
|
+
type: "github-issue",
|
|
83
|
+
async fetch(ref) {
|
|
84
|
+
return fetchGhJson("issue", ref.value);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
export const githubPrFetcher = {
|
|
88
|
+
type: "github-pr",
|
|
89
|
+
async fetch(ref) {
|
|
90
|
+
return fetchGhJson("pr", ref.value);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
/** Seed the built-in fetchers. Idempotent. */
|
|
94
|
+
export function registerBuiltinUrlFetchers() {
|
|
95
|
+
registerUrlFetcher(githubIssueFetcher);
|
|
96
|
+
registerUrlFetcher(githubPrFetcher);
|
|
97
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classifies a write target into one of four categories so the
|
|
3
|
+
* quest gate can decide whether to allow, defer or supply. The
|
|
4
|
+
* classifier is pure: filesystem and git signals arrive as
|
|
5
|
+
* injected predicates, so the ladder is unit-testable without
|
|
6
|
+
* real `.git` fixtures. The risky production predicates (git
|
|
7
|
+
* ignore resolution, index membership, working-tree discovery)
|
|
8
|
+
* are wired in by the caller and covered separately.
|
|
9
|
+
*
|
|
10
|
+
* Tracked code and untracked-in-tree are kept distinct because
|
|
11
|
+
* git's ignore answer cannot tell a forgotten scratch directory
|
|
12
|
+
* from a new source file. Deferring only tracked edits during
|
|
13
|
+
* the plan phase keeps the discipline honest without ever
|
|
14
|
+
* cornering new work.
|
|
15
|
+
*/
|
|
16
|
+
/** The category a write target falls into. */
|
|
17
|
+
export type WriteCategory = "device" | "quest-scratch" | "quest-internal" | "system-temp" | "scratch" | "tracked-code" | "untracked-in-tree" | "loose-file";
|
|
18
|
+
/** The classifier's verdict for one write target. */
|
|
19
|
+
export interface WriteClassification {
|
|
20
|
+
category: WriteCategory;
|
|
21
|
+
/** For tracked-code, the git working tree root containing the target. */
|
|
22
|
+
treeRoot?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Signals the classifier needs, injected so the ladder stays pure. */
|
|
25
|
+
export interface ClassifyWriteOptions {
|
|
26
|
+
/** The loaded quest's own directory, or null when none is loaded. */
|
|
27
|
+
questDir: string | null;
|
|
28
|
+
/**
|
|
29
|
+
* The quest's managed scratch directory, or null when the quest
|
|
30
|
+
* has none yet. Writes here are allowed and reaped on conclude.
|
|
31
|
+
*/
|
|
32
|
+
scratchDir: string | null;
|
|
33
|
+
/**
|
|
34
|
+
* System temp roots (the OS temp dir, /tmp, /private/tmp). A
|
|
35
|
+
* write here that is not under the managed scratch dir is funnelled
|
|
36
|
+
* back into it rather than left to leak unreaped.
|
|
37
|
+
*/
|
|
38
|
+
tempRoots: string[];
|
|
39
|
+
/** Whether the target is gitignored at its destination. */
|
|
40
|
+
isGitignored: (absPath: string) => boolean;
|
|
41
|
+
/** Whether the target is tracked in its repository's index. */
|
|
42
|
+
isTracked: (absPath: string) => boolean;
|
|
43
|
+
/** The git working tree root containing the target, or null when none. */
|
|
44
|
+
gitTreeRootOf: (absPath: string) => string | null;
|
|
45
|
+
}
|
|
46
|
+
export declare function classifyWrite(target: string, opts: ClassifyWriteOptions): WriteClassification;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classifies a write target into one of four categories so the
|
|
3
|
+
* quest gate can decide whether to allow, defer or supply. The
|
|
4
|
+
* classifier is pure: filesystem and git signals arrive as
|
|
5
|
+
* injected predicates, so the ladder is unit-testable without
|
|
6
|
+
* real `.git` fixtures. The risky production predicates (git
|
|
7
|
+
* ignore resolution, index membership, working-tree discovery)
|
|
8
|
+
* are wired in by the caller and covered separately.
|
|
9
|
+
*
|
|
10
|
+
* Tracked code and untracked-in-tree are kept distinct because
|
|
11
|
+
* git's ignore answer cannot tell a forgotten scratch directory
|
|
12
|
+
* from a new source file. Deferring only tracked edits during
|
|
13
|
+
* the plan phase keeps the discipline honest without ever
|
|
14
|
+
* cornering new work.
|
|
15
|
+
*/
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* Classify an absolute, already-resolved write target. The caller
|
|
19
|
+
* resolves and canonicalizes the path before calling.
|
|
20
|
+
*/
|
|
21
|
+
/** Whether `target` is `dir` itself or sits anywhere beneath it. */
|
|
22
|
+
function isUnder(target, dir) {
|
|
23
|
+
const base = path.resolve(dir);
|
|
24
|
+
const resolved = path.resolve(target);
|
|
25
|
+
return resolved === base || resolved.startsWith(`${base}${path.sep}`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether the target is a node under /dev (the discard sink and the
|
|
29
|
+
* standard streams). These are never file writes to police, so the
|
|
30
|
+
* gate allows them unconditionally.
|
|
31
|
+
*/
|
|
32
|
+
function isDeviceNode(target) {
|
|
33
|
+
return path.resolve(target).startsWith(`${path.sep}dev${path.sep}`);
|
|
34
|
+
}
|
|
35
|
+
export function classifyWrite(target, opts) {
|
|
36
|
+
if (isDeviceNode(target)) {
|
|
37
|
+
return { category: "device" };
|
|
38
|
+
}
|
|
39
|
+
if (opts.scratchDir && isUnder(target, opts.scratchDir)) {
|
|
40
|
+
return { category: "quest-scratch" };
|
|
41
|
+
}
|
|
42
|
+
if (opts.questDir && isUnder(target, opts.questDir)) {
|
|
43
|
+
return { category: "quest-internal" };
|
|
44
|
+
}
|
|
45
|
+
if (opts.tempRoots.some((root) => isUnder(target, root))) {
|
|
46
|
+
return { category: "system-temp" };
|
|
47
|
+
}
|
|
48
|
+
if (opts.isGitignored(target)) {
|
|
49
|
+
return { category: "scratch" };
|
|
50
|
+
}
|
|
51
|
+
const treeRoot = opts.gitTreeRootOf(target);
|
|
52
|
+
if (treeRoot) {
|
|
53
|
+
const category = opts.isTracked(target)
|
|
54
|
+
? "tracked-code"
|
|
55
|
+
: "untracked-in-tree";
|
|
56
|
+
return { category, treeRoot };
|
|
57
|
+
}
|
|
58
|
+
return { category: "loose-file" };
|
|
59
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in ref types: GitHub issues, GitHub PRs, GitHub
|
|
3
|
+
* repos, Slack messages and Slack threads.
|
|
4
|
+
*
|
|
5
|
+
* Each type recognises its own surface forms in text and
|
|
6
|
+
* builds a canonical URL from a stored value. The canonical
|
|
7
|
+
* value is the smallest unambiguous string that lets us
|
|
8
|
+
* rebuild a URL without losing information.
|
|
9
|
+
*
|
|
10
|
+
* type canonical value url shape
|
|
11
|
+
* ------------- ----------------------- ----------------------------------
|
|
12
|
+
* github-issue owner/repo#NNN github.com/owner/repo/issues/NNN
|
|
13
|
+
* github-pr owner/repo#NNN github.com/owner/repo/pull/NNN
|
|
14
|
+
* github-repo owner/repo github.com/owner/repo
|
|
15
|
+
* slack-message workspace/CHANNEL/pTS <workspace>.slack.com/archives/CHANNEL/pTS
|
|
16
|
+
* slack-thread workspace/CHANNEL/pTS <workspace>.slack.com/archives/CHANNEL/pTS
|
|
17
|
+
*
|
|
18
|
+
* GitHub's numbering shares one namespace between issues
|
|
19
|
+
* and PRs within a repo, so the bare `owner/repo#NNN`
|
|
20
|
+
* notation cannot distinguish them. We match the bare form
|
|
21
|
+
* as `github-issue` only; PRs require a `/pull/` URL form
|
|
22
|
+
* to disambiguate. The quest tool resolves the actual kind
|
|
23
|
+
* via GitHub API when it matters.
|
|
24
|
+
*
|
|
25
|
+
* Slack threads and messages share their URL surface; we
|
|
26
|
+
* discriminate by the `thread_ts` query parameter. A URL
|
|
27
|
+
* with `thread_ts=` is a `slack-thread` pointing at the
|
|
28
|
+
* thread parent; a URL without is a `slack-message`.
|
|
29
|
+
*/
|
|
30
|
+
import type { RefType } from "../../refs/types.js";
|
|
31
|
+
/** All built-in ref types in stable iteration order. */
|
|
32
|
+
export declare const BUILTIN_REF_TYPES: readonly RefType[];
|