Commit Graph

370 Commits

Author SHA1 Message Date
Peter Steinberger
546f386735 fix: harden heartbeat acks + gateway reconnect 2025-12-27 20:02:27 +00:00
Peter Steinberger
98de257496 fix: skip whatsapp heartbeat when provider inactive 2025-12-27 19:34:10 +00:00
Peter Steinberger
41ff47c0fc chore: release 2.0.0-beta4 2025-12-27 19:43:43 +01:00
Peter Steinberger
b2dae3d007 chore: release 2.0.0-beta3 2025-12-27 19:02:35 +01:00
Peter Steinberger
9694cf17fa fix(macos): boost light mode usage bar contrast 2025-12-27 14:03:45 +01:00
Peter Steinberger
096b48077b fix: treat /model status as model list 2025-12-27 12:10:44 +00:00
Peter Steinberger
1bf2e888ae docs: update changelog 2025-12-27 03:21:25 +01:00
Peter Steinberger
324c31e011 fix: enqueue system event on model switch 2025-12-27 01:17:12 +00:00
Peter Steinberger
310c9bd083 fix(macos): lock menu width on hover 2025-12-27 01:50:25 +01:00
Peter Steinberger
6fdefd9441 refactor: node tools and canvas host url 2025-12-27 01:36:29 +01:00
Peter Steinberger
048c87a07e fix: drop identity emoji response prefix 2025-12-27 00:36:04 +00:00
Peter Steinberger
f4ed7b401b fix: allow empty responsePrefix 2025-12-27 00:33:04 +00:00
Peter Steinberger
1f3ddf8850 fix: enable lmstudio responses and drop think tags 2025-12-27 00:28:52 +00:00
Peter Steinberger
497b5b8ab1 fix(macos): refresh menu sessions without resizing 2025-12-26 22:48:58 +01:00
Peter Steinberger
173cefd0f0 feat(mac): add allow camera toggle 2025-12-26 21:33:22 +00:00
Peter Steinberger
8596b70813 fix(macos): expand menu hover highlight width 2025-12-26 22:30:29 +01:00
Peter Steinberger
a2b465a181 fix(macos): keep menu width stable while open 2025-12-26 22:27:24 +01:00
Peter Steinberger
14f06a2216 fix(macos): detect and reset stale SSH tunnels 2025-12-26 22:12:33 +01:00
Peter Steinberger
84f77a7a17 feat(mac): add node ssh and compact versions 2025-12-26 20:42:49 +00:00
Peter Steinberger
c680f3bac5 fix: use final heartbeat payload 2025-12-26 20:39:20 +00:00
Peter Steinberger
bcfd8bd9a3 fix(mac): refine node submenu copy behavior 2025-12-26 20:05:23 +00:00
Peter Steinberger
72c09f4769 refactor: make browser actions ref-only 2025-12-26 19:02:27 +00:00
Peter Steinberger
8d6874d952 fix: gate libsignal session logs behind verbose 2025-12-26 19:02:27 +00:00
Peter Steinberger
8062ab3db2 fix: provider startup order and enable flags 2025-12-26 16:54:53 +00:00
Peter Steinberger
f15089482c docs: update beta3 changelog 2025-12-26 17:21:29 +01:00
Peter Steinberger
4d9a1ca818 test: isolate vitest home 2025-12-26 11:45:16 +00:00
Peter Steinberger
12928f8002 fix: extract quoted WhatsApp reply text 2025-12-26 10:51:08 +01:00
Peter Steinberger
7c92830838 fix: log heartbeat failure reasons 2025-12-26 08:34:42 +00:00
Peter Steinberger
4cb41565e9 feat: unify gateway heartbeat 2025-12-26 02:35:40 +01:00
Peter Steinberger
fd933373d7 docs: note hour durations 2025-12-26 01:36:08 +01:00
Peter Steinberger
3ffd1c9bba feat: move heartbeat config to agent.heartbeat 2025-12-26 01:13:42 +01:00
Peter Steinberger
0e3e0d2873 fix(webchat): refresh bubbles on theme change 2025-12-25 22:35:46 +01:00
Peter Steinberger
60a36c5d1e docs: update beta3 changelog 2025-12-25 21:15:45 +00:00
Peter Steinberger
fabed34e88 feat: line-based process logs 2025-12-25 18:03:57 +00:00
Peter Steinberger
b9bf1c2697 docs: add background bash changelog 2025-12-25 00:54:08 +00:00
Peter Steinberger
bf6cfd3aff docs: clarify reply threading change 2025-12-24 22:37:32 +01:00
Peter Steinberger
e6dcc8be8f feat: add gmail hooks wizard 2025-12-24 19:48:35 +00:00
Peter Steinberger
ad2671a83c chore: update changelog 2025-12-24 14:39:26 +00:00
Peter Steinberger
c58e926852 feat: add gateway webhooks 2025-12-24 14:33:05 +00:00
Peter Steinberger
42a7b5e98e docs: update changelog 2025-12-24 13:52:41 +01:00
Peter Steinberger
d0312fa562 docs: note config refactor 2025-12-24 00:24:05 +00:00
Peter Steinberger
7bda787266 docs: update routing/messages/session config 2025-12-24 00:22:57 +00:00
Peter Steinberger
7df28dcff2 fix: tag owner numbers in system prompt 2025-12-23 14:19:41 +00:00
Peter Steinberger
a24d541abc fix: suppress thinking stream + typing 2025-12-23 14:17:18 +00:00
Peter Steinberger
4e1c03b6fe fix: delay typing until reply payload 2025-12-23 13:55:01 +00:00
Peter Steinberger
80ed2ad7c0 fix: inject group activation in system prompt 2025-12-23 13:32:07 +00:00
Peter Steinberger
3fd7570aac fix: honor /new resets with mentions in groups 2025-12-23 13:20:11 +00:00
Peter Steinberger
8486a9652b refactor: drop PAM auth and require password for funnel 2025-12-23 13:13:09 +00:00
Peter Steinberger
aada8f7c84 fix: honor group requireMention default 2025-12-23 12:53:30 +00:00
Peter Steinberger
46ff27c8a1 fix: strip repeated heartbeat ok tails 2025-12-23 03:12:24 +01:00
Peter Steinberger
5d1e92e95d fix: preserve whatsapp group JIDs 2025-12-23 03:05:59 +01:00
Peter Steinberger
1dd8345d89 docs: add beta3 changelog 2025-12-23 03:02:30 +01:00
Peter Steinberger
e0706949a7 fix: inject reply context into body 2025-12-23 02:44:38 +01:00
Peter Steinberger
317d4ddbac fix: add whatsapp reply context 2025-12-23 02:30:21 +01:00
Peter Steinberger
4216b4dedf fix: add A2UI inset vars 2025-12-21 03:21:49 +01:00
Peter Steinberger
4f031c22a1 docs: add 2.0.0-beta2 changelog 2025-12-21 01:54:27 +01:00
Peter Steinberger
0a7299eb77 chore: prep 2.0.0-beta1 release 2025-12-19 18:02:30 +01:00
Peter Steinberger
8b3495bf0c chore(naming): remove Iris codename 2025-12-18 13:18:33 +01:00
Peter Steinberger
15442560a4 Docs: document canvas.* node.invoke commands 2025-12-18 01:20:20 +00:00
Peter Steinberger
d723235b34 docs(changelog): note macOS voice audio fix 2025-12-16 09:35:02 +00:00
Peter Steinberger
3a5687aeb0 docs(changelog): add 2.0.0-beta1 entry 2025-12-14 00:34:22 +00:00
Peter Steinberger
a3ce3b056d docs: pi-only terminology 2025-12-13 13:26:44 +00:00
Peter Steinberger
0c76800935 docs: clarify voice wake last-channel routing 2025-12-12 16:26:19 +00:00
Peter Steinberger
525e678f2f chore: drop gateway ipc remnants 2025-12-09 20:21:41 +00:00
Peter Steinberger
f847d86da7 chore: rename relay to gateway 2025-12-09 18:00:01 +00:00
Peter Steinberger
1e84ca69a0 chore: drop runner shim and add committer helper 2025-12-09 17:24:25 +00:00
Peter Steinberger
a832b90aae IPC: rename relay socket to gateway.sock 2025-12-09 17:04:58 +00:00
Peter Steinberger
daa699c7c0 feat(cli): unify relay providers and heartbeat flag 2025-12-08 16:34:06 +01:00
Peter Steinberger
c872256d72 refactor(cli): drop tmux helpers and update help copy 2025-12-08 12:43:13 +01:00
Peter Steinberger
8bf33dd2d4 Telegram: enable grammY throttler and webhook tests 2025-12-07 22:52:57 +01:00
Peter Steinberger
8d2fd382e4 build: add local node bin to restart script PATH 2025-12-07 19:01:14 +01:00
Peter Steinberger
4b857def36 auto-reply: enrich chat status 2025-12-07 16:53:33 +00:00
Peter Steinberger
4a813b8794 voice wake: keep default key when identity is blank 2025-12-07 16:23:35 +01:00
Peter Steinberger
b662fcc9d2 chore: purge warelay references 2025-12-07 03:36:57 +00:00
Peter Steinberger
ad15614a4e fix: remove legacy relay references 2025-12-06 23:21:25 +00:00
Peter Steinberger
6727870873 CLI: compact sessions table output 2025-12-06 00:49:21 +00:00
Peter Steinberger
20a780a8c0 fix: harden directive handling 2025-12-05 23:43:30 +00:00
Peter Steinberger
2b2e545ef5 fix: broaden prompt-echo guard and add heartbeat directive test 2025-12-05 22:56:07 +00:00
Peter Steinberger
3a14da2e3b fix: avoid echoing prompts when rpc returns empty 2025-12-05 22:52:21 +00:00
Peter Steinberger
b9497a7d3a fix: ignore directives inside history blocks 2025-12-05 22:49:41 +00:00
Peter Steinberger
13da616a9a docs: note directive short-circuit 2025-12-05 21:30:01 +00:00
Peter Steinberger
8c6e73dcb4 chore: remove twilio and expand pi cli detection 2025-12-05 21:13:23 +00:00
Peter Steinberger
b7f4470c23 docs: update for web-only pi rpc 2025-12-05 19:04:09 +00:00
Peter Steinberger
f980b0af1c chore: make pi-only rpc with fixed sessions 2025-12-05 17:50:02 +00:00
Peter Steinberger
07c7353ccb branding: default to clawdis paths and launchd label 2025-12-04 18:01:30 +00:00
Peter Steinberger
8b9587938c docs: document agent CLI and changelog 2025-12-04 17:55:38 +00:00
Peter Steinberger
195af6408b chore: bump version to 1.4.0 2025-12-03 15:45:43 +00:00
Peter Steinberger
ac7310fc13 docs: note media-only mention fix 2025-12-03 15:45:43 +00:00
Peter Steinberger
c5a1020fa4 fix(web): surface media fetch failures 2025-12-03 15:45:43 +00:00
Peter Steinberger
d5ef1c76ae changelog: note verbose tool emoji/previews 2025-12-03 15:45:43 +00:00
Peter Steinberger
0bdb3b718e feat(web): prime group sessions with member roster 2025-12-03 15:45:43 +00:00
Peter Steinberger
4d6bc8eeaf fix(web): annotate group replies with sender 2025-12-03 13:25:34 +00:00
Peter Steinberger
9f1c1e7b7d changelog: note logging capture and verbose trace 2025-12-03 13:09:29 +00:00
Peter Steinberger
46f2e39142 fix(web): allow group replies past allowFrom 2025-12-03 13:08:54 +00:00
Peter Steinberger
cee6618fd6 feat(web): add group chat mention support 2025-12-03 12:35:18 +00:00
Peter Steinberger
7a7395fc99 Add /restart WhatsApp command to restart warelay 2025-12-03 12:14:32 +00:00
Peter Steinberger
cee09fa3e5 Tau RPC: resolve on agent_end or exit 2025-12-03 11:34:00 +00:00
Peter Steinberger
b6a04aadd2 Pi: resume Tau sessions with --continue 2025-12-03 11:33:51 +00:00
Peter Steinberger
ff625f0b63 Docs: note 1s tool coalescing window 2025-12-03 10:19:10 +00:00
Peter Steinberger
040c991ce9 Verbose: batch rapid tool results 2025-12-03 10:11:41 +00:00
Peter Steinberger
c9fd48de31 Verbose: include tool arg metadata in prefixes 2025-12-03 09:57:41 +00:00
Peter Steinberger
01185952e6 Verbose: send tool result metadata only 2025-12-03 09:40:05 +00:00
Peter Steinberger
c8309e73aa Tau RPC: resolve on agent_end 2025-12-03 09:39:26 +00:00
Peter Steinberger
4143c2be2d Docs: note streaming verbose tool results 2025-12-03 09:22:43 +00:00
Peter Steinberger
05ce99d557 Docs: mention verbose hints 2025-12-03 09:08:03 +00:00
Peter Steinberger
e33c7a813d Auto-reply: add /verbose directives and tool result replies 2025-12-03 09:04:37 +00:00
Peter Steinberger
e5fff1d374 Auto-reply: ack think directives 2025-12-03 08:54:38 +00:00
Peter Steinberger
6ec2335bae Docs: document thinking levels 2025-12-03 08:45:30 +00:00
Peter Steinberger
2fbd0b9f74 Changelog: heartbeat array handling 2025-12-03 01:03:59 +00:00
Peter Steinberger
d25d12ca8a Auto-reply: smarter chunking breaks 2025-12-03 00:25:01 +00:00
Peter Steinberger
0f378bb640 limits: chunk replies for twilio/web 2025-12-02 23:10:16 +00:00
Peter Steinberger
f374561579 auto-reply: support multi-text RPC outputs 2025-12-02 23:03:55 +00:00
Peter Steinberger
088887c8fe chore: cut 1.3.1 in changelog 2025-12-02 21:13:47 +00:00
Peter Steinberger
8c7f4e4ab0 docs: note media cleanup and tau rpc typing 2025-12-02 21:13:21 +00:00
Peter Steinberger
5e5adbfc8f test(media): add redirect coverage and update changelog 2025-12-02 21:09:26 +00:00
Peter Steinberger
873ba41650 docs: update agent guidance and changelog 2025-12-02 20:10:43 +00:00
Peter Steinberger
65c7078abb chore: credit media fix contributor 2025-12-02 18:38:02 +00:00
Peter Steinberger
dc226c4ee0 fix(media): block symlink traversal 2025-12-02 18:37:15 +00:00
Peter Steinberger
5b5eebe015 chore(logs): rotate daily and prune after 24h 2025-12-02 17:11:43 +00:00
Peter Steinberger
1f0c022b96 chore(security): purge session store on logout 2025-12-02 16:33:44 +00:00
Peter Steinberger
241941fb70 chore(security): harden ipc socket 2025-12-02 16:09:40 +00:00
Peter Steinberger
bdaf64e6dc Changelog: note multi-agent and batching
Co-authored-by: RealSid08 <RealSid08@users.noreply.github.com>
2025-12-02 11:11:50 +00:00
Peter Steinberger
6c12d50895 chore: bump version to 1.3.0 2025-12-02 07:54:49 +00:00
Peter Steinberger
32564ca6d3 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
030968e2de 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
f2d2d3dce6 web: isolate session fixtures and skip heartbeat when busy 2025-12-02 06:17:16 +00:00
Peter Steinberger
a052d535a0 Update changelog with error message and test isolation fixes 2025-12-02 05:59:31 +00:00
Peter Steinberger
8a94bc1b30 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
4c4a08fade 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
9f1c2169eb Fix test isolation to prevent loading real user config
Tests were picking up real ~/.warelay/warelay.json with emojis and
prefixes (like "🦞"), causing test assertions to fail. Added proper
config mocks to all test files.

