7.0 KiB
7.0 KiB
Changelog
[Unreleased] (will be 1.3.1)
Highlights
- Thinking directives & state:
/t|/think|/thinking <level>(aliases off|minimal|low|medium|high|max/highest). Inline applies to that message; directive-only message pins the level for the session;/think:offclears. Resolution: inline > session override >inbound.reply.thinkingDefault> off. Pi/Tau get--thinking <level>(except off); other agents append cue words (think→think hard→think harder→ultrathink). Heartbeat probe usesHEARTBEAT /think:high. - Verbose directives + session hints:
/v|/verbose on|full|offmirrors thinking: inline > session > config default. Directive-only replies with an acknowledgement; invalid levels return a hint. When enabled, tool results from JSON-emitting agents (Pi/Tau, etc.) are forwarded as metadata-only[🛠️ <tool-name> <arg>]messages (now streamed as they happen), and new sessions surface a🧭 New session: <id>hint. - Verbose tool coalescing: successive tool results of the same tool within ~1s are batched into one
[🛠️ tool] arg1, arg2message to reduce WhatsApp noise. - Directive confirmations: Directive-only messages now reply with an acknowledgement (
Thinking level set to high./Thinking disabled.) and reject unknown levels with a helpful hint (state is unchanged). - Pi/Tau stability: RPC replies buffered until the assistant turn finishes; parsers return consistent
texts[]; web auto-replies keep a warm Tau RPC process to avoid cold starts. - Claude prompt flow: One-time
sessionIntrowith per-message/think:highbodyPrefix; system prompt always sent on first turn even withsendSystemOnce. - Heartbeat UX: Backpressure skips reply heartbeats while other commands run; skips don’t refresh session
updatedAt; web/Twilio heartbeats normalize array payloads and optionalheartbeatCommand. - Control via WhatsApp: Send
/restartto restart the warelay launchd service (com.steipete.warelay) from your allowed numbers. - Tau completion signal: RPC now resolves on Tau’s
agent_end(or process exit) so late assistant messages aren’t truncated; 5-minute hard cap only as a failsafe.
Reliability & UX
- Outbound chunking prefers newlines/word boundaries and enforces caps (1600 WhatsApp/Twilio, 4000 web).
- Web auto-replies fall back to caption-only if media send fails; hosted media MIME-sniffed and cleaned up immediately.
- IPC relay send shows typing indicator; batched inbound messages keep timestamps; watchdog restarts WhatsApp after long inactivity.
- Early
allowFromfiltering prevents decryption errors; same-phone mode supported with echo suppression.
Security / Hardening
- IPC socket hardened (0700 dir / 0600 socket, no symlinks/foreign owners);
warelay logoutalso prunes session store. - Media server blocks symlinks and enforces path containment; logging rotates daily and prunes >24h.
Bug Fixes
- MIME sniffing and redirect handling for downloads/hosted media.
- Response prefix applied to heartbeat alerts; heartbeat array payloads handled for both providers.
- Tau RPC typing exposes
signal/killed; NDJSON parsers normalized across agents. - Tau (pi) session resumes now append
--continue, so existing history/think level are reloaded instead of starting empty.
Testing
- Fixtures isolate session stores; added coverage for thinking directives, stateful levels, heartbeat backpressure, and agent parsing.
1.3.0 — 2025-12-02
Highlights
- Pluggable agents (Claude, Pi, Codex, Opencode):
inbound.reply.agentselects CLI/parser; per-agent argv builders and NDJSON parsers enable swapping without template changes. - Safety stop words:
stop|esc|abort|wait|exitimmediately reply “Agent was aborted.” and mark the session so the next prompt is prefixed with an abort reminder. - Agent session reliability: Only Claude returns a stable
session_id; others may reset between runs.
Bug Fixes
- Empty
resultfields no longer leak raw JSON to users. - Heartbeat alerts now honor
responsePrefix. - Command failures return user-friendly messages.
- Test session isolation to avoid touching real
sessions.json. - IPC reuse for
warelay send/heartbeatprevents Signal/WhatsApp session corruption. - Web send respects media kind (image/audio/video/document) with correct limits.
Changes
- IPC relay socket at
~/.warelay/relay.sockwith automatic CLI fallback. - Batched inbound messages with timestamps; typing indicator after IPC sends.
- Watchdog restarts WhatsApp after long inactivity; heartbeat logging includes minutes since last message.
- Early
allowFromfiltering before decryption. - Same-phone mode with echo detection and optional
inbound.samePhoneMarker.
1.2.2 — 2025-11-28
Changes
- Manual heartbeat sends:
warelay heartbeat --message/--body --provider web|twilio;--dry-runpreviews payloads.
1.2.1 — 2025-11-28
Changes
- Media MIME-first handling; hosted media extensions derived from detected MIME with tests.
Planned / in progress (from prior notes)
- Heartbeat targeting quality: clearer recipient resolution and verbose logs.
- Heartbeat delivery preview (Claude path) dry-run.
- Simulated inbound hook for local testing.
1.2.0 — 2025-11-27
Changes
- Heartbeat interval default 10m for command mode; prompt
HEARTBEAT /think:high; skips don’t refresh session; sessionheartbeatIdleMinutessupport. - Heartbeat tooling:
--session-id,--heartbeat-now, relay helpersrelay:heartbeatandrelay:heartbeat:tmux. - Prompt structure:
sessionIntroplus per-message/think:high; session idle up to 7 days. - Thinking directives:
/think:<level>; Pi uses--thinking; others append cue;/think:offno-op. - Robustness: Baileys/WebSocket guards; global unhandled error handlers; WhatsApp LID mapping; Twilio media hosting via shared host module.
- Docs: README Clawd setup;
docs/claude-config.mdfor live config.
1.1.0 — 2025-11-26
Changes
- Web auto-replies resize/recompress media and honor
inbound.reply.mediaMaxMb. - Detect media kind, enforce provider caps (images ≤6MB, audio/video ≤16MB, docs ≤100MB).
session.sendSystemOnceand optionalsessionIntro.- Typing indicator refresh during commands; configurable via
inbound.reply.typingIntervalSeconds. - Optional audio transcription via external CLI.
- Command replies return structured payload/meta; respect
mediaMaxMb; log Claude metadata; includecwdin timeout messages. - Web provider refactor; logout command; web-only relay start helper.
- Structured reconnect/heartbeat logging; bounded backoff with CLI/config knobs; troubleshooting guide.
- Relay help prints effective heartbeat/backoff when in web mode.
1.0.4 — 2025-11-25
Changes
- Timeout fallbacks send partial stdout (≤800 chars) to the user instead of silence; tests added.
- Web relay auto-reconnects after Baileys/WebSocket drops; close propagation tests.
0.1.3 — 2025-11-25
Changes
- Auto-replies send a WhatsApp fallback message on command/Claude timeout with truncated stdout.
- Added tests for timeout fallback and partial-output truncation.