@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,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-global singletons shared across module instances.
|
|
3
|
+
*
|
|
4
|
+
* A host that loads a library's modules more than once per process
|
|
5
|
+
* (pi loads each extension as its own module instance) does not get
|
|
6
|
+
* one registry from a module-level `const registry = new Map()`: each
|
|
7
|
+
* loader that imports the module gets its own. Anything one caller
|
|
8
|
+
* writes and another reads (a recorder sink, a prompt contributor, an
|
|
9
|
+
* LSP backend, the shared browser) must therefore live on
|
|
10
|
+
* `globalThis` under a shared key rather than in a module variable.
|
|
11
|
+
* `Symbol.for` gives every module instance the same key, and
|
|
12
|
+
* `globalThis` is shared across them, so the value is genuinely one
|
|
13
|
+
* per process.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Get the process-global value for `key`, creating it once with
|
|
17
|
+
* `create` on first access. Every caller in the process, in any
|
|
18
|
+
* module instance, receives the same value.
|
|
19
|
+
*/
|
|
20
|
+
export function processGlobal(key, create) {
|
|
21
|
+
const symbol = Symbol.for(key);
|
|
22
|
+
const store = globalThis;
|
|
23
|
+
// Test presence with `in`, not truthiness, so a value that is
|
|
24
|
+
// legitimately undefined or falsy is still created only once.
|
|
25
|
+
if (!(symbol in store))
|
|
26
|
+
store[symbol] = create();
|
|
27
|
+
return store[symbol];
|
|
28
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reverse index from alias `type:value` keys to quest ids.
|
|
3
|
+
*
|
|
4
|
+
* Built once from a `QuestIndex` (the discovery walk's
|
|
5
|
+
* output). The `quest create` action uses this to detect
|
|
6
|
+
* "this URL is already attached to an existing quest" and
|
|
7
|
+
* propose loading instead of creating a duplicate.
|
|
8
|
+
*/
|
|
9
|
+
import type { QuestAlias } from "../../quest/types.js";
|
|
10
|
+
import type { QuestIndex } from "./discovery.js";
|
|
11
|
+
/**
|
|
12
|
+
* Format a `{type, value}` alias as a flat lookup key. The type is
|
|
13
|
+
* lowercased so case variants of the same registered type (GitHub-PR
|
|
14
|
+
* and github-pr) resolve to one key; the value is kept verbatim,
|
|
15
|
+
* since paths and refs are case-sensitive.
|
|
16
|
+
*/
|
|
17
|
+
export declare function aliasKey(alias: QuestAlias): string;
|
|
18
|
+
export interface AliasIndex {
|
|
19
|
+
/**
|
|
20
|
+
* Map from `type:value` to the quest id it appears in.
|
|
21
|
+
* When the same key appears on more than one quest, the
|
|
22
|
+
* key is also in `collisions` and `byKey` holds the
|
|
23
|
+
* lexicographically-first id (a stable choice the
|
|
24
|
+
* consumer can name in the error message).
|
|
25
|
+
*/
|
|
26
|
+
byKey: Map<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* Every alias key that appears on more than one quest,
|
|
29
|
+
* with the full set of quest ids that share it. Consumers
|
|
30
|
+
* should refuse the operation when the alias they care
|
|
31
|
+
* about is in this map, since silently routing to the
|
|
32
|
+
* first-write-wins quest would mis-attribute work.
|
|
33
|
+
*/
|
|
34
|
+
collisions: Map<string, string[]>;
|
|
35
|
+
}
|
|
36
|
+
/** Build a reverse index across every quest in the index. */
|
|
37
|
+
export declare function buildAliasIndex(index: QuestIndex): AliasIndex;
|
|
38
|
+
/**
|
|
39
|
+
* Find the quest id holding this alias, if any.
|
|
40
|
+
*
|
|
41
|
+
* Returns `undefined` when the alias is unknown OR when it
|
|
42
|
+
* is shared across multiple quests. Use `lookupAliasDetail`
|
|
43
|
+
* (below) when you need to distinguish those cases and
|
|
44
|
+
* surface the collision to the user.
|
|
45
|
+
*/
|
|
46
|
+
export declare function lookupAlias(index: AliasIndex, alias: QuestAlias): string | undefined;
|
|
47
|
+
export type AliasLookup = {
|
|
48
|
+
kind: "miss";
|
|
49
|
+
} | {
|
|
50
|
+
kind: "hit";
|
|
51
|
+
questId: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: "collision";
|
|
54
|
+
questIds: string[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Look up an alias and surface duplicates explicitly so the
|
|
58
|
+
* caller can refuse with a clear "alias X points at quests
|
|
59
|
+
* A and B" message rather than silently routing to one.
|
|
60
|
+
*/
|
|
61
|
+
export declare function lookupAliasDetail(index: AliasIndex, alias: QuestAlias): AliasLookup;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reverse index from alias `type:value` keys to quest ids.
|
|
3
|
+
*
|
|
4
|
+
* Built once from a `QuestIndex` (the discovery walk's
|
|
5
|
+
* output). The `quest create` action uses this to detect
|
|
6
|
+
* "this URL is already attached to an existing quest" and
|
|
7
|
+
* propose loading instead of creating a duplicate.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Format a `{type, value}` alias as a flat lookup key. The type is
|
|
11
|
+
* lowercased so case variants of the same registered type (GitHub-PR
|
|
12
|
+
* and github-pr) resolve to one key; the value is kept verbatim,
|
|
13
|
+
* since paths and refs are case-sensitive.
|
|
14
|
+
*/
|
|
15
|
+
export function aliasKey(alias) {
|
|
16
|
+
return `${alias.type.toLowerCase()}:${alias.value}`;
|
|
17
|
+
}
|
|
18
|
+
/** Build a reverse index across every quest in the index. */
|
|
19
|
+
export function buildAliasIndex(index) {
|
|
20
|
+
const occurrences = new Map();
|
|
21
|
+
for (const entry of index.quests.values()) {
|
|
22
|
+
for (const alias of entry.doc.frontMatter.aliases) {
|
|
23
|
+
const key = aliasKey(alias);
|
|
24
|
+
const list = occurrences.get(key) ?? [];
|
|
25
|
+
if (!list.includes(entry.doc.frontMatter.id)) {
|
|
26
|
+
list.push(entry.doc.frontMatter.id);
|
|
27
|
+
}
|
|
28
|
+
occurrences.set(key, list);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const byKey = new Map();
|
|
32
|
+
const collisions = new Map();
|
|
33
|
+
for (const [key, ids] of occurrences) {
|
|
34
|
+
const sorted = [...ids].sort();
|
|
35
|
+
byKey.set(key, sorted[0]);
|
|
36
|
+
if (sorted.length > 1)
|
|
37
|
+
collisions.set(key, sorted);
|
|
38
|
+
}
|
|
39
|
+
return { byKey, collisions };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Find the quest id holding this alias, if any.
|
|
43
|
+
*
|
|
44
|
+
* Returns `undefined` when the alias is unknown OR when it
|
|
45
|
+
* is shared across multiple quests. Use `lookupAliasDetail`
|
|
46
|
+
* (below) when you need to distinguish those cases and
|
|
47
|
+
* surface the collision to the user.
|
|
48
|
+
*/
|
|
49
|
+
export function lookupAlias(index, alias) {
|
|
50
|
+
const key = aliasKey(alias);
|
|
51
|
+
if (index.collisions.has(key))
|
|
52
|
+
return undefined;
|
|
53
|
+
return index.byKey.get(key);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Look up an alias and surface duplicates explicitly so the
|
|
57
|
+
* caller can refuse with a clear "alias X points at quests
|
|
58
|
+
* A and B" message rather than silently routing to one.
|
|
59
|
+
*/
|
|
60
|
+
export function lookupAliasDetail(index, alias) {
|
|
61
|
+
const key = aliasKey(alias);
|
|
62
|
+
const collisionIds = index.collisions.get(key);
|
|
63
|
+
if (collisionIds)
|
|
64
|
+
return { kind: "collision", questIds: collisionIds };
|
|
65
|
+
const questId = index.byKey.get(key);
|
|
66
|
+
if (questId)
|
|
67
|
+
return { kind: "hit", questId };
|
|
68
|
+
return { kind: "miss" };
|
|
69
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append a Journey bullet to a quest README at a known
|
|
3
|
+
* path. Pure file operation, no extension state involved.
|
|
4
|
+
* The extension's `appendJourneyEntry` wraps this for the
|
|
5
|
+
* loaded-quest case; a caller holding a path uses this
|
|
6
|
+
* directly so it can write to any quest the alias index
|
|
7
|
+
* points it at. That caller used to be named here as the
|
|
8
|
+
* PR-sidequest bridge, which no longer exists.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Append a Journey bullet to `<questDir>/README.md`. When
|
|
12
|
+
* the Journey section is missing, append the whole section
|
|
13
|
+
* with the bullet inside. `now` is injected so tests can
|
|
14
|
+
* pin the date stamp.
|
|
15
|
+
*
|
|
16
|
+
* Returns `true` on success, `false` when the README is
|
|
17
|
+
* missing or unreadable so callers can log instead of
|
|
18
|
+
* silently dropping the journal entry.
|
|
19
|
+
*/
|
|
20
|
+
export declare function appendJourneyByPath(questDir: string, prose: string, opts?: {
|
|
21
|
+
now?: () => Date;
|
|
22
|
+
}): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append a Journey bullet to a quest README at a known
|
|
3
|
+
* path. Pure file operation, no extension state involved.
|
|
4
|
+
* The extension's `appendJourneyEntry` wraps this for the
|
|
5
|
+
* loaded-quest case; a caller holding a path uses this
|
|
6
|
+
* directly so it can write to any quest the alias index
|
|
7
|
+
* points it at. That caller used to be named here as the
|
|
8
|
+
* PR-sidequest bridge, which no longer exists.
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { nowYmd } from "./dates.js";
|
|
13
|
+
import { atomicWriteFile, withQuestLock } from "./io.js";
|
|
14
|
+
/**
|
|
15
|
+
* Append a Journey bullet to `<questDir>/README.md`. When
|
|
16
|
+
* the Journey section is missing, append the whole section
|
|
17
|
+
* with the bullet inside. `now` is injected so tests can
|
|
18
|
+
* pin the date stamp.
|
|
19
|
+
*
|
|
20
|
+
* Returns `true` on success, `false` when the README is
|
|
21
|
+
* missing or unreadable so callers can log instead of
|
|
22
|
+
* silently dropping the journal entry.
|
|
23
|
+
*/
|
|
24
|
+
export function appendJourneyByPath(questDir, prose, opts) {
|
|
25
|
+
const path = join(questDir, "README.md");
|
|
26
|
+
return withQuestLock(questDir, () => {
|
|
27
|
+
let text;
|
|
28
|
+
try {
|
|
29
|
+
text = readFileSync(path, "utf8");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const date = nowYmd(opts?.now);
|
|
35
|
+
const bullet = `- **${date}**: ${prose.trim()}`;
|
|
36
|
+
const journeyHeading = /^##\s+(?:[\u{1F300}-\u{1FFFF}]\s+)?Journey\s*$/mu;
|
|
37
|
+
const match = journeyHeading.exec(text);
|
|
38
|
+
let newText;
|
|
39
|
+
if (match) {
|
|
40
|
+
const lines = text.split("\n");
|
|
41
|
+
let lineIdx = 0;
|
|
42
|
+
let charCount = 0;
|
|
43
|
+
for (let i = 0; i < lines.length; i++) {
|
|
44
|
+
if (charCount + lines[i].length + 1 > match.index) {
|
|
45
|
+
lineIdx = i;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
charCount += lines[i].length + 1;
|
|
49
|
+
}
|
|
50
|
+
let insertAt = lineIdx + 1;
|
|
51
|
+
while (insertAt < lines.length && lines[insertAt].trim() === "") {
|
|
52
|
+
insertAt++;
|
|
53
|
+
}
|
|
54
|
+
lines.splice(insertAt, 0, bullet);
|
|
55
|
+
newText = lines.join("\n");
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
newText = `${text.replace(/\n*$/, "\n")}\n## 🌄 Journey\n\n${bullet}\n`;
|
|
59
|
+
}
|
|
60
|
+
atomicWriteFile(path, newText);
|
|
61
|
+
return true;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advisory classification of a bash command for the quest phase
|
|
3
|
+
* gate. The command is reduced to its executable skeleton first
|
|
4
|
+
* (heredoc bodies and quoted data removed) so a mutating verb that
|
|
5
|
+
* appears only as a literal argument, or inside a heredoc body,
|
|
6
|
+
* does not trip the gate. This is a nudge toward the right stage,
|
|
7
|
+
* not a security boundary.
|
|
8
|
+
*/
|
|
9
|
+
/** What kind of write, if any, a bash command performs. */
|
|
10
|
+
export type BashWriteKind = "git-mutating" | "bash-write" | "read-only";
|
|
11
|
+
/**
|
|
12
|
+
* Extract the destination paths a bash command writes to, so the
|
|
13
|
+
* gate can see where the write lands and allow scratch
|
|
14
|
+
* destinations. The command is reduced to the same data-stripped
|
|
15
|
+
* skeleton the classifier matches on, so a redirect that lived
|
|
16
|
+
* inside quoted data raises no phantom target. Three write shapes
|
|
17
|
+
* are read: redirect destinations (`>`, `>>`, excluding fd
|
|
18
|
+
* redirects such as `2>`), `tee` destinations, and the file
|
|
19
|
+
* argument of an in-place editor (sed -i, gsed -i, perl -i), whose
|
|
20
|
+
* quoted script has already been stripped, leaving the file as a
|
|
21
|
+
* trailing non-flag token.
|
|
22
|
+
*
|
|
23
|
+
* A target the command builds out of its own variables is expanded
|
|
24
|
+
* from the assignments in that same command, since `Q=...; echo >
|
|
25
|
+
* "$Q/f"` is one of the commonest ways to write to a directory whose
|
|
26
|
+
* path is long. A target still carrying a sigil after that is dropped
|
|
27
|
+
* rather than reported: the caller resolves what it is given against a
|
|
28
|
+
* working directory, so a literal `$UNKNOWN/f.txt` becomes a real path
|
|
29
|
+
* nobody wrote to, and judging the wrong file is worse than declining
|
|
30
|
+
* to judge this one.
|
|
31
|
+
*
|
|
32
|
+
* A quoted destination counts, which is the ordinary spelling and the
|
|
33
|
+
* spelling a variable almost always arrives in. Reading it does not cost
|
|
34
|
+
* the protection against a `>` inside a string, because the two are
|
|
35
|
+
* different questions: what makes a redirect real is its operator being
|
|
36
|
+
* unquoted, not its target being bare. The command model already draws
|
|
37
|
+
* that line, so the targets come from there and the patterns below stay
|
|
38
|
+
* as a second pass for the grammar it declines, such as a subshell or a
|
|
39
|
+
* loop. Both readings are kept because this gate wants recall: a missed
|
|
40
|
+
* target is an unjudged write, while a spurious one is inert unless it
|
|
41
|
+
* happens to name tracked code.
|
|
42
|
+
*/
|
|
43
|
+
export declare function bashWriteTargets(command: string): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Classify a bash command after stripping non-executable content,
|
|
46
|
+
* so quoted literals and heredoc bodies cannot raise a false
|
|
47
|
+
* positive.
|
|
48
|
+
*/
|
|
49
|
+
export declare function classifyBashWrite(command: string): BashWriteKind;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advisory classification of a bash command for the quest phase
|
|
3
|
+
* gate. The command is reduced to its executable skeleton first
|
|
4
|
+
* (heredoc bodies and quoted data removed) so a mutating verb that
|
|
5
|
+
* appears only as a literal argument, or inside a heredoc body,
|
|
6
|
+
* does not trip the gate. This is a nudge toward the right stage,
|
|
7
|
+
* not a security boundary.
|
|
8
|
+
*/
|
|
9
|
+
import { tokenize } from "../../command/index.js";
|
|
10
|
+
import { stripHeredocBodies, stripShellData, unquote, } from "../../shell/index.js";
|
|
11
|
+
/** Git subcommands that change repository or working-tree state. */
|
|
12
|
+
const GIT_MUTATING = /\bgit(?:\s+(?:-c\s+\S+|-C\s+\S+|--git-dir=\S+|--work-tree=\S+|--no-pager))*\s+(add|commit|push|pull|merge|rebase|reset|checkout|stash|cherry-pick|revert|tag|switch|restore|am|format-patch)\b/i;
|
|
13
|
+
/** Shell patterns that write to the filesystem via redirection or in-place edit. */
|
|
14
|
+
const BASH_WRITE_PATTERNS = [
|
|
15
|
+
/(^|\s|[;&|`])cat\s+[^|]*>>?\s/, // cat > foo, cat >> foo
|
|
16
|
+
/(^|\s|[;&|`])tee\s+(?:-[a-z]+\s+)*\S/, // tee foo, tee -a foo
|
|
17
|
+
/(^|\s|[;&|`])sed\s+(?:-[a-z]+\s+)*-i\b/, // sed -i
|
|
18
|
+
/(^|\s|[;&|`])gsed\s+(?:-[a-z]+\s+)*-i\b/, // homebrew sed
|
|
19
|
+
/(^|\s|[;&|`])perl\s+(?:-[a-z]+\s+)*-i\b/, // perl -i
|
|
20
|
+
/(^|\s|[;&|`])printf\s+.+>>?\s/, // printf > foo
|
|
21
|
+
/(^|\s|[;&|`])echo\s+.+>>?\s/, // echo > foo
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Extract the destination paths a bash command writes to, so the
|
|
25
|
+
* gate can see where the write lands and allow scratch
|
|
26
|
+
* destinations. The command is reduced to the same data-stripped
|
|
27
|
+
* skeleton the classifier matches on, so a redirect that lived
|
|
28
|
+
* inside quoted data raises no phantom target. Three write shapes
|
|
29
|
+
* are read: redirect destinations (`>`, `>>`, excluding fd
|
|
30
|
+
* redirects such as `2>`), `tee` destinations, and the file
|
|
31
|
+
* argument of an in-place editor (sed -i, gsed -i, perl -i), whose
|
|
32
|
+
* quoted script has already been stripped, leaving the file as a
|
|
33
|
+
* trailing non-flag token.
|
|
34
|
+
*
|
|
35
|
+
* A target the command builds out of its own variables is expanded
|
|
36
|
+
* from the assignments in that same command, since `Q=...; echo >
|
|
37
|
+
* "$Q/f"` is one of the commonest ways to write to a directory whose
|
|
38
|
+
* path is long. A target still carrying a sigil after that is dropped
|
|
39
|
+
* rather than reported: the caller resolves what it is given against a
|
|
40
|
+
* working directory, so a literal `$UNKNOWN/f.txt` becomes a real path
|
|
41
|
+
* nobody wrote to, and judging the wrong file is worse than declining
|
|
42
|
+
* to judge this one.
|
|
43
|
+
*
|
|
44
|
+
* A quoted destination counts, which is the ordinary spelling and the
|
|
45
|
+
* spelling a variable almost always arrives in. Reading it does not cost
|
|
46
|
+
* the protection against a `>` inside a string, because the two are
|
|
47
|
+
* different questions: what makes a redirect real is its operator being
|
|
48
|
+
* unquoted, not its target being bare. The command model already draws
|
|
49
|
+
* that line, so the targets come from there and the patterns below stay
|
|
50
|
+
* as a second pass for the grammar it declines, such as a subshell or a
|
|
51
|
+
* loop. Both readings are kept because this gate wants recall: a missed
|
|
52
|
+
* target is an unjudged write, while a spurious one is inert unless it
|
|
53
|
+
* happens to name tracked code.
|
|
54
|
+
*/
|
|
55
|
+
export function bashWriteTargets(command) {
|
|
56
|
+
const skeleton = stripShellData(stripHeredocBodies(command));
|
|
57
|
+
const assigned = assignmentsIn(skeleton, command);
|
|
58
|
+
const targets = [];
|
|
59
|
+
const add = (token) => {
|
|
60
|
+
if (!token)
|
|
61
|
+
return;
|
|
62
|
+
const bare = token.replace(/^['"]/, "").replace(/['"]$/, "");
|
|
63
|
+
if (!bare)
|
|
64
|
+
return;
|
|
65
|
+
const value = expand(bare, assigned);
|
|
66
|
+
// Anything still holding a `$` was built from something this command
|
|
67
|
+
// does not say, so there is nothing honest to report.
|
|
68
|
+
if (value === undefined)
|
|
69
|
+
return;
|
|
70
|
+
targets.push(value);
|
|
71
|
+
};
|
|
72
|
+
// Redirect destinations: the token following > or >>. A leading
|
|
73
|
+
// digit or & marks an fd redirect (2>, &>), which routes a stream
|
|
74
|
+
// rather than naming a content target, so it is skipped.
|
|
75
|
+
// A closing paren is excluded from the target so `(echo x > f.ts)` does
|
|
76
|
+
// not report `f.ts)`, which names nothing and so is never judged. A real
|
|
77
|
+
// filename may hold a paren, but a subshell ending is far likelier, and
|
|
78
|
+
// this pass is the one reading commands the model would not.
|
|
79
|
+
for (const match of skeleton.matchAll(/(?<![0-9&])>>?\s*([^\s;&|<>()]+)/g)) {
|
|
80
|
+
add(match[1]);
|
|
81
|
+
}
|
|
82
|
+
// tee destinations: non-flag tokens following a tee invocation.
|
|
83
|
+
for (const match of skeleton.matchAll(/(?:^|[|;&]|\s)tee\s+((?:-[^\s]+\s+)*)(\S+)/g)) {
|
|
84
|
+
add(match[2]);
|
|
85
|
+
}
|
|
86
|
+
// In-place editor file arguments: every non-flag token after the
|
|
87
|
+
// editor invocation. An unquoted script token cannot resolve to
|
|
88
|
+
// a tracked path, so it is harmless to include.
|
|
89
|
+
for (const match of skeleton.matchAll(/(?:^|[|;&]|\s)(?:g?sed|perl)\s+([^|;&\n]*)/g)) {
|
|
90
|
+
const tokens = (match[1] ?? "").split(/\s+/).filter(Boolean);
|
|
91
|
+
if (!tokens.some((t) => t === "-i" || t.startsWith("-i")))
|
|
92
|
+
continue;
|
|
93
|
+
for (const token of tokens) {
|
|
94
|
+
if (token.startsWith("-"))
|
|
95
|
+
continue;
|
|
96
|
+
add(token);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
for (const target of modelledTargets(command))
|
|
100
|
+
add(target);
|
|
101
|
+
return [...new Set(targets)];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Write destinations read from the command model, where quoting is
|
|
105
|
+
* already understood.
|
|
106
|
+
*
|
|
107
|
+
* Three shapes, the same three the patterns above look for: a redirect's
|
|
108
|
+
* target, `tee`'s file arguments, and the file arguments of an in-place
|
|
109
|
+
* editor. A file-descriptor redirect (`2>`, `&>`) is skipped, matching
|
|
110
|
+
* what the pattern pass does, since it routes a stream rather than naming
|
|
111
|
+
* a content target.
|
|
112
|
+
*
|
|
113
|
+
* An editor's script is reported alongside its file, because telling one
|
|
114
|
+
* from the other means knowing whether this `sed` is the BSD or the GNU
|
|
115
|
+
* one. A script cannot name tracked code, so including it costs nothing,
|
|
116
|
+
* whereas missing the file was the whole defect.
|
|
117
|
+
*/
|
|
118
|
+
function modelledTargets(command) {
|
|
119
|
+
const line = tokenize(command);
|
|
120
|
+
const found = [];
|
|
121
|
+
for (const simple of line.commands) {
|
|
122
|
+
for (const redirect of simple.redirects) {
|
|
123
|
+
if (!redirect.target)
|
|
124
|
+
continue;
|
|
125
|
+
if (/^[0-9&]/.test(redirect.operator))
|
|
126
|
+
continue;
|
|
127
|
+
found.push(unquote(redirect.target.text));
|
|
128
|
+
}
|
|
129
|
+
const argv = simple.argv.map((word) => unquote(word.text));
|
|
130
|
+
const name = argv[0];
|
|
131
|
+
if (!name)
|
|
132
|
+
continue;
|
|
133
|
+
const rest = argv.slice(1).filter((token) => !token.startsWith("-"));
|
|
134
|
+
if (name === "tee")
|
|
135
|
+
found.push(...rest);
|
|
136
|
+
if (/^(g?sed|perl)$/.test(name) && editsInPlace(simple.argv)) {
|
|
137
|
+
found.push(...rest);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return found;
|
|
141
|
+
}
|
|
142
|
+
/** Whether an editor invocation carries the in-place flag. */
|
|
143
|
+
function editsInPlace(argv) {
|
|
144
|
+
return argv.some((word) => {
|
|
145
|
+
const text = unquote(word.text);
|
|
146
|
+
return text === "-i" || text.startsWith("-i");
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The variables a command assigns to itself, last assignment winning.
|
|
151
|
+
*
|
|
152
|
+
* Only the literal `NAME=value` form, which is what a command writing to
|
|
153
|
+
* a long path actually uses. A value built from an earlier variable is
|
|
154
|
+
* expanded against what is known so far, so `A=/tmp; B=$A/x` resolves.
|
|
155
|
+
*/
|
|
156
|
+
function assignmentsIn(skeleton, command) {
|
|
157
|
+
const known = new Map();
|
|
158
|
+
const record = (name, raw) => {
|
|
159
|
+
if (!name)
|
|
160
|
+
return;
|
|
161
|
+
const value = expand(unquote(raw), known);
|
|
162
|
+
if (value !== undefined)
|
|
163
|
+
known.set(name, value);
|
|
164
|
+
};
|
|
165
|
+
// The model first, because it keeps a quoted value. `Q="/tmp/q"` reaches
|
|
166
|
+
// the skeleton as `Q=""`, so reading only that lost exactly the paths
|
|
167
|
+
// long enough to be worth a variable.
|
|
168
|
+
for (const simple of tokenize(command).commands) {
|
|
169
|
+
for (const word of simple.assignments) {
|
|
170
|
+
const at = word.text.indexOf("=");
|
|
171
|
+
if (at < 0)
|
|
172
|
+
continue;
|
|
173
|
+
record(word.text.slice(0, at), word.text.slice(at + 1));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
for (const match of skeleton.matchAll(/(?:^|[;&|]|\s)([A-Za-z_][A-Za-z0-9_]*)=([^\s;&|<>]*)/g)) {
|
|
177
|
+
record(match[1], match[2] ?? "");
|
|
178
|
+
}
|
|
179
|
+
return known;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* A token with its variables filled in, or undefined when one of them is
|
|
183
|
+
* not something this command said.
|
|
184
|
+
*
|
|
185
|
+
* Both spellings, `$NAME` and `${NAME}`. A command substitution is never
|
|
186
|
+
* expanded: what it produces is not knowable from the text.
|
|
187
|
+
*/
|
|
188
|
+
function expand(token, known) {
|
|
189
|
+
if (!token.includes("$"))
|
|
190
|
+
return token;
|
|
191
|
+
if (token.includes("$("))
|
|
192
|
+
return undefined;
|
|
193
|
+
const filled = token.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}|\$([A-Za-z_][A-Za-z0-9_]*)/g, (whole, braced, bare) => known.get(braced ?? bare) ?? whole);
|
|
194
|
+
return filled.includes("$") ? undefined : filled;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Classify a bash command after stripping non-executable content,
|
|
198
|
+
* so quoted literals and heredoc bodies cannot raise a false
|
|
199
|
+
* positive.
|
|
200
|
+
*/
|
|
201
|
+
export function classifyBashWrite(command) {
|
|
202
|
+
const skeleton = stripShellData(stripHeredocBodies(command));
|
|
203
|
+
if (GIT_MUTATING.test(skeleton))
|
|
204
|
+
return "git-mutating";
|
|
205
|
+
if (BASH_WRITE_PATTERNS.some((rx) => rx.test(skeleton)))
|
|
206
|
+
return "bash-write";
|
|
207
|
+
return "read-only";
|
|
208
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date helpers for the quest workflow.
|
|
3
|
+
*
|
|
4
|
+
* Every quest write that stamps an `updated` field, every
|
|
5
|
+
* Journey bullet, every document's first scaffolded
|
|
6
|
+
* `updated` value asks the same question: what is today in
|
|
7
|
+
* YYYY-MM-DD form, using the local time zone? Put the
|
|
8
|
+
* answer here once.
|
|
9
|
+
*
|
|
10
|
+
* `now` is injectable so callers under test can pin the
|
|
11
|
+
* date stamp without monkey-patching `Date`.
|
|
12
|
+
*/
|
|
13
|
+
/** YYYY-MM-DD in the local time zone. */
|
|
14
|
+
export declare function nowYmd(now?: () => Date): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared date helpers for the quest workflow.
|
|
3
|
+
*
|
|
4
|
+
* Every quest write that stamps an `updated` field, every
|
|
5
|
+
* Journey bullet, every document's first scaffolded
|
|
6
|
+
* `updated` value asks the same question: what is today in
|
|
7
|
+
* YYYY-MM-DD form, using the local time zone? Put the
|
|
8
|
+
* answer here once.
|
|
9
|
+
*
|
|
10
|
+
* `now` is injectable so callers under test can pin the
|
|
11
|
+
* date stamp without monkey-patching `Date`.
|
|
12
|
+
*/
|
|
13
|
+
/** YYYY-MM-DD in the local time zone. */
|
|
14
|
+
export function nowYmd(now = () => new Date()) {
|
|
15
|
+
const d = now();
|
|
16
|
+
const y = d.getFullYear();
|
|
17
|
+
const m = String(d.getMonth() + 1).padStart(2, "0");
|
|
18
|
+
const day = String(d.getDate()).padStart(2, "0");
|
|
19
|
+
return `${y}-${m}-${day}`;
|
|
20
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest discovery: walk a quest tree on disk and build an
|
|
3
|
+
* in-memory index.
|
|
4
|
+
*
|
|
5
|
+
* Canonical disk layout (within `questsRoot`):
|
|
6
|
+
*
|
|
7
|
+
* QEST-20260603-AAA111/
|
|
8
|
+
* README.md
|
|
9
|
+
* plans/PLAN-20260603-BBB222.md
|
|
10
|
+
* research/RSCH-20260605-CCC333.md
|
|
11
|
+
* briefs/BRIF-20260606-EEE555.md
|
|
12
|
+
* reports/RPRT-20260607-FFF666.md
|
|
13
|
+
* QEST-20260610-DDD444/ (subquest of AAA111,
|
|
14
|
+
* README.md parent: QEST-...-AAA111
|
|
15
|
+
* lives flat at the
|
|
16
|
+
* quests root, not
|
|
17
|
+
* nested in its
|
|
18
|
+
* parent's directory)
|
|
19
|
+
*
|
|
20
|
+
* All quests live as immediate children of `questsRoot`.
|
|
21
|
+
* Hierarchy is expressed by the `parent:` front-matter
|
|
22
|
+
* field on each quest's README, not by directory nesting.
|
|
23
|
+
* Documents (plans, research, briefs, reports) live inside
|
|
24
|
+
* their owning quest's kind subdirectory (`plans/`,
|
|
25
|
+
* `research/`, `briefs/`, `reports/`).
|
|
26
|
+
*
|
|
27
|
+
* Discovery enforces these invariants. Two drift patterns
|
|
28
|
+
* are surfaced as `DiscoveryError` and the offending entry
|
|
29
|
+
* is skipped:
|
|
30
|
+
*
|
|
31
|
+
* - a `QEST-*` directory found inside another quest
|
|
32
|
+
* - a `PLAN-/RSCH-/BRIF-/RPRT-*.md` file at a quest's root
|
|
33
|
+
* instead of in its kind subdirectory
|
|
34
|
+
*
|
|
35
|
+
* Free-form subdirectories under a quest (`runs/`,
|
|
36
|
+
* `tools/`, `workloads/`, etc.) are not walked. They're
|
|
37
|
+
* surfaced only via the quest's own body references.
|
|
38
|
+
*/
|
|
39
|
+
import type { QuestDoc, QuestDocumentDoc } from "../../quest/types.js";
|
|
40
|
+
/** A single quest entry in the index. */
|
|
41
|
+
export interface QuestEntry {
|
|
42
|
+
dir: string;
|
|
43
|
+
doc: QuestDoc;
|
|
44
|
+
/** Documents inside this quest's directory (not its subquests). */
|
|
45
|
+
documents: QuestDocumentEntry[];
|
|
46
|
+
}
|
|
47
|
+
/** A document (plan/research/brief/report) under a quest. */
|
|
48
|
+
export interface QuestDocumentEntry {
|
|
49
|
+
path: string;
|
|
50
|
+
doc: QuestDocumentDoc;
|
|
51
|
+
}
|
|
52
|
+
/** The whole tree. */
|
|
53
|
+
export interface QuestIndex {
|
|
54
|
+
/** Every discovered quest by id. */
|
|
55
|
+
quests: Map<string, QuestEntry>;
|
|
56
|
+
/**
|
|
57
|
+
* Parent-to-children adjacency. The empty key `""`
|
|
58
|
+
* holds top-level quests (those whose `parent` is
|
|
59
|
+
* null).
|
|
60
|
+
*/
|
|
61
|
+
children: Map<string, string[]>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The ranks of every quest sharing a parent and priority bucket (a
|
|
65
|
+
* sibling set), optionally excluding one id. Callers pair this with
|
|
66
|
+
* `nextRank` to place a new or moved quest at the next free rank in
|
|
67
|
+
* its group rather than colliding at rank 1.
|
|
68
|
+
*/
|
|
69
|
+
export declare function siblingRanks(index: QuestIndex, parent: string | null, priority: string, excludeId?: string): number[];
|
|
70
|
+
interface DiscoveryError {
|
|
71
|
+
path: string;
|
|
72
|
+
message: string;
|
|
73
|
+
}
|
|
74
|
+
/** Result of a discovery walk. */
|
|
75
|
+
export interface DiscoveryResult {
|
|
76
|
+
index: QuestIndex;
|
|
77
|
+
errors: DiscoveryError[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Drop the discovery memo. Tests call this between runs; write
|
|
81
|
+
* paths do not need it because the signature catches their
|
|
82
|
+
* changes on the next read.
|
|
83
|
+
*/
|
|
84
|
+
export declare function clearDiscoveryCache(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Walk `questsRoot` and build the index, memoized per root. The
|
|
87
|
+
* walk re-parses every README and document, which is the costly
|
|
88
|
+
* part; this caches the result behind a cheap mtime-and-size
|
|
89
|
+
* signature so repeated read verbs in a session do not re-parse
|
|
90
|
+
* an unchanged tree. The signature recomputes on every call (a
|
|
91
|
+
* directory traversal plus stats, no file reads), so any change
|
|
92
|
+
* to a README, a document, or the set of quests invalidates the
|
|
93
|
+
* cache on the next read.
|
|
94
|
+
*/
|
|
95
|
+
export declare function discoverQuests(questsRoot: string): DiscoveryResult;
|
|
96
|
+
export {};
|