## zeroclaw-labs/zeroclaw — v0.8.0-beta-1…v0.8.0-beta-2

_131 commits._

### Features
- **feat(i18n): add Spanish and Chinese runtime and zerocode locales (#7039)** (a3b1c07)
- **feat(tools): optional base64 encoding for file_read / file_write (#7004)** (a489161)
- **feat(integration): introduce zerocode TUI, RPC socket transport, DenyWithEdit approval, and beta-2 integration (#6848)** (2c91478)
- **feat(docs): reskin mdBook to match the web dashboard (PoC) (#7055)** (e7cb467)
- **feat(channels): define lean default channel bundle (#6904)** (34c80b0)
- **feat(tools): add Jina AI as web_search provider (#6833)** (31c6273)
- **feat(skills): scoped tool elevation for built-in and MCP tools** (3ff690f)
- **feat(tools): add file_upload_bundle tool for multi-file uploads** (9caf28c)
- **feat(tts): configurable uri and response_format for openai provider** (c4bb711)
- **feat(tools): add file_download tool for fetching remote files into the workspace (#6957)** (f5567c2)
- **feat(agent): add channel_send tool with default_target (#6665)** (d050b57)
- **feat(gateway): report honest channel readiness (#6985)** (e2b8e95)
- **feat(api): add ChannelMessage::new and SendMessage::reply_to constructors (#6951)** (589eb5f)
- **feat(channels/webhook): add retry logic with exponential backoff (#5838)** (65837f3)
- **feat(tools): add result mode to execute_pipeline (#7009)** (233b3a6)
- **feat(tools): filter deferred MCP tools by access policy (#6920)** (9358038)
- **feat(agents): add per-agent `classifier_provider` to route reply-intent precheck to a cheaper model (#6945)** (a63484c)
- **feat(memory): introduce MemoryStrategy trait and DefaultMemoryStrategy (#6907)** (26b5c43)
- **feat(web): declare minimum browser floor and add unsupported-browser fallback banner (#6936)** (e2fd032)
- **feat(config): generalize #[secret] via SecretField trait (#6918)** (6c4b6d1)
- **feat(gateway): preserve websocket steering transcript (#6933)** (1861e4d)
- **feat(tools): add file_upload tool for HTTP multipart uploads (#6773)** (3ea1f30)
- **feat(channels/lark): implement request_approval() for Lark/Feishu (#6852)** (70787ae)
- **feat(provider): add native extended thinking for Anthropic and Bedrock providers (#5652)** (fe570ce)
- **feat(channels): support selective channel builds and filter channel list by compiled features (#6866)** (882c759)
- **feat(channel): add WeCom AI Bot WebSocket channel (#6680)** (3f6d8e0)
- **feat(signal): outbound emoji reactions via sendReaction (#6840)** (ef8bc0a)
- **feat(orchestrator): expose message_id in agent channel context (#6843)** (19e014d)
- **feat(jira): add list_transitions, transition_ticket, create_ticket actions (#6481)** (98876c0)
- **feat: separate IMAP/SMTP credentials (#6666)** (912315c)
- **feat(channels,runtime): support lark as a cron delivery channel (#6851)** (3498f50)
- **feat: Add blog RSS/Atom feeds and sitemap discovery endpoints (#6774)** (f8509c2)
- **feat(obs): enrich OTel tool spans with gen_ai.tool.* semantic convention attrs (#6009)** (f1f5757)
- **feat(browser): add agent-browser headed config (#6636)** (b4d1d59)
- **feat(skills): emit positive log when skill tools are registered (#6072)** (4fb0ef2)

### Fixes
- **fix(providers): retry empty completions instead of returning a blank turn (#7061)** (599bd7e)
- **fix(channels): redact Discord delivery failure targets (#7031)** (4cee401)
- **fix(runtime): fall back before visible stream errors (#6983)** (4ed0334)
- **fix(email): ignore blank SMTP credential overrides (#6979)** (883d5ee)
- **fix(web_fetch): honor private DNS host allowlist (#6974)** (3fa62f3)
- **fix(tools): resolve image_info paths through policy (#6972)** (708f1f6)
- **fix(channels): restore date-only channel prompt context (#6931)** (9651e13)
- **fix(providers): omit temperature for kimi-k2 models in compatible.rs (#7022) (#7049)** (3c81823)
- **fix(channels/media-pipeline): inline image data for vision (#7035)** (0690456)
- **fix(channels/whatsapp-web): match LID bot mentions (#7034)** (4903ba5)
- **fix(channels/telegram): wire transcription_provider alias for inbound voice (#7000)** (8377845)
- **fix(channels): restore per-agent reply precheck controls** (d78ac72)
- **fix(agent): resolve runtime profile budgets when constructing security policy** (68aec2e)
- **fix(gateway/acp): wire shared CanvasStore into WS chat and ACP sessions (#6986)** (35624db)
- **fix(matrix): preserve self-anchored root sessions (#6967)** (afc5828)
- **fix(observability): record LlmRequest/LlmResponse events in agent turn paths (#6955)** (97b5f96)
- **fix(runtime): apply SecurityPolicy tool filter in process_message() (#6960)** (fcc8be8)
- **fix(provider): accept compatible typed content arrays (#7010)** (58c24e2)
- **fix(runtime): avoid invalid GLM history after pruning (#7013)** (0627efc)
- **fix(web_fetch): unwrap zero-limit regression test tools (#7016)** (282b00f)
- **fix(runtime/agent): preserve reasoning_content through context compression (#6285)** (ff024ad)
- **fix(tauri): remove manual MANIFEST linker flags to fix CVT1100/LNK1123 on Windows (#6987)** (f4f2979)
- **fix(provider/compatible): preserve reasoning_content for plain-text assistant turns (#6284)** (e3a3228)
- **fix(providers): respect explicit provider kind (#6607)** (79534f9)
- **fix(tools): add ipv6 support and use reqwest.url (#5450)** (1300684)
- **fix(web_fetch): treat max_response_size=0 as unlimited (#6884)** (780351f)
- **fix(onboard): add Codex subscription auth for OpenAI provider (#6908)** (f6015ab)
- **fix(provider): preserve reasoning_content in native tool requests (#6980)** (abc6414)
- **fix(config): use platform-agnostic paths in policy tests (#6913)** (6a4013d)
- **fix(tests): replace wall-clock timing assert in parallel-dispatch test with deterministic overlap check (#6962)** (c684b75)
- **fix(cli): suppress INFO logs in agent interactive mode (#6947)** (43419e0)
- **fix(discord): keep gateway preflight 429 retryable (#6934)** (c10c20f)
- **fix(runtime): sanitize compressor media markers before truncation (#6882)** (28ce7c5)
- **fix(gateway): add structured onboarding repair items (#6894)** (0848e1a)
- **fix(cron): persist manual delivery failures as degraded (#6897)** (8082c09)
- **fix(update): verify self-update downloads against SHA256SUMS (#6900)** (ec4d0f7)
- **fix(channel): restore legacy channel startup fallback when agent channel bindings are empty (#6892)** (e1da88b)
- **fix(gateway): /ws/nodes 404 when nodes.enabled=false + reject unauthenticated combo (#6885)** (c7de6f0)
- **fix(onboard): validate provider catalog aliases (#6928)** (8ff0a48)
- **fix(providers): siliconflow DEFAULT_URL .cn → .com (international endpoint) (#6953)** (6a68466)
- **fix(runtime): preserve provider aliases for Codex OAuth (#6938)** (83bdc03)
- **fix(providers): route system streaming through RouterModelProvider (#6935)** (f4d17ea)
- **fix(web): tighten Canvas iframe sandbox to prevent token theft via XSS (GHSA-f385-f6h2-3gqj) (#6942)** (06c73e7)
- **fix(channels/email): html body rendering, subject threading, attachment path resolution (#6512)** (d47b5aa)
- **fix(onboarding): restore Homebrew config dir detection (#6896)** (cc1a66b)
- **fix(providers): preserve full reqwest error chains in transport/log diagnostics (#6901)** (24a57ae)
- **fix(ci): unblock pr-title workflow with inline regex check (#6752)** (508e060)
- **fix(setup): align Windows minimal install with core-only build (#6867)** (694746f)
- **fix(security): conditionally bind /lib64 and /lib in bubblewrap sandbox (#6902)** (d05cdbc)
- **fix(memory): reject clear on append-only markdown backend (#5120)** (7dfda73)
- **fix(discord): resume gateway sessions after reconnect (#6835)** (6d02620)
- **fix(provider): replace expect_err panic with propagated error in Codex stream cleanup (#6712)** (3f7c4f8)
- **fix(providers): avoid synthetic Codex tool call ids (#6865)** (3e8efca)
- **fix(providers): preserve Ollama cloud suffix for private remotes (#6863)** (9c2522c)
- **fix(mdbook): stabilize gettext catalog diffs for docs sync (#6868)** (ac8eaef)
- **fix(provider): resolve per-provider API key from config model entry (#6890)** (4a668d5)
- **fix(config): resolve Homebrew runtime config dirs (#6639)** (935330d)
- **fix(discord): park fatal gateway preflight failures (#6834)** (624fdfd)
- **fix(matrix): isolate streaming draft state (#6735)** (eb19172)
- **fix(deploy): update gateway ExecStart and remove deprecated OTP fields for v0.8.0 (#6805)** (7e59c2d)
- **fix(channels/whatsapp-web): convert LID to phone reply target for all DMs (#6845)** (90fc018)
- **fix(web): align provider badge with ConfiguredOnlyPicker filter (#6828)** (8e12d4b)
- **fix(doctor): use configured model provider credentials (#6838)** (884fae4)
- **fix(channels/whatsapp): restore Apr-2026 protocol parity via whatsapp-rust 0.6 + namespace revert (#6246) (#6706)** (fa51898)
- **fix: fix link rendering in philosophy.md (#6769)** (121bbb5)
- **fix(deploy): parametrize service template user (#6804)** (d6b2c92)
- **fix(discord): treat thread messages as belonging to parent channel in channel_ids filter (#6829)** (d05c8a9)
- **fix(runtime): transcode Windows shell output from system code page to UTF-8 (#6772)** (04cd70f)
- **fix(channel): persist WeChat context_tokens and expand tilde in config paths (#6238)** (88e8f90)
- **fix(channels): compile no-default feature builds (#6745)** (17891e3)
- **fix(memory): purge_namespace deletes by namespace, not category column (#6777)** (ffaef80)
- **fix(web): validate local provider models during onboarding (#6811)** (ded9abe)
- **fix(security): detect Groq API keys in leak scanner (#6812)** (84413ff)
- **fix(providers): restore Kimi Code vision capability (#6809)** (7f9271c)
- **fix(runtime): add strict tool parsing mode (#6675)** (7437cd0)
- **fix(policy): allow multiline heredocs in SecurityPolicy command splitting (#6816)** (c746998)
- **fix(runtime,channels): keep malformed tool protocol internal (#6736)** (565deaf)
- **fix(tools/web_search): surface DuckDuckGo anomaly-modal block (#6373) (#6625)** (efe4ebf)

### Docs
- **docs(gateway): document web_dist_dir setting and supported env-var override (#6963)** (b33bec8)
- **docs(channels): reconcile against schema and fix stale CLI refs (#6382)** (cbf915d)
- **docs(triage): define terminal resolution labels (#6929)** (e5fbd01)
- **docs(governance): align FND-003 with work-lane policy (#6919)** (c931055)
- **docs(api): document attachment path validation boundary (#6949)** (d827087)
- **docs(review): update milestone fallback owner (#6872)** (bbf958b)
- **docs(skills): add current Python skills guide (#6860)** (24fbc13)
- **docs(channels): document Signal and WhatsApp setup (#6898)** (fcc1545)
- **docs(triage): define contributor pickup semantics (#6903)** (65f922d)
- **docs(triage): define status label semantics (#6899)** (0757925)
- **docs(maintainers): document PR lanes and label policy (#6854)** (6829faa)
- **docs(triage): sync stale exemption label spelling (#6855)** (e0aa285)
- **docs: fix stale RUST_LOG targets (#6692)** (113206a)
- **docs: clarify translation sync policy (#6696)** (f4c28e8)
- **docs(contributing): add architecture contribution map (#6853)** (a8c7277)

### Chore
- **chore(release): remove marketplace sync workflow (#6956)** (1208a45)
- **ci(labeler): narrow ci label matcher scope (#6814)** (cab2f5a)
- **chore: Optimize images (#6748)** (c356f55)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/zeroclaw-labs/zeroclaw?utm_source=github-action)._