Peter Steinberger
8466e53b5d
fix: restore Anthropic OAuth tool dispatch
2026-01-10 04:01:00 +01:00
Peter Steinberger
8e63cd9a76
feat: improve tui status line
2026-01-10 03:53:32 +01:00
Peter Steinberger
2cfed7952e
test(telegram): relax media group timeouts on Windows
2026-01-10 02:32:03 +00:00
Peter Steinberger
8a5fb796c0
test(live): probe Read tool via gateway
2026-01-10 02:25:24 +00:00
Peter Steinberger
34664601e0
fix(auto-reply): default audioAsVoice to false
2026-01-10 02:25:19 +00:00
Peter Steinberger
d693f02fa7
fix(msteams): download image attachments reliably
2026-01-10 02:25:14 +00:00
Peter Steinberger
003cda73e8
style: fix biome formatting
2026-01-10 02:11:43 +00:00
Peter Steinberger
afe6f182ca
feat: show effective config in /debug
2026-01-10 03:10:14 +01:00
Peter Steinberger
5a6ae2624e
docs: add /config get alias
2026-01-10 03:10:14 +01:00
Peter Steinberger
2dc7872ad1
feat: auto-start sandbox browser
2026-01-10 02:06:21 +00:00
Peter Steinberger
8b579c91a5
feat: add /config chat config updates
2026-01-10 03:01:27 +01:00
Peter Steinberger
63b0a16357
feat(cli): colorize gateway health + daemon output
2026-01-10 03:01:27 +01:00
Peter Steinberger
f28a4a34ad
refactor: unify inline directives and media fetch
2026-01-10 03:01:04 +01:00
Peter Steinberger
4075895c4c
refactor: consolidate reply/media helpers
2026-01-10 02:41:16 +01:00
Peter Steinberger
9cd2662a86
refactor: centralize WhatsApp target normalization
2026-01-10 02:39:52 +01:00
Peter Steinberger
8f8caa8d89
test(telegram): relax media group test timeouts
2026-01-10 02:37:59 +01:00
Peter Steinberger
991f6dda38
Merge pull request #631 from imfing/fix-normalize
...
fix(whatsapp): normalize targets for groups and E.164
2026-01-10 01:27:33 +00:00
Peter Steinberger
2485701835
fix: hide tui reasoning label when off
2026-01-10 01:25:15 +00:00
Peter Steinberger
f634db5c17
fix: signal own reactions match uuid + phone ( #632 ) (thanks @neist)
...
Co-authored-by: neist <1029724+neist@users.noreply.github.com>
2026-01-10 02:24:57 +01:00
Xin
f0700e9778
fix: normalize WhatsApp targets for groups and E.164 ( #631 ) (thanks @imfing)
2026-01-10 02:22:13 +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
a29f5dda2e
test(live): gateway smoke across profile-key models
2026-01-10 01:09:41 +00:00
Peter Steinberger
623d1e11f1
refactor: centralize session agent resolution
2026-01-10 01:57:54 +01:00
Peter Steinberger
f4b3869f45
Merge pull request #490 from jarvis-medmatic/feat/audio-as-voice-tag
...
feat(telegram): `[[audio_as_voice]]` tag support
2026-01-10 00:52:02 +00:00
Peter Steinberger
c56b2f4bc1
fix: honor audio_as_voice streaming + parse tests ( #490 ) (thanks @jarvis-medmatic)
2026-01-10 01:50:33 +01:00
Peter Steinberger
cb10682d3e
fix(openai): avoid invalid reasoning replay
2026-01-10 00:45:10 +00:00
Jarvis
5fedfd8d15
chore: format audioAsVoice updates
...
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:44:57 +01:00
Jarvis
8c7d1781bc
fix(pi): preserve audio_as_voice tag
...
- Allow flag-only chunks so audio_as_voice propagates
- Keep reply item scan aware of empty audio tag blocks
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:43:51 +01:00
Jarvis
9a7f050568
refactor(telegram): centralize voice decisions
...
- Share voice compatibility decision logic across send + bot flows
- Keep voice fallback logging consistent
- Simplify voice handling in the audio send path
2026-01-10 01:43:23 +01:00
Jarvis
ce786762db
fix(telegram): guard voice note sends
2026-01-10 01:43:01 +01:00
Jarvis
2f036f7173
fix(audio): preserve audioAsVoice propagation
...
- Keep audioAsVoice-only payloads from being filtered out
- Allow empty payloads through when they carry the flag
- Remove temporary debug logs around audioAsVoice buffering
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:42:09 +01:00
Jarvis
05a99aa49b
feat(telegram): buffer audio blocks for [[audio_as_voice]] tag support
...
- Add [[audio_as_voice]] detection to splitMediaFromOutput()
- Pass audioAsVoice through onBlockReply callback chain
- Buffer audio blocks during streaming, flush at end with correct flag
- Non-audio media still streams immediately
- Fix: emit payloads with audioAsVoice flag even if text is empty
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:41:18 +01:00
Peter Steinberger
43975a39dc
fix: gate heartbeat prompt to default agent sessions ( #630 ) (thanks @adam91holt)
2026-01-10 01:32:58 +01:00
Adam Holt
c91ec2aab7
fix: only inject heartbeat prompt for default agent
...
The heartbeat prompt from agents.defaults.heartbeat.prompt was being
injected into the system prompt for ALL agents, causing non-default
agents to read the default agent's identity files and adopt its persona.
Now the heartbeat prompt is only included when the session's agent ID
matches the configured default agent. Other agents receive no heartbeat
section in their system prompt.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:32:30 +01:00
Peter Steinberger
5898304fa0
fix: abort runs between tool calls
2026-01-10 01:26:25 +01:00
Peter Steinberger
53ec8e36cb
refactor: centralize failover error parsing
2026-01-10 01:26:06 +01:00
Peter Steinberger
82ffcfb181
fix(web): show all WhatsApp shared contacts
2026-01-10 00:22:31 +00:00
Peter Steinberger
20d4773f14
fix(agents): require raw for gateway config.apply ( #566 ) (thanks @sircrumpet)
2026-01-10 00:21:15 +00:00
Peter Steinberger
52565864d1
Merge pull request #619 from rubyrunsstuff/fix/telegram-block-streaming
...
fix: enable block streaming for Telegram when streamMode is 'block'
2026-01-10 00:16:04 +00:00
Peter Steinberger
1fd7a6e310
fix: keep telegram streamMode draft-only ( #619 ) (thanks @rubyrunsstuff)
2026-01-10 01:14:40 +01:00
Peter Steinberger
08015fbce6
Merge pull request #544 from jeffersonwarrior/fix/cloud-code-assist-api-errors
...
Fix Cloud Code Assist API errors (429/400)
2026-01-10 00:13:46 +00:00
Peter Steinberger
a9bd01b523
refactor: unify contact list summaries
2026-01-10 01:13:38 +01:00
Peter Steinberger
251ed83680
fix: harden Cloud Code Assist failover ( #544 ) (thanks @jeffersonwarrior)
2026-01-10 01:12:46 +01:00
Peter Steinberger
d75b302699
style: fix pi-embedded-runner formatting ( #623 ) (thanks @magimetal)
2026-01-10 01:12:22 +01:00
Ruby
b4fbf2fe0d
fix: enable block streaming for Telegram when streamMode is 'block'
...
- Fix disableBlockStreaming logic in telegram/bot.ts to properly enable
block streaming when telegram.streamMode is 'block' regardless of
blockStreamingDefault setting
- Set minChars default to 1 for Telegram block mode so chunks send
immediately on newlines/sentences instead of waiting for 800 chars
- Skip coalescing for Telegram block mode when not explicitly configured
to reduce chunk batching delays
- Fix newline preference to wait for actual newlines instead of breaking
on any whitespace when buffer is under maxChars
Fixes issue where all Telegram messages were batched into one message
at the end instead of streaming as separate messages during generation.
2026-01-10 01:11:41 +01:00
Jefferson Warrior
5843733978
Fix Cloud Code Assist API errors (429/400)
...
- Enhanced rate limit detection for Cloud Code Assist quota exhaustion
- Added tool call ID sanitization to fix invalid request format errors
- Integrated Cloud Code Assist format error detection into failover system
- Added comprehensive error pattern matching for Cloud Code Assist APIs
Fixes #cloud-code-assist-api-errors
2026-01-10 01:10:23 +01:00
Peter Steinberger
c69c4caa33
fix: polish opencode-zen onboarding ( #623 ) (thanks @magimetal)
2026-01-10 01:09:34 +01:00
Magi Metal
05bd100f7a
style: fix formatting
2026-01-10 01:09:34 +01:00
Magi Metal
a399fa36c8
feat(onboard): add OpenCode Zen as model provider
2026-01-10 01:09:34 +01:00
Peter Steinberger
9b1f164447
fix: guard small context windows
2026-01-10 01:08:56 +01:00
Peter Steinberger
3554004968
fix: QuickStart provider selection ( #485 )
2026-01-10 01:08:00 +01:00
Jefferson Warrior
74485f171b
CLI: fix Cloud Code Assist 400 API errors and missing session exports
...
- Add sanitizeToolCallId() to fix Cloud Code Assist tool call ID validation
- Apply sanitization in sanitizeSessionMessagesImages() for toolResult and assistant messages
- Add legacy CONFIG_PATH_CLAWDIS and STATE_DIR_CLAWDIS exports for backward compatibility
- Resolves Cloud Code Assist rejection of invalid tool call IDs with pipe characters
- Fixes missing session export functions that were blocking system startup
Addresses Cloud Code Assist API 400 errors from invalid tool call IDs like 'call_abc123|item_456'
2026-01-10 01:07:51 +01:00
Peter Steinberger
0cb28e26fc
Merge pull request #625 from mahmoudashraf93/fix/whatsapp-contact-cards-multi
...
fix: include numbers for WhatsApp contact arrays
2026-01-10 00:04:00 +00:00
Peter Steinberger
103dd3af64
fix: keep contact summary counts ( #625 ) (thanks @mahmoudashraf93)
2026-01-10 01:02:28 +01:00
Peter Steinberger
21eebb6d3b
fix: limit subagent bootstrap context
2026-01-10 00:01:16 +00:00
Mahmoud Ibrahim
d1e10af1e1
WhatsApp: show all contacts in shares
2026-01-10 01:00:00 +01:00
Mahmoud Ibrahim
18338bc60f
Style: format contact label helper
2026-01-10 01:00:00 +01:00
Mahmoud Ibrahim
fd7450e5b9
WhatsApp: include numbers in contact cards
2026-01-10 01:00:00 +01:00
Peter Steinberger
e311dc82e0
refactor: centralize reasoning tag handling
2026-01-10 00:53:48 +01:00
Peter Steinberger
097550c299
fix: centralize verbose overrides and tool stream gating
2026-01-10 00:52:24 +01:00
Peter Steinberger
9a8d3aed26
test: update status expectations for verbose/elevated labels
2026-01-09 23:43:24 +00:00
Peter Steinberger
e18080163f
fix: simplify verbose/elevated status labels
2026-01-09 23:41:57 +00:00
Peter Steinberger
bd10f3d3f1
feat: allow session_status in sandbox
2026-01-09 23:41:57 +00:00
Peter Steinberger
a25922a21f
fix: clarify sessions_send delivery semantics
2026-01-10 00:34:24 +01:00
Peter Steinberger
96e17d407a
fix: filter NO_REPLY prefixes
2026-01-09 23:29:05 +00:00
Peter Steinberger
a9a70ea278
fix: persist verbose off and gate tool stream
2026-01-10 00:22:28 +01:00
Peter Steinberger
695be8e92d
Merge pull request #624 from clawdbot/refactor/vcard-utils
...
refactor: extract vcard parsing helper
2026-01-09 23:16:31 +00:00
Peter Steinberger
b6b1b570f9
refactor: extract vcard parsing helper
2026-01-10 00:12:53 +01:00
Peter Steinberger
6016a63162
refactor(web): centralize active web listener resolution
2026-01-09 23:12:29 +00:00
Peter Steinberger
6f6acd94cc
Merge pull request #614 from zknicker/fix/block-stream-think-leak
...
fix: prevent <think> leakage in block streaming
2026-01-09 23:10:17 +00:00
Peter Steinberger
1277f6e27b
fix: prefer FN for WhatsApp contact cards ( #622 ) (thanks @mahmoudashraf93)
2026-01-10 00:08:30 +01:00
Mahmoud Ibrahim
30b3d6ce61
WhatsApp: handle contact cards inbound
2026-01-10 00:07:04 +01:00
Peter Steinberger
51ec578cec
fix: suppress <think> leakage + split reasoning output ( #614 ) (thanks @zknicker)
2026-01-10 00:02:13 +01:00
Zach Knickerbocker
2d0ca67c21
fix: prevent <think> leakage in block streaming
2026-01-09 23:58:48 +01:00
Peter Steinberger
88cbe2d275
fix: cap pairing requests and suppress outbound pairing replies
2026-01-09 22:58:18 +00:00
Peter Steinberger
98d0318d4e
refactor: cron payload migration cleanup ( #621 )
...
* refactor: centralize cron payload migration
* test: stabilize block streaming mocks
* test: adjust chunker fence-close case
2026-01-09 22:56:55 +00:00
Peter Steinberger
89dc6ebb8b
feat(signal): add reaction notifications
2026-01-09 23:53:36 +01:00
Peter Steinberger
a18743eabc
fix(web): improve WhatsApp Web listener errors ( #612 , thanks @YuriNachos)
2026-01-09 22:40:58 +00:00
Yurii Chukhlib
a9f8719cd2
fix(web): remove provider name from gateway listener error messages
...
Error messages in sendMessageWhatsApp, sendReactionWhatsApp, and
sendPollWhatsApp included hardcoded \"WhatsApp\" references. This caused
confusion when cron jobs using other providers (e.g., Telegram) failed
with errors mentioning WhatsApp.
Changes error messages to be provider-agnostic while maintaining the
same error handling behavior.
Fixes #461
Fixes #470
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-09 22:40:58 +00:00
Peter Steinberger
5bc3d15bba
fix: handle signal reactions safely ( #616 ) (thanks @neist)
2026-01-09 23:39:18 +01:00
Kasper Neist
94e7a98bf2
feat(signal): add reaction message support
...
- Add SignalReactionMessage type with emoji, targetAuthor, timestamp
- Handle reaction messages in monitor (log and skip for now)
- Prevents reactions from showing as unknown media
2026-01-09 23:37:33 +01:00
Peter Steinberger
3b91148a0a
fix: handle fence-close paragraph breaks
2026-01-09 22:20:22 +00:00
Peter Steinberger
22b3bd4415
fix: migrate cron payload channel alias
2026-01-09 22:20:22 +00:00
Peter Steinberger
bdee50da6b
fix(test): reduce gateway port collisions
2026-01-09 22:18:57 +00:00
Peter Steinberger
2af3853bfa
fix(protocol): keep agent provider string
2026-01-09 23:09:10 +01:00
Peter Steinberger
79f5ccc99d
fix(gateway): harden agent provider routing
2026-01-09 23:00:36 +01:00
Peter Steinberger
3adec35632
fix: make forced block chunking fence-safe
2026-01-09 21:52:47 +00:00
Peter Steinberger
79af03ba5e
fix(auto-reply): tighten block streaming defaults
2026-01-09 22:41:10 +01:00
Peter Steinberger
f8bf041396
test(gateway): cover internal provider defaults
2026-01-09 22:40:37 +01:00
Peter Steinberger
40b4341a1d
test: fix Windows path in LID mapping test
2026-01-09 21:34:35 +00:00
Peter Steinberger
35083fcb37
fix(gateway): avoid whatsapp fallback for internal runs
2026-01-09 22:33:05 +01:00
Peter Steinberger
53f51786f2
fix: default block streaming coalesce idle to 1s
2026-01-09 22:31:19 +01:00
Peter Steinberger
6c7a27c010
refactor: normalize main session key handling
2026-01-09 22:30:15 +01:00
Peter Steinberger
304ec1abe5
fix(agents): sessions_spawn inherits provider ( #528 )
2026-01-09 22:21:33 +01:00
Peter Steinberger
55e830b009
fix: harden onboarding for non-systemd environments
2026-01-09 22:17:09 +01:00
Peter Steinberger
402c35b91c
refactor(agents): centralize failover normalization
2026-01-09 22:15:06 +01:00
Peter Steinberger
6220106ab2
refactor: centralize main session key resolution
2026-01-09 22:13:20 +01:00
Peter Steinberger
c37b77855b
Merge pull request #464 from austinm911/fix/slack-thread-replies
...
feat(slack): implement configurable reply threading
2026-01-09 21:10:39 +00:00
Peter Steinberger
84046cbad8
fix(slack): mrkdwn + thread edge cases ( #464 ) (thanks @austinm911)
2026-01-09 22:09:02 +01:00
Peter Steinberger
c27b1441f7
fix(auth): billing backoff + cooldown UX
2026-01-09 22:00:14 +01:00
Austin Mudd
8890fbcf38
Slack: fix message tool not passing threading context to handleSlackAction
2026-01-09 21:59:51 +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
29e6f13b29
Test: add threadTs passthrough test for Slack sendMessage
2026-01-09 21:59:27 +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
42a0089b3b
fix: require explicit system event session keys
2026-01-09 21:59:01 +01:00
Peter Steinberger
a5065b354e
fix(whatsapp): resolve lid mappings for inbound
2026-01-09 21:46:18 +01:00
Peter Steinberger
5fa26bfec7
feat: add per-agent elevated controls
2026-01-09 20:42:19 +00:00
Peter Steinberger
1a97aadb6b
fix: broadcast group history consistency ( #547 )
2026-01-09 21:39:58 +01:00
Peter Steinberger
7641b142ad
refactor: harden broadcast groups
2026-01-09 21:39:58 +01:00
Peter Steinberger
374aa856f2
refactor(agents): centralize failover handling
2026-01-09 21:31:18 +01:00
Peter Steinberger
cfeaa34c16
refactor: centralize cli timeout parsing
2026-01-09 21:29:52 +01:00
Peter Steinberger
2bb9716598
fix: write clawdbot config atomically
2026-01-09 21:27:51 +01:00
Peter Steinberger
564caf49bb
feat: add config --section
2026-01-09 21:27:51 +01:00
Peter Steinberger
24605379b9
refactor: centralize skills prompt resolution
2026-01-09 21:27:20 +01:00
Peter Steinberger
e8dbb350ae
fix: honor config timeout in tui
2026-01-09 21:22:50 +01:00
Peter Steinberger
4861f09f78
fix: inject skills prompt list
2026-01-09 21:20:51 +01:00
Peter Steinberger
0297b38ce0
fix(discord): remove unused import
2026-01-09 21:18:26 +01:00
Peter Steinberger
65cb9dc3f7
fix(agents): fail over on billing/credits errors
2026-01-09 21:17:07 +01:00
Peter Steinberger
e0089bb4eb
Merge pull request #547 from pasogott/feature/broadcast-groups
...
feat: add broadcast groups for multi-agent responses
2026-01-09 20:15:42 +00:00
Peter Steinberger
76964162c7
fix: land broadcast groups ( #547 ) (thanks @pasogott)
2026-01-09 21:14:19 +01:00
Nicholas Spisak
d1b0a3584f
fix(discord): add zombie connection detection with HELLO timeout
...
Add 30-second timeout after WebSocket opens to detect when Discord
never sends HELLO (zombie state). If isConnected stays false after
timeout, forces a fresh connection instead of hanging indefinitely.
Relates to #595
2026-01-09 14:12:38 -06:00
Nicholas Spisak
90be8c632a
fix(discord): log gateway debug events for disconnect visibility
...
Add listener for Carbon GatewayPlugin 'debug' events to capture WebSocket
connection state changes. Critical events (close, reconnect, resume) are
logged at INFO level always; all debug messages logged in verbose mode.
Fixes #595
2026-01-09 14:12:38 -06:00
Peter Steinberger
4121f9e6dc
feat(agents): add session_status tool
2026-01-09 21:09:42 +01:00
Peter Steinberger
d309d4fe8b
fix(discord): log gateway reconnects
2026-01-09 21:06:19 +01:00
Peter Steinberger
e73b812236
fix: dedupe telegram updates
2026-01-09 21:06:06 +01:00
sheeek
09769d127f
feat: add broadcast groups for multi-agent responses
...
Enables multiple agents to process the same message simultaneously,
allowing teams of specialized agents with atomic tasks to work together
in the same group using one phone number.
Key features:
- Configure multiple agents per WhatsApp group/DM via routing.broadcast
- Parallel (default) or sequential processing strategies
- Full session isolation (separate history, workspace, tools per agent)
- Minimal code changes (~50 lines in auto-reply.ts)
- Backward compatible with existing routing
Use cases:
- Specialized agent teams (code reviewer + security scanner + docs)
- Multi-language support (EN + DE + ES agents)
- Quality assurance workflows (support + QA agents)
- Task automation (tracker + logger + reporter)
Example config:
{
"routing": {
"broadcast": {
"strategy": "parallel",
"120363403215116621@g.us": ["alfred", "baerbel", "assistant3"]
}
}
}
This enables scaling to hundreds of focused micro-agents on a single
phone number, each handling specific atomic tasks.
2026-01-09 21:05:58 +01:00
Peter Steinberger
6d378ee608
feat(telegram): inline keyboard buttons ( #491 )
...
Co-authored-by: Azade <azade@hey.com>
2026-01-09 20:47:03 +01:00
Peter Steinberger
fb989cd0f8
Merge pull request #600 from samratjha96/fix/discord-duplicate-messages
...
fix(queue): deduplicate followup queue entries
2026-01-09 19:45:10 +00:00
Peter Steinberger
d3a0114b6b
fix: dedupe followup queue by message id ( #600 ) (thanks @samratjha96)
2026-01-09 20:44:11 +01:00
Peter Steinberger
a65455e25d
fix: align WhatsApp activity account id ( #537 ) (thanks @Nachx639)
2026-01-09 20:42:35 +01:00
Samrat Jha
9185fdc896
fix(queue): deduplicate followup queue entries to prevent duplicate responses
...
## Problem
When messages arrived while the agent was busy processing a previous message,
the same message could be enqueued multiple times into the followup queue.
This happened because Discord's event system can emit the same message multiple
times (e.g., during reconnects or due to slow listener processing), and the
followup queue had no deduplication logic.
This caused the bot to respond to the same user message 2-4+ times.
## Solution
Add simple exact-match deduplication in `enqueueFollowupRun()`: if a prompt
is already in the queue, skip adding it again. Extracted into a small
`isPromptAlreadyQueued()` helper for clarity.
## Testing
- Added test cases for deduplication (same prompt rejected, different accepted)
- Manually verified on Discord: single response per message even when multiple
events fire during slow agent processing
2026-01-09 20:40:18 +01:00
Tu Nombre Real
a05c4fca5c
fix(web): pass accountId in WhatsApp provider activity tracking
...
Recent changes added recordProviderActivity calls with accountId, but
the type definition and usage didn't include accountId in ActiveWebSendOptions.
This fix adds the optional accountId field and uses optional chaining
when accessing it to handle cases where options is undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 20:40:03 +01:00
Peter Steinberger
2977b296e6
feat(messages): add whatsapp messagePrefix and responsePrefix auto
2026-01-09 19:29:04 +00:00
Peter Steinberger
0a4cb0d264
Merge pull request #604 from clawdbot/fix/model-fallback-error-message
...
Fix model fallback error message handling
2026-01-09 19:24:22 +00:00
Peter Steinberger
6481806751
fix: avoid base-to-string in model fallback
2026-01-09 20:23:00 +01:00
Peter Steinberger
71a08eed84
Merge pull request #599 from mcinteerj/fix/gemini-tool-schemas
...
fix: simplify tool schemas for Gemini compatibility
2026-01-09 19:19:01 +00:00
Peter Steinberger
72b0777341
fix(messages): restore explicit responsePrefix default
2026-01-09 19:18:34 +00:00
Peter Steinberger
0edacd0469
fix: simplify session tool schemas for Gemini compatibility ( #599 ) (thanks @mcinteerj)
2026-01-09 20:17:46 +01:00
Peter Steinberger
237480ed9b
Merge pull request #602 from clawdbot/refactor/model-override-warnings
...
refactor: centralize model override validation
2026-01-09 19:15:51 +00:00
Peter Steinberger
837cec64af
refactor: centralize test path containment checks
2026-01-09 19:15:44 +00:00
Keith the Silly Goose
423eef4624
fix: simplify tool schemas for Gemini compatibility
...
Replaces Type.Integer with Type.Number and simplifies the sessions_send tool schema to avoid anyOf/oneOf unions that cause 400 errors with Google Cloud Code Assist API.
2026-01-09 20:15:26 +01:00
Peter Steinberger
7e81980747
refactor: centralize model override validation
2026-01-09 20:14:42 +01:00
Peter Steinberger
ade06cb9fb
Merge pull request #472 from koala73/main
...
feat: add hooks.gmail.model for cheaper Gmail PubSub processing
2026-01-09 19:00:53 +00:00
Peter Steinberger
5755d85ad1
fix: harden Gmail hook model defaults ( #472 ) (thanks @koala73)
2026-01-09 19:59:45 +01:00
Magi Metal
50a5b4ddcc
Discord: fix DM recipient parsing for bare numeric user IDs ( #596 )
...
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-09 12:58:25 -06:00
Peter Steinberger
47a8b410ee
Merge pull request #475 from rahthakor/feature/ui-enhancements
...
feat(ui): refactor chat layout with sidebar, message grouping, and nav improvements
2026-01-09 18:54:44 +00:00
Peter Steinberger
067c20608c
fix(ui): landing cleanup ( #475 ) (thanks @rahthakor)
2026-01-09 19:53:32 +01:00
Peter Steinberger
87f432880a
fix: honor whatsapp mediaMaxMb ( #505 ) (thanks @koala73)
2026-01-09 19:51:35 +01:00
rahthakor
9624d70187
test(ui): add tests for chat modules and update for icon refactor
...
- Add 21 tests for message-normalizer.ts (normalizeMessage, normalizeRoleForGrouping, isToolResultMessage)
- Add 17 tests for tool-helpers.ts (formatToolOutputForSidebar, getTruncatedPreview)
- Update navigation.test.ts to test iconClassForTab instead of deprecated iconForTab
- Skip focus-mode.browser.test.ts (toggle button moved to settings)
- Skip chat-markdown.browser.test.ts (tool card rendering refactored to sidebar)
- Skip bash-tools.test.ts line offset tests (shell env pollution issue)
2026-01-09 19:47:19 +01:00
Elie Habib
3026367c1b
feat(whatsapp): add configurable media max size
...
- Add whatsapp.mediaMaxMb config option (default: 50MB)
- Increases default from previous 5MB hardcoded limit
- Allows receiving larger documents/media files
- Per-account override via whatsapp.accounts.*.mediaMaxMb
Fixes #<issue-number> (if applicable)
2026-01-09 19:40:21 +01:00
Elie Habib
f85807a2a6
fix: add serveBaseUrl to compactEmbeddedPiSession params
2026-01-09 19:39:42 +01:00
Elie Habib
1a47aec6e4
feat(gateway): add serve feature for sharing files via public URLs
2026-01-09 19:39:42 +01:00
Peter Steinberger
fd15704c77
fix(auto-reply): coalesce block replies and document streaming toggles ( #536 ) (thanks @mcinteerj)
2026-01-09 18:19:55 +00:00
Jake
a05916bee8
Config: add support for per-provider blockStreaming override
2026-01-09 18:11:27 +00:00
Peter Steinberger
3eef200145
Merge pull request #535 from mdahmann/fix/imessage-groupish-threads
...
imessage: isolate group-ish threads by chat_id
2026-01-09 17:42:42 +00:00
Peter Steinberger
d6d84ce349
test: harden logout path check on windows
2026-01-09 18:39:38 +01:00
Peter Steinberger
42ead1499f
refactor: centralize minimax onboarding + keys
2026-01-09 18:37:06 +01:00
Peter Steinberger
d0a20cadaf
Merge branch 'main' into fix/imessage-groupish-threads
2026-01-09 17:36:15 +00:00
Peter Steinberger
dac3b675cc
fix: stabilize CI path assumptions
2026-01-09 18:35:52 +01:00
Peter Steinberger
6aac3184c3
test: normalize windows path assertions
2026-01-09 18:32:45 +01:00
Peter Steinberger
e6a7429ac7
refactor: add helper for empty assistant content
2026-01-09 18:29:27 +01:00
Peter Steinberger
79b3abd797
refactor: drop empty error messages in history
2026-01-09 18:23:26 +01:00
Peter Steinberger
a6a469435a
fix: finalize minimax-api onboarding ( #590 ) (thanks @mneves75)
2026-01-09 18:17:13 +01:00
Peter Steinberger
805969b598
Merge branch 'main' into fix/imessage-groupish-threads
2026-01-09 17:16:44 +00:00
mneves75
9279795c47
feat: Add MiniMax Anthropic-compatible API support (minimax-api)
...
Add --auth-choice minimax-api for direct MiniMax API usage at
https://api.minimax.io/anthropic using the anthropic-messages API.
Changes:
- Add applyMinimaxApiConfig() function with provider/model config
- Add minimax-api to AuthChoice type and CLI options
- Add handler and non-interactive support
- Fix duplicate minimax entry in envMap
- Update live test to use anthropic-messages API
- Add 11 unit tests covering all edge cases
- Document configuration in gateway docs
Test results:
- 11/11 unit tests pass
- 1/1 live API test passes (verified with real API key)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-09 18:13:18 +01:00
NickSpisak_
cfcff68e91
feat(discord): add channel/category management actions ( #487 )
...
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-09 11:05:58 -06:00
Peter Steinberger
e74656fa71
Merge pull request #589 from clawdbot/chore/commands-registry-guards
...
fix: harden slash command registry
2026-01-09 16:56:01 +00:00
Peter Steinberger
d64ed620d5
Merge pull request #588 from clawdbot/refactor/discord-thread-context
...
refactor: consolidate discord thread context handling
2026-01-09 16:54:14 +00:00
Peter Steinberger
377885bd36
style: format doctor gateway services
2026-01-09 17:53:57 +01:00
Peter Steinberger
cf1e0d743c
fix: harden slash command registry
2026-01-09 17:53:24 +01:00
Peter Steinberger
cae8e8d6e8
refactor: consolidate discord thread context handling
2026-01-09 17:52:47 +01:00
Peter Steinberger
24af8adcf9
Merge pull request #587 from clawdbot/refactor/hook-agent-normalize
...
Hooks: normalize agent provider handling
2026-01-09 16:52:32 +00:00
Peter Steinberger
c3083f0186
feat: add setup-token + token auth
2026-01-09 17:50:34 +01:00
Peter Steinberger
083877d286
fix: audit doctor service entrypoint
2026-01-09 17:50:28 +01:00
Luke
401f2a77e3
Merge branch 'main' into commands-list-clean
2026-01-09 11:46:08 -05:00
Peter Steinberger
b1ddf1f048
refactor: share hook provider types
2026-01-09 17:45:42 +01:00
Peter Steinberger
51725a71a3
refactor: normalize hook agent providers
2026-01-09 17:40:36 +01:00
Peter Steinberger
f146c9ef16
Merge pull request #585 from clawdbot/shadow/forum
...
Discord: fix forum thread starters
2026-01-09 16:35:33 +00:00
Peter Steinberger
abfd5719d6
fix: cache discord channel lookups for thread starters ( #585 ) (thanks @thewilloftheshadow)
2026-01-09 17:35:16 +01:00
Peter Steinberger
40fcfc9479
test: cover hook deliver default ( #533 ) (thanks @mcinteerj)
2026-01-09 17:34:22 +01:00
Jake
cac467a2df
Hooks: default agent delivery to true
2026-01-09 17:32:42 +01:00
Shadow
6ef9fc64d7
Discord: fix forum thread starters
2026-01-09 17:32:14 +01:00
Peter Steinberger
ee70a1d1fb
fix(status): use claude-cli token for usage
2026-01-09 16:24:55 +00:00
Peter Steinberger
1478473537
refactor(commands): canonicalize text command aliases
2026-01-09 17:22:46 +01:00
Peter Steinberger
c82ebd3ef3
docs(commands): document /usage slash command
2026-01-09 17:18:01 +01:00
Peter Steinberger
1838582546
refactor(auto-reply): centralize chat command aliases
2026-01-09 17:16:52 +01:00
Peter Steinberger
d372fac9c6
refactor: streamline reply tag parsing
2026-01-09 17:14:40 +01:00
Peter Steinberger
cef13aa705
Merge pull request #586 from clawdbot/temp/landpr-492
...
fix(commands): wire /usage alias to /status
2026-01-09 16:14:11 +00:00
Peter Steinberger
f4ec53dcb9
refactor(sessions): dedupe sessions.resolve
2026-01-09 17:13:38 +01:00
Peter Steinberger
68ad27e31c
fix(commands): wire /usage to status ( #492 ) (thanks @lc0rp)
2026-01-09 17:10:53 +01:00
Luke
4658f937cc
Merge branch 'main' into commands-list-clean
2026-01-09 11:06:06 -05:00
Peter Steinberger
67af3c3291
Merge pull request #560 from mcinteerj/fix/reply-tags-whitespace
...
Auto-Reply: relax regex for reply tags to allow whitespace
2026-01-09 16:05:17 +00:00
Luke
98b875cd0f
Merge branch 'main' into commands-list-clean
2026-01-09 11:04:23 -05:00
Peter Steinberger
7d9300e0f5
fix: allow whitespace in reply tags ( #560 ) (thanks @mcinteerj)
2026-01-09 17:03:44 +01:00
Peter Steinberger
c892fd174e
refactor(sessions): add sessions.resolve + label helper ( #570 )
2026-01-09 17:02:57 +01:00
LK
08caf7b9fc
feat(commands): add /usage alias for /status
2026-01-09 17:02:29 +01:00
Jake
4381b03412
Auto-Reply: relax regex for reply tags to allow whitespace
2026-01-09 17:01:58 +01:00
Peter Steinberger
d099dabf37
refactor: centralize slack threading helpers
2026-01-09 16:01:53 +00:00
Peter Steinberger
d0b06b4334
fix: avoid object stringification in session labels
2026-01-09 16:57:50 +01:00
Peter Steinberger
be48233bc4
chore: format
2026-01-09 16:55:51 +01:00
Peter Steinberger
fd9e2d3def
feat: remove provider config in configure
2026-01-09 16:55:47 +01:00
Peter Steinberger
c643ce2a7a
feat: add /debug runtime overrides
2026-01-09 16:55:16 +01:00
Peter Steinberger
36bdec0f2c
refactor(messages): centralize per-agent prefixes
2026-01-09 16:54:54 +01:00
Peter Steinberger
8341b662af
refactor(test): temp home env + normalize status
2026-01-09 16:50:09 +01:00
Peter Steinberger
c8b15af979
refactor(test): centralize temp home + polling
2026-01-09 16:49:02 +01:00
Peter Steinberger
7d518e336e
feat(sessions): label lookup tightening ( #570 ) (thanks @azade-c)
2026-01-09 16:42:09 +01:00
Peter Steinberger
09b602b4ec
style: format trigger test
2026-01-09 16:41:05 +01:00
Peter Steinberger
4ffbd9802a
refactor(test): consolidate temp home + vitest setup
2026-01-09 16:41:05 +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
8de1c449ee
Merge pull request #558 from carlulsoe/mobile-ui-improvements
...
feat(ui): improve mobile responsiveness [AI-assisted]
2026-01-09 15:39:19 +00:00
Peter Steinberger
facf5c09a0
fix: honor slack reply threading ( #574 , thanks @bolismauro)
2026-01-09 15:38:43 +00:00
Peter Steinberger
b3e0fafe50
fix: stabilize windows CI ( #558 ) (thanks @carlulsoe)
2026-01-09 16:37:58 +01:00
Mauro Bolis
96149d1f71
fix: honor slack reply threading
2026-01-09 15:35:54 +00:00
Peter Steinberger
014a4d51a6
feat(status): add claude.ai usage fallback
2026-01-09 15:34:58 +00:00
Peter Steinberger
922ca2ee1c
fix(status): surface provider usage errors
2026-01-09 15:34:58 +00:00
Richard Poelderl
43848b7b43
feat(messages): also derive responsePrefix from identity.name
...
When identity.name is configured and responsePrefix is not explicitly set,
automatically default responsePrefix to [identity.name].
This means users only need to set their identity once:
{ identity: { name: "MyBot" } }
And outbound messages will automatically be prefixed with [MyBot].
2026-01-09 16:31:20 +01:00
Richard Poelderl
8112b276c0
feat(messages): derive messagePrefix from identity.name
...
When identity.name is configured, use it for the default messagePrefix
instead of hardcoded '[clawdbot]'. Falls back to 'clawdbot' if not set.
This allows users to customize how their bot identifies itself in messages
by setting identity.name in their config or IDENTITY.md.
2026-01-09 16:31:01 +01:00
Peter Steinberger
f436808735
refactor: consolidate schema scrub + test harness
2026-01-09 16:27:28 +01:00
Peter Steinberger
7957196924
feat: add TUI bootstrap start
2026-01-09 16:25:29 +01:00
Josh Palmer
25babbfdc4
🤖 codex: fix duplicate agentDir (no-issue)
2026-01-09 16:23:34 +01:00
Peter Steinberger
d3ca84e14c
feat: add dev workspace templates
2026-01-09 16:13:41 +01:00
Peter Steinberger
07430eb33d
Merge pull request #569 from bjesuiter/ui-build-default-to-relative-path
...
fix(ui): default to relative paths for control UI assets
2026-01-09 14:47:46 +00:00
Peter Steinberger
9af5b13803
test: make withTempHome cross-platform
2026-01-09 15:47:26 +01:00
Peter Steinberger
f5cc6bb283
fix: harden node bridge keepalive
2026-01-09 15:46:45 +01:00
Peter Steinberger
6177c2d575
fix: auto-create dev config for dev profile
2026-01-09 15:45:11 +01:00
Peter Steinberger
616293f8a7
Merge pull request #567 from erikpr1994/fix/gemini-schema-sanitization
...
fix(agents): remove unsupported JSON Schema keywords for Cloud Code Assist API
2026-01-09 14:44:38 +00:00
Peter Steinberger
d77dee50c9
Merge pull request #570 from azade-c/feat/sessions-label
...
feat(sessions): expose label in sessions.list and support label lookup in sessions_send
2026-01-09 14:44:23 +00:00
Peter Steinberger
c4c0f1349a
fix: keep build green after main rebase ( #570 ) (thanks @azade-c)
2026-01-09 15:40:36 +01:00
Peter Steinberger
17a7d4e8dd
test: stabilize Windows test env ( #567 ) (thanks @erikpr1994)
2026-01-09 15:40:02 +01:00
Peter Steinberger
d17141b859
fix(status): show usage for token auth profiles
2026-01-09 14:36:46 +00:00
Peter Steinberger
1afa48fcdf
style(models): biome format auth order
2026-01-09 14:36:46 +00:00
Peter Steinberger
407a3c2c10
fix: quiet telegram getUpdates errors
2026-01-09 15:35:39 +01:00
Peter Steinberger
5f4eb8b509
style: format cli files
2026-01-09 15:34:41 +01:00
Peter Steinberger
d5b826ffc8
fix: restore openUrl import
2026-01-09 15:32:55 +01:00
Peter Steinberger
59d942c9ec
fix: unblock CI on main ( #569 ) (thanks @bjesuiter)
2026-01-09 15:32:55 +01:00
Peter Steinberger
56e77f6843
fix: sessions label lookup and persistence ( #570 ) (thanks @azade-c)
2026-01-09 15:32:49 +01:00
Azade
e24e0cf364
test(sessions): add tests for sessions_send label lookup
...
- Test finding session by label
- Test error when label not found
- Test error when neither sessionKey nor label provided
2026-01-09 15:32:49 +01:00
Azade
3133c7c84e
feat(sessions): expose label in sessions.list and support label lookup in sessions_send
...
- Add `label` field to session entries and expose it in `sessions.list`
- Display label column in the web UI sessions table
- Support `label` parameter in `sessions_send` for lookup by label instead of sessionKey
- `sessions.patch`: Accept and store `label` field
- `sessions.list`: Return `label` in session entries
- `sessions_spawn`: Pass label through to registry and announce flow
- `sessions_send`: Accept optional `label` param, lookup session by label if sessionKey not provided
- `agent` method: Accept `label` and `spawnedBy` params (stored in session entry)
- Add `label` column to sessions table in web UI
- Changed session store writes to merge with existing entry (`{ ...existing, ...new }`)
to preserve fields like `label` that might be set separately
We attempted to implement label persistence "properly" by passing the label
through the `agent` call and storing it during session initialization. However,
the auto-reply flow has multiple write points that overwrite the session entry,
and making all of them merge-aware proved unreliable.
The working solution patches the label in the `finally` block of
`runSubagentAnnounceFlow`, after all other session writes complete.
This is a workaround but robust - the patch happens at the very end,
just before potential cleanup.
A future refactor could make session writes consistently merge-based,
which would allow the cleaner approach of setting label at spawn time.
```typescript
// Spawn with label
sessions_spawn({ task: "...", label: "my-worker" })
// Later, find by label
sessions_send({ label: "my-worker", message: "continue..." })
// Or use sessions_list to see labels
sessions_list() // includes label field in response
```
2026-01-09 15:32:49 +01:00
Peter Steinberger
80ff2dc77d
fix: honor gateway --dev flag
2026-01-09 15:25:51 +01:00
Peter Steinberger
c228df8f90
fix: rebase onto main + restore build/lint ( #567 ) (thanks @erikpr1994)
2026-01-09 15:23:41 +01:00
Peter Steinberger
760e9b3df5
fix: avoid Windows runner unicode crash ( #567 )
2026-01-09 15:19:49 +01:00
Peter Steinberger
63f5fa47de
fix: avoid invalid UTF-16 in truncation ( #567 )
2026-01-09 15:19:49 +01:00
Peter Steinberger
fd535a50d3
fix: scrub tool schemas for Cloud Code Assist ( #567 ) (thanks @erikpr1994)
2026-01-09 15:19:49 +01:00
Erik
e9217181c1
fix(agents): remove unsupported JSON Schema keywords for Cloud Code Assist API
...
Cloud Code Assist API requires strict JSON Schema draft 2020-12 compliance
and rejects keywords like patternProperties, additionalProperties, $schema,
$id, $ref, $defs, and definitions.
This extends cleanSchemaForGemini to:
- Remove all unsupported keywords from tool schemas
- Add oneOf literal flattening (matching existing anyOf behavior)
- Add test to verify no unsupported keywords remain in tool schemas
2026-01-09 15:19:48 +01:00
Peter Steinberger
2c5ec94843
test: stabilize sandbox/doctor tests
2026-01-09 15:17:20 +01:00
Peter Steinberger
fc7580ab5e
fix: remove configure control-ui prompt
2026-01-09 15:17:20 +01:00
Peter Steinberger
adb3bc2577
fix: reset dev gateway setup
2026-01-09 15:17:20 +01:00
Peter Steinberger
3e400ff9f2
feat(models): add per-agent auth order overrides
2026-01-09 14:07:45 +00:00
Peter Steinberger
944f15e401
fix(discovery): decode dns-sd escaped UTF-8
2026-01-09 14:56:01 +01:00
Peter Steinberger
02aeff8efc
style(gateway): multiline discovery output
2026-01-09 14:43:46 +01:00
Peter Steinberger
b5c32a4c79
fix(onboarding): remove redundant model spread fallback
2026-01-09 14:16:37 +01:00
Peter Steinberger
576f8d4681
Merge pull request #572 from ngutman/fix/mac-node-bridge-ping
...
fix(macos): add node bridge ping loop (AI-assisted)
2026-01-09 13:03:03 +00:00
Peter Steinberger
cb86d0d6d4
fix: land mac node bridge ping loop ( #572 ) (thanks @ngutman)
2026-01-09 14:01:20 +01:00
Peter Steinberger
f6f178ddee
style(telegram): format bot init
2026-01-09 13:57:06 +01:00
Peter Steinberger
b3d640b978
fix(onboarding): remove duplicate minimax constants
2026-01-09 13:56:16 +01:00
Peter Steinberger
0fc7a06913
fix(discovery): silence oxlint warning
2026-01-09 13:55:28 +01:00
Peter Steinberger
b21e62f072
style: format gateway discovery
2026-01-09 13:55:28 +01:00
Peter Steinberger
b0672da396
fix(gateway): fix wide-area discovery update
2026-01-09 13:55:27 +01:00
Peter Steinberger
c2d185aab7
fix: normalize routed replies
2026-01-09 13:55:27 +01:00
Peter Steinberger
bfadc8f4ee
style: format onboard providers
2026-01-09 13:54:53 +01:00
Peter Steinberger
1716c01bdf
feat(gateway): improve wide-area discovery
2026-01-09 13:54:53 +01: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
81beda0772
feat: migrate agent config to multi-agent layout
2026-01-09 12:44:29 +00:00
Peter Steinberger
82b342e77b
fix: respect auth cooldown with auth.order
2026-01-09 12:44:29 +00:00
Peter Steinberger
ac922e83d3
Merge branch 'main' into tobias-sync
2026-01-09 13:42:34 +01:00
Peter Steinberger
dc6f22c2c5
fix: add hosted minimax onboarding ( #495 , thanks @tobiasbischoff)
2026-01-09 13:40:01 +01:00
Tobias Bischoff
897685a2de
Telegram: cast fetch to grammy client type
2026-01-09 13:39:28 +01:00
Tobias Bischoff
a0bb2bccaf
Onboarding: add MiniMax hosted API key option
2026-01-09 13:39:28 +01:00
Peter Steinberger
17a7dfc966
chore: update dev identity default
2026-01-09 13:34:45 +01:00
Peter Steinberger
22d517a520
fix: clarify WhatsApp owner number prompts
2026-01-09 13:32:52 +01:00
Peter Steinberger
201c879772
fix(sandbox): compare list to config images ( #563 ) - thanks @pasogott
2026-01-09 13:29:47 +01:00
sheeek
7883491ce2
test(sandbox): add unit tests for formatter functions
...
Add comprehensive tests for sandbox-formatters.ts (20 tests):
- formatStatus: running/stopped with emojis
- formatSimpleStatus: running/stopped without emojis
- formatImageMatch: match/mismatch indicators
- formatAge: seconds, minutes, hours, days with edge cases
- countRunning: count items by running state
- countMismatches: count items by image mismatch
All pure functions now covered. 152 LOC tests added.
Total test count: 39 tests (19 integration + 20 unit)
Test coverage increased from ~66% to ~80%.
2026-01-09 13:23:16 +01:00
sheeek
7f02b62bba
style(sandbox): fix linting errors
...
- Remove unused normalizeOptions function
- Fix line length violations (format long lines)
- Fix import order (alphabetical)
- Format function signatures for readability
All lint checks now passing.
2026-01-09 13:23:16 +01:00
sheeek
b0c97d6178
refactor(sandbox-cli): improve structure and reduce duplication
...
Improvements:
- Extract help text examples into EXAMPLES constant object
- Add createRunner() helper to reduce try-catch boilerplate
- Add normalizeOptions() helper (prepared for future use)
- Fix command names from 'clawd' to 'clawdbot' throughout
- Update main sandbox command to show help by default
- Better organize code with clear section comments
Increases from 82 to 137 LOC but with much better organization
and reduced duplication in error handling.
2026-01-09 13:23:16 +01:00
sheeek
1c757ae35e
refactor(sandbox): use extracted display and formatter modules
...
Update sandbox.ts to import and use functions from:
- sandbox-display.ts for all UI output
- sandbox-formatters.ts for data formatting
Removes 141 LOC of display/formatting code from sandbox.ts,
reducing it from 351 to 210 LOC (-40%).
Core business logic now clearer and more focused.
2026-01-09 13:23:16 +01:00
sheeek
81c55be19b
refactor(sandbox): extract display logic into separate module
...
Move all display functions to sandbox-display.ts:
- displayContainers, displayBrowsers with generic displayItems helper
- displaySummary with image mismatch warnings
- displayRecreatePreview, displayRecreateResult
Uses DisplayConfig pattern to reduce duplication between container
and browser display logic. 156 LOC.
2026-01-09 13:23:16 +01:00
sheeek
dd0104290e
refactor(sandbox): extract formatters into separate module
...
Move formatting utilities to sandbox-formatters.ts:
- formatStatus, formatSimpleStatus, formatImageMatch, formatAge
- countRunning, countMismatches helper functions
- ContainerItem type definition
Improves modularity and reusability. 49 LOC.
2026-01-09 13:23:16 +01:00
sheeek
c3932c8508
test(sandbox): add comprehensive test suite for CLI commands
...
Add 19 tests covering sandboxListCommand and sandboxRecreateCommand:
- List command: human/JSON output, browser flag, error handling
- Recreate command: validation, filtering (session/agent), confirmation flow
- Factory functions (createContainer, createBrowser) reduce duplication
- Helper functions (expectLogContains, setupDefaultMocks) improve readability
All tests passing. 365 LOC with ~66% production code coverage.
2026-01-09 13:23:16 +01:00
sheeek
00b77421dd
refactor: improve sandbox commands code structure
...
Improvements:
- Extract validation into separate function
- Split display logic from business logic
- Create reusable container matcher for agent filtering
- Abstract status/image formatting into helpers
- Reduce code duplication between containers and browsers
- Extract container removal into generic function
- Add type safety with FilteredContainers type
- Improve readability with smaller, focused functions
Changes:
- validateRecreateOptions(): Validate mutual exclusivity
- fetchAndFilterContainers(): Fetch + filter in one place
- createAgentMatcher(): Reusable agent filter predicate
- displayContainers/Browsers(): Dedicated display functions
- displaySummary/RecreatePreview/Result(): Clear separation
- removeContainer(): Generic removal with error handling
- Format helpers: formatStatus, formatImageMatch, etc.
- Count helpers: countRunning, countMismatches
Result: 85 more lines but much better maintainability and testability.
2026-01-09 13:23:16 +01:00
sheeek
5e78d5a21f
feat: add sandbox CLI commands for container management
...
Add 'clawd sandbox list' and 'clawd sandbox recreate' commands to manage
sandbox containers. This fixes the issue where containers continue using
old images/configs after updates.
Problem:
- When sandbox Docker images or configs are updated, existing containers
keep running with old settings
- Containers are only recreated after 24h inactivity (pruning)
- If agents are used regularly, old containers run indefinitely
Solution:
- 'clawd sandbox list': Show all containers with status, age, and image match
- 'clawd sandbox recreate': Force container removal (recreated on next use)
- Supports --all, --session, --agent, --browser filters
- Requires confirmation unless --force is used
Implementation:
- Added helper functions to sandbox.ts (list/remove containers)
- Created sandbox-cli.ts following existing CLI patterns
- Created commands/sandbox.ts with list and recreate logic
- Integrated into program.ts
Use case: After updating sandbox images or changing sandbox config,
run 'clawd sandbox recreate --all' to ensure fresh containers.
2026-01-09 13:22:51 +01:00
Peter Steinberger
ae6f268987
refactor(msteams): validate send recipient
...
Co-authored-by: Onur <onutc@users.noreply.github.com>
2026-01-09 11:22:59 +01:00
Peter Steinberger
08cceb6435
fix(config): add gateway remote ssh fields
2026-01-09 11:18:37 +01:00
Peter Steinberger
6b107e9e74
refactor(msteams): consolidate stores and send context
2026-01-09 11:18:33 +01:00
Peter Steinberger
6d223303eb
refactor(msteams): extract sdk + storage helpers
2026-01-09 11:07:32 +01:00
Peter Steinberger
8875dbd449
refactor(msteams): split monitor handler and poll store
2026-01-09 11:07:32 +01:00
Peter Steinberger
475d598ecb
fix: normalize poll providers and msteams deps
2026-01-09 11:07:32 +01:00
Peter Steinberger
e55358c65d
feat: finalize msteams polls + outbound parity
2026-01-09 11:07:32 +01:00
Onur
a2bba7ef51
fix(msteams): add msteams to pairing provider labels
2026-01-09 11:07:32 +01:00
Onur
7f326ae4ae
fix: sync doctor-prompter.ts with main
2026-01-09 11:07:17 +01:00
Onur
13b47e6047
fix(doctor): restore initialValue behavior in non-interactive mode
...
The repair/force commit added an early return that broke non-interactive
mode - migrations would return false instead of using initialValue.
2026-01-09 11:07:01 +01:00
Onur
0bc50abd73
style: format quickstart note and media-note test
2026-01-09 11:07:00 +01:00
Onur
c469fac8ef
Tests: speed up media note prompt setup
2026-01-09 11:07:00 +01:00
Onur
a542a285a3
Wizard: preserve QuickStart gateway settings
2026-01-09 11:07:00 +01:00
Onur
eb908985f7
Gateway: fix reload tests for MS Teams provider
2026-01-09 11:07:00 +01:00
Onur
1df7bfefe7
MSTeams: stop on shutdown and honor chunk limit
2026-01-09 11:07:00 +01:00
Onur
678d704341
image works in DM
2026-01-09 11:07:00 +01:00
Onur
e67ca92443
MS Teams: ingest inbound image attachments
2026-01-09 11:06:49 +01:00
Onur
2ab5890eab
wip
2026-01-09 11:06:49 +01:00
Onur
d6256a388e
feat(msteams): wire up proactive messaging in routeReply for queued replies
2026-01-09 11:06:49 +01:00
Onur
04b1eb57eb
MS Teams: fix top-level replies (agent reference)
2026-01-09 11:06:39 +01:00
Onur
8d096ef85d
Tests: stabilize file watchers
2026-01-09 11:06:39 +01:00
Onur
a2bab7d923
MS Teams: refactor provider + replyStyle + reliability
2026-01-09 11:06:38 +01:00
Onur
81f81be816
feat(msteams): add replyStyle config for thread vs top-level replies
...
- Add replyStyle config at global, team, and channel levels
- "thread" replies to the original message (for Posts layout channels)
- "top-level" posts as a new message (for Threads layout channels)
- Default based on requireMention: false → top-level, true → thread
- DMs always use thread style (direct reply)
2026-01-09 11:06:28 +01:00
Onur
269a3c4000
feat(msteams): add outbound sends and fix reply delivery
...
- Add sendMessageMSTeams for proactive messaging via CLI/gateway
- Wire msteams into outbound delivery, heartbeat targets, and gateway send
- Fix reply delivery to use SDK's getConversationReference() for proper
bot info, avoiding "Activity Recipient undefined" errors
- Use proactive messaging for replies to post as top-level messages
(not threaded) by omitting activityId from conversation reference
- Add lazy logger in send.ts to avoid test initialization issues
2026-01-09 11:06:14 +01:00
Onur
2c7d5c82f3
feat(msteams): add per-channel requireMention config
...
- Add teams/channels config structure to MSTeamsConfig
- Implement requireMention check in monitor.ts
- Resolution order: channel > team > global > default (true)
- Update zod schema for validation
- Document RSC permissions for receiving all messages without @mention
- Document Graph API Proxy pattern for historical message access
- Document private channel limitations
- Document team/channel ID format (use URL path, not groupId)
2026-01-09 11:05:46 +01:00
Onur
e0812f8c4d
feat(msteams): add config reload, DM policy, proper shutdown
...
- Add msteams to config-reload.ts (ProviderKind, ReloadAction, rules)
- Add msteams to PairingProvider for pairing code support
- Create conversation-store.ts for storing ConversationReference
- Implement DM policy check (disabled/pairing/open/allowlist)
- Fix WasMentioned to check actual bot mentions via entities
- Fix server shutdown by using custom Express server with httpServer.close()
- Pass authConfig to CloudAdapter for outbound call authentication
- Improve error logging with JSON serialization
2026-01-09 11:05:34 +01:00
Onur
1c73d45106
feat(msteams): wire agent integration for Teams messages
...
- Integrate dispatchReplyFromConfig() for full agent routing
- Add msteams to TextChunkProvider and OriginatingChannelType
- Add msteams case to route-reply (proactive not yet supported)
- Strip @mention HTML tags from Teams messages
- Fix session key to exclude messageid suffix
- Add typing indicator support
- Add proper logging for debugging
2026-01-09 11:05:34 +01:00
Onur
d9cbecac7f
feat(msteams): add MS Teams provider skeleton
...
- Add Microsoft 365 Agents SDK packages (@microsoft/agents-hosting,
@microsoft/agents-hosting-express, @microsoft/agents-hosting-extensions-teams)
- Add MSTeamsConfig type and zod schema
- Create src/msteams/ provider with monitor, token, send, probe
- Wire provider into gateway (server-providers.ts, server.ts)
- Add msteams to all provider type unions (hooks, queue, cron, etc.)
- Update implementation guide with new SDK and progress
2026-01-09 11:05:34 +01:00
Peter Steinberger
fe69bc9439
fix(config): allow gateway.remote ssh fields
2026-01-09 10:50:19 +01:00
Peter Steinberger
d258c68ca1
feat: add gateway dev config options
2026-01-09 10:39:00 +01:00
Luke
750dea3edf
Merge branch 'main' into commands-list-clean
2026-01-09 04:21:47 -05:00
Luke K (pr-0f3t)
5f4df5e336
Auto-reply: drop native command flag
2026-01-09 04:14:36 -05:00
Peter Steinberger
0c167e85af
style: sort configure imports
2026-01-09 10:03:52 +01:00
Peter Steinberger
827e68eadd
feat: improve auth setup flows
2026-01-09 09:59:58 +01:00
Peter Steinberger
3db52c972d
fix: repair typing for thinking promotion
2026-01-09 08:37:38 +00:00
Peter Steinberger
17ccf53eb1
fix: normalize <think> reasoning blocks
2026-01-09 08:30:05 +00:00
Peter Steinberger
5b50c97939
feat(cli): improve gateway status output
2026-01-09 09:27:42 +01:00
Peter Steinberger
89132fdd25
chore(lint): biome import order
2026-01-09 09:27:42 +01:00
Luke
aa64abe84c
Merge branch 'main' into commands-list-clean
2026-01-09 03:12:08 -05:00
Peter Steinberger
8d67bd2889
feat: apply lobster palette to prompts
2026-01-09 09:05:24 +01:00
Peter Steinberger
f9be9ad426
feat: switch message cli to subcommands
2026-01-09 09:00:41 +01:00
Peter Steinberger
7ed53e243d
fix(cli): clear lint warnings
2026-01-09 08:51:22 +01:00
Peter Steinberger
732972be2b
style: format control ui assets log
2026-01-09 08:32:15 +01:00
Peter Steinberger
721183e259
feat: unify message cli and tools
2026-01-09 08:30:24 +01:00
Peter Steinberger
77d4bb8dfe
feat: update token auth flow
2026-01-09 08:13:05 +01:00
Peter Steinberger
a4d6638f89
fix: import outbound delivery types
2026-01-09 08:13:04 +01:00
Peter Steinberger
c32e3c467d
fix: map CLI deps for outbound sends
2026-01-09 08:13:04 +01:00
Peter Steinberger
185727c696
style: fix lint formatting
2026-01-09 08:13:04 +01:00
Peter Steinberger
37cbcc97d3
feat: support token auth profiles
2026-01-09 08:13:04 +01:00
Peter Steinberger
eced473e05
feat: add models auth commands
2026-01-09 08:13:04 +01:00
Peter Steinberger
af1f6fab29
chore: add lobster CLI banner art
2026-01-09 08:13:04 +01:00
Peter Steinberger
266643bb94
feat(gateway): discover on local + wide-area DNS-SD
2026-01-09 08:13:04 +01:00
Peter Steinberger
2062165cd3
chore: add configure section hints
2026-01-09 08:13:04 +01:00
Peter Steinberger
581da80209
chore: log gateway reload and signals
2026-01-09 08:13:04 +01:00
Peter Steinberger
60b282cf1d
fix: improve web media fetch errors
2026-01-09 07:09:15 +00:00
Peter Steinberger
c46bab35df
fix: drop explicit ui:install step
2026-01-09 07:02:42 +00:00
Miles
27952bb94d
imessage: isolate group-ish threads by chat_id
2026-01-09 00:01:01 -06:00
Shadow
95c2ccbd7b
fix: remove incorrect discord limited warning
2026-01-08 23:59:40 -06:00
Peter Steinberger
0a026fea1c
fix: disable restart by default
2026-01-09 05:49:30 +00:00
Peter Steinberger
db22207014
feat: add message tool and CLI
2026-01-09 06:44:20 +01:00
Peter Steinberger
48a1b07097
fix: promote selected auth profile order
2026-01-09 05:36:14 +00:00
Peter Steinberger
8e35ad5484
style: format after gate
2026-01-09 05:27:54 +00:00
Peter Steinberger
482364aa92
test: stabilize claude cli serialization test
2026-01-09 05:27:50 +00:00
Peter Steinberger
31a2830f7d
fix: support /models alias for /model
2026-01-09 06:24:40 +01:00
Peter Steinberger
7842109609
fix: report auth label from configured order
2026-01-09 05:17:27 +00:00
Peter Steinberger
f9fe067f68
fix: normalize anthropic model ids
2026-01-09 05:07:16 +00:00
Peter Steinberger
9114331218
fix: serialize claude cli runs
2026-01-09 04:58:21 +00:00
Peter Steinberger
aa5e75e853
fix: align tool rename fallout
2026-01-09 05:54:34 +01:00
Claude
333832c2e1
fix: bypass Anthropic OAuth token blocking for tool names
...
Anthropic blocks specific lowercase tool names (bash, read, write, edit)
when using OAuth tokens. This fix:
1. Renames blocked tools to capitalized versions (Bash, Read, Write, Edit)
in pi-tools.ts via renameBlockedToolsForOAuth()
2. Passes all tools as customTools in splitSdkTools() to bypass
pi-coding-agent's built-in tool filtering, which expects lowercase names
The capitalized names work with both OAuth tokens and regular API keys.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:48:54 +01:00
Luke
a4806e9417
Merge branch 'main' into commands-list-clean
2026-01-08 23:21:31 -05:00
Peter Steinberger
ef1ce5d9a8
fix: avoid claude-cli session id collisions
2026-01-09 04:20:58 +00:00
Luke K (pr-0f3t)
5d34e27078
Revert: non-PR file edits
2026-01-08 23:19:44 -05:00
Peter Steinberger
64fc5fa9fc
fix: allow default model outside allowlist
2026-01-09 04:18:30 +00:00
Luke K (pr-0f3t)
16f893c46b
Tests: align google shared expectations
2026-01-08 23:12:37 -05:00
Peter Steinberger
7e4d5c9f84
test: align status and google-shared expectations
2026-01-09 05:03:12 +01:00
Luke
1be8a39442
Merge branch 'main' into commands-list-clean
2026-01-08 22:58:54 -05:00
Peter Steinberger
709d5d9cd6
fix: add spacing to daemon status output
2026-01-09 03:52:51 +00:00
Peter Steinberger
9a8fe4d683
feat(agent): add claude cli runner
2026-01-09 04:52:37 +01:00
Luke K (pr-0f3t)
1309cee124
Auto-reply: fix status command lint
2026-01-08 22:51:35 -05:00
Luke K (pr-0f3t)
8aa80fa464
Auto-reply: tidy help message
2026-01-08 22:48:46 -05:00
Peter Steinberger
8e27ea7371
feat: add raw stream logging flags
2026-01-09 03:45:21 +00:00
Peter Steinberger
69546d563d
fix: combine status usage and cost line
2026-01-09 03:45:01 +00:00
Peter Steinberger
16cfd24967
fix: colorize daemon status output
2026-01-09 03:22:02 +00:00
Luke
b97a9235e0
Merge branch 'main' into commands-list-clean
2026-01-08 22:19:52 -05:00
Peter Steinberger
3e19f82af2
fix: repair status reply call
2026-01-09 03:18:20 +00:00
Peter Steinberger
d8a23cf5ab
fix: restore emoji-rich status output
2026-01-09 03:15:33 +00:00
Luke K (pr-0f3t)
6c8b2a8dc9
Auto-reply: organize status imports
2026-01-08 22:14:24 -05:00
Peter Steinberger
b3b84ffefa
fix: fallback /model list when catalog is unavailable
2026-01-09 03:56:19 +01:00
Luke
e52a2888cc
Merge branch 'main' into commands-list-clean
2026-01-08 21:47:09 -05:00
Peter Steinberger
0cbc5fea93
fix: keep status for directive-only messages
2026-01-09 03:46:00 +01:00
Peter Steinberger
dc81d0a649
fix: improve /status auth label
2026-01-09 03:39:02 +01:00
Peter Steinberger
75d193a284
test: update google shared expectations
2026-01-09 02:34:16 +00:00
Peter Steinberger
3c79d5c711
fix: keep /status usage filtering
2026-01-09 03:31:02 +01:00
Peter Steinberger
151523f47b
feat: add usage cost reporting
2026-01-09 02:29:54 +00:00
Peter Steinberger
1a295d9460
fix: improve status usage filtering and directives
2026-01-09 03:18:47 +01:00
Peter Steinberger
84f668f9c5
test: align google-shared expectations with pi-ai 0.40.0
2026-01-09 03:12:32 +01:00
Peter Steinberger
468889abef
fix: refine status usage and elevated directives
2026-01-09 03:09:56 +01:00
Peter Steinberger
8a3e100ad1
test: update google-shared expectations
2026-01-09 03:04:16 +01:00
Kasper Neist
3b78870f33
feat(system-prompt): add messaging guidance section
...
Adds a brief 'Messaging' section to the system prompt to guide agents on:
- Reply in session = auto-routes to source provider
- Cross-session = use sessions_send
- Never use bash/curl for provider messaging
This helps prevent agents from using shell workarounds for messaging
when Clawdbot already handles routing internally.
2026-01-09 03:00:40 +01:00
Luke
c678216ac2
Merge branch 'main' into commands-list-clean
2026-01-08 20:58:26 -05:00
Peter Steinberger
0a722de65c
test: cover log line parsing
2026-01-09 02:54:04 +01:00
Peter Steinberger
3a99ac7e9a
fix: honor mention-bypass for group commands
2026-01-09 02:52:44 +01:00
Peter Steinberger
efa5f0bfe0
feat: improve logs output and docs
2026-01-09 02:51:17 +01:00
Peter Steinberger
e1789ba9e5
fix: set gemini default model for api-key auth ( #489 ) - thanks @jonasjancarik
2026-01-09 02:49:42 +01:00
Jonáš Jančařík
302d51fd40
feat: add Gemini API key onboarding
2026-01-09 02:45:15 +01:00
Ogulcan Celik
7bb0841f42
fix: prevent systemd hang on restart with podman sandboxes
...
Add KillMode=process to generated systemd unit file. Without this,
podman's conmon processes (which monitor sandbox containers) block
shutdown since they're children of the gateway process.
This preserves the desired behavior of keeping containers alive
across restarts while preventing systemd from waiting indefinitely.
2026-01-09 02:37:00 +01:00
Peter Steinberger
a738ade0ec
chore: update dependencies
2026-01-09 02:34:39 +01:00
Peter Steinberger
97635a8966
test: assert WhatsApp queued routing context ( #534 ) thanks @mcinteerj
2026-01-09 02:04:05 +01:00
Peter Steinberger
f2246df875
fix: route WhatsApp queued replies to sender ( #534 )
2026-01-09 02:03:30 +01:00
Jake
a52e75d978
WhatsApp: fix routing for queued messages by using correct OriginatingTo
2026-01-09 02:01:33 +01:00
Peter Steinberger
455723375e
fix: show directive options on query
2026-01-09 01:40:44 +01:00
Peter Steinberger
948ce5eb5f
feat(models): add oauth auth health
2026-01-09 00:34:38 +00:00
Luke
daafa9e3bc
Merge branch 'main' into commands-list-clean
2026-01-08 19:33:56 -05:00
Jonathan D. Rhyne
debdd2aa95
fix(tui): status bar not updating after /verbose, /reasoning, /think commands
...
The status bar refresh failed because refreshSessionInfo() compared
currentSessionKey (e.g. 'main') against the canonical session keys
returned by the gateway (e.g. 'agent:default:main').
This fix uses parseAgentSessionKey to also match canonical keys by
their 'rest' component, allowing 'main' to match 'agent:default:main'.
Fixes: status bar showing stale values after setting changes
AI-assisted: yes (Claude)
Testing: lightly tested (build passes, logic verified)
2026-01-09 01:05:10 +01:00
Peter Steinberger
714e170c16
feat(tui): add agent picker and agents list rpc
2026-01-09 01:05:10 +01:00
Peter Steinberger
e5dbba7b67
fix: sort imports for lint
2026-01-09 00:57:17 +01:00
Peter Steinberger
27adabbeea
test: cover reasoning directive spacing (thanks @joshp123) ( #539 )
2026-01-09 00:51:05 +01:00
Peter Steinberger
f666f60731
fix: preserve inline directive spacing tests (thanks @joshp123) ( #539 )
2026-01-09 00:37:40 +01:00
Josh Palmer
43545a4864
🤖 codex: preserve spacing after inline directives (issue-telegram-inline-spacing)
2026-01-09 00:37:40 +01:00
Peter Steinberger
4e92ccc0dd
style: format
2026-01-09 00:33:09 +01:00
Peter Steinberger
71309c064a
fix: drop redundant telegram audit union
2026-01-09 00:33:09 +01:00
Peter Steinberger
01b8f4582f
fix: align discord monitor + whatsapp activity
2026-01-09 00:33:09 +01:00
Peter Steinberger
e09708e82d
feat: sync skills into sandbox workspace
2026-01-09 00:33:09 +01:00
Peter Steinberger
561fa99d95
feat(providers): show status spinner message
2026-01-08 23:30:38 +00: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
7c7858a519
refactor(signal): normalize sender identity
2026-01-08 23:08:25 +00:00
Kasper Neist
9e9f2babeb
fix(signal): use sourceUuid as fallback when sourceNumber is null
...
Users without a visible phone number (like some Signal users)
were being silently dropped. Now falls back to UUID for sender ID.
- Add sourceUuid to SignalEnvelope type
- Use sourceUuid when sourceNumber is not available
- Only check against bot account when sourceNumber exists (avoid UUID comparison issues)
2026-01-08 23:08:25 +00:00
Peter Steinberger
490bbd10fc
feat(telegram): show user id in pairing
2026-01-09 00:01:23 +01:00
Shadow
9f8336c92b
Discord: harden gateway resilience
2026-01-08 16:52:44 -06:00
Peter Steinberger
769b76cd40
test(provider-activity): restore real timers
2026-01-08 23:52:07 +01:00
Peter Steinberger
69f8af530d
feat(providers): improve doctor + status probes
2026-01-08 23:48:37 +01:00
Peter Steinberger
41d484d239
test: cover browser and canvas verbose summaries
2026-01-08 23:48:37 +01:00
Peter Steinberger
2f1ce51b2c
test: stabilize doctor + bash tool tests
2026-01-08 23:44:54 +01:00
Peter Steinberger
cdfae0b9d3
fix(daemon): normalize audit paths
2026-01-08 22:28:51 +00:00
Peter Steinberger
ed80860c34
chore(format): apply biome fixes
2026-01-08 22:22:17 +00:00
Peter Steinberger
1f215848be
chore(test): align auth choice options formatting
2026-01-08 23:18:33 +01:00
Peter Steinberger
b01d7e39d5
fix(onboarding): preflight claude cli keychain
2026-01-08 23:18:33 +01:00
Peter Steinberger
36fa3c3cd3
fix: improve ws close diagnostics
2026-01-08 22:18:07 +00:00
Peter Steinberger
1cf8503017
fix(daemon): audit runtime best practices
2026-01-08 22:18:07 +00:00
Peter Steinberger
cd2f3bd355
feat(status): add Telegram/WhatsApp troubleshooting warnings
2026-01-08 23:14:11 +01:00
Peter Steinberger
a33271d374
refactor: share paren-aware chunk break scan
2026-01-08 23:09:34 +01:00
Peter Steinberger
7392387ec1
feat(status): warn on Discord message content intent
2026-01-08 23:07:34 +01:00
Peter Steinberger
b48ed56635
test: add DM elevated regression coverage
2026-01-08 22:58:15 +01:00
Peter Steinberger
014667e00b
fix: tighten group elevated targeting
2026-01-08 22:57:18 +01:00
Peter Steinberger
cda2025c49
fix: align env config schema
2026-01-08 22:57:18 +01:00
Peter Steinberger
59f89678b2
feat: allow inline env vars in config
2026-01-08 22:57:18 +01:00
Peter Steinberger
9a1267b530
fix(doctor): run legacy migrations in non-interactive
2026-01-08 21:37:22 +00:00
Peter Steinberger
5b46214379
refactor(cron): centralize telegram targets + delivery helpers
2026-01-08 21:36:53 +00:00
Peter Steinberger
5939dff092
fix: avoid synthesizing agent defaults
2026-01-08 22:26:29 +01:00
Luke
ab28eb5109
Merge branch 'main' into commands-list-clean
2026-01-08 16:25:56 -05:00
Peter Steinberger
2c7d64232e
feat: enable adaptive context pruning by default
2026-01-08 22:23:03 +01:00
Luke
5965708f1d
Merge branch 'main' into commands-list-clean
2026-01-08 16:22:25 -05:00
Peter Steinberger
d58cdf7c9f
fix: normalize gateway cli option strings
2026-01-08 22:18:06 +01:00
Peter Steinberger
35ba99c245
fix: honor non-interactive legacy migrations
2026-01-08 22:13:57 +01:00
Peter Steinberger
e75ca23e7d
test(cron): cover telegram topic delivery ( #478 ) (thanks @nachoiacovino)
2026-01-08 21:13:39 +00:00
Nacho Iacovino
5391f1141e
fix(cron): parse :topic: suffix for Telegram topic delivery
...
When cron jobs specify a Telegram topic in the 'to' field like
'-1003420657307:topic:60', the delivery code now correctly parses
this into separate chatId and messageThreadId values.
Previously, the entire string was passed as chatId, causing messages
to fail delivery to forum topics.
2026-01-08 21:12:15 +00:00
Peter Steinberger
699ba410fe
fix: resolve WhatsApp LID inbound mapping
2026-01-08 22:08:54 +01:00
Josh Palmer
2fae8eda66
🤖 codex: strip empty assistant blocks from history ( #210 )
2026-01-08 21:53:33 +01:00
Peter Steinberger
884e734809
feat(doctor): audit config + state permissions
2026-01-08 21:51:34 +01:00
Peter Steinberger
2d4ec35e1c
feat(doctor): add repair/force flows
2026-01-08 21:47:35 +01:00
Peter Steinberger
0373574f0b
refactor(telegram): centralize target parsing
2026-01-08 21:38:59 +01:00
Peter Steinberger
88039a69a2
style(cli): format daemon config warnings
2026-01-08 21:38:54 +01:00
Peter Steinberger
ea748f9440
fix(doctor): handle missing service readCommand
2026-01-08 21:38:51 +01:00
Luke
a574ae5415
Merge branch 'main' into commands-list-clean
2026-01-08 15:35:17 -05:00
Peter Steinberger
01641b34ea
feat(doctor): audit supervisor config + docs
2026-01-08 21:28:48 +01:00
Peter Steinberger
58a9e35233
style(cron): format telegram target tests
2026-01-08 21:23:07 +01:00
Peter Steinberger
5fea53d89c
fix(cron): parse telegram targets with prefixes (thanks @mitschabaude-bot)
2026-01-08 21:23:07 +01:00
Tobias Bischoff
7cffa65376
Merge branch 'main' into main
2026-01-08 21:16:47 +01:00
Azade
3a8d8bc6a4
fix(daemon): align systemd unit with documentation
...
Align generated systemd service file with docs:
https://docs.clawd.bot/gateway#supervision-systemd-user-unit
Adds:
- After=network-online.target
- Wants=network-online.target
- RestartSec=5
2026-01-08 21:16:19 +01:00
Tobias Bischoff
634f1389a4
Merge branch 'main' into main
2026-01-08 21:15:06 +01:00
Peter Steinberger
31fb5867e8
refactor(outbound): centralize telegram account defaults
2026-01-08 21:05:01 +01:00
Peter Steinberger
7905a27416
style: format gateway-cli log lines
2026-01-08 20:04:10 +00:00
Peter Steinberger
04e0e10411
fix: restore hidden gateway-daemon alias
2026-01-08 19:54:23 +00:00
Peter Steinberger
871c9e5286
fix(heartbeat): telegram accountId + cron jobId compat ( #516 , thanks @YuriNachos)
2026-01-08 20:47:22 +01:00
Yurii Chukhlib
9d42972b8a
fix(heartbeat): pass accountId for Telegram delivery
...
Heartbeat Telegram delivery was failing when the bot token was
configured only via telegram.botToken in config (without TELEGRAM_BOT_TOKEN
environment variable).
Root cause: deliverOutboundPayloads was called without accountId parameter,
so sendMessageTelegram couldn't determine which account to use and couldn't
find the token from config.
Fix: Resolve default Telegram accountId when provider is "telegram" and pass
it to deliverOutboundPayloads. This follows the same pattern used elsewhere in
the codebase (e.g., cron uses resolveTelegramToken).
Changes:
- Added import for resolveDefaultTelegramAccountId
- Added accountId resolution for telegram provider
- Updated deliverOutboundPayloads call to include accountId
Fixes #318
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:47:22 +01:00
Yurii Chukhlib
4dac298ae2
fix(cron): use jobId parameter instead of id for AI tool schema
...
Fixes parameter mismatch between AI tool schema and internal validation.
The TypeBox schema now uses `jobId` for update/remove/run/runs actions,
matching what users expect based on the returned job objects.
Changes:
- Changed parameter from `id` to `jobId` in TypeBox schema for update/remove/run/runs
- Updated execute function to read `jobId` parameter
- Updated tests to use `jobId` in input parameters
The gateway protocol still uses `id` internally - the tool now maps
`jobId` from the AI to `id` for the gateway call.
Fixes #185
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:47:22 +01:00
Peter Steinberger
4a918ccf47
fix: avoid splitting outbound chunks inside parentheses ( #499 ) — thanks @philipp-spiess
2026-01-08 20:39:28 +01:00
Philipp Spiess
4082b90aa4
Chunking: avoid splits inside parentheses
2026-01-08 20:38:00 +01:00
Peter Steinberger
ba19173b96
test: cover status model provider prefix
2026-01-08 20:23:38 +01:00
Peter Steinberger
393c414e90
refactor: split discord gateway helpers
2026-01-08 20:23:06 +01:00
Peter Steinberger
bf67b29a0e
fix(telegram): resolve grammY fetch type mismatch ( #512 )
...
Co-authored-by: Yuri Chukhlib <yuri.v.chu@gmail.com>
2026-01-08 20:18:17 +01:00
Keith the Silly Goose
7866203c5c
fix(status): include provider prefix in model display
...
The /status command was showing 'anthropic/claude-sonnet-4-5' even when
using 'google-antigravity/claude-sonnet-4-5' because buildStatusMessage
received only the model name without the provider prefix.
When resolveConfiguredModelRef parsed a model string without a slash,
it fell back to DEFAULT_PROVIDER ('anthropic'), causing the misleading
display.
Fix: Pass the full 'provider/model' string to buildStatusMessage so
the provider is correctly extracted and displayed.
🪿 Investigated and submitted by Keith the Silly Goose
2026-01-08 20:11:37 +01:00
Peter Steinberger
c54f2a122a
fix: update changelog + prompt test
2026-01-08 20:08:27 +01:00
Josh Palmer
b7c900739e
🤖 codex: handle discord gateway error events ( #504 )
2026-01-08 20:06:02 +01:00
Josh Palmer
cc94db458c
🤖 codex: fix block reply ordering ( #503 )
...
What: serialize block reply sends, make typing non-blocking, add timeout fallback + abort-aware routing, and add regression tests.
Why: prevent out-of-order streamed blocks while keeping final fallback on timeouts.
Tests: ./node_modules/.bin/vitest run src/auto-reply/reply.block-streaming.test.ts src/auto-reply/reply/route-reply.test.ts
Tests: corepack pnpm lint && corepack pnpm build (pass). corepack pnpm test (ran locally; failure observed during run).
Co-authored-by: Josh Palmer <joshp123@users.noreply.github.com>
2026-01-08 19:30:24 +01:00
Gregor's Bot
7450aed663
fix: rename ClaudeBot to Clawdbot in system prompt ( #502 )
2026-01-08 11:24:00 -06:00
Luke K (pr-0f3t)
713eb898f6
Removed compact command changes from elsewhere
2026-01-08 10:41:09 -05:00
Luke
8445c9a5e8
Removing stray commits
2026-01-08 10:33:11 -05:00
LK
559e175b38
feat(commands): add /commands slash list
2026-01-08 16:23:36 +01:00
Tobias Bischoff
3149d6d331
Telegram: cast fetch to grammy client type
2026-01-08 15:16:53 +01:00
Tobias Bischoff
ecd4c9c4f5
Onboarding: add MiniMax hosted API key option
2026-01-08 15:10:18 +01:00
Peter Steinberger
c20a12aa7b
fix: format onboarding hint
2026-01-08 12:25:39 +01:00
Peter Steinberger
a564558a67
chore: drop bun from daemon runtime options
2026-01-08 12:20:45 +01:00
Peter Steinberger
51c2d29693
feat: auto-install gateway in quickstart
2026-01-08 12:19:45 +01:00
Peter Steinberger
8ed412db22
feat: streamline quickstart provider selection
2026-01-08 12:19:16 +01:00
Peter Steinberger
e210069dbd
fix: soften codex oauth expiry hint
2026-01-08 12:16:09 +01:00
Peter Steinberger
4dde870121
docs: split onboarding mode hints
2026-01-08 12:14:36 +01:00
Peter Steinberger
959a19d8ae
fix: clean lint issues
2026-01-08 11:07:11 +00:00
Peter Steinberger
63bad210c9
docs: tighten onboarding quickstart hint
2026-01-08 12:06:45 +01:00
Peter Steinberger
4c09acb2a9
feat: add telegram topic delivery for cron
2026-01-08 11:05:28 +00:00
Peter Steinberger
874c7465a5
fix: surface control ui config in daemon status
2026-01-08 11:05:28 +00:00
Peter Steinberger
e7b3cc3d3d
fix: add provider account metadata
2026-01-08 11:05:28 +00:00
Peter Steinberger
fd04bdb9cf
chore: tighten self-update guidance
2026-01-08 12:04:29 +01:00
Peter Steinberger
63ff5819b1
fix: retry telegram poll conflicts
2026-01-08 12:04:21 +01:00
Peter Steinberger
d42444928b
chore: add provider logs command
2026-01-08 12:01:06 +01:00
Peter Steinberger
a483e58860
feat: add quickstart onboarding defaults
2026-01-08 11:54:40 +01:00
Peter Steinberger
f24a4626e3
fix(config): reject shared agentDir
2026-01-08 11:54:26 +01:00
Peter Steinberger
390b102563
chore: show dm policy + allowlist preview
2026-01-08 11:25:17 +01:00
Peter Steinberger
8803787e48
chore: fallback providers status when gateway down
2026-01-08 11:05:03 +01:00
Peter Steinberger
a851444a1d
chore: expand provider details in status
2026-01-08 11:02:13 +01:00
Peter Steinberger
e8698fb9ef
chore: show dashboard url in status
2026-01-08 10:51:55 +01:00
Peter Steinberger
af2accf5e3
test: force bun fetch path in telegram send
2026-01-08 10:37:29 +01:00
Peter Steinberger
fa501e7730
fix: import path in doctor
2026-01-08 10:36:20 +01:00
Peter Steinberger
73988506fe
feat: allow hook model overrides
2026-01-08 09:33:42 +00:00
Peter Steinberger
e6f8e1e531
fix(telegram): restrict native fetch to bun
2026-01-08 10:31:16 +01:00
Peter Steinberger
4019fafc2c
chore: add spacing to status output
2026-01-08 10:30:57 +01:00
Peter Steinberger
21ef1761c6
chore: prompt to install or start gateway
2026-01-08 10:29:48 +01:00
Peter Steinberger
f6b1dc452a
chore: surface daemon status help
2026-01-08 10:29:44 +01:00
Peter Steinberger
a54442866a
chore: refine daemon runtime hint
2026-01-08 10:29:40 +01:00
Peter Steinberger
b80b3a38bf
chore: clarify telegram docs links
2026-01-08 10:29:36 +01:00
Peter Steinberger
bfd3eb46c7
docs: drop legacy telegram pairing mention
2026-01-08 09:57:03 +01:00
Peter Steinberger
bce3cc992f
fix: group /model list output
2026-01-08 09:44:59 +01:00
Peter Steinberger
0b611fc354
docs: add OAuth deep dive
2026-01-08 09:29:29 +01:00
Peter Steinberger
908a7e4fcb
chore: sync ci tasks and relax telegram test timeouts
2026-01-08 09:09:33 +01:00
Peter Steinberger
2450af26ec
test: fix telegram fetch expectation
2026-01-08 07:51:58 +00:00
Peter Steinberger
44441dd5d8
fix: clarify daemon status probe target
2026-01-08 08:50:09 +01:00
Peter Steinberger
8930ec32cb
feat: add slack multi-account routing
2026-01-08 08:49:16 +01:00
Peter Steinberger
00c1403f5c
fix: unblock ci
2026-01-08 07:41:39 +00:00
Peter Steinberger
1b2957d050
style: lint cleanup
2026-01-08 08:40:02 +01:00
Peter Steinberger
9a11325cc9
fix: daemon status guidance and telegram fetch
2026-01-08 08:39:55 +01:00
Peter Steinberger
5b397c0f15
style: tidy cli formatting
2026-01-08 08:26:40 +01:00
Peter Steinberger
c7cade5232
style: tidy gateway auth imports
2026-01-08 08:26:40 +01:00
Peter Steinberger
a676e16fbb
feat: expand daemon status diagnostics
2026-01-08 08:26:40 +01:00
Peter Steinberger
97cb469faf
chore(telegram): fix bun comment
2026-01-08 08:26:40 +01:00
Peter Steinberger
c241cb25bd
fix(telegram): gate native fetch to bun
2026-01-08 08:26:40 +01:00
Peter Steinberger
c1e97fab80
feat(cli): clarify agents list output
2026-01-08 08:26:40 +01:00
Peter Steinberger
b367ed75bf
fix: wire gateway auth diagnostics into doctor
2026-01-08 08:26:40 +01:00
Peter Steinberger
629eec11cc
feat: improve agents cli automation
2026-01-08 08:26:40 +01:00
Peter Steinberger
5565dcd447
fix: tighten gateway bind auth diagnostics
2026-01-08 08:26:40 +01:00
Peter Steinberger
debfce5a77
test: add agent allowlist coverage
2026-01-08 07:14:08 +00:00
Peter Steinberger
2b29b86ab5
feat: add agents_list tool
2026-01-08 07:06:36 +00:00
Peter Steinberger
0ba72477de
feat: allow sessions_spawn cross-agent
2026-01-08 06:56:34 +00:00
Peter Steinberger
d1ceb3aa60
feat: add logs cli and restart hints
2026-01-08 06:56:34 +00:00
Peter Steinberger
c9e07616c7
refactor: centralize WhatsApp config merging
2026-01-08 06:56:34 +00:00
Peter Steinberger
e09d44e63a
test(cli): cover provider login/logout
2026-01-08 07:41:17 +01:00
Peter Steinberger
e83c6ac088
feat(cli): move provider login/logout
2026-01-08 07:40:08 +01:00
Peter Steinberger
903f5af59c
feat: add skills CLI
2026-01-08 07:23:05 +01:00
Peter Steinberger
d14e05ac45
refactor: centralize provider helpers
2026-01-08 07:20:10 +01:00
Peter Steinberger
6a81652ebf
fix(typing): keep tool-start ttl mode-safe ( #452 , thanks @thesash)
2026-01-08 06:18:35 +00:00
Sash Catanzarite
29c5ed54b2
feat(typing): trigger indicator on tool start events
...
Add signalToolStart to TypingSignaler and call it from onAgentEvent
when tools begin executing. This keeps the typing indicator visible
during long-running tool operations.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 06:18:35 +00:00
Peter Steinberger
19595a8f99
refactor: simplify cli commands
2026-01-08 07:16:12 +01:00
Randy Torres
3c2e848a8e
Docker: fix WhatsApp config typing in onboarding + add tests
2026-01-08 06:05:56 +00:00
Peter Steinberger
367ee8ea7b
fix: stabilize telegram media group tests
2026-01-08 05:48:25 +00:00
Peter Steinberger
9b152ecb12
refactor: split providers commands
2026-01-08 06:46:40 +01:00
Peter Steinberger
f818d03ebf
style: format taglines
2026-01-08 06:37:03 +01:00
Peter Steinberger
8a7862452e
feat: add CLI taglines
2026-01-08 06:37:03 +01:00
Peter Steinberger
b50ea3ec59
feat: refine providers onboarding and cli
2026-01-08 06:25:21 +01:00
Peter Steinberger
6850e7b477
fix: align tailscale formatting
2026-01-08 05:21:20 +00:00
Peter Steinberger
4b9e8b580a
fix: stabilize bridge loopback + discord client
2026-01-08 05:15:51 +00:00
Peter Steinberger
b8a186fbd3
refactor: polish CLI theme + progress helpers
2026-01-08 06:02:36 +01:00
Peter Steinberger
e758cccd46
fix(discord): remove eventQueue client option
2026-01-08 06:00:20 +01:00
Sash Catanzarite
a6a550032a
fix(typing): refresh TTL on every startTypingLoop call
...
Previously, startTypingLoop would return early if the typing timer was
already running, which meant the TTL would never get refreshed during
long tool executions. This caused the typing indicator to stop after
2 minutes even if tools were still running.
Now we refresh the TTL at the start of startTypingLoop, before the
early-return checks. This keeps typing alive during long operations.
2026-01-08 05:45:46 +01:00
Peter Steinberger
dc3e3f27d4
style: apply lint fixes
2026-01-08 04:44:15 +00:00
Peter Steinberger
5b45a143a1
fix: stabilize media paths and logs
2026-01-08 04:41:01 +00:00
Peter Steinberger
9c9d191d6f
feat: improve cli setup flow
2026-01-08 05:33:54 +01:00
Peter Steinberger
4ef2fd328d
test: cover multi-media prompt note
2026-01-08 05:30:04 +01:00
Peter Steinberger
3f11927cd9
chore: update ClawdBot CLI branding
2026-01-08 05:20:39 +01:00
Peter Steinberger
ab8db941d0
feat: expand inbound media notes
2026-01-08 05:20:39 +01:00
Peter Steinberger
2287d32263
feat: add model scan progress callbacks
2026-01-08 05:20:39 +01:00
Peter Steinberger
28cd2e4c24
feat: refresh CLI output styling and progress
2026-01-08 05:20:39 +01:00
Peter Steinberger
ab98ffe9fe
fix: force telegram native fetch under bun
2026-01-08 05:20:38 +01:00
Peter Steinberger
3178a3014d
feat(models): improve OpenRouter free scan
2026-01-08 05:20:19 +01:00
Peter Steinberger
6feeb651ee
fix(ci): normalize windows log whitespace
2026-01-08 03:59:52 +00:00
Peter Steinberger
609df06cb7
fix(ci): stabilize windows tests
2026-01-08 03:54:35 +00:00
Peter Steinberger
0bcf3f40f4
fix(ci): sync logs tail protocol artifacts
2026-01-08 03:49:19 +00:00
Peter Steinberger
64fc3c068d
feat: add gateway logs tab
2026-01-08 03:44:08 +00:00
Peter Steinberger
ad6095c807
fix(ci): normalize windows test output
2026-01-08 03:44:08 +00:00
Peter Steinberger
0af3af34a1
fix(ci): stabilize windows bash tests
2026-01-08 03:29:05 +00:00
Peter Steinberger
35759e409a
fix(ci): harden windows tests
2026-01-08 03:19:43 +00:00
Peter Steinberger
15379dedf0
fix(telegram): voice-note tag defaults ( #188 , thanks @manmal)
2026-01-08 03:15:08 +00:00
Manuel Maly
2972fce02c
fix: flip audio default to file (backward compat)
...
- Default: sendAudio (file with metadata) - preserves old behavior
- Opt-in: [[audio_as_voice]] tag for voice bubble
This is non-breaking - existing integrations keep working.
2026-01-08 03:15:08 +00:00
Manuel Maly
262f8a8d45
feat(telegram): add [[audio_as_file]] tag support
...
Allow agents to specify audio mode via inline tag:
- Default: voice bubble (sendVoice)
- [[audio_as_file]]: audio file with metadata (sendAudio)
The tag is stripped from the final message text.
Example agent response:
Here's a podcast episode! [[audio_as_file]]
MEDIA:https://example.com/episode.mp3
2026-01-08 03:15:08 +00:00
Manuel Maly
5e1b91b32c
feat(telegram): wire audioAsVoice through bot.ts
...
- Add audioAsVoice option to ReplyPayload type
- Update bot.ts to use sendVoice by default for audio (voice bubble)
- When audioAsVoice is false, use sendAudio (file with metadata)
This allows agents to control voice vs file mode via ReplyPayload.
2026-01-08 03:15:08 +00:00
Manuel Maly
20fd9f7f67
feat(telegram): use sendVoice for audio with opt-out
...
Use Telegram's sendVoice API for audio files by default, displaying them
as round playable voice bubbles instead of file attachments.
Changes:
- Add asVoice option to TelegramSendOpts (defaults to true)
- When asVoice is true (default): use api.sendVoice() for voice bubbles
- When asVoice is false: use api.sendAudio() for traditional audio files
This gives callers control: voice messages for TTS/quick responses,
audio files for music/podcasts with metadata display.
2026-01-08 03:15:08 +00:00
mneves75
f7b32195cb
feat(agent): auto-enable GLM-4.7 thinking mode
...
Add automatic thinking mode support for Z.AI GLM-4.x models:
- GLM-4.7: Preserved thinking (clear_thinking: false)
- GLM-4.5/4.6: Interleaved thinking (clear_thinking: true)
Uses Z.AI Cloud API format: thinking: { type: "enabled", clear_thinking: boolean }
Includes patches for pi-ai, pi-agent-core, and pi-coding-agent to pass
extraParams through the stream pipeline. User can override via config
or disable via --thinking off.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 04:10:56 +01:00
Peter Steinberger
3f93781b4b
refactor: polish providers cli status
2026-01-08 04:07:09 +01:00
Peter Steinberger
bf2daeb3ae
fix(discord): cap lines per message
2026-01-08 04:06:25 +01:00
Peter Steinberger
6e4174b5dc
fix(ci): stabilize windows paths
2026-01-08 03:03:03 +00:00
Peter Steinberger
8aa3efb9e8
refactor: tidy directive parsing + queue status
2026-01-08 03:47:52 +01:00
Peter Steinberger
fbeb9e6775
fix(ci): stabilize windows tests
2026-01-08 02:44:19 +00:00
Peter Steinberger
780385e31f
fix(auto-reply): handle /think no-arg
2026-01-08 03:39:05 +01:00
Peter Steinberger
7f0f82e869
ci: enforce lf line endings
2026-01-08 02:29:20 +00:00
Peter Steinberger
ad5c87c193
fix: relax slash command parsing
2026-01-08 03:24:18 +01:00
Lutro
36b443f4f3
Telegram: fix /think command to show current level when no arg
2026-01-08 03:24:18 +01:00
Peter Steinberger
0d34f330b8
refactor(browser): share chrome resolution helpers
2026-01-08 02:18:43 +00:00
Peter Steinberger
1e826862c3
fix(browser): support Windows Chrome detection (PR #439 , thanks @mrdbstn)
2026-01-08 02:08:59 +00:00
Mourad Boustani
7294ba037d
browser: add Windows Chrome executable detection
2026-01-08 02:06:59 +00:00
Peter Steinberger
92a62bc300
style: format providers docs output
2026-01-08 02:01:43 +00:00
Peter Steinberger
313925b357
fix: restore gateway connection details helper
2026-01-08 02:00:27 +00:00
Peter Steinberger
6f82ec7b83
style: colorize providers list
2026-01-08 02:59:15 +01:00
Peter Steinberger
440a5b82cf
fix(gateway): honor local auth password for CLI (PR #301 , thanks @jeffersonwarrior)
2026-01-08 02:59:06 +01:00
Peter Steinberger
cda050d050
chore: tweak providers docs link
2026-01-08 02:56:47 +01:00
Peter Steinberger
03cf7da2bd
feat: default providers list to usage
2026-01-08 02:56:47 +01:00
Peter Steinberger
8ce6f783f0
feat: add usage to providers list
2026-01-08 02:56:47 +01:00
Peter Steinberger
2f707ad4ad
style: format gateway call helpers
2026-01-08 01:53:28 +00:00
Peter Steinberger
6aa6c837e7
fix: add gateway connection debug output
2026-01-08 02:51:39 +01:00
Peter Steinberger
3d0156890c
refactor: split port diagnostics helpers
2026-01-08 02:42:43 +01:00
Peter Steinberger
2fe3b483b1
fix: add gateway close context
2026-01-08 02:42:32 +01:00
Peter Steinberger
2140caaf67
fix: telegram html formatting ( #435 , thanks @RandyVentures)
2026-01-08 02:34:32 +01:00
Peter Steinberger
61f5ed8bb7
fix: improve gateway diagnostics
2026-01-08 02:29:32 +01:00
Peter Steinberger
cad853b547
refactor: rebuild agent system prompt
2026-01-08 02:20:30 +01:00
Peter Steinberger
a450390f7c
refactor: share reply payload threading/dedupe
2026-01-08 01:09:23 +00:00
Peter Steinberger
3f1807b6cb
fix: restore doctor sandbox warnings
2026-01-08 01:55:59 +01:00
Peter Steinberger
05b8679c8b
feat: add providers CLI and multi-account onboarding
2026-01-08 01:55:59 +01:00
Peter Steinberger
6b3ed40d0f
feat: format cron list output
2026-01-08 01:52:33 +01:00