@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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git commit command parsing: locating a git commit past its
|
|
3
|
+
* global options and extracting its message (heredoc, -m/-am, or
|
|
4
|
+
* -F file) on the command model.
|
|
5
|
+
*
|
|
6
|
+
* These are commit-guardian internals. General-purpose shell
|
|
7
|
+
* parsing lives in lib/shell/.
|
|
8
|
+
*/
|
|
9
|
+
import { effectiveCwd, findFlag, findFlags, tokenize, } from "../../command/index.js";
|
|
10
|
+
import { unquote } from "../../shell/index.js";
|
|
11
|
+
/**
|
|
12
|
+
* Git global options that sit before the subcommand and take a
|
|
13
|
+
* separate value, so the value token is skipped when locating the
|
|
14
|
+
* subcommand. Attached forms (-Cpath, --git-dir=...) and the
|
|
15
|
+
* boolean globals consume only their own token.
|
|
16
|
+
*/
|
|
17
|
+
const GIT_GLOBAL_VALUE_FLAGS = new Set([
|
|
18
|
+
"-C",
|
|
19
|
+
"-c",
|
|
20
|
+
"--git-dir",
|
|
21
|
+
"--work-tree",
|
|
22
|
+
"--namespace",
|
|
23
|
+
"--config-env",
|
|
24
|
+
"--super-prefix",
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Index of the git subcommand in argv, skipping any leading global
|
|
28
|
+
* options, or -1 when this is not a git command or has no
|
|
29
|
+
* subcommand. So `git -C dir commit` resolves to the index of
|
|
30
|
+
* `commit`, not `-C`.
|
|
31
|
+
*/
|
|
32
|
+
function gitSubcommandIndex(argv) {
|
|
33
|
+
if (argv[0]?.text !== "git")
|
|
34
|
+
return -1;
|
|
35
|
+
let i = 1;
|
|
36
|
+
while (i < argv.length) {
|
|
37
|
+
const token = argv[i].text;
|
|
38
|
+
if (!token.startsWith("-"))
|
|
39
|
+
return i;
|
|
40
|
+
i += GIT_GLOBAL_VALUE_FLAGS.has(token) ? 2 : 1;
|
|
41
|
+
}
|
|
42
|
+
return -1;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Find the git command in a tokenized line whose subcommand is
|
|
46
|
+
* `sub`, looking past leading global options so a form like
|
|
47
|
+
* `git -C dir commit` is still found.
|
|
48
|
+
*/
|
|
49
|
+
export function findGitCommand(line, sub) {
|
|
50
|
+
return line.commands.find((command) => {
|
|
51
|
+
const index = gitSubcommandIndex(command.argv);
|
|
52
|
+
return index >= 0 && command.argv[index]?.text === sub;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Whether a bash command contains a git commit, global options aside. */
|
|
56
|
+
export function isGitCommitCommand(command) {
|
|
57
|
+
return findGitCommand(tokenize(command), "commit") !== undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The commit flags that carry a message or affect how a clustered
|
|
61
|
+
* short flag like `-am` is read. The message and file flags carry
|
|
62
|
+
* a value; the rest are the common boolean shorts that can precede
|
|
63
|
+
* `-m` in a cluster, so the cluster parses safely.
|
|
64
|
+
*/
|
|
65
|
+
const COMMIT_MESSAGE_SPEC = {
|
|
66
|
+
flags: [
|
|
67
|
+
{ name: "message", long: "message", short: "m", takesValue: true },
|
|
68
|
+
{ name: "file", long: "file", short: "F", takesValue: true },
|
|
69
|
+
{ name: "all", long: "all", short: "a", takesValue: false },
|
|
70
|
+
{ name: "signoff", long: "signoff", short: "s", takesValue: false },
|
|
71
|
+
{ name: "verbose", long: "verbose", short: "v", takesValue: false },
|
|
72
|
+
{ name: "quiet", long: "quiet", short: "q", takesValue: false },
|
|
73
|
+
{ name: "edit", long: "edit", short: "e", takesValue: false },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Extract the commit message from a bash command.
|
|
78
|
+
*
|
|
79
|
+
* Supports the heredoc form (git commit -F- <<'EOF'...EOF), one or
|
|
80
|
+
* more -m/--message flags (including the -am cluster), and a
|
|
81
|
+
* -F <file> read through the optional reader.
|
|
82
|
+
*
|
|
83
|
+
* Parsing runs on the command model, so only the git commit
|
|
84
|
+
* command's own argv and heredoc are read. A -m written inside a
|
|
85
|
+
* heredoc body, or a heredoc belonging to a chained command, is
|
|
86
|
+
* never mistaken for the message, because neither lives in the
|
|
87
|
+
* commit's argv.
|
|
88
|
+
*
|
|
89
|
+
* A `git commit -F <file>` (a real file, not `-F-` stdin) is
|
|
90
|
+
* resolved through the optional `readFile` reader, which is given
|
|
91
|
+
* the raw path and the command's effective working directory and
|
|
92
|
+
* returns the file's contents or null. Without a reader, or when
|
|
93
|
+
* the read fails, this returns null and the caller no-ops, so an
|
|
94
|
+
* unreadable file is a missed gate, never a wrong rewrite.
|
|
95
|
+
*/
|
|
96
|
+
export function extractMessage(command, readFile) {
|
|
97
|
+
const line = tokenize(command);
|
|
98
|
+
const commit = findGitCommand(line, "commit");
|
|
99
|
+
if (!commit)
|
|
100
|
+
return null;
|
|
101
|
+
if (commit.heredoc) {
|
|
102
|
+
return command.slice(commit.heredoc.bodySpan.start, commit.heredoc.bodySpan.end);
|
|
103
|
+
}
|
|
104
|
+
const messages = findFlags(commit, COMMIT_MESSAGE_SPEC, "message").map((m) => m.value === undefined ? "" : unquote(m.value));
|
|
105
|
+
if (messages.length > 0)
|
|
106
|
+
return messages.join("\n\n");
|
|
107
|
+
return readFileMessage(line, commit, readFile);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Resolve a `git commit -F <file>` message through the reader.
|
|
111
|
+
* Returns null when there is no file flag, when the path is `-`
|
|
112
|
+
* (stdin, handled elsewhere), when no reader is supplied, or when
|
|
113
|
+
* the read fails.
|
|
114
|
+
*/
|
|
115
|
+
function readFileMessage(line, commit, readFile) {
|
|
116
|
+
if (!readFile)
|
|
117
|
+
return null;
|
|
118
|
+
const flag = findFlag(commit, COMMIT_MESSAGE_SPEC, "file");
|
|
119
|
+
if (!flag || flag.value === undefined)
|
|
120
|
+
return null;
|
|
121
|
+
const rawPath = unquote(flag.value);
|
|
122
|
+
if (rawPath === "-")
|
|
123
|
+
return null;
|
|
124
|
+
// Resolve the relative path against the command's effective
|
|
125
|
+
// working directory (the pi cwd composed with any leading cd
|
|
126
|
+
// segments). An unresolvable cd chain falls back to the process
|
|
127
|
+
// cwd reader-side.
|
|
128
|
+
const cwd = effectiveCwd(line, process.cwd(), commit.span.start);
|
|
129
|
+
const baseDir = "dir" in cwd ? cwd.dir : null;
|
|
130
|
+
const contents = readFile(rawPath, baseDir);
|
|
131
|
+
if (contents === null)
|
|
132
|
+
return null;
|
|
133
|
+
return contents.replace(/\n+$/, "");
|
|
134
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destructive git command detection: the decision core behind
|
|
3
|
+
* history-guardian's confirmation gate.
|
|
4
|
+
*
|
|
5
|
+
* Unlike the content gates (prose, section, title), this has no
|
|
6
|
+
* block-once-relent-on-repeat state machine: a `git reset --hard`
|
|
7
|
+
* is exactly as destructive the fifth time it is attempted as the
|
|
8
|
+
* first, so there is nothing here for a GateDeps signature store to
|
|
9
|
+
* do. Detection runs fresh on every command.
|
|
10
|
+
*
|
|
11
|
+
* Getting a human's actual allow/block/redirect decision needs a
|
|
12
|
+
* host's own confirmation UI (pi's modal, Claude Code's native
|
|
13
|
+
* permission prompt) and stays adapter-local, along with how each
|
|
14
|
+
* host renders the match into what its UI shows. This is only the
|
|
15
|
+
* pure "is this command one of the ones we warn about" question.
|
|
16
|
+
*/
|
|
17
|
+
/** How dangerous a destructive git operation is. */
|
|
18
|
+
export type Severity = "irrecoverable" | "risky";
|
|
19
|
+
/** A regex pattern that matches a destructive git command. */
|
|
20
|
+
export interface DestructivePattern {
|
|
21
|
+
pattern: RegExp;
|
|
22
|
+
severity: Severity;
|
|
23
|
+
description: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Known destructive git patterns, ordered from most specific to
|
|
27
|
+
* most general so narrower matches win (e.g. --force-with-lease,
|
|
28
|
+
* risky, must precede the general --force pattern, irrecoverable).
|
|
29
|
+
*/
|
|
30
|
+
export declare const DESTRUCTIVE_PATTERNS: DestructivePattern[];
|
|
31
|
+
/** A command matched against the destructive patterns. */
|
|
32
|
+
export interface DestructiveMatch {
|
|
33
|
+
command: string;
|
|
34
|
+
severity: Severity;
|
|
35
|
+
description: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Match a command against the known destructive patterns, returning
|
|
39
|
+
* the first (most specific) match, or null when nothing matches.
|
|
40
|
+
*/
|
|
41
|
+
export declare function detectDestructiveCommand(command: string): DestructiveMatch | null;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destructive git command detection: the decision core behind
|
|
3
|
+
* history-guardian's confirmation gate.
|
|
4
|
+
*
|
|
5
|
+
* Unlike the content gates (prose, section, title), this has no
|
|
6
|
+
* block-once-relent-on-repeat state machine: a `git reset --hard`
|
|
7
|
+
* is exactly as destructive the fifth time it is attempted as the
|
|
8
|
+
* first, so there is nothing here for a GateDeps signature store to
|
|
9
|
+
* do. Detection runs fresh on every command.
|
|
10
|
+
*
|
|
11
|
+
* Getting a human's actual allow/block/redirect decision needs a
|
|
12
|
+
* host's own confirmation UI (pi's modal, Claude Code's native
|
|
13
|
+
* permission prompt) and stays adapter-local, along with how each
|
|
14
|
+
* host renders the match into what its UI shows. This is only the
|
|
15
|
+
* pure "is this command one of the ones we warn about" question.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Known destructive git patterns, ordered from most specific to
|
|
19
|
+
* most general so narrower matches win (e.g. --force-with-lease,
|
|
20
|
+
* risky, must precede the general --force pattern, irrecoverable).
|
|
21
|
+
*/
|
|
22
|
+
export const DESTRUCTIVE_PATTERNS = [
|
|
23
|
+
// Risky: recoverable via reflog or other means
|
|
24
|
+
{
|
|
25
|
+
pattern: /\bgit\s+push\b[^|;]*--force-with-lease\b/,
|
|
26
|
+
severity: "risky",
|
|
27
|
+
description: "Force push with lease: safer than --force but still rewrites remote history.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
pattern: /\bgit\s+stash\s+drop\b/,
|
|
31
|
+
severity: "risky",
|
|
32
|
+
description: "Drops a stash entry. Recoverable via git reflog for ~30 days.",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
pattern: /\bgit\s+rebase\b/,
|
|
36
|
+
severity: "risky",
|
|
37
|
+
description: "Rewrites commit history. Recoverable via git reflog.",
|
|
38
|
+
},
|
|
39
|
+
// Irrecoverable: data loss likely
|
|
40
|
+
{
|
|
41
|
+
pattern: /\bgit\s+reset\s+--hard\b/,
|
|
42
|
+
severity: "irrecoverable",
|
|
43
|
+
description: "Permanently discards all uncommitted changes.",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
pattern: /\bgit\s+clean\s+-[a-z]*f/,
|
|
47
|
+
severity: "irrecoverable",
|
|
48
|
+
description: "Permanently deletes untracked files.",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
pattern: /\bgit\s+push\b[^|;]*(?:--force\b|-f\b)/,
|
|
52
|
+
severity: "irrecoverable",
|
|
53
|
+
description: "Force push overwrites remote history: commits may be permanently lost.",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
pattern: /\bgit\s+branch\s+-D\b/,
|
|
57
|
+
severity: "irrecoverable",
|
|
58
|
+
description: "Force-deletes branch regardless of merge status.",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
pattern: /\bgit\s+checkout\s+--\s+\./,
|
|
62
|
+
severity: "irrecoverable",
|
|
63
|
+
description: "Discards all uncommitted changes to tracked files.",
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* Match a command against the known destructive patterns, returning
|
|
68
|
+
* the first (most specific) match, or null when nothing matches.
|
|
69
|
+
*/
|
|
70
|
+
export function detectDestructiveCommand(command) {
|
|
71
|
+
for (const { pattern, severity, description } of DESTRUCTIVE_PATTERNS) {
|
|
72
|
+
if (pattern.test(command))
|
|
73
|
+
return { command, severity, description };
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the prose gate. Detects prose
|
|
3
|
+
* violations in a body, asks the pure decision what to do, and
|
|
4
|
+
* persists a new signature when it blocks. The decision logic
|
|
5
|
+
* lives in the prose and gate modules; this is only the
|
|
6
|
+
* read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*
|
|
8
|
+
* The signature store itself (`GateDeps`) is deliberately not
|
|
9
|
+
* implemented here: reading and persisting a "have I blocked this
|
|
10
|
+
* before" signature means something different per adapter (pi
|
|
11
|
+
* keeps it in its session log; a stateless CLI would keep it in
|
|
12
|
+
* its own state file). Each adapter supplies its own `GateDeps`.
|
|
13
|
+
*/
|
|
14
|
+
import type { GateDeps } from "../../gate/index.js";
|
|
15
|
+
import type { GuardianResult } from "../../guardian/types.js";
|
|
16
|
+
export type { GateDeps };
|
|
17
|
+
/** Run the prose gate over a body. Returns a block or undefined. */
|
|
18
|
+
export declare function runProseGate(deps: GateDeps, body: string | null): GuardianResult;
|
|
19
|
+
/**
|
|
20
|
+
* The relent message, when the prose gate is letting this exact
|
|
21
|
+
* body through after already blocking it once, else null.
|
|
22
|
+
*
|
|
23
|
+
* A caller that only reads `runProseGate`'s block-or-undefined
|
|
24
|
+
* result cannot tell "clean" and "relented" apart, since both fall
|
|
25
|
+
* through to undefined by design (see above). pi's own review UI
|
|
26
|
+
* doesn't need to tell them apart either, since it renders the body
|
|
27
|
+
* in full regardless. A caller whose "ask" is a synthesized summary
|
|
28
|
+
* (a Claude Code hook's permission reason) does need to, so a
|
|
29
|
+
* relented violation is not silently reported as clean.
|
|
30
|
+
*/
|
|
31
|
+
export declare function proseGateNote(deps: GateDeps, body: string | null): string | null;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the prose gate. Detects prose
|
|
3
|
+
* violations in a body, asks the pure decision what to do, and
|
|
4
|
+
* persists a new signature when it blocks. The decision logic
|
|
5
|
+
* lives in the prose and gate modules; this is only the
|
|
6
|
+
* read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*
|
|
8
|
+
* The signature store itself (`GateDeps`) is deliberately not
|
|
9
|
+
* implemented here: reading and persisting a "have I blocked this
|
|
10
|
+
* before" signature means something different per adapter (pi
|
|
11
|
+
* keeps it in its session log; a stateless CLI would keep it in
|
|
12
|
+
* its own state file). Each adapter supplies its own `GateDeps`.
|
|
13
|
+
*/
|
|
14
|
+
import { detectProseViolations, proseGateDecision } from "../../prose/index.js";
|
|
15
|
+
/** Run the prose gate over a body. Returns a block or undefined. */
|
|
16
|
+
export function runProseGate(deps, body) {
|
|
17
|
+
if (!body)
|
|
18
|
+
return undefined;
|
|
19
|
+
const violations = detectProseViolations(body);
|
|
20
|
+
const decision = proseGateDecision(violations, deps.readSignatures(), body);
|
|
21
|
+
if (decision.action === "block") {
|
|
22
|
+
deps.persistSignature(decision.signature);
|
|
23
|
+
return { block: true, reason: decision.message };
|
|
24
|
+
}
|
|
25
|
+
// On relent the AI already had its chance and could not satisfy
|
|
26
|
+
// the rule, so blocking again would loop. Fall through to the
|
|
27
|
+
// normal human review gate (undefined) and let the user be the
|
|
28
|
+
// safety net; they see the rendered body and can reject it. On
|
|
29
|
+
// allow we also fall through. Either way we record nothing new.
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The relent message, when the prose gate is letting this exact
|
|
34
|
+
* body through after already blocking it once, else null.
|
|
35
|
+
*
|
|
36
|
+
* A caller that only reads `runProseGate`'s block-or-undefined
|
|
37
|
+
* result cannot tell "clean" and "relented" apart, since both fall
|
|
38
|
+
* through to undefined by design (see above). pi's own review UI
|
|
39
|
+
* doesn't need to tell them apart either, since it renders the body
|
|
40
|
+
* in full regardless. A caller whose "ask" is a synthesized summary
|
|
41
|
+
* (a Claude Code hook's permission reason) does need to, so a
|
|
42
|
+
* relented violation is not silently reported as clean.
|
|
43
|
+
*/
|
|
44
|
+
export function proseGateNote(deps, body) {
|
|
45
|
+
if (!body)
|
|
46
|
+
return null;
|
|
47
|
+
const violations = detectProseViolations(body);
|
|
48
|
+
const decision = proseGateDecision(violations, deps.readSignatures(), body);
|
|
49
|
+
return decision.action === "relent" ? decision.message : null;
|
|
50
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for sending a shell command to the tool that can
|
|
3
|
+
* reach the repo it names.
|
|
4
|
+
*
|
|
5
|
+
* `gh pr create` is the wrong instrument wherever something other than
|
|
6
|
+
* GitHub hosts the changes: it reaches a mirror that has never heard of
|
|
7
|
+
* them, and answers with "Could not resolve to a PullRequest with the
|
|
8
|
+
* number of ...", which reads as a wrong number rather than as the wrong
|
|
9
|
+
* system. A skill description helps somebody who wonders whether another
|
|
10
|
+
* tool exists; this is for the case where nobody wondered.
|
|
11
|
+
*
|
|
12
|
+
* Only for creating. A create uses the branch in this checkout, so the
|
|
13
|
+
* checkout's provider is the right question to ask. An edit names a
|
|
14
|
+
* change that may live in another repo entirely, `-R` and all, so the
|
|
15
|
+
* skills cover that in words rather than this guessing at it.
|
|
16
|
+
*
|
|
17
|
+
* Blocks once and relents on a repeat, the same machinery the title,
|
|
18
|
+
* section and prose gates use, so it cannot loop and somebody who means
|
|
19
|
+
* `gh` still gets it on the second try.
|
|
20
|
+
*/
|
|
21
|
+
import { type GateDeps } from "../../gate/index.js";
|
|
22
|
+
import type { GuardianResult } from "../../guardian/types.js";
|
|
23
|
+
export type { GateDeps };
|
|
24
|
+
/** What the gate needs to know about the command and where it runs. */
|
|
25
|
+
export interface RedirectSubject {
|
|
26
|
+
/** "create" or "edit"; only a create is redirected. */
|
|
27
|
+
action: string;
|
|
28
|
+
/** The directory the command would run in. */
|
|
29
|
+
cwd: string | undefined;
|
|
30
|
+
/** How to ask git about the checkout. */
|
|
31
|
+
exec: ((command: string, args: string[]) => Promise<{
|
|
32
|
+
code: number;
|
|
33
|
+
stdout: string;
|
|
34
|
+
stderr: string;
|
|
35
|
+
}>) | undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Redirect a create to the review tools when a provider serves this
|
|
39
|
+
* checkout. Returns a block, or undefined to let the command through.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runRedirectGate(deps: GateDeps, subject: RedirectSubject): Promise<GuardianResult>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for sending a shell command to the tool that can
|
|
3
|
+
* reach the repo it names.
|
|
4
|
+
*
|
|
5
|
+
* `gh pr create` is the wrong instrument wherever something other than
|
|
6
|
+
* GitHub hosts the changes: it reaches a mirror that has never heard of
|
|
7
|
+
* them, and answers with "Could not resolve to a PullRequest with the
|
|
8
|
+
* number of ...", which reads as a wrong number rather than as the wrong
|
|
9
|
+
* system. A skill description helps somebody who wonders whether another
|
|
10
|
+
* tool exists; this is for the case where nobody wondered.
|
|
11
|
+
*
|
|
12
|
+
* Only for creating. A create uses the branch in this checkout, so the
|
|
13
|
+
* checkout's provider is the right question to ask. An edit names a
|
|
14
|
+
* change that may live in another repo entirely, `-R` and all, so the
|
|
15
|
+
* skills cover that in words rather than this guessing at it.
|
|
16
|
+
*
|
|
17
|
+
* Blocks once and relents on a repeat, the same machinery the title,
|
|
18
|
+
* section and prose gates use, so it cannot loop and somebody who means
|
|
19
|
+
* `gh` still gets it on the second try.
|
|
20
|
+
*/
|
|
21
|
+
import { decideGate } from "../../gate/index.js";
|
|
22
|
+
import { resolveRepo } from "../../review/index.js";
|
|
23
|
+
/**
|
|
24
|
+
* The provider `gh` itself speaks to.
|
|
25
|
+
*
|
|
26
|
+
* Named rather than inferred: what makes a redirect necessary is that the
|
|
27
|
+
* command cannot reach the host, and this is the one host it can.
|
|
28
|
+
*/
|
|
29
|
+
const GITHUB_PROVIDER = "github";
|
|
30
|
+
/**
|
|
31
|
+
* Redirect a create to the review tools when a provider serves this
|
|
32
|
+
* checkout. Returns a block, or undefined to let the command through.
|
|
33
|
+
*/
|
|
34
|
+
export async function runRedirectGate(deps, subject) {
|
|
35
|
+
if (subject.action !== "create")
|
|
36
|
+
return undefined;
|
|
37
|
+
const provider = await serving(subject);
|
|
38
|
+
if (!provider)
|
|
39
|
+
return undefined;
|
|
40
|
+
const violations = [
|
|
41
|
+
{ kind: "gh-redirect", found: provider },
|
|
42
|
+
];
|
|
43
|
+
const decision = decideGate(violations, deps.readSignatures(), () => explain(provider), "You have asked for this twice, so it goes through as written. ", `gh-pr-create:${provider}`);
|
|
44
|
+
if (decision.action === "block") {
|
|
45
|
+
deps.persistSignature(decision.signature);
|
|
46
|
+
return { block: true, reason: decision.message };
|
|
47
|
+
}
|
|
48
|
+
// On relent the caller has said twice that they mean `gh`. Fall through
|
|
49
|
+
// to the human review gate rather than blocking again.
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
/** What to say instead. */
|
|
53
|
+
function explain(provider) {
|
|
54
|
+
return [
|
|
55
|
+
`This checkout is served by the ${provider} provider, not by GitHub,`,
|
|
56
|
+
"so a change created with `gh pr create` would be opened on a mirror",
|
|
57
|
+
"that nothing reads, or refused outright. Later `gh` commands cannot",
|
|
58
|
+
'see such a change at all: they answer "Could not resolve to a',
|
|
59
|
+
'PullRequest with the number of ...", which reads as a wrong number',
|
|
60
|
+
"and is not one.",
|
|
61
|
+
"",
|
|
62
|
+
"Use `review_offer propose` instead. It resolves this repo to",
|
|
63
|
+
`${provider}, holds the title and body to the same conventions this`,
|
|
64
|
+
"gate does, and answers with the change's number and URL.",
|
|
65
|
+
"",
|
|
66
|
+
"Read the review-guide skill. If you truly mean `gh`, run it again",
|
|
67
|
+
"and it will go through to the review panel.",
|
|
68
|
+
].join("\n");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The provider that serves this checkout and can open a change, if any.
|
|
72
|
+
*
|
|
73
|
+
* Undefined whenever the question cannot be answered: no directory, no
|
|
74
|
+
* exec, no remote, nothing registered, or a provider that cannot author.
|
|
75
|
+
* A guardian that cannot tell must not redirect, since blocking a
|
|
76
|
+
* command for a reason that does not hold is worse than allowing it.
|
|
77
|
+
*/
|
|
78
|
+
async function serving(subject) {
|
|
79
|
+
const { cwd, exec } = subject;
|
|
80
|
+
if (!cwd || !exec)
|
|
81
|
+
return undefined;
|
|
82
|
+
let remote;
|
|
83
|
+
try {
|
|
84
|
+
const result = await exec("git", [
|
|
85
|
+
"-C",
|
|
86
|
+
cwd,
|
|
87
|
+
"remote",
|
|
88
|
+
"get-url",
|
|
89
|
+
"origin",
|
|
90
|
+
]);
|
|
91
|
+
remote = result.code === 0 ? result.stdout.trim() : undefined;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Not a repo, or no git. Nothing to compare, so nothing to say.
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
if (!remote)
|
|
98
|
+
return undefined;
|
|
99
|
+
const resolved = resolveRepo({ repoRoot: cwd, remoteUrls: [remote] });
|
|
100
|
+
if (!resolved.resolved)
|
|
101
|
+
return undefined;
|
|
102
|
+
// `gh` is the GitHub CLI, so a repo GitHub serves is the case where it is
|
|
103
|
+
// the right instrument. Redirecting here said "served by the github
|
|
104
|
+
// provider, not by GitHub", which contradicts itself, and it would have
|
|
105
|
+
// blocked every ordinary PR on an ordinary repo.
|
|
106
|
+
if (resolved.provider.id === GITHUB_PROVIDER)
|
|
107
|
+
return undefined;
|
|
108
|
+
// A provider that cannot open a change is no redirect at all, and the
|
|
109
|
+
// plain git provider claims every checkout.
|
|
110
|
+
if (!resolved.provider.capabilities(resolved.repo).authoring?.propose) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
return resolved.provider.id;
|
|
114
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the section gate. Detects invented and
|
|
3
|
+
* missing sections in a body, asks the pure decision what to do,
|
|
4
|
+
* and persists a new signature when it blocks. The decision
|
|
5
|
+
* logic lives in the sections and gate modules; this is only the
|
|
6
|
+
* read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*/
|
|
8
|
+
import type { GateDeps } from "../../gate/index.js";
|
|
9
|
+
import type { GuardianResult } from "../../guardian/types.js";
|
|
10
|
+
import { type SectionGateConfig } from "../../sections/index.js";
|
|
11
|
+
/** Run the section gate over a body. Returns a block or undefined. */
|
|
12
|
+
export declare function runSectionGate(deps: GateDeps, body: string | null, config: SectionGateConfig): GuardianResult;
|
|
13
|
+
/**
|
|
14
|
+
* The relent message, when the section gate is letting this exact
|
|
15
|
+
* body through after already blocking it once, else null. See
|
|
16
|
+
* prose-gate.ts's `proseGateNote` for why this exists: a caller
|
|
17
|
+
* whose "ask" is a synthesized summary, not a full render of the
|
|
18
|
+
* body, needs to say a relent happened rather than staying silent.
|
|
19
|
+
*/
|
|
20
|
+
export declare function sectionGateNote(deps: GateDeps, body: string | null, config: SectionGateConfig): string | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the section gate. Detects invented and
|
|
3
|
+
* missing sections in a body, asks the pure decision what to do,
|
|
4
|
+
* and persists a new signature when it blocks. The decision
|
|
5
|
+
* logic lives in the sections and gate modules; this is only the
|
|
6
|
+
* read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*/
|
|
8
|
+
import { sectionGateDecision, } from "../../sections/index.js";
|
|
9
|
+
/** Run the section gate over a body. Returns a block or undefined. */
|
|
10
|
+
export function runSectionGate(deps, body, config) {
|
|
11
|
+
if (!body)
|
|
12
|
+
return undefined;
|
|
13
|
+
const decision = sectionGateDecision(body, deps.readSignatures(), config);
|
|
14
|
+
if (decision.action === "block") {
|
|
15
|
+
deps.persistSignature(decision.signature);
|
|
16
|
+
return { block: true, reason: decision.message };
|
|
17
|
+
}
|
|
18
|
+
// On relent the AI already had its chance and could not satisfy
|
|
19
|
+
// the section set, so blocking again would loop. Fall through to
|
|
20
|
+
// the human review gate (undefined); the user sees the rendered
|
|
21
|
+
// body and can reject it. On allow we also fall through.
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The relent message, when the section gate is letting this exact
|
|
26
|
+
* body through after already blocking it once, else null. See
|
|
27
|
+
* prose-gate.ts's `proseGateNote` for why this exists: a caller
|
|
28
|
+
* whose "ask" is a synthesized summary, not a full render of the
|
|
29
|
+
* body, needs to say a relent happened rather than staying silent.
|
|
30
|
+
*/
|
|
31
|
+
export function sectionGateNote(deps, body, config) {
|
|
32
|
+
if (!body)
|
|
33
|
+
return null;
|
|
34
|
+
const decision = sectionGateDecision(body, deps.readSignatures(), config);
|
|
35
|
+
return decision.action === "relent" ? decision.message : null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the title gate. Detects conventional
|
|
3
|
+
* commit format in a PR or issue title, asks the pure decision
|
|
4
|
+
* what to do, and persists a new signature when it blocks. The
|
|
5
|
+
* decision logic lives in the title and gate modules; this is only
|
|
6
|
+
* the read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*/
|
|
8
|
+
import type { GateDeps } from "../../gate/index.js";
|
|
9
|
+
import type { GuardianResult } from "../../guardian/types.js";
|
|
10
|
+
import { type TitleGateConfig } from "../../title/index.js";
|
|
11
|
+
/** Run the title gate over a title. Returns a block or undefined. */
|
|
12
|
+
export declare function runTitleGate(deps: GateDeps, title: string | null, config: TitleGateConfig): GuardianResult;
|
|
13
|
+
/**
|
|
14
|
+
* The relent message, when the title gate is letting this exact
|
|
15
|
+
* title through after already blocking it once, else null. See
|
|
16
|
+
* prose-gate.ts's `proseGateNote` for why this exists: a caller
|
|
17
|
+
* whose "ask" is a synthesized summary, not a full render of the
|
|
18
|
+
* title, needs to say a relent happened rather than staying silent.
|
|
19
|
+
*/
|
|
20
|
+
export declare function titleGateNote(deps: GateDeps, title: string | null, config: TitleGateConfig): string | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian-side glue for the title gate. Detects conventional
|
|
3
|
+
* commit format in a PR or issue title, asks the pure decision
|
|
4
|
+
* what to do, and persists a new signature when it blocks. The
|
|
5
|
+
* decision logic lives in the title and gate modules; this is only
|
|
6
|
+
* the read/persist wiring against a caller-supplied signature store.
|
|
7
|
+
*/
|
|
8
|
+
import { titleGateDecision } from "../../title/index.js";
|
|
9
|
+
/** Run the title gate over a title. Returns a block or undefined. */
|
|
10
|
+
export function runTitleGate(deps, title, config) {
|
|
11
|
+
if (!title)
|
|
12
|
+
return undefined;
|
|
13
|
+
const decision = titleGateDecision(title, deps.readSignatures(), config);
|
|
14
|
+
if (decision.action === "block") {
|
|
15
|
+
deps.persistSignature(decision.signature);
|
|
16
|
+
return { block: true, reason: decision.message };
|
|
17
|
+
}
|
|
18
|
+
// On relent the AI already had its chance and could not satisfy
|
|
19
|
+
// the title convention, so blocking again would loop. Fall
|
|
20
|
+
// through to the human review gate (undefined); the user sees the
|
|
21
|
+
// title and can reject it. On allow we also fall through.
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The relent message, when the title gate is letting this exact
|
|
26
|
+
* title through after already blocking it once, else null. See
|
|
27
|
+
* prose-gate.ts's `proseGateNote` for why this exists: a caller
|
|
28
|
+
* whose "ask" is a synthesized summary, not a full render of the
|
|
29
|
+
* title, needs to say a relent happened rather than staying silent.
|
|
30
|
+
*/
|
|
31
|
+
export function titleGateNote(deps, title, config) {
|
|
32
|
+
if (!title)
|
|
33
|
+
return null;
|
|
34
|
+
const decision = titleGateDecision(title, deps.readSignatures(), config);
|
|
35
|
+
return decision.action === "relent" ? decision.message : null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the first balanced JSON array from a string.
|
|
3
|
+
*
|
|
4
|
+
* A model reply often wraps its JSON array in prose that itself
|
|
5
|
+
* contains brackets (`... see line [42]`). A greedy `/\[.*\]/`
|
|
6
|
+
* spans to the last bracket and fails to parse, silently dropping
|
|
7
|
+
* the whole payload. This scans from the first `[` to its
|
|
8
|
+
* matching `]`, respecting string literals and escapes, so the
|
|
9
|
+
* intended array is recovered regardless of trailing brackets.
|
|
10
|
+
*/
|
|
11
|
+
export declare function firstJsonArray(text: string): string | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the first balanced JSON array from a string.
|
|
3
|
+
*
|
|
4
|
+
* A model reply often wraps its JSON array in prose that itself
|
|
5
|
+
* contains brackets (`... see line [42]`). A greedy `/\[.*\]/`
|
|
6
|
+
* spans to the last bracket and fails to parse, silently dropping
|
|
7
|
+
* the whole payload. This scans from the first `[` to its
|
|
8
|
+
* matching `]`, respecting string literals and escapes, so the
|
|
9
|
+
* intended array is recovered regardless of trailing brackets.
|
|
10
|
+
*/
|
|
11
|
+
export function firstJsonArray(text) {
|
|
12
|
+
const start = text.indexOf("[");
|
|
13
|
+
if (start < 0)
|
|
14
|
+
return undefined;
|
|
15
|
+
let depth = 0;
|
|
16
|
+
let inString = false;
|
|
17
|
+
let escaped = false;
|
|
18
|
+
for (let i = start; i < text.length; i++) {
|
|
19
|
+
const ch = text[i];
|
|
20
|
+
if (inString) {
|
|
21
|
+
if (escaped)
|
|
22
|
+
escaped = false;
|
|
23
|
+
else if (ch === "\\")
|
|
24
|
+
escaped = true;
|
|
25
|
+
else if (ch === '"')
|
|
26
|
+
inString = false;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (ch === '"')
|
|
30
|
+
inString = true;
|
|
31
|
+
else if (ch === "[")
|
|
32
|
+
depth++;
|
|
33
|
+
else if (ch === "]") {
|
|
34
|
+
depth--;
|
|
35
|
+
if (depth === 0)
|
|
36
|
+
return text.slice(start, i + 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|