@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
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* A thin, stateless-per-invocation CLI over the domain modules in
|
|
4
|
+
* `src/`. Each call reads whatever loop state it needs from a
|
|
5
|
+
* small JSON file it owns, applies one command, and writes the
|
|
6
|
+
* result back out — no daemon, no port, no long-lived process.
|
|
7
|
+
* This is the shape both a Bash-invoked Claude Code skill and a
|
|
8
|
+
* future hook dispatcher need: one process, one JSON in, one JSON
|
|
9
|
+
* out.
|
|
10
|
+
*
|
|
11
|
+
* This file is the CLI adapter, not domain logic — argument
|
|
12
|
+
* parsing and state-file I/O live here so `src/tdd` stays pure.
|
|
13
|
+
*/
|
|
14
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
15
|
+
import { dirname } from "node:path";
|
|
16
|
+
import { effectiveCwd, tokenize } from "../command/index.js";
|
|
17
|
+
import { checkGitCli } from "../git-cli/index.js";
|
|
18
|
+
import { checkGithubCli } from "../github-cli/index.js";
|
|
19
|
+
import { detectDestructiveCommand, } from "../internal/guardian/history-gate.js";
|
|
20
|
+
import { attest, idleLoop, standingReminder, } from "../tdd/index.js";
|
|
21
|
+
import { runVerify } from "../verify/index.js";
|
|
22
|
+
import { checkAttribution, ensureAttributionHook } from "./attribution.js";
|
|
23
|
+
import { fileGateDeps } from "./gate-deps.js";
|
|
24
|
+
import { checkCommitGuardian, checkIssueGuardian, checkPrGuardian, } from "./guardians.js";
|
|
25
|
+
import { runMemoryEdit, runMemoryRecall, runMemoryReflect, runMemoryRetain, } from "./memory.js";
|
|
26
|
+
import { runNotesAction } from "./notes.js";
|
|
27
|
+
import { processExec } from "./process-exec.js";
|
|
28
|
+
import { runQuestAction } from "./quest.js";
|
|
29
|
+
import { runSlackAuthLogin, runSlackAuthStatus } from "./slack-auth.js";
|
|
30
|
+
/** Where a loop's state lives when the caller doesn't override it. */
|
|
31
|
+
const DEFAULT_STATE_FILE = ".agentic-harness/tdd-loop.json";
|
|
32
|
+
/** Where quest state lives when the caller doesn't override it. */
|
|
33
|
+
const DEFAULT_QUEST_STATE_FILE = ".agentic-harness/quest-state.json";
|
|
34
|
+
function parseArgs(argv) {
|
|
35
|
+
const [domain, command, ...rest] = argv;
|
|
36
|
+
if (!domain || !command) {
|
|
37
|
+
throw new Error("Usage: agentic-harness-core <domain> <command> [--state-file <path>] [--quests-root <path>] [--notes-root <path>]");
|
|
38
|
+
}
|
|
39
|
+
let stateFile = domain === "quest" ? DEFAULT_QUEST_STATE_FILE : DEFAULT_STATE_FILE;
|
|
40
|
+
let questsRoot;
|
|
41
|
+
let notesRoot;
|
|
42
|
+
for (let i = 0; i < rest.length; i++) {
|
|
43
|
+
if (rest[i] === "--state-file") {
|
|
44
|
+
const value = rest[i + 1];
|
|
45
|
+
if (!value) {
|
|
46
|
+
throw new Error("--state-file requires a path");
|
|
47
|
+
}
|
|
48
|
+
stateFile = value;
|
|
49
|
+
i++;
|
|
50
|
+
}
|
|
51
|
+
else if (rest[i] === "--quests-root") {
|
|
52
|
+
const value = rest[i + 1];
|
|
53
|
+
if (!value) {
|
|
54
|
+
throw new Error("--quests-root requires a path");
|
|
55
|
+
}
|
|
56
|
+
questsRoot = value;
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
else if (rest[i] === "--notes-root") {
|
|
60
|
+
const value = rest[i + 1];
|
|
61
|
+
if (!value) {
|
|
62
|
+
throw new Error("--notes-root requires a path");
|
|
63
|
+
}
|
|
64
|
+
notesRoot = value;
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { domain, command, stateFile, questsRoot, notesRoot };
|
|
69
|
+
}
|
|
70
|
+
async function readStdin() {
|
|
71
|
+
const chunks = [];
|
|
72
|
+
for await (const chunk of process.stdin) {
|
|
73
|
+
chunks.push(chunk);
|
|
74
|
+
}
|
|
75
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
76
|
+
}
|
|
77
|
+
async function loadLoop(stateFile) {
|
|
78
|
+
try {
|
|
79
|
+
const raw = await readFile(stateFile, "utf8");
|
|
80
|
+
return JSON.parse(raw);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error.code === "ENOENT") {
|
|
84
|
+
return idleLoop();
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function saveLoop(stateFile, loop) {
|
|
90
|
+
await mkdir(dirname(stateFile), { recursive: true });
|
|
91
|
+
await writeFile(stateFile, `${JSON.stringify(loop, null, 2)}\n`);
|
|
92
|
+
}
|
|
93
|
+
async function runTddAttest(stateFile) {
|
|
94
|
+
const input = await readStdin();
|
|
95
|
+
const attestation = JSON.parse(input);
|
|
96
|
+
const loop = await loadLoop(stateFile);
|
|
97
|
+
const result = attest(loop, attestation);
|
|
98
|
+
await saveLoop(stateFile, result.loop);
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
async function runTddStatus(stateFile) {
|
|
102
|
+
const loop = await loadLoop(stateFile);
|
|
103
|
+
return { loop, reminder: standingReminder(loop) };
|
|
104
|
+
}
|
|
105
|
+
/** A plain-text explanation of why a destructive command was flagged. */
|
|
106
|
+
function historyReason(match) {
|
|
107
|
+
const label = match.severity === "irrecoverable" ? "Destructive" : "Risky";
|
|
108
|
+
return `${label} command: ${match.description}`;
|
|
109
|
+
}
|
|
110
|
+
/** Build the hook's JSON stdout for a deny or ask decision. */
|
|
111
|
+
function decisionOutput(permissionDecision, permissionDecisionReason) {
|
|
112
|
+
return JSON.stringify({
|
|
113
|
+
hookSpecificOutput: {
|
|
114
|
+
hookEventName: "PreToolUse",
|
|
115
|
+
permissionDecision,
|
|
116
|
+
permissionDecisionReason,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Claude Code's PreToolUse hook contract for a Bash call: deny with a
|
|
122
|
+
* reason, ask with a reason, or say nothing so the normal permission
|
|
123
|
+
* flow decides. Never emit an explicit "allow" here — that would
|
|
124
|
+
* bypass whatever else (other hooks, the user's permission mode)
|
|
125
|
+
* would otherwise decide, for every bash command this hook doesn't
|
|
126
|
+
* flag.
|
|
127
|
+
*
|
|
128
|
+
* Deny takes precedence over ask throughout: a hard-rule violation
|
|
129
|
+
* (an amend, an unattributed PR, a content-gate violation) is not a
|
|
130
|
+
* judgment call the way a destructive command or an otherwise-clean
|
|
131
|
+
* commit/PR/issue is, so it is refused outright rather than softened
|
|
132
|
+
* into a question. Every guardian wired in here (history, commit, PR,
|
|
133
|
+
* issue) never rewrites in its own pi-side review either, so "ask" is
|
|
134
|
+
* a complete adapter for all of them — unlike a guardian that does
|
|
135
|
+
* rewrite, which a hook can only approximate as deny-and-retry, these
|
|
136
|
+
* map onto Claude Code's native permission prompt exactly as pi's own
|
|
137
|
+
* allow/block confirmation does.
|
|
138
|
+
*/
|
|
139
|
+
async function runHookPreBash() {
|
|
140
|
+
const input = await readStdin();
|
|
141
|
+
const payload = JSON.parse(input);
|
|
142
|
+
const command = payload.tool_input?.command;
|
|
143
|
+
if (payload.tool_name !== "Bash" || !command)
|
|
144
|
+
return "";
|
|
145
|
+
const cwd = effectiveCwd(tokenize(command), process.cwd());
|
|
146
|
+
const resolvedCwd = "dir" in cwd ? cwd.dir : process.cwd();
|
|
147
|
+
ensureAttributionHook(resolvedCwd);
|
|
148
|
+
const denyReason = checkGitCli(command) ??
|
|
149
|
+
checkGithubCli(command) ??
|
|
150
|
+
checkAttribution(command);
|
|
151
|
+
if (denyReason)
|
|
152
|
+
return decisionOutput("deny", denyReason);
|
|
153
|
+
const destructive = detectDestructiveCommand(command);
|
|
154
|
+
if (destructive)
|
|
155
|
+
return decisionOutput("ask", historyReason(destructive));
|
|
156
|
+
const deps = fileGateDeps(resolvedCwd);
|
|
157
|
+
const guardianResult = checkCommitGuardian(command, deps) ??
|
|
158
|
+
(await checkPrGuardian(command, resolvedCwd, deps, processExec)) ??
|
|
159
|
+
checkIssueGuardian(command, deps);
|
|
160
|
+
if (guardianResult) {
|
|
161
|
+
return decisionOutput(guardianResult.decision, guardianResult.reason);
|
|
162
|
+
}
|
|
163
|
+
return "";
|
|
164
|
+
}
|
|
165
|
+
async function main() {
|
|
166
|
+
const options = parseArgs(process.argv.slice(2));
|
|
167
|
+
if (options.domain === "tdd" && options.command === "attest") {
|
|
168
|
+
process.stdout.write(`${JSON.stringify(await runTddAttest(options.stateFile))}\n`);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (options.domain === "tdd" && options.command === "status") {
|
|
172
|
+
process.stdout.write(`${JSON.stringify(await runTddStatus(options.stateFile))}\n`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (options.domain === "hook" && options.command === "pre-bash") {
|
|
176
|
+
const output = await runHookPreBash();
|
|
177
|
+
if (output)
|
|
178
|
+
process.stdout.write(`${output}\n`);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (options.domain === "verify" && options.command === "run") {
|
|
182
|
+
const result = await runVerify({ cwd: process.cwd() });
|
|
183
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
184
|
+
process.exitCode = result.ok ? 0 : 1;
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (options.domain === "quest") {
|
|
188
|
+
const input = await readStdin();
|
|
189
|
+
const params = input.trim().length > 0 ? JSON.parse(input) : {};
|
|
190
|
+
const result = await runQuestAction({
|
|
191
|
+
action: options.command,
|
|
192
|
+
stateFile: options.stateFile,
|
|
193
|
+
questsRoot: options.questsRoot,
|
|
194
|
+
}, params);
|
|
195
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
196
|
+
process.exitCode = result.ok ? 0 : 1;
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (options.domain === "notes") {
|
|
200
|
+
const input = await readStdin();
|
|
201
|
+
const params = input.trim().length > 0 ? JSON.parse(input) : {};
|
|
202
|
+
const result = await runNotesAction({ action: options.command, notesRoot: options.notesRoot }, params);
|
|
203
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
204
|
+
process.exitCode = result.ok ? 0 : 1;
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (options.domain === "memory") {
|
|
208
|
+
const handlers = {
|
|
209
|
+
retain: runMemoryRetain,
|
|
210
|
+
recall: runMemoryRecall,
|
|
211
|
+
reflect: runMemoryReflect,
|
|
212
|
+
edit: runMemoryEdit,
|
|
213
|
+
};
|
|
214
|
+
const handler = handlers[options.command];
|
|
215
|
+
if (handler) {
|
|
216
|
+
const input = await readStdin();
|
|
217
|
+
process.stdout.write(`${JSON.stringify(await handler(input))}\n`);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (options.domain === "slack-auth") {
|
|
222
|
+
if (options.command === "status") {
|
|
223
|
+
process.stdout.write(`${JSON.stringify(await runSlackAuthStatus())}\n`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (options.command === "login") {
|
|
227
|
+
process.stdout.write(`${JSON.stringify(await runSlackAuthLogin())}\n`);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
throw new Error(`Unknown command: ${options.domain} ${options.command}`);
|
|
232
|
+
}
|
|
233
|
+
main().catch((error) => {
|
|
234
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
235
|
+
process.exitCode = 1;
|
|
236
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's file-backed content-gate signature store.
|
|
3
|
+
*
|
|
4
|
+
* The prose, section and title gates need to remember which
|
|
5
|
+
* violation signatures they have already blocked, so a repeat of
|
|
6
|
+
* the same violation relents instead of looping forever - see
|
|
7
|
+
* gate/deps.ts for why. pi backs this with its session log; a
|
|
8
|
+
* PreToolUse hook is a stateless-per-invocation process with no
|
|
9
|
+
* session object to read one back from, so this backs it with a
|
|
10
|
+
* small JSON file instead, the same shape tdd's and quest's own
|
|
11
|
+
* state files already use.
|
|
12
|
+
*
|
|
13
|
+
* Scoped to the command's effective cwd rather than to a Claude
|
|
14
|
+
* Code conversation: a hook invocation carries no session id in
|
|
15
|
+
* its stdin payload, so there is nothing session-shaped to key on.
|
|
16
|
+
* The signature persists for the project instead, which changes
|
|
17
|
+
* "relent on a repeat within this session" to "relent on a repeat
|
|
18
|
+
* within this project, ever" - a reasonable reading given the
|
|
19
|
+
* alternative is no relent mechanism at all in this adapter.
|
|
20
|
+
*/
|
|
21
|
+
import type { GateDeps } from "../gate/index.js";
|
|
22
|
+
/** Build a GateDeps backed by a JSON file under `cwd`. */
|
|
23
|
+
export declare function fileGateDeps(cwd: string): GateDeps;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's file-backed content-gate signature store.
|
|
3
|
+
*
|
|
4
|
+
* The prose, section and title gates need to remember which
|
|
5
|
+
* violation signatures they have already blocked, so a repeat of
|
|
6
|
+
* the same violation relents instead of looping forever - see
|
|
7
|
+
* gate/deps.ts for why. pi backs this with its session log; a
|
|
8
|
+
* PreToolUse hook is a stateless-per-invocation process with no
|
|
9
|
+
* session object to read one back from, so this backs it with a
|
|
10
|
+
* small JSON file instead, the same shape tdd's and quest's own
|
|
11
|
+
* state files already use.
|
|
12
|
+
*
|
|
13
|
+
* Scoped to the command's effective cwd rather than to a Claude
|
|
14
|
+
* Code conversation: a hook invocation carries no session id in
|
|
15
|
+
* its stdin payload, so there is nothing session-shaped to key on.
|
|
16
|
+
* The signature persists for the project instead, which changes
|
|
17
|
+
* "relent on a repeat within this session" to "relent on a repeat
|
|
18
|
+
* within this project, ever" - a reasonable reading given the
|
|
19
|
+
* alternative is no relent mechanism at all in this adapter.
|
|
20
|
+
*/
|
|
21
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { dirname, join } from "node:path";
|
|
23
|
+
/** Where signatures persist, relative to the resolved cwd. */
|
|
24
|
+
const SIGNATURES_FILE = ".agentic-harness/gate-signatures.json";
|
|
25
|
+
/** Read the persisted signature list, or an empty one if absent or unreadable. */
|
|
26
|
+
function readSignatureFile(path) {
|
|
27
|
+
try {
|
|
28
|
+
const raw = readFileSync(path, "utf8");
|
|
29
|
+
const parsed = JSON.parse(raw);
|
|
30
|
+
return Array.isArray(parsed)
|
|
31
|
+
? parsed.filter((s) => typeof s === "string")
|
|
32
|
+
: [];
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Missing or corrupt: no signatures recorded yet, not a failure
|
|
36
|
+
// worth surfacing to the caller.
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Build a GateDeps backed by a JSON file under `cwd`. */
|
|
41
|
+
export function fileGateDeps(cwd) {
|
|
42
|
+
const path = join(cwd, SIGNATURES_FILE);
|
|
43
|
+
return {
|
|
44
|
+
readSignatures: () => readSignatureFile(path),
|
|
45
|
+
persistSignature: (signature) => {
|
|
46
|
+
const signatures = readSignatureFile(path);
|
|
47
|
+
if (signatures.includes(signature))
|
|
48
|
+
return;
|
|
49
|
+
signatures.push(signature);
|
|
50
|
+
try {
|
|
51
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
52
|
+
writeFileSync(path, JSON.stringify(signatures));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Best-effort: a lost signature only means the loop
|
|
56
|
+
// breaker forgets a block it already made, not that the
|
|
57
|
+
// gate itself fails to run.
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's write-confirmation guardians: commit, PR and
|
|
3
|
+
* issue review.
|
|
4
|
+
*
|
|
5
|
+
* All three share the same shape pi's own guardians already have:
|
|
6
|
+
* deterministic content gates (prose, section, title, redirect) run
|
|
7
|
+
* first and block outright on a violation, exactly as pi's own
|
|
8
|
+
* `review()` does before it ever shows a human anything. Only once
|
|
9
|
+
* a command clears every gate does a human get asked - and unlike
|
|
10
|
+
* pi's own `!ctx.hasUI -> ALLOW` fallback for a context with no
|
|
11
|
+
* panel to show, an ordinary Claude Code chat is not headless: a
|
|
12
|
+
* human is there, so this asks rather than silently allowing,
|
|
13
|
+
* which is genuinely more protection than pi itself offers a
|
|
14
|
+
* subagent or a headless run.
|
|
15
|
+
*
|
|
16
|
+
* The section and title gates cite pi's own skill names
|
|
17
|
+
* (`github-pr-format`, `github-issue-format`) in their block
|
|
18
|
+
* messages ("see the X skill for what belongs in each section").
|
|
19
|
+
* agentic-harness.claude has no equivalent skill yet, so that
|
|
20
|
+
* pointer is presently dead for a Claude Code user; the concrete
|
|
21
|
+
* violation detail alongside it (which headings are invented,
|
|
22
|
+
* missing or misordered) still is not, and stays actionable on its
|
|
23
|
+
* own. Revisit once those guide skills port here.
|
|
24
|
+
*/
|
|
25
|
+
import type { Exec } from "../exec/index.js";
|
|
26
|
+
import type { GateDeps } from "../gate/index.js";
|
|
27
|
+
/** What a guardian check hands back to the hook dispatcher. */
|
|
28
|
+
export interface GuardianHookResult {
|
|
29
|
+
decision: "deny" | "ask";
|
|
30
|
+
reason: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check a `git commit` command: the prose gate first (blocks
|
|
34
|
+
* outright on a violation, same as pi), then an ask showing the
|
|
35
|
+
* message and its format notes. Returns null for anything else, or
|
|
36
|
+
* a message-less commit (nothing here to gate).
|
|
37
|
+
*/
|
|
38
|
+
export declare function checkCommitGuardian(command: string, deps: GateDeps): GuardianHookResult | null;
|
|
39
|
+
/**
|
|
40
|
+
* Check a `gh pr create`/`edit` command: the redirect gate (does
|
|
41
|
+
* this checkout even belong to GitHub), then section, title and
|
|
42
|
+
* prose - each blocking outright on a violation - then an ask
|
|
43
|
+
* showing the title and body. Returns null for anything else.
|
|
44
|
+
*/
|
|
45
|
+
export declare function checkPrGuardian(command: string, cwd: string, deps: GateDeps, exec: Exec): Promise<GuardianHookResult | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Check a `gh issue create`/`edit` command: section, title and
|
|
48
|
+
* prose gates, then an ask showing the title and body. Returns
|
|
49
|
+
* null for anything else.
|
|
50
|
+
*/
|
|
51
|
+
export declare function checkIssueGuardian(command: string, deps: GateDeps): GuardianHookResult | null;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's write-confirmation guardians: commit, PR and
|
|
3
|
+
* issue review.
|
|
4
|
+
*
|
|
5
|
+
* All three share the same shape pi's own guardians already have:
|
|
6
|
+
* deterministic content gates (prose, section, title, redirect) run
|
|
7
|
+
* first and block outright on a violation, exactly as pi's own
|
|
8
|
+
* `review()` does before it ever shows a human anything. Only once
|
|
9
|
+
* a command clears every gate does a human get asked - and unlike
|
|
10
|
+
* pi's own `!ctx.hasUI -> ALLOW` fallback for a context with no
|
|
11
|
+
* panel to show, an ordinary Claude Code chat is not headless: a
|
|
12
|
+
* human is there, so this asks rather than silently allowing,
|
|
13
|
+
* which is genuinely more protection than pi itself offers a
|
|
14
|
+
* subagent or a headless run.
|
|
15
|
+
*
|
|
16
|
+
* The section and title gates cite pi's own skill names
|
|
17
|
+
* (`github-pr-format`, `github-issue-format`) in their block
|
|
18
|
+
* messages ("see the X skill for what belongs in each section").
|
|
19
|
+
* agentic-harness.claude has no equivalent skill yet, so that
|
|
20
|
+
* pointer is presently dead for a Claude Code user; the concrete
|
|
21
|
+
* violation detail alongside it (which headings are invented,
|
|
22
|
+
* missing or misordered) still is not, and stays actionable on its
|
|
23
|
+
* own. Revisit once those guide skills port here.
|
|
24
|
+
*/
|
|
25
|
+
import { isIssueCommand, isPrCommand, parseIssueCommand, parsePrCommand, } from "../internal/github/cli.js";
|
|
26
|
+
import { readCommitFile } from "../internal/guardian/commit-file.js";
|
|
27
|
+
import { complaintsAbout } from "../internal/guardian/commit-format.js";
|
|
28
|
+
import { extractMessage, isGitCommitCommand, } from "../internal/guardian/commit-shell.js";
|
|
29
|
+
import { proseGateNote, runProseGate, } from "../internal/guardian/prose-gate.js";
|
|
30
|
+
import { runRedirectGate } from "../internal/guardian/redirect-gate.js";
|
|
31
|
+
import { runSectionGate, sectionGateNote, } from "../internal/guardian/section-gate.js";
|
|
32
|
+
import { runTitleGate, titleGateNote, } from "../internal/guardian/title-gate.js";
|
|
33
|
+
import { ISSUE_SECTIONS, PR_SECTIONS } from "../sections/index.js";
|
|
34
|
+
/** Turn a GuardianResult into a deny reason, or null when it doesn't block. */
|
|
35
|
+
function denyFrom(result) {
|
|
36
|
+
if (!result)
|
|
37
|
+
return null;
|
|
38
|
+
if ("block" in result)
|
|
39
|
+
return result.reason;
|
|
40
|
+
// No content gate ported so far emits rewrite, but the type allows
|
|
41
|
+
// it: approximate as deny, naming the corrected form for the agent
|
|
42
|
+
// to retry with, since a hook cannot splice a rewrite into the
|
|
43
|
+
// call the way pi's guardian can.
|
|
44
|
+
return `This command needs a change before it can run:\n\n${result.rewrite}`;
|
|
45
|
+
}
|
|
46
|
+
const MAX_PREVIEW = 4000;
|
|
47
|
+
/** Cap a body preview so the reason stays a reasonable size. */
|
|
48
|
+
function truncate(text) {
|
|
49
|
+
if (text.length <= MAX_PREVIEW)
|
|
50
|
+
return text;
|
|
51
|
+
return `${text.slice(0, MAX_PREVIEW)}\n... (truncated)`;
|
|
52
|
+
}
|
|
53
|
+
const PR_SECTION_CONFIG = {
|
|
54
|
+
sanctioned: PR_SECTIONS,
|
|
55
|
+
entityLabel: "PR",
|
|
56
|
+
skill: "github-pr-format",
|
|
57
|
+
};
|
|
58
|
+
const PR_TITLE_CONFIG = { entityLabel: "PR", skill: "github-pr-format" };
|
|
59
|
+
const ISSUE_SECTION_CONFIG = {
|
|
60
|
+
sanctioned: ISSUE_SECTIONS,
|
|
61
|
+
entityLabel: "issue",
|
|
62
|
+
skill: "github-issue-format",
|
|
63
|
+
};
|
|
64
|
+
const ISSUE_TITLE_CONFIG = {
|
|
65
|
+
entityLabel: "issue",
|
|
66
|
+
skill: "github-issue-format",
|
|
67
|
+
};
|
|
68
|
+
/** Plain-text review prompt for a commit message. */
|
|
69
|
+
function commitAskReason(message, isAmend, relentNote) {
|
|
70
|
+
const complaints = complaintsAbout(message);
|
|
71
|
+
const notes = complaints.length > 0
|
|
72
|
+
? `Format notes: ${complaints.join("; ")}.`
|
|
73
|
+
: "Format looks clean (conventional, within the length limits).";
|
|
74
|
+
const amendNote = isAmend ? " This amends the previous commit." : "";
|
|
75
|
+
const relentSuffix = relentNote ? `\n\n${relentNote}` : "";
|
|
76
|
+
return `Review this commit before it runs.${amendNote}\n\n${truncate(message)}\n\n${notes}${relentSuffix}`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check a `git commit` command: the prose gate first (blocks
|
|
80
|
+
* outright on a violation, same as pi), then an ask showing the
|
|
81
|
+
* message and its format notes. Returns null for anything else, or
|
|
82
|
+
* a message-less commit (nothing here to gate).
|
|
83
|
+
*/
|
|
84
|
+
export function checkCommitGuardian(command, deps) {
|
|
85
|
+
if (!isGitCommitCommand(command))
|
|
86
|
+
return null;
|
|
87
|
+
const message = extractMessage(command, readCommitFile);
|
|
88
|
+
if (!message)
|
|
89
|
+
return null;
|
|
90
|
+
const proseDeny = denyFrom(runProseGate(deps, message));
|
|
91
|
+
if (proseDeny)
|
|
92
|
+
return { decision: "deny", reason: proseDeny };
|
|
93
|
+
const isAmend = /--amend\b/.test(command);
|
|
94
|
+
const relentNote = proseGateNote(deps, message);
|
|
95
|
+
return {
|
|
96
|
+
decision: "ask",
|
|
97
|
+
reason: commitAskReason(message, isAmend, relentNote),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Plain-text review prompt for a PR or issue body. */
|
|
101
|
+
function entityAskReason(label, action, title, body, relentNotes) {
|
|
102
|
+
const parts = [`Review this ${label} ${action} before it runs.`];
|
|
103
|
+
if (title)
|
|
104
|
+
parts.push("", `Title: ${title}`);
|
|
105
|
+
if (body)
|
|
106
|
+
parts.push("", truncate(body));
|
|
107
|
+
for (const note of relentNotes) {
|
|
108
|
+
if (note)
|
|
109
|
+
parts.push("", note);
|
|
110
|
+
}
|
|
111
|
+
return parts.join("\n");
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check a `gh pr create`/`edit` command: the redirect gate (does
|
|
115
|
+
* this checkout even belong to GitHub), then section, title and
|
|
116
|
+
* prose - each blocking outright on a violation - then an ask
|
|
117
|
+
* showing the title and body. Returns null for anything else.
|
|
118
|
+
*/
|
|
119
|
+
export async function checkPrGuardian(command, cwd, deps, exec) {
|
|
120
|
+
if (!isPrCommand(command))
|
|
121
|
+
return null;
|
|
122
|
+
const parsed = parsePrCommand(command);
|
|
123
|
+
if (!parsed)
|
|
124
|
+
return null;
|
|
125
|
+
const redirectDeny = denyFrom(await runRedirectGate(deps, { action: parsed.action, cwd, exec }));
|
|
126
|
+
if (redirectDeny)
|
|
127
|
+
return { decision: "deny", reason: redirectDeny };
|
|
128
|
+
const sectionDeny = denyFrom(runSectionGate(deps, parsed.body, PR_SECTION_CONFIG));
|
|
129
|
+
if (sectionDeny)
|
|
130
|
+
return { decision: "deny", reason: sectionDeny };
|
|
131
|
+
const titleDeny = denyFrom(runTitleGate(deps, parsed.title, PR_TITLE_CONFIG));
|
|
132
|
+
if (titleDeny)
|
|
133
|
+
return { decision: "deny", reason: titleDeny };
|
|
134
|
+
const proseDeny = denyFrom(runProseGate(deps, parsed.body));
|
|
135
|
+
if (proseDeny)
|
|
136
|
+
return { decision: "deny", reason: proseDeny };
|
|
137
|
+
return {
|
|
138
|
+
decision: "ask",
|
|
139
|
+
reason: entityAskReason("PR", parsed.action, parsed.title, parsed.body, [
|
|
140
|
+
sectionGateNote(deps, parsed.body, PR_SECTION_CONFIG),
|
|
141
|
+
titleGateNote(deps, parsed.title, PR_TITLE_CONFIG),
|
|
142
|
+
proseGateNote(deps, parsed.body),
|
|
143
|
+
]),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check a `gh issue create`/`edit` command: section, title and
|
|
148
|
+
* prose gates, then an ask showing the title and body. Returns
|
|
149
|
+
* null for anything else.
|
|
150
|
+
*/
|
|
151
|
+
export function checkIssueGuardian(command, deps) {
|
|
152
|
+
if (!isIssueCommand(command))
|
|
153
|
+
return null;
|
|
154
|
+
const parsed = parseIssueCommand(command);
|
|
155
|
+
if (!parsed)
|
|
156
|
+
return null;
|
|
157
|
+
const sectionDeny = denyFrom(runSectionGate(deps, parsed.body, ISSUE_SECTION_CONFIG));
|
|
158
|
+
if (sectionDeny)
|
|
159
|
+
return { decision: "deny", reason: sectionDeny };
|
|
160
|
+
const titleDeny = denyFrom(runTitleGate(deps, parsed.title, ISSUE_TITLE_CONFIG));
|
|
161
|
+
if (titleDeny)
|
|
162
|
+
return { decision: "deny", reason: titleDeny };
|
|
163
|
+
const proseDeny = denyFrom(runProseGate(deps, parsed.body));
|
|
164
|
+
if (proseDeny)
|
|
165
|
+
return { decision: "deny", reason: proseDeny };
|
|
166
|
+
return {
|
|
167
|
+
decision: "ask",
|
|
168
|
+
reason: entityAskReason("issue", parsed.action, parsed.title, parsed.body, [
|
|
169
|
+
sectionGateNote(deps, parsed.body, ISSUE_SECTION_CONFIG),
|
|
170
|
+
titleGateNote(deps, parsed.title, ISSUE_TITLE_CONFIG),
|
|
171
|
+
proseGateNote(deps, parsed.body),
|
|
172
|
+
]),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI adapter's memory wiring: scope resolution plus the four
|
|
3
|
+
* request/response shapes the `memory` subcommands speak. Domain
|
|
4
|
+
* logic (the store itself) lives in `../memory`; this file is
|
|
5
|
+
* where a CLI-specific "what scope applies right now" answer gets
|
|
6
|
+
* made, since core deliberately doesn't own that (see
|
|
7
|
+
* memory/scope.ts).
|
|
8
|
+
*
|
|
9
|
+
* Each call opens and closes its own connection: this CLI is
|
|
10
|
+
* stateless per invocation like every other subcommand here, and
|
|
11
|
+
* SQLite is built for exactly this access pattern.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runMemoryRetain(input: string): Promise<unknown>;
|
|
14
|
+
export declare function runMemoryRecall(input: string): Promise<unknown>;
|
|
15
|
+
export declare function runMemoryReflect(input: string): Promise<unknown>;
|
|
16
|
+
export declare function runMemoryEdit(input: string): Promise<unknown>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI adapter's memory wiring: scope resolution plus the four
|
|
3
|
+
* request/response shapes the `memory` subcommands speak. Domain
|
|
4
|
+
* logic (the store itself) lives in `../memory`; this file is
|
|
5
|
+
* where a CLI-specific "what scope applies right now" answer gets
|
|
6
|
+
* made, since core deliberately doesn't own that (see
|
|
7
|
+
* memory/scope.ts).
|
|
8
|
+
*
|
|
9
|
+
* Each call opens and closes its own connection: this CLI is
|
|
10
|
+
* stateless per invocation like every other subcommand here, and
|
|
11
|
+
* SQLite is built for exactly this access pattern.
|
|
12
|
+
*/
|
|
13
|
+
import { memoryDbPath, openMemoryStore } from "../memory/index.js";
|
|
14
|
+
/** The scope a call gets when it doesn't name one: the project at cwd. */
|
|
15
|
+
function defaultScope() {
|
|
16
|
+
return { kind: "project", path: process.cwd() };
|
|
17
|
+
}
|
|
18
|
+
export async function runMemoryRetain(input) {
|
|
19
|
+
const req = JSON.parse(input);
|
|
20
|
+
const store = await openMemoryStore(await memoryDbPath());
|
|
21
|
+
try {
|
|
22
|
+
return await store.retain({
|
|
23
|
+
scope: req.scope ?? defaultScope(),
|
|
24
|
+
text: req.text,
|
|
25
|
+
...(req.tags ? { tags: req.tags } : {}),
|
|
26
|
+
...(req.source ? { source: req.source } : {}),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await store.close();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function runMemoryRecall(input) {
|
|
34
|
+
const req = JSON.parse(input || "{}");
|
|
35
|
+
const store = await openMemoryStore(await memoryDbPath());
|
|
36
|
+
try {
|
|
37
|
+
return await store.recall({
|
|
38
|
+
scope: req.scope ?? defaultScope(),
|
|
39
|
+
...(req.query ? { text: req.query } : {}),
|
|
40
|
+
...(req.limit ? { limit: req.limit } : {}),
|
|
41
|
+
...(req.includeGlobal !== undefined
|
|
42
|
+
? { includeGlobal: req.includeGlobal }
|
|
43
|
+
: {}),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await store.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function runMemoryReflect(input) {
|
|
51
|
+
const req = JSON.parse(input);
|
|
52
|
+
const store = await openMemoryStore(await memoryDbPath());
|
|
53
|
+
try {
|
|
54
|
+
const text = await store.reflect({
|
|
55
|
+
scope: req.scope ?? defaultScope(),
|
|
56
|
+
question: req.question,
|
|
57
|
+
});
|
|
58
|
+
return { text };
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
await store.close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export async function runMemoryEdit(input) {
|
|
65
|
+
const req = JSON.parse(input);
|
|
66
|
+
const store = await openMemoryStore(await memoryDbPath());
|
|
67
|
+
try {
|
|
68
|
+
if (req.invalidate) {
|
|
69
|
+
await store.invalidate(req.id);
|
|
70
|
+
return { ok: true, invalidated: req.id };
|
|
71
|
+
}
|
|
72
|
+
const fact = await store.edit(req.id, {
|
|
73
|
+
...(req.text !== undefined ? { text: req.text } : {}),
|
|
74
|
+
...(req.tags !== undefined ? { tags: req.tags } : {}),
|
|
75
|
+
});
|
|
76
|
+
return { ok: fact !== null, fact };
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await store.close();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `notes` domain's CLI handler: one process per call, no
|
|
3
|
+
* persisted state -- every verb is fully determined by
|
|
4
|
+
* `notesRoot` plus its own params, so unlike `bin/quest.ts`
|
|
5
|
+
* there is no `.agentic-harness/notes-state.json` to load or
|
|
6
|
+
* save.
|
|
7
|
+
*
|
|
8
|
+
* notesRoot resolves the same way quest's questsRoot does: a
|
|
9
|
+
* single default location every tool on the machine sees
|
|
10
|
+
* unless told otherwise, not something that shifts under you
|
|
11
|
+
* as cwd changes. There's no sibling pi extension to alias
|
|
12
|
+
* onto (quest's default points at the exact path
|
|
13
|
+
* agentic-harness.pi's quest-workflow extension already
|
|
14
|
+
* writes to), so notes gets its own XDG-rooted default
|
|
15
|
+
* instead. Override with `--notes-root` or
|
|
16
|
+
* `AGENTIC_HARNESS_NOTES_ROOT` when the archive lives
|
|
17
|
+
* somewhere else -- e.g. a specific repo's notes tree.
|
|
18
|
+
*/
|
|
19
|
+
import type { NoteResult, NoteToolParams } from "../notes/verbs/shared.js";
|
|
20
|
+
/**
|
|
21
|
+
* Default notesRoot: an XDG data-dir location, mirroring how
|
|
22
|
+
* `bin/quest.ts`'s `defaultQuestsRoot` resolves.
|
|
23
|
+
*/
|
|
24
|
+
export declare function defaultNotesRoot(env?: NodeJS.ProcessEnv, home?: string): string;
|
|
25
|
+
export interface NotesCliOptions {
|
|
26
|
+
action: string;
|
|
27
|
+
notesRoot: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Run one notes action against `notesRoot`, resolved from the flag/env/cwd chain. */
|
|
30
|
+
export declare function runNotesAction(options: NotesCliOptions, params: NoteToolParams): Promise<NoteResult>;
|