Peter Steinberger
bd41cf377a
feat(webchat): auto-start at root
2025-12-09 21:07:53 +00:00
Peter Steinberger
a8baf0ef45
chore(gateway): color ws direction logs
2025-12-09 20:37:01 +00:00
Peter Steinberger
5a8d18edf3
web: reuse active listener for sends
2025-12-09 20:37:01 +00:00
Peter Steinberger
e84ed61339
cli: gateway subcommands, drop ipc probes
2025-12-09 20:27:35 +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
0de944be28
telegram: show name and id in envelope
2025-12-09 19:56:18 +00:00
Peter Steinberger
5df438fd2a
fix: enforce gateway single instance
2025-12-09 19:40:01 +00:00
Peter Steinberger
c683ae69af
gateway: log provider errors verbosely
2025-12-09 19:10:10 +00:00
Peter Steinberger
ab9b12e883
gateway: enforce hello order and modern json
2025-12-09 19:09:06 +00:00
Peter Steinberger
ffc930b871
surface: envelope inbound messages for agent
2025-12-09 18:43:21 +00:00
Peter Steinberger
2adb14c320
fix: improve app restart and gateway logs
2025-12-09 18:37:04 +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
1f19ca1665
chore: drop runner shim and add committer helper
2025-12-09 17:24:25 +00:00
Peter Steinberger
d04f7fc6e9
msg: retry web/telegram sends and add regression tests
2025-12-09 17:23:04 +00:00
Peter Steinberger
8d888b426f
chore: format swift/ts and fix gateway lint
2025-12-09 17:11:25 +00:00
Peter Steinberger
b6bd39660f
IPC: rename relay socket to gateway.sock
2025-12-09 17:04:58 +00:00
Peter Steinberger
60a68aa136
Gateway: start providers and route sends to their surface
2025-12-09 16:38:43 +00:00
Peter Steinberger
464e4c1938
Gateway: honor verbose for Baileys and show log path
2025-12-09 16:33:04 +00:00
Peter Steinberger
796f630a7c
Status: color provider lines
2025-12-09 16:31:38 +00:00
Peter Steinberger
dc8f9e043d
Tests: cover gateway --force helpers
2025-12-09 16:31:28 +00:00
Peter Steinberger
6afcf43ff2
CLI: add gateway --force option
2025-12-09 16:28:26 +00:00
Peter Steinberger
e0ea7be499
Docs: rename relay command to gateway
2025-12-09 17:24:57 +01:00
Peter Steinberger
4bf968a45a
CLI: add gateway verbose flag
2025-12-09 17:17:58 +01:00
Peter Steinberger
e40f9c9730
Mac: launch gateway and add relay installer
2025-12-09 16:15:53 +00:00
Peter Steinberger
96be7c8990
tests: cover agent sequencing, tick watchdog, presence fingerprint
2025-12-09 17:05:47 +01:00
Peter Steinberger
72eb240c3b
gateway: harden ws protocol and liveness
2025-12-09 17:02:58 +01:00
Peter Steinberger
cf5769753a
Protocol: lint fixes for client/program
2025-12-09 15:18:34 +01:00
Peter Steinberger
d1217e84c7
CLI: remove relay/heartbeat legacy commands
2025-12-09 15:06:44 +01:00
Peter Steinberger
172ce6c79f
Gateway: discriminated protocol schema + CLI updates
2025-12-09 15:01:13 +01:00
Peter Steinberger
2746efeb25
WebChat: loopback snapshot hydration
2025-12-09 14:41:55 +01:00
Peter Steinberger
b2e7fb01a9
Gateway: finalize WS control plane
2025-12-09 14:41:41 +01:00
Peter Steinberger
fc1d58b631
WebChat: fix packaged root resolution
2025-12-09 04:36:15 +00:00
Peter Steinberger
d66a05dc41
RPC: route logs to stderr to keep stdout JSON clean
2025-12-09 04:30:22 +00:00
Peter Steinberger
998a5b080d
Update auto-reply and voice wake runtime
2025-12-09 04:15:01 +00:00
Peter Steinberger
39a0f54b0d
Runtime: drop bun support
2025-12-09 04:13:56 +00:00
Peter Steinberger
f0860ec145
chore(instances): harden presence refresh and fix lint
2025-12-09 04:51:54 +01:00
Peter Steinberger
cfd2c41c21
fix(rpc): keep stdout json-only
2025-12-09 04:34:11 +01:00
Peter Steinberger
6b8011228e
fix(presence): always seed self entry and log counts
2025-12-09 03:21:59 +00:00
Peter Steinberger
2cd27d0d4a
Relay: enforce single instance lock
2025-12-09 03:17:23 +00:00
Peter Steinberger
2177df51a8
feat(status): enrich session details
2025-12-09 03:00:10 +00:00
Peter Steinberger
38c4f4f76c
feat(instances): beacon on connect and relay self-entry
2025-12-09 03:57:08 +01:00
Peter Steinberger
8d8584849c
RPC: fix presence imports
2025-12-09 02:39:41 +00:00
Peter Steinberger
59a2cbefcb
RPC: extract stdio loop and tests
2025-12-09 02:37:04 +00:00
Peter Steinberger
c568284f1b
Build: fix RPC sendable params and CLI imports
2025-12-09 03:33:16 +01:00
Peter Steinberger
04f595cd97
Control: route health/heartbeat over RPC stdio
2025-12-09 02:26:08 +00:00
Peter Steinberger
99a3102134
Docs: voice overlay plan and fix web mocks
2025-12-09 03:25:55 +01:00
Peter Steinberger
e15475449c
fix merge; add control logging
2025-12-09 01:46:09 +00:00
Peter Steinberger
1969e78d54
feat: surface system presence for the agent
2025-12-09 02:25:37 +01: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
e44ed2681f
refactor: type tau rpc stream events
2025-12-09 01:41:05 +01:00
Peter Steinberger
27a545f79d
chore: harden rpc assistant streaming types
2025-12-09 01:41:05 +01:00
Peter Steinberger
73cc34467a
control: log incoming health requests
2025-12-09 00:38:42 +00:00
Peter Steinberger
ec1ff52dfb
control: reconnect on EOF and relax rpc text parse
2025-12-09 00:29:31 +00:00
Peter Steinberger
2761c40781
test: ensure tool events emit without verbose
2025-12-09 01:24:16 +01:00
Peter Steinberger
e981d90209
fix: always emit tool events
2025-12-09 01:22:50 +01:00
Peter Steinberger
f965e1c3ff
chore: single-source working state from agent events
2025-12-09 01:17:01 +01:00
Peter Steinberger
cf36f5a23b
chore: guard host runtime and simplify packaging
2025-12-09 00:59:56 +01:00
Peter Steinberger
34d2527606
chore: tidy agent event streaming types
2025-12-09 00:59:56 +01:00
Peter Steinberger
36c91c3984
relay: don't crash when webchat port is busy
2025-12-08 23:49:57 +00:00
Peter Steinberger
b7b1714f32
feat: forward tool/assistant events to agent bus
2025-12-09 00:44:30 +01:00
Peter Steinberger
371a30f08b
feat: stream tool/job events over control channel
2025-12-09 00:31:39 +01:00
Peter Steinberger
40dd23337c
feat: broadcast agent events over control channel
2025-12-09 00:28:03 +01:00
Peter Steinberger
594e837440
feat: emit job-state events from rpc
2025-12-09 00:18:14 +01:00
Peter Steinberger
05bd452f76
control: drop runtime export of type-only HeartbeatEventPayload
2025-12-08 23:15:33 +01:00
Peter Steinberger
e38bdd0d2d
control: seed events, add tests, update remote doc
2025-12-08 22:03:46 +01:00
Peter Steinberger
22996854f7
relay: add control channel and heartbeat stream
2025-12-08 21:50:24 +01:00
Peter Steinberger
ded106b9e3
ux: keep window in edit, add escape to cancel; fix lint drift
2025-12-08 20:22:56 +01:00
Peter Steinberger
ab448988ff
RPC: stream heartbeat events to menu
2025-12-08 20:18:54 +01:00
Peter Steinberger
db3b3ed9eb
fix: polish voice overlay and webchat lint
2025-12-08 17:32:34 +01:00
Peter Steinberger
a34ab1d36e
Webchat: clean server build and add ws types
2025-12-08 16:21:56 +00:00
Peter Steinberger
7144a0fb9b
Webchat: push updates over WebSocket
2025-12-08 16:19:33 +00:00
Peter Steinberger
636f2d659f
chore: tighten webchat types and formatting
2025-12-08 17:14:43 +01:00
Peter Steinberger
1ac6ab4428
Agent: add thinkingOnce flag
2025-12-08 16:12:24 +00:00
Peter Steinberger
dc3c82ad40
Webchat: sync thinking level with session
2025-12-08 16:10:14 +00:00
Peter Steinberger
c3f955d3f1
chore: fix lint warnings and formatting
2025-12-08 17:05:27 +01:00
Peter Steinberger
de70d82cea
fix(mac): surface health errors instead of pending
2025-12-08 16:50:20 +01:00
Peter Steinberger
90a0bb5acb
feat(cli): unify relay providers and heartbeat flag
2025-12-08 16:34:06 +01:00
Peter Steinberger
0e4379f075
Webchat: cap/ persist attachments and strip data URLs
2025-12-08 14:59:26 +00:00
Peter Steinberger
fedb15d5d0
Webchat: inline attachments to agent RPC and fix status compile
2025-12-08 14:46:33 +00:00
Peter Steinberger
ccc6bf05e8
status: read token usage from pi session logs
2025-12-08 14:46:15 +00:00
Peter Steinberger
52453eaeff
Webchat: run agent in-process for RPC
2025-12-08 14:14:00 +00:00
Peter Steinberger
ff3337feed
Webchat: resolve static root in packaged app
2025-12-08 14:07:20 +00:00
Peter Steinberger
17a6d716ad
Webchat: auto-start server and simplify config
2025-12-08 13:12:34 +00:00
Peter Steinberger
92457f7fab
Remote web chat tunnel and onboarding polish
2025-12-08 12:50:37 +01:00
Peter Steinberger
17fa2f4053
refactor(cli): drop tmux helpers and update help copy
2025-12-08 12:43:13 +01:00
Peter Steinberger
dc22661744
webchat: move serving to relay loopback and tunnel from mac app
2025-12-08 11:54:30 +01:00
Peter Steinberger
22ed7ea3f2
build: silence grammy type errors for mac packaging
2025-12-08 11:04:17 +01:00
Peter Steinberger
f65702a8a8
chore(ci): fix lint and swiftformat failures
2025-12-08 01:48:53 +01:00
Peter Steinberger
1595fb8739
docs: move grammY research note to docs/grammy.md
2025-12-07 22:53:58 +01:00
Peter Steinberger
5f5846a08b
Telegram: enable grammY throttler and webhook tests
2025-12-07 22:52:57 +01:00
Peter Steinberger
4d3d9cca2a
Add Bun bundle docs and Telegram grammY support
2025-12-07 22:47:05 +01:00
Peter Steinberger
d73d571f19
Launch agent: disable autostart without killing running app
2025-12-07 19:01:14 +01:00
Peter Steinberger
d463c82c95
build: add local node bin to restart script PATH
2025-12-07 19:01:14 +01:00
Peter Steinberger
7efa152418
VoiceWake: document escape path and reset stale forward command
2025-12-07 18:23:34 +01:00
Peter Steinberger
e2c6546b61
auto-reply: enrich chat status
2025-12-07 16:53:33 +00:00
Peter Steinberger
b30db08110
feat: add heartbeat toggle with live RPC control
2025-12-07 15:32:48 +01:00
Peter Steinberger
2dbef6105d
agent: allow deliver when json output
2025-12-07 15:16:55 +01:00
Peter Steinberger
67fa82cf14
agent: deliver via rpc and voice forward
2025-12-07 06:05:00 +01:00
Peter Steinberger
67c67dd86d
Docs: swap to obviously fake phone numbers
2025-12-07 04:42:58 +00:00
Peter Steinberger
1190b9c278
Health: strengthen probe tests
2025-12-07 04:39:24 +00:00
Peter Steinberger
cb5c932447
Health: CLI probe and mac UI surfacing
2025-12-07 04:38:20 +00:00
Peter Steinberger
2714ed503b
CLI: add health probe command
2025-12-07 04:33:22 +00:00
Peter Steinberger
0a9b98ed67
feat(cli): add stdin/stdout rpc loop for agent sends
2025-12-07 05:10:58 +01:00
Peter Steinberger
31f788eb5e
CLI: allow --provider flag for login/logout (default whatsapp)
2025-12-07 03:41:27 +00:00
Peter Steinberger
6c3d3b98b8
chore: purge warelay references
2025-12-07 03:36:57 +00:00
Peter Steinberger
1a10569f6d
Logging: use /tmp/clawdis for default pino logs
2025-12-07 03:32:37 +00:00
Peter Steinberger
4b6325908b
feat: unify main session and icon cues
2025-12-06 23:16:23 +01:00
Peter Steinberger
fbf5333b39
chore: run formatters and lint
2025-12-06 04:03:48 +01:00
Peter Steinberger
e863fd78d6
CLI: compact sessions table output
2025-12-06 00:49:21 +00:00
Peter Steinberger
ddfb76e9e0
fix: bundle pi dependency and directive handling
2025-12-06 00:49:46 +01:00
Peter Steinberger
28e0dbc02f
fix: harden directive handling
2025-12-05 23:43:30 +00:00
Peter Steinberger
3c64a57c84
revert prompt-too-long fallback and keep inline directives
2025-12-05 23:18:03 +00:00
Peter Steinberger
36b0796976
fix: handle prompt-too-long by resetting session and continuing inline directives
2025-12-05 23:01:37 +00:00
Peter Steinberger
3241d81ce5
fix: allow inline directives to continue and add mixed-message test
2025-12-05 22:57:52 +00:00
Peter Steinberger
d7a188fb34
fix: broaden prompt-echo guard and add heartbeat directive test
2025-12-05 22:56:07 +00:00
Peter Steinberger
5b217b2042
fix: suppress heartbeat directive acks and add coverage
2025-12-05 22:54:17 +00:00
Peter Steinberger
4cb2a92037
fix: avoid echoing prompts when rpc returns empty
2025-12-05 22:52:21 +00:00
Peter Steinberger
24d90c17c2
fix: ignore directives inside history blocks
2025-12-05 22:49:41 +00:00
Peter Steinberger
c95c6d72e9
test: cover directive parsing and abort/restart prefixes
2025-12-05 22:29:49 +00:00
Peter Steinberger
99b174f495
fix: avoid directive hits inside URLs and add tests
2025-12-05 22:28:36 +00:00
Peter Steinberger
690113dd73
Add bundled pi default and session token reporting
2025-12-05 23:18:43 +01:00
Peter Steinberger
fe87160b19
chore: add system marker to directives and abort
2025-12-05 21:37:11 +00:00
Peter Steinberger
dc02bcee74
fix: normalize directive triggers and short-circuit
2025-12-05 21:29:41 +00:00
Peter Steinberger
e7a9313135
chore: remove twilio and expand pi cli detection
2025-12-05 21:13:23 +00: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
0da3f84a2e
fix: ignore rpc toolcall deltas to avoid duplicate replies
2025-12-05 19:16:03 +00:00
Peter Steinberger
7c7314f673
chore: drop twilio and go web-only
2025-12-05 19:03:59 +00:00
Peter Steinberger
869cc3d497
Route pi agent prompts via RPC stdin
2025-12-05 18:34:05 +00:00
Peter Steinberger
f315bf074b
fix: harden pi rpc prompt handling
2025-12-05 18:24:45 +00:00
Peter Steinberger
fcf0c28132
chore: make pi-only rpc with fixed sessions
2025-12-05 17:50:02 +00:00
Peter Steinberger
b3e50cbb33
Switch to clawdis RPC mode and complete rebrand
2025-12-05 17:22:53 +00:00
Peter Steinberger
20cb709ae3
chore: organize imports after rebrand
2025-12-04 18:02:51 +00:00
Peter Steinberger
916a41ed60
branding: default to clawdis paths and launchd label
2025-12-04 18:01:30 +00:00
Peter Steinberger
04ce98148d
web: fix mentioned JID extraction typing
2025-12-04 17:54:51 +00:00
Peter Steinberger
34eb75f634
auto-reply: honor /new after timestamp prefixes
2025-12-04 17:54:20 +00:00
Peter Steinberger
05b76281f7
CLI: add agent command for direct agent runs
2025-12-04 17:54:20 +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
Eng. Juan Combetto
518af0ef24
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
a155ec0599
auto-reply: handle group think/verbose directives
2025-12-04 02:29:32 +00:00
Peter Steinberger
7bc56d7cfe
test: cover verbose directive in group batches
2025-12-03 15:45:43 +00:00
Peter Steinberger
088bdb3313
fix: allow directive-only toggles inside group batches
2025-12-03 15:45:43 +00:00
Peter Steinberger
07f323222b
fix(web): capture mentions from media captions
2025-12-03 15:45:43 +00:00
Peter Steinberger
a321bf1a90
fix(web): surface media fetch failures
2025-12-03 15:45:43 +00:00
Peter Steinberger
e878780808
auto-reply: single emoji per verbose tool line
2025-12-03 15:45:43 +00:00
Peter Steinberger
cb5f1fa99d
auto-reply: emoji + result preview for verbose tool calls
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
3a8d6b80e0
auto-reply: surface tool args from rpc start events
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
f68714ec8e
fix(web): unwrap ephemeral/view-once and keep mentions
2025-12-03 13:15:46 +00:00
Peter Steinberger
7be9352a3a
test(web): ensure group messages carry sender + bypass allowFrom
2025-12-03 13:12:05 +00:00
Peter Steinberger
3a782b6ace
fix(web): let group pings bypass allowFrom
2025-12-03 13:11:01 +00:00
Peter Steinberger
8204351d67
fix(web): allow group replies past allowFrom
2025-12-03 13:08:54 +00:00
Peter Steinberger
4c3635a7c0
logging: route console output into pino
2025-12-03 13:07:47 +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
0824873ffb
Add /restart WhatsApp command to restart warelay
2025-12-03 12:14:32 +00:00
Peter Steinberger
8f99b13305
Pi: stream tool results faster (0.5s, flush after 5)
2025-12-03 12:08:58 +00:00
Peter Steinberger
9253702966
Pi: stream assistant text during RPC runs
2025-12-03 11:50:49 +00:00
Peter Steinberger
3958450223
Tau RPC: resolve on agent_end or exit
2025-12-03 11:34:00 +00:00
Peter Steinberger
cc596ef011
Pi: resume Tau sessions with --continue
2025-12-03 11:33:51 +00:00
Peter Steinberger
8220b11770
Tau RPC: wait for agent_end when tools run
2025-12-03 11:29:12 +00:00
Peter Steinberger
62c54cd47c
Web: simplify logout message
2025-12-03 11:04:12 +00:00
Peter Steinberger
e34d0d69aa
Chore: satisfy lint after tool-meta refactor
2025-12-03 10:42:10 +00:00
Peter Steinberger
597e7e6f13
Refactor: extract tool meta formatter + debouncer
2025-12-03 10:30:01 +00:00
Peter Steinberger
b460fd61bd
Verbose: shorten meta paths when aggregating
2025-12-03 10:26:41 +00:00
Peter Steinberger
c9b5df8184
Verbose: collapse tool meta paths by directory
2025-12-03 10:24:41 +00:00
Peter Steinberger
b6b5144ddf
Verbose: slow tool batch window to 1s
2025-12-03 10:13:02 +00:00
Peter Steinberger
deac5ff585
Verbose: shorten home paths in tool meta
2025-12-03 10:12:27 +00:00
Peter Steinberger
38a03ff2c8
Verbose: batch rapid tool results
2025-12-03 10:11:41 +00:00
Peter Steinberger
527bed2b53
Verbose: include tool arg metadata in prefixes
2025-12-03 09:57:41 +00:00
Peter Steinberger
318166f8b0
Verbose: send tool result metadata only
2025-12-03 09:40:05 +00:00
Peter Steinberger
394c751d7d
Tau RPC: resolve on agent_end
2025-12-03 09:39:26 +00:00
Peter Steinberger
c3792db0e5
Auto-reply: stream verbose tool results via tau rpc
2025-12-03 09:21:31 +00:00
Peter Steinberger
16e42e6d6d
Auto-reply: show tool results before main reply in verbose mode
2025-12-03 09:14:10 +00:00
Peter Steinberger
53c1674382
Chore: format + lint fixes
2025-12-03 09:09:34 +00:00
Peter Steinberger
ae0d35c727
Auto-reply: add verbose session hint
2025-12-03 09:07:17 +00:00
Peter Steinberger
086dd284d6
Auto-reply: add /verbose directives and tool result replies
2025-12-03 09:04:37 +00:00
Peter Steinberger
8ba35a2dc3
Auto-reply: treat prefixed think directives as directive-only
2025-12-03 08:57:30 +00:00
Peter Steinberger
48dfb1c8ca
Auto-reply: ack think directives
2025-12-03 08:54:38 +00:00
Peter Steinberger
58520859e5
Auto-reply: add thinking directives
2025-12-03 08:45:23 +00:00
Peter Steinberger
c4b0155cc2
Format: align thinking helpers
2025-12-03 01:02:10 +00:00
Peter Steinberger
38b18202fc
Heartbeat: guard optional heartbeatCommand
2025-12-03 00:45:27 +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
a7fdc7b992
Auto-reply: allow array payloads in signature
2025-12-03 00:35:57 +00:00
Peter Steinberger
f519e22e6d
CI: fix command-reply payload typing
2025-12-03 00:33:58 +00:00
Peter Steinberger
ecac4dd72a
Auto-reply: format and lint fixes
2025-12-03 00:30:05 +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
cfaec9d608
auto-reply: support multi-text RPC outputs
2025-12-02 23:03:55 +00:00
Peter Steinberger
0f6157a49d
logging: emit agent/session meta at command start
2025-12-02 21:30:28 +00:00
Peter Steinberger
1df6373cb1
revert: mark system prompt sent on first turn
2025-12-02 21:23:56 +00:00
Peter Steinberger
96722bba08
ci: fix lint and tau rpc typing
2025-12-02 21:12:51 +00:00
Peter Steinberger
4e20a20927
fix(media): clean up files after response finishes
2025-12-02 21:10:18 +00:00
Peter Steinberger
a0d1004909
test(media): add redirect coverage and update changelog
2025-12-02 21:09:26 +00:00
Peter Steinberger
2018c90ae2
chore: tidy claude prompt and drop npm lock
2025-12-02 21:07:37 +00:00
Joao Lisboa
793360c5bb
style: fix biome formatting
2025-12-02 21:07:13 +00:00
Joao Lisboa
d8b1a38350
style: fix biome lint errors
2025-12-02 21:07:13 +00:00
Joao Lisboa
499a3e3227
style: fix biome formatting
2025-12-02 21:07:13 +00:00
Joao Lisboa
73a9fdca2a
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
06dd9b8ed8
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
a86cb932cf
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
2fae0a9f47
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
2ec9192010
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
b172b538fc
perf(pi): reuse tau rpc for command auto-replies
2025-12-02 20:09:51 +00:00
Peter Steinberger
2cf134668c
fix(media): block symlink traversal
2025-12-02 18:37:15 +00:00
Joao Lisboa
b94b220156
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
26921cbe68
chore(logs): rotate daily and prune after 24h
2025-12-02 17:11:43 +00:00
Peter Steinberger
8844674825
chore(security): purge session store on logout
2025-12-02 16:33:44 +00:00
Peter Steinberger
c9fbe2cb92
chore(security): harden ipc socket
2025-12-02 16:09:40 +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
d107b79c63
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
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
21ba0fb8a4
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
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
Peter Steinberger
c11abc1134
chore: release 1.2.1
2025-11-28 08:11:07 +01:00
Peter Steinberger
7d6a4f5204
fix(media): sniff mime and keep extensions
2025-11-28 08:07:53 +01:00
Peter Steinberger
0cc732dce3
Docs: refresh 1.2.0 changelog; fix webhook host import
2025-11-27 18:46:46 +01:00
Peter Steinberger
9b3c4db10d
Heartbeat defaults and ws guard; format
2025-11-27 18:37:30 +01:00
Peter Steinberger
85f53a4174
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
d4580d1a31
Fix CI: type gaps and hasMedia check
2025-11-27 18:14:20 +01:00
Peter Steinberger
93a103dde5
Tests: cover identity prefix gating
2025-11-27 04:40:03 +01:00
Peter Steinberger
9e6ad97cfb
Claude prompt: only prepend on first turn
2025-11-27 03:53:13 +01:00
Peter Steinberger
8d995a8529
Heartbeat: add ultrathink marker
2025-11-27 03:15:51 +01:00
Peter Steinberger
f869cd4b79
Heartbeat: shorten prompt to token
2025-11-27 02:48:23 +01:00
Peter Steinberger
26b087c1b4
Heartbeat: honor session override
2025-11-26 18:32:25 +01:00
Peter Steinberger
63bf4683c5
Heartbeat: allow session-id override (with test)
2025-11-26 18:28:02 +01:00
Peter Steinberger
73456a68d7
Fix heartbeat CLI import for recipients resolution
2025-11-26 18:22:28 +01:00
Peter Steinberger
8f6e43fd66
Changelog: bump to 1.2.0 unreleased
2025-11-26 18:18:13 +01:00
Peter Steinberger
ebce6ef263
Docs: show --all heartbeat example
2025-11-26 18:17:30 +01:00
Peter Steinberger
c20a266a11
Heartbeat: harden targeting and support lid mapping
2025-11-26 18:15:57 +01:00
Marcus Neves
b825f141f3
fix: add @lid format support and allowFrom wildcard handling
...
- Add support for WhatsApp Linked ID (@lid) format in jidToE164()
- Use existing lid-mapping-*_reverse.json files for LID resolution
- Fix allowFrom wildcard '*' to actually allow all senders
- Maintain backward compatibility with @s.whatsapp.net format
Fixes issues where:
- Messages from newer WhatsApp versions are silently dropped
- allowFrom: ['*'] configuration doesn't work as documented
2025-11-26 18:03:12 +01:00