Peter Steinberger
6b9251265b
Runtime: drop bun support
2025-12-09 04:13:56 +00:00
Peter Steinberger
41d9619c44
chore(instances): harden presence refresh and fix lint
2025-12-09 04:51:54 +01:00
Peter Steinberger
34de27a751
fix(rpc): keep stdout json-only
2025-12-09 04:34:11 +01:00
Peter Steinberger
2f23b95c77
fix(presence): always seed self entry and log counts
2025-12-09 03:21:59 +00:00
Peter Steinberger
95272b5fb5
Relay: enforce single instance lock
2025-12-09 03:17:23 +00:00
Peter Steinberger
d2f1687c57
feat(status): enrich session details
2025-12-09 03:00:10 +00:00
Peter Steinberger
9733dfc2d9
feat(instances): beacon on connect and relay self-entry
2025-12-09 03:57:08 +01:00
Peter Steinberger
0a40ef16cc
RPC: fix presence imports
2025-12-09 02:39:41 +00:00
Peter Steinberger
41976f115a
RPC: extract stdio loop and tests
2025-12-09 02:37:04 +00:00
Peter Steinberger
b1fa1e55c1
Build: fix RPC sendable params and CLI imports
2025-12-09 03:33:16 +01:00
Peter Steinberger
903f0d3d94
Control: route health/heartbeat over RPC stdio
2025-12-09 02:26:08 +00:00
Peter Steinberger
6e766633cf
Docs: voice overlay plan and fix web mocks
2025-12-09 03:25:55 +01:00
Peter Steinberger
2d6140ac50
fix merge; add control logging
2025-12-09 01:46:09 +00:00
Peter Steinberger
3974a727e5
feat: surface system presence for the agent
2025-12-09 02:25:37 +01:00
Peter Steinberger
59677bc77e
fix: block partial replies on external chat surfaces
2025-12-09 01:48:12 +01:00
Peter Steinberger
e663fbb7f2
fix: stop partial replies for whatsapp/telegram surfaces
2025-12-09 01:41:05 +01:00
Peter Steinberger
99b0e9a648
refactor: type tau rpc stream events
2025-12-09 01:41:05 +01:00
Peter Steinberger
6491048c52
chore: harden rpc assistant streaming types
2025-12-09 01:41:05 +01:00
Peter Steinberger
d41aa039f6
control: log incoming health requests
2025-12-09 00:38:42 +00:00
Peter Steinberger
ee6c509aa4
control: reconnect on EOF and relax rpc text parse
2025-12-09 00:29:31 +00:00
Peter Steinberger
4a3824af4f
test: ensure tool events emit without verbose
2025-12-09 01:24:16 +01:00
Peter Steinberger
516c5b0422
fix: always emit tool events
2025-12-09 01:22:50 +01:00
Peter Steinberger
1cae65acdb
chore: single-source working state from agent events
2025-12-09 01:17:01 +01:00
Peter Steinberger
85fdcfe0de
chore: guard host runtime and simplify packaging
2025-12-09 00:59:56 +01:00
Peter Steinberger
6669192ec6
chore: tidy agent event streaming types
2025-12-09 00:59:56 +01:00
Peter Steinberger
1c341a9033
relay: don't crash when webchat port is busy
2025-12-08 23:49:57 +00:00
Peter Steinberger
1372a11a5c
feat: forward tool/assistant events to agent bus
2025-12-09 00:44:30 +01:00
Peter Steinberger
83ba6a4b33
feat: stream tool/job events over control channel
2025-12-09 00:31:39 +01:00
Peter Steinberger
14c117f1ea
feat: broadcast agent events over control channel
2025-12-09 00:28:03 +01:00
Peter Steinberger
40dc21128f
feat: emit job-state events from rpc
2025-12-09 00:18:14 +01:00
Peter Steinberger
aaf5232823
control: drop runtime export of type-only HeartbeatEventPayload
2025-12-08 23:15:33 +01:00
Peter Steinberger
adfbe7edac
control: seed events, add tests, update remote doc
2025-12-08 22:03:46 +01:00
Peter Steinberger
e5feff1b0e
relay: add control channel and heartbeat stream
2025-12-08 21:50:24 +01:00
Peter Steinberger
2c4fbf82d0
ux: keep window in edit, add escape to cancel; fix lint drift
2025-12-08 20:22:56 +01:00
Peter Steinberger
43183aeff7
RPC: stream heartbeat events to menu
2025-12-08 20:18:54 +01:00
Peter Steinberger
4d3a82dc85
fix: polish voice overlay and webchat lint
2025-12-08 17:32:34 +01:00
Peter Steinberger
d54655731f
Webchat: clean server build and add ws types
2025-12-08 16:21:56 +00:00
Peter Steinberger
b07763df7d
Webchat: push updates over WebSocket
2025-12-08 16:19:33 +00:00
Peter Steinberger
dd83bf71fd
chore: tighten webchat types and formatting
2025-12-08 17:14:43 +01:00
Peter Steinberger
89f85db691
Agent: add thinkingOnce flag
2025-12-08 16:12:24 +00:00
Peter Steinberger
11b31f7b47
Webchat: sync thinking level with session
2025-12-08 16:10:14 +00:00
Peter Steinberger
5b1d5d5dbc
chore: fix lint warnings and formatting
2025-12-08 17:05:27 +01:00
Peter Steinberger
b53084adb6
fix(mac): surface health errors instead of pending
2025-12-08 16:50:20 +01:00
Peter Steinberger
daa699c7c0
feat(cli): unify relay providers and heartbeat flag
2025-12-08 16:34:06 +01:00
Peter Steinberger
24243bd62e
Webchat: cap/ persist attachments and strip data URLs
2025-12-08 14:59:26 +00:00
Peter Steinberger
8151964028
Webchat: inline attachments to agent RPC and fix status compile
2025-12-08 14:46:33 +00:00
Peter Steinberger
e58eaa9a72
status: read token usage from pi session logs
2025-12-08 14:46:15 +00:00
Peter Steinberger
878daa68c5
Webchat: run agent in-process for RPC
2025-12-08 14:14:00 +00:00
Peter Steinberger
48e293ed92
Webchat: resolve static root in packaged app
2025-12-08 14:07:20 +00:00
Peter Steinberger
fa2dd6408f
Webchat: auto-start server and simplify config
2025-12-08 13:12:34 +00:00
Peter Steinberger
9408670050
Remote web chat tunnel and onboarding polish
2025-12-08 12:50:37 +01:00
Peter Steinberger
c872256d72
refactor(cli): drop tmux helpers and update help copy
2025-12-08 12:43:13 +01:00
Peter Steinberger
ebad54b940
webchat: move serving to relay loopback and tunnel from mac app
2025-12-08 11:54:30 +01:00
Peter Steinberger
8a45e981ad
build: silence grammy type errors for mac packaging
2025-12-08 11:04:17 +01:00
Peter Steinberger
e7bd656f21
chore(ci): fix lint and swiftformat failures
2025-12-08 01:48:53 +01:00
Peter Steinberger
4ffd56da71
docs: move grammY research note to docs/grammy.md
2025-12-07 22:53:58 +01:00
Peter Steinberger
8bf33dd2d4
Telegram: enable grammY throttler and webhook tests
2025-12-07 22:52:57 +01:00
Peter Steinberger
5a9bf87dba
Add Bun bundle docs and Telegram grammY support
2025-12-07 22:47:05 +01:00
Peter Steinberger
1b888af439
Launch agent: disable autostart without killing running app
2025-12-07 19:01:14 +01:00
Peter Steinberger
8d2fd382e4
build: add local node bin to restart script PATH
2025-12-07 19:01:14 +01:00
Peter Steinberger
c674f8696c
VoiceWake: document escape path and reset stale forward command
2025-12-07 18:23:34 +01:00
Peter Steinberger
4b857def36
auto-reply: enrich chat status
2025-12-07 16:53:33 +00:00
Peter Steinberger
e1b888a7aa
feat: add heartbeat toggle with live RPC control
2025-12-07 15:32:48 +01:00
Peter Steinberger
227295e7f8
agent: allow deliver when json output
2025-12-07 15:16:55 +01:00
Peter Steinberger
55c163bd77
agent: deliver via rpc and voice forward
2025-12-07 06:05:00 +01:00
Peter Steinberger
ea53bc623e
Docs: swap to obviously fake phone numbers
2025-12-07 04:42:58 +00:00
Peter Steinberger
1866a86804
Health: strengthen probe tests
2025-12-07 04:39:24 +00:00
Peter Steinberger
2438311637
Health: CLI probe and mac UI surfacing
2025-12-07 04:38:20 +00:00
Peter Steinberger
5ef6330576
CLI: add health probe command
2025-12-07 04:33:22 +00:00
Peter Steinberger
6fa14d1e6e
feat(cli): add stdin/stdout rpc loop for agent sends
2025-12-07 05:10:58 +01:00
Peter Steinberger
d6eb1add9b
CLI: allow --provider flag for login/logout (default whatsapp)
2025-12-07 03:41:27 +00:00
Peter Steinberger
b662fcc9d2
chore: purge warelay references
2025-12-07 03:36:57 +00:00
Peter Steinberger
b9c041a5b7
Logging: use /tmp/clawdis for default pino logs
2025-12-07 03:32:37 +00:00
Peter Steinberger
13826236de
feat: unify main session and icon cues
2025-12-06 23:16:23 +01:00
Peter Steinberger
97a3bae932
chore: run formatters and lint
2025-12-06 04:03:48 +01:00
Peter Steinberger
6727870873
CLI: compact sessions table output
2025-12-06 00:49:21 +00:00
Peter Steinberger
6fa3f24185
fix: bundle pi dependency and directive handling
2025-12-06 00:49:46 +01:00
Peter Steinberger
20a780a8c0
fix: harden directive handling
2025-12-05 23:43:30 +00:00
Peter Steinberger
42d703764b
revert prompt-too-long fallback and keep inline directives
2025-12-05 23:18:03 +00:00
Peter Steinberger
c6a0f40e25
fix: handle prompt-too-long by resetting session and continuing inline directives
2025-12-05 23:01:37 +00:00
Peter Steinberger
61d0c40553
fix: allow inline directives to continue and add mixed-message test
2025-12-05 22:57:52 +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
f6f8aadfed
fix: suppress heartbeat directive acks and add coverage
2025-12-05 22:54:17 +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
e7099890fd
test: cover directive parsing and abort/restart prefixes
2025-12-05 22:29:49 +00:00
Peter Steinberger
c871408ad7
fix: avoid directive hits inside URLs and add tests
2025-12-05 22:28:36 +00:00
Peter Steinberger
c613569b47
Add bundled pi default and session token reporting
2025-12-05 23:18:43 +01:00
Peter Steinberger
99cac27e99
chore: add system marker to directives and abort
2025-12-05 21:37:11 +00:00
Peter Steinberger
4f387e8a80
fix: normalize directive triggers and short-circuit
2025-12-05 21:29:41 +00:00
Peter Steinberger
8c6e73dcb4
chore: remove twilio and expand pi cli detection
2025-12-05 21:13:23 +00:00
Peter Steinberger
10f61845c1
feat: stream turn completions and tighten rpc timeout
2025-12-05 21:13:17 +00:00
Peter Steinberger
783e81486a
chore: redact long texts in web logs
2025-12-05 19:21:23 +00:00
Peter Steinberger
5274b5808d
fix: ignore rpc toolcall deltas to avoid duplicate replies
2025-12-05 19:16:03 +00:00
Peter Steinberger
b1f09f9943
chore: drop twilio and go web-only
2025-12-05 19:03:59 +00:00
Peter Steinberger
a8f1a6a74b
Route pi agent prompts via RPC stdin
2025-12-05 18:34:05 +00:00
Peter Steinberger
6886416692
fix: harden pi rpc prompt handling
2025-12-05 18:24:45 +00:00
Peter Steinberger
f980b0af1c
chore: make pi-only rpc with fixed sessions
2025-12-05 17:50:02 +00:00
Peter Steinberger
ed17fe51bd
Switch to clawdis RPC mode and complete rebrand
2025-12-05 17:22:53 +00:00
Peter Steinberger
432508bf93
chore: organize imports after rebrand
2025-12-04 18:02:51 +00:00
Peter Steinberger
07c7353ccb
branding: default to clawdis paths and launchd label
2025-12-04 18:01:30 +00:00
Peter Steinberger
925d1f061a
web: fix mentioned JID extraction typing
2025-12-04 17:54:51 +00:00
Peter Steinberger
bd214ab43e
auto-reply: honor /new after timestamp prefixes
2025-12-04 17:54:20 +00:00
Peter Steinberger
6f29565722
CLI: add agent command for direct agent runs
2025-12-04 17:54:20 +00:00
Eng. Juan Combetto
4e3db62818
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
Eng. Juan Combetto
0fea51feb5
config: support clawdis.json path for rebranding
...
- Add CONFIG_PATH_CLAWDIS (~/.clawdis/clawdis.json) as preferred path
- Keep CONFIG_PATH_LEGACY (~/.warelay/warelay.json) for backward compatibility
- Update loadConfig() to check clawdis.json first, fallback to warelay.json
- Fix TypeScript type error in extractMentionedJids (null handling)
Part of the warelay → clawdis rebranding effort.
2025-12-04 16:15:17 +00:00
Peter Steinberger
8e6f0b0fe3
auto-reply: handle group think/verbose directives
2025-12-04 02:29:32 +00:00
Peter Steinberger
e89f14e441
test: cover verbose directive in group batches
2025-12-03 15:45:43 +00:00
Peter Steinberger
9f28bed851
fix: allow directive-only toggles inside group batches
2025-12-03 15:45:43 +00:00
Peter Steinberger
35459ee524
fix(web): capture mentions from media captions
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
99dc0af46f
auto-reply: single emoji per verbose tool line
2025-12-03 15:45:43 +00:00
Peter Steinberger
62f06b6518
auto-reply: emoji + result preview for verbose tool calls
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
4dcb5f276b
auto-reply: surface tool args from rpc start events
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
b83035d13c
fix(web): unwrap ephemeral/view-once and keep mentions
2025-12-03 13:15:46 +00:00
Peter Steinberger
922d15c6f3
test(web): ensure group messages carry sender + bypass allowFrom
2025-12-03 13:12:05 +00:00
Peter Steinberger
481c5ea192
fix(web): let group pings bypass allowFrom
2025-12-03 13:11:01 +00:00
Peter Steinberger
46f2e39142
fix(web): allow group replies past allowFrom
2025-12-03 13:08:54 +00:00
Peter Steinberger
fb7c21a0a0
logging: route console output into pino
2025-12-03 13:07:47 +00:00
Peter Steinberger
a53117273e
fix(web): detect self number mentions in group chats
2025-12-03 12:43:20 +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
631c7266de
Pi: stream tool results faster (0.5s, flush after 5)
2025-12-03 12:08:58 +00:00
Peter Steinberger
9a92a88c7b
Pi: stream assistant text during RPC runs
2025-12-03 11:50:49 +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
d428d7ce36
Tau RPC: wait for agent_end when tools run
2025-12-03 11:29:12 +00:00
Peter Steinberger
c761de9f0c
Web: simplify logout message
2025-12-03 11:04:12 +00:00
Peter Steinberger
906bcb929e
Chore: satisfy lint after tool-meta refactor
2025-12-03 10:42:10 +00:00
Peter Steinberger
2e9f600161
Refactor: extract tool meta formatter + debouncer
2025-12-03 10:30:01 +00:00
Peter Steinberger
2878bcdd6f
Verbose: shorten meta paths when aggregating
2025-12-03 10:26:41 +00:00
Peter Steinberger
3361beca63
Verbose: collapse tool meta paths by directory
2025-12-03 10:24:41 +00:00
Peter Steinberger
32679adcc8
Verbose: slow tool batch window to 1s
2025-12-03 10:13:02 +00:00
Peter Steinberger
f96fa5330e
Verbose: shorten home paths in tool meta
2025-12-03 10:12:27 +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
d839533d4e
Auto-reply: stream verbose tool results via tau rpc
2025-12-03 09:21:31 +00:00
Peter Steinberger
78646030f4
Auto-reply: show tool results before main reply in verbose mode
2025-12-03 09:14:10 +00:00
Peter Steinberger
4c6bef34cf
Chore: format + lint fixes
2025-12-03 09:09:34 +00:00
Peter Steinberger
ffd14dc6c6
Auto-reply: add verbose session hint
2025-12-03 09:07:17 +00:00
Peter Steinberger
e33c7a813d
Auto-reply: add /verbose directives and tool result replies
2025-12-03 09:04:37 +00:00
Peter Steinberger
ddf5cc12c2
Auto-reply: treat prefixed think directives as directive-only
2025-12-03 08:57:30 +00:00
Peter Steinberger
e5fff1d374
Auto-reply: ack think directives
2025-12-03 08:54:38 +00:00
Peter Steinberger
ff6d832151
Auto-reply: add thinking directives
2025-12-03 08:45:23 +00:00
Peter Steinberger
a0633e3ff1
Format: align thinking helpers
2025-12-03 01:02:10 +00:00
Peter Steinberger
ba744915eb
Heartbeat: guard optional heartbeatCommand
2025-12-03 00:45:27 +00:00
Peter Steinberger
11529882e7
Heartbeat: normalize reply arrays for twilio/web
2025-12-03 00:43:28 +00:00
Peter Steinberger
f1ee08659e
Heartbeat: normalize array replies
2025-12-03 00:40:19 +00:00
Peter Steinberger
61e76cb43b
Auto-reply: allow array payloads in signature
2025-12-03 00:35:57 +00:00
Peter Steinberger
849244d93e
CI: fix command-reply payload typing
2025-12-03 00:33:58 +00:00
Peter Steinberger
61723fa0d0
Auto-reply: format and lint fixes
2025-12-03 00:30:05 +00:00
Peter Steinberger
d25d12ca8a
Auto-reply: smarter chunking breaks
2025-12-03 00:25:01 +00:00
Peter Steinberger
80b2967ae8
web: handle multi-payload replies
2025-12-02 23:46:11 +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
32f1af6277
logging: emit agent/session meta at command start
2025-12-02 21:30:28 +00:00
Peter Steinberger
45d9bca433
revert: mark system prompt sent on first turn
2025-12-02 21:23:56 +00:00
Peter Steinberger
5d0e0c8e8f
ci: fix lint and tau rpc typing
2025-12-02 21:12:51 +00:00
Peter Steinberger
138279a7e1
fix(media): clean up files after response finishes
2025-12-02 21:10:18 +00:00
Peter Steinberger
5e5adbfc8f
test(media): add redirect coverage and update changelog
2025-12-02 21:09:26 +00:00
Peter Steinberger
86302247b6
chore: tidy claude prompt and drop npm lock
2025-12-02 21:07:37 +00:00
Joao Lisboa
7d919ac3bc
style: fix biome formatting
2025-12-02 21:07:13 +00:00
Joao Lisboa
26ae8c780e
style: fix biome lint errors
2025-12-02 21:07:13 +00:00
Joao Lisboa
562f8075d8
style: fix biome formatting
2025-12-02 21:07:13 +00:00
Joao Lisboa
57b48d9ad9
fix: send Claude identity prefix on first session message
...
The systemSent variable was being set to true before being passed to
runCommandReply, causing the identity prefix to never be injected.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:07:13 +00:00
Joao Lisboa
b2f3e69eae
fix: follow redirects when downloading Twilio media
...
node:https request() doesn't follow redirects by default, causing
Twilio media URLs (which 302 to CDN) to save placeholder/metadata
instead of actual images.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:07:13 +00:00
Joao Lisboa
24bc88b638
chore: user-agnostic Claude identity and tests
...
- Use ~/Clawd instead of hardcoded /Users/steipete/clawd
- Add MEDIA: syntax instructions to identity prefix
- Update tests to check for 'scratchpad' instead of specific path
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:07:13 +00:00
Joao Lisboa
d53d8da56f
fix: media serving and id consistency
...
- server.ts: Replace sendFile with manual readFile+send to fix
NotFoundError when serving media (sendFile failed even after stat)
- store.ts: Return id with file extension so it matches actual filename
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:07:13 +00:00
Joao Lisboa
fc2890748e
fix: use export type for type-only re-exports
...
Fixes build error with isolatedModules.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:06:27 +00:00
Peter Steinberger
2a2b662c3e
perf(pi): reuse tau rpc for command auto-replies
2025-12-02 20:09:51 +00:00
Peter Steinberger
dc226c4ee0
fix(media): block symlink traversal
2025-12-02 18:37:15 +00:00
Joao Lisboa
0ea182c0c1
Fix path traversal vulnerability in media server
...
The /media/:id endpoint was vulnerable to path traversal attacks.
Since this endpoint is exposed via Tailscale Funnel (unlike the
WhatsApp webhook which requires Twilio signature validation),
attackers could directly request paths like /media/%2e%2e%2fwarelay.json
to access sensitive files in ~/.warelay/ (e.g. warelay.json), or even
escape further to the user's home directory via multiple ../ sequences.
Fix: validate resolved paths stay within the media directory.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 19:33:21 +01: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
84d9501e85
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
d61e641496
Agents: add pluggable CLIs
...
Co-authored-by: RealSid08 <RealSid08@users.noreply.github.com>
2025-12-02 11:07:46 +00:00
Peter Steinberger
94a404d769
feat(web): batch inbound messages
2025-12-02 07:54:13 +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
7ea879ac46
Fix test corrupting production sessions.json
...
The test 'falls back to most recent session when no to is provided' was
using resolveStorePath() which returns the real ~/.warelay/sessions.json.
This overwrote production session data with test values, causing session
fragmentation issues.
Changed to use a temp directory like other tests.
2025-12-02 05:54: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
a7926fc49f
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
cfef4e82b1
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
fb2710e1cb
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
29df1639ed
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
a97dfc255d
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
8d02e34389
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
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
8315896d20
feat(heartbeat): allow manual message and dry-run for web/twilio
2025-11-28 08:14:07 +01:00
Peter Steinberger
258bb716c5
chore: release 1.2.1
2025-11-28 08:11:07 +01:00
Peter Steinberger
6b8240ab72
fix(media): sniff mime and keep extensions
2025-11-28 08:07:53 +01:00
Peter Steinberger
bb21763957
Docs: refresh 1.2.0 changelog; fix webhook host import
2025-11-27 18:46:46 +01:00