@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/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# agentic-harness.core
|
|
2
|
+
|
|
3
|
+
Pi-agnostic business logic for [agentic-harness](https://github.com/Jitsusama/agentic-harness.pi):
|
|
4
|
+
state machines, guardian decisions, quest/TDD domain model. Each domain is a
|
|
5
|
+
pure, host-agnostic TypeScript module plus a stateless-per-invocation CLI;
|
|
6
|
+
adapters (pi, Claude Code, ...) own persistence, presentation and how their
|
|
7
|
+
host surfaces things like confirmation.
|
|
8
|
+
|
|
9
|
+
## Domains
|
|
10
|
+
|
|
11
|
+
### `tdd`
|
|
12
|
+
|
|
13
|
+
Drives one discrete red-green-refactor loop by attesting each transition.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { attest, idleLoop } from "@jitsusama/agentic-harness.core/tdd";
|
|
17
|
+
|
|
18
|
+
const result = attest(idleLoop(), {
|
|
19
|
+
action: "plan",
|
|
20
|
+
behaviour: "rejects an empty cart",
|
|
21
|
+
});
|
|
22
|
+
// { outcome: "advanced", loop: {...}, discipline: "..." }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`./tdd/presentation` exports the optional glyph/colour vocabulary for hosts
|
|
26
|
+
with a scoreboard; nothing else needs it.
|
|
27
|
+
|
|
28
|
+
## CLI
|
|
29
|
+
|
|
30
|
+
Each invocation reads/writes its own small JSON state file — no daemon, no
|
|
31
|
+
long-lived process. This is the shape a Bash-invoked skill or a hook
|
|
32
|
+
dispatcher needs.
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
echo '{"action":"plan","behaviour":"rejects an empty cart"}' \
|
|
36
|
+
| agentic-harness-core tdd attest --state-file .agentic-harness/tdd-loop.json
|
|
37
|
+
|
|
38
|
+
agentic-harness-core tdd status --state-file .agentic-harness/tdd-loop.json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Omit `--state-file` to use the default, `.agentic-harness/tdd-loop.json`
|
|
42
|
+
relative to the current directory.
|
|
43
|
+
|
|
44
|
+
## Development
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
npm install
|
|
48
|
+
npm run build # compiles src/ + bin/ to dist/
|
|
49
|
+
npm test # builds, then runs the vitest suite (unit + CLI)
|
|
50
|
+
npm run typecheck
|
|
51
|
+
npm run lint
|
|
52
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's charter and per-turn prompts.
|
|
3
|
+
*
|
|
4
|
+
* The charter is the advisor's standing system prompt: its role,
|
|
5
|
+
* its evidence discipline, its output contract and the framing
|
|
6
|
+
* that its findings are advice to weigh, not commands to obey.
|
|
7
|
+
* The review prompt is what it sees each turn: the watch-list of
|
|
8
|
+
* captured rules and the new transcript delta.
|
|
9
|
+
*/
|
|
10
|
+
import type { GovernanceRule } from "../governance/index.js";
|
|
11
|
+
/** The advisor's standing system prompt. */
|
|
12
|
+
export declare function advisorCharter(): string;
|
|
13
|
+
/** Build the per-turn review prompt from rules and the delta. */
|
|
14
|
+
export declare function reviewPrompt(rules: GovernanceRule[], delta: string): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's charter and per-turn prompts.
|
|
3
|
+
*
|
|
4
|
+
* The charter is the advisor's standing system prompt: its role,
|
|
5
|
+
* its evidence discipline, its output contract and the framing
|
|
6
|
+
* that its findings are advice to weigh, not commands to obey.
|
|
7
|
+
* The review prompt is what it sees each turn: the watch-list of
|
|
8
|
+
* captured rules and the new transcript delta.
|
|
9
|
+
*/
|
|
10
|
+
/** The advisor's standing system prompt. */
|
|
11
|
+
export function advisorCharter() {
|
|
12
|
+
return [
|
|
13
|
+
"You are an advisor watching a coding agent at work. You are not",
|
|
14
|
+
"the doer; you never write code or take actions. Your job is to",
|
|
15
|
+
"catch what the doer rushed past: scope drift, a claim made without",
|
|
16
|
+
"grounding, a violation of a standing rule, a correctness risk.",
|
|
17
|
+
"",
|
|
18
|
+
"Investigate before you speak. You have read-only tools (read,",
|
|
19
|
+
"grep, glob). Use them to check a suspicion against the workspace",
|
|
20
|
+
"before you raise it. Every finding must carry the evidence you",
|
|
21
|
+
"found: a file and line, the text you read, the rule it breaks. A",
|
|
22
|
+
"finding you cannot ground, you drop.",
|
|
23
|
+
"",
|
|
24
|
+
"Stay quiet unless a turn earns a note. Most turns need none. Never",
|
|
25
|
+
"invent concerns to seem useful, and never repeat advice already",
|
|
26
|
+
"given.",
|
|
27
|
+
"",
|
|
28
|
+
"When you have investigated, answer with only a JSON array of",
|
|
29
|
+
"findings, each an object with:",
|
|
30
|
+
' - "severity": "aside" (a quiet note), "concern" (worth stopping',
|
|
31
|
+
' to weigh) or "blocker" (a likely mistake to fix now)',
|
|
32
|
+
' - "claim": one sentence, what you observed',
|
|
33
|
+
' - "evidence": the file:line or text that grounds the claim',
|
|
34
|
+
"Return an empty array when there is nothing worth raising. Your",
|
|
35
|
+
"findings are advice for the doer to weigh, not commands to obey.",
|
|
36
|
+
].join("\n");
|
|
37
|
+
}
|
|
38
|
+
/** Build the per-turn review prompt from rules and the delta. */
|
|
39
|
+
export function reviewPrompt(rules, delta) {
|
|
40
|
+
const watch = rules.length
|
|
41
|
+
? [
|
|
42
|
+
"Standing rules to watch for violations of:",
|
|
43
|
+
...rules.map((r) => `- ${r.text}`),
|
|
44
|
+
"",
|
|
45
|
+
].join("\n")
|
|
46
|
+
: "";
|
|
47
|
+
return `${watch}New activity since your last review:\n\n${delta}`;
|
|
48
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's findings: their shape, how they parse out of a
|
|
3
|
+
* model reply, and how severity plus a back-off counter decide
|
|
4
|
+
* the delivery channel.
|
|
5
|
+
*
|
|
6
|
+
* An aside is a quiet tail note. A concern or blocker interrupts
|
|
7
|
+
* through the steer channel so it can stop a wrong direction
|
|
8
|
+
* rather than only annotate it. A back-off window keeps the
|
|
9
|
+
* advisor from nagging: for a few turns after one interrupt, its
|
|
10
|
+
* later concerns route to asides instead.
|
|
11
|
+
*/
|
|
12
|
+
/** How loudly a finding should be delivered. */
|
|
13
|
+
export type Severity = "aside" | "concern" | "blocker";
|
|
14
|
+
/** Where a finding is delivered. */
|
|
15
|
+
export type Channel = "aside" | "steer";
|
|
16
|
+
/** One evidence-backed observation from the advisor. */
|
|
17
|
+
export interface Finding {
|
|
18
|
+
readonly severity: Severity;
|
|
19
|
+
readonly claim: string;
|
|
20
|
+
readonly evidence?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Turns to route interrupts to asides after one fires. */
|
|
23
|
+
export declare const IMMUNE_WINDOW = 2;
|
|
24
|
+
/**
|
|
25
|
+
* Parse a model reply into findings. Accepts a JSON array of
|
|
26
|
+
* objects anywhere in the reply; anything without a known
|
|
27
|
+
* severity and a non-empty claim is dropped. A reply with no
|
|
28
|
+
* parseable array yields no findings.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseFindings(reply: string): Finding[];
|
|
31
|
+
/**
|
|
32
|
+
* Decide the channel for a finding given the current back-off
|
|
33
|
+
* counter. Asides always stay asides; concerns and blockers
|
|
34
|
+
* interrupt through steer unless the advisor is still inside its
|
|
35
|
+
* immune window, where they soften to asides.
|
|
36
|
+
*/
|
|
37
|
+
export declare function channelFor(severity: Severity, immuneTurns: number): Channel;
|
|
38
|
+
/**
|
|
39
|
+
* The back-off counter for the next turn: reset to the immune
|
|
40
|
+
* window when an interrupt fired this turn, otherwise decay by
|
|
41
|
+
* one toward zero.
|
|
42
|
+
*/
|
|
43
|
+
export declare function nextImmuneTurns(current: number, firedInterrupt: boolean): number;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's findings: their shape, how they parse out of a
|
|
3
|
+
* model reply, and how severity plus a back-off counter decide
|
|
4
|
+
* the delivery channel.
|
|
5
|
+
*
|
|
6
|
+
* An aside is a quiet tail note. A concern or blocker interrupts
|
|
7
|
+
* through the steer channel so it can stop a wrong direction
|
|
8
|
+
* rather than only annotate it. A back-off window keeps the
|
|
9
|
+
* advisor from nagging: for a few turns after one interrupt, its
|
|
10
|
+
* later concerns route to asides instead.
|
|
11
|
+
*/
|
|
12
|
+
import { firstJsonArray } from "../internal/json-array.js";
|
|
13
|
+
/** Turns to route interrupts to asides after one fires. */
|
|
14
|
+
export const IMMUNE_WINDOW = 2;
|
|
15
|
+
const SEVERITIES = ["aside", "concern", "blocker"];
|
|
16
|
+
function isSeverity(value) {
|
|
17
|
+
return typeof value === "string" && SEVERITIES.includes(value);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse a model reply into findings. Accepts a JSON array of
|
|
21
|
+
* objects anywhere in the reply; anything without a known
|
|
22
|
+
* severity and a non-empty claim is dropped. A reply with no
|
|
23
|
+
* parseable array yields no findings.
|
|
24
|
+
*/
|
|
25
|
+
export function parseFindings(reply) {
|
|
26
|
+
const array = firstJsonArray(reply);
|
|
27
|
+
if (!array)
|
|
28
|
+
return [];
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(array);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
if (!Array.isArray(parsed))
|
|
37
|
+
return [];
|
|
38
|
+
const findings = [];
|
|
39
|
+
for (const item of parsed) {
|
|
40
|
+
if (typeof item !== "object" || item === null)
|
|
41
|
+
continue;
|
|
42
|
+
const record = item;
|
|
43
|
+
const claim = typeof record.claim === "string" ? record.claim.trim() : "";
|
|
44
|
+
if (claim.length === 0 || !isSeverity(record.severity))
|
|
45
|
+
continue;
|
|
46
|
+
const evidence = typeof record.evidence === "string" && record.evidence.trim().length > 0
|
|
47
|
+
? record.evidence.trim()
|
|
48
|
+
: undefined;
|
|
49
|
+
findings.push({
|
|
50
|
+
severity: record.severity,
|
|
51
|
+
claim,
|
|
52
|
+
...(evidence ? { evidence } : {}),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return findings;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Decide the channel for a finding given the current back-off
|
|
59
|
+
* counter. Asides always stay asides; concerns and blockers
|
|
60
|
+
* interrupt through steer unless the advisor is still inside its
|
|
61
|
+
* immune window, where they soften to asides.
|
|
62
|
+
*/
|
|
63
|
+
export function channelFor(severity, immuneTurns) {
|
|
64
|
+
// A blocker is a likely mistake to fix now, so it always
|
|
65
|
+
// interrupts; the back-off window must not mute it just because
|
|
66
|
+
// an earlier concern fired.
|
|
67
|
+
if (severity === "blocker")
|
|
68
|
+
return "steer";
|
|
69
|
+
if (severity === "aside")
|
|
70
|
+
return "aside";
|
|
71
|
+
return immuneTurns > 0 ? "aside" : "steer";
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The back-off counter for the next turn: reset to the immune
|
|
75
|
+
* window when an interrupt fired this turn, otherwise decay by
|
|
76
|
+
* one toward zero.
|
|
77
|
+
*/
|
|
78
|
+
export function nextImmuneTurns(current, firedInterrupt) {
|
|
79
|
+
if (firedInterrupt)
|
|
80
|
+
return IMMUNE_WINDOW;
|
|
81
|
+
return Math.max(0, current - 1);
|
|
82
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's decision core: everything about watching turns,
|
|
3
|
+
* investigating suspicions and raising findings that does not
|
|
4
|
+
* need a host's UI or extension runtime.
|
|
5
|
+
*
|
|
6
|
+
* The orchestration that ties this to a live session (subscribing
|
|
7
|
+
* to turn events, running the review loop, delivering a finding as
|
|
8
|
+
* a steer or a quiet note) is adapter-local: it needs a host's
|
|
9
|
+
* event model and message-delivery primitives, which is exactly
|
|
10
|
+
* the kind of thing this package's own design principles say stays
|
|
11
|
+
* out. `advisorCharter`/`reviewPrompt` describe the review the
|
|
12
|
+
* adapter runs through `completion`'s `runInvestigation`;
|
|
13
|
+
* `investigationTools` is the read-only palette that investigation
|
|
14
|
+
* calls; `parseFindings`/`channelFor` turn its reply into
|
|
15
|
+
* deliverable notes; `isSubstantiveTurn` and the
|
|
16
|
+
* enabled/disabled settings file round out what a host needs to
|
|
17
|
+
* decide whether to run a review at all.
|
|
18
|
+
*/
|
|
19
|
+
export { advisorCharter, reviewPrompt } from "./charter.js";
|
|
20
|
+
export type { Channel, Finding, Severity } from "./findings.js";
|
|
21
|
+
export { channelFor, IMMUNE_WINDOW, nextImmuneTurns, parseFindings, } from "./findings.js";
|
|
22
|
+
export { loadAdvisorEnabled, saveAdvisorEnabled } from "./settings.js";
|
|
23
|
+
export { isSubstantiveTurn } from "./substantive.js";
|
|
24
|
+
export { globArgs, grepArgs, investigationTools, resolveWithinRoot, } from "./tools.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's decision core: everything about watching turns,
|
|
3
|
+
* investigating suspicions and raising findings that does not
|
|
4
|
+
* need a host's UI or extension runtime.
|
|
5
|
+
*
|
|
6
|
+
* The orchestration that ties this to a live session (subscribing
|
|
7
|
+
* to turn events, running the review loop, delivering a finding as
|
|
8
|
+
* a steer or a quiet note) is adapter-local: it needs a host's
|
|
9
|
+
* event model and message-delivery primitives, which is exactly
|
|
10
|
+
* the kind of thing this package's own design principles say stays
|
|
11
|
+
* out. `advisorCharter`/`reviewPrompt` describe the review the
|
|
12
|
+
* adapter runs through `completion`'s `runInvestigation`;
|
|
13
|
+
* `investigationTools` is the read-only palette that investigation
|
|
14
|
+
* calls; `parseFindings`/`channelFor` turn its reply into
|
|
15
|
+
* deliverable notes; `isSubstantiveTurn` and the
|
|
16
|
+
* enabled/disabled settings file round out what a host needs to
|
|
17
|
+
* decide whether to run a review at all.
|
|
18
|
+
*/
|
|
19
|
+
export { advisorCharter, reviewPrompt } from "./charter.js";
|
|
20
|
+
export { channelFor, IMMUNE_WINDOW, nextImmuneTurns, parseFindings, } from "./findings.js";
|
|
21
|
+
export { loadAdvisorEnabled, saveAdvisorEnabled } from "./settings.js";
|
|
22
|
+
export { isSubstantiveTurn } from "./substantive.js";
|
|
23
|
+
export { globArgs, grepArgs, investigationTools, resolveWithinRoot, } from "./tools.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's persisted on/off state.
|
|
3
|
+
*
|
|
4
|
+
* The advisor is off by default and turned on by asking for it in
|
|
5
|
+
* conversation, not by an environment variable. The choice
|
|
6
|
+
* persists to a small JSON file so it carries across sessions
|
|
7
|
+
* until turned off again.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Read the advisor's enabled flag from `path`. Defaults to false
|
|
11
|
+
* (off) when the file is missing or unreadable, so the advisor
|
|
12
|
+
* never runs unless it was explicitly turned on.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadAdvisorEnabled(path: string): boolean;
|
|
15
|
+
/** Persist the advisor's enabled flag to `path`. */
|
|
16
|
+
export declare function saveAdvisorEnabled(path: string, enabled: boolean): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's persisted on/off state.
|
|
3
|
+
*
|
|
4
|
+
* The advisor is off by default and turned on by asking for it in
|
|
5
|
+
* conversation, not by an environment variable. The choice
|
|
6
|
+
* persists to a small JSON file so it carries across sessions
|
|
7
|
+
* until turned off again.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { dirname } from "node:path";
|
|
11
|
+
/**
|
|
12
|
+
* Read the advisor's enabled flag from `path`. Defaults to false
|
|
13
|
+
* (off) when the file is missing or unreadable, so the advisor
|
|
14
|
+
* never runs unless it was explicitly turned on.
|
|
15
|
+
*/
|
|
16
|
+
export function loadAdvisorEnabled(path) {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
19
|
+
return parsed?.enabled === true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// No settings file yet, or a corrupt one: stay off.
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Persist the advisor's enabled flag to `path`. */
|
|
27
|
+
export function saveAdvisorEnabled(path, enabled) {
|
|
28
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
29
|
+
writeFileSync(path, `${JSON.stringify({ enabled }, null, 2)}\n`, "utf8");
|
|
30
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a turn is worth reviewing.
|
|
3
|
+
*
|
|
4
|
+
* The advisor is bounded to substantive turns: ones that changed
|
|
5
|
+
* something or took a consequential action. A turn that only read
|
|
6
|
+
* or answered a question is not worth a paid review pass. The
|
|
7
|
+
* signal is the set of tool names the turn invoked.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* True when any tool name used in the turn signals a change or a
|
|
11
|
+
* consequential action. Read-only tools (read, grep, glob, ls,
|
|
12
|
+
* search) do not, so a purely investigative turn is skipped.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isSubstantiveTurn(toolNames: string[]): boolean;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a turn is worth reviewing.
|
|
3
|
+
*
|
|
4
|
+
* The advisor is bounded to substantive turns: ones that changed
|
|
5
|
+
* something or took a consequential action. A turn that only read
|
|
6
|
+
* or answered a question is not worth a paid review pass. The
|
|
7
|
+
* signal is the set of tool names the turn invoked.
|
|
8
|
+
*/
|
|
9
|
+
/** Tool-name fragments that mark a turn as substantive. */
|
|
10
|
+
const SUBSTANTIVE_MARKERS = [
|
|
11
|
+
"edit",
|
|
12
|
+
"write",
|
|
13
|
+
"apply_patch",
|
|
14
|
+
"commit",
|
|
15
|
+
"pr_",
|
|
16
|
+
"post",
|
|
17
|
+
"reply",
|
|
18
|
+
"resolve",
|
|
19
|
+
"merge",
|
|
20
|
+
"rename",
|
|
21
|
+
"delete",
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* True when any tool name used in the turn signals a change or a
|
|
25
|
+
* consequential action. Read-only tools (read, grep, glob, ls,
|
|
26
|
+
* search) do not, so a purely investigative turn is skipped.
|
|
27
|
+
*/
|
|
28
|
+
export function isSubstantiveTurn(toolNames) {
|
|
29
|
+
return toolNames.some((name) => {
|
|
30
|
+
const lower = name.toLowerCase();
|
|
31
|
+
return SUBSTANTIVE_MARKERS.some((marker) => lower.includes(marker));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's read-only investigation tools.
|
|
3
|
+
*
|
|
4
|
+
* Three tools let the advisor check a suspicion against the
|
|
5
|
+
* workspace without ever changing it: read a file slice, grep for
|
|
6
|
+
* a pattern and glob for paths. They run under the session's cwd
|
|
7
|
+
* and cap their output so a single call cannot flood the
|
|
8
|
+
* advisor's context. Nothing here writes, moves or deletes.
|
|
9
|
+
*
|
|
10
|
+
* The advisor's tool-call arguments are steered by transcript
|
|
11
|
+
* content, which is untrusted (web fetches, file and issue text),
|
|
12
|
+
* so these tools are hardened against that: paths are contained
|
|
13
|
+
* to the root, the search pattern is bound as a flag value behind
|
|
14
|
+
* a `--` terminator so it cannot smuggle in ripgrep flags such as
|
|
15
|
+
* `--pre` (which would run an arbitrary command), reads are size
|
|
16
|
+
* capped, and every subprocess is time and output bounded.
|
|
17
|
+
*/
|
|
18
|
+
import type { LoopTool } from "../completion/index.js";
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a caller path against the investigation root and refuse
|
|
21
|
+
* anything that escapes it. An absolute path or a `..` climb that
|
|
22
|
+
* lands outside the root throws rather than reading the host.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveWithinRoot(root: string, path: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Build ripgrep args that search for `pattern` under `target`
|
|
27
|
+
* safely: the pattern rides `--regexp` as a bound value and a
|
|
28
|
+
* `--` terminator precedes the path, so neither can be parsed as
|
|
29
|
+
* a ripgrep flag (closing the `--pre` command-execution hole).
|
|
30
|
+
*/
|
|
31
|
+
export declare function grepArgs(pattern: string, target: string): string[];
|
|
32
|
+
/** Build ripgrep args that list files matching `pattern` safely. */
|
|
33
|
+
export declare function globArgs(pattern: string): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Build the read-only tool set rooted at `root`. The optional
|
|
36
|
+
* signal aborts a long-running grep or glob with the turn.
|
|
37
|
+
*/
|
|
38
|
+
export declare function investigationTools(root: string, signal?: AbortSignal): LoopTool[];
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The advisor's read-only investigation tools.
|
|
3
|
+
*
|
|
4
|
+
* Three tools let the advisor check a suspicion against the
|
|
5
|
+
* workspace without ever changing it: read a file slice, grep for
|
|
6
|
+
* a pattern and glob for paths. They run under the session's cwd
|
|
7
|
+
* and cap their output so a single call cannot flood the
|
|
8
|
+
* advisor's context. Nothing here writes, moves or deletes.
|
|
9
|
+
*
|
|
10
|
+
* The advisor's tool-call arguments are steered by transcript
|
|
11
|
+
* content, which is untrusted (web fetches, file and issue text),
|
|
12
|
+
* so these tools are hardened against that: paths are contained
|
|
13
|
+
* to the root, the search pattern is bound as a flag value behind
|
|
14
|
+
* a `--` terminator so it cannot smuggle in ripgrep flags such as
|
|
15
|
+
* `--pre` (which would run an arbitrary command), reads are size
|
|
16
|
+
* capped, and every subprocess is time and output bounded.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from "node:child_process";
|
|
19
|
+
import { readFileSync, statSync } from "node:fs";
|
|
20
|
+
import { resolve, sep } from "node:path";
|
|
21
|
+
/** Cap on characters returned by any one tool call. */
|
|
22
|
+
const MAX_OUTPUT = 4000;
|
|
23
|
+
/** Cap on lines a read returns when no limit is given. */
|
|
24
|
+
const DEFAULT_READ_LIMIT = 200;
|
|
25
|
+
/** Refuse to read a file larger than this. */
|
|
26
|
+
const MAX_READ_BYTES = 1_000_000;
|
|
27
|
+
/** Wall-clock cap on any one subprocess. */
|
|
28
|
+
const RUN_TIMEOUT_MS = 10_000;
|
|
29
|
+
/** Clamp text to the output cap with a truncation marker. */
|
|
30
|
+
function clamp(text) {
|
|
31
|
+
if (text.length <= MAX_OUTPUT)
|
|
32
|
+
return text;
|
|
33
|
+
return `${text.slice(0, MAX_OUTPUT)}\n... (truncated)`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a caller path against the investigation root and refuse
|
|
37
|
+
* anything that escapes it. An absolute path or a `..` climb that
|
|
38
|
+
* lands outside the root throws rather than reading the host.
|
|
39
|
+
*/
|
|
40
|
+
export function resolveWithinRoot(root, path) {
|
|
41
|
+
const base = resolve(root);
|
|
42
|
+
const abs = resolve(base, path);
|
|
43
|
+
if (abs !== base && !abs.startsWith(base + sep)) {
|
|
44
|
+
throw new Error(`path escapes the investigation root: ${path}`);
|
|
45
|
+
}
|
|
46
|
+
return abs;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build ripgrep args that search for `pattern` under `target`
|
|
50
|
+
* safely: the pattern rides `--regexp` as a bound value and a
|
|
51
|
+
* `--` terminator precedes the path, so neither can be parsed as
|
|
52
|
+
* a ripgrep flag (closing the `--pre` command-execution hole).
|
|
53
|
+
*/
|
|
54
|
+
export function grepArgs(pattern, target) {
|
|
55
|
+
return [
|
|
56
|
+
"--line-number",
|
|
57
|
+
"--no-heading",
|
|
58
|
+
"--max-count",
|
|
59
|
+
"50",
|
|
60
|
+
"--regexp",
|
|
61
|
+
pattern,
|
|
62
|
+
"--",
|
|
63
|
+
target,
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
/** Build ripgrep args that list files matching `pattern` safely. */
|
|
67
|
+
export function globArgs(pattern) {
|
|
68
|
+
// --glob binds the pattern as its value, so it cannot be parsed
|
|
69
|
+
// as a flag; there is no positional to smuggle a path into.
|
|
70
|
+
return ["--files", "--glob", pattern];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Run a command under the root, bounded by a wall-clock timeout
|
|
74
|
+
* and an output cap. The child is killed when either trips or the
|
|
75
|
+
* turn's signal aborts, so a wedged or gushing search cannot hang
|
|
76
|
+
* the advisor or exhaust memory.
|
|
77
|
+
*/
|
|
78
|
+
function run(root, command, args, signal) {
|
|
79
|
+
return new Promise((resolveOut) => {
|
|
80
|
+
const child = spawn(command, args, { cwd: root, signal });
|
|
81
|
+
let out = "";
|
|
82
|
+
let done = false;
|
|
83
|
+
const finish = (text) => {
|
|
84
|
+
if (done)
|
|
85
|
+
return;
|
|
86
|
+
done = true;
|
|
87
|
+
clearTimeout(timer);
|
|
88
|
+
try {
|
|
89
|
+
child.kill("SIGKILL");
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Already exited; nothing to kill.
|
|
93
|
+
}
|
|
94
|
+
resolveOut(text);
|
|
95
|
+
};
|
|
96
|
+
const timer = setTimeout(() => finish(out.trim() || "(timed out)"), RUN_TIMEOUT_MS);
|
|
97
|
+
child.stdout?.on("data", (chunk) => {
|
|
98
|
+
out += chunk.toString();
|
|
99
|
+
// Stop accumulating well past the clamp so a huge result
|
|
100
|
+
// cannot balloon memory before it is truncated.
|
|
101
|
+
if (out.length > MAX_OUTPUT * 2)
|
|
102
|
+
finish(out);
|
|
103
|
+
});
|
|
104
|
+
child.on("error", (err) => finish(`Command failed: ${err.message}`));
|
|
105
|
+
child.on("close", () => finish(out.trim() || "(no matches)"));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Build the read-only tool set rooted at `root`. The optional
|
|
110
|
+
* signal aborts a long-running grep or glob with the turn.
|
|
111
|
+
*/
|
|
112
|
+
export function investigationTools(root, signal) {
|
|
113
|
+
return [
|
|
114
|
+
{
|
|
115
|
+
name: "read_file",
|
|
116
|
+
description: "Read a slice of a file. Args: path (string), offset (1-indexed " +
|
|
117
|
+
"start line, optional), limit (max lines, optional).",
|
|
118
|
+
parameters: {
|
|
119
|
+
type: "object",
|
|
120
|
+
properties: {
|
|
121
|
+
path: { type: "string" },
|
|
122
|
+
offset: { type: "number" },
|
|
123
|
+
limit: { type: "number" },
|
|
124
|
+
},
|
|
125
|
+
required: ["path"],
|
|
126
|
+
},
|
|
127
|
+
async execute(args) {
|
|
128
|
+
const path = String(args.path ?? "");
|
|
129
|
+
if (!path)
|
|
130
|
+
return "read_file needs a path.";
|
|
131
|
+
let resolved;
|
|
132
|
+
try {
|
|
133
|
+
resolved = resolveWithinRoot(root, path);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
return err instanceof Error ? err.message : String(err);
|
|
137
|
+
}
|
|
138
|
+
let stats;
|
|
139
|
+
try {
|
|
140
|
+
stats = statSync(resolved);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
return `Cannot read ${path}: ${err instanceof Error ? err.message : String(err)}`;
|
|
144
|
+
}
|
|
145
|
+
if (!stats.isFile())
|
|
146
|
+
return `Refused: ${path} is not a regular file.`;
|
|
147
|
+
if (stats.size > MAX_READ_BYTES) {
|
|
148
|
+
return `Refused: ${path} is too large (${stats.size} bytes).`;
|
|
149
|
+
}
|
|
150
|
+
const content = readFileSync(resolved, "utf8");
|
|
151
|
+
const lines = content.split("\n");
|
|
152
|
+
const offset = typeof args.offset === "number" ? Math.max(1, args.offset) : 1;
|
|
153
|
+
const limit = typeof args.limit === "number" ? args.limit : DEFAULT_READ_LIMIT;
|
|
154
|
+
const slice = lines.slice(offset - 1, offset - 1 + limit);
|
|
155
|
+
return clamp(slice.map((line, i) => `${offset + i}: ${line}`).join("\n"));
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: "grep",
|
|
160
|
+
description: "Search for a regex across files. Args: pattern (string), path " +
|
|
161
|
+
"(directory or file to search, optional).",
|
|
162
|
+
parameters: {
|
|
163
|
+
type: "object",
|
|
164
|
+
properties: {
|
|
165
|
+
pattern: { type: "string" },
|
|
166
|
+
path: { type: "string" },
|
|
167
|
+
},
|
|
168
|
+
required: ["pattern"],
|
|
169
|
+
},
|
|
170
|
+
async execute(args) {
|
|
171
|
+
const pattern = String(args.pattern ?? "");
|
|
172
|
+
if (!pattern)
|
|
173
|
+
return "grep needs a pattern.";
|
|
174
|
+
let target = ".";
|
|
175
|
+
if (args.path) {
|
|
176
|
+
try {
|
|
177
|
+
target = resolveWithinRoot(root, String(args.path));
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
return err instanceof Error ? err.message : String(err);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return clamp(await run(root, "rg", grepArgs(pattern, target), signal));
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "glob",
|
|
188
|
+
description: "List paths matching a glob. Args: pattern (string).",
|
|
189
|
+
parameters: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: { pattern: { type: "string" } },
|
|
192
|
+
required: ["pattern"],
|
|
193
|
+
},
|
|
194
|
+
async execute(args) {
|
|
195
|
+
const pattern = String(args.pattern ?? "");
|
|
196
|
+
if (!pattern)
|
|
197
|
+
return "glob needs a pattern.";
|
|
198
|
+
return clamp(await run(root, "rg", globArgs(pattern), signal));
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
}
|