@jitsusama/agentic-harness.core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/advisor/charter.d.ts +14 -0
- package/dist/advisor/charter.js +48 -0
- package/dist/advisor/findings.d.ts +43 -0
- package/dist/advisor/findings.js +82 -0
- package/dist/advisor/index.d.ts +24 -0
- package/dist/advisor/index.js +23 -0
- package/dist/advisor/settings.d.ts +16 -0
- package/dist/advisor/settings.js +30 -0
- package/dist/advisor/substantive.d.ts +14 -0
- package/dist/advisor/substantive.js +33 -0
- package/dist/advisor/tools.d.ts +38 -0
- package/dist/advisor/tools.js +202 -0
- package/dist/attribution/commit-hook.d.ts +53 -0
- package/dist/attribution/commit-hook.js +133 -0
- package/dist/attribution/gh-footer.d.ts +27 -0
- package/dist/attribution/gh-footer.js +80 -0
- package/dist/attribution/index.d.ts +11 -0
- package/dist/attribution/index.js +11 -0
- package/dist/attribution/model-name.d.ts +11 -0
- package/dist/attribution/model-name.js +26 -0
- package/dist/bin/attribution.d.ts +36 -0
- package/dist/bin/attribution.js +82 -0
- package/dist/bin/cli.d.ts +14 -0
- package/dist/bin/cli.js +236 -0
- package/dist/bin/gate-deps.d.ts +23 -0
- package/dist/bin/gate-deps.js +61 -0
- package/dist/bin/guardians.d.ts +51 -0
- package/dist/bin/guardians.js +174 -0
- package/dist/bin/memory.d.ts +16 -0
- package/dist/bin/memory.js +81 -0
- package/dist/bin/notes.d.ts +30 -0
- package/dist/bin/notes.js +67 -0
- package/dist/bin/process-exec.d.ts +14 -0
- package/dist/bin/process-exec.js +31 -0
- package/dist/bin/quest.d.ts +38 -0
- package/dist/bin/quest.js +187 -0
- package/dist/bin/slack-auth.d.ts +49 -0
- package/dist/bin/slack-auth.js +107 -0
- package/dist/clock/index.d.ts +46 -0
- package/dist/clock/index.js +72 -0
- package/dist/command/cwd.d.ts +21 -0
- package/dist/command/cwd.js +60 -0
- package/dist/command/edit.d.ts +14 -0
- package/dist/command/edit.js +22 -0
- package/dist/command/flags.d.ts +29 -0
- package/dist/command/flags.js +111 -0
- package/dist/command/index.d.ts +16 -0
- package/dist/command/index.js +12 -0
- package/dist/command/tokenize.d.ts +7 -0
- package/dist/command/tokenize.js +315 -0
- package/dist/command/types.d.ts +66 -0
- package/dist/command/types.js +9 -0
- package/dist/completion/index.d.ts +17 -0
- package/dist/completion/index.js +16 -0
- package/dist/completion/investigate.d.ts +63 -0
- package/dist/completion/investigate.js +198 -0
- package/dist/completion/resolve.d.ts +29 -0
- package/dist/completion/resolve.js +42 -0
- package/dist/completion/side.d.ts +51 -0
- package/dist/completion/side.js +93 -0
- package/dist/completion/types.d.ts +84 -0
- package/dist/completion/types.js +14 -0
- package/dist/exec/exec.d.ts +38 -0
- package/dist/exec/exec.js +51 -0
- package/dist/exec/index.d.ts +8 -0
- package/dist/exec/index.js +8 -0
- package/dist/gate/decision.d.ts +52 -0
- package/dist/gate/decision.js +68 -0
- package/dist/gate/deps.d.ts +14 -0
- package/dist/gate/deps.js +1 -0
- package/dist/gate/index.d.ts +2 -0
- package/dist/gate/index.js +1 -0
- package/dist/git-cli/index.d.ts +47 -0
- package/dist/git-cli/index.js +127 -0
- package/dist/github-cli/command-spec.d.ts +14 -0
- package/dist/github-cli/command-spec.js +18 -0
- package/dist/github-cli/index.d.ts +71 -0
- package/dist/github-cli/index.js +188 -0
- package/dist/google/apis/calendar.d.ts +64 -0
- package/dist/google/apis/calendar.js +297 -0
- package/dist/google/apis/docs.d.ts +29 -0
- package/dist/google/apis/docs.js +154 -0
- package/dist/google/apis/drive.d.ts +46 -0
- package/dist/google/apis/drive.js +189 -0
- package/dist/google/apis/gmail.d.ts +67 -0
- package/dist/google/apis/gmail.js +374 -0
- package/dist/google/apis/index.d.ts +10 -0
- package/dist/google/apis/index.js +10 -0
- package/dist/google/apis/sheets.d.ts +16 -0
- package/dist/google/apis/sheets.js +54 -0
- package/dist/google/apis/slides.d.ts +16 -0
- package/dist/google/apis/slides.js +40 -0
- package/dist/google/auth/browser.d.ts +5 -0
- package/dist/google/auth/browser.js +27 -0
- package/dist/google/auth/credentials.d.ts +26 -0
- package/dist/google/auth/credentials.js +69 -0
- package/dist/google/auth/errors.d.ts +15 -0
- package/dist/google/auth/errors.js +26 -0
- package/dist/google/auth/index.d.ts +12 -0
- package/dist/google/auth/index.js +12 -0
- package/dist/google/auth/oauth-app.d.ts +15 -0
- package/dist/google/auth/oauth-app.js +20 -0
- package/dist/google/auth/oauth.d.ts +46 -0
- package/dist/google/auth/oauth.js +146 -0
- package/dist/google/auth/server.d.ts +13 -0
- package/dist/google/auth/server.js +70 -0
- package/dist/google/auth/setup-instructions.d.ts +16 -0
- package/dist/google/auth/setup-instructions.js +24 -0
- package/dist/google/auth/store.d.ts +19 -0
- package/dist/google/auth/store.js +27 -0
- package/dist/google/index.d.ts +13 -0
- package/dist/google/index.js +12 -0
- package/dist/google/paths.d.ts +17 -0
- package/dist/google/paths.js +28 -0
- package/dist/google/renderers/calendar.d.ts +23 -0
- package/dist/google/renderers/calendar.js +312 -0
- package/dist/google/renderers/drive.d.ts +31 -0
- package/dist/google/renderers/drive.js +214 -0
- package/dist/google/renderers/email.d.ts +16 -0
- package/dist/google/renderers/email.js +130 -0
- package/dist/google/renderers/index.d.ts +8 -0
- package/dist/google/renderers/index.js +8 -0
- package/dist/google/types.d.ts +143 -0
- package/dist/google/types.js +27 -0
- package/dist/governance/distill.d.ts +31 -0
- package/dist/governance/distill.js +78 -0
- package/dist/governance/index.d.ts +11 -0
- package/dist/governance/index.js +10 -0
- package/dist/governance/render.d.ts +13 -0
- package/dist/governance/render.js +23 -0
- package/dist/governance/store.d.ts +32 -0
- package/dist/governance/store.js +102 -0
- package/dist/governance/types.d.ts +19 -0
- package/dist/governance/types.js +9 -0
- package/dist/guardian/index.d.ts +7 -0
- package/dist/guardian/index.js +7 -0
- package/dist/guardian/types.d.ts +37 -0
- package/dist/guardian/types.js +12 -0
- package/dist/internal/github/cli.d.ts +40 -0
- package/dist/internal/github/cli.js +102 -0
- package/dist/internal/guardian/commit-file.d.ts +7 -0
- package/dist/internal/guardian/commit-file.js +36 -0
- package/dist/internal/guardian/commit-format.d.ts +35 -0
- package/dist/internal/guardian/commit-format.js +63 -0
- package/dist/internal/guardian/commit-shell.d.ts +38 -0
- package/dist/internal/guardian/commit-shell.js +134 -0
- package/dist/internal/guardian/history-gate.d.ts +41 -0
- package/dist/internal/guardian/history-gate.js +76 -0
- package/dist/internal/guardian/prose-gate.d.ts +31 -0
- package/dist/internal/guardian/prose-gate.js +50 -0
- package/dist/internal/guardian/redirect-gate.d.ts +41 -0
- package/dist/internal/guardian/redirect-gate.js +114 -0
- package/dist/internal/guardian/section-gate.d.ts +20 -0
- package/dist/internal/guardian/section-gate.js +36 -0
- package/dist/internal/guardian/title-gate.d.ts +20 -0
- package/dist/internal/guardian/title-gate.js +36 -0
- package/dist/internal/json-array.d.ts +11 -0
- package/dist/internal/json-array.js +40 -0
- package/dist/internal/lsp/registry.d.ts +12 -0
- package/dist/internal/lsp/registry.js +16 -0
- package/dist/internal/notes/discovery.d.ts +59 -0
- package/dist/internal/notes/discovery.js +91 -0
- package/dist/internal/notes/frontmatter.d.ts +52 -0
- package/dist/internal/notes/frontmatter.js +163 -0
- package/dist/internal/notes/id.d.ts +42 -0
- package/dist/internal/notes/id.js +80 -0
- package/dist/internal/notes/io.d.ts +25 -0
- package/dist/internal/notes/io.js +51 -0
- package/dist/internal/notes/sanitize.d.ts +19 -0
- package/dist/internal/notes/sanitize.js +35 -0
- package/dist/internal/process-global.d.ts +20 -0
- package/dist/internal/process-global.js +28 -0
- package/dist/internal/quest/alias-index.d.ts +61 -0
- package/dist/internal/quest/alias-index.js +69 -0
- package/dist/internal/quest/append-journey.d.ts +22 -0
- package/dist/internal/quest/append-journey.js +63 -0
- package/dist/internal/quest/bash-write.d.ts +49 -0
- package/dist/internal/quest/bash-write.js +208 -0
- package/dist/internal/quest/dates.d.ts +14 -0
- package/dist/internal/quest/dates.js +20 -0
- package/dist/internal/quest/discovery.d.ts +96 -0
- package/dist/internal/quest/discovery.js +354 -0
- package/dist/internal/quest/fields.d.ts +37 -0
- package/dist/internal/quest/fields.js +94 -0
- package/dist/internal/quest/frontmatter.d.ts +88 -0
- package/dist/internal/quest/frontmatter.js +630 -0
- package/dist/internal/quest/git-signals.d.ts +53 -0
- package/dist/internal/quest/git-signals.js +192 -0
- package/dist/internal/quest/id.d.ts +50 -0
- package/dist/internal/quest/id.js +116 -0
- package/dist/internal/quest/io.d.ts +54 -0
- package/dist/internal/quest/io.js +233 -0
- package/dist/internal/quest/mentions.d.ts +45 -0
- package/dist/internal/quest/mentions.js +70 -0
- package/dist/internal/quest/mutate.d.ts +38 -0
- package/dist/internal/quest/mutate.js +83 -0
- package/dist/internal/quest/process-liveness.d.ts +98 -0
- package/dist/internal/quest/process-liveness.js +216 -0
- package/dist/internal/quest/quest-doc.d.ts +116 -0
- package/dist/internal/quest/quest-doc.js +239 -0
- package/dist/internal/quest/ranking.d.ts +48 -0
- package/dist/internal/quest/ranking.js +114 -0
- package/dist/internal/quest/reopen.d.ts +65 -0
- package/dist/internal/quest/reopen.js +113 -0
- package/dist/internal/quest/resolve-cwd.d.ts +32 -0
- package/dist/internal/quest/resolve-cwd.js +89 -0
- package/dist/internal/quest/sanitize.d.ts +42 -0
- package/dist/internal/quest/sanitize.js +69 -0
- package/dist/internal/quest/scaffold.d.ts +59 -0
- package/dist/internal/quest/scaffold.js +169 -0
- package/dist/internal/quest/scratch.d.ts +27 -0
- package/dist/internal/quest/scratch.js +106 -0
- package/dist/internal/quest/session-liveness.d.ts +125 -0
- package/dist/internal/quest/session-liveness.js +386 -0
- package/dist/internal/quest/session-ownership.d.ts +22 -0
- package/dist/internal/quest/session-ownership.js +100 -0
- package/dist/internal/quest/session-registry.d.ts +221 -0
- package/dist/internal/quest/session-registry.js +266 -0
- package/dist/internal/quest/status.d.ts +10 -0
- package/dist/internal/quest/status.js +15 -0
- package/dist/internal/quest/structural-journal.d.ts +41 -0
- package/dist/internal/quest/structural-journal.js +67 -0
- package/dist/internal/quest/structural.d.ts +43 -0
- package/dist/internal/quest/structural.js +77 -0
- package/dist/internal/quest/toc.d.ts +28 -0
- package/dist/internal/quest/toc.js +90 -0
- package/dist/internal/quest/trees.d.ts +53 -0
- package/dist/internal/quest/trees.js +145 -0
- package/dist/internal/quest/url-fetchers.d.ts +50 -0
- package/dist/internal/quest/url-fetchers.js +97 -0
- package/dist/internal/quest/write-classifier.d.ts +46 -0
- package/dist/internal/quest/write-classifier.js +59 -0
- package/dist/internal/refs/builtins.d.ts +32 -0
- package/dist/internal/refs/builtins.js +179 -0
- package/dist/internal/refs/registry.d.ts +25 -0
- package/dist/internal/refs/registry.js +42 -0
- package/dist/internal/registry/global-symbol-registry.d.ts +37 -0
- package/dist/internal/registry/global-symbol-registry.js +55 -0
- package/dist/internal/review/registry.d.ts +12 -0
- package/dist/internal/review/registry.js +16 -0
- package/dist/internal/sqlite/db.d.ts +16 -0
- package/dist/internal/sqlite/db.js +26 -0
- package/dist/internal/terminal/builtins.d.ts +8 -0
- package/dist/internal/terminal/builtins.js +14 -0
- package/dist/internal/terminal/drivers/fallback.d.ts +8 -0
- package/dist/internal/terminal/drivers/fallback.js +31 -0
- package/dist/internal/terminal/drivers/shared.d.ts +39 -0
- package/dist/internal/terminal/drivers/shared.js +51 -0
- package/dist/internal/terminal/drivers/tmux.d.ts +14 -0
- package/dist/internal/terminal/drivers/tmux.js +88 -0
- package/dist/internal/terminal/drivers/wezterm.d.ts +35 -0
- package/dist/internal/terminal/drivers/wezterm.js +175 -0
- package/dist/internal/terminal/registry.d.ts +12 -0
- package/dist/internal/terminal/registry.js +16 -0
- package/dist/internal/tree/builtins.d.ts +8 -0
- package/dist/internal/tree/builtins.js +10 -0
- package/dist/internal/tree/providers/git-worktree.d.ts +20 -0
- package/dist/internal/tree/providers/git-worktree.js +279 -0
- package/dist/internal/tree/registry.d.ts +12 -0
- package/dist/internal/tree/registry.js +16 -0
- package/dist/lsp/config.d.ts +77 -0
- package/dist/lsp/config.js +154 -0
- package/dist/lsp/external.d.ts +13 -0
- package/dist/lsp/external.js +52 -0
- package/dist/lsp/format.d.ts +11 -0
- package/dist/lsp/format.js +54 -0
- package/dist/lsp/index.d.ts +17 -0
- package/dist/lsp/index.js +16 -0
- package/dist/lsp/offsets.d.ts +22 -0
- package/dist/lsp/offsets.js +51 -0
- package/dist/lsp/registry.d.ts +28 -0
- package/dist/lsp/registry.js +45 -0
- package/dist/lsp/standalone/backend.d.ts +42 -0
- package/dist/lsp/standalone/backend.js +150 -0
- package/dist/lsp/standalone/document.d.ts +45 -0
- package/dist/lsp/standalone/document.js +81 -0
- package/dist/lsp/standalone/server.d.ts +84 -0
- package/dist/lsp/standalone/server.js +521 -0
- package/dist/lsp/types.d.ts +119 -0
- package/dist/lsp/types.js +13 -0
- package/dist/memory/db.d.ts +15 -0
- package/dist/memory/db.js +25 -0
- package/dist/memory/index.d.ts +12 -0
- package/dist/memory/index.js +11 -0
- package/dist/memory/paths.d.ts +19 -0
- package/dist/memory/paths.js +33 -0
- package/dist/memory/scope.d.ts +14 -0
- package/dist/memory/scope.js +22 -0
- package/dist/memory/store.d.ts +12 -0
- package/dist/memory/store.js +146 -0
- package/dist/memory/types.d.ts +80 -0
- package/dist/memory/types.js +6 -0
- package/dist/notes/types.d.ts +50 -0
- package/dist/notes/types.js +23 -0
- package/dist/notes/verbs/create.d.ts +5 -0
- package/dist/notes/verbs/create.js +55 -0
- package/dist/notes/verbs/mutate.d.ts +8 -0
- package/dist/notes/verbs/mutate.js +152 -0
- package/dist/notes/verbs/queries.d.ts +15 -0
- package/dist/notes/verbs/queries.js +116 -0
- package/dist/notes/verbs/reindex.d.ts +12 -0
- package/dist/notes/verbs/reindex.js +35 -0
- package/dist/notes/verbs/shared.d.ts +37 -0
- package/dist/notes/verbs/shared.js +29 -0
- package/dist/observability/index.d.ts +13 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/recorder.d.ts +50 -0
- package/dist/observability/recorder.js +77 -0
- package/dist/observability/store.d.ts +22 -0
- package/dist/observability/store.js +213 -0
- package/dist/observability/types.d.ts +82 -0
- package/dist/observability/types.js +1 -0
- package/dist/process/index.d.ts +9 -0
- package/dist/process/index.js +9 -0
- package/dist/process/process.d.ts +95 -0
- package/dist/process/process.js +153 -0
- package/dist/prose/block.d.ts +9 -0
- package/dist/prose/block.js +43 -0
- package/dist/prose/detect.d.ts +50 -0
- package/dist/prose/detect.js +217 -0
- package/dist/prose/gate.d.ts +14 -0
- package/dist/prose/gate.js +21 -0
- package/dist/prose/index.d.ts +4 -0
- package/dist/prose/index.js +4 -0
- package/dist/prose/wrap.d.ts +9 -0
- package/dist/prose/wrap.js +47 -0
- package/dist/quest/actions.d.ts +20 -0
- package/dist/quest/actions.js +107 -0
- package/dist/quest/config.d.ts +79 -0
- package/dist/quest/config.js +83 -0
- package/dist/quest/index.d.ts +29 -0
- package/dist/quest/index.js +28 -0
- package/dist/quest/lifecycle.d.ts +365 -0
- package/dist/quest/lifecycle.js +900 -0
- package/dist/quest/lookup.d.ts +243 -0
- package/dist/quest/lookup.js +496 -0
- package/dist/quest/machine.d.ts +48 -0
- package/dist/quest/machine.js +96 -0
- package/dist/quest/render-rows.d.ts +166 -0
- package/dist/quest/render-rows.js +214 -0
- package/dist/quest/state.d.ts +111 -0
- package/dist/quest/state.js +46 -0
- package/dist/quest/types.d.ts +224 -0
- package/dist/quest/types.js +10 -0
- package/dist/quest/verbs/alias.d.ts +9 -0
- package/dist/quest/verbs/alias.js +129 -0
- package/dist/quest/verbs/lifecycle.d.ts +36 -0
- package/dist/quest/verbs/lifecycle.js +407 -0
- package/dist/quest/verbs/queries.d.ts +24 -0
- package/dist/quest/verbs/queries.js +241 -0
- package/dist/quest/verbs/reorder.d.ts +15 -0
- package/dist/quest/verbs/reorder.js +85 -0
- package/dist/quest/verbs/shared.d.ts +63 -0
- package/dist/quest/verbs/shared.js +35 -0
- package/dist/quest/verbs/stage.d.ts +39 -0
- package/dist/quest/verbs/stage.js +506 -0
- package/dist/quest/verbs/structural.d.ts +23 -0
- package/dist/quest/verbs/structural.js +310 -0
- package/dist/quest/verbs/tree-ops.d.ts +20 -0
- package/dist/quest/verbs/tree-ops.js +289 -0
- package/dist/refs/index.d.ts +13 -0
- package/dist/refs/index.js +12 -0
- package/dist/refs/lookup.d.ts +53 -0
- package/dist/refs/lookup.js +102 -0
- package/dist/refs/register.d.ts +34 -0
- package/dist/refs/register.js +44 -0
- package/dist/refs/types.d.ts +81 -0
- package/dist/refs/types.js +17 -0
- package/dist/remote/index.d.ts +9 -0
- package/dist/remote/index.js +9 -0
- package/dist/remote/name.d.ts +22 -0
- package/dist/remote/name.js +30 -0
- package/dist/result/cite.d.ts +84 -0
- package/dist/result/cite.js +127 -0
- package/dist/result/counts.d.ts +15 -0
- package/dist/result/counts.js +17 -0
- package/dist/result/details.d.ts +61 -0
- package/dist/result/details.js +121 -0
- package/dist/result/digest.d.ts +37 -0
- package/dist/result/digest.js +227 -0
- package/dist/result/follow.d.ts +29 -0
- package/dist/result/follow.js +37 -0
- package/dist/result/index.d.ts +26 -0
- package/dist/result/index.js +26 -0
- package/dist/result/listing.d.ts +62 -0
- package/dist/result/listing.js +72 -0
- package/dist/result/location.d.ts +67 -0
- package/dist/result/location.js +125 -0
- package/dist/result/query.d.ts +67 -0
- package/dist/result/query.js +144 -0
- package/dist/result/spill.d.ts +41 -0
- package/dist/result/spill.js +121 -0
- package/dist/result/store.d.ts +83 -0
- package/dist/result/store.js +214 -0
- package/dist/result/view.d.ts +31 -0
- package/dist/result/view.js +38 -0
- package/dist/review/anchor.d.ts +84 -0
- package/dist/review/anchor.js +89 -0
- package/dist/review/ask/agents.d.ts +80 -0
- package/dist/review/ask/agents.js +296 -0
- package/dist/review/ask/anchorable.d.ts +35 -0
- package/dist/review/ask/anchorable.js +76 -0
- package/dist/review/ask/answer.d.ts +54 -0
- package/dist/review/ask/answer.js +209 -0
- package/dist/review/ask/audit.d.ts +71 -0
- package/dist/review/ask/audit.js +158 -0
- package/dist/review/ask/collect.d.ts +41 -0
- package/dist/review/ask/collect.js +82 -0
- package/dist/review/ask/council.d.ts +290 -0
- package/dist/review/ask/council.js +386 -0
- package/dist/review/ask/critique.d.ts +69 -0
- package/dist/review/ask/critique.js +157 -0
- package/dist/review/ask/harvest.d.ts +119 -0
- package/dist/review/ask/harvest.js +409 -0
- package/dist/review/ask/identity.d.ts +93 -0
- package/dist/review/ask/identity.js +134 -0
- package/dist/review/ask/judge.d.ts +37 -0
- package/dist/review/ask/judge.js +140 -0
- package/dist/review/ask/persona.d.ts +84 -0
- package/dist/review/ask/persona.js +127 -0
- package/dist/review/ask/progress.d.ts +117 -0
- package/dist/review/ask/progress.js +137 -0
- package/dist/review/ask/prompt.d.ts +131 -0
- package/dist/review/ask/prompt.js +242 -0
- package/dist/review/ask/roster.d.ts +94 -0
- package/dist/review/ask/roster.js +338 -0
- package/dist/review/ask/run.d.ts +435 -0
- package/dist/review/ask/run.js +340 -0
- package/dist/review/ask/span.d.ts +70 -0
- package/dist/review/ask/span.js +166 -0
- package/dist/review/ask/stack-round.d.ts +66 -0
- package/dist/review/ask/stack-round.js +125 -0
- package/dist/review/ask/start.d.ts +48 -0
- package/dist/review/ask/start.js +118 -0
- package/dist/review/ask/store.d.ts +83 -0
- package/dist/review/ask/store.js +226 -0
- package/dist/review/ask/wire.d.ts +89 -0
- package/dist/review/ask/wire.js +204 -0
- package/dist/review/attach.d.ts +161 -0
- package/dist/review/attach.js +357 -0
- package/dist/review/authoring.d.ts +84 -0
- package/dist/review/authoring.js +203 -0
- package/dist/review/backed.d.ts +90 -0
- package/dist/review/backed.js +168 -0
- package/dist/review/bind.d.ts +75 -0
- package/dist/review/bind.js +223 -0
- package/dist/review/budget.d.ts +133 -0
- package/dist/review/budget.js +278 -0
- package/dist/review/capabilities.d.ts +217 -0
- package/dist/review/capabilities.js +46 -0
- package/dist/review/change.d.ts +155 -0
- package/dist/review/change.js +15 -0
- package/dist/review/checks.d.ts +56 -0
- package/dist/review/checks.js +11 -0
- package/dist/review/config.d.ts +71 -0
- package/dist/review/config.js +125 -0
- package/dist/review/conventions.d.ts +35 -0
- package/dist/review/conventions.js +58 -0
- package/dist/review/conversation.d.ts +98 -0
- package/dist/review/conversation.js +16 -0
- package/dist/review/decided.d.ts +58 -0
- package/dist/review/decided.js +67 -0
- package/dist/review/diff.d.ts +116 -0
- package/dist/review/diff.js +237 -0
- package/dist/review/draft/continuation.d.ts +23 -0
- package/dist/review/draft/continuation.js +32 -0
- package/dist/review/draft/fanout.d.ts +57 -0
- package/dist/review/draft/fanout.js +46 -0
- package/dist/review/draft/handle.d.ts +55 -0
- package/dist/review/draft/handle.js +110 -0
- package/dist/review/draft/plan.d.ts +112 -0
- package/dist/review/draft/plan.js +343 -0
- package/dist/review/draft/publish.d.ts +38 -0
- package/dist/review/draft/publish.js +118 -0
- package/dist/review/draft/render.d.ts +32 -0
- package/dist/review/draft/render.js +100 -0
- package/dist/review/draft/state.d.ts +98 -0
- package/dist/review/draft/state.js +83 -0
- package/dist/review/draft/store.d.ts +33 -0
- package/dist/review/draft/store.js +100 -0
- package/dist/review/elsewhere.d.ts +27 -0
- package/dist/review/elsewhere.js +39 -0
- package/dist/review/engine.d.ts +106 -0
- package/dist/review/engine.js +243 -0
- package/dist/review/events.d.ts +59 -0
- package/dist/review/events.js +35 -0
- package/dist/review/failed.d.ts +46 -0
- package/dist/review/failed.js +56 -0
- package/dist/review/finding.d.ts +81 -0
- package/dist/review/finding.js +85 -0
- package/dist/review/fix.d.ts +147 -0
- package/dist/review/fix.js +175 -0
- package/dist/review/followup.d.ts +84 -0
- package/dist/review/followup.js +123 -0
- package/dist/review/index.d.ts +134 -0
- package/dist/review/index.js +80 -0
- package/dist/review/keys.d.ts +23 -0
- package/dist/review/keys.js +40 -0
- package/dist/review/landing.d.ts +37 -0
- package/dist/review/landing.js +68 -0
- package/dist/review/lenses.d.ts +132 -0
- package/dist/review/lenses.js +430 -0
- package/dist/review/propose-from.d.ts +76 -0
- package/dist/review/propose-from.js +86 -0
- package/dist/review/provider.d.ts +306 -0
- package/dist/review/provider.js +16 -0
- package/dist/review/providers/git/index.d.ts +23 -0
- package/dist/review/providers/git/index.js +214 -0
- package/dist/review/providers/github/authoring.d.ts +22 -0
- package/dist/review/providers/github/authoring.js +350 -0
- package/dist/review/providers/github/claims.d.ts +49 -0
- package/dist/review/providers/github/claims.js +136 -0
- package/dist/review/providers/github/conversation.d.ts +18 -0
- package/dist/review/providers/github/conversation.js +455 -0
- package/dist/review/providers/github/fields.d.ts +30 -0
- package/dist/review/providers/github/fields.js +47 -0
- package/dist/review/providers/github/index.d.ts +15 -0
- package/dist/review/providers/github/index.js +110 -0
- package/dist/review/providers/github/proposals.d.ts +14 -0
- package/dist/review/providers/github/proposals.js +298 -0
- package/dist/review/providers/github/queue.d.ts +46 -0
- package/dist/review/providers/github/queue.js +122 -0
- package/dist/review/providers/github/stacking.d.ts +20 -0
- package/dist/review/providers/github/stacking.js +107 -0
- package/dist/review/queue.d.ts +43 -0
- package/dist/review/queue.js +56 -0
- package/dist/review/reactable.d.ts +93 -0
- package/dist/review/reactable.js +140 -0
- package/dist/review/register.d.ts +52 -0
- package/dist/review/register.js +53 -0
- package/dist/review/resolve.d.ts +58 -0
- package/dist/review/resolve.js +150 -0
- package/dist/review/retarget.d.ts +73 -0
- package/dist/review/retarget.js +82 -0
- package/dist/review/revisited.d.ts +77 -0
- package/dist/review/revisited.js +121 -0
- package/dist/review/stack.d.ts +110 -0
- package/dist/review/stack.js +52 -0
- package/dist/sections/block.d.ts +9 -0
- package/dist/sections/block.js +42 -0
- package/dist/sections/detect.d.ts +31 -0
- package/dist/sections/detect.js +67 -0
- package/dist/sections/gate.d.ts +21 -0
- package/dist/sections/gate.js +22 -0
- package/dist/sections/index.d.ts +5 -0
- package/dist/sections/index.js +5 -0
- package/dist/sections/sanctioned.d.ts +13 -0
- package/dist/sections/sanctioned.js +21 -0
- package/dist/shell/index.d.ts +8 -0
- package/dist/shell/index.js +8 -0
- package/dist/shell/parse.d.ts +125 -0
- package/dist/shell/parse.js +298 -0
- package/dist/slack/api/channels.d.ts +12 -0
- package/dist/slack/api/channels.js +28 -0
- package/dist/slack/api/client.d.ts +94 -0
- package/dist/slack/api/client.js +272 -0
- package/dist/slack/api/files.d.ts +95 -0
- package/dist/slack/api/files.js +223 -0
- package/dist/slack/api/index.d.ts +11 -0
- package/dist/slack/api/index.js +11 -0
- package/dist/slack/api/messages.d.ts +98 -0
- package/dist/slack/api/messages.js +292 -0
- package/dist/slack/api/reactions.d.ts +47 -0
- package/dist/slack/api/reactions.js +50 -0
- package/dist/slack/api/resolve-conversations.d.ts +43 -0
- package/dist/slack/api/resolve-conversations.js +130 -0
- package/dist/slack/api/resolve-messages.d.ts +29 -0
- package/dist/slack/api/resolve-messages.js +93 -0
- package/dist/slack/api/resolve-users.d.ts +27 -0
- package/dist/slack/api/resolve-users.js +73 -0
- package/dist/slack/api/search.d.ts +86 -0
- package/dist/slack/api/search.js +186 -0
- package/dist/slack/api/users.d.ts +12 -0
- package/dist/slack/api/users.js +33 -0
- package/dist/slack/auth/browser-extract.d.ts +33 -0
- package/dist/slack/auth/browser-extract.js +201 -0
- package/dist/slack/auth/browser.d.ts +5 -0
- package/dist/slack/auth/browser.js +25 -0
- package/dist/slack/auth/credentials.d.ts +14 -0
- package/dist/slack/auth/credentials.js +24 -0
- package/dist/slack/auth/errors.d.ts +9 -0
- package/dist/slack/auth/errors.js +19 -0
- package/dist/slack/auth/extract.d.ts +23 -0
- package/dist/slack/auth/extract.js +44 -0
- package/dist/slack/auth/index.d.ts +12 -0
- package/dist/slack/auth/index.js +11 -0
- package/dist/slack/auth/oauth-app.d.ts +11 -0
- package/dist/slack/auth/oauth-app.js +20 -0
- package/dist/slack/auth/oauth.d.ts +31 -0
- package/dist/slack/auth/oauth.js +82 -0
- package/dist/slack/auth/server.d.ts +14 -0
- package/dist/slack/auth/server.js +75 -0
- package/dist/slack/auth/store.d.ts +17 -0
- package/dist/slack/auth/store.js +27 -0
- package/dist/slack/block-message.d.ts +9 -0
- package/dist/slack/block-message.js +30 -0
- package/dist/slack/blocks.d.ts +94 -0
- package/dist/slack/blocks.js +765 -0
- package/dist/slack/content-gate.d.ts +12 -0
- package/dist/slack/content-gate.js +22 -0
- package/dist/slack/detect.d.ts +31 -0
- package/dist/slack/detect.js +125 -0
- package/dist/slack/index.d.ts +18 -0
- package/dist/slack/index.js +17 -0
- package/dist/slack/paths.d.ts +28 -0
- package/dist/slack/paths.js +46 -0
- package/dist/slack/renderers/channel.d.ts +6 -0
- package/dist/slack/renderers/channel.js +27 -0
- package/dist/slack/renderers/index.d.ts +9 -0
- package/dist/slack/renderers/index.js +9 -0
- package/dist/slack/renderers/message.d.ts +21 -0
- package/dist/slack/renderers/message.js +214 -0
- package/dist/slack/renderers/reactions.d.ts +8 -0
- package/dist/slack/renderers/reactions.js +43 -0
- package/dist/slack/renderers/search.d.ts +6 -0
- package/dist/slack/renderers/search.js +39 -0
- package/dist/slack/renderers/user.d.ts +6 -0
- package/dist/slack/renderers/user.js +32 -0
- package/dist/slack/resolvers/cache.d.ts +29 -0
- package/dist/slack/resolvers/cache.js +70 -0
- package/dist/slack/resolvers/conversation-cache.d.ts +42 -0
- package/dist/slack/resolvers/conversation-cache.js +128 -0
- package/dist/slack/resolvers/conversation.d.ts +44 -0
- package/dist/slack/resolvers/conversation.js +229 -0
- package/dist/slack/resolvers/index.d.ts +8 -0
- package/dist/slack/resolvers/index.js +8 -0
- package/dist/slack/resolvers/target.d.ts +19 -0
- package/dist/slack/resolvers/target.js +45 -0
- package/dist/slack/resolvers/url.d.ts +20 -0
- package/dist/slack/resolvers/url.js +22 -0
- package/dist/slack/resolvers/user.d.ts +54 -0
- package/dist/slack/resolvers/user.js +134 -0
- package/dist/slack/types.d.ts +180 -0
- package/dist/slack/types.js +13 -0
- package/dist/tdd/attest.d.ts +21 -0
- package/dist/tdd/attest.js +21 -0
- package/dist/tdd/discipline.d.ts +11 -0
- package/dist/tdd/discipline.js +28 -0
- package/dist/tdd/index.d.ts +14 -0
- package/dist/tdd/index.js +13 -0
- package/dist/tdd/machine.d.ts +48 -0
- package/dist/tdd/machine.js +139 -0
- package/dist/tdd/presentation.d.ts +34 -0
- package/dist/tdd/presentation.js +38 -0
- package/dist/tdd/queries.d.ts +10 -0
- package/dist/tdd/queries.js +22 -0
- package/dist/terminal/index.d.ts +12 -0
- package/dist/terminal/index.js +11 -0
- package/dist/terminal/register.d.ts +21 -0
- package/dist/terminal/register.js +31 -0
- package/dist/terminal/resolve.d.ts +63 -0
- package/dist/terminal/resolve.js +117 -0
- package/dist/terminal/types.d.ts +134 -0
- package/dist/terminal/types.js +19 -0
- package/dist/thinking/index.d.ts +20 -0
- package/dist/thinking/index.js +27 -0
- package/dist/title/block.d.ts +9 -0
- package/dist/title/block.js +32 -0
- package/dist/title/detect.d.ts +25 -0
- package/dist/title/detect.js +154 -0
- package/dist/title/gate.d.ts +19 -0
- package/dist/title/gate.js +21 -0
- package/dist/title/index.d.ts +3 -0
- package/dist/title/index.js +3 -0
- package/dist/tree/index.d.ts +18 -0
- package/dist/tree/index.js +17 -0
- package/dist/tree/register.d.ts +21 -0
- package/dist/tree/register.js +31 -0
- package/dist/tree/resolve.d.ts +20 -0
- package/dist/tree/resolve.js +31 -0
- package/dist/tree/types.d.ts +83 -0
- package/dist/tree/types.js +12 -0
- package/dist/ui/count.d.ts +29 -0
- package/dist/ui/count.js +35 -0
- package/dist/ui/path.d.ts +25 -0
- package/dist/ui/path.js +40 -0
- package/dist/verify/index.d.ts +17 -0
- package/dist/verify/index.js +14 -0
- package/dist/verify/project.d.ts +21 -0
- package/dist/verify/project.js +49 -0
- package/dist/verify/resolve.d.ts +26 -0
- package/dist/verify/resolve.js +27 -0
- package/dist/verify/run.d.ts +31 -0
- package/dist/verify/run.js +145 -0
- package/dist/web/a11y/announcements.d.ts +67 -0
- package/dist/web/a11y/announcements.js +116 -0
- package/dist/web/a11y/budget.d.ts +75 -0
- package/dist/web/a11y/budget.js +97 -0
- package/dist/web/a11y/focus.d.ts +37 -0
- package/dist/web/a11y/focus.js +106 -0
- package/dist/web/a11y/index.d.ts +19 -0
- package/dist/web/a11y/index.js +25 -0
- package/dist/web/a11y/naming.d.ts +23 -0
- package/dist/web/a11y/naming.js +55 -0
- package/dist/web/a11y/outline.d.ts +23 -0
- package/dist/web/a11y/outline.js +42 -0
- package/dist/web/a11y/reading.d.ts +12 -0
- package/dist/web/a11y/reading.js +101 -0
- package/dist/web/a11y/scope.d.ts +23 -0
- package/dist/web/a11y/scope.js +99 -0
- package/dist/web/a11y/states.d.ts +22 -0
- package/dist/web/a11y/states.js +53 -0
- package/dist/web/a11y/tree.d.ts +124 -0
- package/dist/web/a11y/tree.js +269 -0
- package/dist/web/a11y/walk.d.ts +225 -0
- package/dist/web/a11y/walk.js +568 -0
- package/dist/web/a11y/walkprobe.d.ts +44 -0
- package/dist/web/a11y/walkprobe.js +365 -0
- package/dist/web/audit/axe.d.ts +219 -0
- package/dist/web/audit/axe.js +322 -0
- package/dist/web/audit/behind.d.ts +63 -0
- package/dist/web/audit/behind.js +142 -0
- package/dist/web/audit/capture.d.ts +43 -0
- package/dist/web/audit/capture.js +185 -0
- package/dist/web/audit/colour.d.ts +85 -0
- package/dist/web/audit/colour.js +189 -0
- package/dist/web/audit/contrast.d.ts +74 -0
- package/dist/web/audit/contrast.js +104 -0
- package/dist/web/audit/health.d.ts +27 -0
- package/dist/web/audit/health.js +57 -0
- package/dist/web/audit/index.d.ts +22 -0
- package/dist/web/audit/index.js +22 -0
- package/dist/web/audit/pair.d.ts +55 -0
- package/dist/web/audit/pair.js +157 -0
- package/dist/web/audit/probe.d.ts +31 -0
- package/dist/web/audit/probe.js +189 -0
- package/dist/web/audit/report.d.ts +22 -0
- package/dist/web/audit/report.js +250 -0
- package/dist/web/audit/structure.d.ts +126 -0
- package/dist/web/audit/structure.js +595 -0
- package/dist/web/audit/sweep.d.ts +66 -0
- package/dist/web/audit/sweep.js +117 -0
- package/dist/web/audit/target.d.ts +89 -0
- package/dist/web/audit/target.js +168 -0
- package/dist/web/audit/verdict.d.ts +48 -0
- package/dist/web/audit/verdict.js +52 -0
- package/dist/web/audit/visual.d.ts +161 -0
- package/dist/web/audit/visual.js +297 -0
- package/dist/web/browser.d.ts +213 -0
- package/dist/web/browser.js +927 -0
- package/dist/web/compare/images.d.ts +45 -0
- package/dist/web/compare/images.js +101 -0
- package/dist/web/compare/index.d.ts +15 -0
- package/dist/web/compare/index.js +15 -0
- package/dist/web/compare/provenance.d.ts +48 -0
- package/dist/web/compare/provenance.js +86 -0
- package/dist/web/compare/regions.d.ts +78 -0
- package/dist/web/compare/regions.js +211 -0
- package/dist/web/cookies/extract.d.ts +26 -0
- package/dist/web/cookies/extract.js +167 -0
- package/dist/web/cookies/index.d.ts +8 -0
- package/dist/web/cookies/index.js +7 -0
- package/dist/web/cookies/inject.d.ts +13 -0
- package/dist/web/cookies/inject.js +27 -0
- package/dist/web/cookies/setup.d.ts +31 -0
- package/dist/web/cookies/setup.js +94 -0
- package/dist/web/design/index.d.ts +9 -0
- package/dist/web/design/index.js +9 -0
- package/dist/web/design/inventory.d.ts +126 -0
- package/dist/web/design/inventory.js +324 -0
- package/dist/web/design/probe.d.ts +24 -0
- package/dist/web/design/probe.js +88 -0
- package/dist/web/element/actionable.d.ts +34 -0
- package/dist/web/element/actionable.js +48 -0
- package/dist/web/element/animations.d.ts +48 -0
- package/dist/web/element/animations.js +74 -0
- package/dist/web/element/box.d.ts +53 -0
- package/dist/web/element/box.js +58 -0
- package/dist/web/element/hover.d.ts +75 -0
- package/dist/web/element/hover.js +172 -0
- package/dist/web/element/index.d.ts +17 -0
- package/dist/web/element/index.js +17 -0
- package/dist/web/element/listeners.d.ts +72 -0
- package/dist/web/element/listeners.js +98 -0
- package/dist/web/element/measure.d.ts +40 -0
- package/dist/web/element/measure.js +118 -0
- package/dist/web/element/probes.d.ts +108 -0
- package/dist/web/element/probes.js +195 -0
- package/dist/web/element/pseudo.d.ts +51 -0
- package/dist/web/element/pseudo.js +96 -0
- package/dist/web/element/view.d.ts +30 -0
- package/dist/web/element/view.js +117 -0
- package/dist/web/element/visibility.d.ts +42 -0
- package/dist/web/element/visibility.js +67 -0
- package/dist/web/envelope/artifacts.d.ts +23 -0
- package/dist/web/envelope/artifacts.js +45 -0
- package/dist/web/envelope/index.d.ts +9 -0
- package/dist/web/envelope/index.js +9 -0
- package/dist/web/envelope/naming.d.ts +23 -0
- package/dist/web/envelope/naming.js +43 -0
- package/dist/web/envelope/paged.d.ts +42 -0
- package/dist/web/envelope/paged.js +99 -0
- package/dist/web/envelope/sink.d.ts +43 -0
- package/dist/web/envelope/sink.js +67 -0
- package/dist/web/environment/devices.d.ts +65 -0
- package/dist/web/environment/devices.js +82 -0
- package/dist/web/environment/emulation.d.ts +124 -0
- package/dist/web/environment/emulation.js +258 -0
- package/dist/web/environment/index.d.ts +15 -0
- package/dist/web/environment/index.js +15 -0
- package/dist/web/environment/probes.d.ts +18 -0
- package/dist/web/environment/probes.js +40 -0
- package/dist/web/environment/shaping.d.ts +90 -0
- package/dist/web/environment/shaping.js +141 -0
- package/dist/web/environment/status.d.ts +51 -0
- package/dist/web/environment/status.js +109 -0
- package/dist/web/environment/storage.d.ts +55 -0
- package/dist/web/environment/storage.js +142 -0
- package/dist/web/environment/tabs.d.ts +32 -0
- package/dist/web/environment/tabs.js +47 -0
- package/dist/web/environment/view.d.ts +10 -0
- package/dist/web/environment/view.js +42 -0
- package/dist/web/evaluate/index.d.ts +6 -0
- package/dist/web/evaluate/index.js +6 -0
- package/dist/web/evaluate/outcome.d.ts +74 -0
- package/dist/web/evaluate/outcome.js +91 -0
- package/dist/web/evaluate/probe.d.ts +31 -0
- package/dist/web/evaluate/probe.js +303 -0
- package/dist/web/index.d.ts +47 -0
- package/dist/web/index.js +47 -0
- package/dist/web/input/index.d.ts +11 -0
- package/dist/web/input/index.js +11 -0
- package/dist/web/input/keys.d.ts +48 -0
- package/dist/web/input/keys.js +189 -0
- package/dist/web/input/pointer.d.ts +56 -0
- package/dist/web/input/pointer.js +77 -0
- package/dist/web/input/touch.d.ts +61 -0
- package/dist/web/input/touch.js +83 -0
- package/dist/web/mermaid.d.ts +69 -0
- package/dist/web/mermaid.js +223 -0
- package/dist/web/paths.d.ts +16 -0
- package/dist/web/paths.js +27 -0
- package/dist/web/perf/heap.d.ts +42 -0
- package/dist/web/perf/heap.js +73 -0
- package/dist/web/perf/index.d.ts +14 -0
- package/dist/web/perf/index.js +14 -0
- package/dist/web/perf/layers.d.ts +98 -0
- package/dist/web/perf/layers.js +165 -0
- package/dist/web/perf/probe.d.ts +26 -0
- package/dist/web/perf/probe.js +123 -0
- package/dist/web/perf/profile.d.ts +53 -0
- package/dist/web/perf/profile.js +97 -0
- package/dist/web/perf/trace.d.ts +152 -0
- package/dist/web/perf/trace.js +429 -0
- package/dist/web/perf/view.d.ts +6 -0
- package/dist/web/perf/view.js +86 -0
- package/dist/web/perf/vitals.d.ts +141 -0
- package/dist/web/perf/vitals.js +175 -0
- package/dist/web/reader.d.ts +131 -0
- package/dist/web/reader.js +340 -0
- package/dist/web/screenshot.d.ts +50 -0
- package/dist/web/screenshot.js +108 -0
- package/dist/web/search.d.ts +49 -0
- package/dist/web/search.js +137 -0
- package/dist/web/session/artifacts.d.ts +32 -0
- package/dist/web/session/artifacts.js +47 -0
- package/dist/web/session/emulation.d.ts +118 -0
- package/dist/web/session/emulation.js +307 -0
- package/dist/web/session/recording.d.ts +51 -0
- package/dist/web/session/recording.js +64 -0
- package/dist/web/session/settling.d.ts +42 -0
- package/dist/web/session/settling.js +104 -0
- package/dist/web/session/shaping.d.ts +48 -0
- package/dist/web/session/shaping.js +113 -0
- package/dist/web/session/sourcemaps.d.ts +64 -0
- package/dist/web/session/sourcemaps.js +135 -0
- package/dist/web/session/telemetry.d.ts +219 -0
- package/dist/web/session/telemetry.js +486 -0
- package/dist/web/session/wires.d.ts +22 -0
- package/dist/web/session/wires.js +11 -0
- package/dist/web/session.d.ts +1153 -0
- package/dist/web/session.js +3400 -0
- package/dist/web/snapshot/deep.d.ts +36 -0
- package/dist/web/snapshot/deep.js +91 -0
- package/dist/web/snapshot/flatten.d.ts +101 -0
- package/dist/web/snapshot/flatten.js +131 -0
- package/dist/web/snapshot/index.d.ts +8 -0
- package/dist/web/snapshot/index.js +10 -0
- package/dist/web/snapshot/presented.d.ts +32 -0
- package/dist/web/snapshot/presented.js +74 -0
- package/dist/web/snapshot/query.d.ts +67 -0
- package/dist/web/snapshot/query.js +136 -0
- package/dist/web/sourcemap/index.d.ts +9 -0
- package/dist/web/sourcemap/index.js +9 -0
- package/dist/web/sourcemap/mappings.d.ts +111 -0
- package/dist/web/sourcemap/mappings.js +218 -0
- package/dist/web/styles/capture.d.ts +49 -0
- package/dist/web/styles/capture.js +85 -0
- package/dist/web/styles/cascade.d.ts +107 -0
- package/dist/web/styles/cascade.js +275 -0
- package/dist/web/styles/curation.d.ts +45 -0
- package/dist/web/styles/curation.js +282 -0
- package/dist/web/styles/index.d.ts +10 -0
- package/dist/web/styles/index.js +10 -0
- package/dist/web/target/index.d.ts +7 -0
- package/dist/web/target/index.js +7 -0
- package/dist/web/target/refusals.d.ts +59 -0
- package/dist/web/target/refusals.js +305 -0
- package/dist/web/target/target.d.ts +59 -0
- package/dist/web/target/target.js +94 -0
- package/dist/web/telemetry/buffer.d.ts +35 -0
- package/dist/web/telemetry/buffer.js +72 -0
- package/dist/web/telemetry/console.d.ts +127 -0
- package/dist/web/telemetry/console.js +217 -0
- package/dist/web/telemetry/dialogs.d.ts +41 -0
- package/dist/web/telemetry/dialogs.js +38 -0
- package/dist/web/telemetry/downloads.d.ts +42 -0
- package/dist/web/telemetry/downloads.js +65 -0
- package/dist/web/telemetry/failure.d.ts +31 -0
- package/dist/web/telemetry/failure.js +72 -0
- package/dist/web/telemetry/har.d.ts +97 -0
- package/dist/web/telemetry/har.js +227 -0
- package/dist/web/telemetry/index.d.ts +18 -0
- package/dist/web/telemetry/index.js +18 -0
- package/dist/web/telemetry/lifecycle.d.ts +69 -0
- package/dist/web/telemetry/lifecycle.js +120 -0
- package/dist/web/telemetry/network.d.ts +152 -0
- package/dist/web/telemetry/network.js +130 -0
- package/dist/web/telemetry/requests.d.ts +31 -0
- package/dist/web/telemetry/requests.js +119 -0
- package/dist/web/telemetry/sockets.d.ts +56 -0
- package/dist/web/telemetry/sockets.js +101 -0
- package/dist/web/telemetry/view.d.ts +16 -0
- package/dist/web/telemetry/view.js +125 -0
- package/dist/web/wait/conditions.d.ts +87 -0
- package/dist/web/wait/conditions.js +100 -0
- package/dist/web/wait/index.d.ts +6 -0
- package/dist/web/wait/index.js +6 -0
- package/dist/web/wait/settle.d.ts +54 -0
- package/dist/web/wait/settle.js +84 -0
- package/dist/work/ask.d.ts +45 -0
- package/dist/work/ask.js +85 -0
- package/dist/work/author.d.ts +61 -0
- package/dist/work/author.js +144 -0
- package/dist/work/broker.d.ts +151 -0
- package/dist/work/broker.js +165 -0
- package/dist/work/events.d.ts +98 -0
- package/dist/work/events.js +57 -0
- package/dist/work/history.d.ts +69 -0
- package/dist/work/history.js +174 -0
- package/dist/work/index.d.ts +49 -0
- package/dist/work/index.js +33 -0
- package/dist/work/inplay.d.ts +43 -0
- package/dist/work/inplay.js +42 -0
- package/dist/work/memory.d.ts +84 -0
- package/dist/work/memory.js +203 -0
- package/dist/work/objection.d.ts +92 -0
- package/dist/work/objection.js +72 -0
- package/dist/work/provider.d.ts +79 -0
- package/dist/work/provider.js +45 -0
- package/dist/work/providers/git.d.ts +29 -0
- package/dist/work/providers/git.js +87 -0
- package/dist/work/publish.d.ts +53 -0
- package/dist/work/publish.js +139 -0
- package/dist/work/rebase.d.ts +78 -0
- package/dist/work/rebase.js +261 -0
- package/dist/work/reclaim.d.ts +56 -0
- package/dist/work/reclaim.js +52 -0
- package/dist/work/register.d.ts +29 -0
- package/dist/work/register.js +41 -0
- package/dist/work/stack.d.ts +126 -0
- package/dist/work/stack.js +243 -0
- package/dist/work/stacks.d.ts +156 -0
- package/dist/work/stacks.js +524 -0
- package/dist/work/survey.d.ts +52 -0
- package/dist/work/survey.js +58 -0
- package/dist/work/tidy.d.ts +147 -0
- package/dist/work/tidy.js +136 -0
- package/dist/work/tree.d.ts +120 -0
- package/dist/work/tree.js +69 -0
- package/dist/work/unattended.d.ts +40 -0
- package/dist/work/unattended.js +57 -0
- package/package.json +145 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format search results as readable text.
|
|
3
|
+
*/
|
|
4
|
+
import { count } from "../../ui/count.js";
|
|
5
|
+
/** Render file search results. */
|
|
6
|
+
export function renderFileList(files, total, query) {
|
|
7
|
+
if (files.length === 0) {
|
|
8
|
+
return "No files found.";
|
|
9
|
+
}
|
|
10
|
+
const lines = [];
|
|
11
|
+
if (query) {
|
|
12
|
+
lines.push(`Query: ${query}`);
|
|
13
|
+
}
|
|
14
|
+
const truncated = total > files.length;
|
|
15
|
+
const showing = truncated
|
|
16
|
+
? `, showing ${files.length} (limit reached, so pass a higher limit or 0 for all)`
|
|
17
|
+
: `, showing ${files.length}`;
|
|
18
|
+
lines.push(`Found ${count(total, "file")}${showing}:\n`);
|
|
19
|
+
for (const f of files) {
|
|
20
|
+
const size = f.size ? ` (${formatBytes(f.size)})` : "";
|
|
21
|
+
const type = f.mimetype ? ` [${f.mimetype}]` : "";
|
|
22
|
+
lines.push(`- **${f.name}**${type}${size}`);
|
|
23
|
+
if (f.title && f.title !== f.name) {
|
|
24
|
+
lines.push(` Title: ${f.title}`);
|
|
25
|
+
}
|
|
26
|
+
if (f.permalink) {
|
|
27
|
+
lines.push(` ${f.permalink}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return lines.join("\n");
|
|
31
|
+
}
|
|
32
|
+
/** Format byte count as a human-readable string. */
|
|
33
|
+
function formatBytes(bytes) {
|
|
34
|
+
if (bytes < 1024)
|
|
35
|
+
return `${bytes}B`;
|
|
36
|
+
if (bytes < 1024 * 1024)
|
|
37
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
38
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
39
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format user profiles as readable text.
|
|
3
|
+
*/
|
|
4
|
+
/** Render a user profile as a readable summary. */
|
|
5
|
+
export function renderUser(user) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
const displayName = user.displayName || user.realName || user.name;
|
|
8
|
+
lines.push(`**@${user.name}** (${displayName})`);
|
|
9
|
+
if (user.title)
|
|
10
|
+
lines.push(`Title: ${user.title}`);
|
|
11
|
+
if (user.email)
|
|
12
|
+
lines.push(`Email: ${user.email}`);
|
|
13
|
+
if (user.timezone)
|
|
14
|
+
lines.push(`Timezone: ${user.timezone}`);
|
|
15
|
+
if (user.statusText || user.statusEmoji) {
|
|
16
|
+
const status = [user.statusEmoji, user.statusText]
|
|
17
|
+
.filter(Boolean)
|
|
18
|
+
.join(" ");
|
|
19
|
+
lines.push(`Status: ${status}`);
|
|
20
|
+
}
|
|
21
|
+
const flags = [];
|
|
22
|
+
if (user.isBot)
|
|
23
|
+
flags.push("bot");
|
|
24
|
+
if (user.isAdmin)
|
|
25
|
+
flags.push("admin");
|
|
26
|
+
if (user.deleted)
|
|
27
|
+
flags.push("deactivated");
|
|
28
|
+
if (flags.length > 0)
|
|
29
|
+
lines.push(`Flags: ${flags.join(", ")}`);
|
|
30
|
+
lines.push(`ID: ${user.id}`);
|
|
31
|
+
return lines.join("\n");
|
|
32
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared file-based cache for name → ID mappings.
|
|
3
|
+
*
|
|
4
|
+
* Used by channel and user resolvers. Each resolver gets its
|
|
5
|
+
* own cache file under the directory paths.ts names. Entries
|
|
6
|
+
* are keyed by lowercase name to avoid case-sensitivity issues.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Look up a cached ID by name.
|
|
10
|
+
* Returns the ID if found, null otherwise.
|
|
11
|
+
*/
|
|
12
|
+
export declare function lookupId(filename: string, name: string): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Look up a cached name by ID.
|
|
15
|
+
* Reverse lookup: scans all entries for a matching ID.
|
|
16
|
+
*/
|
|
17
|
+
export declare function lookupName(filename: string, id: string): string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Store a name → ID mapping in the cache.
|
|
20
|
+
* Called opportunistically whenever we see name/ID pairs in API responses.
|
|
21
|
+
*/
|
|
22
|
+
export declare function cacheMapping(filename: string, name: string, id: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* List all cached entries, sorted by name.
|
|
25
|
+
*/
|
|
26
|
+
export declare function listCached(filename: string): Array<{
|
|
27
|
+
name: string;
|
|
28
|
+
id: string;
|
|
29
|
+
}>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared file-based cache for name → ID mappings.
|
|
3
|
+
*
|
|
4
|
+
* Used by channel and user resolvers. Each resolver gets its
|
|
5
|
+
* own cache file under the directory paths.ts names. Entries
|
|
6
|
+
* are keyed by lowercase name to avoid case-sensitivity issues.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
import { cacheDir } from "../paths.js";
|
|
11
|
+
/** Directory for resolver caches. */
|
|
12
|
+
const CACHE_DIR = cacheDir();
|
|
13
|
+
/** Ensure the cache directory exists. */
|
|
14
|
+
function ensureDir() {
|
|
15
|
+
fs.mkdirSync(CACHE_DIR, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
/** Read a cache file, returning an empty object if missing or corrupt. */
|
|
18
|
+
function readCache(filename) {
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(path.join(CACHE_DIR, filename), "utf-8");
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// File doesn't exist or is corrupt.
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Write a cache file. */
|
|
29
|
+
function writeCache(filename, data) {
|
|
30
|
+
ensureDir();
|
|
31
|
+
fs.writeFileSync(path.join(CACHE_DIR, filename), JSON.stringify(data, null, "\t"), "utf-8");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Look up a cached ID by name.
|
|
35
|
+
* Returns the ID if found, null otherwise.
|
|
36
|
+
*/
|
|
37
|
+
export function lookupId(filename, name) {
|
|
38
|
+
const data = readCache(filename);
|
|
39
|
+
return data[name.toLowerCase()]?.id ?? null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Look up a cached name by ID.
|
|
43
|
+
* Reverse lookup: scans all entries for a matching ID.
|
|
44
|
+
*/
|
|
45
|
+
export function lookupName(filename, id) {
|
|
46
|
+
const data = readCache(filename);
|
|
47
|
+
for (const entry of Object.values(data)) {
|
|
48
|
+
if (entry.id === id)
|
|
49
|
+
return entry.name;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Store a name → ID mapping in the cache.
|
|
55
|
+
* Called opportunistically whenever we see name/ID pairs in API responses.
|
|
56
|
+
*/
|
|
57
|
+
export function cacheMapping(filename, name, id) {
|
|
58
|
+
const data = readCache(filename);
|
|
59
|
+
data[name.toLowerCase()] = { id, name, updatedAt: Date.now() };
|
|
60
|
+
writeCache(filename, data);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* List all cached entries, sorted by name.
|
|
64
|
+
*/
|
|
65
|
+
export function listCached(filename) {
|
|
66
|
+
const data = readCache(filename);
|
|
67
|
+
return Object.values(data)
|
|
68
|
+
.map((e) => ({ name: e.name, id: e.id }))
|
|
69
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
70
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared in-memory conversation metadata cache.
|
|
3
|
+
*
|
|
4
|
+
* Both the conversation resolver (input resolution) and the
|
|
5
|
+
* message enrichment step (output formatting) use this cache
|
|
6
|
+
* as a single source of truth. Avoids duplicate conversations.info
|
|
7
|
+
* calls across the two code paths.
|
|
8
|
+
*
|
|
9
|
+
* Session-scoped: cleared when the process exits. The file-based
|
|
10
|
+
* name → ID cache in resolvers/cache.ts handles cross-session
|
|
11
|
+
* persistence for name lookups; this cache handles richer metadata
|
|
12
|
+
* (kind, displayName) within a session.
|
|
13
|
+
*/
|
|
14
|
+
import type { SlackClient } from "../api/client.js";
|
|
15
|
+
import type { Conversation, ConversationKind } from "../types.js";
|
|
16
|
+
/** Look up a cached conversation by ID. */
|
|
17
|
+
export declare function getCachedConversation(id: string): Conversation | undefined;
|
|
18
|
+
/** Store a conversation in the cache. */
|
|
19
|
+
export declare function cacheConversation(conversation: Conversation): void;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch conversation metadata, using the cache when possible.
|
|
22
|
+
*
|
|
23
|
+
* Calls conversations.info on cache miss, caches the result,
|
|
24
|
+
* and returns a fully populated Conversation. Callers should
|
|
25
|
+
* prefer getCachedConversation for the fast path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchConversation(client: SlackClient, id: string, signal?: AbortSignal): Promise<Conversation>;
|
|
28
|
+
/**
|
|
29
|
+
* Refresh display names on DM conversations after user resolution.
|
|
30
|
+
*
|
|
31
|
+
* Call after resolveUsersInMessages so displayNameForId
|
|
32
|
+
* returns handles instead of raw IDs.
|
|
33
|
+
*/
|
|
34
|
+
export declare function refreshCachedDmNames(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Infer conversation kind from a channel ID prefix.
|
|
37
|
+
*
|
|
38
|
+
* Best-effort guess used when we only have an ID and haven't
|
|
39
|
+
* called conversations.info yet. D-prefix → DM, G-prefix →
|
|
40
|
+
* group_dm, everything else → channel.
|
|
41
|
+
*/
|
|
42
|
+
export declare function inferKindFromId(id: string): ConversationKind;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared in-memory conversation metadata cache.
|
|
3
|
+
*
|
|
4
|
+
* Both the conversation resolver (input resolution) and the
|
|
5
|
+
* message enrichment step (output formatting) use this cache
|
|
6
|
+
* as a single source of truth. Avoids duplicate conversations.info
|
|
7
|
+
* calls across the two code paths.
|
|
8
|
+
*
|
|
9
|
+
* Session-scoped: cleared when the process exits. The file-based
|
|
10
|
+
* name → ID cache in resolvers/cache.ts handles cross-session
|
|
11
|
+
* persistence for name lookups; this cache handles richer metadata
|
|
12
|
+
* (kind, displayName) within a session.
|
|
13
|
+
*/
|
|
14
|
+
import { displayNameForId } from "./user.js";
|
|
15
|
+
/** In-memory cache of resolved conversation metadata. */
|
|
16
|
+
const cache = new Map();
|
|
17
|
+
/** Look up a cached conversation by ID. */
|
|
18
|
+
export function getCachedConversation(id) {
|
|
19
|
+
return cache.get(id);
|
|
20
|
+
}
|
|
21
|
+
/** Store a conversation in the cache. */
|
|
22
|
+
export function cacheConversation(conversation) {
|
|
23
|
+
cache.set(conversation.id, conversation);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fetch conversation metadata, using the cache when possible.
|
|
27
|
+
*
|
|
28
|
+
* Calls conversations.info on cache miss, caches the result,
|
|
29
|
+
* and returns a fully populated Conversation. Callers should
|
|
30
|
+
* prefer getCachedConversation for the fast path.
|
|
31
|
+
*/
|
|
32
|
+
export async function fetchConversation(client, id, signal) {
|
|
33
|
+
const cached = cache.get(id);
|
|
34
|
+
if (cached)
|
|
35
|
+
return cached;
|
|
36
|
+
const response = await client.call("conversations.info", { channel: id }, signal);
|
|
37
|
+
const ch = response.channel;
|
|
38
|
+
const conversation = toConversation(ch);
|
|
39
|
+
cache.set(id, conversation);
|
|
40
|
+
return conversation;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Refresh display names on DM conversations after user resolution.
|
|
44
|
+
*
|
|
45
|
+
* Call after resolveUsersInMessages so displayNameForId
|
|
46
|
+
* returns handles instead of raw IDs.
|
|
47
|
+
*/
|
|
48
|
+
export function refreshCachedDmNames() {
|
|
49
|
+
for (const conv of cache.values()) {
|
|
50
|
+
if (conv.kind === "dm" && conv.dmUserId) {
|
|
51
|
+
const handle = displayNameForId(conv.dmUserId);
|
|
52
|
+
if (handle !== conv.dmUserId) {
|
|
53
|
+
conv.displayName = `@${handle}`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert a conversations.info response to a Conversation.
|
|
60
|
+
*
|
|
61
|
+
* Shared parsing logic for the boolean fields Slack uses
|
|
62
|
+
* to indicate conversation type.
|
|
63
|
+
*/
|
|
64
|
+
function toConversation(ch) {
|
|
65
|
+
if (ch.is_im) {
|
|
66
|
+
const userId = ch.user;
|
|
67
|
+
const handle = userId ? displayNameForId(userId) : undefined;
|
|
68
|
+
const displayName = handle && handle !== userId ? `@${handle}` : userId ? userId : undefined;
|
|
69
|
+
return {
|
|
70
|
+
id: ch.id,
|
|
71
|
+
kind: "dm",
|
|
72
|
+
displayName,
|
|
73
|
+
dmUserId: userId,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (ch.is_mpim) {
|
|
77
|
+
const displayName = formatGroupDmName(ch.name, ch.purpose?.value);
|
|
78
|
+
return {
|
|
79
|
+
id: ch.id,
|
|
80
|
+
kind: "group_dm",
|
|
81
|
+
displayName,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Regular channel (public or private).
|
|
85
|
+
return {
|
|
86
|
+
id: ch.id,
|
|
87
|
+
name: ch.name,
|
|
88
|
+
kind: "channel",
|
|
89
|
+
displayName: ch.name ? `#${ch.name}` : undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Format a group DM name from the mpdm- format or purpose.
|
|
94
|
+
*
|
|
95
|
+
* Slack names group DMs like `mpdm-user1--user2--user3-1`.
|
|
96
|
+
* The purpose field contains "Group messaging with: @user1
|
|
97
|
+
* @user2 @user3". We prefer the purpose when available.
|
|
98
|
+
*/
|
|
99
|
+
function formatGroupDmName(rawName, purpose) {
|
|
100
|
+
if (purpose?.startsWith("Group messaging with:")) {
|
|
101
|
+
const names = purpose
|
|
102
|
+
.replace("Group messaging with:", "")
|
|
103
|
+
.trim()
|
|
104
|
+
.split(/\s+/)
|
|
105
|
+
.map((n) => (n.startsWith("@") ? n : `@${n}`));
|
|
106
|
+
return names.join(", ");
|
|
107
|
+
}
|
|
108
|
+
if (rawName?.startsWith("mpdm-")) {
|
|
109
|
+
const stripped = rawName.replace(/^mpdm-/, "").replace(/-\d+$/, "");
|
|
110
|
+
const users = stripped.split("--").map((u) => `@${u}`);
|
|
111
|
+
return users.join(", ");
|
|
112
|
+
}
|
|
113
|
+
return "group DM";
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Infer conversation kind from a channel ID prefix.
|
|
117
|
+
*
|
|
118
|
+
* Best-effort guess used when we only have an ID and haven't
|
|
119
|
+
* called conversations.info yet. D-prefix → DM, G-prefix →
|
|
120
|
+
* group_dm, everything else → channel.
|
|
121
|
+
*/
|
|
122
|
+
export function inferKindFromId(id) {
|
|
123
|
+
if (id.startsWith("D"))
|
|
124
|
+
return "dm";
|
|
125
|
+
if (id.startsWith("G"))
|
|
126
|
+
return "group_dm";
|
|
127
|
+
return "channel";
|
|
128
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation resolver: any identifier → Conversation.
|
|
3
|
+
*
|
|
4
|
+
* Accepts channel IDs, user IDs, @-prefixed user handles,
|
|
5
|
+
* #-prefixed channel names, bare channel names and Slack
|
|
6
|
+
* URLs. Returns a Conversation with at least id and kind
|
|
7
|
+
* populated. Uses the shared conversation cache to avoid
|
|
8
|
+
* redundant API calls.
|
|
9
|
+
*
|
|
10
|
+
* The prefix determines intent: `@handle` resolves as a
|
|
11
|
+
* user (opening the DM conversation), `#name` resolves as
|
|
12
|
+
* a channel. IDs are detected by their Slack prefix pattern
|
|
13
|
+
* (C/D/G for channels, U/W for users). Bare strings that
|
|
14
|
+
* match none of these fall through to channel name search
|
|
15
|
+
* as a last resort.
|
|
16
|
+
*
|
|
17
|
+
* On enterprise grids, conversations.list is blocked, so we
|
|
18
|
+
* resolve channel names by searching for a message in that
|
|
19
|
+
* channel and extracting the channel ID from the result.
|
|
20
|
+
*/
|
|
21
|
+
import type { SlackClient } from "../api/client.js";
|
|
22
|
+
import type { Conversation } from "../types.js";
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a conversation identifier to a Conversation.
|
|
25
|
+
*
|
|
26
|
+
* Accepts:
|
|
27
|
+
* - Channel ID (C..., D..., G...) → fetched via cache or conversations.info
|
|
28
|
+
* - User ID (U..., W...) → opens/finds the DM conversation via conversations.open
|
|
29
|
+
* - Comma-separated user IDs or @handles → opens/finds a group DM
|
|
30
|
+
* - @handle (e.g. "@joel.gerber") → resolved to user ID via search, then DM
|
|
31
|
+
* - Channel name (with or without #) → resolved via file cache, then search
|
|
32
|
+
* - Slack URL → parsed for the channel ID
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveConversation(client: SlackClient, input: string): Promise<Conversation>;
|
|
35
|
+
/**
|
|
36
|
+
* Record a channel name → ID mapping.
|
|
37
|
+
* Called opportunistically when channel data appears in API responses.
|
|
38
|
+
*/
|
|
39
|
+
export declare function cacheChannelName(name: string, id: string): void;
|
|
40
|
+
/** List all cached channel mappings. */
|
|
41
|
+
export declare function listCachedChannels(): Array<{
|
|
42
|
+
name: string;
|
|
43
|
+
id: string;
|
|
44
|
+
}>;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation resolver: any identifier → Conversation.
|
|
3
|
+
*
|
|
4
|
+
* Accepts channel IDs, user IDs, @-prefixed user handles,
|
|
5
|
+
* #-prefixed channel names, bare channel names and Slack
|
|
6
|
+
* URLs. Returns a Conversation with at least id and kind
|
|
7
|
+
* populated. Uses the shared conversation cache to avoid
|
|
8
|
+
* redundant API calls.
|
|
9
|
+
*
|
|
10
|
+
* The prefix determines intent: `@handle` resolves as a
|
|
11
|
+
* user (opening the DM conversation), `#name` resolves as
|
|
12
|
+
* a channel. IDs are detected by their Slack prefix pattern
|
|
13
|
+
* (C/D/G for channels, U/W for users). Bare strings that
|
|
14
|
+
* match none of these fall through to channel name search
|
|
15
|
+
* as a last resort.
|
|
16
|
+
*
|
|
17
|
+
* On enterprise grids, conversations.list is blocked, so we
|
|
18
|
+
* resolve channel names by searching for a message in that
|
|
19
|
+
* channel and extracting the channel ID from the result.
|
|
20
|
+
*/
|
|
21
|
+
import { getUserInfo } from "../api/users.js";
|
|
22
|
+
import { cacheMapping, listCached, lookupId } from "./cache.js";
|
|
23
|
+
import { cacheConversation, fetchConversation, getCachedConversation, inferKindFromId, } from "./conversation-cache.js";
|
|
24
|
+
import { parseSlackUrl } from "./url.js";
|
|
25
|
+
import { displayNameForId, resolveUser } from "./user.js";
|
|
26
|
+
const CACHE_FILE = "channels.json";
|
|
27
|
+
/** Pattern matching Slack channel IDs (C, D, or G prefix). */
|
|
28
|
+
const CHANNEL_ID_PATTERN = /^[CDG][A-Z0-9]{8,}$/;
|
|
29
|
+
/** Pattern matching Slack user IDs (U or W prefix). */
|
|
30
|
+
const USER_ID_PATTERN = /^[UW][A-Z0-9]{8,}$/;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a conversation identifier to a Conversation.
|
|
33
|
+
*
|
|
34
|
+
* Accepts:
|
|
35
|
+
* - Channel ID (C..., D..., G...) → fetched via cache or conversations.info
|
|
36
|
+
* - User ID (U..., W...) → opens/finds the DM conversation via conversations.open
|
|
37
|
+
* - Comma-separated user IDs or @handles → opens/finds a group DM
|
|
38
|
+
* - @handle (e.g. "@joel.gerber") → resolved to user ID via search, then DM
|
|
39
|
+
* - Channel name (with or without #) → resolved via file cache, then search
|
|
40
|
+
* - Slack URL → parsed for the channel ID
|
|
41
|
+
*/
|
|
42
|
+
export async function resolveConversation(client, input) {
|
|
43
|
+
// Comma-separated values: open a group DM with multiple users.
|
|
44
|
+
if (input.includes(",")) {
|
|
45
|
+
return openGroupDmConversation(client, input);
|
|
46
|
+
}
|
|
47
|
+
// Channel ID: look up metadata.
|
|
48
|
+
if (CHANNEL_ID_PATTERN.test(input)) {
|
|
49
|
+
return resolveById(client, input);
|
|
50
|
+
}
|
|
51
|
+
// User ID: open a DM conversation with that user.
|
|
52
|
+
if (USER_ID_PATTERN.test(input)) {
|
|
53
|
+
return openDmConversation(client, input);
|
|
54
|
+
}
|
|
55
|
+
// Slack URL: extract channel ID directly.
|
|
56
|
+
const parsed = parseSlackUrl(input);
|
|
57
|
+
if (parsed)
|
|
58
|
+
return resolveById(client, parsed.channel);
|
|
59
|
+
// URL that contains /archives/CHANNELID/ but didn't match the full pattern.
|
|
60
|
+
const archiveMatch = input.match(/archives\/([CDG][A-Z0-9]+)/);
|
|
61
|
+
if (archiveMatch)
|
|
62
|
+
return resolveById(client, archiveMatch[1]);
|
|
63
|
+
// User handle: @joel.gerber → resolve to user ID, then DM.
|
|
64
|
+
if (input.startsWith("@")) {
|
|
65
|
+
const userId = await resolveUser(client, input.slice(1));
|
|
66
|
+
return openDmConversation(client, userId);
|
|
67
|
+
}
|
|
68
|
+
// Channel name: strip leading #.
|
|
69
|
+
const name = input.startsWith("#") ? input.slice(1) : input;
|
|
70
|
+
// Recheck after stripping: #U098TB6UXGA → U098TB6UXGA is a user ID.
|
|
71
|
+
if (USER_ID_PATTERN.test(name)) {
|
|
72
|
+
return openDmConversation(client, name);
|
|
73
|
+
}
|
|
74
|
+
// Check file cache for name → ID mapping.
|
|
75
|
+
const cachedId = lookupId(CACHE_FILE, name);
|
|
76
|
+
if (cachedId)
|
|
77
|
+
return resolveById(client, cachedId);
|
|
78
|
+
// Resolve via search. Enterprise grids block conversations.list,
|
|
79
|
+
// but search.messages with in:#channel works across the grid.
|
|
80
|
+
const response = await client.call("search.messages", {
|
|
81
|
+
query: `in:#${name} *`,
|
|
82
|
+
count: 1,
|
|
83
|
+
});
|
|
84
|
+
const match = response.messages?.matches?.[0];
|
|
85
|
+
if (match?.channel?.id) {
|
|
86
|
+
cacheChannelName(match.channel.name, match.channel.id);
|
|
87
|
+
const conversation = {
|
|
88
|
+
id: match.channel.id,
|
|
89
|
+
name: match.channel.name,
|
|
90
|
+
kind: "channel",
|
|
91
|
+
displayName: `#${match.channel.name}`,
|
|
92
|
+
};
|
|
93
|
+
cacheConversation(conversation);
|
|
94
|
+
return conversation;
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Could not resolve channel "${input}". ` +
|
|
97
|
+
"Use a channel ID (e.g. C0ACMKCS6UW) or verify the channel name.");
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Record a channel name → ID mapping.
|
|
101
|
+
* Called opportunistically when channel data appears in API responses.
|
|
102
|
+
*/
|
|
103
|
+
export function cacheChannelName(name, id) {
|
|
104
|
+
if (name && id) {
|
|
105
|
+
cacheMapping(CACHE_FILE, name, id);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** List all cached channel mappings. */
|
|
109
|
+
export function listCachedChannels() {
|
|
110
|
+
return listCached(CACHE_FILE);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve a channel ID to a Conversation.
|
|
114
|
+
*
|
|
115
|
+
* Uses the shared conversation cache for the fast path,
|
|
116
|
+
* falling back to conversations.info on cache miss.
|
|
117
|
+
*/
|
|
118
|
+
async function resolveById(client, id) {
|
|
119
|
+
const cached = getCachedConversation(id);
|
|
120
|
+
if (cached)
|
|
121
|
+
return cached;
|
|
122
|
+
// Try conversations.info for full metadata.
|
|
123
|
+
try {
|
|
124
|
+
return await fetchConversation(client, id);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// If conversations.info fails (permissions, etc.), fall back to
|
|
128
|
+
// best-effort inference from the ID prefix.
|
|
129
|
+
const conversation = {
|
|
130
|
+
id,
|
|
131
|
+
kind: inferKindFromId(id),
|
|
132
|
+
};
|
|
133
|
+
cacheConversation(conversation);
|
|
134
|
+
return conversation;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Open or find the DM conversation for a user ID.
|
|
139
|
+
*
|
|
140
|
+
* Uses conversations.open which returns the existing DM
|
|
141
|
+
* if one exists, or creates it if not.
|
|
142
|
+
*/
|
|
143
|
+
async function openDmConversation(client, userId) {
|
|
144
|
+
const response = await client.call("conversations.open", { users: userId });
|
|
145
|
+
const channelId = response.channel?.id;
|
|
146
|
+
if (!channelId) {
|
|
147
|
+
throw new Error(`Could not open DM conversation for user "${userId}". ` +
|
|
148
|
+
"Verify the user ID is correct.");
|
|
149
|
+
}
|
|
150
|
+
const displayName = await dmDisplayName(client, userId);
|
|
151
|
+
const conversation = {
|
|
152
|
+
id: channelId,
|
|
153
|
+
kind: "dm",
|
|
154
|
+
dmUserId: userId,
|
|
155
|
+
displayName,
|
|
156
|
+
};
|
|
157
|
+
cacheConversation(conversation);
|
|
158
|
+
return conversation;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Open or find a group DM with multiple users.
|
|
162
|
+
*
|
|
163
|
+
* Accepts a comma-separated string of user IDs and/or @handles.
|
|
164
|
+
* Each segment is resolved to a user ID, then conversations.open
|
|
165
|
+
* is called with all IDs to create or find the group DM.
|
|
166
|
+
*/
|
|
167
|
+
async function openGroupDmConversation(client, input) {
|
|
168
|
+
const segments = input
|
|
169
|
+
.split(",")
|
|
170
|
+
.map((s) => s.trim())
|
|
171
|
+
.filter(Boolean);
|
|
172
|
+
if (segments.length < 2) {
|
|
173
|
+
throw new Error("Group DM requires at least two user IDs or handles, " +
|
|
174
|
+
"separated by commas.");
|
|
175
|
+
}
|
|
176
|
+
const userIds = [];
|
|
177
|
+
for (const segment of segments) {
|
|
178
|
+
const bare = segment.startsWith("@") ? segment.slice(1) : segment;
|
|
179
|
+
if (USER_ID_PATTERN.test(bare)) {
|
|
180
|
+
userIds.push(bare);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
userIds.push(await resolveUser(client, bare));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const response = await client.call("conversations.open", { users: userIds.join(",") });
|
|
187
|
+
const ch = response.channel;
|
|
188
|
+
if (!ch?.id) {
|
|
189
|
+
throw new Error("Could not open group DM. Verify the user IDs or handles are correct.");
|
|
190
|
+
}
|
|
191
|
+
const conversation = {
|
|
192
|
+
id: ch.id,
|
|
193
|
+
kind: "group_dm",
|
|
194
|
+
displayName: formatGroupDmDisplayName(userIds),
|
|
195
|
+
};
|
|
196
|
+
cacheConversation(conversation);
|
|
197
|
+
return conversation;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Build a display name for a group DM from resolved user IDs.
|
|
201
|
+
*
|
|
202
|
+
* Uses cached @handles when available, falls back to raw IDs.
|
|
203
|
+
*/
|
|
204
|
+
function formatGroupDmDisplayName(userIds) {
|
|
205
|
+
return userIds.map((id) => `@${displayNameForId(id)}`).join(", ");
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Resolve a display name for a DM user.
|
|
209
|
+
*
|
|
210
|
+
* Checks the file cache first. On miss, calls users.info
|
|
211
|
+
* to fetch the handle (which also populates the cache for
|
|
212
|
+
* future lookups). Returns `@handle` or undefined if
|
|
213
|
+
* resolution fails entirely.
|
|
214
|
+
*/
|
|
215
|
+
async function dmDisplayName(client, userId) {
|
|
216
|
+
const cached = displayNameForId(userId);
|
|
217
|
+
if (cached !== userId)
|
|
218
|
+
return `@${cached}`;
|
|
219
|
+
try {
|
|
220
|
+
const user = await getUserInfo(client, userId);
|
|
221
|
+
const handle = user.name;
|
|
222
|
+
if (handle)
|
|
223
|
+
return `@${handle}`;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// users.info failed; fall through to undefined.
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack entity resolvers: channel, user, conversation and
|
|
3
|
+
* target resolution.
|
|
4
|
+
*/
|
|
5
|
+
export { resolveConversation } from "./conversation.js";
|
|
6
|
+
export { resolveTarget } from "./target.js";
|
|
7
|
+
export { type ParsedSlackUrl, parseSlackUrl } from "./url.js";
|
|
8
|
+
export { displayNameForId, resolveUser } from "./user.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack entity resolvers: channel, user, conversation and
|
|
3
|
+
* target resolution.
|
|
4
|
+
*/
|
|
5
|
+
export { resolveConversation } from "./conversation.js";
|
|
6
|
+
export { resolveTarget } from "./target.js";
|
|
7
|
+
export { parseSlackUrl } from "./url.js";
|
|
8
|
+
export { displayNameForId, resolveUser } from "./user.js";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a message target to a Conversation and timestamp.
|
|
3
|
+
*
|
|
4
|
+
* Many actions accept either a Slack permalink URL or a
|
|
5
|
+
* channel + timestamp pair. This module centralises that
|
|
6
|
+
* resolution so handlers don't repeat it.
|
|
7
|
+
*/
|
|
8
|
+
import type { SlackClient } from "../api/client.js";
|
|
9
|
+
import type { MessageTarget } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a message target from tool parameters.
|
|
12
|
+
*
|
|
13
|
+
* Accepts:
|
|
14
|
+
* - target (Slack URL) → parsed, then conversation resolved
|
|
15
|
+
* - channel + ts → conversation resolved
|
|
16
|
+
*
|
|
17
|
+
* Throws if neither provides enough information.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveTarget(client: SlackClient, target: string | undefined, channel: string | undefined, ts: string | undefined): Promise<MessageTarget>;
|