Peter Steinberger
c75b2a7067
refactor: unify reply dispatch across providers
2026-01-05 19:43:54 +01:00
Peter Steinberger
f24fe4e9cd
fix(whatsapp): reconnect on crypto unhandled rejection
2026-01-05 13:55:37 +00:00
Peter Steinberger
1bad96aa2b
style: tidy auto-reply imports and formatting
2026-01-05 01:46:16 +01:00
Peter Steinberger
852f947b44
fix: unify control command handling
2026-01-05 01:31:36 +01:00
Peter Steinberger
246adaa119
chore: rename project to clawdbot
2026-01-04 14:38:51 +00:00
Shadow
ce92fac983
chore: formatting
2026-01-03 12:35:16 -06:00
Peter Steinberger
591773715e
fix: honor whatsapp per-group mention overrides
2026-01-03 17:51:10 +01:00
Peter Steinberger
bb54e60179
fix(logging): decouple file logs from console verbose
2026-01-03 12:32:14 +00:00
Peter Steinberger
5684e2d658
feat: configurable outbound text chunk limits
2026-01-03 01:49:27 +01:00
Peter Steinberger
9616f4b2b1
feat: stream reply blocks immediately
2026-01-03 00:28:33 +01:00
Peter Steinberger
2c92ccd66e
feat: add reply tags and replyToMode
2026-01-02 23:18:41 +01:00
Peter Steinberger
5cf1a9535e
feat: move group mention gating to provider groups
2026-01-02 22:24:26 +01:00
Peter Steinberger
0766c5e3cb
refactor: move whatsapp allowFrom config
2026-01-02 13:00:29 +01:00
Peter Steinberger
9adbf47773
refactor: normalize group session keys
2026-01-02 10:14:58 +01:00
Peter Steinberger
4c2812b429
fix: refine HEARTBEAT_OK handling
2026-01-02 01:42:27 +01:00
Peter Steinberger
06e379a239
fix: suppress stray HEARTBEAT_OK replies
2026-01-01 23:53:29 +01:00
Peter Steinberger
eb158545fc
fix: force web reconnect on stalled close
2025-12-28 12:04:20 +00:00
Peter Steinberger
e336b7f27e
fix: use final heartbeat payload
2025-12-26 20:39:20 +00:00
Peter Steinberger
d6f07c9f91
chore: fix lint after logging tweaks
2025-12-26 09:08:37 +00:00
Peter Steinberger
461db9e469
fix: split whatsapp listen hint from subsystem log
2025-12-26 08:41:58 +00:00
Peter Steinberger
0d8e0ddc4f
feat: unify gateway heartbeat
2025-12-26 02:35:40 +01:00
Peter Steinberger
9f7b1f0942
feat: move heartbeat config to agent.heartbeat
2025-12-26 01:13:42 +01:00
Peter Steinberger
93af424ce5
refactor: move inbound config
2025-12-24 00:22:52 +00:00
Peter Steinberger
364a6a9444
feat: add per-session model selection
2025-12-23 23:45:20 +00:00
Peter Steinberger
df5284beaf
fix: suppress thinking stream + typing
2025-12-23 14:17:18 +00:00
Peter Steinberger
96d57a18ee
chore: demote reply chunk logs
2025-12-23 13:25:56 +00:00
Peter Steinberger
cd6ed79433
fix: honor group requireMention default
2025-12-23 12:53:30 +00:00
Peter Steinberger
56245d5646
fix: strip repeated heartbeat ok tails
2025-12-23 03:12:24 +01:00
Peter Steinberger
67a3dda53a
fix: inject reply context into body
2025-12-23 02:44:38 +01:00
Peter Steinberger
6550e7d562
fix: add whatsapp reply context
2025-12-23 02:30:21 +01:00
Peter Steinberger
918cbdcf03
refactor: lint cleanups and helpers
2025-12-23 00:28:55 +00:00
Peter Steinberger
9717f2d374
fix: bump pi deps and fix lint
2025-12-22 20:45:38 +00:00
Peter Steinberger
f10c8f2b4c
feat: add group activation command
2025-12-22 20:36:29 +01:00
Peter Steinberger
15e468f5dd
feat: add group chat activation mode
2025-12-22 19:32:12 +01:00
Peter Steinberger
52e7a4456a
refactor(logging): streamline whatsapp console output
2025-12-21 17:36:24 +00:00
Peter Steinberger
873daf079c
feat(web): emit provider status updates
2025-12-20 23:43:27 +01:00
Peter Steinberger
929a10e33d
fix(web): handle self-chat mode
2025-12-20 19:32:06 +01:00
Peter Steinberger
36c85a617a
fix: use file-type for mime sniffing
2025-12-20 19:13:50 +01:00
Peter Steinberger
70faa4ff36
feat(web): stream tool summaries
2025-12-20 13:47:07 +00:00
Peter Steinberger
0e94c6b025
fix(browser): restore tsc types
2025-12-20 01:27:51 +00:00
Peter Steinberger
afa4a234f9
fix: remove WhatsApp batching delay
2025-12-20 01:48:29 +01:00
Peter Steinberger
fece42ce0a
feat: embed pi agent runtime
2025-12-17 11:29:04 +01:00
Peter Steinberger
694a10f604
fix(web): use heartbeat inbound msg for delivery
2025-12-14 01:55:40 +00:00
Peter Steinberger
8b6abe0151
fix(web): heartbeat fallback after group inbound
2025-12-14 01:26:40 +00:00
Peter Steinberger
f9409cbe43
Cron: add scheduler, wakeups, and run history
2025-12-13 02:34:38 +00:00
Peter Steinberger
8fb3aef917
fix(gateway): handle SIGTERM shutdown cleanly
2025-12-12 18:28:08 +00:00
Peter Steinberger
6e9d3092a7
fix(voice): persist WhatsApp last route
2025-12-12 17:28:07 +00:00
Peter Steinberger
a524b9ae9b
feat(voicewake): route replies to last channel
2025-12-12 16:22:30 +00:00
Peter Steinberger
f1ff24d634
web: default to self-only without config
2025-12-12 01:22:03 +00:00
Peter Steinberger
47a1f757a9
lint: format and stabilize gateway health
2025-12-10 18:00:33 +00:00
Peter Steinberger
e9fd73141d
health: gateway-only status and stable reconnect
2025-12-10 16:47:38 +00:00
Peter Steinberger
1dd5c97ae0
feat: add ws chat attachments
2025-12-09 23:16:57 +01:00
Peter Steinberger
5a8d18edf3
web: reuse active listener for sends
2025-12-09 20:37:01 +00:00
Peter Steinberger
131864b940
gateway: drop ipc and simplify cli
2025-12-09 20:18:50 +00:00
Peter Steinberger
5e5845547e
gateway: improve conflict handling and logging
2025-12-09 20:07:24 +00:00
Peter Steinberger
ffc930b871
surface: envelope inbound messages for agent
2025-12-09 18:43:21 +00:00
Peter Steinberger
a3bf2bdd8c
chore: rename relay to gateway
2025-12-09 18:00:01 +00:00
Peter Steinberger
67f2bc1385
web: log disconnect error detail in reconnect loop
2025-12-09 17:38:49 +00:00
Peter Steinberger
d04f7fc6e9
msg: retry web/telegram sends and add regression tests
2025-12-09 17:23:04 +00:00
Peter Steinberger
3fe68a051a
fix: block partial replies on external chat surfaces
2025-12-09 01:48:12 +01:00
Peter Steinberger
5bfecc6152
fix: stop partial replies for whatsapp/telegram surfaces
2025-12-09 01:41:05 +01:00
Peter Steinberger
22996854f7
relay: add control channel and heartbeat stream
2025-12-08 21:50:24 +01:00
Peter Steinberger
ab448988ff
RPC: stream heartbeat events to menu
2025-12-08 20:18:54 +01:00
Peter Steinberger
d463c82c95
build: add local node bin to restart script PATH
2025-12-07 19:01:14 +01:00
Peter Steinberger
b30db08110
feat: add heartbeat toggle with live RPC control
2025-12-07 15:32:48 +01:00
Peter Steinberger
cb5c932447
Health: CLI probe and mac UI surfacing
2025-12-07 04:38:20 +00:00
Peter Steinberger
4b6325908b
feat: unify main session and icon cues
2025-12-06 23:16:23 +01:00
Peter Steinberger
5492845659
feat: stream turn completions and tighten rpc timeout
2025-12-05 21:13:17 +00:00
Peter Steinberger
29dfe89137
chore: redact long texts in web logs
2025-12-05 19:21:23 +00:00
Peter Steinberger
7c7314f673
chore: drop twilio and go web-only
2025-12-05 19:03:59 +00:00
Peter Steinberger
b3e50cbb33
Switch to clawdis RPC mode and complete rebrand
2025-12-05 17:22:53 +00:00
Eng. Juan Combetto
4a35bcec21
fix: resolve lint errors (unused vars, imports, formatting)
...
- Prefix unused test variables with underscore
- Remove unused piSpec import and idleMs class member
- Fix import ordering and code formatting
2025-12-04 16:15:17 +00:00
Peter Steinberger
a321bf1a90
fix(web): surface media fetch failures
2025-12-03 15:45:43 +00:00
Peter Steinberger
b55ac994ea
feat(web): prime group sessions with member roster
2025-12-03 15:45:43 +00:00
Peter Steinberger
edc894f6c7
fix(web): annotate group replies with sender
2025-12-03 13:25:34 +00:00
Peter Steinberger
8204351d67
fix(web): allow group replies past allowFrom
2025-12-03 13:08:54 +00:00
Peter Steinberger
7ea43b0145
fix(web): detect self number mentions in group chats
2025-12-03 12:43:20 +00:00
Peter Steinberger
6afe6f4ecb
feat(web): add group chat mention support
2025-12-03 12:35:18 +00:00
Peter Steinberger
0f17a7d828
Heartbeat: normalize reply arrays for twilio/web
2025-12-03 00:43:28 +00:00
Peter Steinberger
9da5b9f4bb
Heartbeat: normalize array replies
2025-12-03 00:40:19 +00:00
Peter Steinberger
b6c45485bc
Auto-reply: smarter chunking breaks
2025-12-03 00:25:01 +00:00
Peter Steinberger
ec46932259
web: handle multi-payload replies
2025-12-02 23:46:11 +00:00
Peter Steinberger
10182f1182
limits: chunk replies for twilio/web
2025-12-02 23:10:16 +00:00
Peter Steinberger
b172b538fc
perf(pi): reuse tau rpc for command auto-replies
2025-12-02 20:09:51 +00:00
Peter Steinberger
ed080ae988
Tests: cover agents and fix web defaults
...
Co-authored-by: RealSid08 <RealSid08@users.noreply.github.com>
2025-12-02 11:08:00 +00:00
Peter Steinberger
f31e89d5af
Agents: add pluggable CLIs
...
Co-authored-by: RealSid08 <RealSid08@users.noreply.github.com>
2025-12-02 11:07:46 +00:00
Peter Steinberger
5b54d4de7a
feat(web): batch inbound messages
2025-12-02 07:54:13 +00:00
Peter Steinberger
96152f6577
Add typing indicator after IPC send
...
After sending via IPC, automatically show "composing" indicator so
user knows more messages may be coming from the running session.
2025-12-02 06:58:17 +00:00
Peter Steinberger
e86b507da7
Add IPC to prevent Signal session corruption from concurrent connections
...
When the relay is running, `warelay send` and `warelay heartbeat` now
communicate via Unix socket IPC (~/.warelay/relay.sock) to send messages
through the relay's existing WhatsApp connection.
Previously, these commands created new Baileys sockets that wrote to the
same auth state files, corrupting the Signal session ratchet and causing
the relay's subsequent sends to fail silently.
Changes:
- Add src/web/ipc.ts with Unix socket server/client
- Relay starts IPC server after connecting
- send command tries IPC first, falls back to direct
- heartbeat uses sendWithIpcFallback helper
- inbound.ts exposes sendMessage on listener object
- Messages sent via IPC are added to echo detection set
2025-12-02 06:31:07 +00:00
Peter Steinberger
2fc3a822c8
web: isolate session fixtures and skip heartbeat when busy
2025-12-02 06:17:16 +00:00
Peter Steinberger
c5ab442f46
Fix empty result JSON dump and missing heartbeat prefix
...
Bug fixes:
- Empty result field handling: Changed truthy check to explicit type
check (`typeof parsed?.text === "string"`) in command-reply.ts.
Previously, Claude CLI returning `result: ""` would cause raw JSON
to be sent to WhatsApp.
- Response prefix on heartbeat: Apply `responsePrefix` to heartbeat
alert messages in runReplyHeartbeat, matching behavior of regular
message handler.
2025-12-02 04:29:17 +00:00
Peter Steinberger
c5677df56e
Increase watchdog timeout to 30 minutes
...
Changed from 10 to 30 minutes to avoid false positives when
heartbeatMinutes is set to 10. The watchdog should be significantly
longer than the heartbeat interval to account for:
- Network latency
- Slow command responses
- Brief connection hiccups
With heartbeatMinutes=10, a 30-minute watchdog gives 3x buffer before
triggering auto-restart.
2025-11-30 18:03:19 +00:00
Peter Steinberger
69319a0569
Add auto-recovery from stuck WhatsApp sessions
...
Fixes issue where unauthorized messages from +212652169245 (5elements spa)
triggered Bad MAC errors and silently killed the event emitter, preventing
all future message processing.
Changes:
1. Early allowFrom filtering in inbound.ts - blocks unauthorized senders
before they trigger encryption errors
2. Message timeout watchdog - auto-restarts connection if no messages
received for 10 minutes
3. Health monitoring in heartbeat - warns if >30 min without messages
4. Mock loadConfig in tests to handle new dependency
Root cause: Event emitter stopped firing after Bad MAC errors from
decryption attempts on messages from unauthorized senders. Connection
stayed alive but all subsequent messages.upsert events silently failed.
2025-11-30 17:53:32 +00:00
Peter Steinberger
37d8e55991
Skip responsePrefix for HEARTBEAT_OK responses
...
Preserve exact match so warelay recognizes heartbeat responses
and doesn't send them as messages.
2025-11-29 06:02:21 +00:00
Peter Steinberger
8d20edb028
Simplify timestampPrefix: bool or timezone string, default true
...
- timestampPrefix: true (UTC), false (off), or 'America/New_York'
- Removed separate timestampTimezone option
- Default is now enabled (true/UTC) unless explicitly false
2025-11-29 05:29:29 +00:00
Peter Steinberger
7564c4e7f4
Generalize prefix config: messagePrefix + responsePrefix
...
Replaces samePhoneMarker/samePhoneResponsePrefix with:
- messagePrefix: prefix for all inbound messages
- Default: '[warelay]' if no allowFrom, else ''
- responsePrefix: prefix for all outbound replies
Also adds timestamp options:
- timestampPrefix: boolean to enable [Nov 29 06:30] format
- timestampTimezone: IANA timezone (default UTC)
Updated README with new config table entries.
2025-11-29 05:27:58 +00:00
Peter Steinberger
26e02a9b8b
Add timestampPrefix config for datetime awareness
...
New config options:
- timestampPrefix: boolean - prepend timestamp to messages
- timestampTimezone: string - IANA timezone (default: UTC)
Format: [Nov 29 06:30] - compact but informative
Helps AI assistants stay aware of current date/time.
2025-11-29 05:25:53 +00:00
Peter Steinberger
25ec133574
Add samePhoneResponsePrefix config option
...
Automatically prefixes responses with a configurable string when in
same-phone mode. This helps distinguish bot replies from user messages
in the same chat bubble.
Example config:
"samePhoneResponsePrefix": "🦞 "
Will prefix all same-phone replies with the lobster emoji.
2025-11-29 05:24:01 +00:00
Peter Steinberger
d88ede92b9
feat: same-phone mode with echo detection and configurable marker
...
Adds full support for self-messaging setups where you chat with yourself
and an AI assistant replies in the same WhatsApp bubble.
Changes:
- Same-phone mode (from === to) always allowed, bypasses allowFrom check
- Echo detection via bounded Set (max 100) prevents infinite loops
- Configurable samePhoneMarker in config (default: "[same-phone]")
- Messages prefixed with marker so assistants know the context
- fromMe filter removed from inbound.ts (echo detection in auto-reply)
- Verbose logging for same-phone detection and echo skips
Tests:
- Same-phone allowed without/despite allowFrom configuration
- Body prefixed only when from === to
- Non-same-phone rejected when not in allowFrom
2025-11-29 04:52:21 +00:00
Peter Steinberger
12d7be7cad
feat(heartbeat): allow manual message and dry-run for web/twilio
2025-11-28 08:14:07 +01:00