Changes:
- Mock loadConfig() in index.core.test.ts, inbound.media.test.ts,
  monitor-inbox.test.ts
- Update test-helpers.ts default mock to disable all prefixes
- Tests now use clean config: no messagePrefix, no responsePrefix,
  no timestamp, allowFrom=["*"]

This ensures tests validate core behavior without user-specific config.
The responsePrefix feature itself is already fully config-driven - this
only fixes test isolation.
2025-11-30 18:00:57 +00:00
Peter Steinberger
a7b6914a64 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
f13519d277 chore: release 1.2.2 2025-11-28 08:17:22 +01:00
Peter Steinberger
9486f06adb chore: move heartbeat notes to unreleased 1.2.2 2025-11-28 08:14:51 +01:00
Peter Steinberger
258bb716c5 chore: release 1.2.1 2025-11-28 08:11:07 +01:00
Peter Steinberger
83f03a9b23 docs: document mime-first media handling 2025-11-28 08:07:53 +01:00
Peter Steinberger
0866974e59 Release 1.2.0 2025-11-27 18:52:26 +01:00
Peter Steinberger
bb21763957 Docs: refresh 1.2.0 changelog; fix webhook host import 2025-11-27 18:46:46 +01:00
Peter Steinberger
2a4f56e66b Fix WebSocket crash + heartbeat default 10min + docs refresh
- Wrap Baileys connection.update listeners in try-catch to prevent
  unhandled exceptions from crashing the relay process
