@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,765 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Kit support: tokenising mrkdwn into rich text
|
|
3
|
+
* elements, building structured `rich_text` blocks (lists,
|
|
4
|
+
* quotes, code blocks, tables) for sending, rendering
|
|
5
|
+
* received rich text back to readable text and extracting
|
|
6
|
+
* tables from blocks.
|
|
7
|
+
*/
|
|
8
|
+
import { displayNameForId } from "./resolvers/user.js";
|
|
9
|
+
// ── mrkdwn → Block Kit elements (sending) ───────────────
|
|
10
|
+
/**
|
|
11
|
+
* Characters that signal potential mrkdwn formatting.
|
|
12
|
+
*
|
|
13
|
+
* Used as a fast pre-check: if a string contains none of
|
|
14
|
+
* these, it's plain text and can skip tokenising.
|
|
15
|
+
*/
|
|
16
|
+
const FORMATTING_CHARS = /[<`*_~:[#]/;
|
|
17
|
+
/**
|
|
18
|
+
* Angle-bracket pattern: matches Slack's `<...>` syntax for
|
|
19
|
+
* links, mentions, channels and broadcasts.
|
|
20
|
+
*/
|
|
21
|
+
const ANGLE_BRACKET = /<([^>]+)>/g;
|
|
22
|
+
/**
|
|
23
|
+
* Backtick pattern: matches inline code spans.
|
|
24
|
+
*/
|
|
25
|
+
const BACKTICK = /`([^`]+)`/g;
|
|
26
|
+
/**
|
|
27
|
+
* Markdown-style link pattern: `[text](url)`. Many agents
|
|
28
|
+
* (and humans copy-pasting from anywhere) write links this
|
|
29
|
+
* way instead of Slack's native `<url|text>` syntax. Without
|
|
30
|
+
* conversion they render as literal brackets and parens.
|
|
31
|
+
*/
|
|
32
|
+
const MARKDOWN_LINK = /\[([^\]\n]+)\]\(([^)\s]+)\)/g;
|
|
33
|
+
/**
|
|
34
|
+
* Inline style patterns with word-boundary rules.
|
|
35
|
+
*
|
|
36
|
+
* Opening marker must be preceded by whitespace or
|
|
37
|
+
* start-of-string. Closing marker must be followed by
|
|
38
|
+
* whitespace, punctuation, or end-of-string. Content
|
|
39
|
+
* between markers must be non-empty and not contain the
|
|
40
|
+
* marker character.
|
|
41
|
+
*/
|
|
42
|
+
const BOLD = /(^|(?<=\s))\*([^*]+)\*(?=\s|[.,;:!?)}\]]|$)/g;
|
|
43
|
+
const ITALIC = /(^|(?<=\s))_([^_]+)_(?=\s|[.,;:!?)}\]]|$)/g;
|
|
44
|
+
const STRIKE = /(^|(?<=\s))~([^~]+)~(?=\s|[.,;:!?)}\]]|$)/g;
|
|
45
|
+
/**
|
|
46
|
+
* Markdown-style double-marker patterns. Agents reflexively
|
|
47
|
+
* write `**bold**` and `~~strike~~` even when targeting
|
|
48
|
+
* Slack mrkdwn, where those would render with the marker
|
|
49
|
+
* characters visible. We accept them as alternatives.
|
|
50
|
+
*/
|
|
51
|
+
const MARKDOWN_BOLD = /\*\*([^*\n]+?)\*\*/g;
|
|
52
|
+
const MARKDOWN_STRIKE = /~~([^~\n]+?)~~/g;
|
|
53
|
+
/**
|
|
54
|
+
* Emoji shortcode pattern: `:name:` where name can contain
|
|
55
|
+
* letters, numbers, underscores, hyphens and plus signs.
|
|
56
|
+
*/
|
|
57
|
+
const EMOJI = /:([a-z0-9_+-]+):/g;
|
|
58
|
+
/**
|
|
59
|
+
* Hex-colour-lookalike pattern: `#` followed by 3, 4, 6 or
|
|
60
|
+
* 8 hex digits with no alphanumeric character after. Slack
|
|
61
|
+
* auto-renders these as colour swatches in plain mrkdwn,
|
|
62
|
+
* which catches PR numbers like `#675891` (six digits = a
|
|
63
|
+
* valid hex code). Splitting the `#` from the digits across
|
|
64
|
+
* two adjacent text elements defeats the swatch detector
|
|
65
|
+
* while rendering identically.
|
|
66
|
+
*/
|
|
67
|
+
const HEX_COLOR_LIKE = /#([0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})(?![0-9a-zA-Z])/g;
|
|
68
|
+
/**
|
|
69
|
+
* Parse an angle-bracket expression into a Block Kit element.
|
|
70
|
+
*
|
|
71
|
+
* Handles user mentions, broadcasts, channel links, and URL
|
|
72
|
+
* links, all of which use Slack's `<...>` internal format.
|
|
73
|
+
*/
|
|
74
|
+
function parseAngleBracket(content) {
|
|
75
|
+
// User mention: <@U123> or <@U123|display.name>
|
|
76
|
+
if (content.startsWith("@")) {
|
|
77
|
+
const pipeIdx = content.indexOf("|");
|
|
78
|
+
const userId = pipeIdx > 0 ? content.slice(1, pipeIdx) : content.slice(1);
|
|
79
|
+
return { type: "user", user_id: userId };
|
|
80
|
+
}
|
|
81
|
+
// Broadcast: <!here>, <!channel>, <!everyone>
|
|
82
|
+
if (content.startsWith("!")) {
|
|
83
|
+
const pipeIdx = content.indexOf("|");
|
|
84
|
+
const range = pipeIdx > 0 ? content.slice(1, pipeIdx) : content.slice(1);
|
|
85
|
+
return { type: "broadcast", range };
|
|
86
|
+
}
|
|
87
|
+
// Channel link: <#C123> or <#C123|channel-name>
|
|
88
|
+
if (content.startsWith("#")) {
|
|
89
|
+
const pipeIdx = content.indexOf("|");
|
|
90
|
+
const channelId = pipeIdx > 0 ? content.slice(1, pipeIdx) : content.slice(1);
|
|
91
|
+
return { type: "channel", channel_id: channelId };
|
|
92
|
+
}
|
|
93
|
+
// URL link: <url|text> or <url>
|
|
94
|
+
const pipeIdx = content.indexOf("|");
|
|
95
|
+
if (pipeIdx > 0) {
|
|
96
|
+
return {
|
|
97
|
+
type: "link",
|
|
98
|
+
url: content.slice(0, pipeIdx),
|
|
99
|
+
text: content.slice(pipeIdx + 1),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return { type: "link", url: content };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Tokenise a mrkdwn string into Block Kit inline elements.
|
|
106
|
+
*
|
|
107
|
+
* Scans left to right, matching patterns in priority order:
|
|
108
|
+
* angle brackets (unambiguous), backticks, then inline
|
|
109
|
+
* styles with word-boundary rules. Plain text between
|
|
110
|
+
* patterns becomes `text` elements. Adjacent plain segments
|
|
111
|
+
* are merged.
|
|
112
|
+
*/
|
|
113
|
+
export function parseMrkdwnToElements(text) {
|
|
114
|
+
if (!text)
|
|
115
|
+
return [];
|
|
116
|
+
// Collect all tokens from all pattern types.
|
|
117
|
+
const tokens = [];
|
|
118
|
+
// 1. Angle-bracket patterns (highest priority, being unambiguous
|
|
119
|
+
// Slack-internal syntax).
|
|
120
|
+
for (const match of text.matchAll(ANGLE_BRACKET)) {
|
|
121
|
+
tokens.push({
|
|
122
|
+
start: match.index,
|
|
123
|
+
end: match.index + match[0].length,
|
|
124
|
+
elements: [parseAngleBracket(match[1])],
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// 2. Markdown-style links. Higher priority than backticks
|
|
128
|
+
// so a link's display text can contain backticks.
|
|
129
|
+
for (const match of text.matchAll(MARKDOWN_LINK)) {
|
|
130
|
+
tokens.push({
|
|
131
|
+
start: match.index,
|
|
132
|
+
end: match.index + match[0].length,
|
|
133
|
+
elements: [{ type: "link", url: match[2], text: match[1] }],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// 3. Backtick code spans.
|
|
137
|
+
for (const match of text.matchAll(BACKTICK)) {
|
|
138
|
+
tokens.push({
|
|
139
|
+
start: match.index,
|
|
140
|
+
end: match.index + match[0].length,
|
|
141
|
+
elements: [{ type: "text", text: match[1], style: { code: true } }],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// 4. Emoji shortcodes.
|
|
145
|
+
for (const match of text.matchAll(EMOJI)) {
|
|
146
|
+
tokens.push({
|
|
147
|
+
start: match.index,
|
|
148
|
+
end: match.index + match[0].length,
|
|
149
|
+
elements: [{ type: "emoji", name: match[1] }],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
// 5. Markdown-style double-marker styles. Must precede
|
|
153
|
+
// the single-marker patterns so `**bold**` doesn't get
|
|
154
|
+
// mis-tokenised as `*` then `bold` then `*`.
|
|
155
|
+
for (const match of text.matchAll(MARKDOWN_BOLD)) {
|
|
156
|
+
tokens.push({
|
|
157
|
+
start: match.index,
|
|
158
|
+
end: match.index + match[0].length,
|
|
159
|
+
elements: [{ type: "text", text: match[1], style: { bold: true } }],
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
for (const match of text.matchAll(MARKDOWN_STRIKE)) {
|
|
163
|
+
tokens.push({
|
|
164
|
+
start: match.index,
|
|
165
|
+
end: match.index + match[0].length,
|
|
166
|
+
elements: [{ type: "text", text: match[1], style: { strike: true } }],
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// 6. Slack-native single-marker inline styles.
|
|
170
|
+
for (const match of text.matchAll(BOLD)) {
|
|
171
|
+
tokens.push({
|
|
172
|
+
start: match.index,
|
|
173
|
+
end: match.index + match[0].length,
|
|
174
|
+
elements: [{ type: "text", text: match[2], style: { bold: true } }],
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
for (const match of text.matchAll(ITALIC)) {
|
|
178
|
+
tokens.push({
|
|
179
|
+
start: match.index,
|
|
180
|
+
end: match.index + match[0].length,
|
|
181
|
+
elements: [{ type: "text", text: match[2], style: { italic: true } }],
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
for (const match of text.matchAll(STRIKE)) {
|
|
185
|
+
tokens.push({
|
|
186
|
+
start: match.index,
|
|
187
|
+
end: match.index + match[0].length,
|
|
188
|
+
elements: [{ type: "text", text: match[2], style: { strike: true } }],
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// 7. Hex-colour-lookalike shield (lowest priority, since it only
|
|
192
|
+
// fires when no other pattern claims the range). Emits
|
|
193
|
+
// two adjacent text elements so the rendered output is
|
|
194
|
+
// identical but Slack's swatch detector sees two pieces
|
|
195
|
+
// instead of one hex run.
|
|
196
|
+
for (const match of text.matchAll(HEX_COLOR_LIKE)) {
|
|
197
|
+
tokens.push({
|
|
198
|
+
start: match.index,
|
|
199
|
+
end: match.index + match[0].length,
|
|
200
|
+
elements: [
|
|
201
|
+
{ type: "text", text: "#" },
|
|
202
|
+
{ type: "text", text: match[1] },
|
|
203
|
+
],
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Sort by start position. For overlaps, higher-priority
|
|
207
|
+
// tokens (earlier in the list) take precedence since we
|
|
208
|
+
// skip tokens that overlap with already-consumed ranges.
|
|
209
|
+
tokens.sort((a, b) => a.start - b.start);
|
|
210
|
+
// Walk the string, emitting elements for tokens and
|
|
211
|
+
// plain text for gaps.
|
|
212
|
+
const elements = [];
|
|
213
|
+
let cursor = 0;
|
|
214
|
+
for (const token of tokens) {
|
|
215
|
+
// Skip tokens that overlap with already-consumed text.
|
|
216
|
+
if (token.start < cursor)
|
|
217
|
+
continue;
|
|
218
|
+
// Emit plain text before this token.
|
|
219
|
+
if (token.start > cursor) {
|
|
220
|
+
const plain = text.slice(cursor, token.start);
|
|
221
|
+
if (plain)
|
|
222
|
+
pushText(elements, plain);
|
|
223
|
+
}
|
|
224
|
+
for (const el of token.elements)
|
|
225
|
+
elements.push(el);
|
|
226
|
+
cursor = token.end;
|
|
227
|
+
}
|
|
228
|
+
// Emit any trailing plain text.
|
|
229
|
+
if (cursor < text.length) {
|
|
230
|
+
const plain = text.slice(cursor);
|
|
231
|
+
if (plain)
|
|
232
|
+
pushText(elements, plain);
|
|
233
|
+
}
|
|
234
|
+
return elements;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Append a plain text element, merging with the previous
|
|
238
|
+
* element if it's also unstyled plain text.
|
|
239
|
+
*/
|
|
240
|
+
function pushText(elements, text) {
|
|
241
|
+
const last = elements[elements.length - 1];
|
|
242
|
+
if (last?.type === "text" && !last.style) {
|
|
243
|
+
last.text = (last.text ?? "") + text;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
elements.push({ type: "text", text });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/** Zero-width space used for empty cells (Slack rejects empty text). */
|
|
250
|
+
const ZERO_WIDTH_SPACE = "\u200B";
|
|
251
|
+
/**
|
|
252
|
+
* Convert a mrkdwn string to a Block Kit table cell.
|
|
253
|
+
*
|
|
254
|
+
* Returns `raw_text` for plain strings (the common case)
|
|
255
|
+
* and `rich_text` for strings with formatting. Empty strings
|
|
256
|
+
* become `raw_text` with a zero-width space.
|
|
257
|
+
*/
|
|
258
|
+
export function mrkdwnToCell(text) {
|
|
259
|
+
if (!text) {
|
|
260
|
+
return { type: "raw_text", text: ZERO_WIDTH_SPACE };
|
|
261
|
+
}
|
|
262
|
+
// Fast path: no formatting characters → raw_text.
|
|
263
|
+
if (!FORMATTING_CHARS.test(text)) {
|
|
264
|
+
return { type: "raw_text", text };
|
|
265
|
+
}
|
|
266
|
+
const elements = parseMrkdwnToElements(text);
|
|
267
|
+
// If parsing produced a single unstyled text element,
|
|
268
|
+
// the formatting characters were false positives (e.g.
|
|
269
|
+
// "a < b"). Use raw_text.
|
|
270
|
+
if (elements.length === 1 &&
|
|
271
|
+
elements[0].type === "text" &&
|
|
272
|
+
!elements[0].style) {
|
|
273
|
+
return { type: "raw_text", text };
|
|
274
|
+
}
|
|
275
|
+
// Wrap in rich_text cell structure.
|
|
276
|
+
return {
|
|
277
|
+
type: "rich_text",
|
|
278
|
+
elements: [
|
|
279
|
+
{
|
|
280
|
+
type: "rich_text_section",
|
|
281
|
+
elements,
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
// ── Block Kit elements → readable text (reading) ────────
|
|
287
|
+
/**
|
|
288
|
+
* Render a single rich text inline element to readable text.
|
|
289
|
+
*
|
|
290
|
+
* Follows the same output conventions as `formatSlackText`
|
|
291
|
+
* in renderers/message.ts: bold → `**text**`, links →
|
|
292
|
+
* `[text](url)`, user mentions → `@handle`, etc.
|
|
293
|
+
*/
|
|
294
|
+
function renderElement(el) {
|
|
295
|
+
switch (el.type) {
|
|
296
|
+
case "text": {
|
|
297
|
+
let result = el.text ?? "";
|
|
298
|
+
if (el.style?.code)
|
|
299
|
+
result = `\`${result}\``;
|
|
300
|
+
if (el.style?.strike)
|
|
301
|
+
result = `~${result}~`;
|
|
302
|
+
if (el.style?.italic)
|
|
303
|
+
result = `_${result}_`;
|
|
304
|
+
if (el.style?.bold)
|
|
305
|
+
result = `**${result}**`;
|
|
306
|
+
return result;
|
|
307
|
+
}
|
|
308
|
+
case "link": {
|
|
309
|
+
const display = el.text || el.url || "";
|
|
310
|
+
const url = el.url || "";
|
|
311
|
+
return display && display !== url ? `[${display}](${url})` : url;
|
|
312
|
+
}
|
|
313
|
+
case "user": {
|
|
314
|
+
const id = el.user_id ?? "";
|
|
315
|
+
const name = displayNameForId(id);
|
|
316
|
+
return `@${name}`;
|
|
317
|
+
}
|
|
318
|
+
case "channel": {
|
|
319
|
+
const id = el.channel_id ?? "";
|
|
320
|
+
const name = displayNameForId(id);
|
|
321
|
+
return `#${name}`;
|
|
322
|
+
}
|
|
323
|
+
case "broadcast":
|
|
324
|
+
return `@${el.range ?? "here"}`;
|
|
325
|
+
case "emoji":
|
|
326
|
+
return `:${el.name ?? ""}:`;
|
|
327
|
+
default:
|
|
328
|
+
return "";
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Render a `rich_text` table cell to readable text.
|
|
333
|
+
*
|
|
334
|
+
* Walks the cell's elements → rich_text_section → inline
|
|
335
|
+
* elements, converting each to text.
|
|
336
|
+
*/
|
|
337
|
+
export function renderRichTextCell(cell) {
|
|
338
|
+
const typed = cell;
|
|
339
|
+
if (typed.type !== "rich_text" || !Array.isArray(typed.elements)) {
|
|
340
|
+
return "";
|
|
341
|
+
}
|
|
342
|
+
const parts = [];
|
|
343
|
+
for (const section of typed.elements) {
|
|
344
|
+
if (!Array.isArray(section.elements))
|
|
345
|
+
continue;
|
|
346
|
+
for (const el of section.elements) {
|
|
347
|
+
parts.push(renderElement(el));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return parts.join("");
|
|
351
|
+
}
|
|
352
|
+
// ── Table extraction (reading) ──────────────────────────
|
|
353
|
+
/**
|
|
354
|
+
* Extract the text content from a single table cell.
|
|
355
|
+
*
|
|
356
|
+
* Handles both `raw_text` (returns `.text` directly) and
|
|
357
|
+
* `rich_text` (renders inline elements to readable text).
|
|
358
|
+
*/
|
|
359
|
+
export function extractCellText(cell) {
|
|
360
|
+
const typed = cell;
|
|
361
|
+
if (typed.type === "raw_text") {
|
|
362
|
+
return typed.text ?? "";
|
|
363
|
+
}
|
|
364
|
+
if (typed.type === "rich_text") {
|
|
365
|
+
return renderRichTextCell(cell);
|
|
366
|
+
}
|
|
367
|
+
return "";
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Extract tables from a raw Block Kit blocks array.
|
|
371
|
+
*
|
|
372
|
+
* Finds all blocks with `type === "table"`, extracts
|
|
373
|
+
* headers, rows, and column settings from each.
|
|
374
|
+
*/
|
|
375
|
+
export function extractTables(blocks) {
|
|
376
|
+
const tables = [];
|
|
377
|
+
for (const block of blocks) {
|
|
378
|
+
const typed = block;
|
|
379
|
+
if (typed.type !== "table" || !Array.isArray(typed.rows))
|
|
380
|
+
continue;
|
|
381
|
+
if (typed.rows.length === 0)
|
|
382
|
+
continue;
|
|
383
|
+
// First row is the header.
|
|
384
|
+
const headerRow = typed.rows[0];
|
|
385
|
+
const columns = Array.isArray(headerRow)
|
|
386
|
+
? headerRow.map(extractCellText)
|
|
387
|
+
: [];
|
|
388
|
+
// Remaining rows are data.
|
|
389
|
+
const rows = typed.rows
|
|
390
|
+
.slice(1)
|
|
391
|
+
.map((row) => (Array.isArray(row) ? row.map(extractCellText) : []));
|
|
392
|
+
// Column settings.
|
|
393
|
+
let columnSettings;
|
|
394
|
+
if (Array.isArray(typed.column_settings)) {
|
|
395
|
+
columnSettings = typed.column_settings.map((s) => {
|
|
396
|
+
if (s == null)
|
|
397
|
+
return null;
|
|
398
|
+
const setting = {};
|
|
399
|
+
if (s.align === "left" || s.align === "center" || s.align === "right") {
|
|
400
|
+
setting.align = s.align;
|
|
401
|
+
}
|
|
402
|
+
if (typeof s.is_wrapped === "boolean") {
|
|
403
|
+
setting.isWrapped = s.is_wrapped;
|
|
404
|
+
}
|
|
405
|
+
return Object.keys(setting).length > 0 ? setting : null;
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
tables.push({ columns, rows, columnSettings });
|
|
409
|
+
}
|
|
410
|
+
return tables;
|
|
411
|
+
}
|
|
412
|
+
// ── mrkdwn → rich_text block (sending) ──────────────────
|
|
413
|
+
/**
|
|
414
|
+
* Match an ordered list line: `1. content`. Captures
|
|
415
|
+
* leading whitespace, the digits and the content.
|
|
416
|
+
*/
|
|
417
|
+
const ORDERED_LIST_LINE = /^(\s*)(\d+)\.\s+(.+)$/;
|
|
418
|
+
/**
|
|
419
|
+
* Match an unordered list line: `- content`, `* content`
|
|
420
|
+
* or `+ content`. Captures leading whitespace and the
|
|
421
|
+
* content (the marker itself is discarded).
|
|
422
|
+
*/
|
|
423
|
+
const UNORDERED_LIST_LINE = /^(\s*)[-*+]\s+(.+)$/;
|
|
424
|
+
/**
|
|
425
|
+
* Match a blockquote line: `> content`. The space after
|
|
426
|
+
* `>` is optional. Captures the content.
|
|
427
|
+
*/
|
|
428
|
+
const QUOTE_LINE = /^>\s?(.*)$/;
|
|
429
|
+
/**
|
|
430
|
+
* Match a code-fence line: opening or closing triple
|
|
431
|
+
* backticks. Anything after the fence (e.g. a language
|
|
432
|
+
* hint) is ignored, since Slack does not render it.
|
|
433
|
+
*/
|
|
434
|
+
const FENCE_LINE = /^```/;
|
|
435
|
+
/**
|
|
436
|
+
* Match a heading line: one to six leading `#` followed by
|
|
437
|
+
* whitespace and content. Slack only has a single `header`
|
|
438
|
+
* block style, so the level is captured for completeness
|
|
439
|
+
* but not used: `#` and `######` render the same.
|
|
440
|
+
*/
|
|
441
|
+
const HEADING_LINE = /^(#{1,6})\s+(.+)$/;
|
|
442
|
+
/**
|
|
443
|
+
* Match a divider line: three or more dashes, asterisks or
|
|
444
|
+
* underscores on a line by themselves. Mirrors CommonMark's
|
|
445
|
+
* thematic-break rule. Distinct from a list bullet because
|
|
446
|
+
* a bullet always has whitespace and content after the
|
|
447
|
+
* marker.
|
|
448
|
+
*/
|
|
449
|
+
const DIVIDER_LINE = /^(?:-{3,}|\*{3,}|_{3,})\s*$/;
|
|
450
|
+
/**
|
|
451
|
+
* Width of one indent level for nested lists, measured in
|
|
452
|
+
* spaces. Two spaces or one tab counts as one level, and the
|
|
453
|
+
* convention Slack's editor uses.
|
|
454
|
+
*/
|
|
455
|
+
const INDENT_WIDTH = 2;
|
|
456
|
+
/**
|
|
457
|
+
* Inline patterns whose presence forces a `rich_text`
|
|
458
|
+
* block even when no block-level structure (list, heading,
|
|
459
|
+
* quote, fence, divider) is present.
|
|
460
|
+
*
|
|
461
|
+
* Plain mrkdwn can't faithfully render any of these:
|
|
462
|
+
* markdown-style `[text](url)` shows literal brackets,
|
|
463
|
+
* `**bold**` and `~~strike~~` show their markers, and
|
|
464
|
+
* `#XXXXXX` hex-lookalikes get auto-rendered as colour
|
|
465
|
+
* swatches that the shield in `parseMrkdwnToElements`
|
|
466
|
+
* defeats only when blocks are sent.
|
|
467
|
+
*
|
|
468
|
+
* Non-global so `.test()` doesn't carry `lastIndex` state
|
|
469
|
+
* between calls.
|
|
470
|
+
*/
|
|
471
|
+
const NEEDS_RICH_TEXT_INLINE = /\[[^\]\n]+\]\([^)\s]+\)|\*\*[^*\n]+?\*\*|~~[^~\n]+?~~|#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})(?![0-9a-zA-Z])/;
|
|
472
|
+
/** Maximum nesting level Slack accepts for `rich_text_list`. */
|
|
473
|
+
const MAX_LIST_INDENT = 8;
|
|
474
|
+
/**
|
|
475
|
+
* Compute an indent level from a run of leading whitespace.
|
|
476
|
+
*
|
|
477
|
+
* Tabs count as one full level; spaces count as one level
|
|
478
|
+
* per `INDENT_WIDTH` characters. The result is clamped so
|
|
479
|
+
* we never exceed Slack's nesting limit.
|
|
480
|
+
*/
|
|
481
|
+
function indentLevel(whitespace) {
|
|
482
|
+
let spaces = 0;
|
|
483
|
+
for (const ch of whitespace) {
|
|
484
|
+
if (ch === "\t")
|
|
485
|
+
spaces += INDENT_WIDTH;
|
|
486
|
+
else if (ch === " ")
|
|
487
|
+
spaces += 1;
|
|
488
|
+
}
|
|
489
|
+
const level = Math.floor(spaces / INDENT_WIDTH);
|
|
490
|
+
return Math.min(level, MAX_LIST_INDENT);
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Build a Block Kit `blocks` array from mrkdwn-style text.
|
|
494
|
+
*
|
|
495
|
+
* Walks the text line by line, producing a mix of
|
|
496
|
+
* top-level blocks:
|
|
497
|
+
*
|
|
498
|
+
* - `rich_text` for paragraphs, lists, quotes and code
|
|
499
|
+
* fences. Inline formatting inside each line goes
|
|
500
|
+
* through {@link parseMrkdwnToElements}, which also
|
|
501
|
+
* handles markdown-style links, double-marker styles
|
|
502
|
+
* and the colour-swatch shield.
|
|
503
|
+
* - `header` for `#`-prefixed lines.
|
|
504
|
+
* - `divider` for thematic breaks (`---`, `***`, `___`).
|
|
505
|
+
*
|
|
506
|
+
* Returns the array plus a `hasStructure` flag the caller
|
|
507
|
+
* can use to decide whether sending blocks (instead of
|
|
508
|
+
* plain mrkdwn) actually changes how the message renders.
|
|
509
|
+
*/
|
|
510
|
+
export function mrkdwnToBlocks(text) {
|
|
511
|
+
const outer = [];
|
|
512
|
+
let rtChildren = [];
|
|
513
|
+
let sectionLines = [];
|
|
514
|
+
let listItems = [];
|
|
515
|
+
let quoteLines = [];
|
|
516
|
+
let fenceLines = [];
|
|
517
|
+
let inFence = false;
|
|
518
|
+
// Inline patterns that mrkdwn can't render correctly
|
|
519
|
+
// force a rich_text block even when no block-level
|
|
520
|
+
// structure (list, heading, quote, fence, divider)
|
|
521
|
+
// shows up. Without this, a message like
|
|
522
|
+
// `[link](https://...)` would skip blocks and Slack
|
|
523
|
+
// would render the brackets literally.
|
|
524
|
+
let hasStructure = NEEDS_RICH_TEXT_INLINE.test(text);
|
|
525
|
+
// Tracks a blank line that fell *between* two distinct
|
|
526
|
+
// blocks (not inside an in-progress section). When the
|
|
527
|
+
// next block opens, we emit a spacer section before it so
|
|
528
|
+
// the rendered message preserves the visual gap the user
|
|
529
|
+
// wrote in their input.
|
|
530
|
+
let pendingSpacer = false;
|
|
531
|
+
const emitSpacer = () => {
|
|
532
|
+
if (!pendingSpacer || rtChildren.length === 0) {
|
|
533
|
+
pendingSpacer = false;
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
rtChildren.push({
|
|
537
|
+
type: "rich_text_section",
|
|
538
|
+
elements: [{ type: "text", text: "\n" }],
|
|
539
|
+
});
|
|
540
|
+
pendingSpacer = false;
|
|
541
|
+
};
|
|
542
|
+
const flushSection = () => {
|
|
543
|
+
// Trim trailing blank lines so the section ends cleanly.
|
|
544
|
+
// Blank lines inside a section (between paragraphs) are
|
|
545
|
+
// preserved, since Slack renders the embedded newlines as the
|
|
546
|
+
// paragraph break the user wrote.
|
|
547
|
+
while (sectionLines.length > 0 &&
|
|
548
|
+
sectionLines[sectionLines.length - 1] === "") {
|
|
549
|
+
sectionLines.pop();
|
|
550
|
+
}
|
|
551
|
+
if (sectionLines.length === 0)
|
|
552
|
+
return;
|
|
553
|
+
rtChildren.push({
|
|
554
|
+
type: "rich_text_section",
|
|
555
|
+
elements: parseMrkdwnToElements(sectionLines.join("\n")),
|
|
556
|
+
});
|
|
557
|
+
sectionLines = [];
|
|
558
|
+
};
|
|
559
|
+
const flushList = () => {
|
|
560
|
+
if (listItems.length === 0)
|
|
561
|
+
return;
|
|
562
|
+
hasStructure = true;
|
|
563
|
+
// Group adjacent items that share both indent and style.
|
|
564
|
+
// A change in either ends the current `rich_text_list`
|
|
565
|
+
// and starts a new one.
|
|
566
|
+
let start = 0;
|
|
567
|
+
while (start < listItems.length) {
|
|
568
|
+
const first = listItems[start];
|
|
569
|
+
let end = start + 1;
|
|
570
|
+
while (end < listItems.length &&
|
|
571
|
+
listItems[end].indent === first.indent &&
|
|
572
|
+
listItems[end].style === first.style) {
|
|
573
|
+
end++;
|
|
574
|
+
}
|
|
575
|
+
const block = {
|
|
576
|
+
type: "rich_text_list",
|
|
577
|
+
style: first.style,
|
|
578
|
+
elements: listItems.slice(start, end).map((item) => ({
|
|
579
|
+
type: "rich_text_section",
|
|
580
|
+
elements: parseMrkdwnToElements(item.content),
|
|
581
|
+
})),
|
|
582
|
+
};
|
|
583
|
+
if (first.indent > 0)
|
|
584
|
+
block.indent = first.indent;
|
|
585
|
+
rtChildren.push(block);
|
|
586
|
+
start = end;
|
|
587
|
+
}
|
|
588
|
+
listItems = [];
|
|
589
|
+
};
|
|
590
|
+
const flushQuote = () => {
|
|
591
|
+
if (quoteLines.length === 0)
|
|
592
|
+
return;
|
|
593
|
+
hasStructure = true;
|
|
594
|
+
rtChildren.push({
|
|
595
|
+
type: "rich_text_quote",
|
|
596
|
+
elements: parseMrkdwnToElements(quoteLines.join("\n")),
|
|
597
|
+
});
|
|
598
|
+
quoteLines = [];
|
|
599
|
+
};
|
|
600
|
+
const flushFence = () => {
|
|
601
|
+
hasStructure = true;
|
|
602
|
+
rtChildren.push({
|
|
603
|
+
type: "rich_text_preformatted",
|
|
604
|
+
elements: [{ type: "text", text: fenceLines.join("\n") }],
|
|
605
|
+
});
|
|
606
|
+
fenceLines = [];
|
|
607
|
+
};
|
|
608
|
+
const flushParagraph = () => {
|
|
609
|
+
flushSection();
|
|
610
|
+
flushList();
|
|
611
|
+
flushQuote();
|
|
612
|
+
};
|
|
613
|
+
// Close the current `rich_text` block (if any) and push
|
|
614
|
+
// it to the outer blocks array. Used before emitting a
|
|
615
|
+
// top-level block (header or divider) that can't live
|
|
616
|
+
// inside `rich_text`.
|
|
617
|
+
const closeRichText = () => {
|
|
618
|
+
flushParagraph();
|
|
619
|
+
if (rtChildren.length === 0)
|
|
620
|
+
return;
|
|
621
|
+
outer.push({ type: "rich_text", elements: rtChildren });
|
|
622
|
+
rtChildren = [];
|
|
623
|
+
// Block-level boundaries (header, divider) carry their
|
|
624
|
+
// own visual separation, so no rich_text spacer is needed
|
|
625
|
+
// when we cross into one.
|
|
626
|
+
pendingSpacer = false;
|
|
627
|
+
};
|
|
628
|
+
for (const line of text.split("\n")) {
|
|
629
|
+
if (inFence) {
|
|
630
|
+
if (FENCE_LINE.test(line)) {
|
|
631
|
+
flushFence();
|
|
632
|
+
inFence = false;
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
fenceLines.push(line);
|
|
636
|
+
}
|
|
637
|
+
continue;
|
|
638
|
+
}
|
|
639
|
+
if (FENCE_LINE.test(line)) {
|
|
640
|
+
flushParagraph();
|
|
641
|
+
emitSpacer();
|
|
642
|
+
inFence = true;
|
|
643
|
+
continue;
|
|
644
|
+
}
|
|
645
|
+
const heading = line.match(HEADING_LINE);
|
|
646
|
+
if (heading) {
|
|
647
|
+
closeRichText();
|
|
648
|
+
hasStructure = true;
|
|
649
|
+
outer.push({
|
|
650
|
+
type: "header",
|
|
651
|
+
text: { type: "plain_text", text: heading[2], emoji: true },
|
|
652
|
+
});
|
|
653
|
+
continue;
|
|
654
|
+
}
|
|
655
|
+
if (DIVIDER_LINE.test(line)) {
|
|
656
|
+
closeRichText();
|
|
657
|
+
hasStructure = true;
|
|
658
|
+
outer.push({ type: "divider" });
|
|
659
|
+
continue;
|
|
660
|
+
}
|
|
661
|
+
// Blank line. Three cases:
|
|
662
|
+
// 1. We're inside a section. Preserve the blank as an
|
|
663
|
+
// embedded newline so paragraphs separated by a
|
|
664
|
+
// blank line render with the spacing the user
|
|
665
|
+
// wrote. Slack's editor likewise keeps blank lines
|
|
666
|
+
// inside a single `rich_text_section`.
|
|
667
|
+
// 2. We're inside a list or quote. Those can't span a
|
|
668
|
+
// blank line, so end them. The blank then becomes a
|
|
669
|
+
// spacer between the list/quote and whatever comes
|
|
670
|
+
// next.
|
|
671
|
+
// 3. Nothing in progress. The blank line still earns a
|
|
672
|
+
// spacer once the next block opens.
|
|
673
|
+
if (line.trim().length === 0) {
|
|
674
|
+
if (sectionLines.length > 0) {
|
|
675
|
+
sectionLines.push("");
|
|
676
|
+
}
|
|
677
|
+
else {
|
|
678
|
+
flushList();
|
|
679
|
+
flushQuote();
|
|
680
|
+
pendingSpacer = true;
|
|
681
|
+
}
|
|
682
|
+
continue;
|
|
683
|
+
}
|
|
684
|
+
const ordered = line.match(ORDERED_LIST_LINE);
|
|
685
|
+
if (ordered) {
|
|
686
|
+
flushSection();
|
|
687
|
+
flushQuote();
|
|
688
|
+
emitSpacer();
|
|
689
|
+
listItems.push({
|
|
690
|
+
indent: indentLevel(ordered[1]),
|
|
691
|
+
style: "ordered",
|
|
692
|
+
content: ordered[3],
|
|
693
|
+
});
|
|
694
|
+
continue;
|
|
695
|
+
}
|
|
696
|
+
const unordered = line.match(UNORDERED_LIST_LINE);
|
|
697
|
+
if (unordered) {
|
|
698
|
+
flushSection();
|
|
699
|
+
flushQuote();
|
|
700
|
+
emitSpacer();
|
|
701
|
+
listItems.push({
|
|
702
|
+
indent: indentLevel(unordered[1]),
|
|
703
|
+
style: "bullet",
|
|
704
|
+
content: unordered[2],
|
|
705
|
+
});
|
|
706
|
+
continue;
|
|
707
|
+
}
|
|
708
|
+
const quote = line.match(QUOTE_LINE);
|
|
709
|
+
if (quote) {
|
|
710
|
+
flushSection();
|
|
711
|
+
flushList();
|
|
712
|
+
emitSpacer();
|
|
713
|
+
quoteLines.push(quote[1]);
|
|
714
|
+
continue;
|
|
715
|
+
}
|
|
716
|
+
// Plain paragraph line: end any list/quote run, then
|
|
717
|
+
// accumulate into the current section.
|
|
718
|
+
flushList();
|
|
719
|
+
flushQuote();
|
|
720
|
+
emitSpacer();
|
|
721
|
+
sectionLines.push(line);
|
|
722
|
+
}
|
|
723
|
+
// End of input. An unterminated fence is still emitted,
|
|
724
|
+
// dropping its content silently would be worse than
|
|
725
|
+
// rendering a slightly-imperfect code block.
|
|
726
|
+
if (inFence)
|
|
727
|
+
flushFence();
|
|
728
|
+
closeRichText();
|
|
729
|
+
return { blocks: outer, hasStructure };
|
|
730
|
+
}
|
|
731
|
+
// ── Table building (sending) ────────────────────────────
|
|
732
|
+
/**
|
|
733
|
+
* Build a Block Kit table block from a `SlackTable`.
|
|
734
|
+
*
|
|
735
|
+
* Converts mrkdwn strings in columns and rows to Block Kit
|
|
736
|
+
* cell elements. Maps `columnSettings` to Block Kit's
|
|
737
|
+
* `column_settings` format.
|
|
738
|
+
*/
|
|
739
|
+
export function tableToBlock(table) {
|
|
740
|
+
// Header row + data rows, each cell through mrkdwnToCell.
|
|
741
|
+
const rows = [
|
|
742
|
+
table.columns.map(mrkdwnToCell),
|
|
743
|
+
...table.rows.map((row) => row.map(mrkdwnToCell)),
|
|
744
|
+
];
|
|
745
|
+
const block = { type: "table", rows };
|
|
746
|
+
// Map column settings if present. Slack rejects null
|
|
747
|
+
// entries in column_settings, so use empty objects to skip.
|
|
748
|
+
if (table.columnSettings?.length) {
|
|
749
|
+
const settings = table.columnSettings.map((s) => {
|
|
750
|
+
if (s == null)
|
|
751
|
+
return {};
|
|
752
|
+
const entry = {};
|
|
753
|
+
if (s.align)
|
|
754
|
+
entry.align = s.align;
|
|
755
|
+
if (s.isWrapped !== undefined)
|
|
756
|
+
entry.is_wrapped = s.isWrapped;
|
|
757
|
+
return entry;
|
|
758
|
+
});
|
|
759
|
+
// Only include if at least one entry has properties.
|
|
760
|
+
if (settings.some((s) => Object.keys(s).length > 0)) {
|
|
761
|
+
block.column_settings = settings;
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
return block;
|
|
765
|
+
}
|