From 2772b39e4ad582241e161f749a1629a67a606ff6 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 10 Jan 2026 04:17:27 +0100 Subject: [PATCH] docs: rewrite changelog for 2026.1.9 --- CHANGELOG.md | 241 ++++++++++++--------------------------------------- 1 file changed, 54 insertions(+), 187 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e0b358af..a34c748ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,193 +2,60 @@ ## Unreleased -- Sandbox: allow sandbox browser to auto-start the CDP endpoint when the browser tool needs it. — thanks @steipete -- Sandbox browser: proxy CDP out of the container so host port mappings work (fixes `attachOnly` “profile not running”). — thanks @steipete -- Agents: gate heartbeat prompt to default agent sessions (including non-agent session keys). (#630) — thanks @adam91holt -- Agent: fast abort on /stop and cancel tool calls between tool boundaries. (#617) -- Models/Auth: add OpenCode Zen (multi-model proxy) onboarding. (#623) — thanks @magimetal -- WhatsApp: refactor vCard parsing helper and improve empty contact card summaries. (#624) — thanks @steipete -- WhatsApp: include phone numbers when multiple contacts are shared. (#625) — thanks @mahmoudashraf93 -- WhatsApp: preserve group JIDs when normalizing delivery targets. (#631) — thanks @imfing -- Agents: warn on small context windows (<32k) and block unusable ones (<16k). — thanks @steipete -- Pairing: cap pending DM pairing requests at 3 per provider and avoid pairing replies for outbound DMs. — thanks @steipete -- macOS: replace relay smoke test with version check in packaging script. (#615) — thanks @YuriNachos -- macOS: avoid clearing Launch at Login during app initialization. (#607) — thanks @wes-davis -- Onboarding: skip systemd checks/daemon installs when systemd user services are unavailable; add onboarding flags to skip flow steps and stabilize Docker E2E. (#573) — thanks @steipete -- Onboarding: QuickStart provider picker uses single-select to avoid accidental Telegram token prompts when choosing WhatsApp. (#485) — thanks @frankstallone -- macOS: add node bridge heartbeat pings to detect half-open sockets and reconnect cleanly. (#572) — thanks @ngutman -- Node bridge: harden keepalive + heartbeat handling (TCP keepalive, better disconnects, and keepalive config tests). (#577) — thanks @steipete -- Control UI: improve mobile responsiveness. (#558) — thanks @carlulsoe -- Control UI: persist per-session verbose off and hide tool cards unless verbose is on. (#262) — thanks @steipete -- Gateway: centralize verbose overrides and gate tool stream events at the server. (#262) — thanks @steipete -- CLI: add `sandbox list` and `sandbox recreate` commands for managing Docker sandbox containers after image/config updates. (#563) — thanks @pasogott -- Sandbox: allow `session_status` tool in sandboxed sessions by default. — thanks @steipete -- CLI: add `clawdbot config --section ` to jump straight into a wizard section (repeatable). -- Docs: add Hetzner Docker VPS guide. (#556) — thanks @Iamadig -- Docs: link Hetzner guide from install + platforms docs. (#592) — thanks @steipete -- Providers: add Microsoft Teams provider with polling, attachments, and CLI send support. (#404) — thanks @onutc -- Slack: honor reply tags + replyToMode while keeping threaded replies in-thread. (#574) — thanks @bolismauro -- Slack: configurable reply threading (`slack.replyToMode`) + proper mrkdwn formatting for outbound messages. (#464) — thanks @austinm911 -- Signal: match own-mode reactions when target includes uuid + phone. (#632) — thanks @neist -- Providers: remove ack reactions after reply on Discord/Slack/Telegram. (#633) — thanks @levifig -- Discord: avoid category parent overrides for channel allowlists and refactor thread context helpers. (#588) — thanks @steipete -- Discord: fix forum thread starters and cache channel lookups for thread context. (#585) — thanks @thewilloftheshadow -- Discord: log gateway disconnect/reconnect events at info and add verbose gateway metrics. (#595) — thanks @steipete -- Commands: accept /models as an alias for /model. -- Commands: add `/usage` as an alias for `/status`. (#492) — thanks @lc0rp -- Models/Auth: add MiniMax Anthropic-compatible API onboarding (minimax-api). (#590) — thanks @mneves75 -- Models: centralize model override validation + hooks Gmail warnings in doctor. (#602) — thanks @steipete -- Agents: avoid base-to-string error stringification in model fallback. (#604) — thanks @steipete -- Agents: `sessions_spawn` inherits the requester's provider for child runs (avoid WhatsApp fallback). (#528) — thanks @rlmestre -- Agents: sub-agent context now injects only AGENTS.md + TOOLS.md (omits identity/user/soul/heartbeat/bootstrap). — thanks @steipete -- Gateway/CLI: harden agent provider routing + validation (Slack/MS Teams + aliases). (follow-up #528) — thanks @steipete -- Agents: treat billing/insufficient-credits errors as failover-worthy so model fallbacks kick in. (#486) — thanks @steipete -- Auth: default billing disable backoff to 5h (doubling, 24h cap) and surface disabled/cooldown profiles in `models list` + doctor. (#486) — thanks @steipete -- Commands: harden slash command registry and list text-only commands in `/commands`. -- Models/Auth: show per-agent auth candidates in `/model status`, and add `clawdbot models auth order {get,set,clear}` (per-agent auth rotation overrides). — thanks @steipete -- Telegram: keep streamMode draft-only; avoid forcing block streaming. (#619) — thanks @rubyrunsstuff -- Telegram: add `[[audio_as_voice]]` tag support for voice notes with streaming-safe delivery. (#490) — thanks @jarvis-medmatic -- Debugging: add raw model stream logging flags and document gateway watch mode. -- Gateway: decode dns-sd escaped UTF-8 in discovery output and show scan progress immediately. — thanks @steipete -- Agent: add claude-cli/opus-4.5 runner via Claude CLI with resume support (tools disabled). -- CLI: move `clawdbot message` to subcommands (`message send|poll|…`), fold Discord/Slack/Telegram/WhatsApp tools into `message`, and require `--provider` unless only one provider is configured. -- CLI: improve `logs` output (pretty/plain/JSONL), add gateway unreachable hint, and document logging. -- Hooks: default hook agent delivery to true. (#533) — thanks @mcinteerj -- Hooks: normalize hook agent providers (aliases + msteams support). -- WhatsApp: route queued replies to the original sender instead of the bot's own number. (#534) — thanks @mcinteerj -- WhatsApp: improve "no active web listener" errors (include account + relink hint). (#612) — thanks @YuriNachos -- WhatsApp: add broadcast groups for multi-agent replies. (#547) — thanks @pasogott -- WhatsApp: resolve @lid inbound senders via auth-dir mapping fallback + shared resolver. (#365) -- WhatsApp: treat shared contact cards as inbound messages (prefer vCard FN). (#622) — thanks @mahmoudashraf93 -- iMessage: isolate group-ish threads by chat_id. (#535) — thanks @mdahmann -- Models: add OAuth expiry checks in doctor, expanded `models status` auth output (missing auth + `--check` exit codes). (#538) — thanks @latitudeki5223 -- Deps: bump Pi to 0.40.0 and drop pi-ai patch (upstream 429 fix). (#543) — thanks @mcinteerj -- Agent: skip empty error assistant messages when rebuilding session context to avoid tool-chain corruption. (#561) — thanks @mukhtharcm -- Security: per-agent mention patterns and group elevated directives now require explicit mention to avoid cross-agent toggles. -- Config: support inline env vars in config (`env.*` / `env.vars`) and document env precedence. -- Config: write `clawdbot.json` atomically (temp file + replace) and keep a best-effort `.bak` backup. -- Agent: enable adaptive context pruning by default for tool-result trimming. -- Agent: drop empty error assistant messages when sanitizing session history. (#591) — thanks @steipete -- Agent: inject eligible skills list into the system prompt so bundled skills load from their actual locations. (#551) — thanks @gabriel-trigo -- Doctor: check config/state permissions and offer to tighten them. — thanks @steipete -- Doctor/Daemon: audit supervisor configs, add --repair/--force flows, surface service config audits in daemon status, and document user vs system services. — thanks @steipete -- Doctor: repair gateway service entrypoint when switching between npm and git installs; add Docker e2e coverage. — thanks @steipete -- Daemon: align generated systemd unit with docs for network-online + restart delay. (#479) — thanks @azade-c -- Daemon: add KillMode=process to systemd units to avoid podman restart hangs. (#541) — thanks @ogulcancelik -- WhatsApp: make inbound media size cap configurable (default 50 MB). (#505) — thanks @koala73 -- Doctor: run legacy state migrations in non-interactive mode without prompts. -- Cron: parse Telegram topic targets for isolated delivery. (#478) — thanks @nachoiacovino -- Cron: enqueue main-session system events under the resolved main session key. (#510) -- Mobile: centralize main session key normalization for iOS/Android runtime helpers. — thanks @steipete -- Chat UI: stop pinning hardcoded `main` session in the recent list; prefer active session if missing. — thanks @steipete -- Outbound: default Telegram account selection for config-only tokens; remove heartbeat-specific accountId handling. (follow-up #516) — thanks @YuriNachos -- Cron: allow Telegram delivery targets with topic/thread IDs (e.g. `-100…:topic:123`). (#474) — thanks @mitschabaude-bot -- Heartbeat: resolve Telegram account IDs from config-only tokens; cron tool accepts canonical `jobId` and legacy `id` for job actions. (#516) — thanks @YuriNachos -- Discord: stop provider when gateway reconnects are exhausted and surface errors. (#514) — thanks @joshp123 -- Agents: strip empty assistant text blocks from session history to avoid Claude API 400s. (#210) -- Agents: scrub unsupported JSON Schema keywords from tool schemas for Cloud Code Assist API compatibility. (#567) — thanks @erikpr1994 -- Agents: sanitize Cloud Code Assist tool call IDs and detect format/quota errors for failover. (#544) — thanks @jeffersonwarrior -- Agents: simplify session tool schemas for Gemini compatibility. (#599) — thanks @mcinteerj -- Agents: require `raw` for gateway `config.apply` tool calls while keeping schema 2020-12 compatible. (#566) — thanks @sircrumpet -- Agents: add `session_status` agent tool for `/status`-equivalent status (incl. usage/cost) + per-session model overrides. — thanks @steipete -- Auto-reply: preserve block reply ordering with timeout fallback for streaming. (#503) — thanks @joshp123 -- Auto-reply: block reply ordering fix (duplicate PR superseded by #503). (#483) — thanks @AbhisekBasu1 -- Auto-reply: avoid splitting outbound chunks inside parentheses. (#499) — thanks @philipp-spiess -- Auto-reply: preserve spacing when stripping inline directives. (#539) — thanks @joshp123 -- Auto-reply: relax reply tag parsing to allow whitespace. (#560) — thanks @mcinteerj -- Auto-reply: add per-provider block streaming toggles and coalesce streamed blocks to reduce line spam. (#536) — thanks @mcinteerj -- Auto-reply: suppress `` leakage in block streaming and emit `/reasoning` as a separate `Reasoning:` message. (#614) — thanks @zknicker -- Auto-reply: default block streaming off for non-Telegram providers unless explicitly enabled, and avoid splitting on forced flushes below max. -- Auto-reply: raise default coalesce minChars for Signal/Slack/Discord and clarify streaming vs draft streaming in docs. -- Auto-reply: default block streaming coalesce idle to 1s to reduce tiny chunks. — thanks @steipete -- Auto-reply: fix /status usage summary filtering for the active provider. -- Auto-reply: deduplicate followup queue entries using message id/routing to avoid duplicate replies. (#600) — thanks @samratjha96 -- Status: show provider prefix in /status model display. (#506) — thanks @mcinteerj -- Status: compact /status with session token usage + estimated cost, add `/cost` per-response usage lines (tokens-only for OAuth). -- Status: show active auth profile and key snippet in /status. -- Status: show provider usage windows when auth uses token-based OAuth (e.g. Claude setup-token). -- Agent: promote ``/`` tag reasoning into structured thinking blocks so `/reasoning` works consistently for OpenAI-compat providers. -- macOS: package ClawdbotKit resources and Swift 6.2 compatibility dylib to avoid launch/tool crashes. (#473) — thanks @gupsammy -- WhatsApp: group `/model list` output by provider for scannability. (#456) - thanks @mcinteerj -- Hooks: allow per-hook model overrides for webhook/Gmail runs (e.g. GPT 5 Mini). -- Control UI: logs tab opens at the newest entries (bottom). -- Control UI: default to relative paths for control UI assets. (#569) — thanks @bjesuiter -- Control UI: add Docs link, remove chat composer divider, and add New session button. -- Control UI: link sessions list to chat view. (#471) — thanks @HazAT -- Sessions: support session `label` in store/list/UI and allow `sessions_send` lookup by label. (#570) — thanks @azade-c -- Sessions: clarify `sessions_send` delivery semantics, log announce failures, and enforce Discord request timeouts. (#507) — thanks @steipete -- Control UI: show/patch per-session reasoning level and render extracted reasoning in chat. -- Control UI: queue outgoing chat messages, add Enter-to-send, and show queued items. (#527) — thanks @YuriNachos -- Control UI: refactor chat layout with tool sidebar, grouped messages, and nav improvements. (#475) — thanks @rahthakor -- Control UI: drop explicit `ui:install` step; `ui:build` now auto-installs UI deps (docs + update flow). -- Telegram: retry long-polling conflicts with backoff to avoid fatal exits. -- Telegram: fix grammY fetch type mismatch when injecting `fetch`. (#512) — thanks @YuriNachos -- Telegram: add inline keyboard buttons (capability-gated) and route callback query payloads as messages. (#491) — thanks @azade-c -- WhatsApp: resolve @lid JIDs via Baileys mapping to unblock inbound messages. (#415) -- Pairing: replies now include sender ids for Discord/Slack/Signal/iMessage/WhatsApp; pairing list labels them explicitly. -- Messages: default inbound/outbound prefixes from the routed agent’s `identity.name` when set. (#578) — thanks @p6l-richard -- Signal: accept UUID-only senders for pairing/allowlists/routing when sourceNumber is missing. (#523) — thanks @neist -- Signal: ignore reaction-only messages so they don't surface as unknown media. (#616) — thanks @neist -- Signal: add reaction notifications with allowlist support. — thanks @steipete -- Agent system prompt: avoid automatic self-updates unless explicitly requested. -- Onboarding: tighten QuickStart hint copy for configuring later. -- Onboarding: set Gemini 3 Pro as the default model for Gemini API key auth. (#489) — thanks @jonasjancarik -- Onboarding: avoid “token expired” for Codex CLI when expiry is heuristic. -- Onboarding: QuickStart jumps straight into provider selection with Telegram preselected when unset. -- Onboarding: QuickStart auto-installs the Gateway daemon with Node (no runtime picker). -- Onboarding: clarify WhatsApp owner number prompt and label pairing phone number. -- Auto-reply: normalize routed replies to drop NO_REPLY and apply response prefixes. -- Commands: add /debug for runtime config overrides (memory-only). -- Commands: add /config to persist config changes from chat (owner-only). -- Daemon runtime: remove Bun from selection options. -- CLI: restore hidden `gateway-daemon` alias for legacy launchd configs. -- Onboarding/Configure: add OpenAI API key flow that stores in shared `~/.clawdbot/.env` for launchd; simplify Anthropic token prompt order. -- Configure/Onboarding: show Control UI docs with gateway reachability status and only offer to open when a gateway is detected; default model prompt now prefers Opus 4.5 for Anthropic auth. -- Control UI: show skill install progress + per-skill results, hide install once binaries present. (#445) — thanks @pkrmf -- Providers/Doctor: surface Discord privileged intent (Message Content) misconfiguration with actionable warnings. -- Providers/Doctor: warn when Telegram config expects unmentioned group messages but Bot API privacy mode is likely enabled; surface WhatsApp login/disconnect hints. -- Providers/Doctor: add last inbound/outbound activity timestamps in `providers status` and extend `--probe` with Discord channel permission + Telegram group membership audits. -- Docs: add provider troubleshooting index (`/providers/troubleshooting`) and link it from the main troubleshooting guide. -- Docs: clarify model allowlist errors and add safety notes for verbose/reasoning in groups. -- Docs: add Ansible installation guide. (#545) — thanks @pasogott -- Telegram: include the user id in DM pairing messages and label it clearly in `clawdbot pairing list --provider telegram`. -- Apps: refresh iOS/Android/macOS app icons for Clawdbot branding. (#521) — thanks @fishfisher -- Docs: expand parameter descriptions for agent/wake hooks. (#532) — thanks @mcinteerj -- Docs: add community showcase entries from Discord. (#476) — thanks @gupsammy -- TUI: refresh status bar after think/verbose/reasoning changes. (#519) — thanks @jdrhyne -- TUI: stop overriding agent timeout so config defaults apply; warn on invalid `--timeout-ms`. (#549) -- Status: show Verbose/Elevated only when enabled. -- Status: filter usage summary to the active model provider. -- Status: map model providers to usage sources so unrelated usage doesn’t appear. -- Status: fix Claude usage snapshots when `anthropic:default` is a setup-token lacking `user:profile` by preferring `anthropic:claude-cli`; optional claude.ai fallback via `CLAUDE_AI_SESSION_KEY` / `CLAUDE_WEB_COOKIE`. -- Commands: allow /elevated off in groups without a mention; keep /elevated on mention-gated. -- Commands: keep multi-directive messages from clearing directive handling. -- Commands: warn when /elevated runs in direct (unsandboxed) runtime. -- Commands: treat mention-bypassed group command messages as mentioned so elevated directives respond. -- Commands: return /status in directive-only multi-line messages. -- Models: fall back to configured models when the provider catalog is unavailable. -- Agent system prompt: add messaging guidance for reply routing and cross-session sends. (#526) — thanks @neist -- Agent: bypass Anthropic OAuth tool-name blocks by capitalizing built-ins and keeping pruning tool matching case-insensitive. (#553) — thanks @andrewting19 -- Commands/Tools: disable /restart and gateway restart tool by default (enable with commands.restart=true). -- Gateway/CLI: add `clawdbot gateway discover` (Bonjour scan on `local.` + `clawdbot.internal.`) with `--timeout` and `--json`. — thanks @steipete -- Gateway/CLI: make `clawdbot gateway status` human-readable by default, add `--json`, and probe localhost + configured remote (warn on multiple gateways). — thanks @steipete -- Gateway/CLI: support remote loopback gateways via SSH tunnel in `clawdbot gateway status` (`--ssh` / `--ssh-auto`). — thanks @steipete -- Gateway/Discovery: include `gatewayPort`/`sshPort`/`cliPath` in wide-area Bonjour records, and add a tailnet DNS fallback for `gateway discover` when split DNS isn’t configured. — thanks @steipete -- CLI: add global `--no-color` (and respect `NO_COLOR=1`) to disable ANSI output. — thanks @steipete -- CLI: centralize lobster palette + apply it to onboarding/config prompts. — thanks @steipete -- Gateway/CLI: add `clawdbot gateway --dev/--reset` to auto-create a dev config/workspace with a robot identity (no BOOTSTRAP.md), and reset wipes config/creds/sessions/workspace (subcommand --dev no longer collides with global --dev profile). — thanks @steipete -- Configure: stop prompting to open the Control UI (still shown in onboarding). — thanks @steipete -- Configure: add wizard mode to remove a provider config block. — thanks @steipete -- Onboarding/TUI: prompt to start TUI (best option) when BOOTSTRAP.md exists and add `tui --message` to auto-send the first prompt. — thanks @steipete -- Telegram: suppress grammY getUpdates stack traces; log concise retry message instead. — thanks @steipete -- Gateway/CLI: allow dev profile (`clawdbot --dev`) to auto-create the dev config + workspace. — thanks @steipete -- Dev templates: ship C-3PO dev workspace defaults as docs templates and use them for dev bootstrap. — thanks @steipete -- Config: fix Minimax hosted onboarding to write `agents.defaults` and allow `msteams` as a heartbeat target. — thanks @steipete -- Discord: add channel/category management actions (create/edit/move/delete + category removal). (#487) - thanks @NicholasSpisak -- Docs: split CLI install commands into separate code blocks. (#601) — thanks @martinpucik -- WhatsApp: record outbound provider activity using the active account id. (#537) — thanks @Nachx639 -- Discord: add gateway HELLO timeout to detect zombie connections. (#608) — thanks @NicholasSpisak -- Docker: cache dependency layer for faster rebuilds. (#605) — thanks @zknicker +- _None yet._ + +## 2026.1.9 + +### Highlights +- Microsoft Teams provider: polling, attachments, outbound CLI send, per-channel policy. +- Models/Auth expansion: OpenCode Zen + MiniMax API onboarding; token auth profiles + auth order; OAuth health in doctor/status. +- CLI/Gateway UX: message subcommands, gateway discover/status/SSH, /config + /debug, sandbox CLI. +- Provider reliability sweep: WhatsApp contact cards/targets, Telegram audio-as-voice + streaming, Signal reactions, Slack threading, Discord stability. +- Auto-reply + status: block-streaming controls, reasoning handling, usage/cost reporting. +- Control UI/TUI: queued messages, session links, reasoning view, mobile polish, logs UX. + +### Breaking +- CLI: `clawdbot message` now subcommands (`message send|poll|...`) and requires `--provider` unless only one provider configured. +- Commands/Tools: `/restart` and gateway restart tool disabled by default; enable with `commands.restart=true`. + +### New Features and Changes +- Models/Auth: OpenCode Zen onboarding (#623) — thanks @magimetal; MiniMax Anthropic-compatible API + hosted onboarding (#590, #495) — thanks @mneves75, @tobiasbischoff. +- Models/Auth: setup-token + token auth profiles; `clawdbot models auth order {get,set,clear}`; per-agent auth candidates in `/model status`; OAuth expiry checks in doctor/status. +- Agent/System: claude-cli runner; `session_status` tool (and sandbox allow); adaptive context pruning default; system prompt messaging guidance + no auto self-update; eligible skills list injection; sub-agent context trimmed. +- Commands: `/commands` list; `/models` alias; `/usage` alias; `/debug` runtime overrides + effective config view; `/config` chat updates + `/config get`; `config --section`. +- CLI/Gateway: unified message tool + message subcommands; gateway discover (local + wide-area DNS-SD) with JSON/timeout; gateway status human-readable + JSON + SSH loopback; wide-area records include gatewayPort/sshPort/cliPath + tailnet DNS fallback. +- CLI UX: logs output modes (pretty/plain/JSONL) + colorized health/daemon output; global `--no-color`; lobster palette in onboarding/config. +- Dev ergonomics: gateway `--dev/--reset` + dev profile auto-config; C-3PO dev templates; dev gateway/TUI helper scripts. +- Sandbox/Workspace: sandbox list/recreate commands; sync skills into sandbox workspace; sandbox browser auto-start. +- Config/Onboarding: inline env vars; OpenAI API key flow to shared `~/.clawdbot/.env`; Opus 4.5 default prompt for Anthropic auth; QuickStart auto-install gateway (Node-only) + provider picker tweaks + skip-systemd flags; TUI bootstrap prompt (`tui --message`); remove Bun runtime choice. +- Providers: Microsoft Teams provider (polling, attachments, outbound sends, requireMention, config reload/DM policy). (#404) — thanks @onutc +- Providers: WhatsApp broadcast groups for multi-agent replies (#547) — thanks @pasogott; inbound media size cap configurable (#505) — thanks @koala73; identity-based message prefixes (#578) — thanks @p6l-richard. +- Providers: Telegram inline keyboard buttons + callback payload routing (#491) — thanks @azade-c; cron topic delivery targets (#474/#478) — thanks @mitschabaude-bot, @nachoiacovino; `[[audio_as_voice]]` tag support (#490) — thanks @jarvis-medmatic. +- Providers: Signal reactions + notifications with allowlist support. +- Status/Usage: /status cost reporting + `/cost` lines; auth profile snippet; provider usage windows. +- Control UI: mobile responsiveness (#558) — thanks @carlulsoe; queued messages + Enter-to-send (#527) — thanks @YuriNachos; session links (#471) — thanks @HazAT; reasoning view; skill install feedback (#445) — thanks @pkrmf; chat layout refresh (#475) — thanks @rahthakor; docs link + new session button; drop explicit `ui:install`. +- TUI: agent picker + agents list RPC; improved status line. +- Doctor/Daemon: audit/repair flows, permissions checks, supervisor config audits; provider status probes + warnings for Discord intents and Telegram privacy; last activity timestamps; gateway restart guidance. +- Docs: Hetzner Docker VPS guide + cross-links (#556/#592) — thanks @Iamadig; Ansible guide (#545) — thanks @pasogott; provider troubleshooting index; hook parameter expansion (#532) — thanks @mcinteerj; model allowlist notes; OAuth deep dive; showcase refresh. +- Apps/Branding: refreshed iOS/Android/macOS icons (#521) — thanks @fishfisher. +- Maintenance: Pi 0.40.0 bump (#543) — thanks @mcinteerj; Docker build cache layer (#605) — thanks @zknicker. + +### Fixes +- Sandbox/Browser: auto-start CDP endpoint; proxy CDP out of container for attachOnly; relax Bun fetch typing; align sandbox list output with config images. +- Agents/Runtime: gate heartbeat prompt to default sessions; /stop aborts between tool calls; require explicit system-event session keys; guard small context windows; fix model fallback stringification; sessions_spawn inherits provider; failover on billing/credits; respect auth cooldown ordering; restore Anthropic OAuth tool dispatch + tool-name bypass; avoid OpenAI invalid reasoning replay; harden Gmail hook model defaults. +- Agent history/schema: strip/skip empty assistant/error blocks to prevent session corruption/Claude 400s; scrub unsupported JSON Schema keywords + sanitize tool call IDs for Cloud Code Assist; simplify Gemini-compatible tool/session schemas; require raw for config.apply. +- Auto-reply/Streaming: default audioAsVoice false; preserve audio_as_voice propagation + buffer audio blocks + guard voice notes; block reply ordering (timeout) + forced-block fence-safe; avoid chunk splits inside parentheses + fence-close breaks + invalid UTF-16 truncation; preserve inline directive spacing + allow whitespace in reply tags; filter NO_REPLY prefixes + normalize routed replies; suppress leakage with separate Reasoning; block streaming defaults (off by default, minChars/idle tuning) + coalesced blocks; dedupe followup queue; restore explicit responsePrefix default. +- Status/Commands: provider prefix in /status model display; usage filtering + provider mapping; auth label + usage snapshots (claude-cli fallback + optional claude.ai); show Verbose/Elevated only when enabled; compact usage/cost line + restore emoji-rich status; /status in directive-only + multi-directive handling; mention-bypass elevated handling; surface provider usage errors; wire /usage to /status; restore hidden gateway-daemon alias; fallback /model list when catalog unavailable. +- WhatsApp: vCard/contact cards (prefer FN, include numbers, show all contacts, keep summary counts, better empty summaries); preserve group JIDs + normalize targets; resolve @lid mappings/JIDs (Baileys/auth-dir) + inbound mapping; route queued replies to sender; improve web listener errors + remove provider name from errors; record outbound activity account id; fix web media fetch errors; broadcast group history consistency. +- Telegram: keep streamMode draft-only; long-poll conflict retries + update dedupe; grammY fetch mismatch fixes + restrict native fetch to Bun; suppress getUpdates stack traces; include user id in pairing; audio_as_voice handling fixes. +- Discord/Slack: thread context helpers + forum thread starters; avoid category parent overrides; gateway reconnect logs + HELLO timeout + stop provider after reconnect exhaustion; DM recipient parsing for numeric IDs; remove incorrect limited warning; reply threading + mrkdwn edge cases; remove ack reactions after reply; gateway debug event visibility. +- Signal: reaction handling safety; own-reaction matching (uuid+phone); UUID-only senders accepted; ignore reaction-only messages. +- MS Teams: download image attachments reliably; fix top-level replies; stop on shutdown + honor chunk limits; normalize poll providers/deps; pairing label fixes. +- iMessage: isolate group-ish threads by chat_id. +- Gateway/Daemon/Doctor: atomic config writes; repair gateway service entrypoint + install switches; non-interactive legacy migrations; systemd unit alignment + KillMode=process; node bridge keepalive/pings; Launch at Login persistence; bundle ClawdbotKit resources + Swift 6.2 compat dylib; relay version check + remove smoke test; regen Swift GatewayModels + keep agent provider string; cron jobId alias + channel alias migration + main session key normalization; heartbeat Telegram accountId resolution; avoid WhatsApp fallback for internal runs; gateway listener error wording; serveBaseUrl param; honor gateway --dev; fix wide-area discovery updates; align agents.defaults schema; provider account metadata in daemon status; refresh Carbon patch for gateway fixes; restore doctor prompter initialValue handling. +- Control UI/TUI: persist per-session verbose off + hide tool cards; logs tab opens at bottom; relative asset paths + landing cleanup; session labels lookup/persistence; stop pinning main session in recents; start logs at bottom; TUI status bar refresh + timeout handling + hide reasoning label when off. +- Onboarding/Configure: QuickStart single-select provider picker; avoid Codex CLI false-expiry warnings; clarify WhatsApp owner prompt; fix Minimax hosted onboarding (agents.defaults + msteams heartbeat target); remove configure Control UI prompt; honor gateway --dev flag. + ## 2026.1.8