diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff3858b1..074741b66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 2.0.0-beta3 — Unreleased (2025-12-26) +## 2.0.0-beta3 — 2025-12-27 ### Highlights - First-class Clawdis tools (browser, canvas, nodes, cron) replace the old `clawdis-*` skills; tool schemas are now injected directly into the agent runtime. diff --git a/appcast.xml b/appcast.xml index fc946440a..7365a6392 100644 --- a/appcast.xml +++ b/appcast.xml @@ -1,32 +1,132 @@ - - - - Clawdis Updates - https://raw.githubusercontent.com/steipete/clawdis/main/appcast.xml - Signed update feed for the Clawdis macOS companion app. - - Clawdis 2.0.0-beta2 - https://github.com/steipete/clawdis/releases/tag/v2.0.0-beta2 - Sun, 21 Dec 2025 02:25:39 +0000 - - - - Clawdis 2.0.0-beta1 - https://github.com/steipete/clawdis/releases/tag/v2.0.0-beta1 - Fri, 19 Dec 2025 17:19:50 +0000 - - - - + + + + Clawdis + + 2.0.0-beta3 + Sat, 27 Dec 2025 19:02:02 +0100 + https://raw.githubusercontent.com/steipete/clawdis/main/appcast.xml + 2.0.0-beta3 + 2.0.0-beta3 + 15.0 + Clawdis 2.0.0-beta3 +

Highlights

+
    +
  • First-class Clawdis tools (browser, canvas, nodes, cron) replace the old clawdis-* skills; tool schemas are now injected directly into the agent runtime.
  • +
  • Per-session model selection + custom model providers: models.providers merges into ~/.clawdis/agent/models.json (merge/replace modes) for LiteLLM, local OpenAI-compatible servers, Anthropic proxies, etc.
  • +
  • Group chat activation modes: per-group /activation mention|always command with status visibility.
  • +
  • Discord bot transport for DMs and guild text channels, with allowlists + mention gating.
  • +
  • Gateway webhooks: external wake and isolated agent hooks with dedicated token auth.
  • +
  • Hook mappings + Gmail Pub/Sub helper (clawdis hooks gmail setup/run) with auto-renew + Tailscale Funnel support.
  • +
  • Command queue modes + per-session overrides (/queue ...) and new agent.maxConcurrent cap for safe parallelism across sessions.
  • +
  • Background bash tasks: bash auto-yields after 20s (or on demand) with a process tool to list/poll/log/write/kill sessions.
  • +
  • Gateway in-process restart: clawdis_gateway tool action triggers a SIGUSR1 restart without needing a supervisor.
  • +
+

Breaking

+
    +
  • Config refactor: inbound.* removed; use top-level routing (allowlists + group rules + transcription), messages (prefixes/timestamps), and session (scoping/store/mainKey). No legacy keys read.
  • +
  • Heartbeat config moved to agent.heartbeat: set every: "30m" (duration string) and optional model. agent.heartbeatMinutes is removed, and heartbeats are disabled unless agent.heartbeat.every is set.
  • +
  • Heartbeats now run via the gateway runner (main session) and deliver to the last used channel by default. WhatsApp reply-heartbeat behavior is removed; use agent.heartbeat.target/to (or target: "none") to control delivery.
  • +
  • Browser act no longer accepts CSS selector; use snapshot refs (default ai) or evaluate as an escape hatch.
  • +
+

Fixes

