Travis Hinton
8b5cd97ceb
Add Synthetic provider support
2026-01-13 03:36:53 +00:00
Shadow
25297ce3f5
Cron: accept jobId in gateway cron params
...
Closes #252
2026-01-12 21:35:43 -06:00
Gustavo Madeira Santana
3800fea962
Improve webhook test config verification
...
Refactors tests to use a shared config object and adds stricter assertions to verify that the config is passed correctly to createTelegramBot. Ensures the bindings property is checked in the test expectations.
2026-01-13 03:34:32 +00:00
Gustavo Madeira Santana
ecb91bbb1a
Add accountId and config support to Telegram webhook
...
The Telegram webhook and monitor now accept and pass through accountId and config parameters, enabling routing and configuration per Telegram account. Tests have been updated to verify correct bot instantiation and DM routing based on accountId bindings.
2026-01-13 03:34:32 +00:00
Shadow
ab993904d7
Models: normalize Gemini 3 ids in runtime selection
...
Closes #795
2026-01-12 21:32:53 -06:00
Shadow
2467a103b2
TUI: keep streamed text when final output is empty
...
Closes #747
2026-01-12 21:29:15 -06: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
da0a062fa7
fix: memory search remote overrides ( #819 ) (thanks @mukhtharcm)
2026-01-13 03:11:03 +00:00
Muhammed Mukhthar CM
ba316a10cc
feat: add remote config overrides to memorySearch
2026-01-13 03:02:43 +00:00
Peter Steinberger
c1f82d9ec1
refactor: dedupe enforceFinalTag resolution
2026-01-13 02:38:07 +00:00
Peter Steinberger
46a694bbc7
fix: preserve explicit maxChars=0 ( #796 ) (thanks @gabriel-trigo)
2026-01-13 02:33:38 +00:00
Gabriel Trigo
79a6506593
fix(browser): limit ai snapshot size
...
test(browser): cover ai snapshot limit
2026-01-13 02:33:38 +00:00
Peter Steinberger
8edf2146ae
fix: cleanup stale resume cli processes
2026-01-13 02:21:20 +00:00
Peter Steinberger
958a4fd414
Merge pull request #782 from AbhisekBasu1/fix/antigravity-opus-tools-not-working
...
Fix - Opus on Antigravity Errors
2026-01-13 01:59:52 +00:00
Peter Steinberger
a27efd57bd
fix: drop null-only union variants ( #782 ) (thanks @AbhisekBasu1)
...
Co-authored-by: Abhi <AbhisekBasu1@users.noreply.github.com>
2026-01-13 01:58:30 +00:00
Peter Steinberger
4f1c6e76fd
fix: gate inline /status stripping
2026-01-13 01:53:40 +00:00
Peter Steinberger
2111d0c653
test: force real config module for lan onboarding test ( #766 )
2026-01-13 01:53:40 +00:00
Peter Steinberger
642e6acf49
test: unmock config for lan onboarding auto-token ( #766 )
2026-01-13 01:53:40 +00:00
Peter Steinberger
88716d8d2a
fix: harden inline /status stripping ( #766 )
2026-01-13 01:53:40 +00:00
Peter Steinberger
c2e37c78ff
fix: trim sender ids before auth fallback
2026-01-13 01:53:40 +00:00
Abhi
ba1d80bd00
formatting fix
2026-01-13 01:48:56 +00:00
Abhi
4dfcd56893
Fix pi-tools test ordering and clean-for-gemini handling - which fixes the 400 error people are experiencing trying to use antigravity on opus
2026-01-13 01:48:34 +00:00
Peter Steinberger
c012019a8a
fix: enforce reasoning tags on fallback providers ( #810 ) (thanks @mcinteerj)
2026-01-13 01:46:21 +00:00
Keith the Silly Goose
7896b30489
fix(auto-reply): enforce reasoning tags on fallback providers
2026-01-13 01:40:55 +00:00
Peter Steinberger
ffc465394e
fix: enforce message context isolation
2026-01-13 01:19:14 +00:00
Peter Steinberger
0edbdb1948
fix: downgrade Gemini tool history
2026-01-13 01:19:13 +00:00
hsrvc
5dc187f00c
fix: accept Claude/Gemini tool param aliases
2026-01-13 01:19:13 +00:00
Peter Steinberger
231d2d5fdf
fix(config): require doctor for invalid configs ( #764 — thanks @mukhtharcm)
2026-01-13 01:18:18 +00:00
Muhammed Mukhthar CM
20ba8d4891
fix(config): preserve config data when validation fails
...
When readConfigFileSnapshot encounters validation errors, it now:
1. Returns the resolved config data instead of empty object
2. Uses passthrough() on main schema to preserve unknown fields
This prevents config loss when:
- User has custom/unknown fields
- Legacy config issues are detected but config is otherwise valid
- Zod schema does not recognize newer fields
Fixes config being overwritten with empty object on validation failure.
2026-01-13 01:16:13 +00:00
Peter Steinberger
dd8f7552ad
refactor: reuse dispatcher helper for native commands
2026-01-13 01:07:59 +00:00
Rony Kelner
07bdb8af7e
fix: pass --non-interactive to doctor during update
2026-01-13 00:57:18 +00:00
Peter Steinberger
6a48688c09
fix: stream native slash tool replies
2026-01-13 00:53:30 +00:00
Peter Steinberger
c03a745f61
test: expand Minimax XML strip coverage
2026-01-13 00:43:59 +00:00
Peter Steinberger
48fdf3775d
test: cover user turn merging
2026-01-13 00:42:15 +00:00
Peter Steinberger
e2ea20f862
fix: gate minimax XML stripping ( #809 ) (thanks @latitudeki5223)
2026-01-13 00:36:39 +00:00
L36 Server
1eb924739b
style: fix import order in pi-embedded-utils.test.ts
2026-01-13 00:34:01 +00:00
L36 Server
350f956f2c
fix(minimax): strip tool invocation XML from assistant text
2026-01-13 00:34:01 +00:00
Peter Steinberger
4f3bedfdb7
fix: align discord autoThread config types
2026-01-13 00:22:42 +00:00
Peter Steinberger
6f75feaeb8
refactor: reuse model selection assertions
2026-01-13 00:20:08 +00:00
Peter Steinberger
a4bd960880
refactor: streamline thread reply planning
2026-01-13 00:15:29 +00:00
Peter Steinberger
3636a2bf51
refactor: unify message tool + CLI
2026-01-13 00:12:57 +00:00
Peter Steinberger
ce23c70855
fix: validate Anthropic turn order ( #804 ) (thanks @ThomsenDrake)
2026-01-12 23:43:25 +00:00
Drake Thomsen
c5fa757ef6
fix(agents): prevent Anthropic 400 'Incorrect role information' error
...
Add validateAnthropicTurns() to merge consecutive user messages that can
occur when steering messages are injected during streaming. This prevents
the API from rejecting requests due to improper role alternation.
Changes:
- Add validateAnthropicTurns() function in pi-embedded-helpers.ts
- Integrate validation into sanitization pipeline in pi-embedded-runner.ts
- Add user-friendly error message for role ordering errors
- Add comprehensive tests for the new validation function
2026-01-12 23:42:13 +00:00
Peter Steinberger
bb9a9633a8
fix: align reply threading refs
2026-01-12 23:41:40 +00:00
Peter Steinberger
ca98f87b2f
chore: reinforce memory recall prompts
2026-01-12 23:29:56 +00:00
Peter Steinberger
df64771ecf
test: cover fuzzy model selection
2026-01-12 23:16:54 +00:00
Peter Steinberger
cbe11e3de0
fix: address lint warnings
2026-01-12 23:13:40 +00:00
Peter Steinberger
daa753112c
fix: unblock auto-reply lint/typecheck
2026-01-12 23:13:39 +00:00
David Guttman
2e654e8d63
Fix Discord autoThread thread-only replies ( #807 )
...
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-12 17:11:48 -06:00
Peter Steinberger
cf92099d40
test(auto-reply): fix heartbeat typing block reply assertions
2026-01-12 23:01:53 +00:00
Peter Steinberger
a8680f9a09
fix(auto-reply): fix streaming block reply media handling
2026-01-12 22:59:36 +00:00
Peter Steinberger
2e08a868a7
style: format native commands bits
2026-01-12 22:59:36 +00:00
Peter Steinberger
2785009c6f
fix(config): resolve native commands schemas
2026-01-12 22:59:36 +00:00
Peter Steinberger
73d9469bf8
fix(telegram): tolerate missing native command APIs
2026-01-12 22:59:36 +00:00
Peter Steinberger
72100ba3ab
refactor(sandbox): drop legacy memory shorthand
2026-01-12 22:59:36 +00:00
Peter Steinberger
ec5099db89
fix: pick best fuzzy model match
2026-01-12 22:59:35 +00:00
Peter Steinberger
209380edf8
Merge pull request #801 from mcinteerj/fix/restore-reasoning-tag-check
...
fix(agent): restore reasoning tag enforcement for non-ollama providers
2026-01-12 22:59:13 +00:00
Peter Steinberger
cf8251bb81
test: cover typing signals from block and tool streams
2026-01-12 22:55:17 +00:00
Peter Steinberger
fd768334a9
refactor: fast-lane directives helpers
2026-01-12 22:34:13 +00:00
Peter Steinberger
27d940f5b6
refactor: reuse streaming text normalizer across callbacks
2026-01-12 22:27:56 +00:00
Peter Steinberger
7ba72aeb6c
fix: make pw download tests platform-safe
2026-01-12 22:27:19 +00:00
Peter Steinberger
9d5bf38416
style(telegram): format bot.ts
2026-01-12 22:19:02 +00:00
Peter Steinberger
e0c1f2fdc0
test(agents): avoid Copilot token fetch in image-tool tests
2026-01-12 22:19:02 +00:00
Peter Steinberger
08fdac0561
fix(telegram): guard setMyCommands in native commands
2026-01-12 22:19:02 +00:00
Peter Steinberger
d3eeddfc2f
chore: fix lint after rebase
2026-01-12 22:19:02 +00:00
Peter Steinberger
9da97d1a41
test(browser): expand scrollintoview coverage
2026-01-12 22:19:02 +00:00
Peter Steinberger
29b7b2068a
refactor: centralize streaming text normalization
2026-01-12 22:17:14 +00:00
Peter Steinberger
f4ab057807
fix: start typing on partial deltas
2026-01-12 22:16:29 +00:00
Peter Steinberger
f13db1c836
test: guard telegram native commands when mock lacks .command
2026-01-12 22:12:16 +00:00
Peter Steinberger
59063a7c15
test: skip setMyCommands when API mock lacks it
2026-01-12 22:08:53 +00:00
Peter Steinberger
5bc4971432
chore: fix lint warnings
2026-01-12 22:07:39 +00:00
Peter Steinberger
59c8d2d17f
docs: clarify sandbox bind mounts ( #790 )
2026-01-12 22:06:35 +00:00
Peter Steinberger
21405b0dfc
fix(discord): rebalance reasoning italics
2026-01-12 22:01:48 +00:00
Peter Steinberger
256304037e
fix: keep Claude file_path aliases validated
2026-01-12 22:00:08 +00:00
Peter Steinberger
bbc34215a2
fix: land sandbox binds ( #790 ) (thanks @akonyer)
2026-01-12 21:58:16 +00:00
Aaron Konyer
583fc4fb11
test(sandbox): add coverage for binds -v flag emission
2026-01-12 21:57:51 +00:00
Aaron Konyer
0b2b8c7c52
Add docker bind mounds for sandboxing
2026-01-12 21:57:51 +00:00
Peter Steinberger
5d83be76c9
test: cover mixed directive fast-lane
2026-01-12 21:57:10 +00:00
Peter Steinberger
fcaeee7073
test(browser): cover scrollintoview
2026-01-12 21:56:27 +00:00
Peter Steinberger
6857f16609
feat(browser): add scrollintoview action
2026-01-12 21:56:27 +00:00
Peter Steinberger
2faf7cea93
feat(sandbox): add tool-policy groups
2026-01-12 21:51:49 +00:00
Peter Steinberger
26d5cca97c
feat: auto native commands defaults
2026-01-12 21:49:44 +00:00
Peter Steinberger
99fea64823
fix: fast-lane directives bypass queue dedupe
2026-01-12 21:44:19 +00:00
Peter Steinberger
42c17adb5e
feat: restore voice-call plugin parity
2026-01-12 21:44:19 +00:00
Zach Knickerbocker
3467b0ba07
Discord: add allowBots config option ( #802 )
...
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-12 15:30:05 -06:00
Peter Steinberger
490cb834e5
style: italicize reasoning output
2026-01-12 21:24:36 +00:00
Peter Steinberger
cd12ad8aab
fix(image): accept @-prefixed file paths
2026-01-12 20:53:16 +00:00
Jake
eceb41f6f7
fix(agent): restore reasoning tag enforcement for non-ollama providers
...
This restores the fix from PR #754 which was accidentally reverted in bf11a42c3 .
2026-01-13 09:47:04 +13:00
Peter Steinberger
e961e02f71
fix(gateway): quiet loopback ws closes
2026-01-12 20:38:34 +00:00
Peter Steinberger
36a02b3e67
fix(image): route MiniMax vision to VLM
2026-01-12 20:38:34 +00:00
David Guttman
b73042500e
Discord: per-channel autoThread ( #800 )
...
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-12 14:33:07 -06:00
Peter Steinberger
f839d949b2
test(browser): cover downloads + responsebody
2026-01-12 19:41:12 +00:00
Peter Steinberger
d4f7dc067e
feat(browser): add downloads + response bodies
2026-01-12 19:41:12 +00:00
Peter Steinberger
ddd4b55cf6
fix: prevent onboarding TUI auto-delivery ( #791 ) (thanks @roshanasingh4)
2026-01-12 19:38:52 +00:00
Roshan Singh
298c6eea1f
Fix: prevent onboarding TUI auto-delivery
2026-01-12 19:31:04 +00:00
Peter Steinberger
55aeb8a0d3
fix(image): drop temperature for OpenAI
2026-01-12 19:09:15 +00:00
Peter Steinberger
86ea00dc21
fix(tools): accept legacy bash tool calls
2026-01-12 19:09:15 +00:00
Peter Steinberger
a0a7e74a62
fix(models): preserve implicit vision models
2026-01-12 19:09:15 +00:00
Peter Steinberger
bb7397c636
feat: add dashboard command
2026-01-12 19:08:29 +00:00
Peter Steinberger
7dc44b04c1
fix: close memory index and refresh protocol outputs
2026-01-12 18:49:24 +00:00
Peter Steinberger
45232137a2
fix(logging): honor silent console level
2026-01-12 18:46:40 +00:00
Peter Steinberger
b1c3e38df0
refactor(models): share implicit providers
2026-01-12 18:46:40 +00:00
Peter Steinberger
0be62c3542
fix(image): fail over on empty output
2026-01-12 18:46:16 +00:00
Peter Steinberger
523f91758d
test(browser): extend automation coverage
2026-01-12 18:42:46 +00:00
Peter Steinberger
ffbcd83d1e
chore: log elevated and reasoning toggles
2026-01-12 18:37:44 +00:00
Peter Steinberger
1baf9f6a83
fix(image): normalize mime type handling
2026-01-12 18:24:11 +00:00
Peter Steinberger
77b20377cc
fix: stabilize session tools and tests
2026-01-12 18:21:20 +00:00
Peter Steinberger
3ffb9a3b5e
fix: keep session sanitizer stable
2026-01-12 18:19:30 +00:00
Peter Steinberger
29807119d5
chore: format tool guard files
2026-01-12 18:19:30 +00:00
Peter Steinberger
b88ea39b83
fix: add subagent default model typing
2026-01-12 18:18:15 +00:00
Peter Steinberger
0a2dcd844b
fix(image): support data URLs
2026-01-12 18:17:43 +00:00
Peter Steinberger
2ed95634fe
fix: relax image tool agentDir guard
2026-01-12 18:12:51 +00:00
Peter Steinberger
7b93356fb7
feat: subagent model defaults
2026-01-12 18:08:30 +00:00
Peter Steinberger
17ff25bd20
fix(sandbox): always allow image tool
2026-01-12 18:07:34 +00:00
Peter Steinberger
d24de1ec3b
feat(sandbox): allow image tool
2026-01-12 17:56:51 +00:00
Peter Steinberger
44e1f271c8
fix: keep image sanitizer scoped
2026-01-12 17:55:45 +00:00
Peter Steinberger
8ff09f8337
feat(image): auto-pair image model
2026-01-12 17:50:47 +00:00
Peter Steinberger
e91aa0657e
fix: add copilot tests and lint fixes
2026-01-12 17:48:08 +00:00
Ayaan Zaidi
14801b46fc
Merge pull request #792 from clawdbot/fix/gateway-auth-off
...
fix: clear gateway auth when set to off
2026-01-12 23:10:15 +05:30
Peter Steinberger
35bbc2ba87
feat(cli): expand browser commands
2026-01-12 17:32:44 +00:00
Peter Steinberger
cf78d28d74
test(browser): add regression coverage
2026-01-12 17:32:44 +00:00
Peter Steinberger
eeca541dde
feat(browser): expand browser control surface
2026-01-12 17:32:44 +00:00
Ayaan Zaidi
4bba49770d
fix: clear gateway auth on off selection
2026-01-12 22:59:37 +05:30
Peter Steinberger
f5d5661adf
fix: guard session tool results
2026-01-12 17:28:46 +00:00
Peter Steinberger
f83fb70360
fix: keep main agent in list output
2026-01-12 17:24:03 +00:00
Peter Steinberger
355c13564c
fix: restore heartbeat defaults and model listing
2026-01-12 17:17:54 +00:00
Peter Steinberger
f1dd59bf82
test: update heartbeat and agent list thresholds
2026-01-12 17:14:04 +00:00
Peter Steinberger
fd1e959c2d
fix: clean up models-config provider normalization
2026-01-12 17:14:04 +00:00
Peter Steinberger
05ac67c520
refactor: split models-config provider helpers
2026-01-12 17:05:53 +00:00
Peter Steinberger
f5ee2b3a4f
Merge pull request #705 from TAGOOZ/feat/github-copilot-onboard
...
feat: add GitHub Copilot provider
2026-01-12 16:56:51 +00:00
Peter Steinberger
8afdf75e2b
fix: honor copilot config and profiles ( #705 ) (thanks @TAGOOZ)
2026-01-12 16:55:47 +00:00
Peter Steinberger
5a3eb5ad62
test: cover models.json apiKey fill
2026-01-12 16:52:43 +00:00
Peter Steinberger
79beb20ba2
fix: make models.json generation fill apiKey
2026-01-12 16:52:43 +00:00
Mustafa Tag Eldeen
3da1afed68
feat: add GitHub Copilot provider
...
Copilot device login + onboarding option; model list auth detection.
2026-01-12 16:52:15 +00:00
Ayaan Zaidi
adaa30c73a
test(telegram): cover General topic typing fallback
2026-01-12 22:03:42 +05:30
Azade
ff292e67ce
fix(telegram): show typing indicator in General forum topic
...
In forum supergroups, messages from the General topic arrive without
message_thread_id in updates, but sendChatAction requires one to display
the typing indicator in the correct topic.
Use message_thread_id=1 (Telegram's internal ID for General topic) as
fallback when messageThreadId is undefined in a forum chat.
2026-01-12 22:01:21 +05:30
Peter Steinberger
bf11a42c37
feat: add memory vector search
2026-01-12 11:23:44 +00:00
Peter Steinberger
8049f33435
chore: sanitize onboarding api keys
2026-01-12 11:18:31 +00:00
Peter Steinberger
115591c5b6
feat: add cron agent binding
2026-01-12 11:07:38 +00:00
Peter Steinberger
a3938d62f6
chore: raise heartbeat ack window
2026-01-12 11:06:46 +00:00
Peter Steinberger
3c7a8579ad
test: cover minimax env provider injection
2026-01-12 11:05:08 +00:00
Peter Steinberger
f5a9421b10
fix: auto-add minimax provider from auth
2026-01-12 11:05:08 +00:00
Peter Steinberger
562d0e3b5f
fix: avoid duplicate status replies
2026-01-12 11:04:03 +00:00
Peter Steinberger
bf7e813573
chore: release 2026.1.11-4
2026-01-12 10:52:34 +00:00
Peter Steinberger
5a29ec78ca
chore: release 2026.1.11-3
2026-01-12 10:35:50 +00:00
Peter Steinberger
8fb655198f
test: skip lan auto-token on windows
2026-01-12 09:20:37 +00:00
Peter Steinberger
a4308a2428
chore: tidy changelog and format
2026-01-12 09:14:44 +00:00
Peter Steinberger
f102d1bb9d
fix: add ws handshake user agent
2026-01-12 09:08:07 +00:00
Peter Steinberger
d8feadb57a
fix: strip gemini cli tool ids ( #756 )
2026-01-12 09:01:19 +00:00
Peter Steinberger
1050126132
fix: default groupPolicy to open for discord/telegram
2026-01-12 08:55:02 +00:00
Peter Steinberger
9554292083
fix: default groupPolicy to open
2026-01-12 08:55:02 +00:00
Peter Steinberger
a8f67f0be6
fix: only strip inline /status for allowlisted senders
2026-01-12 08:55:02 +00:00
Peter Steinberger
fadad6e061
feat: role snapshot refs for browser
2026-01-12 08:55:02 +00:00
Peter Steinberger
6711eaf8a5
fix: finalize tool param aliasing ( #768 ) (thanks @hsrvc)
2026-01-12 08:49:11 +00:00
hsrvc
71fdc829e6
Agents: add Claude Code parameter aliasing for read/write/edit tools
2026-01-12 08:49:11 +00:00
Peter Steinberger
19c96e8c0b
Merge pull request #754 from mcinteerj/fix/reasoning-tag-strip
...
fix(agent): prevent reasoning and tag leaks for Gemini 3/Antigravity models
2026-01-12 08:47:15 +00:00
Peter Steinberger
98e75fce17
test: align group policy defaults
2026-01-12 08:45:57 +00:00
Peter Steinberger
252841ab13
fix: enforce final tag gating ( #754 ) (thanks @mcinteerj)
2026-01-12 08:45:23 +00:00
Keith the Silly Goose
a7cb270999
fix(agent): buffer streaming output until <final> tag appears
...
- Enforces strict buffering when enforceFinalTag is enabled.
- Prevents 'thinking out loud' planning steps (e.g. '*Locating Manulife*') from leaking to WhatsApp.
- Hardens <final> tag stripping to remove nested/hallucinated tags.
2026-01-12 08:34:06 +00:00
Keith the Silly Goose
efdf874407
fix(agent): correctly strip <final> tags from reasoning providers
...
- Added src/utils/provider-utils.ts to track reasoning provider logic
- Updated isReasoningTagProvider to loosely match 'google-antigravity' (fixes sub-models)
- Enabled enforceFinalTag in reply.ts when provider matches
- Verified <final> tag stripping logic in pi-embedded-subscribe.ts
- Updated pi-embedded-runner to use consistent provider check for prompt hints
2026-01-12 08:34:06 +00:00
Peter Steinberger
7db1cbe178
fix: improve daemon node selection
2026-01-12 08:33:32 +00:00
Peter Steinberger
006e1352d8
fix: harden msteams group access
2026-01-12 08:32:08 +00:00
Peter Steinberger
4d075a703e
fix: add ws handshake context
2026-01-12 08:30:08 +00:00
Peter Steinberger
842e91d019
fix: default groupPolicy to allowlist
2026-01-12 08:22:01 +00:00
Peter Steinberger
d0ba56c5ac
fix: set default model after auth choice
2026-01-12 08:04:32 +00:00
Peter Steinberger
b8f8e7f4dd
fix: correct MiniMax Lightning hint
2026-01-12 08:04:32 +00:00
Peter Steinberger
3fba8ceb97
test(model): cover provider-less id fuzzy match
2026-01-12 08:02:55 +00:00
Peter Steinberger
60823fd9bd
feat(model): fuzzy /model matching
2026-01-12 07:57:53 +00:00
Peter Steinberger
e79cf5a8b1
feat: improve onboarding auth prompts
2026-01-12 07:47:15 +00:00
Peter Steinberger
018f7aa4df
fix: streamline configure section flow
2026-01-12 07:47:15 +00:00
Peter Steinberger
e1150f1b93
test: expand memory flush coverage
2026-01-12 07:42:03 +00:00
Peter Steinberger
d17fc7e448
fix(auto-reply): preserve inline /status text for unauthorized senders
2026-01-12 07:42:03 +00:00
Peter Steinberger
484a33f348
fix: cap ai snapshots for tool calls ( #763 ) (thanks @thesash)
2026-01-12 07:40:34 +00:00
Sash Catanzarite
d5d8c01dc7
Browser: cap AI snapshots to avoid context overflow
2026-01-12 07:40:34 +00:00
Peter Steinberger
097e66391f
fix(auto-reply): show config models in /model
2026-01-12 07:31:20 +00:00
Peter Steinberger
7466575120
fix: ignore inline status directives
2026-01-12 07:13:08 +00:00
Peter Steinberger
e19a5dc2b1
feat(control-ui): add model presets
2026-01-12 07:09:58 +00:00
Peter Steinberger
f00667ea25
fix: clean up lint + guardCancel typing
2026-01-12 07:07:27 +00:00
Peter Steinberger
1850013cae
fix: modernize live tests and gemini ids
2026-01-12 07:05:33 +00:00
Peter Steinberger
496bad8b98
feat: add Moonshot auth choice
2026-01-12 06:48:06 +00:00
Peter Steinberger
1a89a5dd14
test(model): expand /model picker coverage
2026-01-12 06:34:33 +00:00
Peter Steinberger
5b44825cb3
fix: skip memory flush on read-only workspace
2026-01-12 06:33:27 +00:00
Peter Steinberger
1ffb0fe787
fix: handle inline status for allowlisted senders
2026-01-12 06:33:27 +00:00
Peter Steinberger
46a6d79784
fix: sender fallback for command auth ( #755 ) (thanks @juanpablodlc)
2026-01-12 06:28:53 +00:00
juanpablodlc
20d606c4c4
fix: use logical OR for sender ID fallback in command auth
...
The nullish coalescing operator (??) only skips null/undefined, not
empty strings. For direct WhatsApp messages, ctx.SenderId was an empty
string, causing senderRaw to be "" instead of falling through to the
valid ctx.SenderE164 value.
This caused commands like /status to be rejected with "unauthorized
sender" for self-chat WhatsApp messages.
Tested: Verified /status command now works correctly for self-chat
WhatsApp messages after the fix.
2026-01-12 06:20:51 +00:00
Peter Steinberger
e388334127
test: cover pi session jsonl ordering
2026-01-12 06:19:58 +00:00
Peter Steinberger
c9f2358769
test: clean unused var
2026-01-12 06:14:45 +00:00
Peter Steinberger
4044957819
test: fix lint warning
2026-01-12 06:14:45 +00:00
Peter Steinberger
b185d130ba
test: cover inline slash command fast-path
2026-01-12 06:14:45 +00:00
Peter Steinberger
2bed0d78af
test: stabilize lan auto-token onboarding
2026-01-12 06:13:31 +00:00
Peter Steinberger
0baf08fda1
fix: dedupe minimax non-interactive auth
2026-01-12 06:13:31 +00:00
Peter Steinberger
d0861670bd
feat: simplify minimax auth choice
2026-01-12 06:13:00 +00:00
Peter Steinberger
744fadbded
feat: loop configure section picker
2026-01-12 06:13:00 +00:00
Peter Steinberger
0f257f792a
fix: fast-path slash commands
2026-01-12 06:10:17 +00:00
Peter Steinberger
2da2057a37
feat(model): add /model picker
2026-01-12 06:02:39 +00:00
Peter Steinberger
7dbb21be8e
feat: add pre-compaction memory flush
2026-01-12 05:29:18 +00:00
Peter Steinberger
cc8a2457c0
fix: persist first Pi user message in JSONL
2026-01-12 05:18:05 +00:00
Peter Steinberger
f5c851e11e
fix(models): default MiniMax to /anthropic
2026-01-12 05:12:07 +00:00
Peter Steinberger
873cee6947
feat: streamline wizard selection prompts
2026-01-12 05:08:07 +00:00
Peter Steinberger
51d5f16770
refactor: remove mac attach-only setting
2026-01-12 04:58:38 +00:00
Peter Steinberger
8e1cdf3a1f
fix: require gateway client id
...
# Conflicts:
# apps/macos/Sources/Clawdbot/GatewayChannel.swift
# docs/concepts/typebox.md
# docs/gateway/index.md
# src/commands/onboard-non-interactive.gateway-auth.test.ts
# src/commands/onboard-non-interactive.lan-auto-token.test.ts
# src/gateway/call.ts
# src/gateway/client.ts
# src/gateway/gateway.wizard.e2e.test.ts
# src/gateway/probe.ts
# src/gateway/protocol/schema.ts
# src/gateway/server.auth.test.ts
# src/gateway/server.health.test.ts
# src/gateway/server.ts
# src/gateway/test-helpers.ts
# src/tui/gateway-chat.ts
2026-01-12 04:58:38 +00:00
Peter Steinberger
87f270df23
test: respect openai max tokens floor
2026-01-12 04:04:04 +00:00
Peter Steinberger
8b4bdaa8a4
feat: add apply_patch tool (exec-gated)
2026-01-12 03:42:56 +00:00
Peter Steinberger
6a012fd625
refactor: reuse resolved think default
2026-01-12 03:00:30 +00:00
Peter Steinberger
1fa7a587d6
fix: flush block reply buffers on tool boundaries ( #750 ) (thanks @sebslight)
2026-01-12 02:54:57 +00:00
The Admiral
c64bcd047b
fix: flush block reply coalescer on tool boundaries
...
When block streaming is enabled with verbose=off, tool blocks are hidden
but their boundary information was lost. Text segments before and after
tool execution would get coalesced into a single message because the
coalescer had no signal that a tool had executed between them.
This adds an onBlockReplyFlush callback that fires on tool_execution_start,
allowing the block reply pipeline to flush pending text before the tool
runs. This preserves natural message boundaries even when tools are hidden.
Fixes the issue where:
text → [hidden tool] → text → rendered as one merged message
Now correctly renders as:
text → [hidden tool] → text → two separate messages
Co-diagnosed-by: Krill (Discord assistant)
2026-01-12 02:52:48 +00:00
Peter Steinberger
d4d15c8a71
Merge pull request #751 from gabriel-trigo/fix/think-default-743
...
fix: align /think default with model reasoning
2026-01-12 02:52:25 +00:00
Peter Steinberger
17e6354383
Merge pull request #748 from myfunc/main
...
fix(bash): use PowerShell on Windows to capture system utility output
2026-01-12 02:50:30 +00:00
Gabriel Trigo
99877e8e63
fix: align /think default with model reasoning
2026-01-12 02:50:13 +00:00
Peter Steinberger
98337a14b3
fix: rename bash tool to exec ( #748 ) (thanks @myfunc)
2026-01-12 02:49:55 +00:00
Peter Steinberger
76c8fc8697
fix(sandbox): canonicalize agent main alias
2026-01-12 02:23:02 +00:00
myfunc
b33bd6aaeb
fix(bash): use PowerShell on Windows to capture system utility output
...
Windows system utilities like ipconfig, systeminfo, etc. write directly to
the console via WriteConsole API instead of stdout. When Node.js spawns
cmd.exe with piped stdio, these utilities produce empty output.
Changes:
- Switch from cmd.exe to PowerShell on Windows (properly redirects output)
- Disable detached mode on Windows (PowerShell doesn't pipe stdout when detached)
- Add windowsHide option to prevent console window flashing
- Update tests to use PowerShell-compatible syntax (Start-Sleep, semicolons)
2026-01-12 02:13:02 +00:00
Peter Steinberger
4ced7b886e
docs: fix browser CLI docs link
2026-01-12 02:09:10 +00:00
Peter Steinberger
2941a7002d
fix(subagents): align wait timeout with run timeout
2026-01-12 02:06:43 +00:00
Peter Steinberger
b518fb29c6
test(gateway): cover main alias resolve
2026-01-12 02:06:43 +00:00
Peter Steinberger
f504bfdde8
refactor(gateway): use canonical session store keys
2026-01-12 02:06:43 +00:00
Peter Steinberger
c1236e86fa
test: fix windows nix config path assertion
2026-01-12 02:05:38 +00:00
Peter Steinberger
e3960cde3f
test: add normalizeConfigPaths unit test
2026-01-12 01:55:55 +00:00
Peter Steinberger
ecc6243edc
test: cover tilde path expansion
2026-01-12 01:53:42 +00:00
Peter Steinberger
328d47f1df
fix: normalize ~ in path config
2026-01-12 01:53:42 +00:00
Peter Steinberger
28f97e6152
refactor(sandbox): normalize main session aliases
2026-01-12 01:37:56 +00:00
Peter Steinberger
23a0bf2abe
fix(plugins): extract archives without system tar
2026-01-12 01:36:18 +00:00
Peter Steinberger
07b93e1d26
test: run npm pack via npm-cli.js
2026-01-12 01:31:26 +00:00
Peter Steinberger
5bdb9c0e99
style: format plugin install test
2026-01-12 01:27:01 +00:00
Peter Steinberger
6947ab18dc
fix: load plugin packages from config dirs
2026-01-12 01:25:56 +00:00
Peter Steinberger
177ad3f06d
test: pack plugin archives via npm
2026-01-12 01:25:40 +00:00
Peter Steinberger
58a12a757e
fix(sandbox): avoid sandboxing main DM sessions
2026-01-12 01:24:44 +00:00
Peter Steinberger
f13ae50ff8
test: plugin install + docker e2e
2026-01-12 01:16:42 +00:00
Peter Steinberger
2f4a248314
feat: plugin system + voice-call
2026-01-12 01:16:39 +00:00
Peter Steinberger
9877733748
fix(gateway): canonicalize main session aliases
2026-01-12 01:05:43 +00:00
user
d4e9f23ee9
fix(gateway): normalize session key to canonical form before store writes
...
Ensure 'main' alias is always stored as 'agent:main:main' to prevent
duplicate entries. Also update loadSessionEntry to check both forms
when looking up entries.
Fixes duplicate main sessions in session store.
2026-01-12 00:53:20 +00:00
user
7d6f17d77f
fix(subagent): make announce prompt more emphatic
...
The previous prompt was too permissive about skipping announcements.
Updated to strongly encourage announcing results since the requester
is waiting for a response.
- Add 'You MUST announce your result' instruction
- Clarify ANNOUNCE_SKIP is only for complete failures
- Improve guidance on providing useful summaries
2026-01-12 00:52:36 +00:00
user
0ed7ea698a
fix(subagent): wait for completion before announce
...
The previous immediate probe (timeoutMs: 0) only caught already-completed
runs. Cross-process spawns need to actually wait via agent.wait RPC for
the gateway to signal completion, then trigger the announce flow.
- Rename probeImmediateCompletion to waitForSubagentCompletion
- Use 10 minute wait timeout for agent.wait RPC
- Remove leftover debug console.log statements
2026-01-12 00:52:36 +00:00
Peter Steinberger
74526645eb
test: cover unset docker env vars
2026-01-12 00:46:55 +00:00
Peter Steinberger
cb095c8606
test: fix includes tests on windows
2026-01-12 00:39:14 +00:00
Peter Steinberger
9c8967ef5d
style: biome fixes
2026-01-12 00:32:47 +00:00
Peter Steinberger
720b9dd116
fix: make codex keychain platform-aware
2026-01-12 00:32:47 +00:00
Peter Steinberger
9f9f6b75e7
test: expand include coverage
2026-01-12 00:30:26 +00:00
Peter Steinberger
26cbbafc86
fix: skip pnpm patch fallback
2026-01-12 00:28:34 +00:00
Peter Steinberger
67743325ee
fix: reset session after compaction overflow
2026-01-12 00:28:16 +00:00
Peter Steinberger
32df2ef7bd
fix: stabilize invalid-connect handshake response
2026-01-12 00:19:47 +00:00
Peter Steinberger
e3e3498a4b
fix: guard config includes ( #731 ) (thanks @pasogott)
2026-01-12 00:12:03 +00:00
sheeek
53d3134fe8
refactor(config): simplify includes with class-based processor
...
- Replace free functions with IncludeProcessor class
- Simplify IncludeResolver interface: { readFile, parseJson }
- Break down loadFile into focused private methods
- Use reduce() for array include merging
- Cleaner separation of concerns
2026-01-12 00:08:27 +00:00
sheeek
e6400b0b0f
refactor(config): extract includes logic to separate module
...
- Move $include resolution to src/config/includes.ts
- Simplify io.ts by importing from includes module
- Cleaner API: resolveConfigIncludes(obj, configPath, resolver?)
- Re-export errors from io.ts for backwards compatibility
- Rename test file to match module name
2026-01-12 00:08:27 +00:00
sheeek
15d286b617
feat(config): add $include directive for modular configs
...
Adds support for splitting clawdbot.json into multiple files using the
$include directive. This enables:
- Single file includes: { "$include": "./agents.json5" }
- Multiple file merging: { "$include": ["./a.json5", "./b.json5"] }
- Nested includes (up to 10 levels deep)
- Sibling key merging with includes
Features:
- Relative paths resolved from including file
- Absolute paths supported
- Circular include detection
- Clear error messages with resolved paths
Use case: Per-client agent configs for isolated sandboxed environments
(e.g., legal case management with strict data separation).
2026-01-12 00:08:27 +00:00
Peter Steinberger
4b51c96e4e
fix: apply model extra params without overwriting stream ( #732 ) (thanks @peschee)
2026-01-12 00:03:48 +00:00
Peter Siska
d9960d83c1
style: fix formatting (biome)
2026-01-12 00:03:25 +00:00
Peter Siska
32affaee02
feat: wire up model extraParams (temperature, maxTokens) to pi agent
...
- Use resolveExtraParams() which was defined but unused
- Create streamFn wrapper that injects config-driven params
- Apply to both compaction and run sessions
Config path: agents.defaults.models["provider/model"].params.temperature
Example:
agents.defaults.models["anthropic/claude-sonnet-4"].params.temperature = 0.7
agents.defaults.models["openai/gpt-4"].params.maxTokens = 8192
2026-01-12 00:03:24 +00:00
Peter Steinberger
60430fcd2e
chore: harden installer and add smoke ci
2026-01-12 00:00:54 +00:00
Peter Steinberger
55e55c8825
fix: preserve handshake close code and test truncation
2026-01-11 23:57:37 +00:00
Peter Steinberger
146f7ab433
fix: surface handshake reasons
2026-01-11 23:46:20 +00:00
Peter Steinberger
1f95d7fc8b
fix: read codex keychain credentials
2026-01-11 23:39:10 +00:00
Peter Steinberger
3a8bfc0a5d
Merge pull request #733 from AbhisekBasu1/patch-1
...
Readme Fix: Update section title from 'macOS app' to 'Apps'
2026-01-11 23:38:38 +00:00
Peter Steinberger
26cc2bd384
fix: land PR #733 (thanks @AbhisekBasu1)
2026-01-11 23:37:44 +00:00
Peter Steinberger
248c731e78
test: expand voice-call coverage
2026-01-11 23:35:47 +00:00
Peter Steinberger
4181e72977
fix: strip markup heartbeat acks
2026-01-11 23:26:51 +00:00
Peter Steinberger
367baaca20
feat: implement voice-call plugin
2026-01-11 23:23:14 +00:00
Ayaan Zaidi
f082f1e06e
fix: add discord channel actions
2026-01-11 22:32:17 +05:30
Ayaan Zaidi
0d9a1009ff
fix: format discord parentId
2026-01-11 22:28:05 +05:30
Ayaan Zaidi
33aaccd1c3
Merge pull request #728 from pkrmf/feature/dm-history-limit
...
feat: add configurable DM history limits with per-chat overrides
2026-01-11 22:25:12 +05:30
Ayaan Zaidi
a4385dc920
fix: skip dm history limit for non-dm sessions
2026-01-11 22:18:15 +05:30
Nicholas Spisak
d63eae528c
feat(discord): expose channel management actions via message tool
...
Add channel-create, channel-edit, channel-delete, channel-move,
category-create, category-edit, and category-delete actions to the
unified message tool. These actions were already implemented in the
Discord-specific handler but weren't accessible via the pi_message tool.
Changes:
- Add 7 new channel/category management actions to MessageActionSchema
- Add parameters: name, type, parentId, topic, position, nsfw,
rateLimitPerUser, categoryId
- Gate actions behind discord.actions.channels (disabled by default)
- Add execute handlers routing to existing Discord action handlers
- Update Discord skill SKILL.md with documentation
Channel types: 0=text, 2=voice, 4=category
2026-01-11 10:01:32 -06:00
Ayaan Zaidi
68f6f3f0bd
fix: normalize telegram command mentions
2026-01-11 21:06:04 +05:30
Marc Terns
23717c5036
test: add comprehensive per-DM override tests for all providers
2026-01-11 08:55:32 -06:00
Marc Terns
54abf4b0d7
feat: add per-DM history limit overrides
2026-01-11 08:53:50 -06:00
Marc Terns
ab9ea827a4
refactor: move dmHistoryLimit to provider-level config
2026-01-11 08:38:19 -06:00
Marc Terns
a005a97fef
feat: add configurable DM history limit
2026-01-11 08:21:14 -06:00
Peter Steinberger
933c157092
test: add plugin docker e2e
2026-01-11 12:21:45 +00:00
Peter Steinberger
cf0c72a557
feat: add plugin architecture
2026-01-11 12:11:12 +00:00
Peter Steinberger
7acd26a2fc
Move provider to a plugin-architecture ( #661 )
...
* refactor: introduce provider plugin registry
* refactor: move provider CLI to plugins
* docs: add provider plugin implementation notes
* refactor: shift provider runtime logic into plugins
* refactor: add plugin defaults and summaries
* docs: update provider plugin notes
* feat(commands): add /commands slash list
* Auto-reply: tidy help message
* Auto-reply: fix status command lint
* Tests: align google shared expectations
* Auto-reply: tidy help message
* Auto-reply: fix status command lint
* refactor: move provider routing into plugins
* test: align agent routing expectations
* docs: update provider plugin notes
* refactor: route replies via provider plugins
* docs: note route-reply plugin hooks
* refactor: extend provider plugin contract
* refactor: derive provider status from plugins
* refactor: unify gateway provider control
* refactor: use plugin metadata in auto-reply
* fix: parenthesize cron target selection
* refactor: derive gateway methods from plugins
* refactor: generalize provider logout
* refactor: route provider logout through plugins
* refactor: move WhatsApp web login methods into plugin
* refactor: generalize provider log prefixes
* refactor: centralize default chat provider
* refactor: derive provider lists from registry
* refactor: move provider reload noops into plugins
* refactor: resolve web login provider via alias
* refactor: derive CLI provider options from plugins
* refactor: derive prompt provider list from plugins
* style: apply biome lint fixes
* fix: resolve provider routing edge cases
* docs: update provider plugin refactor notes
* fix(gateway): harden agent provider routing
* refactor: move provider routing into plugins
* refactor: move provider CLI to plugins
* refactor: derive provider lists from registry
* fix: restore slash command parsing
* refactor: align provider ids for schema
* refactor: unify outbound target resolution
* fix: keep outbound labels stable
* feat: add msteams to cron surfaces
* fix: clean up lint build issues
* refactor: localize chat provider alias normalization
* refactor: drive gateway provider lists from plugins
* docs: update provider plugin notes
* style: format message-provider
* fix: avoid provider registry init cycles
* style: sort message-provider imports
* fix: relax provider alias map typing
* refactor: move provider routing into plugins
* refactor: add plugin pairing/config adapters
* refactor: route pairing and provider removal via plugins
* refactor: align auto-reply provider typing
* test: stabilize telegram media mocks
* docs: update provider plugin refactor notes
* refactor: pluginize outbound targets
* refactor: pluginize provider selection
* refactor: generalize text chunk limits
* docs: update provider plugin notes
* refactor: generalize group session/config
* fix: normalize provider id for room detection
* fix: avoid provider init in system prompt
* style: formatting cleanup
* refactor: normalize agent delivery targets
* test: update outbound delivery labels
* chore: fix lint regressions
* refactor: extend provider plugin adapters
* refactor: move elevated/block streaming defaults to plugins
* refactor: defer outbound send deps to plugins
* docs: note plugin-driven streaming/elevated defaults
* refactor: centralize webchat provider constant
* refactor: add provider setup adapters
* refactor: delegate provider add config to plugins
* docs: document plugin-driven provider add
* refactor: add plugin state/binding metadata
* refactor: build agent provider status from plugins
* docs: note plugin-driven agent bindings
* refactor: centralize internal provider constant usage
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* refactor: centralize default chat provider
* refactor: centralize WhatsApp target normalization
* refactor: move provider routing into plugins
* refactor: normalize agent delivery targets
* chore: fix lint regressions
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* feat: expand provider plugin adapters
* refactor: route auto-reply via provider plugins
* fix: align WhatsApp target normalization
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* refactor: centralize WhatsApp target normalization
* feat: add /config chat config updates
* docs: add /config get alias
* feat(commands): add /commands slash list
* refactor: centralize default chat provider
* style: apply biome lint fixes
* chore: fix lint regressions
* fix: clean up whatsapp allowlist typing
* style: format config command helpers
* refactor: pluginize tool threading context
* refactor: normalize session announce targets
* docs: note new plugin threading and announce hooks
* refactor: pluginize message actions
* docs: update provider plugin actions notes
* fix: align provider action adapters
* refactor: centralize webchat checks
* style: format message provider helpers
* refactor: move provider onboarding into adapters
* docs: note onboarding provider adapters
* feat: add msteams onboarding adapter
* style: organize onboarding imports
* fix: normalize msteams allowFrom types
* feat: add plugin text chunk limits
* refactor: use plugin chunk limit fallbacks
* feat: add provider mention stripping hooks
* style: organize provider plugin type imports
* refactor: generalize health snapshots
* refactor: update macOS health snapshot handling
* docs: refresh health snapshot notes
* style: format health snapshot updates
* refactor: drive security warnings via plugins
* docs: note provider security adapter
* style: format provider security adapters
* refactor: centralize provider account defaults
* refactor: type gateway client identity constants
* chore: regen gateway protocol swift
* fix: degrade health on failed provider probe
* refactor: centralize pairing approve hint
* docs: add plugin CLI command references
* refactor: route auth and tool sends through plugins
* docs: expand provider plugin hooks
* refactor: document provider docking touchpoints
* refactor: normalize internal provider defaults
* refactor: streamline outbound delivery wiring
* refactor: make provider onboarding plugin-owned
* refactor: support provider-owned agent tools
* refactor: move telegram draft chunking into telegram module
* refactor: infer provider tool sends via extractToolSend
* fix: repair plugin onboarding imports
* refactor: de-dup outbound target normalization
* style: tidy plugin and agent imports
* refactor: data-drive provider selection line
* fix: satisfy lint after provider plugin rebase
* test: deflake gateway-cli coverage
* style: format gateway-cli coverage test
* refactor(provider-plugins): simplify provider ids
* test(pairing-cli): avoid provider-specific ternary
* style(macos): swiftformat HealthStore
* refactor(sandbox): derive provider tool denylist
* fix(sandbox): avoid plugin init in defaults
* refactor(provider-plugins): centralize provider aliases
* style(test): satisfy biome
* refactor(protocol): v3 providers.status maps
* refactor(ui): adapt to protocol v3
* refactor(macos): adapt to protocol v3
* test: update providers.status v3 fixtures
* refactor(gateway): map provider runtime snapshot
* test(gateway): update reload runtime snapshot
* refactor(whatsapp): normalize heartbeat provider id
* docs(refactor): update provider plugin notes
* style: satisfy biome after rebase
* fix: describe sandboxed elevated in prompt
* feat(gateway): add agent image attachments + live probe
* refactor: derive CLI provider options from plugins
* fix(gateway): harden agent provider routing
* fix(gateway): harden agent provider routing
* refactor: align provider ids for schema
* fix(protocol): keep agent provider string
* fix(gateway): harden agent provider routing
* fix(protocol): keep agent provider string
* refactor: normalize agent delivery targets
* refactor: support provider-owned agent tools
* refactor(config): provider-keyed elevated allowFrom
* style: satisfy biome
* fix(gateway): appease provider narrowing
* style: satisfy biome
* refactor(reply): move group intro hints into plugin
* fix(reply): avoid plugin registry init cycle
* refactor(providers): add lightweight provider dock
* refactor(gateway): use typed client id in connect
* refactor(providers): document docks and avoid init cycles
* refactor(providers): make media limit helper generic
* fix(providers): break plugin registry import cycles
* style: satisfy biome
* refactor(status-all): build providers table from plugins
* refactor(gateway): delegate web login to provider plugin
* refactor(provider): drop web alias
* refactor(provider): lazy-load monitors
* style: satisfy lint/format
* style: format status-all providers table
* style: swiftformat gateway discovery model
* test: make reload plan plugin-driven
* fix: avoid token stringification in status-all
* refactor: make provider IDs explicit in status
* feat: warn on signal/imessage provider runtime errors
* test: cover gateway provider runtime warnings in status
* fix: add runtime kind to provider status issues
* test: cover health degradation on probe failure
* fix: keep routeReply lightweight
* style: organize routeReply imports
* refactor(web): extract auth-store helpers
* refactor(whatsapp): lazy login imports
* refactor(outbound): route replies via plugin outbound
* docs: update provider plugin notes
* style: format provider status issues
* fix: make sandbox scope warning wrap-safe
* refactor: load outbound adapters from provider plugins
* docs: update provider plugin outbound notes
* style(macos): fix swiftformat lint
* docs: changelog for provider plugins
* fix(macos): satisfy swiftformat
* fix(macos): open settings via menu action
* style: format after rebase
* fix(macos): open Settings via menu action
---------
Co-authored-by: LK <luke@kyohere.com>
Co-authored-by: Luke K (pr-0f3t) <2609441+lc0rp@users.noreply.github.com>
Co-authored-by: Xin <xin@imfing.com>
2026-01-11 11:45:25 +00:00
Peter Steinberger
23eec7d841
fix: update heartbeat prompt
2026-01-11 11:35:52 +00:00
Peter Steinberger
a3747b1ee3
fix: add compaction headroom for memory writes
2026-01-11 11:25:15 +00:00
Peter Steinberger
96e4fdb443
test: skip codex refresh token reuse
2026-01-11 11:24:25 +00:00
Peter Steinberger
6b46217d19
fix: route subagent transcripts and keep tool action enums ( #708 ) (thanks @xMikeMickelson)
2026-01-11 11:19:38 +00:00
user
dc3c733612
fix(agent): use session key agentId for transcript path
...
Cross-agent subagent spawns wrote transcripts to the spawner's agent
directory instead of the target agent's directory. For example, when
main spawned a codex subagent with session key agent:codex:subagent:...,
the transcript went to agents/main/sessions/ instead of agents/codex/sessions/.
Pass sessionAgentId to resolveSessionFilePath so transcripts are written
to the correct agent's session directory.
2026-01-11 11:11:43 +00:00
Peter Steinberger
580791088c
test: cover messaging tool error fallback ( #717 )
2026-01-11 11:10:03 +00:00
Chris Taylor
fb1fc5feee
fix(message-tool): strip reply/media tags from content in send/thread-reply actions
2026-01-11 11:04:07 +00:00
Chris Taylor
3da3e201de
Agents: harden message tool sends
2026-01-11 11:04:07 +00:00
Peter Steinberger
2ebad5af1c
test: cover cron cli model overrides
2026-01-11 10:56:46 +00:00
Peter Steinberger
0590365683
style: format cleanup commands
2026-01-11 10:54:33 +00:00
Peter Steinberger
8e3f7c45d2
Merge pull request #711 from mjrussell/feat/cron-model-override
...
feat(cron): add --model flag to cron add/edit commands
2026-01-11 10:53:42 +00:00
Peter Steinberger
a8a4993ffd
fix: trim cron model overrides and doc guidance ( #711 ) (thanks @mjrussell)
2026-01-11 10:52:40 +00:00
Matthew Russell
314e075df2
feat(cron): add --model flag to cron add/edit commands
...
Expose the existing model override capability via CLI flags:
- Add --model to cron add and cron edit commands
- Document model and thinking overrides in cron-jobs.md
- Add CLI example showing model/thinking usage
The backend already supported model in agentTurn payloads;
this change exposes it through the CLI interface.
2026-01-11 10:49:34 +00:00
Peter Steinberger
0ef07bc142
test: extend discord tool-result timeout
2026-01-11 10:48:49 +00:00
Peter Steinberger
4a166cf227
fix: add update env regression test ( #713 ) (thanks @danielz1z)
2026-01-11 10:48:46 +00:00
danielz1z
4570e1db7d
fix(update): merge custom env with process.env in spawn
...
When the update runner passes custom env vars (like CLAWDBOT_UPDATE_IN_PROGRESS),
the current code uses `env ?? process.env` which replaces the entire environment
instead of merging — losing PATH, HOME, etc.
This causes the doctor step to fail with 'node: No such file or directory'.
Fix: merge custom env with process.env instead of replacing it.
2026-01-11 10:39:07 +00:00
Peter Steinberger
11a3b5aac9
style: biome fixes
2026-01-11 10:35:16 +00:00
Peter Steinberger
11c8db14a1
feat: add reset/uninstall commands
2026-01-11 10:23:52 +00:00
Peter Steinberger
323200b551
test(live): harden gateway probes
2026-01-11 04:46:30 +00:00
Peter Steinberger
dbe156e881
fix(agents): sanitize transcripts for strict tool APIs
2026-01-11 04:46:18 +00:00
Peter Steinberger
f00038b383
fix(testing): stabilize live model runs
2026-01-11 04:22:35 +00:00
Peter Steinberger
343b6ac31b
feat: add onboard reset option
2026-01-11 05:04:36 +01:00
Peter Steinberger
9046296ed3
fix: clarify sub-agent sandbox limits
2026-01-11 05:04:14 +01:00
Peter Steinberger
b4e9a0c975
style: add blank line after note imports
2026-01-11 05:01:50 +01:00
Peter Steinberger
71791d5a6a
fix: restore ZAI provider preference
2026-01-11 04:58:37 +01:00
Peter Steinberger
7acdaad04e
style: fix note import spacing
2026-01-11 04:54:19 +01:00
Peter Steinberger
b7ac9095e6
fix: skip tool-only reasoning replay
2026-01-11 04:52:16 +01:00
Peter Steinberger
30348e41c6
test: stabilize doctor + sandbox tests
2026-01-11 04:45:04 +01:00
Peter Steinberger
7343597075
chore: keep gate green
2026-01-11 04:42:44 +01:00
Peter Steinberger
50e62122bb
chore: format sandbox skills test
2026-01-11 04:39:42 +01:00
Peter Steinberger
eeae5ce7fd
fix: stabilize notes and reasoning replay
2026-01-11 04:37:06 +01:00
Peter Steinberger
57e6a9a762
fix: clamp z.ai developer role
2026-01-11 04:28:30 +01:00
Peter Steinberger
7660a78330
fix: mirror skills for read-only sandbox
2026-01-11 04:24:19 +01:00
Peter Steinberger
29884f8d6f
fix: wrap clack notes for cleaner boxes
2026-01-11 04:23:43 +01:00
Peter Steinberger
76c5bff7d6
test: cover whoami command
2026-01-11 04:20:34 +01:00
Peter Steinberger
38604acd94
fix: tighten WhatsApp ack reactions and migrate config ( #629 ) (thanks @pasogott)
2026-01-11 04:11:04 +01:00
sheeek
c928df7237
fix: remove any casts in backward compat code
2026-01-11 04:10:43 +01:00
sheeek
30b4c14296
style: fix biome linting in ack-reaction tests
2026-01-11 04:10:43 +01:00
sheeek
2daead27cf
feat(whatsapp): redesign ack-reaction as whatsapp-specific feature
...
- Move config from messages.ackReaction to whatsapp.ackReaction
- New structure: {emoji, direct, group} with granular control
- Support per-account overrides in whatsapp.accounts.*.ackReaction
- Add Zod schema validation for new config
- Maintain backward compatibility with old messages.ackReaction format
- Update tests to new config structure (14 tests, all passing)
- Add comprehensive documentation in docs/providers/whatsapp.md
- Timing: reactions sent immediately upon message receipt (before bot reply)
Breaking changes:
- Config moved from messages.ackReaction to whatsapp.ackReaction
- Scope values changed: 'all'/'direct'/'group-all'/'group-mentions'
→ direct: boolean + group: 'always'/'mentions'/'never'
- Old config still supported via fallback for smooth migration
2026-01-11 04:10:43 +01:00
sheeek
d38b232724
chore: fix linting issues in ack-reaction feature
...
- Remove unused mock variables in tests
- Remove unused ackReactionScope variables in simple test cases
- Fix line length for ackReactionScope declaration
- All lint checks passing (0 warnings, 0 errors)
- All tests passing (8/8)
2026-01-11 04:10:43 +01:00
sheeek
c3587d6cae
fix(whatsapp): ack reaction logic for group activation 'always' mode
...
- Fix bug where ack reaction was not sent when group activation is 'always'
- When requireMention=false (activation: always), always send reaction
- Add test case for activation='always' scenario
- Update inline comments for clarity
2026-01-11 04:10:43 +01:00
sheeek
b3b507c6ea
feat(whatsapp): add ack reaction support after successful replies
...
- Add automatic emoji reactions on inbound WhatsApp messages
- Support all ackReactionScope modes: all, direct, group-all, group-mentions
- Reaction is sent AFTER successful reply (unlike Telegram/Discord)
- Errors are logged with proper context
- Add comprehensive test suite for ack reaction logic
Config usage:
messages:
ackReaction: "👀 "
ackReactionScope: "group-mentions" # default
Closes: WhatsApp ack-reaction feature request
2026-01-11 04:10:42 +01:00
Peter Steinberger
579b00503f
style: format onboard providers
2026-01-11 04:08:26 +01:00
Peter Steinberger
36a21ae9b0
fix: improve telegram configuration safety
2026-01-11 03:57:52 +01:00
Peter Steinberger
11f897b7df
fix(gateway): show connect vs RPC status
2026-01-11 03:57:52 +01:00
Peter Steinberger
1f9b4e3af6
fix: send heartbeat reasoning ( #694 ) (thanks @antons)
2026-01-11 03:51:51 +01:00
Peter Steinberger
4ce2e73521
fix: improve provider issue formatting
2026-01-11 03:51:51 +01:00
Anton Sotkov
c7caa9a87d
fix: deliver reasoning alongside HEARTBEAT_OK
2026-01-11 03:51:51 +01:00
Anton Sotkov
7a518166bb
fix: persist reasoning across session resets
2026-01-11 03:51:51 +01:00
Peter Steinberger
9d802abd9a
test: cover docker setup env plumbing
2026-01-11 03:45:45 +01:00
Peter Steinberger
480bf916e2
fix(status): simplify footer guidance
2026-01-11 03:44:28 +01:00
Peter Steinberger
9a4021a277
Merge pull request #703 from mteam88/openrouter-auth-config
...
Openrouter auth config (AI)
2026-01-11 02:44:24 +00:00
Peter Steinberger
2b07a2a8ab
fix: stabilize onboarding auth tests ( #703 ) (thanks @mteam88)
2026-01-11 03:42:27 +01:00
Matthew
77bc11f91c
chore: format OpenRouter auth edits
2026-01-11 03:35:45 +01:00
Matthew
7890bd7369
CLI: reuse OpenRouter credentials
2026-01-11 03:35:45 +01:00
Matthew
b6982236a6
CLI: add OpenRouter auth choice
2026-01-11 03:35:45 +01:00
Peter Steinberger
494f41d575
docs(status): make status first-step
2026-01-11 03:34:33 +01:00
Peter Steinberger
20b4e2b859
fix: stabilize live probes and docs
2026-01-11 02:26:39 +00:00
Peter Steinberger
6668805aca
fix(agents): enforce single-writer session files
2026-01-11 02:25:45 +00:00
Peter Steinberger
3a113b7752
fix: stabilize cli runner output
2026-01-11 02:25:45 +00:00
Peter Steinberger
9b6bc0e66b
fix: reset unsigned launchd overrides ( #695 ) (thanks @jeffersonwarrior)
2026-01-11 03:19:24 +01:00
Peter Steinberger
5ec3663748
fix: guard update spinner output ( #701 ) (thanks @bjesuiter)
2026-01-11 03:03:09 +01:00
Benjamin Jesuiter
f3bd6e4957
fix(update): use git status --porcelain for dirty check cross-platform
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
6cb55eaaa7
feat(update): show stderr for failed steps
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
3f27b23d5a
fix(update): remove command hint from step labels
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
4102e2f1b8
refactor(update): simplify progress with proper exit codes
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
35d42be828
fix(update): show skipped status with warning indicator for dirty repo
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
6a2b8328df
fix(update): restore reason in summary
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
cc8e6e00a0
fix(update): hide steps in summary when shown live, fix command hint
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
6e0c1cb051
fix(update): show each step with spinner as it runs
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
8f9aa3e8c5
fix(progress): start spinner immediately when delayMs is 0
2026-01-11 03:00:43 +01:00
Benjamin Jesuiter
88c404bcfc
feat(update): add progress spinner during update steps
2026-01-11 03:00:43 +01:00
Peter Steinberger
4759633df1
fix(cli): keep build/lint green
2026-01-11 02:44:24 +01:00
Peter Steinberger
e824b3514b
fix(status): improve diagnostics and output
2026-01-11 02:42:24 +01:00
Peter Steinberger
02270abc87
feat: add codex cli backend
2026-01-11 01:39:30 +00:00
Peter Steinberger
2d74119a08
test: cover auto-reply command gating
2026-01-11 02:27:16 +01:00
Peter Steinberger
e0bf86f06c
feat: improve gateway services and auto-reply commands
2026-01-11 02:27:16 +01:00
Peter Steinberger
a32021dc3e
fix: inject image paths for cli backends
2026-01-11 00:55:22 +00:00
Peter Steinberger
4cf3e84b39
test: add CLI backend image probe
2026-01-11 00:55:22 +00:00
Peter Steinberger
24c3ab6fe0
fix: unblock claude-cli live runs
2026-01-11 00:55:22 +00:00
Peter Steinberger
d8f1124d59
feat: add CLI backend fallback
2026-01-11 00:55:22 +00:00
Peter Steinberger
07be761779
feat: add sandbox browser control allowlists
2026-01-11 01:52:32 +01:00
Peter Steinberger
b0b4b33b6b
fix: update gateway auth docs and clients
2026-01-11 01:51:24 +01:00
Peter Steinberger
d33285a9cd
fix: harden gateway auth defaults
2026-01-11 01:51:24 +01:00
Peter Steinberger
3e6d27ac4e
fix(status): show gateway auth when reachable
2026-01-11 01:46:37 +01:00
Peter Steinberger
506cc9e7a1
chore(release): 2026.1.11-3
2026-01-11 01:38:15 +01:00
Peter Steinberger
b339097179
style: format browser tool wiring
2026-01-11 01:34:45 +01:00
Peter Steinberger
07eed3de56
docs(status): add diagnostics commands
2026-01-11 01:31:56 +01:00
Peter Steinberger
326fb04d12
feat: add browser target selection for sandboxed agents
2026-01-11 01:31:56 +01:00
Peter Steinberger
362fc3e235
Merge pull request #692 from peschee/fix/whatsapp-lid-mention-detection
...
fix(whatsapp): pass authDir to jidToE164 for LID mention detection
2026-01-11 00:16:03 +00:00
Peter Steinberger
6444258ad3
fix: handle WhatsApp LID mentions ( #692 ) (thanks @peschee)
2026-01-11 01:14:57 +01:00
Peter Steinberger
318f59ec3e
fix(status): show token previews
2026-01-11 01:11:46 +01:00
Peter Steinberger
57dafec0ec
docs(status): add troubleshooting footer
2026-01-11 01:06:58 +01:00
Peter Steinberger
518dfd4e42
fix(status): provider setup vs warn
2026-01-11 01:05:06 +01:00
Peter Siska
9cb1bfa1c1
fix(whatsapp): pass authDir to jidToE164 for LID mention detection
...
WhatsApp group mentions using the new Linked ID format (@lid) were not
being detected because jidToE164() was called without the authDir needed
to find the LID reverse mapping files.
Now isBotMentioned() and debugMention() accept an optional authDir
parameter, which is passed through from account.authDir.
2026-01-11 01:04:10 +01:00
Peter Steinberger
5fa3ac1e01
fix(status): full-width tables + better diagnosis
2026-01-11 00:54:27 +01:00
Peter Steinberger
7c76561569
fix: dedupe inbound messages across providers
2026-01-11 00:12:25 +01:00
Peter Steinberger
1d9199b529
style(test): format update-cli test
2026-01-10 23:46:11 +01:00
Peter Steinberger
eff092268a
fix(test): avoid update-cli import timeout
2026-01-10 23:40:27 +01:00
Peter Steinberger
621f710d60
fix(mac): add tailnet discovery fallback and debug CLI
2026-01-10 23:39:27 +01:00
Shadow
c731a87d07
Discord: add fetch message action
2026-01-10 16:38:20 -06:00
Peter Steinberger
786eac1d6f
test(cli): avoid update-cli import timeout
2026-01-10 23:35:04 +01:00
Peter Steinberger
1eb50ffac4
feat(status): improve status output
2026-01-10 23:32:07 +01:00
Peter Steinberger
3166cc911b
Heartbeat: optional reasoning delivery ( #690 )
...
* feat: expose heartbeat reasoning output
* docs(changelog): mention heartbeat reasoning toggle
2026-01-10 22:26:20 +00:00
Peter Steinberger
4d0e74ab6c
fix: cover extra thinking tags ( #688 ) (thanks @theglove44)
2026-01-10 23:23:23 +01:00
Chris Taylor
a580639abf
fix(agents): strip <thought> and <antthinking> tags from output
2026-01-10 23:19:58 +01:00
Peter Steinberger
494743a4e5
feat: run doctor after restart
2026-01-10 23:14:55 +01:00
Jonathan Wilkins
0afa370869
fix: add 'usage limit' to rate limit detection patterns
...
OpenAI/ChatGPT returns "You have hit your ChatGPT usage limit (plus plan)"
when users exceed their plan quota. This error wasn't being recognized as a
rate limit, so fallback to alternative models wasn't triggering.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 23:11:06 +01:00
Peter Steinberger
08cc8f2281
refactor(agents): extract transcript repair module
2026-01-10 22:07:25 +00:00
Peter Steinberger
708f04b02f
fix: keep mock openai responses requests
2026-01-10 22:56:08 +01:00
Peter Steinberger
1c257f170a
Gateway: disable OpenAI HTTP chat completions by default ( #686 )
...
* feat(gateway): disable OpenAI chat completions HTTP by default
* test(gateway): deflake mock OpenAI tool-calling
* docs(changelog): note OpenAI HTTP endpoint default-off
2026-01-10 21:55:54 +00:00
Peter Steinberger
06052640e8
Merge pull request #685 from carlulsoe/fix/daemon-restart-feedback
...
fix(cli): improve daemon restart feedback [AI-assisted]
2026-01-10 21:53:00 +00:00
Peter Steinberger
fa61699f9a
fix: polish restart feedback + stabilize tests ( #685 ) (thanks @carlulsoe)
2026-01-10 22:52:09 +01:00
Peter Steinberger
98377c7c6b
fix(agents): harden tool transcript repair
2026-01-10 21:45:15 +00:00
Peter Steinberger
805a29252e
test: add setup-token live smoke
2026-01-10 21:45:15 +00:00
Kit
f699dc3777
fix(cli): improve daemon restart feedback
...
- runDaemonRestart() now returns Promise<boolean> indicating success
- update command only shows success when restart actually happened
- Fixes missing reasoningLevel type in compactEmbeddedPiSession
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Carl Ulsøe Christensen <carlulsoe@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 22:44:31 +01:00
Peter Steinberger
ad17966e2f
fix(doctor): warn on opencode overrides
2026-01-10 22:44:31 +01:00
Peter Steinberger
1110d96769
feat(gateway): add config toggle for chat completions endpoint
2026-01-10 22:39:06 +01:00
Peter Steinberger
050c1c5391
fix(agents): include reasoningLevel in compaction params
2026-01-10 22:39:06 +01:00
Ruby
a6a9930a34
fix: enable block streaming for all providers ( #684 )
2026-01-10 15:25:55 -06:00
Peter Steinberger
6d70524aa8
fix: add reasoning visibility hint
2026-01-10 22:24:22 +01:00
Peter Steinberger
aa30995aa1
test(live): add provider filters + google skip rules
2026-01-10 21:16:59 +00:00
Peter Steinberger
0d00d6dfd4
style(gateway): format openai-http
2026-01-10 22:11:15 +01:00
Peter Steinberger
6546a1a23a
feat(gateway): allow agent via model
2026-01-10 22:11:12 +01:00
Peter Steinberger
dafa8a2881
feat(gateway): add OpenAI-compatible HTTP endpoint
2026-01-10 22:11:04 +01:00
Peter Steinberger
ab314a22e0
chore: refresh pi-ai patch repro note
2026-01-10 20:55:57 +00:00
Peter Steinberger
9790b39d80
feat(gateway): add agent image attachments + live probe
2026-01-10 20:44:23 +00:00
Peter Steinberger
b9b1bc2726
test: relax reasoning replay expectations
2026-01-10 21:43:52 +01:00
Peter Steinberger
8a194b4abc
fix: align opencode-zen provider setup
2026-01-10 21:38:18 +01:00
Peter Steinberger
46e00ad5e7
fix: describe sandboxed elevated in prompt
2026-01-10 21:37:15 +01:00
Peter Steinberger
3389231ecb
feat(doctor): offer update first
2026-01-10 21:34:59 +01:00
Peter Steinberger
d772ff06c8
test: update openai responses reasoning replay
2026-01-10 21:20:26 +01:00
Peter Steinberger
686b3f884c
fix: expose WhatsApp sender ids in group context
2026-01-10 21:09:08 +01:00
Peter Steinberger
0ef429f532
feat: color docs search output
2026-01-10 21:02:27 +01:00
Peter Steinberger
1bd5500832
feat: add colored CLI docs links
2026-01-10 20:51:03 +01:00
Peter Steinberger
cf192f8551
style: biome format
2026-01-10 19:47:17 +00:00
Peter Steinberger
afede929b3
test: harden gateway tool probes
2026-01-10 19:46:13 +00:00
Peter Steinberger
d44bb41d27
fix: replay OpenAI reasoning for tool calls
2026-01-10 19:46:13 +00:00
Peter Steinberger
fa346d7b78
fix: accept Z_AI_API_KEY for zai
2026-01-10 19:46:13 +00:00
Peter Steinberger
ec1047583a
Merge pull request #640 from mcinteerj/fix/whatsapp-group-reactions
...
fix(whatsapp): enable reactions in group chats
2026-01-10 19:44:05 +00:00
Peter Steinberger
7e6fa94720
fix: update WhatsApp history assertions ( #640 ) (thanks @mcinteerj)
2026-01-10 20:41:30 +01:00
Jake
4933113252
fix(whatsapp): preserve group message IDs and normalize reaction participants
2026-01-10 20:36:32 +01:00
Peter Steinberger
4c4c167416
fix(update): harden root selection
2026-01-10 20:33:02 +01:00
Claude
777fb6b7bb
CLI: add clawdbot update command and --update flag
2026-01-10 20:33:02 +01:00
Peter Steinberger
9f9098406c
feat(sandbox): add sandbox explain inspector
2026-01-10 20:28:43 +01:00
Peter Steinberger
4533dd6e5d
test: add image attachment regression coverage
2026-01-10 20:25:38 +01:00
Peter Steinberger
212b13b099
fix: repair tool-use history for anthropic
2026-01-10 19:15:57 +00:00
Peter Steinberger
193ebba657
fix: sniff chat attachment mime ( #670 ) (thanks @cristip73)
2026-01-10 20:06:33 +01:00
cristip73
c4e76eb635
fix: enable image attachments in chat messages for Claude API
...
Images were previously converted to markdown data URLs which Claude API
treats as plain text, not as actual images.
Changes:
- Add parseMessageWithAttachments() that returns {message, images[]}
- Pass images through the stack to session.prompt() as content blocks
- Filter null/empty attachments before parsing
- Strip data URL prefix if client sends it
This enables iOS and other clients to send images that Claude can actually see.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 20:00:25 +01:00
Peter Steinberger
0279f09459
fix: avoid duplicate cli banners
2026-01-10 19:57:24 +01:00
Peter Steinberger
7947059884
test(gateway): deflake temp HOME cleanup
2026-01-10 19:53:04 +01:00
Peter Steinberger
1fe9f648b1
feat(hooks): allow gmail tailscale target URLs
2026-01-10 19:19:43 +01:00
Peter Steinberger
b1664ec9c7
test: rename signal reaction-only test ( #637 )
2026-01-10 19:19:05 +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
Peter Steinberger
8c1d39064d
test: adjust tool id sanitization
2026-01-10 18:15:15 +00:00
Peter Steinberger
7c925aa5a0
style: format helper
2026-01-10 18:15:15 +00:00
Peter Steinberger
651a9e9be4
fix: restore minimax tool calling
2026-01-10 18:15:15 +00:00
Peter Steinberger
8dbb22cc93
fix: signal handle dataMessage.reaction safely ( #637 ) (thanks @neist)
2026-01-10 19:13:23 +01:00
Kasper Neist Christjansen
59e6064006
fix(signal): handle reactions in dataMessage.reaction format ( #1 )
...
* fix(signal): handle reactions inside dataMessage.reaction
Signal reactions can arrive in two formats:
1. envelope.reactionMessage (already handled)
2. envelope.dataMessage.reaction (now handled)
The signal-cli SSE events use the second format, which was being
misinterpreted as a message with attachments, leading to 'broken
media / attachments' errors.
Changes:
- Add reaction property to SignalDataMessage type
- Check both envelope.reactionMessage and dataMessage.reaction
- Improve body content detection to properly identify reaction-only messages
- Add test for dataMessage.reaction format
* fix(signal): reaction notifications work when account is phone number
When reactionNotifications mode is 'own', notifications would never fire
because resolveSignalReactionTarget() returned a UUID but
shouldEmitSignalReactionNotification() compared it against the account
phone number, which never matched.
The fix:
- Add optional 'phone' field to SignalReactionTarget type
- Extract phone number first in resolveSignalReactionTarget(), include
it even when UUID is present
- In shouldEmitSignalReactionNotification() 'own' mode, check phone
match first before falling back to UUID comparison
This ensures reactions to your own messages are properly detected when
the Signal account is configured as a phone number and the reaction
event contains both targetAuthor (phone) and targetAuthorUuid.
* fix(signal): include phone in reaction target for own-mode matching
When targetAuthorUuid is present, also store targetAuthor phone number
in the reaction target. This allows own-mode reaction notifications to
match when comparing account phone against UUID-based targets.
2026-01-10 19:10:39 +01:00
Anton Sotkov
26ce65995f
fix(gmail): keep tailscale serve path at root
...
The default Gmail hook path configured by `clawdbot hooks gmail setup` is `/gmail-pubsub`. Tailscale strips the mount path before proxying, so the request lands on `/` and the hook 404s under the default configuration.
When Tailscale is enabled, always listen on `/` internally and keep the public URL on the configured path (defaulting to `/gmail-pubsub`). This makes default and custom paths work reliably.
Alternative (not implemented here): call tailscale with a full target URL so the backend keeps the path, e.g. `tailscale funnel --set-path /gmail-pubsub http://127.0.0.1:8788/gmail-pubsub `. We did not take this path because it requires changing the CLI invocation to pass URLs (not ports) plus extra validation, which is a larger behavior change.
2026-01-10 18:51:12 +01:00
Peter Steinberger
7dd0899856
fix: voicewake respects state dir override ( #666 ) (thanks @roshanasingh4)
2026-01-10 18:32:09 +01:00
Peter Steinberger
f1a1032cd6
fix: serialize telegram media-group processing
2026-01-10 18:31:36 +01:00
Peter Steinberger
b383fbeed3
fix: cron wakeMode now waits for heartbeat ( #666 ) (thanks @roshanasingh4)
2026-01-10 18:31:35 +01:00
Roshan Singh
91c870a0c4
fix(cron): wait for heartbeat to complete when wakeMode is "now"
...
Fixes #652
When cron jobs with sessionTarget:"main" have wakeMode:"now",
they were being marked as completed immediately without waiting for the
agent to actually process the system event.
The issue was that requestHeartbeatNow() is fire-and-forget and
doesn't wait for the heartbeat to complete. The job would finish
with durationMs: 0 before the agent had a chance to run.
This fix:
- Adds runHeartbeatOnce to CronServiceDeps
- Wires it up in gateway/server.ts to load config and pass runtime
- Modifies executeJob() to call runHeartbeatOnce when wakeMode:"now"
- Waits for heartbeat to complete and maps status to cron result:
* "ran" → "ok"
* "skipped" → "skipped"
* "failed" → "error"
- Falls back to old behavior for wakeMode:"next-heartbeat" or if
runHeartbeatOnce is not available (backward compatibility)
Benefits:
- Jobs now have accurate durationMs reflecting actual processing time
- Jobs are correctly marked with "error" status if heartbeat fails
- Prevents race condition where job completes before agent runs
[AI-assisted] - Generated with z.ai GLM-4.7
[Tested: Lightly tested - Logic validated with test scenarios, code quality checks passed, integration testing requires live Clawdbot instance]
2026-01-10 18:31:35 +01:00
Peter Steinberger
5a57cbe571
Merge pull request #667 from rubyrunsstuff/fix/discord-forwarded-snapshots
...
Discord: include forwarded message snapshots
2026-01-10 17:31:26 +00:00
Peter Steinberger
6480ef369f
fix: telegram draft chunking defaults ( #667 ) (thanks @rubyrunsstuff)
2026-01-10 18:30:06 +01:00
Peter Steinberger
2d105d16f8
fix(opencode-zen): keep legacy aliases + rationale ( #669 ) (thanks @magimetal)
2026-01-10 18:25:43 +01:00
Ruby
7a836c9ff0
Discord: include forwarded message snapshots
2026-01-10 18:23:30 +01:00
Magi Metal
738269eb74
feat(opencode-zen): update models with sensible defaults
...
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 18:22:26 +01:00
Peter Steinberger
9b5ce2530a
Merge pull request #665 from sebslight/fix/cloud-code-assist-schema-and-tool-ids
...
fix(agents): harden Cloud Code Assist compatibility
2026-01-10 17:07:58 +00:00
Peter Steinberger
38d6930fbe
Merge pull request #664 from azade-c/fix/use-state-dir-for-nodes-voicewake
...
fix: use resolveStateDir() for node-pairing and voicewake storage
2026-01-10 17:07:28 +00:00
Peter Steinberger
0d98e93253
fix: harden cloud code assist tool schema sanitizing ( #665 ) (thanks @sebslight)
2026-01-10 18:07:26 +01:00
Sebastian Barrios
64babcac7a
fix(agents): harden Cloud Code Assist compatibility
...
- Expand schema scrubber to strip additional constraint keywords rejected
by Cloud Code Assist (examples, minLength, maxLength, minimum, maximum,
multipleOf, pattern, format, minItems, maxItems, uniqueItems,
minProperties, maxProperties)
- Extend tool call ID sanitization to cover toolUse and toolCall block
types (previously only functionCall was sanitized)
- Update pi-tools test to include 'examples' in unsupported keywords
Fixes 400 errors when using google-antigravity/claude-opus-4-5-thinking:
- tools.N.custom.input_schema: JSON schema is invalid
- messages.N.content.N.tool_use.id: String should match pattern
2026-01-10 18:06:35 +01:00
Peter Steinberger
464f0645a8
fix: stabilize telegram media tests ( #664 ) (thanks @azade-c)
2026-01-10 18:06:05 +01:00
Peter Steinberger
ef08c3f038
fix(agents): stabilize cli creds cache + bash cwd
2026-01-10 18:02:21 +01:00
Azade
48ad3bbbe6
fix: use resolveStateDir() for node-pairing and voicewake storage
...
Both node-pairing.ts and voicewake.ts were using a local defaultBaseDir()
that hardcoded ~/.clawdbot, ignoring CLAWDBOT_STATE_DIR.
This caused nodes/paired.json and settings/voicewake.json to be stored
in ~/.clawdbot instead of the configured state directory.
Fixes the bug where paired nodes config was stored in a different
location than the rest of the gateway state.
2026-01-10 17:55:30 +01:00
Peter Steinberger
843ff5f2d4
fix(sessions): tolerate ENOENT during lock
2026-01-10 17:50:53 +01:00
Peter Steinberger
60bf349201
fix(sessions): lock store saves; wait for bash close
2026-01-10 17:47:12 +01:00
Peter Steinberger
a54706a063
fix: throttle cli credential sync
2026-01-10 17:44:03 +01:00
Peter Steinberger
12722acb55
feat: wizard model picker ( #611 , thanks @jonasjancarik)
2026-01-10 16:32:59 +00:00
Jonáš Jančařík
687a10b8cc
fix: map opencode-zen preferred provider
2026-01-10 16:32:59 +00:00
Jonáš Jančařík
9f80d8ec7c
fix: skip model picker when auth choice preset
2026-01-10 16:32:59 +00:00
Jonáš Jančařík
dcc41e932d
feat: add shared model picker to configure/onboarding
2026-01-10 16:32:59 +00:00
Peter Steinberger
e3cd431551
fix(auto-reply): RawBody commands + locked session updates ( #643 )
2026-01-10 17:32:31 +01:00
Peter Steinberger
e2ea02160d
test: add workspace path regressions
2026-01-10 17:28:43 +01:00
Peter Steinberger
a1533a17f7
fix(gateway): harden chat abort semantics
2026-01-10 17:23:27 +01:00
Peter Steinberger
84d64f9395
Merge pull request #446 from tony-freedomology/feat/human-delay
...
feat(agent): add human-like delay between block replies
2026-01-10 16:16:52 +00:00
Peter Steinberger
fb03149df4
fix: finalize human delay config typing ( #446 ) (thanks @tony-freedomology)
2026-01-10 17:15:27 +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
Muhammed Mukhthar CM
de5b75eff6
fix(tools): resolve Read/Write/Edit paths against workspace directory
...
Previously, Read/Write/Edit tools used the global tool instances from
pi-coding-agent which had process.cwd() baked in at import time. Since
the gateway starts from /root/dev/ai/clawdbot, relative paths like
'SOUL.md' would incorrectly resolve there instead of the agent's
workspace (/root/clawd).
This fix:
- Adds workspaceDir option to createClawdbotCodingTools
- Creates fresh Read/Write/Edit tools bound to workspaceDir
- Adds cwd option to Bash tool defaults for consistency
- Passes effectiveWorkspace from pi-embedded-runner
Absolute paths and ~/... paths are unaffected. Sandboxed sessions
continue to use sandbox root as before.
Includes tests for Read/Write/Edit workspace path resolution.
2026-01-10 17:08:56 +01:00
Peter Steinberger
d1943a9337
chore: format reply session
2026-01-10 17:03:17 +01:00
Peter Steinberger
d781508952
fix: make chat.send non-blocking
2026-01-10 17:02:28 +01:00
Peter Steinberger
b7fdc266ad
test(auto-reply): cover native /model session routing
2026-01-10 16:50:32 +01:00
Peter Steinberger
b99eb4c9f3
fix(auto-reply): apply native commands to target session
2026-01-10 16:48:53 +01:00
Peter Steinberger
8978ac425e
fix: harden cli credential sync
2026-01-10 16:37:54 +01:00
Peter Steinberger
81f9093c3c
fix(pairing): accept positional provider args
2026-01-10 16:36:43 +01:00
Peter Steinberger
41c8bdfada
feat: add ZAI auth choice
2026-01-10 16:32:21 +01:00
Peter Steinberger
8b47368167
fix: harden cli credential sync
2026-01-10 16:25:40 +01:00
Peter Steinberger
e60c3fc1b3
fix: doctor ignore install dir in legacy workspace check
2026-01-10 16:23:35 +01:00
Peter Steinberger
78532d76bd
test: clean up lint warnings
2026-01-10 16:17:02 +01:00
Peter Steinberger
53a0c966a5
refactor: unify configure auth choice
2026-01-10 16:14:49 +01:00
Peter Steinberger
43b530ca1c
fix(agents): suppress partial replies with reasoning
2026-01-10 16:03:17 +01:00
Peter Steinberger
44564df028
refactor(sessions): add mergeSessionEntry
2026-01-10 16:03:17 +01:00
Peter Steinberger
70c1732dd1
refactor: centralize messaging dedupe helpers
2026-01-10 16:02:56 +01:00
Peter Steinberger
5a93447294
fix: prevent claude-cli oauth downgrade ( #654 ) (thanks @radek-paclt)
2026-01-10 15:50:25 +01:00
Radek Paclt
a39951d463
fix(auth): enable OAuth refresh for Claude CLI credentials
...
When Claude CLI credentials (anthropic:claude-cli) expire, automatically
refresh using the stored refresh token instead of failing with
"No credentials found" error.
Changes:
- Read refreshToken from Claude CLI and store as OAuth credential type
- Implement bidirectional sync: after refresh, write new tokens back to
Claude Code storage (file on Linux/Windows, Keychain on macOS)
- Prefer OAuth over Token credentials (enables auto-refresh capability)
- Maintain backward compatibility for credentials without refreshToken
This enables long-running agents to operate autonomously without manual
re-authentication when OAuth tokens expire.
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-10 15:40:27 +01:00
Peter Steinberger
1281c1d155
Merge pull request #655 from antons/fix/reasoning-imsg
...
Fix reasoning in iMessage
2026-01-10 14:39:14 +00:00
Peter Steinberger
236f8560b3
fix: reasoning iMessage sessions + final reply ( #655 ) (thanks @antons)
2026-01-10 15:31:57 +01:00
Peter Steinberger
ae3711bfbd
Merge pull request #659 from mickahouan/fix/dedupe-message-tool
...
Fix: avoid duplicate replies when message tool sends
2026-01-10 14:30:02 +00:00
Peter Steinberger
449bee9645
fix: bundle node runtime for mac app
2026-01-10 15:28:37 +01:00
Peter Steinberger
4d146ea2f5
fix: dedupe message tool replies ( #659 ) (thanks @mickahouan)
2026-01-10 15:28:13 +01:00
Anton Sotkov
3b5149ca39
fix: send only final answer with reasoning
...
When reasoning is enabled on non‑block providers, we now ignore interim streaming chunks and send only the final assistant answer at completion, so replies aren’t partial or duplicated.
2026-01-10 15:28:04 +01:00
Anton Sotkov
4c86da044e
fix(sessions): persist reasoning/elevated across DMs
2026-01-10 15:28:04 +01:00
Mickaël Ahouansou
d01e06f09a
Fix: dedupe message tool sends
2026-01-10 15:25:20 +01:00
Peter Steinberger
65c2532cd5
fix: minimax apiKey optional for providers ( #656 ) (thanks @mneves75)
2026-01-10 15:08:12 +01:00
mneves75
3e2e3eb023
Config: add MiniMax direct API authentication option
...
Makes apiKey optional in ModelProviderConfig so MiniMax can use auth
profiles or environment variables (MINIMAX_API_KEY) instead of requiring
explicit config.
Changes:
- src/config/types.ts: apiKey changed from required to optional
- src/config/zod-schema.ts: use z.string().min(1).optional() for validation
- src/commands/configure.ts: add minimax-api auth choice in wizard
- src/commands/onboard-auth.ts: MiniMax provider omits apiKey (uses env/auth)
- patches/@mariozechner__pi-ai@0.42.1.patch: map minimax → MINIMAX_API_KEY
Auth Resolution Order (unchanged):
1. Auth profiles (highest priority)
2. Environment variables (MINIMAX_API_KEY, etc.)
3. Custom provider apiKey from models.json (lowest priority)
2026-01-10 10:57:09 -03:00
Peter Steinberger
920b3880c1
test: add elevated mode regressions
2026-01-10 05:31:48 +01:00
Peter Steinberger
66db6c749d
fix: persist elevated off override
2026-01-10 05:23:46 +01:00
Peter Steinberger
2045395ccb
test(live): add optional write/bash probes
2026-01-10 04:14:39 +00:00
Peter Steinberger
d3674f4d6c
test(onboard): cover remote + lan token flows
2026-01-10 04:14:39 +00:00
Peter Steinberger
cdb915d527
chore: normalize Clawdbot naming
2026-01-10 05:14:09 +01:00
Peter Steinberger
a7c8341452
feat: show more session flags
2026-01-10 05:14:07 +01:00
Peter Steinberger
7b392ca74b
test(onboard): gateway token auth flow
2026-01-10 03:54:29 +00:00
Peter Steinberger
eee04fa2ce
fix(onboard): persist gateway token in config
2026-01-10 03:54:25 +00:00
Peter Steinberger
4fac94f259
test(gateway): add wizard e2e + isolate live suite
2026-01-10 03:44:21 +00:00
Peter Steinberger
0f409cb99d
test(telegram): force real timers for media groups
2026-01-10 03:44:21 +00:00
Peter Steinberger
241bc737cf
test(telegram): deflake media groups on windows
2026-01-10 04:43:04 +01:00
Peter Steinberger
2a0d8f6e38
test(gateway): avoid real OpenAI in mock test
2026-01-10 03:25:45 +00:00
Peter Steinberger
056c4ae622
test(telegram): harden media tests
2026-01-10 04:18:05 +01:00
Peter Steinberger
6274adce3a
fix(tools): keep canonical tool names for oauth
2026-01-10 04:18:00 +01:00
Peter Steinberger
4f79122068
test: stabilize gateway mock + lint
2026-01-10 03:14:13 +00:00
Peter Steinberger
7376d1e6c9
feat: improve tui status output
2026-01-10 04:07:15 +01:00
Peter Steinberger
782863ea6c
test(gateway): add offline tool-calling regression
2026-01-10 03:06:02 +00:00
Peter Steinberger
cc1c5f800f
fix(tools): harden schemas and oauth tool names
2026-01-10 03:05:56 +00:00
Peter Steinberger
f241859c98
fix: relax fetch typing for Bun
2026-01-10 04:01:06 +01:00
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