Commit Graph

308 Commits

Author SHA1 Message Date
John Pham 16010246ee fix(gchat): convert **bold** to *bold* in Card text blocks
test(slack,gchat): add comprehensive markdown bold conversion tests
2026-02-20 10:37:23 -08:00
John Pham 5c3f5bc63b 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.
2026-02-20 10:25:26 -08:00
John Pham ed7c63d8fc fix: pass waitUntil to assistant thread started handlers 2026-02-19 16:06:53 -08:00
John Pham 58ae5cc804 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
2026-02-19 12:02:35 -08:00
github-actions[bot] c0c0b1ec6f Version Packages (#53)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
chat@4.12.0 @chat-adapter/teams@4.12.0 @chat-adapter/state-redis@4.12.0 @chat-adapter/state-memory@4.12.0 @chat-adapter/state-ioredis@4.12.0 @chat-adapter/slack@4.12.0 @chat-adapter/shared@4.12.0 @chat-adapter/linear@4.12.0 @chat-adapter/github@4.12.0 @chat-adapter/gchat@4.12.0 @chat-adapter/discord@4.12.0
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
Hayden Bleasel df8c9977e4 Create Code Review Bot guide 2026-02-17 15:33:57 -08:00
Hayden Bleasel 8d69aff257 Update biome.json 2026-02-17 15:01:05 -08:00
Hayden Bleasel 1a8a9c0bfd Restore getting-started with links to guides 2026-02-17 14:08:21 -08:00
Hayden Bleasel 03f403dd83 Update slack-nextjs.mdx 2026-02-17 14:05:05 -08:00
Hayden Bleasel 9603f00cfb Update slack-nextjs.mdx 2026-02-17 14:01:54 -08:00
Hayden Bleasel d69e479794 Deprecate getting-started in favor of nextjs-slack guide 2026-02-17 14:01:08 -08:00
Hayden Bleasel 3514ac97f5 Update slack.mdx 2026-02-17 13:58:38 -08:00
Hayden Bleasel 464500d083 Update getting-started.mdx 2026-02-17 13:53:28 -08:00
Hayden Bleasel 4468ab6297 Update geistdocs.tsx 2026-02-17 13:13:28 -08:00
Hayden Bleasel 6a9af18a8d Update geistdocs.tsx 2026-02-17 13:11:41 -08:00
Hayden Bleasel 0edc599927 Docs updates (#52)
* Update meta.json

* Create posting-messages.mdx

* Colocate Slack app info

* Improve feature matrix

* Create API Reference

* Update for Channels

* Draft first guide

* Update Geistdocs
2026-02-17 13:01:15 -08:00
Hayden Bleasel d7ee1379e0 Merge pull request #49 from vercel-labs/docs
Docs
2026-02-16 18:02:21 -08:00
Hayden Bleasel d39c0820b7 Update knip.json 2026-02-16 17:33:08 -08:00
Hayden Bleasel 63afae427b Misc fixes 2026-02-16 17:30:07 -08:00
Hayden Bleasel 7e8edcca39 Delete biome.jsonc 2026-02-16 17:26:30 -08:00
Hayden Bleasel 00db398401 Improve Terminal code blocks 2026-02-16 17:22:09 -08:00
Hayden Bleasel ba901beebe Add code block titles and line numbers 2026-02-16 17:20:28 -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
Hayden Bleasel d2eec0cfd1 Update meta.json 2026-02-16 17:08:08 -08:00
Hayden Bleasel d83dfebf07 Destructure state adapters 2026-02-16 17:07:25 -08:00
Hayden Bleasel f156882de6 Destructure adapters 2026-02-16 17:03:08 -08:00
Hayden Bleasel 426a8f62ef Update geistdocs.tsx 2026-02-16 16:55:24 -08:00
Hayden Bleasel 7e3c2b2a04 Draft initial docs 2026-02-16 16:53:47 -08:00
Hayden Bleasel e6973a3d8c Update .gitignore 2026-02-16 16:53:22 -08:00
Hayden Bleasel 45c4705a63 Remove .source 2026-02-16 16:53:16 -08:00
Hayden Bleasel 96d0afbfbb gitignore fixes 2026-02-16 16:44:06 -08:00
Hayden Bleasel 8ab92ac468 Delete turbo.json 2026-02-16 16:43:02 -08:00
Hayden Bleasel 9265a6af25 Remove duplicate lockfile 2026-02-16 16:42:44 -08:00
Hayden Bleasel 3eba2f5943 Update package.json 2026-02-16 16:42:22 -08:00
Hayden Bleasel 7f3bf039bd Scaffold Geistdocs app 2026-02-16 16:41:54 -08:00
Hayden Bleasel cfedb19879 Update pnpm-workspace.yaml 2026-02-16 16:41:46 -08:00
github-actions[bot] 5a7a925983 Version Packages (#48)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
chat@4.11.0 @chat-adapter/teams@4.11.0 @chat-adapter/state-redis@4.11.0 @chat-adapter/state-memory@4.11.0 @chat-adapter/state-ioredis@4.11.0 @chat-adapter/slack@4.11.0 @chat-adapter/shared@4.11.0 @chat-adapter/linear@4.11.0 @chat-adapter/github@4.11.0 @chat-adapter/gchat@4.11.0 @chat-adapter/discord@4.11.0
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>
chat@4.10.1 @chat-adapter/state-redis@4.10.1 @chat-adapter/state-memory@4.10.1 @chat-adapter/state-ioredis@4.10.1 @chat-adapter/teams@4.10.1 @chat-adapter/slack@4.10.1 @chat-adapter/shared@4.10.1 @chat-adapter/linear@4.10.1 @chat-adapter/github@4.10.1 @chat-adapter/gchat@4.10.1 @chat-adapter/discord@4.10.1
2026-02-14 21:53:20 -08:00
Vishal Yathish c99b183b19 [chat] add changeset for modals from ephemeral messages (#43) 2026-02-14 21:46:37 -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>
@chat-adapter/discord@4.10.0 chat@4.10.0 @chat-adapter/teams@4.10.0 @chat-adapter/state-redis@4.10.0 @chat-adapter/state-memory@4.10.0 @chat-adapter/state-ioredis@4.10.0 @chat-adapter/slack@4.10.0 @chat-adapter/shared@4.10.0 @chat-adapter/linear@4.10.0 @chat-adapter/github@4.10.0 @chat-adapter/gchat@4.10.0
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
John Pham 2e0f400386 Merge pull request #38 from vercel-labs/changeset-release/main
Version Packages
@chat-adapter/state-ioredis@4.9.1 @chat-adapter/linear@4.9.1 @chat-adapter/shared@4.9.1 @chat-adapter/slack@4.9.1 @chat-adapter/github@4.9.1 @chat-adapter/state-memory@4.9.1 @chat-adapter/state-redis@4.9.1 @chat-adapter/teams@4.9.1 chat@4.9.1 @chat-adapter/gchat@4.9.1 @chat-adapter/discord@4.9.1
2026-02-12 13:44:21 -08:00
github-actions[bot] 34cb4cd0da Version Packages 2026-02-12 21:34:50 +00:00
John Pham e90a065493 Merge pull request #37 from vercel-labs/johnphamous/exclude-actions-from-fallback-text
Exclude action buttons from fallback text
2026-02-12 13:30:11 -08: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