Commit Graph

211 Commits

Author SHA1 Message Date
github-actions[bot] 7fb3248a31 Version Packages (#89)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-23 19:12:59 -08:00
Malte Ubl 9affdf3a55 Make the logger optional and infer most adapter config (#88)
* Make the logger optional and infer most adapter config

* Fix init
2026-02-23 17:48:41 -08:00
github-actions[bot] 6d38779543 Version Packages (#86)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-23 14:29:17 -08:00
Vishal Yathish ce33270722 [chat] add currentMessage to serialized thread (#85)
* [chat] add currentMessage to serialized thread

* documentation

* remove

* changeset
2026-02-23 14:11:04 -08:00
github-actions[bot] 1b23565262 Version Packages (#84)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-22 19:40:32 -08:00
Malte Ubl 94ab8270be Delete listSubscriptions from state adapter. It was unused (#83) 2026-02-21 16:32:28 -08:00
Hayden Bleasel dfb2b02668 Migrate to Vercel 2026-02-20 22:07:19 -08:00
Hayden Bleasel e970a6939b Upgrade Biome configuration to use Ultracite preset (#81)
* Upgrade Biome to Ultracite

* Remove package commands

* Update biome.jsonc

* Update biome.jsonc

* Initial fixes

* Update biome.jsonc

* Remaining fixes

* Update pnpm-lock.yaml

* Fix commands

* Update knip.json

* Merge Claude files

* Fix skipped test

* Misc fixes
2026-02-20 22:01:10 -08:00
Hayden Bleasel a79ff81bcc Callout skill 2026-02-20 20:16:03 -08:00
Hayden Bleasel 2c05318ab7 Bake docs into chat package 2026-02-20 20:02:41 -08:00
Hayden Bleasel 1348532068 Open Source Beta Prep (#73)
* Update docs - Slack Assistants API, App Home tab, Stream stop blocks

* Update README.md

* Update package readmes, fix readme integration test

* Add npm badges to all package READMEs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add test coverage to all packages

* Create CODE_OF_CONDUCT.md

* Create pull_request_template.md

* Create issue templates

* Create config.yml

* Add unit tests for errors, singleton, logger, message, modals, gchat utils, and teams markdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add a vitest:workspace command

* Misc URL fixes

* Update CONTRIBUTING.md

* Misc fixes, upgrade workflow/serde

* Replace PII in integration test data

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:25:09 -08:00
github-actions[bot] 4768add423 Version Packages (#72)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 11:21:15 -08:00
John Pham 09cdfa3f4b fix(slack,gchat): convert **bold** to *bold* in Card text blocks (#71)
* fix(slack): convert **bold** to *bold* in Card text blocks

Slack mrkdwn uses single asterisks for bold, not double.
CardText content with standard Markdown was rendering
literally instead of as bold. Applied conversion in
convertTextToBlock and convertFieldsToBlock.

* fix(gchat): convert **bold** to *bold* in Card text blocks
test(slack,gchat): add comprehensive markdown bold conversion tests

* fix: biome formatting in cards test

* add changeset

* fix: biome formatting in gchat cards test
2026-02-20 11:04:21 -08:00
github-actions[bot] 10a9b4bf9a Version Packages (#70)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 16:27:02 -08:00
John Pham f371c0d951 feat(slack): add assistant_thread_started event support (#54)
* feat(slack): full Slack Assistants API support

- Route assistant_thread_started + assistant_thread_context_changed
- Add onAssistantThreadStarted + onAssistantContextChanged handlers
- Add setSuggestedPrompts, setAssistantStatus, setAssistantTitle methods
- Extend stream() for Block Kit on stop (stopBlocks)
- Bump @slack/web-api to ^7.11.0 for chatStream
- 14 integration tests

* fix: pass waitUntil to assistant thread started handlers
2026-02-19 16:18:05 -08:00
github-actions[bot] c0c0b1ec6f Version Packages (#53)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-18 11:40:12 -08:00
John Pham 283edba8ab feat(slack): enable DM support (#39)
* feat(slack): enable DM support with per-thread IDs and implicit mentions

DMs now use per-message threadTs (same as channels) instead of collapsing
all DM messages into one thread. Each top-level DM starts a new conversation;
thread replies continue the same conversation.

DM messages automatically set isMention=true so bots process them without
requiring @mention — natural for 1:1 conversations.

* fix: use empty threadTs for top-level DMs, thread_ts for replies

Top-level DM messages use empty threadTs to match openDM() subscriptions.
DM thread replies use thread_ts for per-conversation isolation.
Fixes integration test replay-dm.test.ts.

* style: fix biome formatting

* test: add e2e replay tests for direct DM implicit mention

* style: fix extra blank line lint error

* test: use real recorded DM fixtures for e2e tests
2026-02-18 11:30:22 -08:00
Vishal Yathish 8c50252d00 [chat] add support for slash commands (#50)
* [chat] add support for slash commands

* add comprehensive tests

* add documentation

* adding changeset
2026-02-18 08:32:44 -08:00
Malte Ubl 446df01e75 [RFC] Add Channel abstraction as first-class citizen alongside Thread (#46)
* [chat] add Channel abstraction as first-class citizen alongside Thread

Introduces a Channel concept — the container that holds threads — enabling
channel-level operations, thread-to-channel navigation, and natural support
for threadless platforms (iMessage, WhatsApp, SMS).

Design:

- Postable base interface: shared by both Thread and Channel, providing id,
  adapter, isDM, state/setState, messages (newest-first async iterator),
  post, postEphemeral, startTyping, mentionUser. Enables polymorphic code
  that works with either entity.

- Channel interface (extends Postable): adds name, threads() async iterator,
  and fetchInfo(). ChannelImpl provides the concrete implementation with
  backward message pagination, thread listing, posting, state management
  (channel-state: key prefix), and workflow serialization (chat:Channel).

- Thread updates: Thread now extends Postable and gains a `channel` getter
  (lazy-created, cached ChannelImpl) and a `messages` getter (newest-first
  backward iterator) alongside the existing `allMessages` (oldest-first).

- Channel ID format: derived from thread IDs by dropping the thread part.
  Default: first two colon-separated parts (slack:C123, gchat:spaces/ABC).
  Adapters override via optional channelIdFromThreadId() method.

- Adapter interface additions (all optional): channelIdFromThreadId,
  fetchChannelMessages, listThreads, fetchChannelInfo, postChannelMessage.

- Chat class: chat.channel(channelId) method creates a Channel by ID,
  auto-inferring adapter from the prefix. Reviver handles chat:Channel.

- Slack adapter: implements all five channel methods using
  conversations.history (vs conversations.replies for threads),
  conversations.info, and chat.postMessage without thread_ts.

- Mock adapter: updated with all channel methods for testing.

- 32 new tests covering ChannelImpl, thread.channel, deriveChannelId,
  and the backward messages iterator.

Usage:

  // Navigate from thread to channel
  const channel = thread.channel;

  // Get a channel directly
  const channel = chat.channel("slack:C123ABC");

  // Iterate messages newest first
  for await (const msg of channel.messages) { ... }

  // List threads in a channel
  for await (const t of channel.threads()) { ... }

  // Post to channel top-level
  await channel.post("Hello channel!");

TODO:
- Add replay tests for channel operations against recorded webhook data
- Implement channel methods in non-Slack adapters (GChat, Teams, Discord,
  GitHub, Linear) — currently they fall back to the default/no-op behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* channel-post-sample

* Better metadata

* Fix bug

* Fixes

* Other adapters

* Fix-gchat

* Fix-discord

* Fix-discord-threads

* Discord replay

* Teams tests and fix pre-existing failures

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-16 17:09:51 -08:00
github-actions[bot] 5a7a925983 Version Packages (#48)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-15 17:25:51 -08:00
Vishal Yathish 417374b844 [chat] add inline select components (#45)
* [chat] add inline select components

* changeset

* adding radio buttons

* adding unit tests

* add documentation for the new components

* add replay tests
2026-02-15 17:18:53 -08:00
github-actions[bot] 25bf3765fd Version Packages (#44)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-14 21:53:20 -08:00
Vishal Yathish f7cdd29641 [modals] enable modals from ephemeral messages (#42)
* [modals] enable modals from ephemeral messages

* add replay tests

* edit in place
2026-02-14 21:40:58 -08:00
github-actions[bot] b670cb18b6 Version Packages (#41)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-14 17:23:32 -08:00
Nicolás Montone c7d51cb8f4 add support for privatemetadata in slack adapter (#40)
* add private metadata in chat adapter

* add test on jsx runtime

* changeset
2026-02-14 17:17:03 -08:00
github-actions[bot] 34cb4cd0da Version Packages 2026-02-12 21:34:50 +00:00
John Pham b0ba19a874 Fix gchat and slack adapter test assertions 2026-02-12 11:54:20 -08:00
John Pham 8c03dd65e5 Fix actions fallback in all adapters and core package
Discord, Linear, GitHub adapters and core chat package each had
their own childToFallbackText with the same [label] pattern.
2026-02-12 11:17:55 -08:00
John Pham 84fdddc1b6 Fix teams adapter test for actions fallback change 2026-02-12 11:00:29 -08:00
John Pham 18ce1d070e Exclude actions from card fallback text
Action buttons (e.g. Cancel) were showing as [Cancel] in Slack
notification previews. The fallback text field powers notifications
and screen readers where buttons aren't actionable — strip them.
2026-02-12 10:45:04 -08:00
github-actions[bot] 5d9ce3044d Version Packages 2026-02-10 02:17:57 +00:00
Nicolás Montone 43172e7b89 formatting fix 2026-02-09 18:05:44 -08:00
Nicolás Montone 06b152abff add multi-workspace e2e 2026-02-09 15:29:53 -08:00
Nicolás Montone 5ed3ed9126 add example 2026-02-09 14:03:50 -08:00
Nicolás Montone 935600514e Add multi-workspace support to slack adapter 2026-02-09 13:02:38 -08:00
github-actions[bot] 37783fa1a5 Version Packages 2026-02-06 20:20:05 +00:00
John Pham b9abd8b3a2 fix: prevent double-wrapping of Slack mentions
The mention regex /@(\w+)/g matched @user even inside existing
<@user> format, producing <<@user>>. Slack renders the doubled
brackets as literal < > around the mention.

Add negative lookbehind (?<!<) to skip already-wrapped mentions.
2026-02-06 10:47:27 -08:00
Fernando Rojo acf570ac40 Merge pull request #30 from vercel-labs/f/linear
feat: add Linear adapter
2026-02-06 12:42:56 -05:00
github-actions[bot] 5189f6f216 Version Packages (#31)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-05 17:41:12 -08:00
Vishal Yathish efaa9162d3 [bugfix] slack API does not send team ID in event payload when files attached on thread start (#28)
* [slack] slack API does not send team ID in event payload when files attached on mention

* changeset
2026-02-05 17:10:29 -08:00
Fernando Rojo 8531b02f13 readme 2026-02-05 20:07:34 -05:00
Fernando Rojo e8ec9cd901 oauth 2026-02-05 20:06:55 -05:00
Fernando Rojo 0392ad6701 linear threads 2026-02-05 19:58:09 -05:00
Fernando Rojo 154dda0965 linear 2026-02-05 19:52:12 -05:00
Fernando Rojo d4db2ff47e fix: rendering 2026-01-31 22:06:48 -05:00
Fernando Rojo 0b4899c8fc emoji support 2026-01-31 21:33:28 -05:00
Fernando Rojo 5b0f3f5a94 fixes 2026-01-31 21:24:21 -05:00
Fernando Rojo 4d5d1f3701 support ping event 2026-01-31 19:05:59 -05:00
Fernando Rojo 1fb8fd2a50 github 2026-01-31 19:02:43 -05:00
github-actions[bot] a49a7f0b18 Version Packages (#26)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-23 22:41:41 -08:00