Commit Graph

4581 Commits

Author SHA1 Message Date
Peter Steinberger
83f111839c feat: add /config chat config updates 2026-01-10 03:01:27 +01:00
Peter Steinberger
be51d30a49 feat(cli): colorize gateway health + daemon output 2026-01-10 03:01:27 +01:00
Peter Steinberger
a5cb1a71b1 refactor: unify inline directives and media fetch 2026-01-10 03:01:04 +01:00
Peter Steinberger
97afcc1c2c refactor: consolidate reply/media helpers 2026-01-10 02:41:16 +01:00
Peter Steinberger
579598a1ee refactor: centralize WhatsApp target normalization 2026-01-10 02:39:52 +01:00
Peter Steinberger
04be6b7cf1 test(telegram): relax media group test timeouts 2026-01-10 02:37:59 +01:00
Peter Steinberger
0be43feb12 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
7ddb8375fb fix: hide tui reasoning label when off 2026-01-10 01:25:15 +00:00
Peter Steinberger
d5755c9687 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
97a216b77a fix: normalize WhatsApp targets for groups and E.164 (#631) (thanks @imfing) 2026-01-10 02:22:13 +01:00
Peter Steinberger
7b43021134 ci: use node 22.x 2026-01-10 02:20:20 +01:00
Peter Steinberger
c002c47ebf ci: pin node to engine minimum 2026-01-10 02:17:59 +01:00
Peter Steinberger
b22f6c22e2 chore: sync pnpm patches after pull 2026-01-10 02:17:19 +01:00
Peter Steinberger
1c78b449bf docs: document testing kit 2026-01-10 01:15:47 +00:00
Peter Steinberger
67d9582371 Merge pull request #633 from levifig/feat/remove-ack-after-reply
feat: add removeAckAfterReply option (Discord, Slack, Telegram)
2026-01-10 01:14:33 +00:00
Peter Steinberger
43ca0e19b3 fix: remove ack reactions after reply (#633) (thanks @levifig) 2026-01-10 02:14:14 +01:00
Levi Figueira
d4b6af8d71 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
59007a144b test(live): gateway smoke across profile-key models 2026-01-10 01:09:41 +00:00
Peter Steinberger
c94d67ac54 fix: sandbox browser CDP proxy 2026-01-10 01:09:41 +00:00
Peter Steinberger
0179ea19be fix(pnpm): regenerate patchedDependencies 2026-01-10 01:09:41 +00:00
Peter Steinberger
959daf24c4 refactor: centralize session agent resolution 2026-01-10 01:57:54 +01:00
Peter Steinberger
f142bc229c 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
eb20a7a476 fix: honor audio_as_voice streaming + parse tests (#490) (thanks @jarvis-medmatic) 2026-01-10 01:50:33 +01:00
Peter Steinberger
63c96fba2e ci: add clean install check 2026-01-10 01:50:32 +01:00
Peter Steinberger
f7e35ad84d ci: enforce frozen pnpm install 2026-01-10 01:49:24 +01:00
Peter Steinberger
b0af8aba89 fix: refresh @buape/carbon patch 2026-01-10 01:48:42 +01:00
Peter Steinberger
4fb4184cea fix(openai): avoid invalid reasoning replay 2026-01-10 00:45:10 +00:00
Jarvis
6899918bfa chore: format audioAsVoice updates
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:44:57 +01:00
Jarvis
f954db76fa 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
Peter Steinberger
0c85764db0 docs: improve Hetzner 24/7 VPS guide 2026-01-10 01:43:28 +01:00
Jarvis
e037a86921 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
b6171c881c fix(telegram): guard voice note sends 2026-01-10 01:43:01 +01:00
Jarvis
972e18996b 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
4341a6870e 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
0af7b27985 Merge pull request #630 from adam91holt/fix/heartbeat-default-agent-only
fix: only inject heartbeat prompt for default agent
2026-01-10 00:34:13 +00:00
Peter Steinberger
0fee5b5aed fix: gate heartbeat prompt to default agent sessions (#630) (thanks @adam91holt) 2026-01-10 01:32:58 +01:00
Adam Holt
829fe0630d 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
27838f6865 fix: abort runs between tool calls 2026-01-10 01:26:25 +01:00
Peter Steinberger
1ed062e21b docs: document OpenCode Zen config (#623) 2026-01-10 01:26:25 +01:00
Peter Steinberger
af7b8542af refactor: centralize failover error parsing 2026-01-10 01:26:06 +01:00
Peter Steinberger
52ab884fe7 fix(web): show all WhatsApp shared contacts 2026-01-10 00:22:31 +00:00
Peter Steinberger
8ec51b6291 fix(agents): require raw for gateway config.apply (#566) (thanks @sircrumpet) 2026-01-10 00:21:15 +00:00
Peter Steinberger
0c132f1103 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
c468f539c3 fix: keep telegram streamMode draft-only (#619) (thanks @rubyrunsstuff) 2026-01-10 01:14:40 +01:00
Peter Steinberger
498f5bb040 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
def6f36439 refactor: unify contact list summaries 2026-01-10 01:13:38 +01:00
Peter Steinberger
f0f0226828 Merge pull request #623 from magimetal/feat/opencode-zen-provider
feat(onboard): add OpenCode Zen as model provider
2026-01-10 00:13:30 +00:00
Peter Steinberger
daebb2a93b fix: harden Cloud Code Assist failover (#544) (thanks @jeffersonwarrior) 2026-01-10 01:12:46 +01:00
Peter Steinberger
25752aa2b8 style: fix pi-embedded-runner formatting (#623) (thanks @magimetal) 2026-01-10 01:12:22 +01:00
Ruby
b9cdf5b723 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