@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,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic Slack credential extraction via browser.
|
|
3
|
+
*
|
|
4
|
+
* Launches Chrome (non-headless, using the user's existing
|
|
5
|
+
* install), navigates to Slack, and polls localStorage and
|
|
6
|
+
* cookies for the xoxc- token and xoxd- cookie. Works with
|
|
7
|
+
* any Slack workspace; the user just needs to be logged in
|
|
8
|
+
* (or log in when the browser opens).
|
|
9
|
+
*
|
|
10
|
+
* Uses puppeteer-core (no bundled browser) for consistency
|
|
11
|
+
* with web-search-integration.
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from "node:fs";
|
|
14
|
+
import puppeteer from "puppeteer-core";
|
|
15
|
+
/**
|
|
16
|
+
* Default Slack URL to navigate to: the dedicated sign-in entry
|
|
17
|
+
* point, not the marketing homepage. app.slack.com used to be here
|
|
18
|
+
* instead, and it lands on a cookie-consent marketing page with no
|
|
19
|
+
* sign-in link visible without scrolling - a real run needed a
|
|
20
|
+
* person to find and click their own way to sign-in from there,
|
|
21
|
+
* which is what this URL skips.
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_SLACK_URL = "https://slack.com/signin";
|
|
24
|
+
/** Guidance printed once the browser opens, before the wait begins. */
|
|
25
|
+
const SIGN_IN_GUIDANCE = [
|
|
26
|
+
"Opening Slack sign-in. To finish:",
|
|
27
|
+
" 1. Sign in with your email (or SSO) as usual.",
|
|
28
|
+
" 2. If asked to pick a workspace, click into the one you want.",
|
|
29
|
+
' 3. If a screen offers "Open Slack" (desktop app) vs "use Slack',
|
|
30
|
+
' in your browser", click "use Slack in your browser" - this',
|
|
31
|
+
" tries that automatically, but don't wait on it if it's slow.",
|
|
32
|
+
"This can take a few minutes depending on your organization's sign-in flow.",
|
|
33
|
+
].join("\n");
|
|
34
|
+
/** How often to poll for credentials (milliseconds). */
|
|
35
|
+
const POLL_INTERVAL_MS = 1000;
|
|
36
|
+
/** Default timeout: 5 minutes to allow for SSO, 2FA, workspace selection. */
|
|
37
|
+
const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
|
|
38
|
+
/** Paths where Chrome might be installed. */
|
|
39
|
+
const CHROME_PATHS = [
|
|
40
|
+
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
41
|
+
"/usr/bin/google-chrome",
|
|
42
|
+
"/usr/bin/google-chrome-stable",
|
|
43
|
+
"/usr/bin/chromium",
|
|
44
|
+
"/usr/bin/chromium-browser",
|
|
45
|
+
];
|
|
46
|
+
/** Find the Chrome executable on disk. */
|
|
47
|
+
function findChrome() {
|
|
48
|
+
const envPath = process.env.CHROME_PATH;
|
|
49
|
+
if (envPath && fs.existsSync(envPath))
|
|
50
|
+
return envPath;
|
|
51
|
+
for (const p of CHROME_PATHS) {
|
|
52
|
+
try {
|
|
53
|
+
if (fs.existsSync(p))
|
|
54
|
+
return p;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Not at this path, try next.
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
throw new Error("Chrome not found. Install Google Chrome or set CHROME_PATH.");
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Launch Chrome, navigate to Slack, and extract credentials.
|
|
64
|
+
*
|
|
65
|
+
* Opens a visible browser window so the user can log in if
|
|
66
|
+
* needed. Polls localStorage for the xoxc- token and the
|
|
67
|
+
* browser's cookie jar for the xoxd- session cookie.
|
|
68
|
+
*
|
|
69
|
+
* @param slackUrl - Slack URL to navigate to (default: the sign-in
|
|
70
|
+
* entry point, not a workspace or the marketing homepage)
|
|
71
|
+
* @param timeoutMs - How long to wait before giving up
|
|
72
|
+
* @param onStep - Called once, right after the browser opens, with
|
|
73
|
+
* the guidance a person watching needs to actually finish sign-in.
|
|
74
|
+
* Adapter-supplied rather than written straight to stderr here, so
|
|
75
|
+
* a host that isn't a bare terminal can surface it its own way.
|
|
76
|
+
*/
|
|
77
|
+
export async function extractFromBrowser(slackUrl = DEFAULT_SLACK_URL, timeoutMs = DEFAULT_TIMEOUT_MS, onStep) {
|
|
78
|
+
const chromePath = findChrome();
|
|
79
|
+
const browser = await puppeteer.launch({
|
|
80
|
+
executablePath: chromePath,
|
|
81
|
+
headless: false,
|
|
82
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
83
|
+
});
|
|
84
|
+
try {
|
|
85
|
+
const context = browser.defaultBrowserContext();
|
|
86
|
+
const page = (await browser.pages())[0] ?? (await browser.newPage());
|
|
87
|
+
await page.goto(slackUrl, { waitUntil: "domcontentloaded" });
|
|
88
|
+
onStep?.(SIGN_IN_GUIDANCE);
|
|
89
|
+
const startTime = Date.now();
|
|
90
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
91
|
+
// Grab the most recent page, since Slack and SSO flows may open
|
|
92
|
+
// new tabs or navigate, destroying the original context.
|
|
93
|
+
const pages = await browser.pages();
|
|
94
|
+
const activePage = pages[pages.length - 1] ?? page;
|
|
95
|
+
// A workspace's own SSB redirect page (cloud-native.slack.com/
|
|
96
|
+
// ssb/redirect, and its equivalents) defaults to prompting for
|
|
97
|
+
// the desktop app, with a "use Slack in your browser" link as
|
|
98
|
+
// the only way to reach the web client instead. Nothing here
|
|
99
|
+
// wants the desktop app, and nothing clicks that link on its
|
|
100
|
+
// own, so a real run sat on that splash page for the whole
|
|
101
|
+
// five-minute budget until this was added.
|
|
102
|
+
await clickUseInBrowser(activePage);
|
|
103
|
+
// The cookie lives in the browser context, not the page,
|
|
104
|
+
// so it survives navigations. Check it first.
|
|
105
|
+
const cookies = await context.cookies();
|
|
106
|
+
const dCookie = cookies.find((c) => c.name === "d" && c.domain.includes("slack.com"));
|
|
107
|
+
const cookie = dCookie?.value;
|
|
108
|
+
// Try to read the token from localStorage. This fails during
|
|
109
|
+
// navigations (context destroyed) and on non-Slack pages
|
|
110
|
+
// (SSO provider). Both are expected, so we just retry.
|
|
111
|
+
const token = await extractTokenFromPage(activePage);
|
|
112
|
+
if (token?.startsWith("xoxc-") && cookie?.startsWith("xoxd-")) {
|
|
113
|
+
return { token, cookie };
|
|
114
|
+
}
|
|
115
|
+
await sleep(POLL_INTERVAL_MS);
|
|
116
|
+
}
|
|
117
|
+
throw new Error("Timed out waiting for Slack credentials. " +
|
|
118
|
+
"Make sure you are logged into Slack in the browser window, " +
|
|
119
|
+
"and that you have clicked into a specific workspace: a fresh " +
|
|
120
|
+
"browser profile has no session yet, so app.slack.com shows a " +
|
|
121
|
+
"workspace picker after sign-in rather than opening one directly, " +
|
|
122
|
+
"and nothing here is extractable until a workspace is open.");
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
await browser.close();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Click a "use Slack in your browser" link if the active page is
|
|
130
|
+
* showing one, so the desktop-app splash page a workspace redirect
|
|
131
|
+
* lands on doesn't sit there indefinitely. A no-op, never throwing,
|
|
132
|
+
* on any page that isn't showing one (mid-navigation, cross-origin,
|
|
133
|
+
* or just a different page entirely).
|
|
134
|
+
*
|
|
135
|
+
* Dispatches a real mouse click at the link's on-screen position
|
|
136
|
+
* rather than calling the DOM `.click()` method in-page: the latter
|
|
137
|
+
* produces a synthetic event (`isTrusted: false`), which this splash
|
|
138
|
+
* page's own handler silently ignores, exactly the "nothing changes"
|
|
139
|
+
* a real run showed before this was found. A CDP-level mouse click
|
|
140
|
+
* is indistinguishable from one a person made.
|
|
141
|
+
*/
|
|
142
|
+
async function clickUseInBrowser(page) {
|
|
143
|
+
try {
|
|
144
|
+
const center = await page.evaluate(() => {
|
|
145
|
+
const links = Array.from(document.querySelectorAll("a"));
|
|
146
|
+
const match = links.find((a) => /use slack in (your|the) browser/i.test(a.textContent ?? ""));
|
|
147
|
+
if (!match)
|
|
148
|
+
return null;
|
|
149
|
+
const rect = match.getBoundingClientRect();
|
|
150
|
+
if (rect.width === 0 || rect.height === 0)
|
|
151
|
+
return null;
|
|
152
|
+
return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };
|
|
153
|
+
});
|
|
154
|
+
if (center)
|
|
155
|
+
await page.mouse.click(center.x, center.y);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Execution context destroyed, page closed, or cross-origin
|
|
159
|
+
// frame. Same as extractTokenFromPage: all expected, so the
|
|
160
|
+
// next poll just tries again.
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Try to extract the xoxc- token from a page's localStorage.
|
|
165
|
+
*
|
|
166
|
+
* Returns null if the page isn't on Slack yet, is mid-navigation,
|
|
167
|
+
* or the execution context was destroyed. All expected during
|
|
168
|
+
* SSO flows.
|
|
169
|
+
*/
|
|
170
|
+
async function extractTokenFromPage(page) {
|
|
171
|
+
try {
|
|
172
|
+
return await page.evaluate(() => {
|
|
173
|
+
try {
|
|
174
|
+
const raw = localStorage.getItem("localConfig_v2");
|
|
175
|
+
if (!raw)
|
|
176
|
+
return null;
|
|
177
|
+
const config = JSON.parse(raw);
|
|
178
|
+
const teams = config?.teams;
|
|
179
|
+
if (!teams)
|
|
180
|
+
return null;
|
|
181
|
+
for (const t of Object.values(teams)) {
|
|
182
|
+
const tok = t?.token;
|
|
183
|
+
if (tok?.startsWith("xoxc-"))
|
|
184
|
+
return tok;
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Execution context destroyed (navigation), page closed, or
|
|
195
|
+
// cross-origin frame (SSO provider). All expected, so retry.
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function sleep(ms) {
|
|
200
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
201
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform URL opener. Launches the system default browser.
|
|
3
|
+
*/
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
/** Open a URL in the user's default browser. */
|
|
6
|
+
export function openInBrowser(url) {
|
|
7
|
+
const platform = process.platform;
|
|
8
|
+
if (platform === "darwin") {
|
|
9
|
+
execFile("open", [url], ignoreError);
|
|
10
|
+
}
|
|
11
|
+
else if (platform === "win32") {
|
|
12
|
+
execFile("cmd", ["/c", "start", url], ignoreError);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
execFile("xdg-open", [url], ignoreError);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Browser launch is best-effort. If it fails (e.g. headless
|
|
20
|
+
* server, missing xdg-open), the user can still copy the URL
|
|
21
|
+
* shown in the terminal.
|
|
22
|
+
*/
|
|
23
|
+
function ignoreError(_error) {
|
|
24
|
+
// Intentionally empty: URL is displayed as fallback.
|
|
25
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token management: storing and retrieving Slack OAuth tokens.
|
|
3
|
+
*/
|
|
4
|
+
import type { StoredToken } from "../types.js";
|
|
5
|
+
export type { OAuthApp } from "../types.js";
|
|
6
|
+
export { getOAuthApp, hasOAuthApp, storeOAuthApp } from "./oauth-app.js";
|
|
7
|
+
/** Store a Slack token after successful authentication. */
|
|
8
|
+
export declare function storeToken(token: StoredToken): void;
|
|
9
|
+
/** Retrieve the stored Slack token. */
|
|
10
|
+
export declare function getToken(): StoredToken | null;
|
|
11
|
+
/** Check whether a valid token exists. */
|
|
12
|
+
export declare function hasToken(): boolean;
|
|
13
|
+
/** Clear all Slack configuration (OAuth app + token). */
|
|
14
|
+
export declare function clearAllConfig(): void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token management: storing and retrieving Slack OAuth tokens.
|
|
3
|
+
*/
|
|
4
|
+
import { readFile, writeFile } from "./store.js";
|
|
5
|
+
export { getOAuthApp, hasOAuthApp, storeOAuthApp } from "./oauth-app.js";
|
|
6
|
+
/** Store a Slack token after successful authentication. */
|
|
7
|
+
export function storeToken(token) {
|
|
8
|
+
const data = readFile();
|
|
9
|
+
data.token = token;
|
|
10
|
+
writeFile(data);
|
|
11
|
+
}
|
|
12
|
+
/** Retrieve the stored Slack token. */
|
|
13
|
+
export function getToken() {
|
|
14
|
+
return readFile().token ?? null;
|
|
15
|
+
}
|
|
16
|
+
/** Check whether a valid token exists. */
|
|
17
|
+
export function hasToken() {
|
|
18
|
+
const token = getToken();
|
|
19
|
+
return !!(token?.accessToken && token?.userId);
|
|
20
|
+
}
|
|
21
|
+
/** Clear all Slack configuration (OAuth app + token). */
|
|
22
|
+
export function clearAllConfig() {
|
|
23
|
+
writeFile({ oauthApp: null, token: null });
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting a Slack auth failure for a tool result.
|
|
3
|
+
*
|
|
4
|
+
* Split out of the interactive auth orchestration (which needs a
|
|
5
|
+
* host's UI to run the OAuth flow and stays adapter-local) because
|
|
6
|
+
* this part is pure: an error in, a message out.
|
|
7
|
+
*/
|
|
8
|
+
/** Format an auth error for the tool result. */
|
|
9
|
+
export declare function formatAuthError(error: unknown): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting a Slack auth failure for a tool result.
|
|
3
|
+
*
|
|
4
|
+
* Split out of the interactive auth orchestration (which needs a
|
|
5
|
+
* host's UI to run the OAuth flow and stays adapter-local) because
|
|
6
|
+
* this part is pure: an error in, a message out.
|
|
7
|
+
*/
|
|
8
|
+
/** Format an auth error for the tool result. */
|
|
9
|
+
export function formatAuthError(error) {
|
|
10
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
11
|
+
if (message.includes("cancelled")) {
|
|
12
|
+
return ("⚠️ Authentication required but was cancelled.\n\n" +
|
|
13
|
+
"Run /slack-auth to authenticate with Slack.");
|
|
14
|
+
}
|
|
15
|
+
// Errors from describeError() already have a "Slack API error:" prefix.
|
|
16
|
+
if (message.startsWith("Slack API error:"))
|
|
17
|
+
return message;
|
|
18
|
+
return `Slack API error: ${message}`;
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract Slack credentials from a curl command or raw values.
|
|
3
|
+
*
|
|
4
|
+
* When users copy "Copy as cURL" from browser DevTools on any
|
|
5
|
+
* Slack API request, the curl command contains both the xoxc-
|
|
6
|
+
* token and xoxd- cookie. This module extracts them.
|
|
7
|
+
*/
|
|
8
|
+
/** Extracted browser session credentials. */
|
|
9
|
+
export interface BrowserCredentials {
|
|
10
|
+
token: string;
|
|
11
|
+
cookie: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Extract xoxc- token and xoxd- cookie from a curl command string.
|
|
15
|
+
*
|
|
16
|
+
* Looks for token patterns in the body/headers and cookie patterns
|
|
17
|
+
* in the Cookie header. Throws if either is missing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractFromCurl(curlCommand: string): BrowserCredentials;
|
|
20
|
+
/** Validate that a token looks like a Slack token. */
|
|
21
|
+
export declare function isValidToken(token: string): boolean;
|
|
22
|
+
/** Validate that a cookie looks like a Slack session cookie. */
|
|
23
|
+
export declare function isValidCookie(cookie: string): boolean;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract Slack credentials from a curl command or raw values.
|
|
3
|
+
*
|
|
4
|
+
* When users copy "Copy as cURL" from browser DevTools on any
|
|
5
|
+
* Slack API request, the curl command contains both the xoxc-
|
|
6
|
+
* token and xoxd- cookie. This module extracts them.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Extract xoxc- token and xoxd- cookie from a curl command string.
|
|
10
|
+
*
|
|
11
|
+
* Looks for token patterns in the body/headers and cookie patterns
|
|
12
|
+
* in the Cookie header. Throws if either is missing.
|
|
13
|
+
*/
|
|
14
|
+
export function extractFromCurl(curlCommand) {
|
|
15
|
+
// Find xoxc- tokens anywhere in the command.
|
|
16
|
+
const tokenPattern = /\b(xoxc-[a-zA-Z0-9-]{20,})/g;
|
|
17
|
+
const tokens = Array.from(curlCommand.matchAll(tokenPattern), (m) => m[1]);
|
|
18
|
+
// Find xoxd- cookies (usually after d= in a Cookie header).
|
|
19
|
+
const cookiePattern = /\bd=(xoxd-[^;"\s&)}']+)/g;
|
|
20
|
+
const cookies = Array.from(curlCommand.matchAll(cookiePattern), (m) => m[1]);
|
|
21
|
+
// Also try bare xoxd- values not preceded by d=.
|
|
22
|
+
if (cookies.length === 0) {
|
|
23
|
+
const barePattern = /\b(xoxd-[a-zA-Z0-9%/+=_-]{20,})/g;
|
|
24
|
+
const bare = Array.from(curlCommand.matchAll(barePattern), (m) => m[1]);
|
|
25
|
+
cookies.push(...bare);
|
|
26
|
+
}
|
|
27
|
+
if (tokens.length === 0) {
|
|
28
|
+
throw new Error("No Slack token (xoxc-...) found in the curl command. " +
|
|
29
|
+
"Make sure you copied a request to api.slack.com or edgeapi.slack.com.");
|
|
30
|
+
}
|
|
31
|
+
if (cookies.length === 0) {
|
|
32
|
+
throw new Error("No Slack cookie (xoxd-...) found in the curl command. " +
|
|
33
|
+
"Make sure you copied the full curl command including headers.");
|
|
34
|
+
}
|
|
35
|
+
return { token: tokens[0], cookie: cookies[0] };
|
|
36
|
+
}
|
|
37
|
+
/** Validate that a token looks like a Slack token. */
|
|
38
|
+
export function isValidToken(token) {
|
|
39
|
+
return /^xox[cpb]-/.test(token);
|
|
40
|
+
}
|
|
41
|
+
/** Validate that a cookie looks like a Slack session cookie. */
|
|
42
|
+
export function isValidCookie(cookie) {
|
|
43
|
+
return cookie.startsWith("xoxd-");
|
|
44
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack authentication: credential state and error formatting.
|
|
3
|
+
*
|
|
4
|
+
* `ensureAuthenticated` itself, the interactive orchestration that
|
|
5
|
+
* runs the setup wizard and/or OAuth web redirect flow, needs a
|
|
6
|
+
* host's UI and stays adapter-local; everything it is built from
|
|
7
|
+
* (credential storage, the OAuth exchange, the callback server, the
|
|
8
|
+
* browser opener, error formatting) lives here.
|
|
9
|
+
*/
|
|
10
|
+
export type { OAuthApp, StoredToken } from "../types.js";
|
|
11
|
+
export { clearAllConfig, getOAuthApp, getToken, hasOAuthApp, hasToken, storeOAuthApp, storeToken, } from "./credentials.js";
|
|
12
|
+
export { formatAuthError } from "./errors.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack authentication: credential state and error formatting.
|
|
3
|
+
*
|
|
4
|
+
* `ensureAuthenticated` itself, the interactive orchestration that
|
|
5
|
+
* runs the setup wizard and/or OAuth web redirect flow, needs a
|
|
6
|
+
* host's UI and stays adapter-local; everything it is built from
|
|
7
|
+
* (credential storage, the OAuth exchange, the callback server, the
|
|
8
|
+
* browser opener, error formatting) lives here.
|
|
9
|
+
*/
|
|
10
|
+
export { clearAllConfig, getOAuthApp, getToken, hasOAuthApp, hasToken, storeOAuthApp, storeToken, } from "./credentials.js";
|
|
11
|
+
export { formatAuthError } from "./errors.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth app credential management: storing and retrieving
|
|
3
|
+
* the Slack app's client ID and secret.
|
|
4
|
+
*/
|
|
5
|
+
import type { OAuthApp } from "../types.js";
|
|
6
|
+
/** Store OAuth app credentials. */
|
|
7
|
+
export declare function storeOAuthApp(credentials: OAuthApp): void;
|
|
8
|
+
/** Retrieve OAuth app credentials. */
|
|
9
|
+
export declare function getOAuthApp(): OAuthApp | null;
|
|
10
|
+
/** Check if OAuth app credentials are configured. */
|
|
11
|
+
export declare function hasOAuthApp(): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth app credential management: storing and retrieving
|
|
3
|
+
* the Slack app's client ID and secret.
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, writeFile } from "./store.js";
|
|
6
|
+
/** Store OAuth app credentials. */
|
|
7
|
+
export function storeOAuthApp(credentials) {
|
|
8
|
+
const data = readFile();
|
|
9
|
+
data.oauthApp = credentials;
|
|
10
|
+
writeFile(data);
|
|
11
|
+
}
|
|
12
|
+
/** Retrieve OAuth app credentials. */
|
|
13
|
+
export function getOAuthApp() {
|
|
14
|
+
return readFile().oauthApp ?? null;
|
|
15
|
+
}
|
|
16
|
+
/** Check if OAuth app credentials are configured. */
|
|
17
|
+
export function hasOAuthApp() {
|
|
18
|
+
const creds = getOAuthApp();
|
|
19
|
+
return !!(creds?.clientId && creds?.clientSecret);
|
|
20
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack OAuth2 flow: web redirect with localhost callback.
|
|
3
|
+
*
|
|
4
|
+
* Slack user tokens (xoxp-) are long-lived and don't expire
|
|
5
|
+
* unless explicitly revoked, so there's no refresh logic.
|
|
6
|
+
* The flow:
|
|
7
|
+
* 1. Redirect user to Slack's authorization URL
|
|
8
|
+
* 2. Slack redirects back to localhost with a code
|
|
9
|
+
* 3. Exchange code for an access token via oauth.v2.access
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthApp, StoredToken } from "../types.js";
|
|
12
|
+
/** Port for the local OAuth callback server. */
|
|
13
|
+
export declare const CALLBACK_PORT = 8766;
|
|
14
|
+
/** Redirect URI for the OAuth flow. */
|
|
15
|
+
export declare const REDIRECT_URI = "http://localhost:8766";
|
|
16
|
+
/**
|
|
17
|
+
* OAuth scopes required for the extension.
|
|
18
|
+
*
|
|
19
|
+
* These are user-level scopes (requested via user_scope, not
|
|
20
|
+
* bot scope) so the token acts as the authenticated user.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SCOPES: string[];
|
|
23
|
+
/** Build the Slack OAuth authorization URL. */
|
|
24
|
+
export declare function buildAuthUrl(app: OAuthApp, state: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Exchange an authorization code for a user access token.
|
|
27
|
+
*
|
|
28
|
+
* Calls Slack's oauth.v2.access endpoint and extracts the
|
|
29
|
+
* user token from the authed_user field.
|
|
30
|
+
*/
|
|
31
|
+
export declare function exchangeCodeForToken(app: OAuthApp, code: string): Promise<StoredToken>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack OAuth2 flow: web redirect with localhost callback.
|
|
3
|
+
*
|
|
4
|
+
* Slack user tokens (xoxp-) are long-lived and don't expire
|
|
5
|
+
* unless explicitly revoked, so there's no refresh logic.
|
|
6
|
+
* The flow:
|
|
7
|
+
* 1. Redirect user to Slack's authorization URL
|
|
8
|
+
* 2. Slack redirects back to localhost with a code
|
|
9
|
+
* 3. Exchange code for an access token via oauth.v2.access
|
|
10
|
+
*/
|
|
11
|
+
/** Port for the local OAuth callback server. */
|
|
12
|
+
export const CALLBACK_PORT = 8766;
|
|
13
|
+
/** Redirect URI for the OAuth flow. */
|
|
14
|
+
export const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}`;
|
|
15
|
+
/**
|
|
16
|
+
* OAuth scopes required for the extension.
|
|
17
|
+
*
|
|
18
|
+
* These are user-level scopes (requested via user_scope, not
|
|
19
|
+
* bot scope) so the token acts as the authenticated user.
|
|
20
|
+
*/
|
|
21
|
+
export const SCOPES = [
|
|
22
|
+
"search:read",
|
|
23
|
+
"channels:read",
|
|
24
|
+
"channels:history",
|
|
25
|
+
"groups:read",
|
|
26
|
+
"groups:history",
|
|
27
|
+
"im:read",
|
|
28
|
+
"im:history",
|
|
29
|
+
"mpim:read",
|
|
30
|
+
"mpim:history",
|
|
31
|
+
"chat:write",
|
|
32
|
+
"users:read",
|
|
33
|
+
"users.profile:read",
|
|
34
|
+
"reactions:read",
|
|
35
|
+
"reactions:write",
|
|
36
|
+
];
|
|
37
|
+
/** Build the Slack OAuth authorization URL. */
|
|
38
|
+
export function buildAuthUrl(app, state) {
|
|
39
|
+
const params = new URLSearchParams({
|
|
40
|
+
client_id: app.clientId,
|
|
41
|
+
user_scope: SCOPES.join(","),
|
|
42
|
+
redirect_uri: REDIRECT_URI,
|
|
43
|
+
state,
|
|
44
|
+
});
|
|
45
|
+
return `https://slack.com/oauth/v2/authorize?${params.toString()}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Exchange an authorization code for a user access token.
|
|
49
|
+
*
|
|
50
|
+
* Calls Slack's oauth.v2.access endpoint and extracts the
|
|
51
|
+
* user token from the authed_user field.
|
|
52
|
+
*/
|
|
53
|
+
export async function exchangeCodeForToken(app, code) {
|
|
54
|
+
const response = await fetch("https://slack.com/api/oauth.v2.access", {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
57
|
+
body: new URLSearchParams({
|
|
58
|
+
client_id: app.clientId,
|
|
59
|
+
client_secret: app.clientSecret,
|
|
60
|
+
code,
|
|
61
|
+
redirect_uri: REDIRECT_URI,
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
const body = (await response.json());
|
|
65
|
+
if (!body.ok) {
|
|
66
|
+
const error = body.error ?? "unknown_error";
|
|
67
|
+
throw new Error(`Slack OAuth token exchange failed: ${error}`);
|
|
68
|
+
}
|
|
69
|
+
const authedUser = body.authed_user;
|
|
70
|
+
if (!authedUser?.access_token) {
|
|
71
|
+
throw new Error("Slack OAuth response missing authed_user.access_token. " +
|
|
72
|
+
"Make sure your app requests user_scope, not bot scope.");
|
|
73
|
+
}
|
|
74
|
+
const team = body.team;
|
|
75
|
+
return {
|
|
76
|
+
accessToken: authedUser.access_token,
|
|
77
|
+
userId: authedUser.id,
|
|
78
|
+
teamId: team?.id ?? "",
|
|
79
|
+
teamName: team?.name ?? undefined,
|
|
80
|
+
scopes: authedUser.scope ?? SCOPES.join(","),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local HTTP server for the Slack OAuth2 callback.
|
|
3
|
+
*/
|
|
4
|
+
/** Result from the local OAuth2 callback: either an auth code or an error. */
|
|
5
|
+
export interface OAuthCallbackResult {
|
|
6
|
+
code?: string;
|
|
7
|
+
state?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Start a local server to handle the Slack OAuth callback.
|
|
12
|
+
* Resolves when the callback arrives or times out.
|
|
13
|
+
*/
|
|
14
|
+
export declare function waitForOAuthCallback(port: number): Promise<OAuthCallbackResult>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local HTTP server for the Slack OAuth2 callback.
|
|
3
|
+
*/
|
|
4
|
+
import * as http from "node:http";
|
|
5
|
+
/** Timeout before the OAuth callback server gives up (5 minutes). */
|
|
6
|
+
const CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;
|
|
7
|
+
const PAGE_STYLES = `
|
|
8
|
+
body {
|
|
9
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
10
|
+
padding: 3rem 1rem;
|
|
11
|
+
text-align: center;
|
|
12
|
+
color: #1a1a1a;
|
|
13
|
+
background: #fafafa;
|
|
14
|
+
}
|
|
15
|
+
@media (prefers-color-scheme: dark) {
|
|
16
|
+
body { color: #e0e0e0; background: #1a1a1a; }
|
|
17
|
+
}`;
|
|
18
|
+
const SUCCESS_PAGE = `<!DOCTYPE html>
|
|
19
|
+
<html>
|
|
20
|
+
<head>
|
|
21
|
+
<meta charset="utf-8">
|
|
22
|
+
<title>Slack Authentication Successful</title>
|
|
23
|
+
<style>${PAGE_STYLES}</style>
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
<h1>✓ Slack Authentication Successful</h1>
|
|
27
|
+
<p>You can close this tab and return to Pi.</p>
|
|
28
|
+
<script>setTimeout(() => window.close(), 1500)</script>
|
|
29
|
+
</body>
|
|
30
|
+
</html>`;
|
|
31
|
+
function errorPage(error) {
|
|
32
|
+
return `<!DOCTYPE html>
|
|
33
|
+
<html>
|
|
34
|
+
<head>
|
|
35
|
+
<meta charset="utf-8">
|
|
36
|
+
<title>Slack Authentication Failed</title>
|
|
37
|
+
<style>${PAGE_STYLES}</style>
|
|
38
|
+
</head>
|
|
39
|
+
<body>
|
|
40
|
+
<h1>✗ Slack Authentication Failed</h1>
|
|
41
|
+
<p>Error: ${error || "Unknown error"}</p>
|
|
42
|
+
<p>Please try again.</p>
|
|
43
|
+
</body>
|
|
44
|
+
</html>`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Start a local server to handle the Slack OAuth callback.
|
|
48
|
+
* Resolves when the callback arrives or times out.
|
|
49
|
+
*/
|
|
50
|
+
export function waitForOAuthCallback(port) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const server = http.createServer((req, res) => {
|
|
53
|
+
const url = new URL(req.url || "", `http://localhost:${port}`);
|
|
54
|
+
const code = url.searchParams.get("code");
|
|
55
|
+
const state = url.searchParams.get("state");
|
|
56
|
+
const error = url.searchParams.get("error");
|
|
57
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
58
|
+
res.end(code ? SUCCESS_PAGE : errorPage(error || ""));
|
|
59
|
+
server.close();
|
|
60
|
+
resolve({
|
|
61
|
+
code: code || undefined,
|
|
62
|
+
state: state || undefined,
|
|
63
|
+
error: error || undefined,
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
server.on("error", (err) => {
|
|
67
|
+
reject(err);
|
|
68
|
+
});
|
|
69
|
+
server.listen(port, "localhost");
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
server.close();
|
|
72
|
+
reject(new Error("OAuth callback timeout after 5 minutes"));
|
|
73
|
+
}, CALLBACK_TIMEOUT_MS);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based persistence for Slack credentials.
|
|
3
|
+
*
|
|
4
|
+
* Provides shared read/write primitives used by credentials
|
|
5
|
+
* and OAuth app modules. The credentials file's location is
|
|
6
|
+
* decided by paths.ts.
|
|
7
|
+
*/
|
|
8
|
+
import type { OAuthApp, StoredToken } from "../types.js";
|
|
9
|
+
/** Shape of the persisted credentials file. */
|
|
10
|
+
export interface CredentialsFile {
|
|
11
|
+
oauthApp?: OAuthApp | null;
|
|
12
|
+
token?: StoredToken | null;
|
|
13
|
+
}
|
|
14
|
+
/** Read the credentials file, returning defaults if missing or corrupt. */
|
|
15
|
+
export declare function readFile(filePath?: string): CredentialsFile;
|
|
16
|
+
/** Write the credentials file atomically. */
|
|
17
|
+
export declare function writeFile(data: CredentialsFile, filePath?: string): void;
|