+
    +
  • Heartbeat replies now strip repeated HEARTBEAT_OK tails to avoid accidental “OK OK” spam.
  • +
  • Heartbeat delivery now uses the last non-empty payload, preventing tool preambles from swallowing the final reply.
  • +
  • Heartbeat failure logs now include the error reason instead of [object Object].
  • +
  • Duration strings now accept h (hours) where durations are parsed (e.g., heartbeat intervals).
  • +
  • WhatsApp inbound now normalizes more wrapper types so quoted reply bodies are extracted reliably.
  • +
  • WhatsApp send now preserves existing JIDs (including group @g.us) instead of coercing to @s.whatsapp.net. (Thanks @arun-8687.)
  • +
  • Telegram/WhatsApp: reply context stays in Body/ReplyTo*, but outbound replies no longer thread to the original message. (Thanks @joshp123 for the PR and follow-up question.)
  • +
  • Suppressed libsignal session cleanup spam from console logs unless verbose mode is enabled.
  • +
  • WhatsApp web creds persistence hardened; credentials are restored before auth checks and QR login auto-restarts if it stalls.
  • +
  • Group chats now honor routing.groupChat.requireMention=false as the default activation when no per-group override exists.
  • +
  • Gateway auth no longer supports PAM/system mode; use token or shared password.
  • +
  • Tailscale Funnel now requires password auth (no token-only public exposure).
  • +
  • Group /new resets now work with @mentions so activation guidance appears on fresh sessions.
  • +
  • Group chat activation context is now injected into the system prompt at session start (and after activation changes), including /new greetings.
  • +
  • Typing indicators now start only once a reply payload is produced (no "thinking" typing for silent runs).
  • +
  • WhatsApp group typing now starts immediately only when the bot is mentioned; otherwise it waits until real output exists.
  • +
  • Streamed segments are stripped before partial replies are emitted.
  • +
  • System prompt now tags allowlisted owner numbers as the user identity to avoid mistaken “friend” assumptions.
  • +
  • LM Studio/Ollama replies now require tags; streaming ignores content until begins.
  • +
  • LM Studio responses API: tools payloads no longer include strict: null, and LM Studio no longer gets forced / tags.
  • +
  • Identity emoji no longer auto-prefixes replies (set messages.responsePrefix explicitly if desired).
  • +
  • Model switches now enqueue a system event so the next run knows the active model.
  • +
  • /model status now lists available models (same as /model).
  • +
  • process log pagination is now line-based (omit offset to grab the last N lines).
  • +
  • macOS WebChat: assistant bubbles now update correctly when toggling light/dark mode.
  • +
  • macOS: avoid spawning a duplicate gateway process when an external listener already exists.
  • +
  • Node bridge: when binding to a non-loopback host (e.g. Tailnet IP), also listens on 127.0.0.1 for local connections (without creating duplicate loopback listeners for 0.0.0.0/127.0.0.1 binds).
  • +
  • UI perf: pause repeat animations when scenes are inactive (typing dots, onboarding glow, iOS status pulse), throttle voice overlay level updates, and reduce overlay focus churn.
  • +
  • Canvas defaults/A2UI auto-nav aligned; debug status overlay centered; redundant await removed in CanvasManager.
  • +
  • Gateway launchd loop fixed by removing redundant kickstart -k.
  • +
  • CLI now hints when Peekaboo is unauthorized.
  • +
  • WhatsApp web inbox listeners now clean up on close to avoid duplicate handlers.
  • +
  • Gateway startup now brings up browser control before external providers; WhatsApp/Telegram/Discord auto-start can be disabled with web.enabled, telegram.enabled, or discord.enabled.
  • +
+

Providers & Routing

+
    +
  • New Discord provider for DMs + guild text channels with allowlists and mention-gated replies by default.
  • +
  • routing.queue now controls queue vs interrupt behavior globally + per surface (defaults: WhatsApp/Telegram interrupt, Discord/WebChat queue).
  • +
  • /queue supports one-shot or per-session overrides; /queue reset|default clears overrides.
  • +
  • agent.maxConcurrent caps global parallel runs while keeping per-session serialization.
  • +
+

macOS app

+
    +
  • Update-ready state surfaced in the menu; menu sections regrouped with session submenus.
  • +
  • Menu bar now shows a dedicated Nodes section under Context with inline rows, overflow submenu, and iconized actions.
  • +
  • Nodes now expose consistent inline details with per-node submenus for quick copy of key fields.
  • +
  • Node rows now show compact app versions (build numbers moved to submenus) and offer SSH launch from Bonjour when available.
  • +
  • Menu actions are grouped below toggles; Open Canvas hides when disabled and Voice Wake now anchors the mic picker.
  • +
  • Connections now include Discord provider status + configuration UI.
  • +
  • Menu bar gains an Allow Camera toggle alongside Canvas.
  • +
  • Session list polish: sleeping/disconnected/error states, usage bar restored, padding + bar sizing tuned, syncing menu removed, header hidden when disconnected.
  • +
  • Chat UI polish: tool call cards + merged tool results, glass background, tighter composer spacing, visual effect host tweaks.
  • +
  • OAuth storage moved; legacy session syncing metadata removed.
  • +
  • Remote SSH tunnels now get health checks; Debug → Ports highlights unhealthy tunnels and offers Reset SSH tunnel.
  • +
  • Menu bar session/node sections no longer reflow while open, keeping hover highlights aligned.
  • +
  • Menu hover highlights now span the full width (including submenu arrows).
  • +
  • Menu session rows now refresh while open without width changes (no more stuck “Loading sessions…”).
  • +
  • Menu width no longer grows on hover when moving the mouse across rows.
  • +
  • Context usage bars now have higher contrast in light mode.
  • +
  • macOS node timeouts now share a single async timeout helper for consistent behavior.
  • +
  • WebChat window defaults tightened (narrower width, edge-to-edge layout) and the SwiftUI tag removed from the title.
  • +
