Peter Steinberger
e5c8abab9e
fix: preserve markdown code fences
2026-01-15 00:31:07 +00:00
Peter Steinberger
bd7d362d3b
refactor: unify markdown formatting pipeline
2026-01-15 00:31:07 +00:00
Peter Steinberger
dadef27d7a
fix(slack): drop mismatched Socket Mode events ( #889 )
...
Filter Slack Socket Mode events by api_app_id/team_id.
Refs: #828
Contributor: @roshanasingh4
Co-authored-by: Roshan Singh <roshanasingh4@users.noreply.github.com>
2026-01-14 15:54:37 +00:00
Peter Steinberger
c379191f80
chore: migrate to oxlint and oxfmt
...
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
2026-01-14 15:02:19 +00:00
Peter Steinberger
ebea98b8ec
test(slack): rename split suites
2026-01-14 05:40:55 +00:00
Peter Steinberger
bcbfb357be
refactor(src): split oversized modules
2026-01-14 01:17:56 +00:00
Peter Steinberger
90342a4f3a
refactor!: rename chat providers to channels
2026-01-13 08:40:39 +00:00
Shadow
68569afb4b
Slack: accept slash command names with or without leading slash
...
Closes #798
2026-01-12 21:27:04 -06:00
Peter Steinberger
dd8f7552ad
refactor: reuse dispatcher helper for native commands
2026-01-13 01:07:59 +00:00
Peter Steinberger
6a48688c09
fix: stream native slash tool replies
2026-01-13 00:53:30 +00:00
Peter Steinberger
4f3bedfdb7
fix: align discord autoThread config types
2026-01-13 00:22:42 +00:00
Peter Steinberger
a4bd960880
refactor: streamline thread reply planning
2026-01-13 00:15:29 +00:00
Peter Steinberger
bb9a9633a8
fix: align reply threading refs
2026-01-12 23:41:40 +00:00
Peter Steinberger
59c8d2d17f
docs: clarify sandbox bind mounts ( #790 )
2026-01-12 22:06:35 +00:00
Peter Steinberger
26d5cca97c
feat: auto native commands defaults
2026-01-12 21:49:44 +00:00
Peter Steinberger
9554292083
fix: default groupPolicy to open
2026-01-12 08:55:02 +00:00
Peter Steinberger
98e75fce17
test: align group policy defaults
2026-01-12 08:45:57 +00:00
Peter Steinberger
842e91d019
fix: default groupPolicy to allowlist
2026-01-12 08:22:01 +00:00
Peter Steinberger
e0bf86f06c
feat: improve gateway services and auto-reply commands
2026-01-11 02:27:16 +01:00
Peter Steinberger
7c76561569
fix: dedupe inbound messages across providers
2026-01-11 00:12:25 +01:00
Peter Steinberger
82f71d25e5
refactor: centralize history context wrapping
2026-01-10 19:16:26 +01:00
Peter Steinberger
b977ae19af
chore: fix lint and typing
2026-01-10 19:16:25 +01:00
Peter Steinberger
d41372b9d9
feat: unify provider history context
2026-01-10 19:16:25 +01:00
Lloyd
ab994d2c63
feat(agent): add human-like delay between block replies
...
Adds `agent.humanDelay` config option to create natural rhythm between
streamed message bubbles. When enabled, introduces a random delay
(default 800-2500ms) between block replies, making multi-message
responses feel more like natural human texting.
Config example:
```json
{
"agent": {
"blockStreamingDefault": "on",
"humanDelay": {
"enabled": true,
"minMs": 800,
"maxMs": 2500
}
}
}
```
- First message sends immediately
- Subsequent messages wait a random delay before sending
- Works with iMessage, Signal, and Discord providers
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:12:50 +01:00
Peter Steinberger
4f79122068
test: stabilize gateway mock + lint
2026-01-10 03:14:13 +00:00
Peter Steinberger
f241859c98
fix: relax fetch typing for Bun
2026-01-10 04:01:06 +01:00
Peter Steinberger
f28a4a34ad
refactor: unify inline directives and media fetch
2026-01-10 03:01:04 +01:00
Peter Steinberger
38e2362be6
fix: remove ack reactions after reply ( #633 ) (thanks @levifig)
2026-01-10 02:14:14 +01:00
Levi Figueira
b5858c0148
feat: add removeAckAfterReply option for Discord, Slack, and Telegram
...
Add `messages.removeAckAfterReply` config option to automatically remove
acknowledgment reactions after the bot sends a reply, reducing visual
clutter while still providing immediate feedback.
Platforms: Discord, Slack, Telegram
Implementation:
- Added removeAckAfterReply boolean field to MessagesConfig (default: false)
- Track ack reaction state in all three platform handlers
- Remove ack reaction after successful reply delivery
- Graceful error handling with verbose logging
Platform-specific:
- Discord: uses removeReactionDiscord()
- Slack: uses removeSlackReaction()
- Telegram: uses setMessageReaction() with empty array
Closes #627
2026-01-10 02:13:46 +01:00
Peter Steinberger
96e17d407a
fix: filter NO_REPLY prefixes
2026-01-09 23:29:05 +00:00
Peter Steinberger
6c7a27c010
refactor: normalize main session key handling
2026-01-09 22:30:15 +01:00
Peter Steinberger
84046cbad8
fix(slack): mrkdwn + thread edge cases ( #464 ) (thanks @austinm911)
2026-01-09 22:09:02 +01:00
Austin Mudd
8ae0429162
Slack: add mrkdwn formatter for proper bold/italic/strikethrough rendering
2026-01-09 21:59:51 +01:00
Austin Mudd
909c14d443
fix: resolve merge conflicts and fix threading tests
...
- Update MessageToolOptions type to include Slack threading options
- Remove duplicate threadTs property in slack/actions.ts
- Fix replyThreadTs parameter name in monitor.ts
- Update test to correctly verify 'first' mode threading behavior:
- 'off' mode: no threading unless already in a thread
- 'first' mode: first reply starts a thread
- Add new test case for 'first' mode threading
2026-01-09 21:59:51 +01:00
Austin Mudd
b4663ed11c
Slack: implement replyToMode threading for tool path
...
- Add shared hasRepliedRef state between auto-reply and tool paths
- Extract buildSlackThreadingContext helper in agent-runner.ts
- Extract resolveThreadTsFromContext helper in slack-actions.ts
- Update docs with clear replyToMode table (off/first/all)
- Add tests for first mode behavior across multiple messages
2026-01-09 21:59:51 +01:00
Austin Mudd
1be8d06cca
Slack: expose threadTs in agent sendMessage tool for thread replies
2026-01-09 21:59:27 +01:00
Peter Steinberger
72b0777341
fix(messages): restore explicit responsePrefix default
2026-01-09 19:18:34 +00:00
Jake
a05916bee8
Config: add support for per-provider blockStreaming override
2026-01-09 18:11:27 +00:00
Peter Steinberger
d099dabf37
refactor: centralize slack threading helpers
2026-01-09 16:01:53 +00:00
Peter Steinberger
36bdec0f2c
refactor(messages): centralize per-agent prefixes
2026-01-09 16:54:54 +01:00
Peter Steinberger
1eecce9a15
Merge pull request #578 from p6l-richard/feature/identity-based-message-prefix
...
fix(messages): derive messagePrefix from identity.name
2026-01-09 15:40:52 +00:00
Peter Steinberger
66bbb723c5
fix: derive prefixes from routed identity ( #578 ) (thanks @p6l-richard)
2026-01-09 16:39:32 +01:00
Peter Steinberger
facf5c09a0
fix: honor slack reply threading ( #574 , thanks @bolismauro)
2026-01-09 15:38:43 +00:00
Mauro Bolis
96149d1f71
fix: honor slack reply threading
2026-01-09 15:35:54 +00:00
Peter Steinberger
7b81d97ec2
feat: wire multi-agent config and routing
...
Co-authored-by: Mark Pors <1078320+pors@users.noreply.github.com>
2026-01-09 12:48:42 +00:00
Peter Steinberger
721183e259
feat: unify message cli and tools
2026-01-09 08:30:24 +01:00
Peter Steinberger
3a99ac7e9a
fix: honor mention-bypass for group commands
2026-01-09 02:52:44 +01:00
Peter Steinberger
e5dbba7b67
fix: sort imports for lint
2026-01-09 00:57:17 +01:00
Peter Steinberger
7ece3717e6
refactor(pairing): centralize reply formatting
2026-01-08 23:29:23 +00:00
Peter Steinberger
e0439df4ce
feat(pairing): show sender ids across providers
2026-01-08 23:19:13 +00:00
Peter Steinberger
014667e00b
fix: tighten group elevated targeting
2026-01-08 22:57:18 +01:00
Peter Steinberger
8930ec32cb
feat: add slack multi-account routing
2026-01-08 08:49:16 +01:00
Peter Steinberger
05b8679c8b
feat: add providers CLI and multi-account onboarding
2026-01-08 01:55:59 +01:00
Peter Steinberger
d81cb886ce
fix: polish thread session routing
2026-01-07 20:09:57 +01:00
Peter Steinberger
cb9f8146c4
refactor: centralize thread helpers
2026-01-07 20:01:19 +01:00
Peter Steinberger
42b637bbc8
test: cover thread session routing
2026-01-07 19:50:17 +01:00
Peter Steinberger
0d021391a9
fix: scope thread sessions and discord starter fetch
2026-01-07 19:42:50 +01:00
Shadow
7e5cef29a0
Threads: add Slack/Discord thread sessions
2026-01-07 19:30:30 +01:00
Peter Steinberger
1011640a13
refactor: drop autoReply, add topic requireMention
...
Co-authored-by: kitze <kristijan.mkd@gmail.com>
2026-01-07 12:07:15 +01:00
Peter Steinberger
43c6bb7595
feat: add channel/topic overrides for skills + auto-reply
2026-01-07 11:44:37 +01:00
Josh Lehman
2d67ec5bfa
fix(routing): only route to originating channel when cross-provider
...
When OriginatingChannel matches Surface (same provider), use normal
dispatcher. Only route via routeReply() when they differ, ensuring
cross-provider messages (e.g., Telegram queued while Slack active)
get routed back to their origin.
2026-01-07 04:51:33 +00:00
Josh Lehman
9d50ebad7d
feat(routing): route replies to originating channel
...
Implement reply routing based on OriginatingChannel/OriginatingTo fields.
This ensures replies go back to the provider where the message originated
instead of using the session's lastChannel.
Changes:
- Add OriginatingChannel/OriginatingTo fields to MsgContext (templating.ts)
- Add originatingChannel/originatingTo fields to FollowupRun (queue.ts)
- Create route-reply.ts with provider-agnostic router
- Update all providers (Telegram, Slack, Discord, Signal, iMessage)
to pass originating channel info
- Update reply.ts to pass originating channel to followupRun
- Update followup-runner.ts to use route-reply for originating channels
This addresses the issue where messages from one provider (e.g., Slack)
would receive replies on a different provider (e.g., Telegram) because
the queue used the last active dispatcher instead of the originating one.
2026-01-07 04:51:33 +00:00
Peter Steinberger
42ae2341aa
fix: harden pairing flow
2026-01-07 05:06:04 +01:00
Peter Steinberger
3afef2d504
feat: unify provider reaction tools
2026-01-07 04:16:39 +01:00
Peter Steinberger
e0efcda77f
fix(commands): wire /stop across chat commands
2026-01-06 23:11:57 +00:00
Peter Steinberger
84c8209158
fix(slack): clear assistant thread status after replies
2026-01-06 21:41:30 +01:00
Shadow
8ebc789d25
Slack: send assistant thread status while typing
2026-01-06 21:34:52 +01:00
Shadow
9b22e1f6e9
feat(commands): unify chat commands ( #275 )
...
* Chat commands: registry, access groups, Carbon
* Chat commands: clear native commands on disable
* fix(commands): align command surface typing
* docs(changelog): note commands registry (PR #275 )
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-06 20:17:56 +00:00
Peter Steinberger
67bda21811
fix: preserve markdown fences when chunking
2026-01-06 20:23:41 +01:00
Peter Steinberger
dbfa316d19
feat: multi-agent routing + multi-account providers
2026-01-06 18:33:37 +00:00
Peter Steinberger
967cef80bc
fix(security): lock down inbound DMs by default
2026-01-06 17:51:56 +01:00
Simon Kelly
5aa1ed2c96
fix(slack): use named import for @slack/bolt App class ( #299 )
...
* fix(slack): use named import for @slack/bolt App class
The default import `import bolt from '@slack/bolt'` followed by
`const { App } = bolt` doesn't work correctly in Bun due to ESM/CJS
interop issues. The default export comes through as a function rather
than the module object.
Switching to a named import `import { App } from '@slack/bolt'`
resolves the issue and allows the Slack provider to start successfully.
* fix(slack): align Bolt mock with named App export
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-06 14:22:14 +00:00
Peter Steinberger
dbb51006cd
feat: unify group policy allowlists
2026-01-06 06:40:42 +00:00
Peter Steinberger
53c9feb597
test: cover slack thread reply routing
2026-01-06 05:11:06 +01:00
Steve Caldwell
7034d4f807
fix(slack): preserve thread context in auto-replies
...
When replying to a message in a Slack thread, the response now stays
in the thread instead of going to the channel root.
Only threads replies when the incoming message was already in a thread
(has thread_ts). Top-level messages get top-level replies.
Fixes #250
2026-01-06 05:09:04 +01:00
Peter Steinberger
13eb9c9ee9
refactor: centralize reply dispatch
2026-01-06 04:55:00 +01:00
Peter Steinberger
1a4f7d3388
feat: add ack reaction defaults
2026-01-06 03:28:47 +00:00
Peter Steinberger
811ec8b78b
fix: unify mention gating across providers
2026-01-06 01:32:17 +01:00
Peter Steinberger
5356adba8f
fix: keep Slack thread replies in thread
2026-01-06 01:09:25 +01:00
Peter Steinberger
c75b2a7067
refactor: unify reply dispatch across providers
2026-01-05 19:43:54 +01:00
Peter Steinberger
1bad96aa2b
style: tidy auto-reply imports and formatting
2026-01-05 01:46:16 +01:00
Peter Steinberger
50d26d827e
fix: avoid duplicate senderName in slack monitor
2026-01-05 00:43:31 +00:00
Peter Steinberger
852f947b44
fix: unify control command handling
2026-01-05 01:31:36 +01:00
Peter Steinberger
1657c5e3d2
fix: route system events per session
2026-01-04 22:11:04 +01:00
Peter Steinberger
476bbd2915
fix: update lockfile and lint
2026-01-04 14:12:00 +01:00
Peter Steinberger
b234d82bf3
fix: add slack deps and send helpers
2026-01-04 11:44:41 +00:00
Shadow
8c38a7fee8
Slack: add some fixes and connect it all up
2026-01-04 01:53:26 -06:00
Shadow
0085b2e0a9
Slack: refine scopes and onboarding
2026-01-04 07:22:02 +01:00