diff --git a/.changeset/adapter-api-url.md b/.changeset/adapter-api-url.md deleted file mode 100644 index 09372a66..00000000 --- a/.changeset/adapter-api-url.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@chat-adapter/slack": minor -"@chat-adapter/discord": minor -"@chat-adapter/gchat": minor -"@chat-adapter/github": minor -"@chat-adapter/linear": minor -"@chat-adapter/teams": minor -"@chat-adapter/telegram": minor -"@chat-adapter/whatsapp": minor ---- - -Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) diff --git a/.changeset/beige-forks-judge.md b/.changeset/beige-forks-judge.md deleted file mode 100644 index 410bd68c..00000000 --- a/.changeset/beige-forks-judge.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"chat": patch ---- - -Fix Slack structured streaming when `thread.post(stream)` is called from a handler created by an interactive (`block_actions`) payload. -The team ID is now resolved from `team.id` in addition to `team_id` / `team`. diff --git a/.changeset/better-eagles-serve.md b/.changeset/better-eagles-serve.md deleted file mode 100644 index a3d67175..00000000 --- a/.changeset/better-eagles-serve.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@chat-adapter/telegram": patch -"@chat-adapter/whatsapp": patch -"@chat-adapter/gchat": patch -"@chat-adapter/slack": patch -"@chat-adapter/teams": patch -"chat": minor ---- - -restore attachment fetchData after queue/debounce serialization diff --git a/.changeset/bundle-resources-remove-guides.md b/.changeset/bundle-resources-remove-guides.md deleted file mode 100644 index 226b0825..00000000 --- a/.changeset/bundle-resources-remove-guides.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -Bundle guide markdown and a templates manifest with the package so AI agents can discover Chat SDK resources without fetching at runtime. Guides are written to `resources/guides/*.md` and templates to `resources/templates.json` by the root-level `pnpm sync-resources` script. diff --git a/.changeset/dirty-masks-bathe.md b/.changeset/dirty-masks-bathe.md deleted file mode 100644 index b75f7c62..00000000 --- a/.changeset/dirty-masks-bathe.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"@chat-adapter/linear": minor ---- - -Add multi-tenant support in the Linear adapter using `clientId` / `clientSecret`. - -The Linear adapter now exposes a `handleOAuthCallback()` function for OAuth multi-tenant support. - -Add `clientCredentials.scopes` to the Linear adapter so single-tenant client-credentials auth can request custom OAuth scopes. - -Add support for agent sessions in Linear, with streaming / task / plan support. diff --git a/.changeset/fix-discord-duplicate-card-content.md b/.changeset/fix-discord-duplicate-card-content.md deleted file mode 100644 index 3ecc527f..00000000 --- a/.changeset/fix-discord-duplicate-card-content.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/discord": patch ---- - -Fix duplicate content display when sending card messages on Discord diff --git a/.changeset/fix-dm-thread-ts.md b/.changeset/fix-dm-thread-ts.md deleted file mode 100644 index e8d06e07..00000000 --- a/.changeset/fix-dm-thread-ts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/slack": patch ---- - -Fix DM messages failing with `invalid_thread_ts` by guarding Slack API calls with `threadTs || undefined` diff --git a/.changeset/fix-max-concurrent.md b/.changeset/fix-max-concurrent.md deleted file mode 100644 index 7a26043e..00000000 --- a/.changeset/fix-max-concurrent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'chat': patch ---- - -fix(chat): honor `concurrency.maxConcurrent` in the `concurrent` strategy. The cap was documented but never applied, so handlers dispatched unbounded. Also warns when `maxConcurrent` is paired with a non-`concurrent` strategy (previously ignored silently) and throws on `maxConcurrent < 1` to prevent a deadlock. diff --git a/.changeset/fix-teams-dm-fetchmessages.md b/.changeset/fix-teams-dm-fetchmessages.md deleted file mode 100644 index 620dcf64..00000000 --- a/.changeset/fix-teams-dm-fetchmessages.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@chat-adapter/teams': patch ---- - -Fix fetchMessages 404 for DM conversations by caching the user's AAD object ID and resolving the Graph API chat ID diff --git a/.changeset/fix-telegram-markdownv2.md b/.changeset/fix-telegram-markdownv2.md deleted file mode 100644 index 54d2dd4c..00000000 --- a/.changeset/fix-telegram-markdownv2.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@chat-adapter/telegram": patch -"chat": minor ---- - -Switch Telegram adapter's outbound `parse_mode` from legacy `Markdown` to `MarkdownV2`, and replace the standard-markdown passthrough renderer with a proper AST → MarkdownV2 renderer. Standard markdown (`**bold**`) and legacy `Markdown` (`*bold*`) use different syntaxes and have no shared escape rules, so any message containing `.`, `!`, `(`, `)`, `-`, `_` in regular text — which is virtually every LLM-generated message — was being rejected with `can't parse entities`. The new renderer walks the mdast tree and emits MarkdownV2 with context-aware escaping (normal text vs. code blocks vs. link URLs), uniformly applies MarkdownV2 `parse_mode` to every format-converter output (including AST messages, which previously shipped without `parse_mode` and rendered asterisks literally), and escapes card fallback text. - -Also fix silent message truncation that the MarkdownV2 migration widened from a rare bug into a reliable 400. The previous truncator sliced messages at 4096/1024 chars and appended literal `...`, but in MarkdownV2 `.` is a reserved character that must be escaped, the slice can leave an orphan trailing `\`, and it can cut through a paired entity (`*bold*`, `` `code` ``) leaving it unclosed — all of which cause `can't parse entities`. The two truncate methods are unified into `truncateForTelegram(text, limit, parseMode)`, which appends an escaped `\.\.\.` for MarkdownV2 and walks back past unbalanced entity delimiters or orphan backslashes before appending. Plain-text messages keep literal `...`. - -Internal typing hardening: `renderMarkdownV2` is now typed exhaustively on mdast's `Nodes` union with a `never` assertion, so new mdast node types fail the build rather than silently falling through. Introduce `TelegramParseMode = "MarkdownV2" | "plain"` replacing the previous `string | undefined` at call sites, with `toBotApiParseMode` mapping to the Bot API wire format at the boundary. The `chat` package gains a re-export of mdast's `Nodes` union so adapters can build exhaustively typed renderers without importing mdast directly. diff --git a/.changeset/full-clowns-scream.md b/.changeset/full-clowns-scream.md deleted file mode 100644 index 4594c860..00000000 --- a/.changeset/full-clowns-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/slack": patch ---- - -enrich link previews with title, description, and image from Slack unfurl attachments diff --git a/.changeset/gchat-clear-cards-on-text-edit.md b/.changeset/gchat-clear-cards-on-text-edit.md deleted file mode 100644 index f84c6ba1..00000000 --- a/.changeset/gchat-clear-cards-on-text-edit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/gchat": patch ---- - -Clear cardsV2 when editing a message to plain text so old cards don't persist underneath the new text diff --git a/.changeset/gchat-selection-inputs.md b/.changeset/gchat-selection-inputs.md deleted file mode 100644 index 316e563f..00000000 --- a/.changeset/gchat-selection-inputs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/gchat": patch ---- - -Support `Select` and `RadioSelect` card actions in Google Chat by rendering them as `selectionInput` widgets and reading selected values from form inputs on action events. diff --git a/.changeset/get-user.md b/.changeset/get-user.md deleted file mode 100644 index b7f9597b..00000000 --- a/.changeset/get-user.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"chat": minor -"@chat-adapter/slack": minor -"@chat-adapter/discord": minor -"@chat-adapter/gchat": minor -"@chat-adapter/github": minor -"@chat-adapter/linear": minor -"@chat-adapter/telegram": minor ---- - -Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. diff --git a/.changeset/loud-animals-juggle.md b/.changeset/loud-animals-juggle.md deleted file mode 100644 index e75861a8..00000000 --- a/.changeset/loud-animals-juggle.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@chat-adapter/slack": minor -"chat": minor ---- - -add initialOption and option_groups support for ExternalSelect diff --git a/.changeset/major-pianos-battle.md b/.changeset/major-pianos-battle.md deleted file mode 100644 index 7a04d78f..00000000 --- a/.changeset/major-pianos-battle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -add streaming options to thread.post() with platform-specific namespacing diff --git a/.changeset/slack-dynamic-bot-token-and-webhook-verifier.md b/.changeset/slack-dynamic-bot-token-and-webhook-verifier.md deleted file mode 100644 index 3a8977a8..00000000 --- a/.changeset/slack-dynamic-bot-token-and-webhook-verifier.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/slack": minor ---- - -Add dynamic `botToken` resolver and custom `webhookVerifier` to Slack adapter config. `botToken` now accepts `string | (() => string | Promise)` so apps can rotate or lazily fetch tokens — the function is invoked per API call. `webhookVerifier: (request: Request) => string | Promise` is used in place of `signingSecret` when set (and `signingSecret` is not provided), letting hosts verify incoming requests with their own logic and return the verified body text; the adapter responds 401 if the verifier throws. diff --git a/.changeset/slack-mention-regex-email-addresses.md b/.changeset/slack-mention-regex-email-addresses.md deleted file mode 100644 index 430ec49b..00000000 --- a/.changeset/slack-mention-regex-email-addresses.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/slack": patch ---- - -Fix `@mention` rewrite regex so email addresses (e.g. `user@example.com`) and `` links are no longer mangled into broken Slack user mentions. The lookbehind now excludes any word character before `@`, which also means mentions immediately following a word character (e.g. `prefix@user`) are no longer rewritten — a bare `@user` still converts as before. diff --git a/.changeset/slack-multi-workspace-self-mention.md b/.changeset/slack-multi-workspace-self-mention.md deleted file mode 100644 index 1d77bb82..00000000 --- a/.changeset/slack-multi-workspace-self-mention.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/slack": patch ---- - -Fix self-mention detection in multi-workspace installs by using the request-scoped bot user ID instead of the adapter-level default diff --git a/.changeset/slack-socket-mode.md b/.changeset/slack-socket-mode.md deleted file mode 100644 index 050066a6..00000000 --- a/.changeset/slack-socket-mode.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"chat": minor -"@chat-adapter/slack": minor ---- - -Add Socket Mode support for environments behind firewalls that can't expose public HTTP endpoints, and add `{ action: "clear" }` modal response to close the entire modal view stack diff --git a/.changeset/task-update-details.md b/.changeset/task-update-details.md deleted file mode 100644 index 82db2f45..00000000 --- a/.changeset/task-update-details.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -Allow `task_update` streaming chunks to include optional `details` text for Slack task cards diff --git a/.changeset/teams-get-user.md b/.changeset/teams-get-user.md deleted file mode 100644 index 4cdbe81b..00000000 --- a/.changeset/teams-get-user.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/teams": minor ---- - -Add `getUser()` support for Teams adapter using Microsoft Graph API (requires `User.Read.All` permission) diff --git a/.changeset/teams-native-streaming.md b/.changeset/teams-native-streaming.md deleted file mode 100644 index b36a75ac..00000000 --- a/.changeset/teams-native-streaming.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@chat-adapter/teams": minor ---- - -Use native Teams SDK streaming for DMs via `stream.emit()`, with accumulate-and-post fallback for group chats diff --git a/.changeset/teams-sdk-2.0.8.md b/.changeset/teams-sdk-2.0.8.md deleted file mode 100644 index 2cd168f5..00000000 --- a/.changeset/teams-sdk-2.0.8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@chat-adapter/teams': patch ---- - -Bump Microsoft Teams SDK to 2.0.8 and switch to standard `User-Agent` header diff --git a/.changeset/thread-get-participants.md b/.changeset/thread-get-participants.md deleted file mode 100644 index c4cb33f4..00000000 --- a/.changeset/thread-get-participants.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -Add `thread.getParticipants()` to get unique human participants in a thread diff --git a/.changeset/thread-handle.md b/.changeset/thread-handle.md deleted file mode 100644 index cdfed15d..00000000 --- a/.changeset/thread-handle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -Add `chat.thread(threadId)` method to create Thread handles outside of webhook contexts diff --git a/.changeset/twelve-candies-mix.md b/.changeset/twelve-candies-mix.md deleted file mode 100644 index e2809936..00000000 --- a/.changeset/twelve-candies-mix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@chat-adapter/slack": minor -"chat": minor ---- - -Implement external_select block kit for Slack diff --git a/.changeset/update-task-by-id.md b/.changeset/update-task-by-id.md deleted file mode 100644 index c80b7555..00000000 --- a/.changeset/update-task-by-id.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"chat": minor ---- - -Allow `plan.updateTask()` to target a specific task by ID via `{ id: taskId }` instead of always updating the last in_progress task diff --git a/packages/adapter-discord/CHANGELOG.md b/packages/adapter-discord/CHANGELOG.md index 7f1d7e33..f0d6eb23 100644 --- a/packages/adapter-discord/CHANGELOG.md +++ b/packages/adapter-discord/CHANGELOG.md @@ -1,5 +1,32 @@ # @chat-adapter/discord +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. + +### Patch Changes + +- 7e5b447: Fix duplicate content display when sending card messages on Discord +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-discord/package.json b/packages/adapter-discord/package.json index 04bc95fb..29ed8875 100644 --- a/packages/adapter-discord/package.json +++ b/packages/adapter-discord/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/discord", - "version": "4.26.0", + "version": "4.27.0", "description": "Discord adapter for chat", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-gchat/CHANGELOG.md b/packages/adapter-gchat/CHANGELOG.md index 77e0fdf0..fefc6823 100644 --- a/packages/adapter-gchat/CHANGELOG.md +++ b/packages/adapter-gchat/CHANGELOG.md @@ -1,5 +1,34 @@ # @chat-adapter/gchat +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. + +### Patch Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- 53ee151: Clear cardsV2 when editing a message to plain text so old cards don't persist underneath the new text +- 1c12d33: Support `Select` and `RadioSelect` card actions in Google Chat by rendering them as `selectionInput` widgets and reading selected values from form inputs on action events. +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-gchat/package.json b/packages/adapter-gchat/package.json index 149c05e3..471c535d 100644 --- a/packages/adapter-gchat/package.json +++ b/packages/adapter-gchat/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/gchat", - "version": "4.26.0", + "version": "4.27.0", "description": "Google Chat adapter for chat", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-github/CHANGELOG.md b/packages/adapter-github/CHANGELOG.md index b90983cd..e96d1c52 100644 --- a/packages/adapter-github/CHANGELOG.md +++ b/packages/adapter-github/CHANGELOG.md @@ -1,5 +1,31 @@ # @chat-adapter/github +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-github/package.json b/packages/adapter-github/package.json index 5c2dde27..184e8603 100644 --- a/packages/adapter-github/package.json +++ b/packages/adapter-github/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/github", - "version": "4.26.0", + "version": "4.27.0", "description": "GitHub adapter for chat - PR and issue comment threads", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-linear/CHANGELOG.md b/packages/adapter-linear/CHANGELOG.md index abb1c936..a3615de7 100644 --- a/packages/adapter-linear/CHANGELOG.md +++ b/packages/adapter-linear/CHANGELOG.md @@ -1,5 +1,39 @@ # @chat-adapter/linear +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- bc94f0a: Add multi-tenant support in the Linear adapter using `clientId` / `clientSecret`. + + The Linear adapter now exposes a `handleOAuthCallback()` function for OAuth multi-tenant support. + + Add `clientCredentials.scopes` to the Linear adapter so single-tenant client-credentials auth can request custom OAuth scopes. + + Add support for agent sessions in Linear, with streaming / task / plan support. + +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-linear/package.json b/packages/adapter-linear/package.json index 2e46d112..54822728 100644 --- a/packages/adapter-linear/package.json +++ b/packages/adapter-linear/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/linear", - "version": "4.26.0", + "version": "4.27.0", "description": "Linear adapter for chat - issue comment threads", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-shared/CHANGELOG.md b/packages/adapter-shared/CHANGELOG.md index aa48979b..30fdea4c 100644 --- a/packages/adapter-shared/CHANGELOG.md +++ b/packages/adapter-shared/CHANGELOG.md @@ -1,5 +1,25 @@ # @chat-adapter/shared +## 4.27.0 + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-shared/package.json b/packages/adapter-shared/package.json index 8ca4879d..b0d1f222 100644 --- a/packages/adapter-shared/package.json +++ b/packages/adapter-shared/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/shared", - "version": "4.26.0", + "version": "4.27.0", "description": "Shared utilities for chat SDK adapters", "type": "module", "exports": { diff --git a/packages/adapter-slack/CHANGELOG.md b/packages/adapter-slack/CHANGELOG.md index 31e503b9..9f5176b0 100644 --- a/packages/adapter-slack/CHANGELOG.md +++ b/packages/adapter-slack/CHANGELOG.md @@ -1,5 +1,40 @@ # @chat-adapter/slack +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. +- 70281dc: add initialOption and option_groups support for ExternalSelect +- 2531e9c: Add dynamic `botToken` resolver and custom `webhookVerifier` to Slack adapter config. `botToken` now accepts `string | (() => string | Promise)` so apps can rotate or lazily fetch tokens — the function is invoked per API call. `webhookVerifier: (request: Request) => string | Promise` is used in place of `signingSecret` when set (and `signingSecret` is not provided), letting hosts verify incoming requests with their own logic and return the verified body text; the adapter responds 401 if the verifier throws. +- 7e90d9c: Add Socket Mode support for environments behind firewalls that can't expose public HTTP endpoints, and add `{ action: "clear" }` modal response to close the entire modal view stack +- a179b29: Implement external_select block kit for Slack + +### Patch Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- 53c6b68: Fix DM messages failing with `invalid_thread_ts` by guarding Slack API calls with `threadTs || undefined` +- ded6f78: enrich link previews with title, description, and image from Slack unfurl attachments +- c26ee6c: Fix `@mention` rewrite regex so email addresses (e.g. `user@example.com`) and `` links are no longer mangled into broken Slack user mentions. The lookbehind now excludes any word character before `@`, which also means mentions immediately following a word character (e.g. `prefix@user`) are no longer rewritten — a bare `@user` still converts as before. +- 0f8b2b1: Fix self-mention detection in multi-workspace installs by using the request-scoped bot user ID instead of the adapter-level default +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-slack/package.json b/packages/adapter-slack/package.json index 876badb3..6c43df5d 100644 --- a/packages/adapter-slack/package.json +++ b/packages/adapter-slack/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/slack", - "version": "4.26.0", + "version": "4.27.0", "description": "Slack adapter for chat", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-teams/CHANGELOG.md b/packages/adapter-teams/CHANGELOG.md index 18a0b249..a2f6facf 100644 --- a/packages/adapter-teams/CHANGELOG.md +++ b/packages/adapter-teams/CHANGELOG.md @@ -1,5 +1,35 @@ # @chat-adapter/teams +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `getUser()` support for Teams adapter using Microsoft Graph API (requires `User.Read.All` permission) +- ed46bae: Use native Teams SDK streaming for DMs via `stream.emit()`, with accumulate-and-post fallback for group chats + +### Patch Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- 4c24c94: Fix fetchMessages 404 for DM conversations by caching the user's AAD object ID and resolving the Graph API chat ID +- d440b0f: Bump Microsoft Teams SDK to 2.0.8 and switch to standard `User-Agent` header +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-teams/package.json b/packages/adapter-teams/package.json index 838a01bf..0bba2454 100644 --- a/packages/adapter-teams/package.json +++ b/packages/adapter-teams/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/teams", - "version": "4.26.0", + "version": "4.27.0", "description": "Microsoft Teams adapter for chat", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-telegram/CHANGELOG.md b/packages/adapter-telegram/CHANGELOG.md index 71f15c76..a1972a09 100644 --- a/packages/adapter-telegram/CHANGELOG.md +++ b/packages/adapter-telegram/CHANGELOG.md @@ -1,5 +1,38 @@ # @chat-adapter/telegram +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. + +### Patch Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- b9a1961: Switch Telegram adapter's outbound `parse_mode` from legacy `Markdown` to `MarkdownV2`, and replace the standard-markdown passthrough renderer with a proper AST → MarkdownV2 renderer. Standard markdown (`**bold**`) and legacy `Markdown` (`*bold*`) use different syntaxes and have no shared escape rules, so any message containing `.`, `!`, `(`, `)`, `-`, `_` in regular text — which is virtually every LLM-generated message — was being rejected with `can't parse entities`. The new renderer walks the mdast tree and emits MarkdownV2 with context-aware escaping (normal text vs. code blocks vs. link URLs), uniformly applies MarkdownV2 `parse_mode` to every format-converter output (including AST messages, which previously shipped without `parse_mode` and rendered asterisks literally), and escapes card fallback text. + + Also fix silent message truncation that the MarkdownV2 migration widened from a rare bug into a reliable 400. The previous truncator sliced messages at 4096/1024 chars and appended literal `...`, but in MarkdownV2 `.` is a reserved character that must be escaped, the slice can leave an orphan trailing `\`, and it can cut through a paired entity (`*bold*`, `` `code` ``) leaving it unclosed — all of which cause `can't parse entities`. The two truncate methods are unified into `truncateForTelegram(text, limit, parseMode)`, which appends an escaped `\.\.\.` for MarkdownV2 and walks back past unbalanced entity delimiters or orphan backslashes before appending. Plain-text messages keep literal `...`. + + Internal typing hardening: `renderMarkdownV2` is now typed exhaustively on mdast's `Nodes` union with a `never` assertion, so new mdast node types fail the build rather than silently falling through. Introduce `TelegramParseMode = "MarkdownV2" | "plain"` replacing the previous `string | undefined` at call sites, with `toBotApiParseMode` mapping to the Bot API wire format at the boundary. The `chat` package gains a re-export of mdast's `Nodes` union so adapters can build exhaustively typed renderers without importing mdast directly. + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-telegram/package.json b/packages/adapter-telegram/package.json index 80a58816..65d217a4 100644 --- a/packages/adapter-telegram/package.json +++ b/packages/adapter-telegram/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/telegram", - "version": "4.26.0", + "version": "4.27.0", "description": "Telegram adapter for chat", "type": "module", "main": "./dist/index.js", diff --git a/packages/adapter-whatsapp/CHANGELOG.md b/packages/adapter-whatsapp/CHANGELOG.md index a0b1ff9a..ebb97a57 100644 --- a/packages/adapter-whatsapp/CHANGELOG.md +++ b/packages/adapter-whatsapp/CHANGELOG.md @@ -1,5 +1,31 @@ # @chat-adapter/whatsapp +## 4.27.0 + +### Minor Changes + +- 6b17c60: Add `apiUrl` config option for custom API endpoint configuration (e.g. GovSlack, GitHub Enterprise, GCC-High Teams) + +### Patch Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + - @chat-adapter/shared@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/adapter-whatsapp/package.json b/packages/adapter-whatsapp/package.json index d0b3aa32..e7d5d23d 100644 --- a/packages/adapter-whatsapp/package.json +++ b/packages/adapter-whatsapp/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/whatsapp", - "version": "4.26.0", + "version": "4.27.0", "description": "WhatsApp adapter for chat - WhatsApp Business Cloud API", "type": "module", "main": "./dist/index.js", diff --git a/packages/chat/CHANGELOG.md b/packages/chat/CHANGELOG.md index 3c6dfbb3..601b248e 100644 --- a/packages/chat/CHANGELOG.md +++ b/packages/chat/CHANGELOG.md @@ -1,5 +1,33 @@ # chat +## 4.27.0 + +### Minor Changes + +- 1e7c551: restore attachment fetchData after queue/debounce serialization +- b0ab804: Bundle guide markdown and a templates manifest with the package so AI agents can discover Chat SDK resources without fetching at runtime. Guides are written to `resources/guides/*.md` and templates to `resources/templates.json` by the root-level `pnpm sync-resources` script. +- b9a1961: Switch Telegram adapter's outbound `parse_mode` from legacy `Markdown` to `MarkdownV2`, and replace the standard-markdown passthrough renderer with a proper AST → MarkdownV2 renderer. Standard markdown (`**bold**`) and legacy `Markdown` (`*bold*`) use different syntaxes and have no shared escape rules, so any message containing `.`, `!`, `(`, `)`, `-`, `_` in regular text — which is virtually every LLM-generated message — was being rejected with `can't parse entities`. The new renderer walks the mdast tree and emits MarkdownV2 with context-aware escaping (normal text vs. code blocks vs. link URLs), uniformly applies MarkdownV2 `parse_mode` to every format-converter output (including AST messages, which previously shipped without `parse_mode` and rendered asterisks literally), and escapes card fallback text. + + Also fix silent message truncation that the MarkdownV2 migration widened from a rare bug into a reliable 400. The previous truncator sliced messages at 4096/1024 chars and appended literal `...`, but in MarkdownV2 `.` is a reserved character that must be escaped, the slice can leave an orphan trailing `\`, and it can cut through a paired entity (`*bold*`, `` `code` ``) leaving it unclosed — all of which cause `can't parse entities`. The two truncate methods are unified into `truncateForTelegram(text, limit, parseMode)`, which appends an escaped `\.\.\.` for MarkdownV2 and walks back past unbalanced entity delimiters or orphan backslashes before appending. Plain-text messages keep literal `...`. + + Internal typing hardening: `renderMarkdownV2` is now typed exhaustively on mdast's `Nodes` union with a `never` assertion, so new mdast node types fail the build rather than silently falling through. Introduce `TelegramParseMode = "MarkdownV2" | "plain"` replacing the previous `string | undefined` at call sites, with `toBotApiParseMode` mapping to the Bot API wire format at the boundary. The `chat` package gains a re-export of mdast's `Nodes` union so adapters can build exhaustively typed renderers without importing mdast directly. + +- a520797: Add `chat.getUser()` method and `UserInfo` type for cross-platform user lookups. Implement `getUser` on Slack, Discord, Google Chat, GitHub, Linear, and Telegram adapters. +- 70281dc: add initialOption and option_groups support for ExternalSelect +- 9093292: add streaming options to thread.post() with platform-specific namespacing +- 7e90d9c: Add Socket Mode support for environments behind firewalls that can't expose public HTTP endpoints, and add `{ action: "clear" }` modal response to close the entire modal view stack +- bca4792: Allow `task_update` streaming chunks to include optional `details` text for Slack task cards +- 37dbb4a: Add `thread.getParticipants()` to get unique human participants in a thread +- 608d5f0: Add `chat.thread(threadId)` method to create Thread handles outside of webhook contexts +- a179b29: Implement external_select block kit for Slack +- a8f2aab: Allow `plan.updateTask()` to target a specific task by ID via `{ id: taskId }` instead of always updating the last in_progress task + +### Patch Changes + +- 8a0c7b3: Fix Slack structured streaming when `thread.post(stream)` is called from a handler created by an interactive (`block_actions`) payload. + The team ID is now resolved from `team.id` in addition to `team_id` / `team`. +- d630e6c: fix(chat): honor `concurrency.maxConcurrent` in the `concurrent` strategy. The cap was documented but never applied, so handlers dispatched unbounded. Also warns when `maxConcurrent` is paired with a non-`concurrent` strategy (previously ignored silently) and throws on `maxConcurrent < 1` to prevent a deadlock. + ## 4.26.0 ### Minor Changes diff --git a/packages/chat/package.json b/packages/chat/package.json index 54d03c80..a6ec615f 100644 --- a/packages/chat/package.json +++ b/packages/chat/package.json @@ -1,6 +1,6 @@ { "name": "chat", - "version": "4.26.0", + "version": "4.27.0", "description": "Unified chat abstraction for Slack, Teams, Google Chat, and Discord", "type": "module", "main": "./dist/index.js", diff --git a/packages/state-ioredis/CHANGELOG.md b/packages/state-ioredis/CHANGELOG.md index c972cd94..b8b6e6c5 100644 --- a/packages/state-ioredis/CHANGELOG.md +++ b/packages/state-ioredis/CHANGELOG.md @@ -1,5 +1,25 @@ # @chat-adapter/state-ioredis +## 4.27.0 + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/state-ioredis/package.json b/packages/state-ioredis/package.json index d27482fd..7ad0122c 100644 --- a/packages/state-ioredis/package.json +++ b/packages/state-ioredis/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/state-ioredis", - "version": "4.26.0", + "version": "4.27.0", "description": "ioredis state adapter for chat (production)", "type": "module", "main": "./dist/index.js", diff --git a/packages/state-memory/CHANGELOG.md b/packages/state-memory/CHANGELOG.md index 4db6d9c1..c3822109 100644 --- a/packages/state-memory/CHANGELOG.md +++ b/packages/state-memory/CHANGELOG.md @@ -1,5 +1,25 @@ # @chat-adapter/state-memory +## 4.27.0 + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/state-memory/package.json b/packages/state-memory/package.json index 06cec5b0..f3f608c5 100644 --- a/packages/state-memory/package.json +++ b/packages/state-memory/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/state-memory", - "version": "4.26.0", + "version": "4.27.0", "description": "In-memory state adapter for chat (development/testing)", "type": "module", "main": "./dist/index.js", diff --git a/packages/state-pg/CHANGELOG.md b/packages/state-pg/CHANGELOG.md index d4667b50..01d5e5ab 100644 --- a/packages/state-pg/CHANGELOG.md +++ b/packages/state-pg/CHANGELOG.md @@ -1,5 +1,25 @@ # @chat-adapter/state-pg +## 4.27.0 + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/state-pg/package.json b/packages/state-pg/package.json index 4b37caf1..d7761e13 100644 --- a/packages/state-pg/package.json +++ b/packages/state-pg/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/state-pg", - "version": "4.26.0", + "version": "4.27.0", "description": "Postgres state adapter for chat (production)", "type": "module", "main": "./dist/index.js", diff --git a/packages/state-redis/CHANGELOG.md b/packages/state-redis/CHANGELOG.md index 1cfde0f4..22ef9dab 100644 --- a/packages/state-redis/CHANGELOG.md +++ b/packages/state-redis/CHANGELOG.md @@ -1,5 +1,25 @@ # @chat-adapter/state-redis +## 4.27.0 + +### Patch Changes + +- Updated dependencies [8a0c7b3] +- Updated dependencies [1e7c551] +- Updated dependencies [b0ab804] +- Updated dependencies [d630e6c] +- Updated dependencies [b9a1961] +- Updated dependencies [a520797] +- Updated dependencies [70281dc] +- Updated dependencies [9093292] +- Updated dependencies [7e90d9c] +- Updated dependencies [bca4792] +- Updated dependencies [37dbb4a] +- Updated dependencies [608d5f0] +- Updated dependencies [a179b29] +- Updated dependencies [a8f2aab] + - chat@4.27.0 + ## 4.26.0 ### Patch Changes diff --git a/packages/state-redis/package.json b/packages/state-redis/package.json index bbcf4749..7568d779 100644 --- a/packages/state-redis/package.json +++ b/packages/state-redis/package.json @@ -1,6 +1,6 @@ { "name": "@chat-adapter/state-redis", - "version": "4.26.0", + "version": "4.27.0", "description": "Redis state adapter for chat (production)", "type": "module", "main": "./dist/index.js",