+

Nodes & Canvas

+
    +
  • Debug status overlay gated and toggleable on macOS/iOS/Android nodes.
  • +
  • Gateway now derives the canvas host URL via a shared helper for bridge + WS handshakes (avoids loopback pitfalls).
  • +
  • canvas a2ui push validates JSONL with line errors, rejects v0.9 payloads, and supports --text quick renders.
  • +
  • nodes rename lets you override paired node display names without editing JSON.
  • +
  • Android scaffold asset cleanup; iOS canvas/voice wake adjustments.
  • +
+

Logging & Observability

+
    +
  • New subsystem console formatter with color modes, shortened prefixes, and TTY detection; browser/gateway logs route through the subsystem logger.
  • +
  • WhatsApp console output streamlined; chalk/tslog typing fixes.
  • +
+

Web UI

+
    +
  • Chat is now the dashboard landing view; health status simplified; initial scroll animation removed.
  • +
+

Build, Dev, Docs

+
    +
  • Notarization flow added for macOS release artifacts; packaging scripts updated.
  • +
  • macOS signing auto-selects Developer ID → Apple Distribution → Apple Development; no ad-hoc fallback.
  • +
  • Added type-aware oxlint; docs list resolves from cwd; formatting/lint cleanup and dependency bumps (Peekaboo).
  • +
  • Docs refreshed for tools, custom model providers, Discord, queue/routing, group activation commands, logging, restart semantics, release notes, GitHub pages CTAs, and npm pitfalls.
  • +
  • pnpm build now skips A2UI bundling for faster builds (run pnpm canvas:a2ui:bundle when needed).
  • +
+

Tests

+
    +
  • Coverage added for models config merging, WhatsApp reply context, QR login flows, auto-reply behavior, and gateway SIGTERM timeouts.
  • +
  • Added gateway webhook coverage (auth, validation, and summary posting).
  • +
  • Vitest now isolates HOME/XDG config roots so tests never touch a real ~/.clawdis install.
  • +
+

View full changelog

+]]>
+ +
+
+
\ No newline at end of file diff --git a/docs/device-models.md b/docs/device-models.md index 980dd56b8..68edfbf8c 100644 --- a/docs/device-models.md +++ b/docs/device-models.md @@ -1,3 +1,10 @@ +--- +summary: "How Clawdis vendors Apple device model identifiers for friendly names in the macOS app." +read_when: + - Updating device model identifier mappings or NOTICE/license files + - Changing how Instances UI displays device names +--- + # Device model database (friendly names) The macOS companion app shows friendly Apple device model names in the **Instances** UI by mapping Apple model identifiers (e.g. `iPad16,6`, `Mac16,6`) to human-readable names. @@ -37,4 +44,3 @@ curl -fsSL "https://raw.githubusercontent.com/kyle-seongwoo-jun/apple-device-ide ```bash swift build --package-path apps/macos ``` - diff --git a/docs/refactor/gateway-client.md b/docs/refactor/gateway-client.md index c0522efdb..fb9e5c6a9 100644 --- a/docs/refactor/gateway-client.md +++ b/docs/refactor/gateway-client.md @@ -1,3 +1,10 @@ +--- +summary: "Refactor notes for the macOS gateway client typed API migration (Dec 2025)." +read_when: + - Refactoring macOS gateway client or typed gateway methods + - Auditing agent routing or channel semantics +--- + # Gateway Client Refactor (Dec 2025) Goal: remove stringly-typed gateway calls from the macOS app, centralize routing/channel semantics, and improve error handling.