- Add WebSocket-level error handlers in session.ts
- Add global unhandledRejection/uncaughtException handlers in index.ts
- Make listener.onClose error-safe with .catch() in auto-reply.ts
- Change default heartbeat from 30min to 10min
- Rewrite claude-config.md with personality, better explain personal
  assistant features, add recommended MCPs section
2025-11-27 18:21:14 +01:00
Peter Steinberger
cb050b022f Heartbeat: session-id override and safer fallback 2025-11-26 18:19:54 +01:00
Peter Steinberger
f3604a4a28 Changelog: bump to 1.2.0 unreleased 2025-11-26 18:18:13 +01:00
Peter Steinberger
ba543640d3 Heartbeat: harden targeting and support lid mapping 2025-11-26 18:15:57 +01:00
Peter Steinberger
b13fa6bcc3 CLI: rename heartbeat tmux helper and log file path 2025-11-26 18:00:23 +01:00
Peter Steinberger
1c64f83b31 Heartbeat: add relay helper and fix CLI tests 2025-11-26 17:49:34 +01:00
Peter Steinberger
4c58baa14b docs: document heartbeat idle override and tests 2025-11-26 17:31:56 +01:00
Peter Steinberger
a6af33d262 docs: document heartbeat triggers 2025-11-26 17:05:09 +01:00
Peter Steinberger
5d0c5c7a50 docs: open 1.1.x unreleased section 2025-11-26 03:33:44 +01:00
Peter Steinberger
0833760d78 chore: update changelog and surface web relay settings 2025-11-26 02:43:24 +01:00
Peter Steinberger
c687d41f82 docs: trim changelog to user-facing auto-reply changes 2025-11-26 02:19:21 +01:00
Peter Steinberger
268ab0480f docs: note auto-reply helper split 2025-11-26 02:18:39 +01:00
Peter Steinberger
9fa3cbab8a chore: format to 2-space and bump changelog 2025-11-26 00:53:53 +01:00
Peter Steinberger
41dc5ed5eb feat: keep typing indicators alive during commands 2025-11-26 00:05:11 +01:00
Peter Steinberger
1dfc2ccf6e feat: send session prompt once 2025-11-25 23:52:38 +01:00
Peter Steinberger
cb61b9ff84 docs: document media caps and tidy web tests 2025-11-25 23:43:57 +01:00
Peter Steinberger
9992f778e6 docs: clarify transcript prompt and config 2025-11-25 23:14:23 +01:00
Peter Steinberger
9b8bcf36c3 feat: optional audio transcription via CLI 2025-11-25 23:06:54 +01:00
Peter Steinberger
87f9b1f0f4 web: compress auto-reply media 2025-11-25 20:09:03 +01:00
Peter Steinberger
49c21e9f6f Release 1.0.4 2025-11-25 18:12:44 +01:00
Peter Steinberger
51f3be9230 Web relay: auto-reconnect Baileys and test 2025-11-25 18:09:57 +01:00
Peter Steinberger
7dc5681102 Auto-reply: send timeout fallback and tests 2025-11-25 17:52:57 +01:00
Peter Steinberger
5bbae8c435 Chore: prep 0.1.4 unreleased placeholder and release guardrails 2025-11-25 17:08:13 +01:00
Peter Steinberger
47a79e7a93 Release 0.1.3 2025-11-25 16:53:30 +01:00
Peter Steinberger
0fef193518 Add cwd option for command replies 2025-11-25 16:19:24 +01:00
Peter Steinberger
5e4d430db1 chore: trim 0.1.2 changelog entry 2025-11-25 14:50:34 +01:00
Peter Steinberger
7dbbfcf54f chore: reorder changelog and add 0.1.3 stub 2025-11-25 14:47:48 +01:00
Peter Steinberger
93d9e932fb chore: bump to 0.1.2 and fix commander typings 2025-11-25 14:26:55 +01:00
Peter Steinberger
8b5500474f chore: document 0.1.1 changes in changelog 2025-11-25 14:10:42 +01:00
Peter Steinberger
137fd4293b Cleanup: remove deprecated up alias and update ingress docs 2025-11-25 12:40:56 +01:00
Peter Steinberger
78e53b53f1 CLI: unify webhook ingress and keep up as tailscale alias 2025-11-25 12:38:38 +01:00
Peter Steinberger
91c01847c6 CLI: drop web:login alias and simplify web quickstart 2025-11-25 12:30:43 +01:00
Peter Steinberger
ab6b11dd1b Prepare 0.1.0 changelog and npm-focused quickstart 2025-11-25 12:00:48 +01:00