11 KiB
11 KiB
Changelog
1.5.0 — 2025-12-05
Breaking
- Dropped all non-Pi agents (Claude, Codex, Gemini, Opencode);
inbound.reply.agent.kindnow only accepts"pi"and related CLI helpers have been removed. - Removed Twilio support and all related commands/options (webhook/up/provider flags/wait-poll); CLAWDIS is Baileys Web-only.
Changes
- Default agent handling now favors Pi RPC while falling back to the plain command runner for non-Pi invocations, keeping heartbeat/session plumbing intact.
- Documentation updated to reflect Pi-only support and to mark legacy Claude paths as historical.
- Status command reports web session health + session recipients; config paths are locked to
~/.clawdiswith session metadata stored under~/.clawdis/sessions/. - Simplified send/agent/relay/heartbeat to web-only delivery; removed Twilio mocks/tests and dead code.
- Tau RPC timeout is now inactivity-based (5m without events) and error messages show seconds only.
- Pi/Tau sessions now write to
~/.clawdis/sessions/by default (legacy~/.tau/agent/sessions/clawdisfiles are copied over when present). - Directive triggers (
/think,/verbose,/stopet al.) now reply immediately using normalized bodies (timestamps/group prefixes stripped) without waiting for the agent. - Directive/system acks carry a
⚙️prefix and verbose parsing rejects typoed/ver*strings so unrelated text doesn’t flip verbosity. - Batched history blocks no longer trip directive parsing;
/thinkin prior messages won't emit stray acknowledgements. - RPC fallbacks no longer echo the user's prompt (e.g., pasting a link) when the agent returns no assistant text.
- Heartbeat prompts with
/thinkno longer send directive acks; heartbeat replies stay silent on settings. clawdis sessionsnow renders a colored table (a la oracle) with context usage shown in k tokens and percent of the context window.
1.4.1 — 2025-12-04
Changes
- Added
warelay agentCLI command to talk directly to the configured agent using existing session handling (no WhatsApp send), with JSON output and delivery option. /newreset trigger now works even when inbound messages have timestamp prefixes (e.g.,[Dec 4 17:35]).- WhatsApp mention parsing accepts nullable arrays and flattens safely to avoid missed mentions.
1.4.0 — 2025-12-03
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. - Group chats (web provider): Warelay now fully supports WhatsApp groups: mention-gated triggers (including image-only @ mentions), recent group history injection, per-group sessions, sender attribution, and a first-turn primer with group subject/member roster; heartbeats are skipped for groups.
- Group session primer: The first turn of a group session now tells the agent it is in a WhatsApp group and lists known members/subject so it can address the right speaker.
- Media failures are surfaced: When a web auto-reply media fetch/send fails (e.g., HTTP 404), we now append a warning to the fallback text so you know the attachment was skipped.
- 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 heartbeats normalize array payloads and optionalheartbeatCommand. - Control via WhatsApp: Send
/restartto restart the launchd service (com.steipete.clawdis; legacycom.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 (~4000 chars for web/WhatsApp).
- 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. - All console output is now mirrored into pino logs (still printed to stdout/stderr), so verbose runs keep full traces.
--verbosenow forces log leveltrace(wasdebug) to capture every event.- Verbose tool messages now include emoji + args + a short result preview for bash/read/edit/write/attach (derived from RPC tool start/end events).
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
- Web group chats now bypass the second
allowFromcheck (we still enforce it on the group participant at inbox ingest), so mentioned group messages reply even when the group JID isn’t in your allowlist. logVerbosealso writes to the configured Pino logger at debug level (without breaking stdout).- Group auto-replies now append the triggering sender (
[from: Name (+E164)]) to the batch body so agents can address the right person in group chats. - Media-only pings now pick up mentions inside captions (image/video/etc.), so @-mentions on media-only messages trigger replies.
- 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(web provider only);--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; hosted media MIME-sniffing and cleanup.
- 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.