@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,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack Web API HTTP client.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around fetch that handles authentication,
|
|
5
|
+
* rate limiting with exponential backoff, and response
|
|
6
|
+
* validation. No external dependencies.
|
|
7
|
+
*/
|
|
8
|
+
const SLACK_API_BASE = "https://slack.com/api";
|
|
9
|
+
/**
|
|
10
|
+
* Maximum retries for non-rate-limit errors (network
|
|
11
|
+
* failures, unexpected HTTP status codes).
|
|
12
|
+
*/
|
|
13
|
+
const MAX_ERROR_RETRIES = 3;
|
|
14
|
+
/**
|
|
15
|
+
* Maximum rate limit retries before giving up. Rate limits
|
|
16
|
+
* are transient by definition (the API tells us to wait and
|
|
17
|
+
* retry), so this budget is much higher than error retries.
|
|
18
|
+
*/
|
|
19
|
+
const MAX_RATE_LIMIT_RETRIES = 10;
|
|
20
|
+
/** Initial backoff delay in milliseconds. */
|
|
21
|
+
const INITIAL_BACKOFF_MS = 1000;
|
|
22
|
+
/**
|
|
23
|
+
* Thrown when a Slack API call exhausts its rate limit retry
|
|
24
|
+
* budget. Callers can catch this specifically to implement
|
|
25
|
+
* backpressure (e.g. reducing concurrency) before retrying.
|
|
26
|
+
*/
|
|
27
|
+
export class RateLimitError extends Error {
|
|
28
|
+
method;
|
|
29
|
+
hitCount;
|
|
30
|
+
constructor(
|
|
31
|
+
/** The Slack API method that was rate limited. */
|
|
32
|
+
method,
|
|
33
|
+
/** How many rate limit responses were received. */
|
|
34
|
+
hitCount) {
|
|
35
|
+
super(`Slack API rate limited ${hitCount} times for ${method}`);
|
|
36
|
+
this.method = method;
|
|
37
|
+
this.hitCount = hitCount;
|
|
38
|
+
this.name = "RateLimitError";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Thrown when Slack returns `{ ok: false, error: "..." }`.
|
|
43
|
+
*
|
|
44
|
+
* Preserves the API error code so callers can distinguish
|
|
45
|
+
* permanent failures (channel_not_found, not_in_channel)
|
|
46
|
+
* from transient ones without parsing error message strings.
|
|
47
|
+
*/
|
|
48
|
+
export class SlackApiError extends Error {
|
|
49
|
+
errorCode;
|
|
50
|
+
constructor(
|
|
51
|
+
/** The Slack API error code (e.g. "not_in_channel"). */
|
|
52
|
+
errorCode, message) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.errorCode = errorCode;
|
|
55
|
+
this.name = "SlackApiError";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Authenticated Slack API client.
|
|
60
|
+
*
|
|
61
|
+
* Supports two auth modes:
|
|
62
|
+
* - OAuth user tokens (xoxp-): token sent in body, no cookie
|
|
63
|
+
* - Browser session tokens (xoxc-): token in body + cookie in header
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* The bytes of a buffer, in a form fetch will take.
|
|
67
|
+
*
|
|
68
|
+
* A Node Buffer is not one of the byte-array types the fetch body
|
|
69
|
+
* accepts, and a plain view over its memory is not either: a typed
|
|
70
|
+
* array now carries the kind of buffer it sits on, and a Buffer's is
|
|
71
|
+
* only known to be array-buffer-like. The common case, a buffer
|
|
72
|
+
* backed by an ordinary ArrayBuffer, is passed without copying; the
|
|
73
|
+
* shared-memory case, which an uploaded file is never on, copies
|
|
74
|
+
* rather than refuses.
|
|
75
|
+
*/
|
|
76
|
+
function uploadable(body) {
|
|
77
|
+
const backing = body.buffer;
|
|
78
|
+
return backing instanceof ArrayBuffer
|
|
79
|
+
? new Uint8Array(backing, body.byteOffset, body.byteLength)
|
|
80
|
+
: new Uint8Array(body);
|
|
81
|
+
}
|
|
82
|
+
export class SlackClient {
|
|
83
|
+
token;
|
|
84
|
+
cookie;
|
|
85
|
+
constructor(token, cookie) {
|
|
86
|
+
this.token = token;
|
|
87
|
+
this.cookie = cookie;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Call a Slack Web API method.
|
|
91
|
+
*
|
|
92
|
+
* Sends a POST with form-encoded body containing the token
|
|
93
|
+
* and any additional parameters. For browser session tokens,
|
|
94
|
+
* includes the session cookie in the request header. Retries
|
|
95
|
+
* on rate limits with exponential backoff.
|
|
96
|
+
*/
|
|
97
|
+
async call(method, params = {}, signal) {
|
|
98
|
+
const body = new URLSearchParams();
|
|
99
|
+
body.set("token", this.token);
|
|
100
|
+
for (const [key, value] of Object.entries(params)) {
|
|
101
|
+
if (value !== undefined) {
|
|
102
|
+
body.set(key, String(value));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const headers = {
|
|
106
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
107
|
+
};
|
|
108
|
+
if (this.cookie) {
|
|
109
|
+
headers.Cookie = `d=${this.cookie}`;
|
|
110
|
+
}
|
|
111
|
+
let lastError = null;
|
|
112
|
+
let rateLimitHits = 0;
|
|
113
|
+
for (let attempt = 0; attempt < MAX_ERROR_RETRIES; attempt++) {
|
|
114
|
+
if (signal?.aborted) {
|
|
115
|
+
throw new Error("Request aborted");
|
|
116
|
+
}
|
|
117
|
+
const response = await fetch(`${SLACK_API_BASE}/${method}`, {
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers,
|
|
120
|
+
body: body.toString(),
|
|
121
|
+
signal,
|
|
122
|
+
});
|
|
123
|
+
if (response.status === 429) {
|
|
124
|
+
if (++rateLimitHits > MAX_RATE_LIMIT_RETRIES) {
|
|
125
|
+
throw new RateLimitError(method, rateLimitHits);
|
|
126
|
+
}
|
|
127
|
+
const retryAfter = Number(response.headers.get("Retry-After") || "1");
|
|
128
|
+
await sleep(retryAfter * 1000);
|
|
129
|
+
// Don't count rate limits against the error retry
|
|
130
|
+
// budget, since the API is explicitly telling us to wait.
|
|
131
|
+
attempt--;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
throw new Error(`Slack API HTTP ${response.status}: ${response.statusText}`);
|
|
136
|
+
}
|
|
137
|
+
const data = (await response.json());
|
|
138
|
+
if (!data.ok) {
|
|
139
|
+
if (data.error === "ratelimited") {
|
|
140
|
+
if (++rateLimitHits > MAX_RATE_LIMIT_RETRIES) {
|
|
141
|
+
throw new RateLimitError(method, rateLimitHits);
|
|
142
|
+
}
|
|
143
|
+
const backoff = INITIAL_BACKOFF_MS * 2 ** rateLimitHits;
|
|
144
|
+
await sleep(backoff);
|
|
145
|
+
attempt--;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
lastError = new SlackApiError(data.error ?? "unknown", describeError(data.error));
|
|
149
|
+
throw lastError;
|
|
150
|
+
}
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
throw lastError ?? new Error("Slack API call failed after retries");
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Paginate through a cursor-based Slack API method.
|
|
157
|
+
*
|
|
158
|
+
* Calls the method repeatedly, following next_cursor until
|
|
159
|
+
* all pages are collected or the limit is reached.
|
|
160
|
+
*/
|
|
161
|
+
async paginate(method, params, extract, limit, signal) {
|
|
162
|
+
const results = [];
|
|
163
|
+
let cursor;
|
|
164
|
+
do {
|
|
165
|
+
const response = await this.call(method, { ...params, cursor }, signal);
|
|
166
|
+
const items = extract(response);
|
|
167
|
+
results.push(...items);
|
|
168
|
+
cursor = response.response_metadata?.next_cursor || undefined;
|
|
169
|
+
if (limit && results.length >= limit) {
|
|
170
|
+
return results.slice(0, limit);
|
|
171
|
+
}
|
|
172
|
+
} while (cursor);
|
|
173
|
+
return results;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Download a file from an authenticated Slack URL.
|
|
177
|
+
*
|
|
178
|
+
* Used to fetch files from `url_private` URLs on Slack
|
|
179
|
+
* messages. Authenticates with the Bearer token (or session
|
|
180
|
+
* cookie for browser tokens). Returns the raw bytes and
|
|
181
|
+
* the content type reported by the server.
|
|
182
|
+
*
|
|
183
|
+
* When `maxBytes` is set, the Content-Length header is
|
|
184
|
+
* checked before reading the body to avoid buffering
|
|
185
|
+
* oversized files.
|
|
186
|
+
*/
|
|
187
|
+
async download(url, opts) {
|
|
188
|
+
const headers = {
|
|
189
|
+
Authorization: `Bearer ${this.token}`,
|
|
190
|
+
};
|
|
191
|
+
if (this.cookie) {
|
|
192
|
+
headers.Cookie = `d=${this.cookie}`;
|
|
193
|
+
}
|
|
194
|
+
const response = await fetch(url, {
|
|
195
|
+
method: "GET",
|
|
196
|
+
headers,
|
|
197
|
+
signal: opts?.signal,
|
|
198
|
+
});
|
|
199
|
+
if (!response.ok) {
|
|
200
|
+
throw new Error(`File download failed: HTTP ${response.status} ${response.statusText}`);
|
|
201
|
+
}
|
|
202
|
+
// Reject oversized files before reading the body when
|
|
203
|
+
// the server reports Content-Length.
|
|
204
|
+
if (opts?.maxBytes) {
|
|
205
|
+
const contentLength = response.headers.get("content-length");
|
|
206
|
+
if (contentLength !== null && Number(contentLength) > opts.maxBytes) {
|
|
207
|
+
// Consume the body to release the connection.
|
|
208
|
+
await response.body?.cancel();
|
|
209
|
+
throw new Error(`File too large: ${contentLength} bytes exceeds ${opts.maxBytes} byte limit`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
213
|
+
// Belt-and-suspenders: reject if the actual body exceeds
|
|
214
|
+
// the limit (covers missing or dishonest Content-Length).
|
|
215
|
+
if (opts?.maxBytes && arrayBuffer.byteLength > opts.maxBytes) {
|
|
216
|
+
throw new Error(`File too large: ${arrayBuffer.byteLength} bytes exceeds ${opts.maxBytes} byte limit`);
|
|
217
|
+
}
|
|
218
|
+
const contentType = response.headers.get("content-type") ?? "application/octet-stream";
|
|
219
|
+
return { buffer: Buffer.from(arrayBuffer), contentType };
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Upload raw bytes to an external upload URL.
|
|
223
|
+
*
|
|
224
|
+
* Used by the file upload flow after obtaining a URL from
|
|
225
|
+
* files.getUploadURLExternal. Includes the session cookie
|
|
226
|
+
* when using browser tokens so auth stays encapsulated.
|
|
227
|
+
*/
|
|
228
|
+
async upload(url, body, signal) {
|
|
229
|
+
// See `uploadable`: a Node Buffer is not one of the byte-array
|
|
230
|
+
// types fetch accepts.
|
|
231
|
+
const headers = {
|
|
232
|
+
"Content-Type": "application/octet-stream",
|
|
233
|
+
};
|
|
234
|
+
if (this.cookie) {
|
|
235
|
+
headers.Cookie = `d=${this.cookie}`;
|
|
236
|
+
}
|
|
237
|
+
const response = await fetch(url, {
|
|
238
|
+
method: "POST",
|
|
239
|
+
headers,
|
|
240
|
+
body: uploadable(body),
|
|
241
|
+
signal,
|
|
242
|
+
});
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
throw new Error(`File upload failed: HTTP ${response.status} ${response.statusText}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/** Describe a Slack API error with actionable guidance. */
|
|
249
|
+
function describeError(error) {
|
|
250
|
+
if (!error)
|
|
251
|
+
return "Unknown Slack API error";
|
|
252
|
+
const hints = {
|
|
253
|
+
invalid_auth: "Invalid credentials. Your token may have been revoked.\n" +
|
|
254
|
+
"Run /slack-auth to re-authenticate.",
|
|
255
|
+
token_revoked: "Token has been revoked.\n" + "Run /slack-auth to get a new token.",
|
|
256
|
+
not_authed: "No authentication provided.\n" + "Run /slack-auth to authenticate.",
|
|
257
|
+
account_inactive: "This Slack account has been deactivated or the workspace was deleted.",
|
|
258
|
+
missing_scope: "Token lacks the required API scope for this operation.\n" +
|
|
259
|
+
"Run /slack-auth to re-authenticate with the correct scopes.",
|
|
260
|
+
channel_not_found: "Channel not found. Check the channel name or ID.",
|
|
261
|
+
user_not_found: "User not found. Check the username or ID.",
|
|
262
|
+
thread_not_found: "The timestamp doesn't match a thread parent. " +
|
|
263
|
+
"Use the ts values from list_messages or search_messages results.",
|
|
264
|
+
};
|
|
265
|
+
const hint = hints[error];
|
|
266
|
+
return hint
|
|
267
|
+
? `Slack API error: ${error}\n${hint}`
|
|
268
|
+
: `Slack API error: ${error}`;
|
|
269
|
+
}
|
|
270
|
+
function sleep(ms) {
|
|
271
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
272
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack file upload API using the V2 external upload flow.
|
|
3
|
+
*
|
|
4
|
+
* Implements the 3-step upload process:
|
|
5
|
+
* 1. Get an upload URL via files.getUploadURLExternal
|
|
6
|
+
* 2. POST file bytes to that URL
|
|
7
|
+
* 3. Finalize with files.completeUploadExternal
|
|
8
|
+
*/
|
|
9
|
+
import type { SlackClient } from "./client.js";
|
|
10
|
+
/** Result from completing a file upload. */
|
|
11
|
+
export interface UploadResult {
|
|
12
|
+
ok: boolean;
|
|
13
|
+
files: Array<{
|
|
14
|
+
id: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Timestamp of the message created when sharing to a channel.
|
|
19
|
+
* Only present when channelId was provided.
|
|
20
|
+
*/
|
|
21
|
+
ts?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Options for sharing uploaded files. */
|
|
24
|
+
export interface UploadOptions {
|
|
25
|
+
/** Channel ID to share the files in. */
|
|
26
|
+
channelId?: string;
|
|
27
|
+
/** Thread timestamp to upload as a reply. */
|
|
28
|
+
threadTs?: string;
|
|
29
|
+
/** Message text introducing the files. */
|
|
30
|
+
initialComment?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Upload one or more local files to Slack.
|
|
34
|
+
*
|
|
35
|
+
* Each file goes through the external upload flow
|
|
36
|
+
* individually, then all are finalized in a single
|
|
37
|
+
* completeUploadExternal call to share them together.
|
|
38
|
+
*/
|
|
39
|
+
export declare function uploadFiles(client: SlackClient, filePaths: string[], opts?: UploadOptions, signal?: AbortSignal): Promise<UploadResult>;
|
|
40
|
+
/** A downloaded file ready to be returned as model content. */
|
|
41
|
+
export type DownloadedFile = {
|
|
42
|
+
kind: "image";
|
|
43
|
+
data: string;
|
|
44
|
+
mimeType: string;
|
|
45
|
+
name: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "text";
|
|
48
|
+
text: string;
|
|
49
|
+
name: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Check whether a MIME type is a supported image format.
|
|
53
|
+
*
|
|
54
|
+
* Used to decide whether a file attachment should be
|
|
55
|
+
* downloaded and sent to the model as image content.
|
|
56
|
+
*/
|
|
57
|
+
export declare function isImageMimeType(mimeType: string | undefined): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Check whether a MIME type is readable as text.
|
|
60
|
+
*
|
|
61
|
+
* Matches all `text/*` types and a curated set of
|
|
62
|
+
* `application/*` types that contain human-readable content.
|
|
63
|
+
*/
|
|
64
|
+
export declare function isTextMimeType(mimeType: string | undefined): boolean;
|
|
65
|
+
/** Options for downloading files from Slack messages. */
|
|
66
|
+
export interface FileDownloadOptions {
|
|
67
|
+
signal?: AbortSignal;
|
|
68
|
+
/** Maximum number of files to download (default: 10). */
|
|
69
|
+
maxFiles?: number;
|
|
70
|
+
/** Maximum size per image file in bytes (default: 5 MB). */
|
|
71
|
+
maxImageBytes?: number;
|
|
72
|
+
/** Maximum size per text file in bytes (default: 128 KB). */
|
|
73
|
+
maxTextBytes?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Download displayable files from Slack messages.
|
|
77
|
+
*
|
|
78
|
+
* Filters files to supported image and text types, downloads
|
|
79
|
+
* them via the authenticated client, and returns content
|
|
80
|
+
* ready for model consumption. Images are base64-encoded;
|
|
81
|
+
* text files are decoded as UTF-8. Skips files that are too
|
|
82
|
+
* large or fail to download.
|
|
83
|
+
*/
|
|
84
|
+
export declare function downloadFiles(client: SlackClient, files: Array<{
|
|
85
|
+
name: string;
|
|
86
|
+
mimetype?: string;
|
|
87
|
+
url?: string;
|
|
88
|
+
}>, opts?: FileDownloadOptions): Promise<DownloadedFile[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Get the byte size of a local file.
|
|
91
|
+
*
|
|
92
|
+
* Used by callers to display file sizes in confirmation
|
|
93
|
+
* gates before uploading.
|
|
94
|
+
*/
|
|
95
|
+
export declare function getFileSize(filePath: string): Promise<number>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack file upload API using the V2 external upload flow.
|
|
3
|
+
*
|
|
4
|
+
* Implements the 3-step upload process:
|
|
5
|
+
* 1. Get an upload URL via files.getUploadURLExternal
|
|
6
|
+
* 2. POST file bytes to that URL
|
|
7
|
+
* 3. Finalize with files.completeUploadExternal
|
|
8
|
+
*/
|
|
9
|
+
import { readFile, stat } from "node:fs/promises";
|
|
10
|
+
import { basename } from "node:path";
|
|
11
|
+
/**
|
|
12
|
+
* Upload one or more local files to Slack.
|
|
13
|
+
*
|
|
14
|
+
* Each file goes through the external upload flow
|
|
15
|
+
* individually, then all are finalized in a single
|
|
16
|
+
* completeUploadExternal call to share them together.
|
|
17
|
+
*/
|
|
18
|
+
export async function uploadFiles(client, filePaths, opts = {}, signal) {
|
|
19
|
+
if (filePaths.length === 0) {
|
|
20
|
+
throw new Error("No file paths provided.");
|
|
21
|
+
}
|
|
22
|
+
const fileIds = [];
|
|
23
|
+
for (const filePath of filePaths) {
|
|
24
|
+
const fileId = await uploadSingleFile(client, filePath, signal);
|
|
25
|
+
fileIds.push({ id: fileId });
|
|
26
|
+
}
|
|
27
|
+
return completeUpload(client, fileIds, opts, signal);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Upload a single file and return its Slack file ID.
|
|
31
|
+
*
|
|
32
|
+
* Gets an upload URL, reads the file from disk, then
|
|
33
|
+
* POSTs the bytes to Slack's upload endpoint.
|
|
34
|
+
*/
|
|
35
|
+
async function uploadSingleFile(client, filePath, signal) {
|
|
36
|
+
const fileBytes = await readFile(filePath);
|
|
37
|
+
const filename = basename(filePath);
|
|
38
|
+
const urlResponse = await client.call("files.getUploadURLExternal", { filename, length: fileBytes.length }, signal);
|
|
39
|
+
await client.upload(urlResponse.upload_url, fileBytes, signal);
|
|
40
|
+
return urlResponse.file_id;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Finalize uploaded files and optionally share them.
|
|
44
|
+
*
|
|
45
|
+
* Calls files.completeUploadExternal with the collected
|
|
46
|
+
* file IDs and any sharing parameters (channel, thread,
|
|
47
|
+
* initial comment).
|
|
48
|
+
*/
|
|
49
|
+
async function completeUpload(client, fileIds, opts, signal) {
|
|
50
|
+
const params = {
|
|
51
|
+
files: JSON.stringify(fileIds),
|
|
52
|
+
channel_id: opts.channelId,
|
|
53
|
+
thread_ts: opts.threadTs,
|
|
54
|
+
initial_comment: opts.initialComment,
|
|
55
|
+
};
|
|
56
|
+
const response = await client.call("files.completeUploadExternal", params, signal);
|
|
57
|
+
const result = {
|
|
58
|
+
ok: true,
|
|
59
|
+
files: response.files ?? [],
|
|
60
|
+
};
|
|
61
|
+
// completeUploadExternal doesn't return the message ts.
|
|
62
|
+
// When sharing to a channel, recover it from the file's
|
|
63
|
+
// share metadata via files.info. This is deterministic
|
|
64
|
+
// (keyed on the file we just uploaded) so there's no
|
|
65
|
+
// race with other messages landing in the channel.
|
|
66
|
+
if (opts.channelId && result.files.length > 0) {
|
|
67
|
+
result.ts = await fetchShareTs(client, result.files[0].id, opts.channelId, signal);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
/** Maximum attempts when polling for share metadata. */
|
|
72
|
+
const SHARE_POLL_MAX_ATTEMPTS = 5;
|
|
73
|
+
/** Initial delay between share metadata polls (milliseconds). */
|
|
74
|
+
const SHARE_POLL_INITIAL_DELAY_MS = 500;
|
|
75
|
+
/**
|
|
76
|
+
* Fetch the message timestamp from a file's share metadata.
|
|
77
|
+
*
|
|
78
|
+
* Uses files.info to look up the share entry for the given
|
|
79
|
+
* channel. This is deterministic: we're reading metadata for
|
|
80
|
+
* the exact file we just uploaded, not guessing based on
|
|
81
|
+
* channel history.
|
|
82
|
+
*
|
|
83
|
+
* Slack processes file shares asynchronously, so the share
|
|
84
|
+
* entry may not exist immediately after completeUploadExternal
|
|
85
|
+
* returns. We poll with exponential backoff until it appears
|
|
86
|
+
* or the attempt budget is exhausted.
|
|
87
|
+
*/
|
|
88
|
+
async function fetchShareTs(client, fileId, channelId, signal) {
|
|
89
|
+
for (let attempt = 0; attempt < SHARE_POLL_MAX_ATTEMPTS; attempt++) {
|
|
90
|
+
const response = await client.call("files.info", { file: fileId }, signal);
|
|
91
|
+
const shares = response.file?.shares;
|
|
92
|
+
const entries = shares?.public?.[channelId] ?? shares?.private?.[channelId];
|
|
93
|
+
if (entries?.[0]?.ts)
|
|
94
|
+
return entries[0].ts;
|
|
95
|
+
// Share metadata isn't ready yet. Wait before retrying.
|
|
96
|
+
const delay = SHARE_POLL_INITIAL_DELAY_MS * 2 ** attempt;
|
|
97
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/** MIME types recognised as images that the model can interpret. */
|
|
102
|
+
const IMAGE_MIME_TYPES = new Set([
|
|
103
|
+
"image/png",
|
|
104
|
+
"image/jpeg",
|
|
105
|
+
"image/gif",
|
|
106
|
+
"image/webp",
|
|
107
|
+
]);
|
|
108
|
+
/**
|
|
109
|
+
* Application MIME types that contain readable text.
|
|
110
|
+
*
|
|
111
|
+
* These aren't under `text/` but the model can interpret
|
|
112
|
+
* their content when decoded as UTF-8.
|
|
113
|
+
*/
|
|
114
|
+
const TEXT_APPLICATION_TYPES = new Set([
|
|
115
|
+
"application/json",
|
|
116
|
+
"application/xml",
|
|
117
|
+
"application/javascript",
|
|
118
|
+
"application/typescript",
|
|
119
|
+
"application/x-yaml",
|
|
120
|
+
"application/x-sh",
|
|
121
|
+
"application/sql",
|
|
122
|
+
"application/graphql",
|
|
123
|
+
"application/toml",
|
|
124
|
+
]);
|
|
125
|
+
/** Default maximum size for image files (5 MB). */
|
|
126
|
+
const DEFAULT_MAX_IMAGE_BYTES = 5 * 1024 * 1024;
|
|
127
|
+
/** Default maximum size for text files (128 KB). */
|
|
128
|
+
const DEFAULT_MAX_TEXT_BYTES = 128 * 1024;
|
|
129
|
+
/** Default maximum number of files to download per request. */
|
|
130
|
+
const DEFAULT_MAX_FILES = 10;
|
|
131
|
+
/**
|
|
132
|
+
* Check whether a MIME type is a supported image format.
|
|
133
|
+
*
|
|
134
|
+
* Used to decide whether a file attachment should be
|
|
135
|
+
* downloaded and sent to the model as image content.
|
|
136
|
+
*/
|
|
137
|
+
export function isImageMimeType(mimeType) {
|
|
138
|
+
if (!mimeType)
|
|
139
|
+
return false;
|
|
140
|
+
const base = baseMimeType(mimeType);
|
|
141
|
+
return IMAGE_MIME_TYPES.has(base);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check whether a MIME type is readable as text.
|
|
145
|
+
*
|
|
146
|
+
* Matches all `text/*` types and a curated set of
|
|
147
|
+
* `application/*` types that contain human-readable content.
|
|
148
|
+
*/
|
|
149
|
+
export function isTextMimeType(mimeType) {
|
|
150
|
+
if (!mimeType)
|
|
151
|
+
return false;
|
|
152
|
+
const base = baseMimeType(mimeType);
|
|
153
|
+
return base.startsWith("text/") || TEXT_APPLICATION_TYPES.has(base);
|
|
154
|
+
}
|
|
155
|
+
/** Strip parameters from a MIME type (e.g. "text/plain; charset=utf-8" → "text/plain"). */
|
|
156
|
+
function baseMimeType(mimeType) {
|
|
157
|
+
return mimeType.split(";")[0].trim().toLowerCase();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Download displayable files from Slack messages.
|
|
161
|
+
*
|
|
162
|
+
* Filters files to supported image and text types, downloads
|
|
163
|
+
* them via the authenticated client, and returns content
|
|
164
|
+
* ready for model consumption. Images are base64-encoded;
|
|
165
|
+
* text files are decoded as UTF-8. Skips files that are too
|
|
166
|
+
* large or fail to download.
|
|
167
|
+
*/
|
|
168
|
+
export async function downloadFiles(client, files, opts) {
|
|
169
|
+
const maxFiles = opts?.maxFiles ?? DEFAULT_MAX_FILES;
|
|
170
|
+
const maxImageBytes = opts?.maxImageBytes ?? DEFAULT_MAX_IMAGE_BYTES;
|
|
171
|
+
const maxTextBytes = opts?.maxTextBytes ?? DEFAULT_MAX_TEXT_BYTES;
|
|
172
|
+
const results = [];
|
|
173
|
+
for (const file of files) {
|
|
174
|
+
if (results.length >= maxFiles)
|
|
175
|
+
break;
|
|
176
|
+
if (!file.url)
|
|
177
|
+
continue;
|
|
178
|
+
const isImage = isImageMimeType(file.mimetype);
|
|
179
|
+
const isText = isTextMimeType(file.mimetype);
|
|
180
|
+
if (!isImage && !isText)
|
|
181
|
+
continue;
|
|
182
|
+
const maxBytes = isImage ? maxImageBytes : maxTextBytes;
|
|
183
|
+
try {
|
|
184
|
+
const { buffer, contentType } = await client.download(file.url, {
|
|
185
|
+
signal: opts?.signal,
|
|
186
|
+
maxBytes,
|
|
187
|
+
});
|
|
188
|
+
if (isImage) {
|
|
189
|
+
const mimeType = isImageMimeType(contentType)
|
|
190
|
+
? baseMimeType(contentType)
|
|
191
|
+
: (file.mimetype ?? "image/png");
|
|
192
|
+
results.push({
|
|
193
|
+
kind: "image",
|
|
194
|
+
data: buffer.toString("base64"),
|
|
195
|
+
mimeType,
|
|
196
|
+
name: file.name,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
results.push({
|
|
201
|
+
kind: "text",
|
|
202
|
+
text: buffer.toString("utf-8"),
|
|
203
|
+
name: file.name,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Download failed; skip this file silently.
|
|
209
|
+
// The text renderer still shows the filename.
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return results;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get the byte size of a local file.
|
|
216
|
+
*
|
|
217
|
+
* Used by callers to display file sizes in confirmation
|
|
218
|
+
* gates before uploading.
|
|
219
|
+
*/
|
|
220
|
+
export async function getFileSize(filePath) {
|
|
221
|
+
const info = await stat(filePath);
|
|
222
|
+
return info.size;
|
|
223
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack API client and service functions.
|
|
3
|
+
*/
|
|
4
|
+
export { getChannelInfo } from "./channels.js";
|
|
5
|
+
export { RateLimitError, SlackApiError, SlackClient } from "./client.js";
|
|
6
|
+
export { type DownloadedFile, downloadFiles, type FileDownloadOptions, getFileSize, isImageMimeType, isTextMimeType, type UploadOptions, type UploadResult, uploadFiles, } from "./files.js";
|
|
7
|
+
export { editMessage, formatMentions, type GetMessageOptions, type GetThreadOptions, getMessage, getThread, type ListMessagesOptions, listMessages, replyToThread, type SendResult, sendMessage, } from "./messages.js";
|
|
8
|
+
export { addReaction, getReactions, listReactions, type MessageReactions, type ReactedMessage, removeReaction, } from "./reactions.js";
|
|
9
|
+
export { resolveMessages } from "./resolve-messages.js";
|
|
10
|
+
export { type FileSearchResult, type MessageSearchResult, type SearchFilesOptions, type SearchMessagesOptions, type SearchPageInfo, type SlackFileResult, searchFiles, searchMessages, } from "./search.js";
|
|
11
|
+
export { getUserInfo } from "./users.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack API client and service functions.
|
|
3
|
+
*/
|
|
4
|
+
export { getChannelInfo } from "./channels.js";
|
|
5
|
+
export { RateLimitError, SlackApiError, SlackClient } from "./client.js";
|
|
6
|
+
export { downloadFiles, getFileSize, isImageMimeType, isTextMimeType, uploadFiles, } from "./files.js";
|
|
7
|
+
export { editMessage, formatMentions, getMessage, getThread, listMessages, replyToThread, sendMessage, } from "./messages.js";
|
|
8
|
+
export { addReaction, getReactions, listReactions, removeReaction, } from "./reactions.js";
|
|
9
|
+
export { resolveMessages } from "./resolve-messages.js";
|
|
10
|
+
export { searchFiles, searchMessages, } from "./search.js";
|
|
11
|
+
export { getUserInfo } from "./users.js";
|