diff --git "a/data/prs.json" "b/data/prs.json" --- "a/data/prs.json" +++ "b/data/prs.json" @@ -1,38698 +1,33114 @@ [ { - "additions": 3, - "author": "name5566", - "author_association": "NONE", - "body_excerpt": "## Summary Inject OPENCLAW_SESSION_KEY environment variable into child processes spawned by the exec tool, allowing scripts and skills to reliably identify the current session without relying on model parameter passing. ## Problem Currentl\u2026", - "changed_files": 3, + "additions": 40, + "author": "Takhoffman", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - front-load the multiple-gateways page with a single best recommended rescue-bot setup - add a short rescue-bot quickstart before the lower-level isolation/reference material - keep the main bot on the default profile in the re\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68859", - "created_at": "2026-04-19T07:20:49Z", - "deletions": 0, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69803", + "created_at": "2026-04-21T17:58:47Z", + "deletions": 63, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68859/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68859", - "labels": [], - "merged": false, - "number": 68859, + "files_url": "https://github.com/openclaw/openclaw/pull/69803/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69803", + "labels": [ + "docs", + "gateway", + "maintainer", + "size: XS" + ], + "merged": true, + "number": 69803, "review_comments_count": 0, "state": "open", - "title": "feat(exec): inject OPENCLAW_SESSION_KEY env var for child processes", - "updated_at": "2026-04-19T07:20:49Z" + "title": "docs: front-load rescue bot quickstart", + "updated_at": "2026-04-21T18:00:29Z" }, { - "additions": 81, - "author": "chen-zhang-cs-code", - "author_association": "CONTRIBUTOR", - "body_excerpt": "\ufeffAI-assisted: yes (Codex). ## Summary `cron add --tools` and `cron edit --tools` now share a parser that accepts both comma-separated and whitespace-separated tool lists. This keeps the normal `exec,read,write` path working while also hand\u2026", - "changed_files": 5, + "additions": 125, + "author": "happydog-bot", + "author_association": "NONE", + "body_excerpt": "## Summary Switch the `obsidian` skill from the third-party [yakitrak/obsidian-cli](https://github.com/yakitrak/obsidian-cli) to the official Obsidian CLI that ships with the Obsidian app itself. ## Why - **Official CLI exposes ~90 command\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68858", - "created_at": "2026-04-19T07:20:31Z", - "deletions": 16, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69802", + "created_at": "2026-04-21T17:58:42Z", + "deletions": 42, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68858/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68858", + "files_url": "https://github.com/openclaw/openclaw/pull/69802/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69802", "labels": [ - "cli", "size: S" ], "merged": false, - "number": 68858, - "review_comments_count": 0, + "number": 69802, + "review_comments_count": 2, "state": "open", - "title": "fix(cron): parse PowerShell tools allow list", - "updated_at": "2026-04-19T07:20:46Z" + "title": "skills/obsidian: switch to official Obsidian CLI", + "updated_at": "2026-04-21T18:00:47Z" }, { - "additions": 8, - "author": "tianhaocui", + "additions": 193, + "author": "drobison00", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68090 ## Summary The `node.invoke` timeout was hardcoded to 30 seconds with no way to configure it. Users running long operations through node commands had to accept the fixed timeout. ## Changes 1. **`src/config/types.gateway.ts`**\u2026", + "body_excerpt": "# fix(openshell): pin sandbox file reads ## Summary Describe the problem and fix in 2-5 bullets: - Problem: OpenShell sandbox reads validated the requested path and then reread the unresolved host path, leaving a race window where a swappe\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68857", - "created_at": "2026-04-19T07:19:47Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69798", + "created_at": "2026-04-21T17:38:36Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68857/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68857", + "files_url": "https://github.com/openclaw/openclaw/pull/69798/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69798", "labels": [ - "gateway", - "size: XS" + "maintainer", + "size: S" ], "merged": false, - "number": 68857, - "review_comments_count": 1, + "number": 69798, + "review_comments_count": 5, "state": "open", - "title": "feat: add gateway.nodes.invokeTimeoutMs config option", - "updated_at": "2026-04-19T07:19:59Z" + "title": "fix(openshell): pin sandbox file reads", + "updated_at": "2026-04-21T17:59:48Z" }, { - "additions": 323, - "author": "kagura-agent", + "additions": 67, + "author": "drobison00", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #14593 ## Problem When running `openclaw onboard` in a Docker container and selecting a brew-based skill, the wizard shows a confusing \"Homebrew recommended\" prompt even though: 1. The existing fallback in `skills-install.ts` already\u2026", - "changed_files": 4, + "body_excerpt": "# fix(openshell): pin host writes to sandbox root ## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: `OpenShellFsBridge.writeFile` validated a target path and then performed `mkdir`, temp-file creation, and rename through t\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68856", - "created_at": "2026-04-19T07:15:46Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69797", + "created_at": "2026-04-21T17:32:01Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68856/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68856", + "files_url": "https://github.com/openclaw/openclaw/pull/69797/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69797", "labels": [ - "commands", - "agents", - "size: M" + "maintainer", + "size: S" ], "merged": false, - "number": 68856, + "number": 69797, "review_comments_count": 2, "state": "open", - "title": "fix: skip brew prompt on Linux when native package manager is available", - "updated_at": "2026-04-19T07:18:11Z" + "title": "fix(openshell): pin host writes to sandbox root", + "updated_at": "2026-04-21T18:00:30Z" }, { - "additions": 15, - "author": "tianhaocui", + "additions": 89, + "author": "drobison00", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68309 ## Summary Mistral (and potentially other providers) may send thinking content as an object in `choice.delta.content` rather than a string. Without a type guard, the object is coerced to `\"[object Object]\"` when appended to th\u2026", - "changed_files": 2, - "cluster_id": "cluster-68309-3", - "cluster_ids": [ - "cluster-68309-3" - ], - "cluster_role": "member", + "body_excerpt": "# fix(gateway): derive loopback owner context from token ## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: MCP loopback requests accepted owner context from a child-process-controlled header, so a non-owner bearer could cl\u2026", + "changed_files": 7, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68855", - "created_at": "2026-04-19T07:15:15Z", - "deletions": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69796", + "created_at": "2026-04-21T17:30:42Z", + "deletions": 52, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68855/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68855", + "files_url": "https://github.com/openclaw/openclaw/pull/69796/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69796", "labels": [ - "app: web-ui", + "gateway", "agents", - "size: XS" + "maintainer", + "size: S" ], "merged": false, - "number": 68855, - "review_comments_count": 1, + "number": 69796, + "review_comments_count": 2, "state": "open", - "title": "fix: guard against non-string content delta and thinking blocks", - "updated_at": "2026-04-19T07:17:06Z" + "title": "fix(gateway): derive loopback owner context from token", + "updated_at": "2026-04-21T17:33:41Z" }, { - "additions": 12, - "author": "armorbreak001", - "author_association": "NONE", - "body_excerpt": "## Summary Fixes #68661 Commands with `<<` heredoc syntax trigger an approval prompt in allowlist mode even when the target binary is in the allowlist. This regressed from the original fix (#13811) after a security hardening (f23da067). ##\u2026", - "changed_files": 2, - "cluster_id": "cluster-68661-4", - "cluster_ids": [ - "cluster-68661-4" - ], - "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68854", - "created_at": "2026-04-19T07:08:12Z", - "deletions": 5, + "additions": 84, + "author": "drobison00", + "author_association": "CONTRIBUTOR", + "body_excerpt": "# fix(exec): block heredoc parameter expansion ## Summary - Problem: The exec allowlist analyzer rejected `` `...` ``, `$(`, and `${...}` in unquoted heredocs but still allowed plain shell parameter expansion forms like `$OPENAI_API_KEY`.\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69795", + "created_at": "2026-04-21T17:28:27Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68854/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68854", + "files_url": "https://github.com/openclaw/openclaw/pull/69795/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69795", "labels": [ - "agents", + "maintainer", "size: XS" ], "merged": false, - "number": 68854, - "review_comments_count": 3, + "number": 69795, + "review_comments_count": 1, "state": "open", - "title": "fix(security): allow quoted heredocs in allowlist mode without extra approval", - "updated_at": "2026-04-19T07:11:18Z" + "title": "fix(exec): block heredoc parameter expansion", + "updated_at": "2026-04-21T17:58:29Z" }, { - "additions": 153, - "author": "grimmjoww", - "author_association": "NONE", - "body_excerpt": "## Summary Addresses #40932 (gateway restart fails from exec tool) without reintroducing the Windows regression that caused closed PR #68507 to be reverted. ## Background PR #68507 tried to fix #40932 by adding a SIGUSR1 fast path to `trig\u2026", - "changed_files": 5, + "additions": 252, + "author": "drobison00", + "author_association": "CONTRIBUTOR", + "body_excerpt": "# fix(tlon): guard memex upload target ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: ` - keep this change visual-only, without chang\u2026", - "changed_files": 3, + "additions": 73, + "author": "gumadeiras", + "author_association": "MEMBER", + "body_excerpt": "## Summary - Problem: Discord bundled registration pays a broad runtime barrel load during runtime wiring, and built bundled sidecars still pay jiti overhead on non-Windows platforms. - Why it matters: setup-runtime registration is on ligh\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68850", - "created_at": "2026-04-19T06:57:08Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69791", + "created_at": "2026-04-21T16:56:50Z", + "deletions": 44, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68850/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68850", + "files_url": "https://github.com/openclaw/openclaw/pull/69791/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69791", "labels": [ - "app: web-ui", + "channel: discord", + "scripts", + "maintainer", "size: S" ], "merged": false, - "number": 68850, - "review_comments_count": 1, + "number": 69791, + "review_comments_count": 2, "state": "open", - "title": "fix(ui): clean synthetic session selector labels", - "updated_at": "2026-04-19T07:02:28Z" + "title": "perf: speed up discord channel registration", + "updated_at": "2026-04-21T17:56:31Z" }, { - "additions": 1, - "author": "tianhaocui", + "additions": 66, + "author": "Takhoffman", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68788 ## Summary `resolveWindowsCommandShim` resolves `.cmd` shims for Node `spawn()` on Windows. The allowlist includes `npm`, `pnpm`, `yarn`, `npx` but is missing `claude`, causing `spawn claude ENOENT` when routing to the `claude\u2026", + "body_excerpt": "## Summary - clarify that most rescue-bot setups should keep the main bot on the default profile and use only a `rescue` profile for the secondary gateway - explain what `openclaw --profile rescue onboard` actually changes during onboardin\u2026", "changed_files": 1, - "cluster_id": "cluster-68788-5", - "cluster_ids": [ - "cluster-68788-5" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68849", - "created_at": "2026-04-19T06:56:24Z", - "deletions": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69788", + "created_at": "2026-04-21T16:49:56Z", + "deletions": 28, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68849/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68849", + "files_url": "https://github.com/openclaw/openclaw/pull/69788/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69788", "labels": [ + "docs", + "gateway", + "maintainer", "size: XS" ], - "merged": false, - "number": 68849, - "review_comments_count": 0, - "state": "open", - "title": "fix: add \"claude\" to Windows cmdCommands shim allowlist", - "updated_at": "2026-04-19T06:57:11Z" + "merged": true, + "number": 69788, + "review_comments_count": 1, + "state": "closed", + "title": "docs: clarify rescue bot gateway setup", + "updated_at": "2026-04-21T17:29:43Z" }, { - "additions": 100, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: \\`maybeWakeNodeWithApns\\` (nodes.ts:308-416) sets \\`nodeWakeById\\` speculatively at L312-313 (for in-flight coalescing) before the L333 \\`loadApnsRegistration\\` check. On the no-registration early-return path the\u2026", - "changed_files": 2, + "additions": 80, + "author": "gumadeiras", + "author_association": "MEMBER", + "body_excerpt": "## Summary - Problem: Telegram bundled registration paid a broad runtime barrel load during runtime wiring and jiti overhead when loading built bundled sidecars. - Why it matters: setup-runtime registration is on lightweight startup/plugin\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68848", - "created_at": "2026-04-19T06:37:06Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69786", + "created_at": "2026-04-21T16:36:28Z", + "deletions": 48, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68848/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68848", + "files_url": "https://github.com/openclaw/openclaw/pull/69786/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69786", "labels": [ - "gateway", + "channel: telegram", + "scripts", + "maintainer", "size: S" ], - "merged": false, - "number": 68848, - "review_comments_count": 0, - "state": "open", - "title": "fix(gateway): clear nodeWakeById on no-registration early-return", - "updated_at": "2026-04-19T06:38:18Z" + "merged": true, + "number": 69786, + "review_comments_count": 2, + "state": "closed", + "title": "perf: speed up telegram channel registration", + "updated_at": "2026-04-21T17:28:29Z" }, { - "additions": 119, - "author": "kagura-agent", + "additions": 113, + "author": "Patrick-Erichsen", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68827 ## Problem MCP server processes (npx-based) accumulate in memory after cron-triggered spawned agent sessions complete. Each process holds ~96-100MB RSS. After several cron cycles, this results in 100+ zombie MCP processes cons\u2026", - "changed_files": 2, + "body_excerpt": "## Summary `.artifacts/run-node-build.lock` only gets cleaned up via a `finally` in `withRunNodeBuildLock`. If the wrapper is killed by ^C, SIGTERM, or a crashed parent before that `finally` runs, the lock dir is orphaned and subsequent `p\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68846", - "created_at": "2026-04-19T06:34:18Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69785", + "created_at": "2026-04-21T16:12:35Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68846/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68846", + "files_url": "https://github.com/openclaw/openclaw/pull/69785/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69785", "labels": [ - "agents", + "scripts", + "maintainer", "size: S" ], - "merged": false, - "number": 68846, + "merged": true, + "number": 69785, "review_comments_count": 0, - "state": "open", - "title": "fix: reap MCP child processes when spawned session run ends", - "updated_at": "2026-04-19T06:35:29Z" + "state": "closed", + "title": "fix(dev): release run-node build lock on SIGINT/SIGTERM/exit", + "updated_at": "2026-04-21T16:33:20Z" }, { - "additions": 12, - "author": "desty", - "author_association": "NONE", - "body_excerpt": "## Summary - unskip the two quarantined Telegram sticker e2e tests tracked in #50185 - mock `openclaw/plugin-sdk/agent-runtime` in the Telegram media e2e harness so sticker-only flows stay deterministic in CI - keep the existing assertions\u2026", - "changed_files": 2, + "additions": 91, + "author": "eleqtrizit", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - validate Synology Chat outbound `file_url` values before they are forwarded to the NAS webhook - keep the change limited to the existing webhook-based media path ## Changes - add a shared SSRF-policy check in `extensions/synol\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68845", - "created_at": "2026-04-19T06:34:08Z", - "deletions": 2, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68845/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68845", + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69784", + "created_at": "2026-04-21T16:10:20Z", + "deletions": 4, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69784/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69784", "labels": [ - "channel: telegram", - "size: XS" + "docs", + "maintainer", + "size: S" ], - "merged": false, - "number": 68845, + "merged": true, + "number": 69784, "review_comments_count": 0, - "state": "open", - "title": "Telegram: unskip sticker e2e tests", - "updated_at": "2026-04-19T06:34:21Z" + "state": "closed", + "title": "fix(synology): validate webhook file urls", + "updated_at": "2026-04-21T18:00:29Z" }, { - "additions": 91, - "author": "kesslerio", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: newline chunk mode split every blank-line-separated paragraph into its own WhatsApp message, even when multiple paragraphs still fit under the limit. - Why it matters: short messages were over-split, and longer messag\u2026", - "changed_files": 3, + "additions": 325, + "author": "gumadeiras", + "author_association": "MEMBER", + "body_excerpt": "## Summary - Problem: Matrix bundled channel registration was paying the broad `runtime-api.js` and setup/doctor surface import costs on the cold register path. - Why it matters: Matrix plugin startup/registration is already dominated by J\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68844", - "created_at": "2026-04-19T06:31:41Z", - "deletions": 16, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69782", + "created_at": "2026-04-21T16:02:00Z", + "deletions": 23, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68844/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68844", + "files_url": "https://github.com/openclaw/openclaw/pull/69782/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69782", "labels": [ - "size: S" + "channel: matrix", + "maintainer", + "size: M" ], - "merged": false, - "number": 68844, - "review_comments_count": 0, - "state": "open", - "title": "fix(outbound): pack newline-mode paragraphs up to limit", - "updated_at": "2026-04-19T06:34:29Z" + "merged": true, + "number": 69782, + "review_comments_count": 3, + "state": "closed", + "title": "perf(matrix): narrow register-time runtime surface", + "updated_at": "2026-04-21T16:50:58Z" }, { - "additions": 174, - "author": "kesslerio", + "additions": 438, + "author": "soloclz", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: bound ACP sessions stayed attached after the runtime `cwd` disappeared, so retries kept failing against a dead session. - Why it matters: affected threads remain wedged until someone manually clears the stale binding.\u2026", - "changed_files": 5, + "body_excerpt": "## Summary - cache `buildPluginCompatibilityNotices` results at `/.openclaw/plugin-compat-cache.json`, keyed by a sha256 of the openclaw compatibility host version plus the normalized plugins config - warm `openclaw status` r\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68843", - "created_at": "2026-04-19T06:31:41Z", - "deletions": 13, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69781", + "created_at": "2026-04-21T16:01:57Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68843/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68843", + "files_url": "https://github.com/openclaw/openclaw/pull/69781/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69781", "labels": [ - "size: S" + "size: M" ], "merged": false, - "number": 68843, - "review_comments_count": 2, + "number": 69781, + "review_comments_count": 5, "state": "open", - "title": "fix(acp): treat missing cwd as stale bound session", - "updated_at": "2026-04-19T06:40:42Z" + "title": "perf(status): cache plugin compatibility notices by config + openclaw version", + "updated_at": "2026-04-21T16:50:14Z" }, { - "additions": 108, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: `costUsageCache` in `src/gateway/server-methods/usage.ts:65` has no delete/prune/evict path. The 30s TTL only gates stale reads; on a miss after expiry, `set()` overwrites the same key but never removes stale keys\u2026", - "changed_files": 2, + "additions": 437, + "author": "osolmaz", + "author_association": "MEMBER", + "body_excerpt": "## Summary Maintainers need a repeatable way to decide whether a PR or issue is a duplicate. This adds a new skill that turns that work into a concrete manual. It explains how to gather evidence with ghreplica and pr-search, how to group r\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68842", - "created_at": "2026-04-19T06:31:18Z", - "deletions": 3, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69780", + "created_at": "2026-04-21T15:57:37Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68842/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68842", + "files_url": "https://github.com/openclaw/openclaw/pull/69780/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69780", "labels": [ - "gateway", - "size: S" + "maintainer", + "size: M" ], "merged": false, - "number": 68842, - "review_comments_count": 2, + "number": 69780, + "review_comments_count": 7, "state": "open", - "title": "fix(gateway): bound costUsageCache with MAX + FIFO eviction", - "updated_at": "2026-04-19T06:43:59Z" + "title": "docs(skills): add duplicate triage maintainer skill", + "updated_at": "2026-04-21T16:22:31Z" }, { - "additions": 248, - "author": "kagura-agent", + "additions": 4, + "author": "chinar-amrutkar", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68766 ## Problem Feishu WebSocket connection doesn't recover after transient `tenant_access_token` refresh failure. The current reconnection logic retries only once \u2014 if that retry also fails, the plugin gives up entirely, causing h\u2026", - "changed_files": 3, + "body_excerpt": "## Summary The `#confirmPersistedOffset()` method calls `getUpdates({ offset, limit: 1, timeout: 0 })` at startup before main polling begins. This confirmation call was causing 409 Conflict errors when Telegram had stale polling state from\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68840", - "created_at": "2026-04-19T06:24:24Z", - "deletions": 13, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69779", + "created_at": "2026-04-21T15:56:47Z", + "deletions": 18, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68840/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68840", + "files_url": "https://github.com/openclaw/openclaw/pull/69779/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69779", "labels": [ - "channel: feishu", - "size: M" + "channel: telegram", + "size: XS" ], "merged": false, - "number": 68840, + "number": 69779, "review_comments_count": 3, "state": "open", - "title": "fix: add exponential backoff retry for Feishu WebSocket reconnection", - "updated_at": "2026-04-19T07:11:39Z" + "title": "fix(telegram): remove offset confirmation getUpdates call to prevent 409 self-conflict", + "updated_at": "2026-04-21T16:09:18Z" }, { - "additions": 121, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: drain IIFE finally (`drain.ts:263-271`) unconditionally calls `FOLLOWUP_QUEUES.delete(key)` + `clearFollowupDrainCallback(key)` based on the key alone, without checking whether the captured `queue` still matches t\u2026", - "changed_files": 2, + "additions": 467, + "author": "drobison00", + "author_association": "CONTRIBUTOR", + "body_excerpt": "# fix(gateway): require auth for control UI avatar route ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `B\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68839", - "created_at": "2026-04-19T06:24:08Z", - "deletions": 2, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69775", + "created_at": "2026-04-21T15:50:35Z", + "deletions": 85, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68839/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68839", + "files_url": "https://github.com/openclaw/openclaw/pull/69775/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69775", "labels": [ - "size: S" + "app: web-ui", + "gateway", + "maintainer", + "size: L" ], "merged": false, - "number": 68839, - "review_comments_count": 0, + "number": 69775, + "review_comments_count": 4, "state": "open", - "title": "fix(auto-reply): guard FOLLOWUP_QUEUES delete against late drain finally", - "updated_at": "2026-04-19T06:25:33Z" + "title": "fix(gateway): require auth for control UI avatar route", + "updated_at": "2026-04-21T18:00:45Z" }, { - "additions": 25, - "author": "SimbaKingjoe", - "author_association": "NONE", - "body_excerpt": "# fix(active-memory): skip non-string entries in pluginConfig.agents during normalization ## Summary - **Problem:** The `normalizePluginConfig` function previously called `.map((agentId) => agentId.trim())` directly on `raw.agents` without\u2026", - "changed_files": 2, + "additions": 47, + "author": "drobison00", + "author_association": "CONTRIBUTOR", + "body_excerpt": "# fix: require owner identity for owner-enforced commands ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68837", - "created_at": "2026-04-19T06:23:23Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69774", + "created_at": "2026-04-21T15:49:12Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68837/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68837", + "files_url": "https://github.com/openclaw/openclaw/pull/69774/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69774", "labels": [ - "size: XS" + "maintainer", + "size: S" ], - "merged": false, - "number": 68837, + "merged": true, + "number": 69774, "review_comments_count": 0, - "state": "open", - "title": "fix(active-memory): skip non-string entries in pluginConfig.agents du\u2026", - "updated_at": "2026-04-19T06:24:54Z" + "state": "closed", + "title": "fix: require owner identity for owner-enforced commands", + "updated_at": "2026-04-21T16:22:28Z" }, { - "additions": 6, - "author": "neo1027144-creator", + "additions": 71, + "author": "drobison00", "author_association": "CONTRIBUTOR", - "body_excerpt": "AI-assisted: yes (Antigravity). ## Summary Add missing success log lines for all six Telegram media send operations: sendAnimation, sendPhoto, sendVideo, sendVoice, sendAudio, and sendDocument. The text path (sendMessage) already emits ele\u2026", - "changed_files": 1, + "body_excerpt": "# fix(control-ui): block remote image loads ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker:\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68836", - "created_at": "2026-04-19T06:17:08Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69773", + "created_at": "2026-04-21T15:47:28Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68836/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68836", + "files_url": "https://github.com/openclaw/openclaw/pull/69773/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69773", "labels": [ - "channel: telegram", - "size: XS" + "app: web-ui", + "gateway", + "maintainer", + "size: S" ], - "merged": false, - "number": 68836, - "review_comments_count": 0, - "state": "open", - "title": "fix(telegram): add success log lines for media send operations [AI-assisted]", - "updated_at": "2026-04-19T06:18:06Z" + "merged": true, + "number": 69773, + "review_comments_count": 1, + "state": "closed", + "title": "fix(control-ui): block remote image loads", + "updated_at": "2026-04-21T16:30:33Z" }, { - "additions": 148, - "author": "hxy91819", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: macOS `ModelCatalogLoader` read `models.generated.ts/js` and evaluated the extracted payload as JavaScript, which triggered code scanning alert #187 (`swift/unsafe-js-eval`). - Why it matters: even though the main pat\u2026", - "changed_files": 2, + "additions": 139, + "author": "VACInc", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: `loadSessionStore()` fell back to helper defaults when callers did not pass `opts.maintenanceConfig`, so load-time maintenance could ignore the real resolved `session.maint\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68835", - "created_at": "2026-04-19T06:16:11Z", - "deletions": 23, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69772", + "created_at": "2026-04-21T15:42:31Z", + "deletions": 29, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68835/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68835", + "files_url": "https://github.com/openclaw/openclaw/pull/69772/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69772", "labels": [ - "app: macos", - "maintainer", "size: S" ], "merged": false, - "number": 68835, - "review_comments_count": 3, + "number": 69772, + "review_comments_count": 0, "state": "open", - "title": "fix(macos): stop evaluating model catalogs as JS", - "updated_at": "2026-04-19T06:20:01Z" + "title": "fix: honor resolved session maintenance config on load", + "updated_at": "2026-04-21T16:02:00Z" }, { - "additions": 235, - "author": "SARAMALI15792", + "additions": 62, + "author": "obviyus", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68776 - Prevent Discord inbound messages from silently hanging forever when `type: \"acp\"` bindings are configured on fresh gateway boot. ## What & Why **Problem:** Discord channel preflights hang silently when ACP binding\u2026", - "changed_files": 7, + "body_excerpt": "Normalize generic `message` tool trace entries to the resolved cron channel when they match the resolved delivery target. This keeps run-log audits readable without changing delivery behavior. Tests: - `pnpm test src/cron/isolated-agent/ru\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68834", - "created_at": "2026-04-19T06:01:45Z", - "deletions": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69771", + "created_at": "2026-04-21T15:41:38Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68834/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68834", + "files_url": "https://github.com/openclaw/openclaw/pull/69771/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69771", "labels": [ - "gateway", - "size: M", - "extensions: acpx" + "maintainer", + "size: S" ], "merged": false, - "number": 68834, - "review_comments_count": 9, + "number": 69771, + "review_comments_count": 0, "state": "open", - "title": "fix: prevent Discord ACP binding silent hang on fresh gateway boot", - "updated_at": "2026-04-19T06:43:41Z" + "title": "Fix cron message trace channel", + "updated_at": "2026-04-21T15:44:10Z" }, { - "additions": 50, - "author": "ayeshakhalid192007-dev", + "additions": 409, + "author": "Men-cotton", "author_association": "NONE", - "body_excerpt": "## What & Why Telegram `customCommands` defined by operators were silently dropped on startup whenever the combined native + plugin + custom command list exceeded Telegram's 100-command or 5700-char `setMyCommands` payload cap. `allCommand\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 21, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68833", - "created_at": "2026-04-19T05:41:21Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69766", + "created_at": "2026-04-21T15:28:35Z", + "deletions": 106, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68833/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68833", + "files_url": "https://github.com/openclaw/openclaw/pull/69766/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69766", "labels": [ "channel: telegram", - "size: S" + "scripts", + "agents", + "size: L" ], "merged": false, - "number": 68833, - "review_comments_count": 0, + "number": 69766, + "review_comments_count": 2, "state": "open", - "title": "fix(telegram): preserve customCommands priority in menu budget trimming", - "updated_at": "2026-04-19T05:44:00Z" + "title": "Plugins: remove hardcoded Telegram and web-search IDs", + "updated_at": "2026-04-21T15:39:02Z" }, { - "additions": 71, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes issue where --tools CSV argument stores space-separated string instead of array on Windows PowerShell. ## Root Cause On Windows PowerShell, commas in --tools argument are parsed as PowerShell array separators and re-joined\u2026", - "changed_files": 4, + "additions": 4, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68832", - "created_at": "2026-04-19T05:25:45Z", - "deletions": 13, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69765", + "created_at": "2026-04-21T15:26:36Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68832/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68832", + "files_url": "https://github.com/openclaw/openclaw/pull/69765/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69765", "labels": [ - "cli", "agents", - "size: S", + "size: XS", "r: too-many-prs" ], "merged": false, - "number": 68832, + "number": 69765, "review_comments_count": 0, "state": "closed", - "title": "fix(cron): support space-separated tools list for PowerShell compatibility", - "updated_at": "2026-04-19T05:27:04Z" + "title": "Fix/minimax 529 overloaded failover", + "updated_at": "2026-04-21T15:34:17Z" }, { - "additions": 6, - "author": "melderan", + "additions": 37, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Problem `getCachedPluginJitiLoader` scopes its cache key with `jitiFilename ?? modulePath`, which creates a separate JITI instance for every plugin file \u2014 even when all plugins have identical `{tryNative, aliasMap}` configurations. Each\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68831", - "created_at": "2026-04-19T05:16:56Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69764", + "created_at": "2026-04-21T15:26:19Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68831/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68831", + "files_url": "https://github.com/openclaw/openclaw/pull/69764/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69764", "labels": [ - "size: XS" + "channel: telegram", + "app: web-ui", + "cli", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68831, - "review_comments_count": 1, - "state": "open", - "title": "perf: share JITI instances across plugins with identical alias configs", - "updated_at": "2026-04-19T05:19:45Z" + "number": 69764, + "review_comments_count": 2, + "state": "closed", + "title": "Fix/logging subsystem optional chain", + "updated_at": "2026-04-21T15:34:18Z" }, { - "additions": 8, - "author": "tianhaocui", + "additions": 1, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "Fixes #68166 ## Summary `mergeHybridResults()` computes per-result `vectorScore` (cosine similarity) and `textScore` (BM25) internally but drops them when building the final output array. This prevents consumers from inspecting individual\u2026", - "changed_files": 3, - "cluster_id": "cluster-68166-3", - "cluster_ids": [ - "cluster-68166-3" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68830", - "created_at": "2026-04-19T05:10:09Z", - "deletions": 0, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68830/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68830", - "labels": [ - "extensions: memory-core", - "size: XS" - ], - "merged": false, - "number": 68830, - "review_comments_count": 0, - "state": "open", - "title": "fix(memory): expose vectorScore and textScore in hybrid search results", - "updated_at": "2026-04-19T05:11:11Z" - }, - { - "additions": 259, - "author": "tianhaocui", - "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68760 ## Summary The Control UI writes the runtime sentinel `\"last\"` as a literal value into `jobs.json` when saving a cron job with an empty delivery channel field. This causes user-configured channels (e.g. `\"telegram\"`) to be ove\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68829", - "created_at": "2026-04-19T05:07:37Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69763", + "created_at": "2026-04-21T15:26:03Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68829/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68829", + "files_url": "https://github.com/openclaw/openclaw/pull/69763/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69763", "labels": [ "app: web-ui", - "size: M" + "gateway", + "size: XS", + "r: too-many-prs" ], - "merged": true, - "number": 68829, - "review_comments_count": 1, + "merged": false, + "number": 69763, + "review_comments_count": 0, "state": "closed", - "title": "fix(cron): stop persisting \"last\" as literal delivery channel value", - "updated_at": "2026-04-19T06:39:40Z" + "title": "Fix/exec approvals source field", + "updated_at": "2026-04-21T15:37:09Z" }, { - "additions": 0, - "author": "tianhaocui", + "additions": 46, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "Fixes #68661 ## Summary Removes the overly broad `requiresHeredocApproval` gate in `bash-tools.exec-host-gateway.ts` that forces an approval prompt for **all** heredoc commands in allowlist mode, even when the target binary is already in t\u2026", - "changed_files": 1, - "cluster_id": "cluster-68661-4", - "cluster_ids": [ - "cluster-68661-4" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68824", - "created_at": "2026-04-19T04:50:42Z", - "deletions": 11, + "body_excerpt": "fix(telegram): bypass model catalog cache in /model picker (#69750) The Telegram /model picker was calling loadModelCatalog without useCache: false, which caused it to serve stale model lists after config changes. Other picker UI paths (mo\u2026", + "changed_files": 4, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69761", + "created_at": "2026-04-21T15:23:04Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68824/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68824", + "files_url": "https://github.com/openclaw/openclaw/pull/69761/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69761", "labels": [ - "agents", - "size: XS" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68824, + "number": 69761, "review_comments_count": 0, - "state": "open", - "title": "fix: remove blanket heredoc approval gate in allowlist mode", - "updated_at": "2026-04-19T05:04:56Z" + "state": "closed", + "title": "fix(telegram): bypass model catalog cache in /model picker (#69750)", + "updated_at": "2026-04-21T15:34:16Z" }, { - "additions": 166, - "author": "armorbreak001", - "author_association": "NONE", - "body_excerpt": "## Summary Hardcoded embedding constants (, , etc.) are hard to tune when using rate-limited providers like Gemini. This makes them configurable via `openclaw.json`. ## Changes - Renamed module-level constants to `DEFAULT_*` and exported t\u2026", - "changed_files": 3, + "additions": 12, + "author": "Patrick-Erichsen", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Two small follow-ups to #69553: - **Security disclaimer**: drop the yellow warning banner and \u26a0 icon, go back to original text. - **Searchable autocompletes** on the remaining onboarding pickers with long dynamic option lists: -\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68822", - "created_at": "2026-04-19T04:46:24Z", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69760", + "created_at": "2026-04-21T15:21:20Z", "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68822/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68822", + "files_url": "https://github.com/openclaw/openclaw/pull/69760/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69760", "labels": [ - "extensions: memory-core", - "size: S" + "maintainer", + "size: XS" ], - "merged": false, - "number": 68822, - "review_comments_count": 8, - "state": "open", - "title": "feat(memory): make embedding retry/concurrency parameters configurable", - "updated_at": "2026-04-19T06:42:33Z" + "merged": true, + "number": 69760, + "review_comments_count": 0, + "state": "closed", + "title": "onboard: plain-prose security disclaimer + searchable pickers", + "updated_at": "2026-04-21T15:55:14Z" }, { - "additions": 3199, - "author": "Ittiz", + "additions": 2349, + "author": "hugh-agent", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: assistant replies with managed media, especially image-only replies and agent-run audio replies, could render live in webchat/control UI but fail to persist correctly into transcript/history. - Why it matters: users c\u2026", - "changed_files": 24, + "body_excerpt": null, + "changed_files": 14, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68821", - "created_at": "2026-04-19T04:39:37Z", - "deletions": 158, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68821/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68821", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69757", + "created_at": "2026-04-21T15:14:12Z", + "deletions": 22, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69757/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69757", "labels": [ - "app: web-ui", - "gateway", + "channel: telegram", "size: XL" ], "merged": false, - "number": 68821, + "number": 69757, "review_comments_count": 4, - "state": "closed", - "title": "fix(gateway,ui): restore managed media transcript persistence in webchat", - "updated_at": "2026-04-19T05:16:01Z" + "state": "open", + "title": "Fix Telegram reply mode by chat type", + "updated_at": "2026-04-21T15:21:34Z" }, { - "additions": 3, - "author": "name5566", - "author_association": "NONE", - "body_excerpt": "## Summary Inject OPENCLAW_SESSION_KEY environment variable into child processes spawned by the exec tool, allowing scripts and skills to reliably identify the current session without relying on model parameter passing. ## Problem Currentl\u2026", - "changed_files": 3, + "additions": 122, + "author": "hclsys", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem Since 2026.4.1, auth-profiles.json entries with \\`\\\"type\\\": \\\"aws-sdk\\\"\\` are rejected as \\`invalid_type\\` and dropped during store load. This silently breaks Amazon Bedrock on EC2 instances that rely on IMDS (instance metadata)\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68820", - "created_at": "2026-04-19T04:38:23Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69753", + "created_at": "2026-04-21T15:04:48Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68820/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68820", + "files_url": "https://github.com/openclaw/openclaw/pull/69753/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69753", "labels": [ - "docs", "agents", - "size: XS" - ], - "merged": false, - "number": 68820, - "review_comments_count": 0, - "state": "closed", - "title": "feat(exec): inject OPENCLAW_SESSION_KEY env var for child processes", - "updated_at": "2026-04-19T05:27:33Z" - }, - { - "additions": 317, - "author": "HaseebDev", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: On Windows, every `provider=claude-cli` spawn fails at the supervisor with `spawn claude ENOENT`; the fallback chain cascades and the user sees `Embedded agent failed before reply`. - Why it matters: Claude CLI is unu\u2026", - "changed_files": 3, - "cluster_id": "cluster-68788-5", - "cluster_ids": [ - "cluster-68788-5" - ], - "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68819", - "created_at": "2026-04-19T04:31:34Z", - "deletions": 4, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68819/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68819", - "labels": [ - "size: M" + "size: S" ], "merged": false, - "number": 68819, - "review_comments_count": 7, + "number": 69753, + "review_comments_count": 1, "state": "open", - "title": "fix: resolve Windows .cmd shims to underlying .exe before spawn", - "updated_at": "2026-04-19T07:11:44Z" + "title": "fix(auth-profiles): silently skip aws-sdk SDK-managed markers during store load", + "updated_at": "2026-04-21T15:14:59Z" }, { - "additions": 13, - "author": "kagura-agent", - "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68788 On Windows, spawning `claude` (and similar CLI tools installed via npm) fails with `ENOENT` because `resolveWindowsCommandShim` only appends `.cmd` for a hardcoded allowlist of commands (`npm`, `pnpm`, `yarn`, `npx`). This PR\u2026", - "changed_files": 2, - "cluster_id": "cluster-68788-5", + "additions": 75, + "author": "novajune", + "author_association": "NONE", + "body_excerpt": "## Summary - prefer `threadId` over `replyToId` when Slack outbound delivery sends threaded replies - preserve derived thread-scoped session routing when a broader session key is provided - add regression coverage for outbound adapter prec\u2026", + "changed_files": 4, + "cluster_id": "cluster-69429-2", "cluster_ids": [ - "cluster-68788-5" + "cluster-69429-2" ], "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68817", - "created_at": "2026-04-19T04:26:02Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69752", + "created_at": "2026-04-21T15:03:32Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68817/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68817", + "files_url": "https://github.com/openclaw/openclaw/pull/69752/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69752", "labels": [ - "size: XS" + "channel: slack", + "gateway", + "size: S" ], "merged": false, - "number": 68817, + "number": 69752, "review_comments_count": 0, "state": "open", - "title": "fix: add claude, codex, hermes to Windows .cmd shim allowlist", - "updated_at": "2026-04-19T04:26:48Z" + "title": "fix(slack): preserve thread-specific routing", + "updated_at": "2026-04-21T15:14:59Z" }, { - "additions": 210, - "author": "aniaan", + "additions": 62, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** Moonshot just released Kimi K2.6 and the K2.6-only `thinking.keep` parameter for full multi-turn `reasoning_content` retention; the bundled plugin still defaulted to K2.5 and had no way to opt into keep. - **Why i\u2026", - "changed_files": 21, + "body_excerpt": "## Problem Ollama returns tool_call arguments as a JSON string when using some models (e.g. gemma4:26b). `buildAssistantMessage` previously passed the raw string directly to downstream handlers, causing tool invocations to receive broken t\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68816", - "created_at": "2026-04-19T04:23:08Z", - "deletions": 37, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69751", + "created_at": "2026-04-21T15:00:52Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68816/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68816", + "files_url": "https://github.com/openclaw/openclaw/pull/69751/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69751", "labels": [ - "docs", - "gateway", - "agents", - "size: S", - "extensions: moonshot" + "channel: zalo", + "app: web-ui", + "size: S" ], "merged": false, - "number": 68816, - "review_comments_count": 3, + "number": 69751, + "review_comments_count": 1, "state": "open", - "title": "feat(moonshot): default to Kimi K2.6 with K2.6-only thinking.keep support", - "updated_at": "2026-04-19T04:57:29Z" + "title": "fix(ollama): deserialize string tool_call arguments in buildAssistantMessage", + "updated_at": "2026-04-21T15:23:27Z" }, { - "additions": 43, - "author": "rubencu", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - split the source docs into an explicit `pnpm gateway:watch` dev loop and a separate built-dist / onboarding flow - restore `pnpm openclaw setup` as the first-run/reset step for source dev, instead of implying it belongs in eve\u2026", - "changed_files": 9, + "additions": 9, + "author": "wangshu94", + "author_association": "NONE", + "body_excerpt": "## Summary `chat.send` never registered the run in `chatRunState.registry`, so lifecycle `phase: \"error\"` events were swallowed by `skipChatErrorFinal` in the gateway handler. TUI/Web UI hung in `waiting` forever on any agent failure (401\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68814", - "created_at": "2026-04-19T04:03:26Z", - "deletions": 14, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69747", + "created_at": "2026-04-21T14:54:52Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68814/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68814", + "files_url": "https://github.com/openclaw/openclaw/pull/69747/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69747", "labels": [ - "docs", - "cli", + "app: web-ui", + "gateway", "size: XS" ], - "merged": true, - "number": 68814, - "review_comments_count": 0, - "state": "closed", - "title": "docs: clarify source Control UI dev/build flow", - "updated_at": "2026-04-19T06:48:32Z" + "merged": false, + "number": 69747, + "review_comments_count": 1, + "state": "open", + "title": "fix(gateway): surface chat.send lifecycle errors to clients", + "updated_at": "2026-04-21T16:10:11Z" }, { - "additions": 192, - "author": "soloclz", + "additions": 238, + "author": "ACMILANTX", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: configs for the bundled `comfy` provider were rejected when placed under `models.providers.comfy`, even when they matched the documented example and the plugin manifest already declared a `configSchema`. - Why it matt\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - Add manifest-declared slot dependencies for plugin activation. - Include selected slot owners during scoped primary plugin CLI loading. - Mark memory-wiki as requiring the active memory slot so bridge/status/doctor can see pub\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68813", - "created_at": "2026-04-19T03:55:16Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69744", + "created_at": "2026-04-21T14:43:46Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68813/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68813", + "files_url": "https://github.com/openclaw/openclaw/pull/69744/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69744", "labels": [ - "size: S" + "docs", + "size: M", + "extensions: memory-wiki" ], "merged": false, - "number": 68813, - "review_comments_count": 3, + "number": 69744, + "review_comments_count": 0, "state": "open", - "title": "fix(config): validate plugin-owned model providers", - "updated_at": "2026-04-19T03:58:46Z" + "title": "Fix scoped plugin CLI loading for memory wiki bridge artifacts", + "updated_at": "2026-04-21T14:51:14Z" }, { - "additions": 4890, - "author": "jdc4429", + "additions": 422, + "author": "clivemoore", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 33, - "cluster_id": "cluster-65554-2", - "cluster_ids": [ - "cluster-65554-2" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68808", - "created_at": "2026-04-19T03:46:12Z", - "deletions": 1618, + "body_excerpt": "## Summary Phase 2 of the security audit \u2014 four independent items, all additive, zero runtime behavior change. Each item is self-contained and the commits are ordered so reviewers can bisect by ID. **SEC-2 \u2014 Playwright evaluate threat-mode\u2026", + "changed_files": 18, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69743", + "created_at": "2026-04-21T14:42:03Z", + "deletions": 47, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68808/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68808", + "files_url": "https://github.com/openclaw/openclaw/pull/69743/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69743", "labels": [ "app: web-ui", "gateway", + "scripts", "agents", - "size: XL" + "size: M" ], "merged": false, - "number": 68808, - "review_comments_count": 11, - "state": "open", - "title": "Jdc4429 custom build", - "updated_at": "2026-04-19T07:18:32Z" + "number": 69743, + "review_comments_count": 7, + "state": "closed", + "title": "Phase 2 security audit: SEC-2 + OBS-2 + JS-3 + SEC-1", + "updated_at": "2026-04-21T17:01:51Z" }, { - "additions": 860, - "author": "kesslerio", + "additions": 171, + "author": "sunlight7777777", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: native Codex app-server sessions let MCP tool approval elicitations fall through to the fail-closed client fallback, which surfaced Codex Apps GitHub writes as immediate `user rejected MCP tool call` failures. - Why i\u2026", - "changed_files": 7, + "body_excerpt": "## Problem Debug environment variables like OPENCLAW_DEBUG_INGRESS_TIMING could be accidentally enabled in production, potentially exposing sensitive timing information or increasing attack surface. ## Solution - Add production environment\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68807", - "created_at": "2026-04-19T03:40:39Z", - "deletions": 97, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69740", + "created_at": "2026-04-21T14:22:12Z", + "deletions": 130, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68807/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68807", + "files_url": "https://github.com/openclaw/openclaw/pull/69740/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69740", "labels": [ - "size: L", - "extensions: codex" + "app: web-ui", + "agents", + "size: M" ], "merged": false, - "number": 68807, - "review_comments_count": 5, + "number": 69740, + "review_comments_count": 6, "state": "open", - "title": "fix(codex): bridge MCP tool approval elicitations", - "updated_at": "2026-04-19T05:24:58Z" + "title": "fix(agents): secure debug env var access and add validation", + "updated_at": "2026-04-21T17:48:01Z" }, { - "additions": 116, - "author": "lawrence3699", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `parseTtsDirectives` treated literal `[[tts:...]]` tokens inside inline code spans and fenced code blocks as real directives. - Why it matters: in `messages.tts.auto=\"tagged\"`, troubleshooting or documentation replies\u2026", + "additions": 18, + "author": "soloclz", + "author_association": "NONE", + "body_excerpt": "## Summary - make `buildPluginCompatibilityNotices()` use the snapshot report path by default - preserve the explicit `report` override path for callers that already have diagnostics - update plugin status tests to assert metadata snapshot\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68806", - "created_at": "2026-04-19T03:40:30Z", + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69736", + "created_at": "2026-04-21T14:12:04Z", "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68806/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68806", + "files_url": "https://github.com/openclaw/openclaw/pull/69736/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69736", "labels": [ - "size: S" + "size: XS" ], "merged": false, - "number": 68806, + "number": 69736, "review_comments_count": 2, "state": "closed", - "title": "[AI-assisted] fix(tts): ignore literal directives inside markdown code", - "updated_at": "2026-04-19T03:50:08Z" + "title": "perf(status): avoid diagnostics path for compatibility notices", + "updated_at": "2026-04-21T15:36:13Z" }, { - "additions": 724, - "author": "CuzG-lab", + "additions": 5, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Non-trivial work on this repo does not yet have a convention for where per-phase plans, research notes, and codebase-map artifacts live. Multiple agents working on the same phase end up duplicating research and re-der\u2026", - "changed_files": 8, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68803", - "created_at": "2026-04-19T03:28:59Z", - "deletions": 0, + "body_excerpt": "Fixes #69715 Persisted sessions with a `skillsSnapshot.version` of 0 would not refresh after a gateway restart because: 1. `ensureSkillSnapshot()` called `getSkillsSnapshotVersion()` **before** `ensureSkillsWatcher()`, so the version was s\u2026", + "changed_files": 2, + "cluster_id": "cluster-49059-5", + "cluster_ids": [ + "cluster-49059-5" + ], + "cluster_role": "member", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69734", + "created_at": "2026-04-21T14:09:47Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68803/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68803", + "files_url": "https://github.com/openclaw/openclaw/pull/69734/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69734", "labels": [ - "size: L" + "agents", + "size: XS" ], "merged": false, - "number": 68803, + "number": 69734, "review_comments_count": 0, "state": "open", - "title": "Repo meta: add .planning/ GSD workflow scaffold", - "updated_at": "2026-04-19T03:29:58Z" + "title": "fix(skills): refresh stale session snapshots after gateway restart", + "updated_at": "2026-04-21T14:54:26Z" }, { - "additions": 101194, - "author": "Eruditi", - "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 18680, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68802", - "created_at": "2026-04-19T03:26:15Z", - "deletions": 0, + "additions": 172, + "author": "ayeshakhalid192007-dev", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Fixes #69624 \u2014 browser profile `existing-session` gets permanently stuck after the first navigation timeout, requiring a gateway restart. ## Root Cause `navigateChromeMcpPage()` only forwarded a timeout to the Chrome MCP `naviga\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69733", + "created_at": "2026-04-21T14:09:03Z", + "deletions": 24, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68802/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68802", + "files_url": "https://github.com/openclaw/openclaw/pull/69733/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69733", "labels": [ - "size: XS" + "size: S" ], "merged": false, - "number": 68802, - "review_comments_count": 15, + "number": 69733, + "review_comments_count": 2, "state": "open", - "title": "Translate documentation to Chinese", - "updated_at": "2026-04-19T06:28:05Z" + "title": "fix(browser): reset Chrome MCP session after navigate_page timeout", + "updated_at": "2026-04-21T14:56:06Z" }, { - "additions": 7, - "author": "CuzG-lab", + "additions": 68, + "author": "nnish16", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: `pruneAgentRunCache()` clears `agentRunCache` entries on TTL but never touches the sibling `agentRunStarts` map, so timestamps for runs that lose their terminal lifecycle event (crash, race, forced disconnect) accumul\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - redact internal exec approval allowlist metadata from transport payloads - reuse the same transport redaction for both gateway and node-host approval snapshots - add coverage for redacting `source` while preserving user-visibl\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68801", - "created_at": "2026-04-19T03:25:41Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69732", + "created_at": "2026-04-21T14:02:38Z", + "deletions": 19, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68801/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68801", + "files_url": "https://github.com/openclaw/openclaw/pull/69732/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69732", "labels": [ "gateway", - "size: XS" + "size: S" ], "merged": false, - "number": 68801, + "number": 69732, "review_comments_count": 2, "state": "open", - "title": "Gateway: prune orphaned agentRunStarts entries", - "updated_at": "2026-04-19T03:28:22Z" + "title": "Fix exec approvals snapshot transport redaction", + "updated_at": "2026-04-21T14:08:35Z" }, { - "additions": 40, - "author": "jasonmakr", - "author_association": "NONE", - "body_excerpt": "## Problem `openclaw mcp serve` writes config warnings and other log output to **stdout**, polluting the MCP JSON-RPC message stream. MCP stdio clients (e.g. Hermes Agent) that strictly parse stdout encounter non-JSON text before the first\u2026", - "changed_files": 2, + "additions": 463, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898 #69478\uff1aenqueueSystemEvent \u4e0d\u53bb\u91cd\uff0c\u5bfc\u81f4 exec \u5ba1\u6279\u7ea7\u8054\u9501\u5b9a\u3002 ## \u4fee\u590d - **\u975e\u8fde\u7eed\u53bb\u91cd**\uff1a\u65b0\u589e `entry.queue.some(e => e.text === cleaned)` \u68c0\u67e5 - **lastContextKey \u4fee\u6b63**\uff1a\u79fb\u81f3 dedup \u68c0\u67e5\u4e4b\u540e - **\u4e0a\u4e0b\u6587\u4fdd\u7559**\uff1aevent \u4e0d\u63d0\u4f9b contextKey \u65f6\u4e0d\u8986\u76d6\u5df2\u6709\u7684 lastContextKey ## \u6d4b\u8bd5\u8986\u76d6 - `returns false\u2026", + "changed_files": 12, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68800", - "created_at": "2026-04-19T03:25:12Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69731", + "created_at": "2026-04-21T14:02:18Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68800/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68800", + "files_url": "https://github.com/openclaw/openclaw/pull/69731/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69731", "labels": [ - "size: XS" + "agents", + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68800, - "review_comments_count": 1, - "state": "open", - "title": "fix: route logs to stderr in `openclaw mcp serve` (fixes #68587)", - "updated_at": "2026-04-19T03:27:10Z" + "number": 69731, + "review_comments_count": 4, + "state": "closed", + "title": "fix: deduplicate enqueued system events (#69478)", + "updated_at": "2026-04-21T14:09:06Z" }, { - "additions": 293, - "author": "kagura-agent", + "additions": 460, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem When the primary model is unavailable (rate limit, overloaded, etc.) and a fallback model is selected automatically, the fallback model override (`modelOverrideSource: 'auto'`) is persisted to session state via `persistFallbackC\u2026", - "changed_files": 4, - "cluster_id": "cluster-63712-5", - "cluster_ids": [ - "cluster-63712-5" - ], - "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68798", - "created_at": "2026-04-19T03:22:35Z", - "deletions": 8, + "body_excerpt": "## \u95ee\u9898 #69229\uff1atasks audit \u62a5\u544a inconsistent_timestamps \u5047\u9633\u6027\u3002 ## \u6839\u56e0 tool runners \u5728\u8c03\u7528 createTaskRecord \u4e4b\u524d\u5c31\u6355\u83b7\u4e86 startedAt = Date.now()\u3002\u5f53 registry \u968f\u540e\u8bbe\u7f6e createdAt = Date.now() \u65f6\uff0c\u5df2\u7ecf\u8fc7\u53bb\u4e86\u82e5\u5e72 ms\uff0c\u5bfc\u81f4 startedAt < createdAt\uff0c\u8fd9\u662f\u67b6\u6784\u4e0a\u5fc5\u7136\u53d1\u751f\u7684\uff0c\u800c\u975e\u771f\u6b63\u7684 bug\u3002 ## \u4fee\u590d \u5728 creat\u2026", + "changed_files": 12, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69730", + "created_at": "2026-04-21T13:59:20Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68798/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68798", + "files_url": "https://github.com/openclaw/openclaw/pull/69730/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69730", "labels": [ - "size: M" + "agents", + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68798, - "review_comments_count": 1, - "state": "open", - "title": "fix: prevent auto-fallback model from persisting into session state", - "updated_at": "2026-04-19T03:25:15Z" + "number": 69730, + "review_comments_count": 3, + "state": "closed", + "title": "fix: clamp createdAt to startedAt on task creation (#69229)", + "updated_at": "2026-04-21T14:05:12Z" }, { - "additions": 15, - "author": "vvitovec", + "additions": 48, + "author": "wAnyBug-Com", "author_association": "NONE", - "body_excerpt": "## Summary - add `claude` to the Windows `.cmd` shim allowlist used by the child supervisor adapter - cover the regression with a focused Windows child-spawn test ## Why Windows installs the Claude CLI as `claude.cmd`. The child adapter al\u2026", - "changed_files": 2, - "cluster_id": "cluster-68788-5", - "cluster_ids": [ - "cluster-68788-5" - ], - "cluster_role": "member", + "body_excerpt": "``` feat(qwen): add qwen3.6-flash and qwen3.6-max-preview to model catalog - Add qwen3.6-flash with contextWindow 1,000,000 and reasoning support - Add qwen3.6-max-preview with contextWindow 262,144 and reasoning support - Fix qwen3.6-plus\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68792", - "created_at": "2026-04-19T03:07:29Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69729", + "created_at": "2026-04-21T13:55:54Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68792/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68792", + "files_url": "https://github.com/openclaw/openclaw/pull/69729/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69729", "labels": [ - "size: XS" + "size: S" ], "merged": false, - "number": 68792, - "review_comments_count": 0, + "number": 69729, + "review_comments_count": 3, "state": "open", - "title": "fix(process): shim claude on Windows child spawns", - "updated_at": "2026-04-19T03:08:21Z" + "title": "feat(qwen): add qwen3.6-flash and qwen3.6-max-preview to model catalog", + "updated_at": "2026-04-21T14:27:12Z" }, { - "additions": 132, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68713 When making outbound calls with `realtime.enabled = true`, the OpenAI Realtime voice bridge consistently failed with \"WebSocket was closed before the connection was established\". This was caused by a race condition\u2026", + "additions": 10, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "Fixes #69648 MiniMax-M2.7 supports image understanding via the `/v1/coding_plan/vlm` endpoint, but `isMinimaxVlmModel()` only recognized `MiniMax-VL-01`. This caused M2.7 to be incorrectly routed to the generic `anthropic-messages` API pat\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68787", - "created_at": "2026-04-19T02:58:02Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69728", + "created_at": "2026-04-21T13:54:15Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68787/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68787", + "files_url": "https://github.com/openclaw/openclaw/pull/69728/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69728", "labels": [ - "channel: voice-call", - "size: S", + "agents", + "size: XS", "r: too-many-prs" ], "merged": false, - "number": 68787, - "review_comments_count": 0, + "number": 69728, + "review_comments_count": 1, "state": "closed", - "title": "fix(voice-call): skip speakInitialMessage when realtime mode is active", - "updated_at": "2026-04-19T02:59:25Z" + "title": "fix(minimax): recognize MiniMax-M2.7 as VLM-capable model", + "updated_at": "2026-04-21T15:34:17Z" }, { - "additions": 278, - "author": "chrisabad", + "additions": 57, + "author": "yuaiccc", "author_association": "NONE", - "body_excerpt": "## Summary Add `CommandLaneCircuitBreakerError` and opt-in circuit breaker options (`circuitBreakerDepth`, `circuitBreakerWaitMs`) to `enqueueCommandInLane`. Enable by default for the main run lane: depth >= 9 or oldest queued entry wait >\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - Problem: `openclaw mcp list` looked like it listed all MCP servers OpenClaw users might know about, but it only reads OpenClaw config under `mcp.servers`. - Why it matters: users with mcporter servers in `config/mcporter.json`\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68785", - "created_at": "2026-04-19T02:54:51Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69726", + "created_at": "2026-04-21T13:51:41Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68785/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68785", + "files_url": "https://github.com/openclaw/openclaw/pull/69726/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69726", "labels": [ - "size: M" + "docs", + "cli", + "size: S" ], "merged": false, - "number": 68785, - "review_comments_count": 2, + "number": 69726, + "review_comments_count": 1, "state": "open", - "title": "feat: add circuit breaker for command lane saturation", - "updated_at": "2026-04-19T02:58:18Z" + "title": "fix(cli): clarify mcp list registry scope", + "updated_at": "2026-04-21T16:56:27Z" }, { - "additions": 162, - "author": "kagura-agent", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68760 \u2014 Cron job delivery channel reverts to `last` after execution, overwriting the user-configured value (e.g. `telegram`). ## Problem After a cron job executes, the `delivery.channel` field in `jobs.json` can be overwr\u2026", - "changed_files": 3, + "additions": 132, + "author": "soloclz", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #66839. `exec host=node` against the macOS companion app currently fails preflight with: ``` node command not allowed: the node (platform: macOS 15.7.5) does not support \"system.run.prepare\" ``` Root cause: `executeNodeHos\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68783", - "created_at": "2026-04-19T02:36:57Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69725", + "created_at": "2026-04-21T13:49:26Z", + "deletions": 22, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68783/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68783", + "files_url": "https://github.com/openclaw/openclaw/pull/69725/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69725", "labels": [ + "agents", "size: S" ], "merged": false, - "number": 68783, - "review_comments_count": 3, + "number": 69725, + "review_comments_count": 0, "state": "open", - "title": "fix(cron): preserve delivery config across job executions (#68760)", - "updated_at": "2026-04-19T02:40:23Z" + "title": "fix(agents): build local system.run plan when node omits system.run.prepare", + "updated_at": "2026-04-21T13:51:32Z" }, { - "additions": 8, - "author": "ajfonthemove", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Docs show `contextTokens` override at `models.providers.openai-codex.models[]`, but for OAuth-configured providers the gateway validator requires `baseUrl` and model `name` \u2014 fields that don't apply to auto-configured\u2026", - "changed_files": 3, + "additions": 374, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898 #69410\uff1aCustom provider \u8fd4\u56de\u6709\u6548\u5185\u5bb9\u4f46 agent payloads=0\u3002 ## \u6839\u56e0 `finalizeAssistantTexts` \u4e2d\u5f53 `onBlockReply` \u5b58\u5728\u65f6\uff08\u6807\u51c6 agent \u8c03\u7528\uff09\uff0c`else if (!addedDuringMessage && !chunkerHasBuffered && text)` \u4e0d\u6ee1\u8db3\uff0c\u56e0\u4e3a\u7b2c\u4e00\u4e2a\u5206\u652f\u6761\u4ef6\u4e0d\u6ee1\u8db3\u3002custom provider \u573a\u666f\u4e0b\u6d41\u5f0f\u6587\u672c\u672a\u52a0\u5165 `assistantT\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68775", - "created_at": "2026-04-19T02:24:05Z", - "deletions": 7, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69724", + "created_at": "2026-04-21T13:42:33Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68775/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68775", + "files_url": "https://github.com/openclaw/openclaw/pull/69724/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69724", "labels": [ - "docs", - "invalid", - "gateway", - "size: XS" + "agents", + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68775, - "review_comments_count": 1, + "number": 69724, + "review_comments_count": 4, "state": "closed", - "title": "docs(providers): fix contextTokens placement for openai-codex", - "updated_at": "2026-04-19T03:36:05Z" + "title": "fix: ensure assistantTexts populated at message_end for custom providers (#69410)", + "updated_at": "2026-04-21T13:48:30Z" }, { - "additions": 192, - "author": "solomonneas", + "additions": 4, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Dreaming short-term promotion writes raw `Candidate: ... confidence: ... evidence: ... recalls: ... status: staged` rows into `MEMORY.md`, silently pushing the file past the 12KB bootstrap cap. Issue #67580 reports th\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68774", - "created_at": "2026-04-19T02:22:15Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69723", + "created_at": "2026-04-21T13:42:00Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68774/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68774", + "files_url": "https://github.com/openclaw/openclaw/pull/69723/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69723", "labels": [ - "extensions: memory-core", - "size: S" + "agents", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68774, - "review_comments_count": 1, - "state": "open", - "title": "fix(memory-core): prevent staged dream candidates from leaking into MEMORY.md", - "updated_at": "2026-04-19T02:25:31Z" + "number": 69723, + "review_comments_count": 0, + "state": "closed", + "title": "Fix/minimax 529 overloaded failover", + "updated_at": "2026-04-21T13:45:28Z" }, { - "additions": 49, - "author": "SimbaKingjoe", + "additions": 1, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "# fix(active-memory): skip payload-less memory_search toolResults in transcript debug lookup ## Summary - **Problem:** `readActiveMemorySearchDebug` used `asRecord(details?.debug) ?? {}`, which forced an empty object `{}` when the `debug`\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68773", - "created_at": "2026-04-19T02:17:20Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69722", + "created_at": "2026-04-21T13:41:18Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68773/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68773", + "files_url": "https://github.com/openclaw/openclaw/pull/69722/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69722", "labels": [ - "size: S" + "app: web-ui", + "gateway", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68773, + "number": 69722, "review_comments_count": 0, - "state": "open", - "title": "fix(active-memory): skip payload-less memory_search toolResults in tr\u2026", - "updated_at": "2026-04-19T02:18:05Z" + "state": "closed", + "title": "Fix/exec approvals source field", + "updated_at": "2026-04-21T13:45:30Z" }, { - "additions": 202, - "author": "cholaolu-boop", + "additions": 16, + "author": "Vansh5632", "author_association": "NONE", - "body_excerpt": "2. Finaler PR-Body ## Problem When `readSessionMessages` is called for an `agent:main:main` session whose entry in `sessions.json` carries a non-empty `compactionCheckpoints[]` chain, the function only reads the single transcript file reso\u2026", + "body_excerpt": "## Summary - Problem: OpenClaw's native Ollama request path must normalize internal `ollama/` ids before sending requests to Ollama, while still preserving valid bare model ids. - Why it matters: Without explicit regression coverage\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68765", - "created_at": "2026-04-19T01:49:31Z", - "deletions": 38, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69721", + "created_at": "2026-04-21T13:40:17Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68765/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68765", + "files_url": "https://github.com/openclaw/openclaw/pull/69721/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69721", "labels": [ - "gateway", - "size: M" + "size: XS" ], "merged": false, - "number": 68765, - "review_comments_count": 5, + "number": 69721, + "review_comments_count": 2, "state": "open", - "title": "fix(gateway): preserve chat history across compaction checkpoint chains", - "updated_at": "2026-04-19T02:23:04Z" + "title": "test(ollama): cover native model id normalization", + "updated_at": "2026-04-21T13:47:44Z" }, { - "additions": 6, - "author": "Kailigithub", + "additions": 85, + "author": "yuaiccc", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68706 When auto-fallback selects an alternative model (e.g. primary model is rate-limited), it writes `modelOverride`/`providerOverride`/`modelOverrideSource:\"auto\"` to the persisted session store. A rollback mechanism c\u2026", + "body_excerpt": "## Summary - Problem: `docs/gateway/secrets.md` documented several SecretRef exec-provider integrations, but did not include the open-source `pass`/password-store flow requested in #62730. - Why it matters: users who keep secrets in `pass`\u2026", "changed_files": 1, - "cluster_id": "cluster-63712-5", - "cluster_ids": [ - "cluster-63712-5" - ], - "cluster_role": "member", + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68764", - "created_at": "2026-04-19T01:47:57Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69720", + "created_at": "2026-04-21T13:35:01Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68764/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68764", + "files_url": "https://github.com/openclaw/openclaw/pull/69720/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69720", "labels": [ + "docs", + "gateway", "size: XS" ], "merged": false, - "number": 68764, - "review_comments_count": 0, + "number": 69720, + "review_comments_count": 3, "state": "open", - "title": "fix: ignore stale auto-fallback model overrides on session reload", - "updated_at": "2026-04-19T01:49:25Z" + "title": "docs: add pass SecretRef exec example", + "updated_at": "2026-04-21T14:51:13Z" }, { - "additions": 31, - "author": "Kailigithub", - "author_association": "NONE", - "body_excerpt": "## Problem Closes #68704 When using Gemma 4 models via LM Studio, Ollama, or vLLM (OpenAI-compatible endpoints), `reasoning_content` from prior turns is re-sent in the conversation history. Google Gemma 4 documentation explicitly states th\u2026", - "changed_files": 5, + "additions": 58, + "author": "chinar-amrutkar", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary \u2022 Problem: `extractMessageSenderLabel` in `chat-sanitize.ts` could only find sender info in body (sender prefix Name: message) or in metadata blocks, but NOT in the envelope header's from field \u2022 Why it matters: Telegram DMs sto\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68763", - "created_at": "2026-04-19T01:45:42Z", - "deletions": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69718", + "created_at": "2026-04-21T13:26:32Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68763/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68763", + "files_url": "https://github.com/openclaw/openclaw/pull/69718/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69718", "labels": [ - "agents", - "size: XS" + "gateway", + "size: S" ], "merged": false, - "number": 68763, - "review_comments_count": 2, + "number": 69718, + "review_comments_count": 3, "state": "open", - "title": "fix: strip reasoning_content from conversation history for Gemma 4 models", - "updated_at": "2026-04-19T01:50:56Z" + "title": "fix: include sender label in message body for direct messages", + "updated_at": "2026-04-21T14:38:37Z" }, { - "additions": 4, - "author": "Kailigithub", + "additions": 42, + "author": "JinluZhang", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68728 Gemma 4 models (e.g. `gemma4:12b`, `gemma4:27b`) support native thinking mode in Ollama, but `isReasoningModelHeuristic()` does not match `gemma4` model IDs. The existing pattern `/r1|reasoning|think|reason/i` only\u2026", - "changed_files": 3, - "cluster_id": "cluster-68728-3", + "body_excerpt": "## Summary Fixes a stale-session edge case where newly added skills can stay invisible after a gateway restart. Fixes #69715. ## What Changed - seed a non-zero skills snapshot version when the first workspace watcher is attached - read `sn\u2026", + "changed_files": 4, + "cluster_id": "cluster-49059-5", "cluster_ids": [ - "cluster-68728-3" + "cluster-49059-5" ], - "cluster_role": "member", + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68762", - "created_at": "2026-04-19T01:33:25Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69716", + "created_at": "2026-04-21T13:13:41Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68762/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68762", + "files_url": "https://github.com/openclaw/openclaw/pull/69716/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69716", "labels": [ - "size: XS", - "extensions: huggingface" + "agents", + "size: XS" ], "merged": false, - "number": 68762, - "review_comments_count": 0, + "number": 69716, + "review_comments_count": 1, "state": "open", - "title": "fix: detect Gemma 4 models as reasoning models", - "updated_at": "2026-04-19T01:34:40Z" + "title": "fix(skills): refresh stale session skill snapshots after restart", + "updated_at": "2026-04-21T13:18:18Z" }, { - "additions": 1, - "author": "juggsnjava-git", - "author_association": "NONE", - "body_excerpt": "latest from fork + readme", - "changed_files": 1, + "additions": 183, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898 #69289: Browser aria refs \u5728\u5feb\u7167\u91cc\u53ef\u7528\u4f46 action \u5931\u8d25\u3002 ## \u6839\u56e0 `snapshotAriaViaPlaywright` \u751f\u6210 `ax` \u683c\u5f0f\u7684 refs\uff08\u5982 `ax13`, `ax39`\uff09\uff0c\u4f46\u6ca1\u6709\u5c06 role/name \u4fe1\u606f\u5b58\u50a8\u5230 pageState \u4e2d\u3002\u5f53\u540e\u7eed action \u8c03\u7528 `refLocator('ax13')` \u65f6\uff0c\u4ee3\u7801\u76f4\u63a5 fallback \u5230 `page.locator('aria-ref=a\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68759", - "created_at": "2026-04-19T01:27:27Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69714", + "created_at": "2026-04-21T13:10:14Z", + "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68759/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68759", + "files_url": "https://github.com/openclaw/openclaw/pull/69714/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69714", "labels": [ - "size: XS" + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68759, - "review_comments_count": 1, + "number": 69714, + "review_comments_count": 3, "state": "closed", - "title": "Juggsnjava git patch 1", - "updated_at": "2026-04-19T01:28:24Z" + "title": "fix: resolve ax aria refs in browser actions (#69289)", + "updated_at": "2026-04-21T13:14:20Z" }, { - "additions": 323577, - "author": "mylukin", + "additions": 32, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - **inject.ts**: MAX_LESSONS 3\u219210\uff0cDEFAULT_MAX_TOKENS 600\u21922000\u3002\u5404 agent session \u542f\u52a8\u65f6\u6ce8\u5165\u6700\u591a 10 \u6761\u6559\u8bad\uff08~500\u2013800 tokens\uff09\uff0c\u53ef\u89c1\u7387\u4ece 6% \u63d0\u5347\u5230 ~20% - **src/hit.ts** (\u65b0\u589e): `hitLesson()` \u2014 \u589e\u91cf hitCount + lastHitAt\uff0chitCount \u2265 2 \u81ea\u52a8\u5347\u7ea7\u5230 `high`\uff0c\u2265 4 \u5347\u7ea7\u5230 `cri\u2026", - "changed_files": 351, + "body_excerpt": "## \u95ee\u9898\\n#69229\uff1atasks audit \u62a5\u544a inconsistent_timestamps \u5047\u9633\u6027\u3002\\n\\n\u6839\u56e0\uff1api-embedded-runner \u7684 lifecycle events \u5230\u8fbe registry \u65f6\uff0cevt.ts (startedAt) \u53ef\u80fd\u65e9\u4e8e registry \u5165\u53e3\u5904\u7684 wall-clock \u65f6\u95f4\uff08createdAt\uff09\uff0c\u8fd9\u662f\u961f\u5217/\u65f6\u949f\u504f\u659c\u7684\u81ea\u7136\u7ed3\u679c\uff0c\u4f46\u4f1a\u88ab audit \u8bef\u5224\u4e3a\u65f6\u95f4\u6233\u4e0d\u4e00\u81f4\u3002\\n\\n## \u4fee\u590d\\n\u5728 updateTaskSt\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68758", - "created_at": "2026-04-19T01:26:54Z", - "deletions": 1287, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69711", + "created_at": "2026-04-21T13:00:52Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68758/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68758", + "files_url": "https://github.com/openclaw/openclaw/pull/69711/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69711", "labels": [ - "docs", - "channel: discord", - "channel: mattermost", - "channel: msteams", - "channel: telegram", - "app: web-ui", - "gateway", - "extensions: memory-core", - "scripts", - "commands", - "agents", - "channel: feishu", - "size: XL", - "extensions: anthropic", - "extensions: openai", - "extensions: memory-wiki" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68758, - "review_comments_count": 2, + "number": 69711, + "review_comments_count": 1, "state": "closed", - "title": "feat(lesson-engine): v2 \u2014 MAX_LESSONS=10, hit command, auto-upgrade", - "updated_at": "2026-04-19T01:30:50Z" + "title": "fix: tasks audit false positive inconsistent_timestamps (#69229)", + "updated_at": "2026-04-21T13:02:37Z" }, { - "additions": 458, - "author": "jaredmarin", + "additions": 69, + "author": "AgnesAI-SG", "author_association": "NONE", - "body_excerpt": null, - "changed_files": 40, + "body_excerpt": "## Summary We'd like to contribute a bundled model provider plugin for Agnes AI to OpenClaw. The proposed provider would: - register a new bundled provider id: `agnes-ai` - expose Agnes AI models through the standard OpenClaw model/provide\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68756", - "created_at": "2026-04-19T01:22:18Z", - "deletions": 1790, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69710", + "created_at": "2026-04-21T12:59:48Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68756/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68756", + "files_url": "https://github.com/openclaw/openclaw/pull/69710/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69710", "labels": [ "docs", - "size: XL" + "size: S" ], "merged": false, - "number": 68756, - "review_comments_count": 1, + "number": 69710, + "review_comments_count": 10, "state": "open", - "title": "feat: integrate Mission Control v3.0 UI updates", - "updated_at": "2026-04-19T01:26:03Z" + "title": "feat(provider): add agnes-ai bundled provider", + "updated_at": "2026-04-21T13:53:51Z" }, { - "additions": 17, - "author": "bluesky6868", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: The healthcheck skill told agents to probe `ufw status` / `firewall-cmd --state` from the caller's shell `PATH`. On Debian/Ubuntu, `ufw` lives in `/usr/sbin` and `/sbin`, which are absent from a non-root user's de\u2026", - "changed_files": 1, + "additions": 636, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898\\n#69289\uff1aBrowser aria refs \u5728\u5feb\u7167\u91cc\u53ef\u7528\u4f46\u6267\u884c action \u65f6\u5931\u8d25\u3002\\n\\n## \u4fee\u590d\\n[\u5b9a\u4f4d\u6839\u56e0\u5e76\u4fee\u590d aria ref \u5728 action \u8def\u5f84\u4e0a\u7684\u4f7f\u7528]\\n\\n## \u6d4b\u8bd5\u8986\u76d6\\n[\u65b0\u589e\u6d4b\u8bd5]", + "changed_files": 25, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68755", - "created_at": "2026-04-19T01:12:44Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69709", + "created_at": "2026-04-21T12:58:25Z", + "deletions": 42, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68755/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68755", + "files_url": "https://github.com/openclaw/openclaw/pull/69709/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69709", "labels": [ - "size: XS" + "app: web-ui", + "gateway", + "cli", + "agents", + "channel: feishu", + "size: L", + "r: too-many-prs" ], "merged": false, - "number": 68755, - "review_comments_count": 1, - "state": "open", - "title": "security(healthcheck): probe ufw/firewall-cmd via safe PATH and config fallback", - "updated_at": "2026-04-19T01:28:19Z" + "number": 69709, + "review_comments_count": 3, + "state": "closed", + "title": "fix: resolve aria refs for browser actions (#69289)", + "updated_at": "2026-04-21T13:06:25Z" }, { - "additions": 2, - "author": "Kailigithub", + "additions": 107, + "author": "badgerbees", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68661 In allowlist security mode, any command containing a heredoc (`<<`) unconditionally triggers an approval prompt, even when: 1. The target binary is in the allowlist (`allowlistSatisfied === true`) 2. Command analys\u2026", - "changed_files": 1, - "cluster_id": "cluster-68661-4", - "cluster_ids": [ - "cluster-68661-4" - ], - "cluster_role": "member", + "body_excerpt": "## Summary - Problem: `memory-lancedb` forwarded `dimensions` to the OpenAI embeddings request, which breaks vLLM and other non-Matryoshka providers that reject that field. - Why it matters: memory recall/search can fail at embed time for\u2026", + "changed_files": 2, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68754", - "created_at": "2026-04-19T01:10:56Z", - "deletions": 13, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69707", + "created_at": "2026-04-21T12:51:57Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68754/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68754", + "files_url": "https://github.com/openclaw/openclaw/pull/69707/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69707", "labels": [ - "agents", - "size: XS" + "extensions: memory-lancedb", + "size: S" ], "merged": false, - "number": 68754, + "number": 69707, "review_comments_count": 0, "state": "open", - "title": "fix: remove unconditional heredoc approval in allowlist mode", - "updated_at": "2026-04-19T01:16:40Z" + "title": "fix(memory-lancedb): truncate embeddings locally", + "updated_at": "2026-04-21T12:56:26Z" }, { - "additions": 21, - "author": "kagura-agent", + "additions": 1195, + "author": "Takhoffman", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68743 ## Problem The Memory Dreaming Promotion cron job uses `payload.kind='systemEvent'`, which gets the default 10-minute timeout (`DEFAULT_JOB_TIMEOUT_MS`). However, dreaming triggers a full agent turn via the main session heartb\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - add last-known-good effective-config helpers and gateway startup/restart recovery paths - make `gateway run` recover invalid effective configs before deriving startup settings, treat restart-sentinel writes as best-effort, and\u2026", + "changed_files": 19, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68753", - "created_at": "2026-04-19T01:08:46Z", - "deletions": 3, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69706", + "created_at": "2026-04-21T12:25:37Z", + "deletions": 31, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68753/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68753", + "files_url": "https://github.com/openclaw/openclaw/pull/69706/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69706", "labels": [ - "size: XS" + "gateway", + "cli", + "agents", + "maintainer", + "size: XL" ], "merged": false, - "number": 68753, - "review_comments_count": 1, + "number": 69706, + "review_comments_count": 7, "state": "open", - "title": "fix: allow systemEvent cron jobs to specify custom timeoutSeconds", - "updated_at": "2026-04-19T01:12:53Z" + "title": "fix: recover gateway config after invalid startup", + "updated_at": "2026-04-21T12:54:02Z" }, { - "additions": 5, - "author": "Kailigithub", + "additions": 74, + "author": "draix", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68470 MiniMax models (M2.5, M2.7) report cache hits via `prompt_cache_hit_tokens` in the usage response, but this field was not recognized by the token accounting pipeline. Since MiniMax includes cached tokens in `prompt\u2026", + "body_excerpt": "## Summary Fixes #69673 \u2014 Brave Search API authentication broken. The Brave Search API requires the API key to be sent via the `X-Subscription-Token` request header (not as a URL query parameter). The runtime implementation already sends t\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68750", - "created_at": "2026-04-19T01:04:20Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69704", + "created_at": "2026-04-21T12:17:10Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68750/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68750", + "files_url": "https://github.com/openclaw/openclaw/pull/69704/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69704", "labels": [ - "agents", - "size: XS" + "size: S" ], "merged": false, - "number": 68750, + "number": 69704, "review_comments_count": 0, "state": "open", - "title": "fix: handle MiniMax prompt_cache_hit_tokens to prevent token double-counting", - "updated_at": "2026-04-19T01:05:05Z" + "title": "test(brave): add regression tests for X-Subscription-Token header auth (#69673)", + "updated_at": "2026-04-21T12:19:15Z" }, { - "additions": 1, - "author": "Kailigithub", + "additions": 92, + "author": "draix", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68707 When using local OpenAI-compatible backends (llama.cpp, LM Studio, Ollama), `stream_options: { include_usage: true }` is never sent in streaming requests. This causes context token usage to always show 0% in `/stat\u2026", - "changed_files": 1, - "cluster_id": "cluster-68707-3", - "cluster_ids": [ - "cluster-68707-3" - ], - "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68749", - "created_at": "2026-04-19T01:03:09Z", - "deletions": 1, + "body_excerpt": "## Summary Fixes #69683 \u2014 models configured with `api: \"ollama\"` throw `No API provider registered for api: ollama` at runtime despite the config being accepted and hot-reloaded by the gateway. ## Root cause The call path for a model call\u2026", + "changed_files": 2, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69703", + "created_at": "2026-04-21T12:11:58Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68749/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68749", + "files_url": "https://github.com/openclaw/openclaw/pull/69703/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69703", "labels": [ "agents", + "size: S" + ], + "merged": false, + "number": 69703, + "review_comments_count": 0, + "state": "open", + "title": "fix(providers): register ollama api as openai-completions transport (#69683)", + "updated_at": "2026-04-21T12:13:29Z" + }, + { + "additions": 27, + "author": "SARAMALI15792", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** Gateway HTTP server hangs on Windows \u2014 all HTTP requests (including health checks) time out and never receive a response. - **Why it matters:** Windows users cannot run the gateway at all; any request hits ESTABLI\u2026", + "changed_files": 2, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69701", + "created_at": "2026-04-21T11:59:42Z", + "deletions": 0, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69701/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69701", + "labels": [ + "gateway", "size: XS" ], "merged": false, - "number": 68749, - "review_comments_count": 2, + "number": 69701, + "review_comments_count": 1, "state": "open", - "title": "fix: enable stream_options.include_usage for local openai-completions endpoints", - "updated_at": "2026-04-19T01:05:18Z" + "title": "fix(gateway): skip IPv6 ::1 loopback binding on Windows to prevent HTTP hang", + "updated_at": "2026-04-21T12:13:22Z" }, { - "additions": 3, - "author": "Kailigithub", + "additions": 4, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Problem Closes #68709 On Linux, the atomic config write creates a temp file with `mode: 0o600`, then calls `rename()` to replace the target. However, `rename(2)` preserves the existing inode permissions, so the resulting file ends up wi\u2026", + "body_excerpt": "Fixes #69642 MiniMax returns HTTP 529 with the message \"High traffic detected. For a more stable experience, upgrade to our Plus plan\". The existing failover logic already maps status 529 to `reason=overloaded` in `classifyFailoverReasonFr\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68748", - "created_at": "2026-04-19T01:02:35Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69699", + "created_at": "2026-04-21T11:57:29Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68748/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68748", + "files_url": "https://github.com/openclaw/openclaw/pull/69699/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69699", "labels": [ - "size: XS" + "agents", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68748, - "review_comments_count": 1, + "number": 69699, + "review_comments_count": 0, "state": "closed", - "title": "fix: enforce chmod 0o600 after atomic rename of config file", - "updated_at": "2026-04-19T02:18:45Z" + "title": "fix(failover): classify MiniMax 529 high-traffic as overloaded", + "updated_at": "2026-04-21T11:58:30Z" }, { - "additions": 37, - "author": "neeravmakwana", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: The `pdf` tool can hang indefinitely when fetching a large remote PDF whose body read stalls (reported with a 244\u2011page `www-cdn.anthropic.com` download). The entire agent session becomes a zombie \u2014 subsequent messages\u2026", - "changed_files": 4, + "additions": 5, + "author": "sudhindrat", + "author_association": "NONE", + "body_excerpt": "Fixes ERR_INVALID_ARG_TYPE when tool params are undefined. Changes:- hashToolCall now hashes undefined params consistently- digestStable guards against undefined serialization - stableStringifyFallback properly returns string (using ?? ope\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68747", - "created_at": "2026-04-19T01:02:07Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69697", + "created_at": "2026-04-21T11:47:12Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68747/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68747", + "files_url": "https://github.com/openclaw/openclaw/pull/69697/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69697", "labels": [ "agents", "size: XS" ], "merged": false, - "number": 68747, - "review_comments_count": 0, + "number": 69697, + "review_comments_count": 2, "state": "open", - "title": "PDF tool: abort stalled remote fetch after 30s idle timeout", - "updated_at": "2026-04-19T01:04:00Z" + "title": "fix(tool-loop-detection): handle undefined params in hashToolCall", + "updated_at": "2026-04-21T13:09:15Z" }, { - "additions": 31, - "author": "kagura-agent", + "additions": 40, + "author": "zhouhe-xydt", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68707 ## Problem `buildOpenAICompletionsParams()` only included `stream_options: { include_usage: true }` when `compat.supportsUsageInStreaming` was true. For non-standard/custom endpoints (llama-cpp, LM Studio, etc.), this flag res\u2026", - "changed_files": 3, + "body_excerpt": "## Summary This PR strengthens the OpenRouter base URL normalization introduced in #68574 to handle case-insensitive URL matching and adds regression tests for edge cases. ## Changes - Make `normalizeBaseUrl` case-insensitive by adding `.t\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68746", - "created_at": "2026-04-19T01:00:27Z", - "deletions": 4, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69696", + "created_at": "2026-04-21T11:44:28Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68746/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68746", + "files_url": "https://github.com/openclaw/openclaw/pull/69696/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69696", "labels": [ "agents", - "size: XS" + "size: XS", + "extensions: arcee" ], - "merged": true, - "number": 68746, + "merged": false, + "number": 69696, "review_comments_count": 0, - "state": "closed", - "title": "fix: always send stream_options.include_usage when streaming (openai-completions)", - "updated_at": "2026-04-19T02:15:08Z" + "state": "open", + "title": "fix(openrouter): make base URL normalization case-insensitive and add regression tests", + "updated_at": "2026-04-21T11:45:47Z" }, { - "additions": 14, - "author": "chrisabad", + "additions": 1, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Summary When the Slack extension's `registry.ts` module is loaded twice \u2014 once through jiti (plugin registration) and once through native `import()` (runtime dispatch) \u2014 each load creates its own `Map` instance. Routes registered on the\u2026", + "body_excerpt": "Fixes #69482 The Telegram \"Allow always\" approval handler writes allowlist entries with a `source: \"allow-always\"` field, but the gateway schema (ExecApprovalsAllowlistEntrySchema) did not include this field. This caused `openclaw approval\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68745", - "created_at": "2026-04-19T00:58:23Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69694", + "created_at": "2026-04-21T11:30:33Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68745/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68745", + "files_url": "https://github.com/openclaw/openclaw/pull/69694/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69694", "labels": [ - "channel: slack", - "size: XS" + "app: web-ui", + "gateway", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68745, - "review_comments_count": 1, - "state": "open", - "title": "fix(slack): share HTTP route registry via globalThis across module instances", - "updated_at": "2026-04-19T01:00:26Z" + "number": 69694, + "review_comments_count": 0, + "state": "closed", + "title": "fix(approvals): add missing source field to allowlist entry schema", + "updated_at": "2026-04-21T11:32:24Z" }, { - "additions": 280, - "author": "masatohoshino", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary On the WhatsApp channel, audio replies flagged with `[[audio_as_voice]]` were being delivered as generic document attachments instead of native PTT (push-to-talk) voice notes. This matters because WhatsApp presents voice notes d\u2026", - "changed_files": 8, + "additions": 7, + "author": "leifengfeng", + "author_association": "NONE", + "body_excerpt": "## Summary - Add `identityPrompt` optional parameter to `BuildAgentSystemPromptParams` interface - Use `params.identityPrompt ?? default` for both \"none\" promptMode and the full prompt mode - Change default identity line from `\"You are a p\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68744", - "created_at": "2026-04-19T00:58:20Z", - "deletions": 7, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69692", + "created_at": "2026-04-21T11:26:25Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68744/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68744", + "files_url": "https://github.com/openclaw/openclaw/pull/69692/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69692", "labels": [ - "channel: whatsapp-web", - "size: M" + "agents", + "size: XS" ], "merged": false, - "number": 68744, - "review_comments_count": 2, + "number": 69692, + "review_comments_count": 1, "state": "open", - "title": "fix(whatsapp): respect audioAsVoice flag in outbound delivery", - "updated_at": "2026-04-19T01:42:07Z" + "title": "feat: make system prompt identity line configurable via identityPrompt", + "updated_at": "2026-04-21T11:40:49Z" }, { - "additions": 12, - "author": "armorbreak001", + "additions": 10, + "author": "wucm667", "author_association": "NONE", - "body_excerpt": "## Summary Fixes #68707 When using custom openai-completions endpoints (llama-cpp, LM Studio, DashScope, etc.), stream_options.include_usage: true was never injected into the request payload, causing /status to always show 0% context usage\u2026", - "changed_files": 4, - "cluster_id": "cluster-68707-3", - "cluster_ids": [ - "cluster-68707-3" - ], - "cluster_role": "member", + "body_excerpt": "MiniMax-M2.7 supports image understanding via the VLM endpoint (`/v1/coding_plan/vlm`) but was excluded by the hardcoded check that only accepted `MiniMax-VL-01`. This PR adds `MiniMax-M2.7` to the `MINIMAX_VLM_MODELS` allowlist and update\u2026", + "changed_files": 2, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68742", - "created_at": "2026-04-19T00:48:20Z", - "deletions": 8, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69691", + "created_at": "2026-04-21T11:24:10Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68742/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68742", + "files_url": "https://github.com/openclaw/openclaw/pull/69691/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69691", "labels": [ "agents", "size: XS" ], "merged": false, - "number": 68742, - "review_comments_count": 2, + "number": 69691, + "review_comments_count": 0, "state": "open", - "title": "fix(agents): restore streaming usage tracking for non-native openai-completions providers", - "updated_at": "2026-04-19T00:53:49Z" + "title": "fix(minimax): add MiniMax-M2.7 to VLM model allowlist", + "updated_at": "2026-04-21T11:34:13Z" }, { - "additions": 283, - "author": "alexlomt", - "author_association": "NONE", - "body_excerpt": "## Summary - avoid forwarding per-session MCP servers when ACPX launches the built-in `openclaw` agent - keep existing per-session MCP behavior for other ACP agents - add runtime coverage for openclaw-only delegate routing ## Root cause `a\u2026", - "changed_files": 2, + "additions": 177, + "author": "rubencu", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: `gateway:watch` could spam repeated `[plugins] ... installed bundled runtime deps ...` lines during normal helper/runtime loads after startup. - Why it matters: the repeated lines looked like fresh installs on every T\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68741", - "created_at": "2026-04-19T00:47:38Z", - "deletions": 25, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69690", + "created_at": "2026-04-21T11:19:04Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68741/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68741", + "files_url": "https://github.com/openclaw/openclaw/pull/69690/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69690", "labels": [ - "size: M", - "extensions: acpx" + "size: S" ], "merged": false, - "number": 68741, + "number": 69690, "review_comments_count": 2, "state": "open", - "title": "fix(acpx): avoid per-session MCP on openclaw bridge", - "updated_at": "2026-04-19T00:57:31Z" + "title": "fix: reuse gateway-bindable plugin registries for runtime loads", + "updated_at": "2026-04-21T11:49:16Z" }, { - "additions": 37, - "author": "neeravmakwana", + "additions": 40, + "author": "ly85206559", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `gemma4` tags in Ollama (e.g. `gemma4`, `gemma4:12b`, `gemma4:27b`, `gemma4:31b`) were not detected as reasoning models, so the Ollama thinking-mode plumbing and reasoning-aware provider defaults silently fell back to\u2026", - "changed_files": 4, - "cluster_id": "cluster-68728-3", + "body_excerpt": "## Summary - **Problem:** In Control UI webchat, clicking Copy on a fenced code block pasted the entire assistant Markdown instead of only the snippet (#69605). - **Why it matters:** Floating \u201cCopy as markdown\u201d / expand controls overlap th\u2026", + "changed_files": 3, + "cluster_id": "cluster-69605-4", "cluster_ids": [ - "cluster-68728-3" + "cluster-69605-4" ], - "cluster_role": "canonical", - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68740", - "created_at": "2026-04-19T00:47:25Z", - "deletions": 4, + "cluster_role": "member", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69689", + "created_at": "2026-04-21T11:17:01Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68740/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68740", + "files_url": "https://github.com/openclaw/openclaw/pull/69689/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69689", "labels": [ - "docs", + "app: web-ui", "size: XS" ], "merged": false, - "number": 68740, - "review_comments_count": 1, + "number": 69689, + "review_comments_count": 0, "state": "open", - "title": "Ollama/models: detect Gemma 4 and `thinking` capability as reasoning", - "updated_at": "2026-04-19T00:56:51Z" + "title": "fix(ui): reserve bubble space for code block copy (#69605)", + "updated_at": "2026-04-21T11:18:03Z" }, { - "additions": 36, - "author": "bohell", + "additions": 4798, + "author": "mohitmehral", "author_association": "NONE", - "body_excerpt": "## Problem When the Mattermost WebSocket connection enters a **zombie state** (TCP connected but no longer receiving events), the bot stays alive and can still send messages via REST API, but **stops receiving all incoming messages**. The\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - **Problem:** OpenClaw has no built-in skill for provisioning and managing AWS/Azure infrastructure via Terraform. Users must manually write `.tf` files, manage state, and run CLI commands outside the agent workflow. - **Why it\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68737", - "created_at": "2026-04-19T00:35:02Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69688", + "created_at": "2026-04-21T11:14:53Z", "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68737/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68737", + "files_url": "https://github.com/openclaw/openclaw/pull/69688/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69688", "labels": [ - "channel: mattermost", - "size: XS" + "size: XL" ], "merged": false, - "number": 68737, - "review_comments_count": 2, + "number": 69688, + "review_comments_count": 7, "state": "open", - "title": "fix(mattermost): auto-reconnect WebSocket after consecutive health check failures", - "updated_at": "2026-04-19T00:37:56Z" + "title": "feat(skills): add terraform-iac skill \u2014 AWS/Azure IaC agent with resource wizards and Terraform Cloud state", + "updated_at": "2026-04-21T11:44:40Z" }, { - "additions": 3476, - "author": "LightDriverCS", + "additions": 37, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "## Summary Harden the memory-wiki vault so it's deterministic and trustworthy for daily use. Kills three pipeline bugs responsible for most of the current 42 lint errors + 682 warnings, codifies the canonical page standard in code + docs,\u2026", - "changed_files": 33, + "body_excerpt": "## Summary\\n\\n- **Problem:** The isProbeSuppressedSubsystem check called .startsWith() on params.subsystem without optional chaining. When subsystem is undefined, this causes TypeError: Cannot read properties of undefined (reading 'startsW\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68736", - "created_at": "2026-04-19T00:23:07Z", - "deletions": 18, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69687", + "created_at": "2026-04-21T11:04:50Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68736/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68736", + "files_url": "https://github.com/openclaw/openclaw/pull/69687/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69687", "labels": [ - "extensions: memory-core", - "size: XL", - "extensions: memory-wiki" + "channel: telegram", + "app: web-ui", + "cli", + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68736, - "review_comments_count": 4, + "number": 69687, + "review_comments_count": 0, "state": "closed", - "title": "fix(memory-wiki): standardize page schema + repair pipeline", - "updated_at": "2026-04-19T00:28:50Z" + "title": "fix(logging): add optional chaining to subsystem.startsWith checks", + "updated_at": "2026-04-21T13:45:21Z" }, { - "additions": 144, - "author": "stroupaloop", + "additions": 4820, + "author": "mohitmehral", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: `before_prompt_build` hook fires in `setup.ts` where `availableTools` is always empty, so plugins can never classify tools or return meaningful `toolsAllow` - Why it matters: Plugins that want to reduce token usage by\u2026", - "changed_files": 8, + "body_excerpt": "## Summary - **Problem:** OpenClaw has no built-in skill for provisioning and managing AWS/Azure infrastructure via Terraform. Users must manually write `.tf` files, manage state, and run CLI commands outside the agent workflow. - **Why it\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68734", - "created_at": "2026-04-19T00:01:19Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69686", + "created_at": "2026-04-21T10:55:06Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68734/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68734", - "labels": [ - "agents", - "size: S" - ], - "merged": false, - "number": 68734, - "review_comments_count": 8, - "state": "open", - "title": "feat(hooks): allow prompt hooks to dynamically narrow tool surface", - "updated_at": "2026-04-19T01:21:48Z" - }, - { - "additions": 45, - "author": "dyz2102", - "author_association": "NONE", - "body_excerpt": "## Summary Fixes #68727. This changes audio media-understanding fallback behavior so API-provider audio transcription wins before local CLI auto-detection, and avoids passing a pre-wrapped proxy fetch into audio providers. Audio providers\u2026", - "changed_files": 4, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68733", - "created_at": "2026-04-18T23:56:28Z", - "deletions": 6, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68733/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68733", + "files_url": "https://github.com/openclaw/openclaw/pull/69686/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69686", "labels": [ - "size: S" + "size: XL" ], "merged": false, - "number": 68733, - "review_comments_count": 0, - "state": "open", - "title": "Prefer API audio providers before local fallback", - "updated_at": "2026-04-18T23:56:41Z" + "number": 69686, + "review_comments_count": 7, + "state": "closed", + "title": "feat(skills): add terraform-iac skill \u2014 AWS/Azure IaC agent with resource wizards and Terraform Cloud state", + "updated_at": "2026-04-21T11:05:50Z" }, { - "additions": 38, - "author": "wirjo", + "additions": 330, + "author": "suboss87", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem Claude Opus 4.7 (launched April 16, 2026) is available on Bedrock Mantle via the **Anthropic Messages API** at `/anthropic/v1/messages`. This is the first Claude model on Mantle \u2014 older Claude models are NOT available. The exist\u2026", - "changed_files": 3, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary - Strips `` / `` / `` wrapper tags from assistant message text blocks before the message is persisted to the session transcript - Fixes the Control UI showing raw `` tags after streaming ends, even\u2026", + "changed_files": 5, + "cluster_id": "cluster-65182-5", + "cluster_ids": [ + "cluster-65182-5" + ], + "cluster_role": "member", "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68730", - "created_at": "2026-04-18T23:49:30Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69685", + "created_at": "2026-04-21T10:51:36Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68730/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68730", + "files_url": "https://github.com/openclaw/openclaw/pull/69685/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69685", "labels": [ - "size: XS" + "agents", + "size: M" ], "merged": false, - "number": 68730, - "review_comments_count": 6, + "number": 69685, + "review_comments_count": 0, "state": "open", - "title": "feat(amazon-bedrock-mantle): add Claude Opus 4.7 via per-model Anthropic Messages API override", - "updated_at": "2026-04-19T03:06:20Z" + "title": "fix(agents): strip final tags from persisted assistant message", + "updated_at": "2026-04-21T11:04:21Z" }, { - "additions": 138, - "author": "ender-wiggin-ai", + "additions": 13, + "author": "lazyeo", "author_association": "NONE", - "body_excerpt": "## Summary Extends the `before_prompt_build` hook so plugins can dynamically narrow the tool surface per-turn. ## Changes - Exposes `availableTools: string[]` on `PluginHookBeforePromptBuildEvent` so plugins can see which tools survived th\u2026", - "changed_files": 8, + "body_excerpt": "## Summary - ignore `message_changed` and `message_deleted` subtype events in the Slack message monitor - keep those system events from re-enqueueing AI handling for prior messages - update targeted Slack monitor tests to assert the events\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68729", - "created_at": "2026-04-18T23:49:15Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69684", + "created_at": "2026-04-21T10:50:38Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68729/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68729", + "files_url": "https://github.com/openclaw/openclaw/pull/69684/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69684", "labels": [ - "agents", - "size: S" + "channel: slack", + "size: XS" ], "merged": false, - "number": 68729, - "review_comments_count": 3, - "state": "closed", - "title": "feat(hooks): allow prompt hooks to dynamically narrow tool surface", - "updated_at": "2026-04-18T23:57:37Z" + "number": 69684, + "review_comments_count": 0, + "state": "open", + "title": "fix(slack): ignore edit/delete system events for AI re-trigger", + "updated_at": "2026-04-21T10:52:07Z" }, { - "additions": 35, - "author": "BKF-Gitty", + "additions": 57, + "author": "MoerAI", "author_association": "CONTRIBUTOR", - "body_excerpt": "Error payloads from sessions_spawn and subagent wait outcomes now carry the context a parent needs to retry or report clearly: - sessions-spawn-tool: add role (requested agentId) to early validation errors, to the ACP register-failure payl\u2026", + "body_excerpt": "## Summary - seed the image-model runtime auth before media model discovery so SecretRef-backed Anthropic credentials reach the discovered client path - keep the existing model-specific auth resolution after discovery, and add a regression\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68726", - "created_at": "2026-04-18T23:45:47Z", - "deletions": 10, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69682", + "created_at": "2026-04-21T10:49:03Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68726/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68726", + "files_url": "https://github.com/openclaw/openclaw/pull/69682/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69682", "labels": [ - "agents", - "size: XS" + "size: S" ], "merged": false, - "number": 68726, - "review_comments_count": 2, + "number": 69682, + "review_comments_count": 0, "state": "open", - "title": "fix(subagent): include role, session key, and timing in error payloads", - "updated_at": "2026-04-19T00:04:51Z" + "title": "fix(agents): resolve auth profile for imageModel inference calls (#69620)", + "updated_at": "2026-04-21T10:51:22Z" }, { - "additions": 51, - "author": "wirjo", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem Mantle's `/v1/models` endpoint returns only model IDs \u2014 no token limit metadata. Discovery hardcodes `contextWindow: 32000` for every model, which is wrong for most: - MiniMax M2/M2.1: **1,000,000** (gets 32K) - Qwen3 Coder: **2\u2026", + "additions": 13, + "author": "aalekh-sarvam", + "author_association": "NONE", + "body_excerpt": "## Summary Replace `searchVector`'s full-table-scan SQL with sqlite-vec's native KNN operator. Keeps `vec_distance_cosine()` in the `SELECT` so the returned score stays in the expected cosine [0, 1] range. Fixes #69666. ## Benchmark Measur\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68725", - "created_at": "2026-04-18T23:34:17Z", - "deletions": 2, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69680", + "created_at": "2026-04-21T10:40:59Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68725/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68725", + "files_url": "https://github.com/openclaw/openclaw/pull/69680/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69680", "labels": [ - "size: S" + "extensions: memory-core", + "size: XS" ], "merged": false, - "number": 68725, - "review_comments_count": 3, + "number": 69680, + "review_comments_count": 4, "state": "open", - "title": "feat(amazon-bedrock-mantle): add known context windows for open-weight Mantle models", - "updated_at": "2026-04-19T02:00:18Z" + "title": "fix(memory): use sqlite-vec KNN for searchVector (~190\u00d7 speedup)", + "updated_at": "2026-04-21T12:54:51Z" }, { - "additions": 102, - "author": "Lucenx9", + "additions": 2166, + "author": "obviyus", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - preserve an attached SSRF guard dispatcher in `blueBubblesFetchWithTimeout` by routing that path through the dispatcher-aware runtime fetch helper - keep the existing global `fetch` fallback only for requests that do not carry\u2026", - "changed_files": 2, + "body_excerpt": "Summary - Keep one Claude stdio process warm per OpenClaw session. - Close idle Claude processes after 10 minutes, then resume with the stored Claude session id. - Add config/schema/docs plus regression coverage for reuse and idle cleanup.\u2026", + "changed_files": 16, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68724", - "created_at": "2026-04-18T23:34:06Z", - "deletions": 11, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69679", + "created_at": "2026-04-21T10:34:50Z", + "deletions": 25, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68724/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68724", + "files_url": "https://github.com/openclaw/openclaw/pull/69679/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69679", "labels": [ - "channel: bluebubbles", - "size: S" + "docs", + "gateway", + "agents", + "maintainer", + "size: XL", + "extensions: anthropic" ], "merged": false, - "number": 68724, - "review_comments_count": 0, + "number": 69679, + "review_comments_count": 18, "state": "open", - "title": "fix(bluebubbles): preserve pinned dispatcher for media fetches", - "updated_at": "2026-04-18T23:42:39Z" + "title": "Keep Claude CLI sessions warm", + "updated_at": "2026-04-21T15:01:55Z" }, { - "additions": 44, - "author": "kagura-agent", + "additions": 41, + "author": "sk7n4k3d", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68709 ## Problem The main config writer in `src/config/io.ts` writes a tmp file with `mode: 0o600`, then atomically renames it over the target. On the **rename success path** (Linux), no `chmod` was applied afterward. Under a permis\u2026", - "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68722", - "created_at": "2026-04-18T23:21:22Z", - "deletions": 2, + "body_excerpt": "Fixes #69368. ## What Extend `ERROR_PATTERNS.timeout` in `src/agents/pi-embedded-helpers/failover-matches.ts` so the failover classifier recognises four families of bare transport errors as `timeout`: - undici `TypeError: terminated` throw\u2026", + "changed_files": 3, + "cluster_id": "cluster-69058-3", + "cluster_ids": [ + "cluster-69058-3" + ], + "cluster_role": "canonical", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69677", + "created_at": "2026-04-21T10:16:07Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68722/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68722", + "files_url": "https://github.com/openclaw/openclaw/pull/69677/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69677", "labels": [ + "agents", "size: XS" ], "merged": false, - "number": 68722, + "number": 69677, "review_comments_count": 1, - "state": "closed", - "title": "fix: chmod openclaw.json to 0o600 after atomic rename on config write", - "updated_at": "2026-04-19T02:18:45Z" + "state": "open", + "title": "fix(agents/failover): classify undici 'terminated' and codex 'Request failed' as timeout (#69368)", + "updated_at": "2026-04-21T10:20:47Z" }, { - "additions": 24, - "author": "Lucenx9", + "additions": 17, + "author": "MoerAI", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - default the Codex app-server harness to `approvalPolicy: \"on-request\"` instead of `\"never\"` - keep explicit overrides intact for operators that still want `never` or another native Codex policy - update plugin docs and tests t\u2026", - "changed_files": 5, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary - load bundled plugins for `openclaw memory` commands so plugin-provided embedding adapters are registered before memory manager startup - keep GitHub Copilot memory embeddings available for `memory status` and `memory index` wh\u2026", + "changed_files": 3, + "cluster_id": "cluster-63847-2", + "cluster_ids": [ + "cluster-63847-2" + ], + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68721", - "created_at": "2026-04-18T23:09:07Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69676", + "created_at": "2026-04-21T10:15:03Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68721/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68721", + "files_url": "https://github.com/openclaw/openclaw/pull/69676/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69676", "labels": [ - "docs", - "size: XS", - "extensions: codex" + "cli", + "size: XS" ], "merged": false, - "number": 68721, + "number": 69676, "review_comments_count": 0, "state": "open", - "title": "fix(codex): default app-server approvals to on-request", - "updated_at": "2026-04-18T23:14:23Z" + "title": "fix(memory): recognize github-copilot as valid memory embedding provider (#69180)", + "updated_at": "2026-04-21T10:15:59Z" }, { - "additions": 5840, - "author": "garrytan", + "additions": 42, + "author": "V0hgg", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: OpenClaw's subagent dispatch has no persistence layer. Gateway crashes lose all in-flight work. Sub-agents that timeout or crash leave orphaned processes and session state. There is no cascade cancel (grandchildre\u2026", - "changed_files": 49, + "body_excerpt": "## Summary - clarify ACP thread-bound follow-up semantics - document that thread continuity does not imply verbatim relay - note that parent assistant should remain the default interpreter unless exact relay is explicitly requested ## Why\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 6, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68718", - "created_at": "2026-04-18T23:01:38Z", - "deletions": 187, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69675", + "created_at": "2026-04-21T10:08:57Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68718/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68718", + "files_url": "https://github.com/openclaw/openclaw/pull/69675/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69675", "labels": [ "docs", - "app: web-ui", - "gateway", - "cli", - "scripts", "agents", - "size: XL" + "size: XS" ], "merged": false, - "number": 68718, - "review_comments_count": 28, + "number": 69675, + "review_comments_count": 2, "state": "open", - "title": "minions: durable SQLite-backed job queue for subagents, ACP, CLI, and cron", - "updated_at": "2026-04-19T07:12:36Z" + "title": "docs(acp): clarify thread-bound follow-up orchestration", + "updated_at": "2026-04-21T10:13:20Z" }, { - "additions": 44, - "author": "BKF-Gitty", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Recurring cron jobs could accumulate consecutive failures indefinitely without notifying the user unless `cron.failureAlert.enabled` was explicitly set to `true`. - Why it matters: A recurring cron could fail many tim\u2026", - "changed_files": 2, + "additions": 1, + "author": "hxy91819", + "author_association": "MEMBER", + "body_excerpt": "## Summary Remove the redundant `fix(agents):` bullet for PR #67800 from `## Unreleased`, keeping the fuller Agents/Anthropic note. ## Base Prepared from latest `upstream/main` (merge-base matches `upstream/main` at `4bacdc8824`). ## Notes\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68717", - "created_at": "2026-04-18T22:54:59Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69670", + "created_at": "2026-04-21T10:02:08Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68717/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68717", + "files_url": "https://github.com/openclaw/openclaw/pull/69670/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69670", "labels": [ + "maintainer", "size: XS" ], - "merged": false, - "number": 68717, - "review_comments_count": 2, - "state": "open", - "title": "fix(cron): enable failure alerts by default for recurring jobs", - "updated_at": "2026-04-18T23:08:46Z" + "merged": true, + "number": 69670, + "review_comments_count": 0, + "state": "closed", + "title": "docs(changelog): deduplicate #67800 entries in Unreleased", + "updated_at": "2026-04-21T10:10:35Z" }, { - "additions": 497, - "author": "coygeek", + "additions": 201, + "author": "dangoZhang", + "author_association": "NONE", + "body_excerpt": "## Summary - route `message_sending` hooks through the shared `deliverTextOrMediaReply` helper - thread message-sending context through the generic reply-based channel adapters - add regression tests for mutation and cancel behavior in the\u2026", + "changed_files": 9, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69665", + "created_at": "2026-04-21T09:50:03Z", + "deletions": 4, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69665/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69665", + "labels": [ + "channel: googlechat", + "channel: imessage", + "channel: mattermost", + "channel: signal", + "channel: slack", + "channel: zalo", + "channel: zalouser", + "size: M" + ], + "merged": false, + "number": 69665, + "review_comments_count": 0, + "state": "open", + "title": "[codex] Route message_sending hooks through generic reply delivery", + "updated_at": "2026-04-21T09:50:20Z" + }, + { + "additions": 10, + "author": "zhouhe-xydt", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Discord guild-admin message actions could run with bot privileges without verifying that the requesting guild member held the corresponding Discord permissions. - Why it matters: any guild member who could message the\u2026", - "changed_files": 7, + "body_excerpt": "## Summary Fixes `bun openclaw.mjs` crashing on bootstrap when the optional `warning-filter` import is missing. Bun does not set `err.url` on `ERR_MODULE_NOT_FOUND` errors and uses the original relative specifier in its error message inste\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68716", - "created_at": "2026-04-18T22:54:21Z", - "deletions": 10, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69664", + "created_at": "2026-04-21T09:40:04Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68716/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68716", + "files_url": "https://github.com/openclaw/openclaw/pull/69664/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69664", "labels": [ - "channel: discord", - "size: L" + "size: XS" ], "merged": false, - "number": 68716, - "review_comments_count": 2, + "number": 69664, + "review_comments_count": 0, "state": "open", - "title": "fix: Discord guild-admin actions execute without requester...", - "updated_at": "2026-04-18T23:00:18Z" + "title": "fix(bootstrap): recognize Bun error shape in isDirectModuleNotFoundError", + "updated_at": "2026-04-21T09:41:46Z" }, { - "additions": 3068, - "author": "visionik", + "additions": 94, + "author": "MoerAI", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68027. A `browser.cdpUrl` set to a bare `ws://host:port` without a `/devtools/...` path made `openclaw browser start` (and any `ensureBrowserAvailable` caller) fail with: ``` Browser attachOnly is enabled and profile \"ope\u2026", - "changed_files": 9, + "body_excerpt": "## Summary - recurse local skill discovery so nested `SKILL.md` files under a configured skills root are found - allow workspace skill roots to load nested category folders instead of requiring `SKILL.md` at the first child level - add a r\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68715", - "created_at": "2026-04-18T22:49:07Z", - "deletions": 26, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69663", + "created_at": "2026-04-21T09:39:30Z", + "deletions": 35, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68715/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68715", + "files_url": "https://github.com/openclaw/openclaw/pull/69663/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69663", "labels": [ - "maintainer", - "size: XL" + "agents", + "size: S" ], "merged": false, - "number": 68715, + "number": 69663, "review_comments_count": 3, "state": "open", - "title": "fix(browser): discover CDP websocket from bare ws:// URL before attach", - "updated_at": "2026-04-19T06:21:34Z" + "title": "fix(skills): recurse into subdirectories when scanning skill root (#56915)", + "updated_at": "2026-04-21T10:56:19Z" }, { - "additions": 6, - "author": "armorbreak001", - "author_association": "NONE", - "body_excerpt": "## Problem On Linux systemd deployments, `openclaw.json` ends up with mode `0664` (group-writable, world-readable) after gateway runtime hot-saves (e.g. `openclaw config set` or internal config API mutations). Since `openclaw.json` contain\u2026", - "changed_files": 1, + "additions": 631, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898\\n#69418 - \u622a\u56fe\u4f20\u6587\u4ef6\u8def\u5f84\u800c\u975e\u56fe\u7247\uff0c\u5bfc\u81f4\u89c6\u89c9\u5b8c\u5168\u5931\u6548\u3002Telegram \u7528\u6237\u53d1\u9001\u622a\u56fe\u540e\uff0c\u6a21\u578b\u6536\u5230\u7684\u662f\u6587\u4ef6\u8def\u5f84\u800c\u975e\u5b9e\u9645\u56fe\u7247\u5185\u5bb9\u3002\\n\\n## \u4fee\u590d\\n\u786e\u4fdd\u622a\u56fe\u7ed3\u679c\u4ee5 image data \u800c\u975e file path \u4f20\u9012\u7ed9\u6a21\u578b\u3002\\n\\n## \u6d4b\u8bd5\u8986\u76d6\\n\u65b0\u589e\u622a\u56fe\u76f8\u5173\u6d4b\u8bd5\u7528\u4f8b\u3002", + "changed_files": 16, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68714", - "created_at": "2026-04-18T22:36:24Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69662", + "created_at": "2026-04-21T09:36:11Z", + "deletions": 26, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68714/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68714", + "files_url": "https://github.com/openclaw/openclaw/pull/69662/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69662", "labels": [ - "size: XS" + "app: web-ui", + "agents", + "size: L", + "r: too-many-prs" ], "merged": false, - "number": 68714, - "review_comments_count": 2, - "state": "open", - "title": "fix(config): openclaw.json written with 0664 mode instead of 0600 after hot-save", - "updated_at": "2026-04-18T22:42:16Z" + "number": 69662, + "review_comments_count": 5, + "state": "closed", + "title": "fix: pass screenshot as image data not file path (#69418)", + "updated_at": "2026-04-21T09:42:15Z" }, { - "additions": 93, - "author": "gaineyllc", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** On `api: \"openai-completions\"`, providers served from local or custom endpoints \u2014 vLLM (reported), LocalAI, SGLang, llama.cpp `--server`, Jan, LM Studio, text-generation-webui, TabbyAPI \u2014 have `supportsUsageInStre\u2026", - "changed_files": 2, + "additions": 575, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898\\n#69547 \u548c #69497 \u90fd\u662f\u5bf9 undefined \u8c03\u7528 .trim() \u5bfc\u81f4\u7684 TypeError\u3002QuickStart onboarding \u9009\u62e9 Skip for now \u65f6\u5d29\u6e83\u3002\\n\\n## \u4fee\u590d\\n\u5728 channel-setup.status.ts \u7684 formatSetupDisplayText \u51fd\u6570\u4e2d\uff0c\u5f53 normalizeOptionalString \u8fd4\u56de undefined \u65f6\u4e0d\u8c03\u7528 .trim()\u3002\\n\\n## \u6d4b\u8bd5\u8986\u76d6\\n\u65b0\u589e\u6d4b\u8bd5\u2026", + "changed_files": 15, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68711", - "created_at": "2026-04-18T22:29:01Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69661", + "created_at": "2026-04-21T09:36:01Z", + "deletions": 26, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68711/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68711", + "files_url": "https://github.com/openclaw/openclaw/pull/69661/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69661", "labels": [ + "app: web-ui", "agents", - "size: S" + "size: L", + "r: too-many-prs" ], "merged": false, - "number": 68711, + "number": 69661, "review_comments_count": 2, - "state": "open", - "title": "fix(openai-completions): enable streaming usage for vLLM + local OpenAI-compat servers", - "updated_at": "2026-04-18T22:48:16Z" + "state": "closed", + "title": "fix: handle undefined in trim call (#69547, #69497)", + "updated_at": "2026-04-21T09:42:30Z" }, { - "additions": 171, - "author": "Lucenx9", + "additions": 95, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Discord `/new` and `/reset` could bypass guild channel disable/allowlist and command-authorization guards when a configured ACP binding or route was present. - Why it matters: admins can disable or disallow a channel\u2026", - "changed_files": 2, + "body_excerpt": "## \u95ee\u9898\\nopenrouter/auto \u6a21\u578b\u88ab\u5ffd\u7565\uff0c\u5f3a\u5236\u964d\u7ea7\u5230 gpt-4.1-mini\u3002\\n\\n## \u4fee\u590d\\n\u786e\u4fdd openrouter/auto \u6a21\u578b\u9009\u62e9\u88ab\u6b63\u786e\u4f20\u9012\u5230 provider wrapper\uff0c\u4e0d\u88ab\u8986\u76d6\u3002\\n\\n## \u6d4b\u8bd5\u8986\u76d6\\n\u65b0\u589e\u76f8\u5173\u6d4b\u8bd5\u7528\u4f8b\u3002", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68710", - "created_at": "2026-04-18T22:26:20Z", - "deletions": 41, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69660", + "created_at": "2026-04-21T09:35:52Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68710/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68710", + "files_url": "https://github.com/openclaw/openclaw/pull/69660/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69660", "labels": [ - "channel: discord", - "size: M" + "agents", + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68710, + "number": 69660, "review_comments_count": 1, + "state": "closed", + "title": "fix: respect openrouter/auto model selection (#69527)", + "updated_at": "2026-04-21T09:37:56Z" + }, + { + "additions": 149, + "author": "PratikRai0101", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: `openclaw doctor --fix` removes unrecognized/custom keys from `openclaw.json` - Why it matters: Causes silent data loss for valid user-defined integrations and config extensions - What changed: Repair flow now merges\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69659", + "created_at": "2026-04-21T09:32:23Z", + "deletions": 13, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69659/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69659", + "labels": [ + "commands", + "size: S" + ], + "merged": false, + "number": 69659, + "review_comments_count": 10, "state": "open", - "title": "fix(discord): enforce guild guards for /new and /reset", - "updated_at": "2026-04-18T22:37:48Z" + "title": "fix(doctor): merge raw JSON to prevent pruning unrecognized keys during repair #69631", + "updated_at": "2026-04-21T15:30:30Z" }, { - "additions": 68, - "author": "Steady-ai", + "additions": 235, + "author": "wAnyBug-Com", "author_association": "NONE", - "body_excerpt": "## Summary - guard route.continue() inside guarded browser navigation so the known Playwright handled-route race does not unwind browser tasks - route both guarded continue() call sites through the same helper instead of duplicating the er\u2026", + "body_excerpt": "--- ## Summary This PR is documentation-only. It proposes documenting a community workspace pattern, `PENDING.md`, for tracking commitments that should survive session reset, compaction, or context loss. This is not a new core feature and\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68708", - "created_at": "2026-04-18T22:24:42Z", - "deletions": 2, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68708/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68708", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69658", + "created_at": "2026-04-21T09:31:57Z", + "deletions": 1, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69658/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69658", "labels": [ - "size: S" + "docs", + "gateway", + "size: XS" ], "merged": false, - "number": 68708, + "number": 69658, + "review_comments_count": 5, + "state": "open", + "title": "docs: document PENDING.md pattern for cross-session commitment tracki\u2026", + "updated_at": "2026-04-21T12:37:10Z" + }, + { + "additions": 35, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "## Summary\\n\\n- **Problem:** The openclaw cron list command accessed job.payload.kind without first checking whether job.payload was defined. When cron jobs exist without a payload object, this caused TypeError: Cannot read properties of u\u2026", + "changed_files": 4, + "cluster_id": "cluster-37299-10", + "cluster_ids": [ + "cluster-37299-10" + ], + "cluster_role": "member", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69657", + "created_at": "2026-04-21T09:22:24Z", + "deletions": 5, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69657/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69657", + "labels": [ + "channel: telegram", + "app: web-ui", + "cli", + "size: XS" + ], + "merged": false, + "number": 69657, "review_comments_count": 0, "state": "open", - "title": "[codex] Guard browser route continue race", - "updated_at": "2026-04-18T22:26:02Z" + "title": "fix(cron): guard against undefined payload in cron list output", + "updated_at": "2026-04-21T15:20:17Z" }, { - "additions": 3348, - "author": "coygeek", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Fix Summary Discord guild-admin mutation actions (`emoji-upload`, `sticker-upload`, `role-add`, `role-remove`, `channel-create`, `channel-edit`, `channel-delete`, `channel-move`, `category-create`, `category-edit`, `category-delete`, `e\u2026", - "changed_files": 254, + "additions": 32, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "## Summary\\n\\n- **Problem:** The chat-bubble element was missing the 'has-copy' CSS class when copy/expand actions were present. This meant the padding-right: 70px style (which reserves space for the action buttons) was never applied, caus\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68705", - "created_at": "2026-04-18T22:13:40Z", - "deletions": 8120, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69655", + "created_at": "2026-04-21T09:13:16Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68705/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68705", + "files_url": "https://github.com/openclaw/openclaw/pull/69655/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69655", "labels": [ - "docs", - "channel: discord", - "channel: matrix", - "channel: slack", "channel: telegram", - "channel: whatsapp-web", - "channel: zalo", "app: web-ui", - "gateway", - "scripts", - "commands", - "docker", - "agents", - "channel: feishu", - "channel: twitch", - "size: XL", - "extensions: anthropic", - "extensions: openai", - "extensions: minimax", - "extensions: moonshot", - "extensions: fal", - "extensions: qa-lab", - "extensions: webhooks" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68705, - "review_comments_count": 6, + "number": 69655, + "review_comments_count": 2, "state": "closed", - "title": "fix: Discord guild-admin actions execute without requester...", - "updated_at": "2026-04-18T22:54:28Z" + "title": "fix(ui): add has-copy class to chat bubble when actions are present", + "updated_at": "2026-04-21T15:35:12Z" }, { - "additions": 33, - "author": "skolez", + "additions": 24, + "author": "yuaiccc", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** When OpenClaw runs in a container, the onboarding wizard prompts for a base URL (e.g. for LM Studio or Ollama) and users naturally enter `http://127.0.0.1:1234` / `http://127.0.0.1:11434`. Inside the container tha\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - Problem: macOS Accessibility docs did not clearly warn about granting permissions to a shared `node` runtime. - Why it matters: TCC grants Accessibility to the process identity macOS sees, so a `node` grant can apply to any np\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68702", - "created_at": "2026-04-18T22:10:59Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69654", + "created_at": "2026-04-21T09:09:46Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68702/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68702", + "files_url": "https://github.com/openclaw/openclaw/pull/69654/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69654", "labels": [ "docs", - "docker", + "app: macos", "size: XS" ], "merged": false, - "number": 68702, + "number": 69654, "review_comments_count": 0, "state": "open", - "title": "fix(docker): enable host.docker.internal for local providers", - "updated_at": "2026-04-18T22:20:44Z" + "title": "docs: warn about node Accessibility grants", + "updated_at": "2026-04-21T09:35:00Z" }, { - "additions": 22, - "author": "amzzzzzzz", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Strip `to` when normalizing `webchat` delivery contexts. This prevents stale or cross-channel recipient targets from being preserved inside a `webchat`-origin delivery context, where later fallback paths can accidentally treat t\u2026", - "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68701", - "created_at": "2026-04-18T21:49:43Z", + "additions": 26, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "## Summary\\n\\n- **Problem:** The filter logic for \u0007ccountIdsToProbe called .trim() on values without first checking they were strings. When channel credentials use SecretRef objects (e.g. { source: 'file', ... }), these objects can end up\u2026", + "changed_files": 3, + "cluster_id": "cluster-37718-3", + "cluster_ids": [ + "cluster-37718-3" + ], + "cluster_role": "canonical", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69652", + "created_at": "2026-04-21T09:00:10Z", "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68701/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68701", + "files_url": "https://github.com/openclaw/openclaw/pull/69652/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69652", "labels": [ + "channel: telegram", + "commands", "size: XS" ], "merged": false, - "number": 68701, - "review_comments_count": 4, + "number": 69652, + "review_comments_count": 3, "state": "open", - "title": "fix: strip invalid webchat delivery recipients", - "updated_at": "2026-04-18T22:06:01Z" + "title": "fix(health): guard account ID filter against non-string values", + "updated_at": "2026-04-21T15:21:51Z" }, { - "additions": 46, - "author": "MonkeyLeeT", + "additions": 1272, + "author": "Ziy1-Tan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - stop treating session lock wait errors as provider timeout failovers - keep wrapped `AbortError` lock cases out of timeout classification too - add a regression covering direct and wrapped session lock errors ## Root Cause `se\u2026", - "changed_files": 2, + "body_excerpt": "## Problem - Raw secret values could still be written into log files. - Redaction already existed on some call-site paths (for example, tool output), but the **file transport itself** did not sanitize records before persistence. - That mea\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68700", - "created_at": "2026-04-18T21:46:48Z", - "deletions": 0, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68700/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68700", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69651", + "created_at": "2026-04-21T08:55:48Z", + "deletions": 1, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69651/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69651", "labels": [ - "agents", - "size: XS" + "size: XL" ], "merged": false, - "number": 68700, - "review_comments_count": 0, + "number": 69651, + "review_comments_count": 13, "state": "open", - "title": "fix(agents): stop treating session lock waits as timeout", - "updated_at": "2026-04-19T02:11:25Z" + "title": " fix(logging): add sink-side redaction for file log", + "updated_at": "2026-04-21T15:43:44Z" }, { - "additions": 126, - "author": "Lucenx9", + "additions": 94, + "author": "Bartok9", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: LM Studio preload failures stored cooldown entries in a global map that only self-cleaned on same-key retry or success. - Why it matters: many unique failing model ids could accumulate stale cooldown state and grow pr\u2026", - "changed_files": 2, + "body_excerpt": "## Problem `openclaw doctor --fix` silently strips **all** keys not recognized by the Zod schema. This includes custom integrations, plugin data, and user-defined JSON objects that users intentionally placed in their config. The deletion h\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68699", - "created_at": "2026-04-18T21:43:42Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69649", + "created_at": "2026-04-21T08:50:37Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68699/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68699", + "files_url": "https://github.com/openclaw/openclaw/pull/69649/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69649", "labels": [ + "commands", "size: S", - "extensions: lmstudio" + "r: too-many-prs" ], "merged": false, - "number": 68699, - "review_comments_count": 0, - "state": "open", - "title": "fix(lmstudio): bound preload cooldown state", - "updated_at": "2026-04-18T21:45:47Z" + "number": 69649, + "review_comments_count": 1, + "state": "closed", + "title": "fix(doctor): preserve unknown config keys during --fix to prevent silent data loss", + "updated_at": "2026-04-21T08:53:49Z" }, { - "additions": 114, - "author": "Lucenx9", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: inbound dedupe claims were only committed at the end of the main dispatch path, so handled early returns left keys stuck in the global in-flight set. - Why it matters: handled inbound messages could accumulate permane\u2026", - "changed_files": 3, + "additions": 59, + "author": "leifengfeng", + "author_association": "NONE", + "body_excerpt": "## Summary - When multiple OpenClaw instances are served behind a single nginx domain with different path prefixes (e.g. `/a`, `/b`, `/c`), switching between instances keeps the WebSocket URL pinned to whichever instance was visited first.\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68698", - "created_at": "2026-04-18T21:15:35Z", - "deletions": 34, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69647", + "created_at": "2026-04-21T08:47:21Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68698/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68698", + "files_url": "https://github.com/openclaw/openclaw/pull/69647/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69647", "labels": [ + "app: web-ui", "size: S" ], "merged": false, - "number": 68698, - "review_comments_count": 2, + "number": 69647, + "review_comments_count": 6, "state": "open", - "title": "fix(auto-reply): commit inbound dedupe on handled exits", - "updated_at": "2026-04-18T21:22:50Z" + "title": "fix(ui): resolve stale gateway URL under nginx reverse-proxy multi-instance setups", + "updated_at": "2026-04-21T10:40:06Z" }, { - "additions": 926, - "author": "KateWilkins", + "additions": 78, + "author": "DanWebb1949", "author_association": "NONE", - "body_excerpt": "## Summary - xAI extension lacked image generation and tts support (only video/speech). - Enables unified `generateImage` (both `/v1/images/generations` + `/v1/images/edits` with exact user-provided payload `{image: {url, type:\"image_url\"}\u2026", - "changed_files": 10, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary `openclaw update` currently runs a full package-manager install, native-module recompilation, and doctor checks even when the installed version already matches the registry target. On resource-constrained systems (e.g., 4 GB RAM\u2026", + "changed_files": 2, + "cluster_id": "cluster-69412-3", + "cluster_ids": [ + "cluster-69412-3" + ], + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68694", - "created_at": "2026-04-18T20:59:29Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69645", + "created_at": "2026-04-21T08:43:03Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68694/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68694", + "files_url": "https://github.com/openclaw/openclaw/pull/69645/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69645", "labels": [ - "size: L" + "cli", + "size: S" ], "merged": false, - "number": 68694, - "review_comments_count": 4, + "number": 69645, + "review_comments_count": 3, "state": "open", - "title": "FEAT: Add tts and image generation support to xai extension", - "updated_at": "2026-04-18T21:07:15Z" + "title": "fix: skip update when already on target version", + "updated_at": "2026-04-21T08:48:46Z" }, { - "additions": 13, - "author": "lives4code", + "additions": 294, + "author": "Noor-ul-ain001", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "body_excerpt": "I updated the README to make the setup process easier for beginners. Added: - Clearer instructions - Common issues and fixes This should help new users understand the project better.", "changed_files": 1, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68693", - "created_at": "2026-04-18T20:53:04Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69644", + "created_at": "2026-04-21T08:42:33Z", + "deletions": 372, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68693/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68693", + "files_url": "https://github.com/openclaw/openclaw/pull/69644/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69644", "labels": [ - "docs", - "size: XS" + "size: L" ], "merged": false, - "number": 68693, - "review_comments_count": 1, + "number": 69644, + "review_comments_count": 4, "state": "open", - "title": "Add memory to tools documentation ai assisted", - "updated_at": "2026-04-19T06:39:26Z" + "title": "Improve README with clearer instructions", + "updated_at": "2026-04-21T13:56:59Z" }, { - "additions": 570, - "author": "ljbudgie", + "additions": 17, + "author": "yuaiccc", "author_association": "NONE", - "body_excerpt": "This pull request introduces the Burgess Principle as the core governance and accountability framework for OpenClaw, ensuring that any automated decision affecting an individual must pass a binary test for individual consideration before e\u2026", - "changed_files": 8, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68692", - "created_at": "2026-04-18T20:51:45Z", + "body_excerpt": "## Summary - Problem: Zalo Personal docs did not mention the profile environment variables declared and read by the bundled plugin. - Why it matters: users had to inspect source code to discover how to select saved Zalo login profiles. - W\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69643", + "created_at": "2026-04-21T08:41:43Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68692/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68692", + "files_url": "https://github.com/openclaw/openclaw/pull/69643/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69643", "labels": [ "docs", - "size: M" + "channel: zalouser", + "size: XS" ], "merged": false, - "number": 68692, - "review_comments_count": 9, + "number": 69643, + "review_comments_count": 0, "state": "open", - "title": "Formalize Burgess Principle governance in OpenClaw", - "updated_at": "2026-04-18T21:33:59Z" + "title": "docs: document Zalo profile env vars", + "updated_at": "2026-04-21T08:58:55Z" }, { - "additions": 152584, - "author": "markrachapoom", - "author_association": "NONE", - "body_excerpt": "## Problem Users in Dench Cloud see this error every time they switch models: > Switched to Claude Opus 4.6, but the gateway restart did not complete: Command failed: openclaw --profile dench gateway restart > node:internal/bootstrap/switc\u2026", - "changed_files": 6759, + "additions": 57, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Fixes Telegram outbound file delivery in two spots: - parse lowercase `media:` directives during block reply handling so media is sent once - preserve the original filename when staging outbound attachments so Telegram does not show the UU\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68688", - "created_at": "2026-04-18T20:31:21Z", - "deletions": 1110052, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69641", + "created_at": "2026-04-21T08:30:27Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68688/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68688", + "files_url": "https://github.com/openclaw/openclaw/pull/69641/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69641", "labels": [ - "docs", - "channel: bluebubbles", - "channel: discord", - "channel: googlechat", - "channel: imessage", - "channel: line", - "channel: matrix", - "channel: mattermost", - "channel: msteams", - "channel: nextcloud-talk", - "channel: nostr", - "channel: signal", - "channel: slack", - "channel: telegram", - "channel: tlon", - "channel: voice-call", - "channel: whatsapp-web", - "channel: zalo", - "channel: zalouser", - "app: android", - "app: ios", - "app: macos", - "gateway", - "extensions: copilot-proxy", - "extensions: diagnostics-otel", - "extensions: llm-task", - "extensions: lobster", - "extensions: memory-core", - "extensions: memory-lancedb", - "extensions: open-prose", - "security", - "scripts", - "docker", - "agents", - "channel: feishu", - "channel: twitch", - "extensions: device-pair", - "extensions: minimax-portal-auth", - "extensions: phone-control", - "extensions: talk-voice", - "channel: irc", - "size: XL" + "maintainer", + "size: S" ], - "merged": false, - "number": 68688, + "merged": true, + "number": 69641, "review_comments_count": 0, "state": "closed", - "title": "fix(cli): pass safe cwd to spawned openclaw children", - "updated_at": "2026-04-18T20:34:00Z" + "title": "Fix Telegram media file delivery", + "updated_at": "2026-04-21T08:50:01Z" }, { - "additions": 34, - "author": "evgyur", + "additions": 371, + "author": "moonjuhyun123", "author_association": "NONE", - "body_excerpt": "## Summary - Add a core TaskFlow Runtime section to the agent system prompt for both full and minimal prompt modes. - Clarify that simple one-turn answers may stay inline, while non-trivial work should use OpenClaw Tasks / TaskFlow paths.\u2026", - "changed_files": 3, + "body_excerpt": "Local bird's-eye reading-order guides produced by parallel sub-agents: - Use Case A: message lifecycle (inbound -> agent -> outbound) - Use Case B: boot flow (CLI -> gateway daemon) - Use Case C: Live Canvas / A2UI rendering https://claude\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68687", - "created_at": "2026-04-18T20:15:21Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69639", + "created_at": "2026-04-21T08:28:18Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68687/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68687", + "files_url": "https://github.com/openclaw/openclaw/pull/69639/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69639", "labels": [ - "agents", - "size: XS" + "size: M" ], "merged": false, - "number": 68687, - "review_comments_count": 0, + "number": 69639, + "review_comments_count": 4, "state": "open", - "title": "Route durable agent work through TaskFlow", - "updated_at": "2026-04-18T20:17:12Z" + "title": "docs(agents): add architecture reading guides for three use cases", + "updated_at": "2026-04-21T13:54:14Z" }, { - "additions": 57, - "author": "EpaL", + "additions": 33, + "author": "creativerezz", "author_association": "NONE", - "body_excerpt": "## Summary - Auth credential changes (token refresh, profile ID rotation) no longer destroy the CLI session. `resolveCliSessionReuse` now returns the existing `sessionId` alongside `invalidatedReason` for `auth-profile` and `auth-epoch` in\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - allow password-mode gateway auth to fall back to `connectAuth.token` when `connectAuth.password` is absent, which matches Rabbit R1 `clawdbot-gateway` QR handshakes over Funnel + `wss` - add a regression test that covers the R\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68686", - "created_at": "2026-04-18T20:15:13Z", - "deletions": 12, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69638", + "created_at": "2026-04-21T08:24:58Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68686/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68686", + "files_url": "https://github.com/openclaw/openclaw/pull/69638/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69638", "labels": [ - "agents", - "size: S" + "gateway", + "size: XS" ], "merged": false, - "number": 68686, - "review_comments_count": 2, + "number": 69638, + "review_comments_count": 1, "state": "open", - "title": "fix(agents): preserve CLI session on auth-profile/epoch changes", - "updated_at": "2026-04-18T21:48:44Z" + "title": "fix(gateway): accept Rabbit token payloads in password mode", + "updated_at": "2026-04-21T11:16:52Z" }, { - "additions": 177, - "author": "Tmalone1250", + "additions": 99, + "author": "iteemoo6", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: Obsolete `memorySearch` keys (`chunkSize`, `chunkOverlap`, `maxResults`) in `agents.defaults` cause schema validation to fail because the current migration path moves the root key but fails to strip stale sub-keys\u2026", - "changed_files": 2, + "body_excerpt": "Closes #69621\\n\\n- Add PENDING.md.example template with usage guide and examples\\n- Add PENDING.md documentation to agent workspace file map\\n- Add PENDING.md integration guide to heartbeat docs with example task\\n- Explain when to use PEN\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68685", - "created_at": "2026-04-18T20:13:45Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69637", + "created_at": "2026-04-21T08:08:14Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68685/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68685", + "files_url": "https://github.com/openclaw/openclaw/pull/69637/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69637", "labels": [ - "commands", - "size: S" + "docs", + "gateway", + "size: XS" ], "merged": false, - "number": 68685, - "review_comments_count": 1, + "number": 69637, + "review_comments_count": 4, "state": "open", - "title": "fix(config): strip obsolete memorySearch keys before schema validation (#68664)", - "updated_at": "2026-04-18T20:49:39Z" + "title": "docs: add PENDING.md workspace pattern for durable commitment tracking", + "updated_at": "2026-04-21T08:22:24Z" }, { - "additions": 27, - "author": "plgonzalezrx8", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Issue The Anthropic CLI backend currently forces `--permission-mode bypassPermissions` into Claude CLI runs even when the caller did not request it. That weakens the default security posture by suppressing Claude's built-in permission p\u2026", - "changed_files": 3, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68682", - "created_at": "2026-04-18T20:09:24Z", - "deletions": 38, + "additions": 15, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "## Summary - **Problem:** The data-code attribute on code-block copy buttons was using escapeHtml(), which converted special characters like <, >, and & into HTML entities. When users clicked the copy button, they got escaped text instead\u2026", + "changed_files": 2, + "cluster_id": "cluster-69605-4", + "cluster_ids": [ + "cluster-69605-4" + ], + "cluster_role": "canonical", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69635", + "created_at": "2026-04-21T07:56:34Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68682/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68682", + "files_url": "https://github.com/openclaw/openclaw/pull/69635/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69635", "labels": [ - "size: S", - "extensions: anthropic" + "app: web-ui", + "size: XS" ], "merged": false, - "number": 68682, - "review_comments_count": 1, + "number": 69635, + "review_comments_count": 5, "state": "open", - "title": "anthropic: stop forcing Claude CLI permission bypass", - "updated_at": "2026-04-18T20:18:00Z" + "title": "fix(ui): preserve raw code text in code-block copy button", + "updated_at": "2026-04-21T15:20:17Z" }, { - "additions": 59, - "author": "christnorman", + "additions": 1, + "author": "longle325", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: dreaming narrative cleanup can log `missing scope: operator.admin` during synthetic plugin-runtime cleanup. - Why it matters: this is expected best-effort cleanup behavior,\u2026", - "changed_files": 4, - "cluster_id": "cluster-65653-11", + "body_excerpt": "## Summary Fixes #69605 In the Control UI webchat, clicking the copy button on a code block copies the entire assistant message instead of just the code block content. ## Root Cause The `.chat-bubble-actions` (containing the \"Copy as markd\u2026", + "changed_files": 1, + "cluster_id": "cluster-69605-4", "cluster_ids": [ - "cluster-65653-11" + "cluster-69605-4" ], "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68681", - "created_at": "2026-04-18T20:08:44Z", - "deletions": 8, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68681/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68681", - "labels": [ - "gateway", - "extensions: memory-core", - "size: S" - ], - "merged": false, - "number": 68681, - "review_comments_count": 2, - "state": "open", - "title": "fix(memory-core): suppress expected dreaming cleanup scope warnings", - "updated_at": "2026-04-18T20:17:07Z" - }, - { - "additions": 125, - "author": "Bartok9", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem When a subprocess is killed by an OS signal (SIGKILL from OOM pressure, macOS `debug.swd_panic=1` watchpoints, etc.) Node.js delivers `exit(null, \"SIGKILL\")` to the exit handler. The previous code treated `code === null` as `exi\u2026", - "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68680", - "created_at": "2026-04-18T20:02:31Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69634", + "created_at": "2026-04-21T07:51:52Z", "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68680/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68680", - "labels": [ - "size: S" - ], - "merged": false, - "number": 68680, - "review_comments_count": 3, - "state": "open", - "title": "fix(exec): surface signal-killed subprocesses as structured errors instead of silent undefined", - "updated_at": "2026-04-18T20:05:25Z" - }, - { - "additions": 395, - "author": "nitinwadhawan", - "author_association": "NONE", - "body_excerpt": "## Summary Session history is re-sanitized on every turn via `sanitizeSessionMessagesImages`, which means `resizeImageBase64IfNeeded` is invoked for the same historical image on every message. Both the `getImageMetadata` header read and an\u2026", - "changed_files": 4, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68677", - "created_at": "2026-04-18T19:44:38Z", - "deletions": 3, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68677/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68677", + "files_url": "https://github.com/openclaw/openclaw/pull/69634/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69634", "labels": [ - "agents", - "size: M" + "app: web-ui", + "size: XS" ], "merged": false, - "number": 68677, - "review_comments_count": 2, + "number": 69634, + "review_comments_count": 0, "state": "open", - "title": "Agents/tool-images: memoize resize to avoid per-turn sharp decode (#64418)", - "updated_at": "2026-04-18T20:04:46Z" + "title": "fix(ui): code block copy button overlaps message-level copy action (#69605)", + "updated_at": "2026-04-21T09:03:50Z" }, { - "additions": 6, - "author": "artificialdimension", + "additions": 75, + "author": "AlexAlves87", "author_association": "NONE", - "body_excerpt": "## Summary - Adds `legacy-peer-deps=true` to `.npmrc` so plain `npm install` works without the `--legacy-peer-deps` flag. - madge@8.0.0 (latest on registry) declares `peerOptional typescript@^5.4.4`, but this repo is on `typescript@^6.0.2`\u2026", + "body_excerpt": "## Summary Implements the SPA-side support for the WebView2 native bridge proposed in openclaw/openclaw-windows-node#191. The Windows host side is being introduced in openclaw/openclaw-windows-node#192. This PR adds the frontend bridge lay\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68676", - "created_at": "2026-04-18T19:34:56Z", + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69633", + "created_at": "2026-04-21T07:50:57Z", "deletions": 0, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68676/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68676", + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69633/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69633", "labels": [ - "size: XS" + "app: web-ui", + "size: S" ], "merged": false, - "number": 68676, + "number": 69633, "review_comments_count": 0, "state": "open", - "title": "build: enable legacy-peer-deps for npm installs (madge@8 vs TS 6)", - "updated_at": "2026-04-18T19:35:58Z" + "title": "feat(ui): add SPA-side support for WebView2 native bridge", + "updated_at": "2026-04-21T07:58:12Z" }, { - "additions": 1, - "author": "1aifanatic", + "additions": 3, + "author": "yuaiccc", "author_association": "NONE", - "body_excerpt": "## Summary - `normalizeTimeout` in `src/commands/channels/capabilities.ts` had a dead ternary: both the `then` and `else` branches evaluated `Number(raw)`, so the `typeof raw === \"string\"` guard had no effect - The intended behavior is to\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - Problem: Agent avatar docs did not mention the local avatar file size limit. - Why it matters: Users can spend time debugging valid-looking avatar paths when the file size is the reason the avatar is not served. - What changed\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68675", - "created_at": "2026-04-18T19:33:50Z", - "deletions": 1, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68675/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68675", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69630", + "created_at": "2026-04-21T07:44:21Z", + "deletions": 0, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69630/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69630", "labels": [ - "commands", - "size: XS", - "r: too-many-prs" + "docs", + "gateway", + "size: XS" ], "merged": false, - "number": 68675, + "number": 69630, "review_comments_count": 0, "state": "closed", - "title": "fix(commands): correct dead ternary branch in normalizeTimeout", - "updated_at": "2026-04-18T19:39:11Z" + "title": "docs: document avatar image size limit", + "updated_at": "2026-04-21T08:05:19Z" }, { - "additions": 198, - "author": "fraction12", + "additions": 1154, + "author": "phenomenoner", "author_association": "NONE", - "body_excerpt": "## Summary - normalize `update_plan` tool-call parameters before loop hashing - collapse tiny wording churn into the same loop signature - add regression coverage so repeated no-progress `update_plan` churn trips the circuit breaker ## Why\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - land the B1/M14 lifecycle seam scaffold in the embedded runner - add M14-A receipt and parity hardening for the seam - add M14-B internal decision gate/schema freeze without enabling live steering ## What changed - adds `run/l\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68673", - "created_at": "2026-04-18T19:30:48Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69627", + "created_at": "2026-04-21T07:37:42Z", "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68673/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68673", + "files_url": "https://github.com/openclaw/openclaw/pull/69627/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69627", "labels": [ "agents", - "size: M" + "size: XL" ], "merged": false, - "number": 68673, - "review_comments_count": 10, + "number": 69627, + "review_comments_count": 11, "state": "open", - "title": "fix: collapse no-progress update_plan churn (AI-assisted)", - "updated_at": "2026-04-18T20:03:12Z" + "title": "feat: harden embedded runner lifecycle seam", + "updated_at": "2026-04-21T12:54:44Z" }, { - "additions": 451, - "author": "RaphaAI", + "additions": 1588, + "author": "arminanton", "author_association": "NONE", - "body_excerpt": "## Problem MiniMax-M2.* served through any OpenAI-compatible endpoint (exo-explore, vLLM, Ollama, llama.cpp, etc.) streams `reasoning_content` deltas with empty `content`. openclaw's openai-transport parser (`src/agents/openai-transport-st\u2026", - "changed_files": 3, + "body_excerpt": "## Summary _AI-assisted PR. Prepared with AI assistance against a repo snapshot; targeted validation only. See Repro + Verification and Human Verification for exact coverage._ Describe the problem and fix in 2\u20135 bullets: - Problem: OpenCla\u2026", + "changed_files": 32, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68670", - "created_at": "2026-04-18T19:13:57Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69618", + "created_at": "2026-04-21T07:04:22Z", + "deletions": 173, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68670/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68670", + "files_url": "https://github.com/openclaw/openclaw/pull/69618/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69618", "labels": [ - "agents", - "size: M" + "docs", + "app: web-ui", + "gateway", + "size: XL" ], "merged": false, - "number": 68670, - "review_comments_count": 0, + "number": 69618, + "review_comments_count": 13, "state": "open", - "title": "fix(minimax): promote thinking-only finals to text on openai-completions", - "updated_at": "2026-04-18T23:11:19Z" + "title": "feat(messages): add responseFooter templates and enrich /usage full", + "updated_at": "2026-04-21T08:38:46Z" }, { - "additions": 46, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: embedded subagent completion invokes `cleanupBrowserSessionsForLifecycleEnd` wrapper twice for the same `runId`. `registerSubagentRun` pairs an in-process `ensureListener()` and a gateway `waitForSubagentCompletion` R\u2026", + "additions": 86, + "author": "rubencu", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: gateway logs repeatedly print `[plugins] ... installed bundled runtime deps ...` during embedded runtime plugin warmups, so normal Telegram or subagent traffic can flood `gateway:watch` with install-style noise. - Why\u2026", "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68669", - "created_at": "2026-04-18T19:00:00Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69617", + "created_at": "2026-04-21T07:03:31Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68669/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68669", + "files_url": "https://github.com/openclaw/openclaw/pull/69617/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69617", "labels": [ "agents", - "size: XS" + "size: S" ], "merged": false, - "number": 68669, + "number": 69617, "review_comments_count": 0, - "state": "open", - "title": "fix(agents): dedupe subagent browser session cleanup wrapper with dispatch flag", - "updated_at": "2026-04-18T19:02:03Z" + "state": "closed", + "title": "fix: suppress repeated bundled runtime deps gateway logs", + "updated_at": "2026-04-21T07:21:45Z" }, { - "additions": 74, - "author": "bluesky6868", + "additions": 4, + "author": "91wan", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: `dispatchAgentHook` in `src/gateway/server/hooks.ts` computed the hook-completion system-event's `sessionKey` with `resolveMainSessionKeyFromConfig()`, which always returns the **default** agent's main session. When a\u2026", - "changed_files": 4, + "body_excerpt": "This is a docs-only claim-tightening PR, intentionally split from #68982 to keep that UI fix scoped. Clarify current observable behavior for Codex compaction: OpenClaw confirms compaction start/completion, but does not yet expose a human-r\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68667", - "created_at": "2026-04-18T18:54:50Z", - "deletions": 14, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69612", + "created_at": "2026-04-21T06:27:03Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68667/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68667", + "files_url": "https://github.com/openclaw/openclaw/pull/69612/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69612", "labels": [ - "gateway", - "size: S" + "docs", + "size: XS" ], "merged": false, - "number": 68667, - "review_comments_count": 1, + "number": 69612, + "review_comments_count": 0, "state": "open", - "title": "security(gateway): route hook completion events to the target agent's session", - "updated_at": "2026-04-18T19:06:36Z" + "title": "docs(codex): narrow compaction claims", + "updated_at": "2026-04-21T15:13:53Z" }, { - "additions": 14, - "author": "bluesky6868", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Six `template-injection` findings from `zizmor` in `.github/workflows/docker-release.yml` (lines 367:36, 374:17, 375:17, 381:36, 388:17, 389:17). Each is a `${{ ... }}` GitHub Actions expression interpolated directly\u2026", - "changed_files": 1, + "additions": 401, + "author": "thewilloftheshadow", + "author_association": "MEMBER", + "body_excerpt": null, + "changed_files": 23, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68658", - "created_at": "2026-04-18T17:54:45Z", - "deletions": 6, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69611", + "created_at": "2026-04-21T06:23:41Z", + "deletions": 34, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68658/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68658", + "files_url": "https://github.com/openclaw/openclaw/pull/69611/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69611", "labels": [ - "size: XS" + "docs", + "channel: discord", + "channel: slack", + "channel: telegram", + "maintainer", + "size: M" ], - "merged": false, - "number": 68658, - "review_comments_count": 0, + "merged": true, + "number": 69611, + "review_comments_count": 3, "state": "closed", - "title": "security(ci): hoist docker-release manifest run: expressions into step env", - "updated_at": "2026-04-18T18:06:22Z" + "title": "feat(channels): stream tool progress into preview edits", + "updated_at": "2026-04-21T16:52:03Z" }, { - "additions": 189, - "author": "avirweb", + "additions": 11930, + "author": "rubencu", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Prompt to recreate this PR > Sync the startup-hang fix work into the real OpenClaw/OpenClaw repo at /home/contact/openclaw, not the temporary partial folder. > Then: > 1. apply the code changes to this real repo, > 2. create a branch, >\u2026", - "changed_files": 4, + "body_excerpt": "## Summary - Problem: `gateway:watch` exposed stale assumptions around bootstrap injection and daily-memory/session-summary file selection, including missing canonical-path reads, dropped local-day continuity, and inconsistent handling of\u2026", + "changed_files": 39, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68654", - "created_at": "2026-04-18T17:37:58Z", - "deletions": 20, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69608", + "created_at": "2026-04-21T05:48:16Z", + "deletions": 1104, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68654/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68654", + "files_url": "https://github.com/openclaw/openclaw/pull/69608/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69608", "labels": [ - "size: M" + "docs", + "gateway", + "extensions: memory-core", + "scripts", + "agents", + "size: XL" ], "merged": false, - "number": 68654, - "review_comments_count": 2, + "number": 69608, + "review_comments_count": 8, "state": "open", - "title": "perf: reduce lazy CLI startup plugin loading", - "updated_at": "2026-04-18T18:44:33Z" + "title": "fix: align startup context and daily memory handling with session-summary variants", + "updated_at": "2026-04-21T16:39:23Z" }, { - "additions": 90, - "author": "palewire", + "additions": 3608, + "author": "swotvibe", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: The model-pricing bootstrap fetches live per-token costs from OpenRouter on every gateway startup, causing a ~30 second timeout on networks that cannot reach the pricing endpoint. - Why it matters: Users with limited\u2026", - "changed_files": 10, + "body_excerpt": "## Summary Migrate the Notion API client to use the official `@notionhq/client` SDK (v5.13.0) internally while preserving the existing external `NotionApiClient` interface. Updated for full compatibility with Notion API 2026-03-11 data sou\u2026", + "changed_files": 43, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68651", - "created_at": "2026-04-18T17:29:56Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69604", + "created_at": "2026-04-21T05:25:33Z", + "deletions": 1463, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68651/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68651", + "files_url": "https://github.com/openclaw/openclaw/pull/69604/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69604", "labels": [ - "docs", - "gateway", - "size: S" + "channel: whatsapp-web", + "scripts", + "docker", + "agents", + "size: XL" ], "merged": false, - "number": 68651, - "review_comments_count": 2, + "number": 69604, + "review_comments_count": 25, "state": "open", - "title": "Gateway/config: add models.pricing.enabled to skip pricing bootstrap", - "updated_at": "2026-04-18T17:42:16Z" + "title": "feat(notion): Expand Notion plugin with complete API coverage (20 tools)", + "updated_at": "2026-04-21T15:29:29Z" }, { - "additions": 5, - "author": "saitama3292-onepunch", - "author_association": "NONE", - "body_excerpt": "## Summary Fix Gemini 3/3.1 Pro returning empty replies when thinking is disabled. The root cause is `getDisabledThinkingConfig()` sending `thinkingLevel: \"LOW\"` \u2014 which still thinks and burns tokens, leaving no budget for visible output.\u2026", - "changed_files": 1, + "additions": 1169, + "author": "pgondhi987", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** `sendFileUrl` in the Synology Chat extension passed the `fileUrl` parameter directly to the NAS incoming webhook as `file_url` with no URL validation, protocol restriction, or private-IP check. The NAS then fetche\u2026", + "changed_files": 21, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68650", - "created_at": "2026-04-18T17:29:43Z", - "deletions": 2, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69603", + "created_at": "2026-04-21T05:19:20Z", + "deletions": 42, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68650/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68650", + "files_url": "https://github.com/openclaw/openclaw/pull/69603/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69603", "labels": [ - "agents", - "size: XS" + "docs", + "maintainer", + "size: XL" ], "merged": false, - "number": 68650, - "review_comments_count": 0, + "number": 69603, + "review_comments_count": 37, "state": "open", - "title": "fix: omit thinkingConfig for Gemini 3 Pro disabled case (fixes #62470)", - "updated_at": "2026-04-18T17:32:15Z" + "title": "fix(synology-chat): add SSRF guard to sendFileUrl [AI-assisted]", + "updated_at": "2026-04-21T14:56:22Z" }, { - "additions": 33, - "author": "likewen-tech", + "additions": 141, + "author": "nnish16", "author_association": "NONE", - "body_excerpt": "## Summary Fix async exec approval followups so they only wait for the session resume request to be accepted, not for the full resumed agent turn to finish. Previously this path used `expectFinal: true`, which could block behind a busy ses\u2026", + "body_excerpt": "## Summary - update `skills.update` to mutate the source config snapshot instead of rewriting the runtime-loaded config - keep the existing skill field normalization logic while avoiding runtime-only compatibility fields during writes - ad\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68648", - "created_at": "2026-04-18T17:02:06Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69602", + "created_at": "2026-04-21T05:18:51Z", + "deletions": 42, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68648/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68648", + "files_url": "https://github.com/openclaw/openclaw/pull/69602/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69602", "labels": [ - "agents", - "size: XS" + "gateway", + "size: S" ], "merged": false, - "number": 68648, - "review_comments_count": 1, + "number": 69602, + "review_comments_count": 0, "state": "open", - "title": "fix(exec): avoid waiting for final session result in approval followups", - "updated_at": "2026-04-18T17:05:41Z" + "title": "Fix skills.update writes from runtime-derived config", + "updated_at": "2026-04-21T05:22:12Z" }, { - "additions": 958, - "author": "edokeh", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: The Gateway HTTP endpoints have no CORS support, so browsers cannot call the self-hosted OpenAI / OpenResponses routes directly (preflight fails, response headers are stripped). - Why it matters: Users who want to wir\u2026", - "changed_files": 17, + "additions": 439, + "author": "Takhoffman", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary This PR fixes a reset/startup memory mismatch in the runtime. The session-memory hook saves reset snapshots as date-prefixed slugged artifacts such as `memory/2026-04-11-friendly-summary.md`, but the startup preload path previou\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68647", - "created_at": "2026-04-18T16:57:39Z", - "deletions": 2, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69600", + "created_at": "2026-04-21T04:54:41Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68647/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68647", + "files_url": "https://github.com/openclaw/openclaw/pull/69600/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69600", "labels": [ - "docs", - "gateway", - "size: L" + "maintainer", + "size: M" ], - "merged": false, - "number": 68647, - "review_comments_count": 5, - "state": "open", - "title": "Support CORS for Gateway HTTP endpoint: add opt-in CORS config", - "updated_at": "2026-04-19T05:01:18Z" + "merged": true, + "number": 69600, + "review_comments_count": 24, + "state": "closed", + "title": "fix: preload slugged startup memory files", + "updated_at": "2026-04-21T12:03:46Z" }, { - "additions": 584, - "author": "likewen-tech", - "author_association": "NONE", - "body_excerpt": "## Summary Fix async exec approval followups so they only wait for the session resume request to be accepted, not for the full resumed agent turn to finish. Previously this path used `expectFinal: true`, which could block behind a busy ses\u2026", - "changed_files": 11, + "additions": 383, + "author": "Bartok9", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Adds `tools.web.fetch.urlRouting` config \u2014 an ordered list of domain routing rules that fire inside `runBeforeToolCallHook()` before any `web_fetch` call. Closes #69591 ## Problem Agents reflexively call `web_fetch` on any URL,\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68646", - "created_at": "2026-04-18T16:56:46Z", - "deletions": 33, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69596", + "created_at": "2026-04-21T04:43:05Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68646/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68646", + "files_url": "https://github.com/openclaw/openclaw/pull/69596/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69596", "labels": [ - "gateway", - "commands", "agents", - "size: L" + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68646, - "review_comments_count": 3, + "number": 69596, + "review_comments_count": 5, "state": "closed", - "title": "fix(exec): avoid waiting for final session result in approval followups", - "updated_at": "2026-04-18T17:03:17Z" + "title": "feat: URL routing rules for web_fetch \u2014 redirect/warn/block by domain pattern", + "updated_at": "2026-04-21T04:46:41Z" }, { - "additions": 348, - "author": "atlaspetco", - "author_association": "NONE", - "body_excerpt": "## Summary Two related fixes so cron `agentTurn` jobs can't leave stale task- or session-registry rows behind when they time out: 1. **Close the task ledger row from the onTimer error path** (belt-and-suspenders). Previously the ledger row\u2026", - "changed_files": 4, + "additions": 168, + "author": "pgondhi987", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** Attacker-controlled URLs passed to `uploadC2CMedia` / `uploadGroupMedia` were forwarded to the QQ Bot API (`POST /v2/users/{openid}/files`, `POST /v2/groups/{groupOpenid}/files`) as `body.url` with no validation,\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68645", - "created_at": "2026-04-18T16:50:49Z", - "deletions": 6, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68645/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68645", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69595", + "created_at": "2026-04-21T04:35:43Z", + "deletions": 3, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69595/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69595", "labels": [ - "size: M" + "maintainer", + "size: S", + "channel: qqbot" ], - "merged": false, - "number": 68645, - "review_comments_count": 0, - "state": "open", - "title": "fix(cron): close task ledger on timeout + add runTimeoutSeconds wall-clock kill", - "updated_at": "2026-04-19T03:30:26Z" + "merged": true, + "number": 69595, + "review_comments_count": 6, + "state": "closed", + "title": "fix(qqbot): add SSRF guard to direct-upload URL paths in uploadC2CMedia and uploadGroupMedia [AI-assisted]", + "updated_at": "2026-04-21T05:10:41Z" }, { - "additions": 1072, - "author": "Takhoffman", + "additions": 1087, + "author": "pgondhi987", "author_association": "CONTRIBUTOR", - "body_excerpt": "This PR introduces core `NO_REPLY` tuning in OpenClaw. It does three connected things: 1. It introduces a real `NO_REPLY` policy surface. That means `NO_REPLY` is no longer treated as one global behavior. It is now resolved by conversation\u2026", - "changed_files": 24, + "body_excerpt": "## Summary - **Problem:** `sendPhoto` in the Zalo extension forwarded user-supplied media URLs directly to the Zalo Bot API with zero URL validation or SSRF protection. The Zalo server fetches the supplied URL from its infrastructure, maki\u2026", + "changed_files": 17, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68644", - "created_at": "2026-04-18T16:45:32Z", - "deletions": 36, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68644/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68644", + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69593", + "created_at": "2026-04-21T04:30:10Z", + "deletions": 33, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69593/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69593", "labels": [ - "channel: telegram", + "channel: zalo", "maintainer", "size: XL" ], - "merged": false, - "number": 68644, - "review_comments_count": 4, - "state": "open", - "title": "feat: no_reply tuning and customization per conversation type", - "updated_at": "2026-04-18T22:44:26Z" + "merged": true, + "number": 69593, + "review_comments_count": 34, + "state": "closed", + "title": "fix(zalo): add SSRF guard on outbound photo URLs [AI-assisted]", + "updated_at": "2026-04-21T13:50:37Z" }, { - "additions": 174, - "author": "pandego", + "additions": 282, + "author": "pgondhi987", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - decode transcript MediaPath and image payload variants into chat attachment content blocks - render image attachments in the shared chat UI so sent images stay visible after history refresh - add coverage for transcript media-\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - **Problem:** The Synology Chat extension's `sendMedia` \u2192 `sendFileUrl` path passed attacker-controlled `mediaUrl` values directly to the Synology NAS incoming webhook as `file_url` with no URL or SSRF validation. The NAS then\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68641", - "created_at": "2026-04-18T16:31:37Z", - "deletions": 18, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69592", + "created_at": "2026-04-21T04:27:51Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68641/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68641", + "files_url": "https://github.com/openclaw/openclaw/pull/69592/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69592", "labels": [ - "size: S" + "docs", + "maintainer", + "size: M" ], "merged": false, - "number": 68641, - "review_comments_count": 4, - "state": "open", - "title": "Fix Control UI image history rendering", - "updated_at": "2026-04-18T16:36:29Z" + "number": 69592, + "review_comments_count": 12, + "state": "closed", + "title": "fix(synology-chat): block SSRF in sendFileUrl file_url parameter [AI-assisted]", + "updated_at": "2026-04-21T17:00:32Z" }, { - "additions": 115, - "author": "Kzino", + "additions": 14349, + "author": "loongfay", "author_association": "NONE", - "body_excerpt": "## Summary Adds a new skill for [Vorim AI](https://vorim.ai) \u2014 the identity and trust layer for AI agents. - **17 MCP tools** via `@vorim/mcp-server` (npm) through mcporter - Agent registration with Ed25519 cryptographic keypairs - Permiss\u2026", - "changed_files": 1, + "body_excerpt": "# feat(channel): add Yuanbao IM channel plugin ## Summary - **Problem:** OpenClaw had no integration with Tencent Yuanbao (\u5143\u5b9d), a major AI assistant platform in China. Users who wanted to connect their AI agents to Yuanbao's IM bot ecosyst\u2026", + "changed_files": 124, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68640", - "created_at": "2026-04-18T16:27:08Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69590", + "created_at": "2026-04-21T04:17:34Z", + "deletions": 23, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68640/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68640", + "files_url": "https://github.com/openclaw/openclaw/pull/69590/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69590", "labels": [ - "size: S" + "docs", + "scripts", + "size: XL" ], "merged": false, - "number": 68640, - "review_comments_count": 4, + "number": 69590, + "review_comments_count": 7, "state": "open", - "title": "Add Vorim AI skill \u2014 agent identity, permissions, trust & audit trails", - "updated_at": "2026-04-18T16:30:22Z" + "title": "feat: Yuanbo Channel", + "updated_at": "2026-04-21T11:53:26Z" }, { - "additions": 1, - "author": "altierac", + "additions": 4, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "### What Forward `agentSessionKey` to the shared memory manager's `search()` call in `searchMemoryWiki()`. ### Why When `memory-wiki` uses the `shared` search backend with QMD, the search call at `query.ts:668` passes `{ maxResults }` but\u2026", + "body_excerpt": "The tasks audit was reporting false-positive inconsistent_timestamps warnings when createdAt was 0 or invalid. This could happen for tasks with malformed or legacy timestamp data, causing noise in the audit output and making it harder to i\u2026", "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68639", - "created_at": "2026-04-18T16:22:48Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69588", + "created_at": "2026-04-21T04:15:35Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68639/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68639", + "files_url": "https://github.com/openclaw/openclaw/pull/69588/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69588", "labels": [ "size: XS", - "extensions: memory-wiki" + "r: too-many-prs" ], "merged": false, - "number": 68639, - "review_comments_count": 0, - "state": "open", - "title": "fix(memory-wiki): forward sessionKey to shared memory search", - "updated_at": "2026-04-18T16:23:57Z" + "number": 69588, + "review_comments_count": 4, + "state": "closed", + "title": "fix(tasks): skip timestamp inconsistency check for invalid createdAt", + "updated_at": "2026-04-21T13:45:22Z" }, { - "additions": 34, - "author": "JoeshpCheung", - "author_association": "NONE", - "body_excerpt": "# PR 1 Submission Pack \u2014 Loader correctness fix Date: 2026-04-19 Target repo: `openclaw/openclaw` Related issue: `openclaw/openclaw#68615` ## Proposed PR title `fix(loader): skip plugin register for non-activating loads` Alternative title:\u2026", - "changed_files": 3, + "additions": 1120, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - keep `message` available for chat-capable isolated crons, including coding profiles - resolve chat context for `--no-deliver` / `channel: last` - treat direct `message` sends as delivery and skip fallback announce ## Tests - `\u2026", + "changed_files": 40, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 5, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68638", - "created_at": "2026-04-18T16:21:21Z", - "deletions": 85, + "comments_count": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69587", + "created_at": "2026-04-21T04:11:33Z", + "deletions": 136, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68638/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68638", + "files_url": "https://github.com/openclaw/openclaw/pull/69587/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69587", "labels": [ - "size: S" + "docs", + "gateway", + "cli", + "agents", + "maintainer", + "size: XL" ], - "merged": false, - "number": 68638, - "review_comments_count": 4, - "state": "open", - "title": "fix(loader): avoid memory and compaction side effects during non-activating loads", - "updated_at": "2026-04-19T02:47:28Z" + "merged": true, + "number": 69587, + "review_comments_count": 12, + "state": "closed", + "title": "Fix cron chat delivery policy", + "updated_at": "2026-04-21T06:55:34Z" }, { - "additions": 80, - "author": "frankhli843", + "additions": 10, + "author": "Eruditi", "author_association": "NONE", - "body_excerpt": "Closes #68636 ## Summary The `write` tool's parameter validator currently rejects `content: \"\"` and any whitespace-only value with the error `\"Missing required parameter: content (received: path, content=)\"`. This treats a le\u2026", + "body_excerpt": "The formatSetupSelectionLabel function would throw 'Cannot read properties of undefined (reading trim)' when the label or fallback was undefined. This could happen when selecting 'Skip for now' in the onboard flow, as the quick start chann\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68637", - "created_at": "2026-04-18T16:19:09Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69586", + "created_at": "2026-04-21T04:03:10Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68637/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68637", + "files_url": "https://github.com/openclaw/openclaw/pull/69586/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69586", "labels": [ - "agents", - "size: S" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68637, - "review_comments_count": 0, - "state": "open", - "title": "fix(pi-tools): allow empty/whitespace-only content in write tool", - "updated_at": "2026-04-18T16:20:41Z" + "number": 69586, + "review_comments_count": 6, + "state": "closed", + "title": "fix(onboard): handle undefined labels in channel setup selection", + "updated_at": "2026-04-21T13:45:21Z" }, { - "additions": 211, - "author": "Takhoffman", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## What `/reset soft` does `/reset soft` is an in-place reset. It behaves like this: ```text before: session id = same transcript = existing conversation CLI backend binding = may be reused after `/reset soft`: session id = same transcript\u2026", - "changed_files": 9, + "additions": 4246, + "author": "mmy4shadow", + "author_association": "NONE", + "body_excerpt": "## Summary - allow loopback Control UI sessions to auto-connect using bootstrap auth instead of URL token auth - unify chat run-state evidence and show a three-state toolbar indicator in the composer gap: `In progress`, `Interrupted`, `Com\u2026", + "changed_files": 32, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68635", - "created_at": "2026-04-18T16:18:30Z", - "deletions": 8, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68635/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68635", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69585", + "created_at": "2026-04-21T03:53:15Z", + "deletions": 259, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69585/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69585", "labels": [ - "docs", - "maintainer", - "size: M" + "app: web-ui", + "gateway", + "cli", + "commands", + "size: XL" ], "merged": false, - "number": 68635, - "review_comments_count": 2, + "number": 69585, + "review_comments_count": 9, "state": "open", - "title": "feat: add soft reset command", - "updated_at": "2026-04-18T22:44:42Z" + "title": "[codex] fix control UI bootstrap auth and run status", + "updated_at": "2026-04-21T08:45:08Z" }, { - "additions": 448, - "author": "Little-viva1", + "additions": 1908, + "author": "mmy4shadow", "author_association": "NONE", - "body_excerpt": "## Summary - accept nested Feishu card action payloads that Mira clarification cards send in practice - handle direct Mira clarification writebacks inside the Feishu extension instead of relying on an external relay - document OpenClaw as\u2026", - "changed_files": 6, + "body_excerpt": "## Summary - fix runtime and setup follow-ups around the same Control UI / gateway flow - add safer OAuth browser-open fallback behavior and align provider `openUrl` contracts - restore fast-but-correct overview loading with summary-only c\u2026", + "changed_files": 40, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68630", - "created_at": "2026-04-18T16:06:34Z", - "deletions": 23, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69584", + "created_at": "2026-04-21T03:53:14Z", + "deletions": 500, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68630/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68630", + "files_url": "https://github.com/openclaw/openclaw/pull/69584/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69584", "labels": [ - "docs", - "channel: feishu", - "size: M" + "channel: msteams", + "app: macos", + "app: web-ui", + "gateway", + "commands", + "size: XL", + "extensions: minimax" ], "merged": false, - "number": 68630, - "review_comments_count": 5, - "state": "closed", - "title": "fix(feishu): harden Mira clarification card action writebacks", - "updated_at": "2026-04-18T16:12:56Z" + "number": 69584, + "review_comments_count": 12, + "state": "open", + "title": "[codex] fix gateway runtime flow follow-ups", + "updated_at": "2026-04-21T09:38:00Z" }, { - "additions": 3118, - "author": "Takhoffman", + "additions": 110, + "author": "zeroaltitude", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary This PR introduces `lab` as OpenClaw's experimental prompt-overlay surface. The first `lab` feature is `custom`, which lets a workspace layer model-specific and agent-specific `AGENTS.md` addenda on top of the normal prompt stac\u2026", - "changed_files": 24, + "body_excerpt": "## Problem `memory_search` consistently takes ~2000 ms on active workspaces with multiple qmd collections \u2014 far more than SQLite FTS should ever need. Root cause: `runQueryAcrossCollections` in `qmd-manager.ts` issues one qmd subprocess pe\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68627", - "created_at": "2026-04-18T15:54:34Z", - "deletions": 35, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69583", + "created_at": "2026-04-21T03:51:50Z", + "deletions": 11, "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68627/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68627", + "files_url": "https://github.com/openclaw/openclaw/pull/69583/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69583", "labels": [ - "docs", - "commands", - "agents", - "maintainer", - "size: XL" + "extensions: memory-core", + "size: S" ], "merged": false, - "number": 68627, - "review_comments_count": 9, + "number": 69583, + "review_comments_count": 1, "state": "open", - "title": "Feat: introduce lab, custom model and agent overrides and gpt 5.4 overrides", - "updated_at": "2026-04-18T22:46:04Z" + "title": "perf(memory-core): parallelize multi-collection qmd search invocations", + "updated_at": "2026-04-21T03:54:13Z" }, { - "additions": 988, - "author": "jinon86", - "author_association": "NONE", - "body_excerpt": "## Summary - add a plugin-neutral session-run cancel seam keyed by `{ kind: \"session_run\", sessionKey, runId }` - wire gateway chat aborts into that seam in both directions so delegated-task runtimes can cancel owning runs and observe run\u2026", - "changed_files": 18, + "additions": 3, + "author": "Sanjays2402", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** The secrets audit flags Codex's synthetic `apiKey: \"codex-app-server\"` (defined in `extensions/codex/provider.ts`) as `PLAINTEXT_FOUND`, even though it's not a real secret \u2014 Codex's real authentication lives insid\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68624", - "created_at": "2026-04-18T15:51:48Z", - "deletions": 18, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69581", + "created_at": "2026-04-21T03:46:04Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68624/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68624", + "files_url": "https://github.com/openclaw/openclaw/pull/69581/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69581", "labels": [ - "docs", - "gateway", - "scripts", "agents", - "size: XL" + "size: XS", + "extensions: codex" ], - "merged": false, - "number": 68624, - "review_comments_count": 4, - "state": "open", - "title": "Gateway: add session-run cancel seam", - "updated_at": "2026-04-18T22:42:25Z" + "merged": true, + "number": 69581, + "review_comments_count": 0, + "state": "closed", + "title": "fix(codex): exclude codex-app-server synthetic apiKey from secrets audit", + "updated_at": "2026-04-21T11:38:27Z" }, { - "additions": 490, - "author": "jinon86", - "author_association": "NONE", - "body_excerpt": "## Summary - add a typed plugin `sessions_send` hook to the core hook runner and Plugin SDK exports - let `sessions_send` consult the hook before default handling, with delegated metadata support and direct fallback - cover declined-hook f\u2026", - "changed_files": 6, + "additions": 95, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## \u95ee\u9898 #69527\uff1aopenrouter/auto \u88ab\u5ffd\u7565\uff0c\u5f3a\u5236\u964d\u7ea7\u5230 gpt-4.1-mini\u3002 ## \u4fee\u590d \u5728 \u7684 \u4e2d\uff0c \u662f\u7279\u6b8a\u7684\u54e8\u5175\u6a21\u578b\uff0c\u8868\u793a\u300c\u8ba9 OpenRouter \u81ea\u52a8\u9009\u62e9\u6700\u4f73\u6a21\u578b\u300d\u3002OpenRouter API \u671f\u671b\u7684\u6a21\u578b ID \u662f\u88f8\u7684 \uff0c\u800c\u4e0d\u662f\u5e26\u524d\u7f00\u7684 \u3002 \u4fee\u590d\u903b\u8f91\uff1a - \u5f53 \u65f6\uff0c\u5c06\u5176\u89c4\u8303\u5316\u4e3a - \u4f7f\u7528 \u4f5c\u4e3a\u8fd4\u56de\u6a21\u578b\u7684 uid=0(root) gid=0(root) groups=0(root) \u5b57\u6bb5\uff08\u8fd9\u662f\u53d1\u9001\u5230 OpenRouter API \u7684\u503c\uff09\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68622", - "created_at": "2026-04-18T15:47:46Z", - "deletions": 17, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69580", + "created_at": "2026-04-21T03:45:56Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68622/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68622", + "files_url": "https://github.com/openclaw/openclaw/pull/69580/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69580", "labels": [ - "docs", "agents", - "size: L" + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68622, - "review_comments_count": 4, - "state": "open", - "title": "Plugins: add sessions_send delegation hook", - "updated_at": "2026-04-18T22:42:24Z" + "number": 69580, + "review_comments_count": 1, + "state": "closed", + "title": "fix: respect openrouter/auto model selection (#69527)", + "updated_at": "2026-04-21T03:47:31Z" }, { - "additions": 238, - "author": "dorukardahan", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - let `before_model_resolve` and legacy `before_agent_start` hooks return `authProfileOverride` - apply that preferred auth profile during model setup without overriding explicit user-pinned `/model ...@profile` selections - add\u2026", - "changed_files": 13, + "additions": 1940, + "author": "kenchung", + "author_association": "NONE", + "body_excerpt": "## Summary - **Problem:** `video_generate` providers all target cinematic / scene generation (Veo, Runway, Kling, Wan, MiniMax, Dashscope). The identity-first / avatar-presenter lane \u2014 a specific avatar speaking a specific script \u2014 is unse\u2026", + "changed_files": 17, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 6, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68621", - "created_at": "2026-04-18T15:45:39Z", - "deletions": 17, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69578", + "created_at": "2026-04-21T03:35:38Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68621/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68621", + "files_url": "https://github.com/openclaw/openclaw/pull/69578/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69578", "labels": [ "docs", - "gateway", - "agents", - "size: M" + "size: XL" ], "merged": false, - "number": 68621, - "review_comments_count": 0, + "number": 69578, + "review_comments_count": 18, "state": "open", - "title": "feat(hooks): allow model hooks to prefer auth profiles", - "updated_at": "2026-04-18T16:42:01Z" + "title": "feat(heygen): add Video Agent provider plugin", + "updated_at": "2026-04-21T05:48:55Z" }, { - "additions": 47, - "author": "joeia26", + "additions": 2, + "author": "swotvibe", "author_association": "NONE", - "body_excerpt": "## Summary ACP-bound sessions should keep `/acp ...` control commands on the local OpenClaw command path instead of forwarding them into the bound ACP runtime as prompt text. Before this change, commands such as `/acp cancel`, `/acp status\u2026", - "changed_files": 3, - "cluster_id": "cluster-65248-2", - "cluster_ids": [ - "cluster-65248-2" - ], - "cluster_role": "member", + "body_excerpt": "## Problem When loading images from media store (media-uri refs), the `workspaceOnly` check was preventing access to `/home/node/.openclaw/media/inbound/` even when the image was legitimately saved by a channel (e.g., WhatsApp inbound imag\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68617", - "created_at": "2026-04-18T15:32:23Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69577", + "created_at": "2026-04-21T03:35:28Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68617/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68617", + "files_url": "https://github.com/openclaw/openclaw/pull/69577/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69577", "labels": [ + "agents", "size: XS" ], "merged": false, - "number": 68617, - "review_comments_count": 0, + "number": 69577, + "review_comments_count": 1, "state": "open", - "title": "fix(acp): keep /acp commands local in bound sessions", - "updated_at": "2026-04-18T15:35:00Z" + "title": "fix: allow media-uri refs to bypass workspaceOnly check for image loading", + "updated_at": "2026-04-21T03:46:17Z" }, { - "additions": 184, - "author": "ScientificProgrammer", + "additions": 46, + "author": "iamlukethedev", "author_association": "NONE", - "body_excerpt": "This PR fixes a race condition where long-running agent turns would cause deferred messages in Google Chat to fail silently. It introduces a 25-second timer. If the agent response is not ready before the timer expires, it abandons the defe\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68614", - "created_at": "2026-04-18T15:27:00Z", - "deletions": 33, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69575", + "created_at": "2026-04-21T03:30:42Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68614/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68614", + "files_url": "https://github.com/openclaw/openclaw/pull/69575/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69575", "labels": [ - "channel: googlechat", - "size: M" + "app: web-ui", + "gateway", + "size: XS" ], "merged": false, - "number": 68614, - "review_comments_count": 9, + "number": 69575, + "review_comments_count": 1, "state": "open", - "title": "fix(googlechat): add timeout and fallback for deferred responses", - "updated_at": "2026-04-18T15:32:54Z" + "title": "fix: accept allow-always approval source", + "updated_at": "2026-04-21T03:32:05Z" }, { - "additions": 628, - "author": "mcaxtr", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: WhatsApp only started composing from the later `onReplyStart` point inside the reply run, so accepted inbound messages could sit silent through reply dispatch, plugin bootstrap, and `before_agent_reply`. - Why it matt\u2026", - "changed_files": 12, + "additions": 65, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "The parseAbsoluteTimeMs function would throw 'Cannot read properties of undefined (reading trim)' when called with undefined or null input. This could happen when cron jobs had malformed or missing schedule data, particularly when displayi\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68612", - "created_at": "2026-04-18T15:23:36Z", - "deletions": 66, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69574", + "created_at": "2026-04-21T03:26:47Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68612/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68612", + "files_url": "https://github.com/openclaw/openclaw/pull/69574/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69574", "labels": [ - "channel: whatsapp-web", - "maintainer", - "size: L" + "cli", + "size: S" ], "merged": false, - "number": 68612, - "review_comments_count": 4, + "number": 69574, + "review_comments_count": 8, "state": "open", - "title": "fix(whatsapp): start typing on accepted inbound", - "updated_at": "2026-04-18T16:33:59Z" + "title": "fix(cron): handle undefined/null input in parseAbsoluteTimeMs", + "updated_at": "2026-04-21T15:20:19Z" }, { - "additions": 44892, - "author": "stroupaloop", + "additions": 2331, + "author": "mmy4shadow", "author_association": "NONE", - "body_excerpt": "Extends the `before_prompt_build` hook so plugins can dynamically narrow the tool surface per-turn. ## Changes - Exposes `availableTools: string[]` on `PluginHookBeforePromptBuildEvent` so plugins can see which tools survived the static po\u2026", - "changed_files": 1337, + "body_excerpt": "## Summary - improve local Control UI bootstrap auth so loopback dashboards can auto-connect without leaking the token in the URL - tighten chat run-state UX so the toolbar shows the basic three user-facing states in the bottom input bar g\u2026", + "changed_files": 56, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68608", - "created_at": "2026-04-18T14:50:16Z", - "deletions": 25621, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68608/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68608", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69571", + "created_at": "2026-04-21T03:24:01Z", + "deletions": 84, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69571/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69571", "labels": [ "docs", - "channel: bluebubbles", - "channel: discord", - "channel: googlechat", - "channel: imessage", - "channel: line", - "channel: matrix", - "channel: mattermost", "channel: msteams", - "channel: nextcloud-talk", - "channel: nostr", - "channel: signal", - "channel: slack", - "channel: telegram", - "channel: tlon", - "channel: voice-call", - "channel: whatsapp-web", - "channel: zalo", - "channel: zalouser", - "app: android", - "app: ios", - "app: macos", "app: web-ui", "gateway", - "extensions: copilot-proxy", - "extensions: diagnostics-otel", - "extensions: llm-task", - "extensions: lobster", - "extensions: memory-core", - "extensions: memory-lancedb", - "extensions: open-prose", - "cli", - "scripts", "commands", - "docker", - "agents", - "channel: feishu", - "channel: twitch", - "channel: irc", "size: XL", - "extensions: acpx", - "extensions: anthropic", - "extensions: openai", - "extensions: minimax", - "extensions: cloudflare-ai-gateway", - "extensions: byteplus", - "extensions: huggingface", - "extensions: kimi-coding", - "extensions: moonshot", - "extensions: synthetic", - "extensions: together", - "extensions: venice", - "extensions: volcengine", - "extensions: xiaomi", - "extensions: kilocode", - "extensions: nvidia", - "extensions: qianfan", - "extensions: vercel-ai-gateway", - "extensions: fal", - "extensions: tavily", - "extensions: duckduckgo", - "extensions: deepseek", - "channel: qqbot", - "extensions: stepfun", - "channel: qa-channel", - "extensions: qa-lab", - "extensions: memory-wiki", - "extensions: webhooks", - "extensions: arcee", - "extensions: codex", - "extensions: lmstudio" + "extensions: minimax" ], "merged": false, - "number": 68608, - "review_comments_count": 6, + "number": 69571, + "review_comments_count": 0, "state": "closed", - "title": "feat: allow prompt hooks to dynamically narrow tool surface", - "updated_at": "2026-04-18T23:35:57Z" + "title": "[codex] improve control UI bootstrap auth and run status", + "updated_at": "2026-04-21T03:27:54Z" }, { - "additions": 172, - "author": "josmithiii", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Gemini 2.5 Pro only works in thinking mode and rejects `thinkingBudget=0` with `Budget 0 is invalid. This model only works in thinking mode.` - The existing `sanitizeGoogleThinkingPayload` in the embedded runner only stripped\u2026", - "changed_files": 6, + "additions": 13, + "author": "anurag-bg-neu", + "author_association": "NONE", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68607", - "created_at": "2026-04-18T14:44:00Z", - "deletions": 8, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69567", + "created_at": "2026-04-21T03:17:47Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68607/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68607", + "files_url": "https://github.com/openclaw/openclaw/pull/69567/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69567", "labels": [ - "agents", - "size: S" + "size: XS" ], - "merged": true, - "number": 68607, + "merged": false, + "number": 69567, "review_comments_count": 0, - "state": "closed", - "title": "fix(google): strip thinkingBudget=0 for gemini-2.5-pro thinking-required model", - "updated_at": "2026-04-19T01:21:50Z" + "state": "open", + "title": "security(ci): mask derived base64 auth header in custom checkout blocks", + "updated_at": "2026-04-21T03:19:43Z" }, { - "additions": 7, - "author": "alekseivarin-gif", + "additions": 449, + "author": "iamlukethedev", "author_association": "NONE", - "body_excerpt": "## Summary This follow-up PR extends the assistant-first docs pass to a few additional user-facing docs hubs. ## What changed Updated: - docs/concepts/features.md - docs/help/index.md - docs/start/docs-directory.md ## Notes Docs-only chang\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68601", - "created_at": "2026-04-18T14:28:16Z", - "deletions": 7, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69562", + "created_at": "2026-04-21T03:10:43Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68601/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68601", + "files_url": "https://github.com/openclaw/openclaw/pull/69562/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69562", "labels": [ - "docs", - "size: XS" + "gateway", + "size: M" ], "merged": false, - "number": 68601, - "review_comments_count": 0, + "number": 69562, + "review_comments_count": 5, "state": "open", - "title": "docs: extend assistant-first framing to feature and help hubs", - "updated_at": "2026-04-18T14:29:08Z" + "title": "fix: validate cron announce account ids", + "updated_at": "2026-04-21T03:50:58Z" }, { - "additions": 109, - "author": "jasonmakr", + "additions": 73, + "author": "iamlukethedev", "author_association": "NONE", - "body_excerpt": "## Problem `retryAsync` in `src/infra/retry.ts` applies **symmetric** jitter even when the caller supplies a `retryAfterMs` hint (e.g. from an HTTP 429/503 `Retry-After` header). The symmetric window means roughly half of retries land at `\u2026", - "changed_files": 6, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68600", - "created_at": "2026-04-18T14:28:11Z", - "deletions": 17, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 2, + "cluster_id": "cluster-36488-17", + "cluster_ids": [ + "cluster-36488-17" + ], + "cluster_role": "member", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69560", + "created_at": "2026-04-21T03:08:57Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68600/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68600", + "files_url": "https://github.com/openclaw/openclaw/pull/69560/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69560", "labels": [ - "agents", "size: S" ], "merged": false, - "number": 68600, + "number": 69560, "review_comments_count": 0, - "state": "closed", - "title": "fix(infra): prevent jitter from undercutting server-supplied Retry-After", - "updated_at": "2026-04-18T16:01:01Z" + "state": "open", + "title": "fix: guard quickstart channel skip", + "updated_at": "2026-04-21T03:09:50Z" }, { - "additions": 78, - "author": "MotherSphere", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** When a context overflow triggers auto-compaction and the retry still overflows within the same cycle, the existing `[context-overflow-diag]` log only reports state; it does not tell operators that the bottleneck i\u2026", - "changed_files": 4, + "additions": 149, + "author": "kirkluokun", + "author_association": "CONTRIBUTOR", + "body_excerpt": "@clawdbot/lobster/core returns both resumeToken and approvalId when a workflow step needs approval, but the lobster plugin was dropping approvalId in three places: normalizeEnvelope, the tool schema, and the embedded-runner resume branch.\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68599", - "created_at": "2026-04-18T14:28:07Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69559", + "created_at": "2026-04-21T03:07:29Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68599/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68599", + "files_url": "https://github.com/openclaw/openclaw/pull/69559/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69559", "labels": [ - "docs", - "agents", + "extensions: lobster", "size: S" ], - "merged": false, - "number": 68599, + "merged": true, + "number": 69559, "review_comments_count": 1, + "state": "closed", + "title": "fix(lobster): forward approvalId alongside resumeToken in tool envelope", + "updated_at": "2026-04-21T04:32:30Z" + }, + { + "additions": 1008, + "author": "vincentkoc", + "author_association": "MEMBER", + "body_excerpt": "## what changed - add a new `device-code` auth path for the bundled `openai-codex` provider - model the flow on the device-token auth used in `~/GIT/_Perso/codex`, including OpenAI device-code polling and token exchange - expose the new au\u2026", + "changed_files": 13, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69557", + "created_at": "2026-04-21T03:03:12Z", + "deletions": 63, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69557/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69557", + "labels": [ + "commands", + "maintainer", + "size: XL", + "extensions: openai" + ], + "merged": false, + "number": 69557, + "review_comments_count": 3, "state": "open", - "title": "agents/compaction: hint at toolResultMaxChars when overflow persists after compaction", - "updated_at": "2026-04-18T14:35:19Z" + "title": "feat(openai): add codex device-code auth and fix login options in menu", + "updated_at": "2026-04-21T17:53:56Z" }, { - "additions": 206, - "author": "GaosCode", + "additions": 25, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "The Telegram extension was not passing the humanDelay configuration to the buffered block dispatcher, which meant typing delay settings were being ignored for Telegram messages. This fix adds the missing humanDelay resolution and passes it\u2026", + "changed_files": 2, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69556", + "created_at": "2026-04-21T03:01:39Z", + "deletions": 0, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69556/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69556", + "labels": [ + "channel: telegram", + "size: XS", + "r: too-many-prs" + ], + "merged": false, + "number": 69556, + "review_comments_count": 10, + "state": "closed", + "title": "fix(telegram): pass humanDelay config to dispatcher", + "updated_at": "2026-04-21T13:45:18Z" + }, + { + "additions": 29, + "author": "hclsys", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `memory_get` could accept a path that lexically stayed under the workspace or an allowed extra path, but escaped through an intermediate directory symlink. - Why it matters: an agent using `memory_get` could be tricke\u2026", - "changed_files": 6, + "body_excerpt": "## Problem \\`openclaw secrets audit\\` flags \\`providers.codex.apiKey = \\\"codex-app-server\\\"\\` in every agent's \\`models.json\\` as \\`PLAINTEXT_FOUND\\`. The value is a synthetic auth marker the codex extension writes via \\`resolveSyntheticAu\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68597", - "created_at": "2026-04-18T14:25:27Z", - "deletions": 12, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69555", + "created_at": "2026-04-21T02:59:01Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68597/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68597", + "files_url": "https://github.com/openclaw/openclaw/pull/69555/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69555", "labels": [ - "extensions: memory-core", - "size: M" + "size: XS", + "extensions: codex" ], "merged": false, - "number": 68597, - "review_comments_count": 4, + "number": 69555, + "review_comments_count": 0, "state": "open", - "title": "fix(memory): block symlink escapes in memory_get", - "updated_at": "2026-04-19T01:47:30Z" + "title": "fix(codex): declare codex-app-server as nonSecretAuthMarker to silence audit FP", + "updated_at": "2026-04-21T03:00:16Z" }, { - "additions": 114, - "author": "martingarramon", + "additions": 95, + "author": "Patrick-Erichsen", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #62571. ## Problem `resolveSlackThreadStarter` and `resolveSlackThreadHistory` in `extensions/slack/src/monitor/media.ts` swallow ALL errors via bare `catch {}` blocks at lines 450\u2013452 and 542\u2013544 respectively. Auth failures, rate-li\u2026", - "changed_files": 4, + "body_excerpt": "## Summary Onboarding UX polish for `openclaw onboard`. - **Searchable select** (`searchable?: boolean` on `WizardSelectParams`) for provider/auth and channel pickers - **Security disclaimer**: Undimmed text, pulled a few things out into s\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68594", - "created_at": "2026-04-18T14:16:53Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69553", + "created_at": "2026-04-21T02:53:11Z", + "deletions": 43, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68594/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68594", + "files_url": "https://github.com/openclaw/openclaw/pull/69553/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69553", "labels": [ - "channel: slack", - "scripts", + "commands", + "maintainer", "size: S" ], "merged": true, - "number": 68594, - "review_comments_count": 0, + "number": 69553, + "review_comments_count": 1, "state": "closed", - "title": "fix(slack): surface silent errors in thread starter/history fetch", - "updated_at": "2026-04-18T16:55:30Z" + "title": "onboard: clearer security disclaimer, loading spinners, API key placeholder", + "updated_at": "2026-04-21T05:09:00Z" }, { - "additions": 1, - "author": "peking2", + "additions": 11, + "author": "CHE10X", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - hide subagent sessions from the human-facing chat session picker - keep subagent session records intact for internal/runtime use - update the UI test to assert subagent sessions are excluded from picker options ## Why Subagent\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68592", - "created_at": "2026-04-18T14:09:14Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69552", + "created_at": "2026-04-21T02:49:51Z", + "deletions": 45, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68592/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68592", + "files_url": "https://github.com/openclaw/openclaw/pull/69552/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69552", "labels": [ - "size: XS" + "app: web-ui", + "size: S" ], "merged": false, - "number": 68592, - "review_comments_count": 3, - "state": "closed", - "title": "docs: update README title to SoloClaw", - "updated_at": "2026-04-18T14:13:44Z" + "number": 69552, + "review_comments_count": 2, + "state": "open", + "title": "Hide subagent sessions from chat session picker", + "updated_at": "2026-04-21T02:54:08Z" }, { - "additions": 47, - "author": "alekseivarin-gif", - "author_association": "NONE", - "body_excerpt": "## Summary This follow-up PR continues the assistant-first docs pass by extending the framing to a few additional user-facing docs hubs. ## What changed Updated: - docs/concepts/features.md - docs/help/index.md - docs/start/docs-directory.\u2026", - "changed_files": 14, + "additions": 131, + "author": "steipete", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Replacement for #65061 because the contributor fork cannot be updated by maintainers and the original branch conflicts with current `main`. Keeps @zhulijin1991's two fixes, rebased on current `main`, with the run-attempt test hook conflict\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68591", - "created_at": "2026-04-18T14:08:30Z", - "deletions": 32, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69551", + "created_at": "2026-04-21T02:49:16Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68591/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68591", + "files_url": "https://github.com/openclaw/openclaw/pull/69551/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69551", "labels": [ - "docs", - "size: XS" + "agents", + "maintainer", + "size: S", + "extensions: codex" ], - "merged": false, - "number": 68591, - "review_comments_count": 1, + "merged": true, + "number": 69551, + "review_comments_count": 0, "state": "closed", - "title": "docs: extend assistant-first framing to feature and help hubs", - "updated_at": "2026-04-18T14:31:16Z" + "title": "fix(codex): avoid vision image tool loops", + "updated_at": "2026-04-21T03:20:41Z" }, { - "additions": 23, - "author": "imadal1n", + "additions": 18, + "author": "SharkeyDev", "author_association": "NONE", - "body_excerpt": "## Summary - rewrite `index.yml` before ensuring managed QMD collections - reuse `ensureCollections()` during managed collection repair instead of hand-rolling remove/add loops - keep repair behavior aligned with the normal collection boot\u2026", + "body_excerpt": "# Upstream OpenClaw PR Proposal: Remove Model-Visible `security` / `ask` Params from `exec` Tool Schema **Target repo:** `openclaw/openclaw` **Target branch:** `main` **Status:** Draft \u2014 ready to file after operator review. **Tracking audi\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68590", - "created_at": "2026-04-18T14:06:23Z", - "deletions": 21, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69549", + "created_at": "2026-04-21T02:42:33Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68590/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68590", + "files_url": "https://github.com/openclaw/openclaw/pull/69549/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69549", "labels": [ - "extensions: memory-core", + "agents", "size: XS" ], "merged": false, - "number": 68590, - "review_comments_count": 3, + "number": 69549, + "review_comments_count": 0, "state": "open", - "title": "fix(memory-core): rewrite qmd index on managed collection repair", - "updated_at": "2026-04-18T14:10:44Z" + "title": "exec tool: strip model-visible `security` / `ask` params", + "updated_at": "2026-04-21T02:45:07Z" }, { - "additions": 44, - "author": "sqsge", + "additions": 37, + "author": "jackson-jia-914", "author_association": "NONE", - "body_excerpt": "## Summary Fixes #62076. This narrows the `sessions --json` fix to the non-TTY path: - skip eager context warmup only for `openclaw sessions --json` when stdout is non-TTY - preserve the existing eager warmup path for interactive `sessions\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - **Problem**: Multiple OpenClaw instances sharing the same dreaming cron expression fire dreaming sweeps simultaneously, causing redundant concurrent work, I/O spikes, and potential race conditions on shared storage. - **Why it\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68589", - "created_at": "2026-04-18T13:59:09Z", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69548", + "created_at": "2026-04-21T02:40:24Z", "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68589/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68589", + "files_url": "https://github.com/openclaw/openclaw/pull/69548/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69548", "labels": [ - "agents", + "extensions: memory-core", "size: XS" ], "merged": false, - "number": 68589, - "review_comments_count": 1, + "number": 69548, + "review_comments_count": 10, "state": "open", - "title": "fix(cli): avoid sessions JSON warmup in non-TTY runs", - "updated_at": "2026-04-18T16:16:58Z" + "title": "feat(memory): add staggerMs option to dreaming cron schedule", + "updated_at": "2026-04-21T08:20:13Z" }, { - "additions": 106, - "author": "Lucenx9", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Telegram callback pagination treated every edit failure as retryable, including permanent Telegram edit errors. - Why it matters: a permanently failing callback update stayed in `failedUpdateIds`, so the persisted wat\u2026", - "changed_files": 3, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "additions": 27, + "author": "Eruditi", + "author_association": "NONE", + "body_excerpt": "FreeBSD uses its own package manager (pkg) rather than Homebrew. Previously, the onboard flow would recommend installing Homebrew on FreeBSD, which is not the standard practice for FreeBSD users. Fixes #68893", + "changed_files": 2, + "cluster_id": "cluster-68893-6", + "cluster_ids": [ + "cluster-68893-6" + ], + "cluster_role": "canonical", "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68588", - "created_at": "2026-04-18T13:55:27Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69545", + "created_at": "2026-04-21T02:36:51Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68588/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68588", + "files_url": "https://github.com/openclaw/openclaw/pull/69545/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69545", "labels": [ - "channel: telegram", - "size: S" + "commands", + "size: XS" ], - "merged": true, - "number": 68588, - "review_comments_count": 2, - "state": "closed", - "title": "fix(telegram): avoid wedging callback updates on permanent edit errors", - "updated_at": "2026-04-18T18:52:57Z" + "merged": false, + "number": 69545, + "review_comments_count": 7, + "state": "open", + "title": "fix(onboard): skip Homebrew recommendation on FreeBSD", + "updated_at": "2026-04-21T15:21:44Z" }, { - "additions": 56, - "author": "imadal1n", + "additions": 145, + "author": "kaseonedge", "author_association": "NONE", - "body_excerpt": "## Summary - ensure active memory runtime artifacts are loaded before bridge-based wiki status/import paths query public artifacts - make the runtime bridge path self-heal from config instead of depending on prior runtime registry state ##\u2026", - "changed_files": 4, + "body_excerpt": "When the primary ACP backend fails with ACP_TURN_FAILED due to rate limiting, quota exhaustion, or UNAVAILABLE errors, automatically retry the turn with the next configured backend in acp.fallbacks. ## Changes - Add acp.fallbacks config op\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 7, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68586", - "created_at": "2026-04-18T13:54:05Z", - "deletions": 2, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69542", + "created_at": "2026-04-21T02:18:44Z", + "deletions": 22, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68586/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68586", + "files_url": "https://github.com/openclaw/openclaw/pull/69542/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69542", "labels": [ "size: S" ], "merged": false, - "number": 68586, - "review_comments_count": 10, + "number": 69542, + "review_comments_count": 13, "state": "open", - "title": "fix(memory-core): resolve runtime artifacts before wiki bridge status", - "updated_at": "2026-04-19T01:42:32Z" + "title": "feat(acp): add backend provider failover for UNAVAILABLE errors", + "updated_at": "2026-04-21T09:13:06Z" }, { - "additions": 474, - "author": "seoseo-ai", - "author_association": "NONE", - "body_excerpt": "## Issue Closes openclaw/openclaw#68551 ## Summary Adds `createDelegatedTaskWatchdog` \u2014 a public seam that lets plugin-owned delegated-task code schedule heartbeat cadence and timeout cleanup without importing internal core timers directly\u2026", - "changed_files": 3, + "additions": 135, + "author": "drobison00", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68584", - "created_at": "2026-04-18T13:48:50Z", - "deletions": 0, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69540", + "created_at": "2026-04-21T02:17:31Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68584/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68584", + "files_url": "https://github.com/openclaw/openclaw/pull/69540/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69540", "labels": [ - "size: M" + "agents", + "maintainer", + "size: S" ], - "merged": false, - "number": 68584, - "review_comments_count": 4, - "state": "open", - "title": "feat(plugins): add plugin-facing heartbeat and timeout timer seam for delegated tasks", - "updated_at": "2026-04-18T13:54:24Z" + "merged": true, + "number": 69540, + "review_comments_count": 8, + "state": "closed", + "title": "fix(mcp): block dangerous stdio env overrides", + "updated_at": "2026-04-21T07:12:13Z" }, { - "additions": 1, - "author": "ZackaryShen", + "additions": 0, + "author": "sudhindrat", "author_association": "NONE", - "body_excerpt": "## Fix for #68398 ### Problem `cleanupProvisionalSession` was defined in `subagent-spawn.ts` but not exported, causing \"cleanupProvisionalSession is not defined\" errors when called from subagent-registry chunk. ### Solution Export the `cle\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Fixes `ERR_INVALID_ARG_TYPE: The data argument must be of type string or an instance of Buffer... Received undefined` when tool params are undefined. ## Root Cause In `src/agents/tool-loop-detection.ts`, the `hashToolCall` funct\u2026", + "changed_files": 0, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68583", - "created_at": "2026-04-18T13:48:28Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69539", + "created_at": "2026-04-21T02:12:36Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68583/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68583", + "files_url": "https://github.com/openclaw/openclaw/pull/69539/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69539", "labels": [ "agents", "size: XS" ], "merged": false, - "number": 68583, - "review_comments_count": 2, - "state": "open", - "title": "fix: export cleanupProvisionalSession function (#68398)", - "updated_at": "2026-04-18T14:00:19Z" + "number": 69539, + "review_comments_count": 1, + "state": "closed", + "title": "fix(tool-loop-detection): handle undefined params in hashToolCall", + "updated_at": "2026-04-21T10:51:55Z" }, { - "additions": 527, - "author": "vincentkoc", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: `openrouter:free` and `openrouter:auto` fall through the providerless model path, so `openrouter:free` gets mis-resolved under the default provider and `openrouter:auto` is not treated as the canonical OpenRouter auto\u2026", - "changed_files": 6, + "additions": 265, + "author": "amknight", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Adds two new probe sites inside `src/plugin-sdk/channel-entry-contract.ts` so we can attribute cold-start cost during bundled-channel-entry plugin registration. Gated on the existing `OPENCLAW_PLUGIN_LOAD_PROFILE=1` env flag and\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68579", - "created_at": "2026-04-18T13:34:24Z", - "deletions": 18, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69537", + "created_at": "2026-04-21T02:09:06Z", + "deletions": 71, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68579/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68579", + "files_url": "https://github.com/openclaw/openclaw/pull/69537/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69537", "labels": [ - "agents", "maintainer", - "size: L" + "size: M" ], "merged": true, - "number": 68579, - "review_comments_count": 5, + "number": 69537, + "review_comments_count": 1, "state": "closed", - "title": "fix(models): resolve openrouter compat aliases", - "updated_at": "2026-04-18T15:25:27Z" + "title": "perf(plugin-sdk): per-phase + per-jiti-call probes for bundled channel entries", + "updated_at": "2026-04-21T12:06:16Z" }, { - "additions": 942, - "author": "vincentkoc", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: some OpenRouter-compatible models return visible assistant output inside `reasoning_details` instead of `delta.content`, and OpenClaw only treated `reasoning_details` as hidden thinking. - Why it matters: upstream rep\u2026", + "additions": 125, + "author": "neeravmakwana", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Two small, related fixes around `openclaw infer model run` observability and `openclaw models status` display. ### Bug A - `infer model run` never reports fallback attempts **Symptom:** The `model.run` capability envelope always\u2026", "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68577", - "created_at": "2026-04-18T13:29:48Z", - "deletions": 46, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69535", + "created_at": "2026-04-21T02:07:29Z", + "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68577/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68577", + "files_url": "https://github.com/openclaw/openclaw/pull/69535/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69535", "labels": [ - "docs", + "cli", + "commands", "agents", - "maintainer", - "size: L" + "size: S" ], - "merged": true, - "number": 68577, - "review_comments_count": 8, - "state": "closed", - "title": "fix(openrouter): parse visible reasoning_details output", - "updated_at": "2026-04-18T15:18:15Z" + "merged": false, + "number": 69535, + "review_comments_count": 2, + "state": "open", + "title": "fix(cli): surface model-fallback attempts and fix models status label", + "updated_at": "2026-04-21T02:24:15Z" }, { - "additions": 132, - "author": "SARAMALI15792", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## What does this PR do? Auto-resets the active session when a Telegram-linked conversation hits an unrecoverable context overflow, instead of leaving the bloated session alive and causing subsequent messages to fail repeatedly. Fixes #684\u2026", - "changed_files": 2, + "additions": 842, + "author": "mbs-vhs", + "author_association": "NONE", + "body_excerpt": "## Summary Bridges the voice-call plugin's realtime session to the main agent's reasoning loop in both directions, so Twilio + OpenAI Realtime voice calls actually become an async-relay channel for the agent: - **Outbound intent injection\u2026", + "changed_files": 18, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68575", - "created_at": "2026-04-18T13:25:33Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69530", + "created_at": "2026-04-21T01:55:38Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68575/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68575", + "files_url": "https://github.com/openclaw/openclaw/pull/69530/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69530", "labels": [ - "size: S" + "docs", + "channel: voice-call", + "size: L", + "extensions: openai" ], "merged": false, - "number": 68575, - "review_comments_count": 3, + "number": 69530, + "review_comments_count": 4, "state": "open", - "title": "fix(telegram): reset sessions after unrecoverable context overflow", - "updated_at": "2026-04-18T13:30:10Z" + "title": "feat(voice-call): relay realtime calls to/from agent reasoning loop", + "updated_at": "2026-04-21T04:00:16Z" }, { - "additions": 242, - "author": "vincentkoc", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: OpenRouter and Arcee could persist or keep using the stale `https://openrouter.ai/v1` route in provider config or discovered model metadata. - Why it matters: that stale route breaks OpenRouter-routed requests and mak\u2026", - "changed_files": 9, + "additions": 84, + "author": "hszhsz", + "author_association": "NONE", + "body_excerpt": "## Summary Two bug fixes bundled in this PR: --- ### Fix 1: #69525 \u2014 Cross-provider message send leaks source session accountId to target channel When sending messages across providers (e.g. Telegram \u2192 Feishu) with `allowAcrossProviders: t\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68574", - "created_at": "2026-04-18T13:25:14Z", - "deletions": 16, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69529", + "created_at": "2026-04-21T01:43:39Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68574/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68574", + "files_url": "https://github.com/openclaw/openclaw/pull/69529/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69529", "labels": [ - "agents", - "maintainer", - "size: M", - "extensions: arcee" + "app: web-ui", + "gateway", + "size: S" ], - "merged": true, - "number": 68574, + "merged": false, + "number": 69529, "review_comments_count": 2, - "state": "closed", - "title": "fix(openrouter): heal stale provider base urls", - "updated_at": "2026-04-18T17:08:10Z" + "state": "open", + "title": "fix: prevent defaultAccountId leak in cross-provider message sends", + "updated_at": "2026-04-21T01:59:33Z" }, { - "additions": 25, - "author": "Lucenx9", + "additions": 99, + "author": "neeravmakwana", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: the webhooks plugin cached the first resolved SecretRef-backed shared secret for each target and kept reusing it across requests. - Why it matters: rotating a leaked webhook secret in its backing provider did not revo\u2026", - "changed_files": 2, + "body_excerpt": "## Summary WhatsApp TTS auto-replies from the Microsoft (Edge) speech provider were arriving as plain MP3 attachments instead of native voice notes. This PR makes the Microsoft provider honor the `target: \\\"voice-note\\\"` hint that the TTS\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68573", - "created_at": "2026-04-18T13:20:17Z", - "deletions": 20, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69528", + "created_at": "2026-04-21T01:41:10Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68573/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68573", + "files_url": "https://github.com/openclaw/openclaw/pull/69528/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69528", "labels": [ - "size: XS", - "extensions: webhooks" + "docs", + "size: S" ], "merged": false, - "number": 68573, + "number": 69528, "review_comments_count": 0, "state": "open", - "title": "fix(webhooks): re-resolve rotated webhook secrets", - "updated_at": "2026-04-18T13:23:07Z" + "title": "fix(microsoft-tts): emit ogg/opus for voice-note targets so WhatsApp auto-replies play as native voice notes", + "updated_at": "2026-04-21T01:53:15Z" }, { - "additions": 653, - "author": "seoseo-ai", - "author_association": "NONE", - "body_excerpt": "Closes #68549 ## Summary Add a generic, A2A-agnostic wait-run handle registry to the plugin SDK. Plugins can use this surface to register, resolve, cancel, and clean up delegated wait-run handles without reaching into core-owned runtime st\u2026", - "changed_files": 3, + "additions": 414, + "author": "shakkernerd", + "author_association": "MEMBER", + "body_excerpt": "## Summary - launch setup hatch TUI in a fresh `openclaw tui` child process instead of reusing the onboarding process - restore terminal state before and after the handoff - keep the setup hatch safety behavior: no auto-delivery to last pr\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68572", - "created_at": "2026-04-18T13:15:27Z", - "deletions": 1, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69524", + "created_at": "2026-04-21T01:27:53Z", + "deletions": 22, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68572/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68572", + "files_url": "https://github.com/openclaw/openclaw/pull/69524/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69524", "labels": [ - "size: L" + "gateway", + "maintainer", + "size: M" ], - "merged": false, - "number": 68572, - "review_comments_count": 5, - "state": "open", - "title": "feat(plugin-sdk): add delegated wait-run handle seam", - "updated_at": "2026-04-18T13:19:30Z" + "merged": true, + "number": 69524, + "review_comments_count": 7, + "state": "closed", + "title": "Fix setup TUI hatch terminal handoff", + "updated_at": "2026-04-21T02:46:21Z" }, { - "additions": 133, - "author": "nightq", + "additions": 155, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary When a user sends a message like `@bot:server /new` in a Matrix room, the slash command was not recognized because the mention prefix was not stripped before checking for slash commands. ## Root Cause The `hasControlCommand()` f\u2026", + "body_excerpt": "## Summary - keep OpenRouter assistant stream messages pinned to the configured model alias instead of the provider-returned redirected id - normalize done/error stream events and final stream results so downstream payload assembly does no\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68570", - "created_at": "2026-04-18T13:12:18Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69522", + "created_at": "2026-04-21T01:23:24Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68570/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68570", + "files_url": "https://github.com/openclaw/openclaw/pull/69522/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69522", "labels": [ - "channel: matrix", - "size: S" + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68570, + "number": 69522, "review_comments_count": 3, - "state": "open", - "title": "fix(matrix): strip mention prefix before slash command matching", - "updated_at": "2026-04-18T15:23:22Z" + "state": "closed", + "title": "fix: resolve openrouter model alias redirects in provider response", + "updated_at": "2026-04-21T01:29:30Z" }, { - "additions": 7, - "author": "vivekchand", + "additions": 1083, + "author": "eve-builds", "author_association": "NONE", - "body_excerpt": "## Problem When a device is paired with operator.write or operator.admin scope, the token was missing operator.read, causing 403 errors when calling read-only methods like session_status. This causes ClawMetry dashboard to flood gateway.lo\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - **Problem:** OpenClaw's `video_generate` tool has six providers (Runway, Google Veo, Qwen Wan, fal, Minimax, Vydra), all focused on cinematic text-to-video. The identity-first / avatar-presenter lane is unserved. Agent users r\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68569", - "created_at": "2026-04-18T13:11:41Z", + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69521", + "created_at": "2026-04-21T01:22:13Z", "deletions": 0, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68569/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68569", + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69521/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69521", "labels": [ - "size: XS" + "docs", + "size: L" ], "merged": false, - "number": 68569, - "review_comments_count": 1, - "state": "open", - "title": "fix(device-pairing): auto-expand operator scopes to include operator.read", - "updated_at": "2026-04-18T14:10:42Z" + "number": 69521, + "review_comments_count": 0, + "state": "closed", + "title": "feat(extensions): add HeyGen video generation provider", + "updated_at": "2026-04-21T01:27:30Z" }, { - "additions": 15, - "author": "Ante042", + "additions": 640, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: When an answer-lane final payload has the exact same text as an already-visible preview, the deliverer was still sending a replacement message before the archived-preview cleanup ran. If cleanup was disabled (\\`re\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68568", - "created_at": "2026-04-18T13:11:28Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69520", + "created_at": "2026-04-21T01:22:00Z", + "deletions": 83, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68568/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68568", + "files_url": "https://github.com/openclaw/openclaw/pull/69520/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69520", "labels": [ - "channel: telegram", - "size: XS" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68568, - "review_comments_count": 6, + "number": 69520, + "review_comments_count": 0, "state": "open", - "title": "fix(telegram): suppress duplicate finals when preview cleanup is disabled", - "updated_at": "2026-04-18T13:28:43Z" + "title": "UI: harden chat scroll interrupts", + "updated_at": "2026-04-21T01:53:34Z" }, { - "additions": 22, - "author": "imadal1n", + "additions": 140, + "author": "sunlight7777777", "author_association": "NONE", - "body_excerpt": "## Summary - pass `cache: false` when loading gateway plugins during startup - force a fresh plugin/runtime view instead of reusing stale cache state in the gateway bootstrap path ## Why On config/plugin/runtime transitions, stale plugin c\u2026", - "changed_files": 7, + "body_excerpt": "Summary Fixes the Sessions page Limit field so it uses a numeric input instead of accepting arbitrary text. Problem The field was implemented as a plain text input and passed raw string values into filter state. This allowed invalid values\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68567", - "created_at": "2026-04-18T13:10:58Z", - "deletions": 7, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69519", + "created_at": "2026-04-21T01:21:33Z", + "deletions": 129, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68567/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68567", + "files_url": "https://github.com/openclaw/openclaw/pull/69519/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69519", "labels": [ - "gateway", - "agents", - "size: XS", - "extensions: memory-wiki" + "app: web-ui", + "size: M" ], "merged": false, - "number": 68567, - "review_comments_count": 3, + "number": 69519, + "review_comments_count": 4, "state": "open", - "title": "fix(gateway): disable stale plugin cache at startup", - "updated_at": "2026-04-18T16:03:22Z" + "title": "Sessions page: use numeric input for Limit field", + "updated_at": "2026-04-21T11:07:34Z" }, { - "additions": 108, - "author": "AstronautGumbo", - "author_association": "NONE", - "body_excerpt": "\u2026nd HTTP 400s A malformed payload is a client-side bug, not a profile problem. The prior behavior in `markAuthProfileFailure` penalized the auth profile with a cooldown window on every failure reason including format-class 400s, which then\u2026", - "changed_files": 4, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68566", - "created_at": "2026-04-18T13:08:13Z", - "deletions": 1, + "additions": 238, + "author": "neeravmakwana", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Closes #69513. `openclaw cron create --announce --account ` silently accepted any non-empty string as `delivery.accountId` and persisted it to `cron/jobs.json`, leading to silent failures or misrouted deliveries at run time\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69518", + "created_at": "2026-04-21T01:20:19Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68566/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68566", + "files_url": "https://github.com/openclaw/openclaw/pull/69518/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69518", "labels": [ - "agents", - "size: S" + "gateway", + "size: M" ], "merged": false, - "number": 68566, + "number": 69518, "review_comments_count": 3, - "state": "open", - "title": "fix(agents/auth-profile-cooldowns): skip cooldown for format errors a\u2026", - "updated_at": "2026-04-18T13:17:27Z" + "state": "closed", + "title": "fix(cron): validate delivery accountId against configured channel accounts", + "updated_at": "2026-04-21T01:56:47Z" }, { - "additions": 201, - "author": "AstronautGumbo", + "additions": 646, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "\u2026s across cross-model replay The prior behavior in `transformTransportMessages` preserved signed and redacted thinking blocks only on same-model replay; any cross-model replay downgraded the block to a plain `text` block (signed case) or d\u2026", - "changed_files": 3, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68565", - "created_at": "2026-04-18T13:07:48Z", - "deletions": 7, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69517", + "created_at": "2026-04-21T01:08:23Z", + "deletions": 83, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68565/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68565", + "files_url": "https://github.com/openclaw/openclaw/pull/69517/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69517", "labels": [ - "agents", - "size: M" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68565, - "review_comments_count": 3, - "state": "open", - "title": "fix(agents/anthropic-replay): preserve signed/redacted thinking block\u2026", - "updated_at": "2026-04-18T13:11:18Z" + "number": 69517, + "review_comments_count": 2, + "state": "closed", + "title": "UI: harden chat scroll interrupts", + "updated_at": "2026-04-21T01:21:28Z" }, { - "additions": 40, - "author": "alekseivarin-gif", - "author_association": "NONE", - "body_excerpt": "## Summary This PR reframes key user-facing docs around OpenClaw as a personal AI assistant. The main change is positioning: - assistant first - gateway/control plane second It makes the top-of-funnel story clearer without changing the und\u2026", - "changed_files": 11, + "additions": 195, + "author": "Lucenx9", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: silent local shared-auth pairing used the client-requested scopes as the approval baseline, so a first-time local operator pairing could silently self-approve elevated scopes such as `operator.admin`. - Why it matters\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68564", - "created_at": "2026-04-18T13:06:54Z", - "deletions": 25, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69516", + "created_at": "2026-04-21T01:04:03Z", + "deletions": 39, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68564/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68564", + "files_url": "https://github.com/openclaw/openclaw/pull/69516/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69516", "labels": [ - "docs", - "size: XS" + "gateway", + "size: M" ], "merged": false, - "number": 68564, - "review_comments_count": 0, - "state": "open", - "title": "docs: shift user-facing copy toward assistant-first positioning", - "updated_at": "2026-04-18T13:08:40Z" + "number": 69516, + "review_comments_count": 3, + "state": "closed", + "title": "fix(gateway): block silent pairing scope self-approval", + "updated_at": "2026-04-21T01:26:19Z" }, { - "additions": 260, - "author": "billriesner", + "additions": 565, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "Browser tool screenshots embed full base64-encoded PNG images in tool results, which persist in conversation history and cause massive context bloat. A single 1920x1080 screenshot can be ~1.2MB (~300k tokens), pushing sessions into premium\u2026", - "changed_files": 2, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68560", - "created_at": "2026-04-18T13:05:13Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69515", + "created_at": "2026-04-21T00:49:00Z", + "deletions": 74, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68560/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68560", + "files_url": "https://github.com/openclaw/openclaw/pull/69515/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69515", "labels": [ - "agents", - "size: M" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68560, - "review_comments_count": 2, - "state": "open", - "title": "fix: strip base64 image data from tool results before persistence", - "updated_at": "2026-04-18T14:04:30Z" + "number": 69515, + "review_comments_count": 1, + "state": "closed", + "title": "UI: harden chat scroll interrupts", + "updated_at": "2026-04-21T00:53:41Z" }, { - "additions": 10, - "author": "imadal1n", + "additions": 26, + "author": "armorbreak001", "author_association": "NONE", - "body_excerpt": "## Summary - index only primary session transcript files in memory-host-sdk session file discovery - exclude reset/deleted/checkpoint transcript variants from the QMD session-file listing path ## Why For our deployment, recall quality degr\u2026", - "changed_files": 2, + "body_excerpt": "## Problem `openclaw plugins install` runs `npm install` without `--omit=peer`. On npm 7+, this causes auto-installation of peer dependencies \u2014 including `openclaw` itself when a plugin declares `\"peerDependencies\": { \"openclaw\": \"*\" }`. T\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68559", - "created_at": "2026-04-18T13:04:18Z", - "deletions": 8, + "comments_count": 8, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69514", + "created_at": "2026-04-21T00:47:00Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68559/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68559", + "files_url": "https://github.com/openclaw/openclaw/pull/69514/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69514", "labels": [ "size: XS" ], "merged": false, - "number": 68559, - "review_comments_count": 3, + "number": 69514, + "review_comments_count": 4, "state": "open", - "title": "fix(memory-host-sdk): index only primary session transcripts", - "updated_at": "2026-04-18T13:08:21Z" + "title": "fix(cli): omit peer deps during plugin install to prevent nested openclaw bloat", + "updated_at": "2026-04-21T02:16:53Z" }, { - "additions": 59, - "author": "Ante042", + "additions": 25, + "author": "armorbreak001", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: Running \\`/compact\\` on a session with little or no summarizable history can render labels like \\`Compacted (0 \u2192 36) \u2022 Context 36/1.0m (0%)\\` \u2014 the arrow direction is reversed, and the denominator context number i\u2026", + "body_excerpt": "## Summary Zsh completion for leaf commands (e.g. `openclaw wiki ingest`) was missing positional argument specs, so `` did not trigger file-path completion for commands that accept file arguments. Root cause: `generateZshSubcommands`\u2026", "changed_files": 1, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "cluster_id": "cluster-69293-4", + "cluster_ids": [ + "cluster-69293-4" + ], + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68558", - "created_at": "2026-04-18T13:04:18Z", - "deletions": 8, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69509", + "created_at": "2026-04-21T00:40:30Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68558/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68558", + "files_url": "https://github.com/openclaw/openclaw/pull/69509/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69509", "labels": [ - "size: S" + "cli", + "size: XS" ], "merged": false, - "number": 68558, - "review_comments_count": 3, + "number": 69509, + "review_comments_count": 4, "state": "open", - "title": "fix(auto-reply): stop rendering misleading /compact labels on small sessions", - "updated_at": "2026-04-18T13:15:27Z" + "title": "fix(cli): add positional argument completion for zsh leaf commands", + "updated_at": "2026-04-21T00:45:35Z" }, { - "additions": 30, - "author": "Ante042", + "additions": 561, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: The Control UI's ctx% badge and cache-hit-rate metric both ignore prompt cache tokens, so any session using Anthropic prompt caching (where most of the prompt lives in \\`cacheRead\\`/\\`cacheWrite\\`) renders a ~0% c\u2026", - "changed_files": 15, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68557", - "created_at": "2026-04-18T13:02:47Z", - "deletions": 27, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69508", + "created_at": "2026-04-21T00:40:18Z", + "deletions": 74, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68557/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68557", + "files_url": "https://github.com/openclaw/openclaw/pull/69508/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69508", "labels": [ "app: web-ui", - "size: S" + "size: L" ], "merged": false, - "number": 68557, - "review_comments_count": 3, - "state": "open", - "title": "fix(ui): include cache tokens in ctx% badge and cache-hit-rate", - "updated_at": "2026-04-18T13:20:49Z" + "number": 69508, + "review_comments_count": 2, + "state": "closed", + "title": "UI: harden chat scroll interrupts", + "updated_at": "2026-04-21T00:48:26Z" }, { - "additions": 54, - "author": "imadal1n", + "additions": 561, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary - preserve explicit custom collection names instead of auto-scoping them when a name is already provided - keep unnamed custom collections on the current generated naming path ## Why Operators may depend on stable, human-chosen\u2026", - "changed_files": 4, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68556", - "created_at": "2026-04-18T12:55:40Z", - "deletions": 82, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69506", + "created_at": "2026-04-21T00:31:53Z", + "deletions": 74, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68556/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68556", + "files_url": "https://github.com/openclaw/openclaw/pull/69506/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69506", "labels": [ - "extensions: memory-core", - "size: S" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68556, - "review_comments_count": 2, - "state": "open", - "title": "feat(memory-host-sdk): preserve explicit custom collection names", - "updated_at": "2026-04-18T14:20:08Z" + "number": 69506, + "review_comments_count": 3, + "state": "closed", + "title": "UI: tighten chat scroll guards", + "updated_at": "2026-04-21T00:45:17Z" }, { - "additions": 7, - "author": "armorbreak001", + "additions": 532, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Problem When a cron job payload explicitly declares `\"model\": \"ollama/llama3.2:3b\"`, the gateway **silently** falls back to the default provider/model (`openai/gpt-4o-mini`) if the model is not in the allowlist. There is a `warning` fie\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68555", - "created_at": "2026-04-18T12:55:13Z", - "deletions": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69504", + "created_at": "2026-04-21T00:21:23Z", + "deletions": 73, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68555/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68555", + "files_url": "https://github.com/openclaw/openclaw/pull/69504/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69504", "labels": [ - "size: XS" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68555, - "review_comments_count": 3, - "state": "open", - "title": "fix(cron): loud error when payload.model silently falls back to wrong provider (#67756)", - "updated_at": "2026-04-18T13:04:24Z" + "number": 69504, + "review_comments_count": 2, + "state": "closed", + "title": "UI: tighten chat scroll guards", + "updated_at": "2026-04-21T00:29:20Z" }, { - "additions": 4, - "author": "henkterharmsel", + "additions": 6174, + "author": "Ittiz", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** `updateSessionStore` and `updateSessionStoreEntry` call `loadSessionStore(storePath, { skipCache: true })` inside `withSessionStoreLock`. On large `sessions.json` files this forces a synchronous `readFileSync` + `\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - Problem: assistant replies with managed media, especially image-only replies and agent-run audio replies, could render live in webchat/control UI but fail to persist correctly into transcript/history. - Why it matters: users c\u2026", + "changed_files": 25, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68554", - "created_at": "2026-04-18T12:54:22Z", - "deletions": 3, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69500", + "created_at": "2026-04-21T00:12:26Z", + "deletions": 1094, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68554/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68554", + "files_url": "https://github.com/openclaw/openclaw/pull/69500/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69500", "labels": [ - "size: XS" + "app: web-ui", + "gateway", + "size: XL" ], "merged": false, - "number": 68554, - "review_comments_count": 0, + "number": 69500, + "review_comments_count": 26, "state": "open", - "title": "fix(sessions): remove redundant skipCache disk re-read inside session store lock", - "updated_at": "2026-04-18T12:57:11Z" + "title": "fix(gateway,ui): restore managed media transcript persistence in webchat", + "updated_at": "2026-04-21T15:38:31Z" }, { - "additions": 73, - "author": "johnlanni", + "additions": 532, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Problem In Matrix rooms, when a user addresses the bot with a mention before a slash command (e.g., `@bot:server /new` or Element's plaintext fallback `BotName: /new`), the slash command is not recognized because the mention prefix is n\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68552", - "created_at": "2026-04-18T12:51:00Z", - "deletions": 2, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69499", + "created_at": "2026-04-20T23:57:30Z", + "deletions": 73, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68552/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68552", + "files_url": "https://github.com/openclaw/openclaw/pull/69499/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69499", "labels": [ - "channel: matrix", - "size: S" + "app: web-ui", + "size: L" ], "merged": false, - "number": 68552, - "review_comments_count": 3, + "number": 69499, + "review_comments_count": 4, "state": "closed", - "title": "fix(matrix): strip mention prefix before slash command matching", - "updated_at": "2026-04-18T16:12:13Z" + "title": "UI: fix scroll lock and task preview", + "updated_at": "2026-04-21T00:21:28Z" }, { - "additions": 20, - "author": "johnlanni", + "additions": 526, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary Re-read raw allowlist entries from live config on each inbound message, merging with the startup-time resolved values. This allows new entries in `dm.allowFrom` and `groupAllowFrom` to take effect immediately without restarting\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68546", - "created_at": "2026-04-18T12:40:02Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69496", + "created_at": "2026-04-20T23:42:00Z", + "deletions": 68, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68546/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68546", + "files_url": "https://github.com/openclaw/openclaw/pull/69496/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69496", "labels": [ - "channel: matrix", - "size: XS" + "app: web-ui", + "commands", + "size: L" ], "merged": false, - "number": 68546, + "number": 69496, "review_comments_count": 2, - "state": "open", - "title": "fix(matrix): hot-reload dm.allowFrom and groupAllowFrom on each inbound message", - "updated_at": "2026-04-18T12:46:57Z" + "state": "closed", + "title": "UI: fix scroll lock and task preview", + "updated_at": "2026-04-20T23:53:16Z" }, { - "additions": 219, - "author": "Feelw00", + "additions": 228, + "author": "zote", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** `retryAsync` applies symmetric jitter even when the caller supplies `retryAfterMs`. Symmetric jitter yields offsets in `[-jitter, +jitter]`, so on roughly half of retries the scheduled delay drops to `retryAfterMs\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - Accept `agents.*.heartbeat.model` as `{ primary, fallbacks }` in addition to the existing string form, mirroring `agents.defaults.model`. Closes #69434. - Heartbeat ticks now fail over to the next fallback on retriable provide\u2026", + "changed_files": 17, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 8, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68543", - "created_at": "2026-04-18T12:26:45Z", - "deletions": 4, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69495", + "created_at": "2026-04-20T23:33:40Z", + "deletions": 23, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68543/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68543", + "files_url": "https://github.com/openclaw/openclaw/pull/69495/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69495", "labels": [ + "docs", + "gateway", "size: M" ], "merged": false, - "number": 68543, - "review_comments_count": 6, + "number": 69495, + "review_comments_count": 2, "state": "open", - "title": "fix(infra): keep retryAsync delays above server-supplied Retry-After", - "updated_at": "2026-04-19T07:10:26Z" + "title": "feat(heartbeat): support model fallbacks via {primary,fallbacks} (#69434)", + "updated_at": "2026-04-20T23:37:45Z" }, { - "additions": 39, - "author": "hclsys", + "additions": 63, + "author": "shad0wca7", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem Reply-media normalization persisted local attachments via `resolveOutboundAttachmentFromUrl` without forwarding the original basename. The path ended up under `~/.openclaw/media/outbound/.`, and downstream transports\u2026", - "changed_files": 3, + "body_excerpt": "## Problem When `gateway.auth.token` is configured as a SecretRef (e.g., `{source: \"exec\", provider: \"keychain\", id: \"gateway-auth-token\"}`), the macOS desktop app fails to resolve the actual token value. This causes: 1. Desktop app reads\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68542", - "created_at": "2026-04-18T12:26:13Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69494", + "created_at": "2026-04-20T23:26:49Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68542/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68542", + "files_url": "https://github.com/openclaw/openclaw/pull/69494/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69494", "labels": [ - "size: XS" + "app: macos", + "size: S" ], "merged": false, - "number": 68542, - "review_comments_count": 1, + "number": 69494, + "review_comments_count": 4, "state": "open", - "title": "fix(auto-reply): preserve friendly basename for reply-media staging", - "updated_at": "2026-04-18T12:28:47Z" + "title": "fix: resolve SecretRef keychain tokens in desktop app browser proxy", + "updated_at": "2026-04-20T23:33:34Z" }, { - "additions": 102, - "author": "isopenclaw", + "additions": 508, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary Fix Discord native command handling so a stalled interaction defer does not block the command acknowledgment path long enough for the interaction to fail. This change: - adds a short timeout around `interaction.defer()` - treats\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68538", - "created_at": "2026-04-18T12:16:37Z", - "deletions": 18, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69493", + "created_at": "2026-04-20T23:23:21Z", + "deletions": 67, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68538/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68538", + "files_url": "https://github.com/openclaw/openclaw/pull/69493/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69493", "labels": [ - "channel: discord", - "size: S" + "app: web-ui", + "commands", + "size: L" ], "merged": false, - "number": 68538, + "number": 69493, "review_comments_count": 2, - "state": "open", - "title": "discord: timebox native-command defer before dispatch", - "updated_at": "2026-04-18T12:23:04Z" + "state": "closed", + "title": "UI: harden chat scroll state", + "updated_at": "2026-04-20T23:33:42Z" }, { - "additions": 106, - "author": "TTTT-T", + "additions": 40, + "author": "adhajar", "author_association": "NONE", - "body_excerpt": "## Summary This change allows top-level Telegram `bindings[]` entries with `type: \"acp\"` to target direct chats in addition to forum topics. ## Root Cause Telegram ACP binding normalization and matching only accepted topic-shaped conversat\u2026", - "changed_files": 3, + "body_excerpt": "## Summary This PR adds the anthropic default beta headers to the bedrock flow to allow openclaw deployed using claude models on bedrock the ability to get tool call streaming - Problem: - Why it matters: Using OC on Bedrock in time sensit\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68537", - "created_at": "2026-04-18T12:12:52Z", - "deletions": 23, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68537/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68537", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69491", + "created_at": "2026-04-20T23:13:27Z", + "deletions": 2, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69491/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69491", "labels": [ - "docs", - "channel: telegram", - "gateway", - "size: S" + "size: XS" ], "merged": false, - "number": 68537, - "review_comments_count": 0, + "number": 69491, + "review_comments_count": 3, "state": "open", - "title": "[codex] fix(telegram): allow ACP bindings for direct chats", - "updated_at": "2026-04-18T12:13:15Z" + "title": "feat(amazon-bedrock): forward default Anthropic betas through the bedrock-converse stream route", + "updated_at": "2026-04-20T23:20:09Z" }, { - "additions": 74, - "author": "likewen-tech", - "author_association": "NONE", - "body_excerpt": "$## Summary - use `sessionTarget` session context for cron failure announcements when the job targets a specific session - fall back to creator `sessionKey` only when no `session:` target exists - add a regression test covering a group-cre\u2026", + "additions": 11, + "author": "Magicray1217", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem\\n\\ngoogle/gemma-4-26b-a4b-it shows 1024k context window in openclaw models list instead of the correct 256k.\\n\\n## Root cause\\n\\nModelRegistry.find() fails to match gemma model IDs, falling through to Google provider's forward-c\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68535", - "created_at": "2026-04-18T12:00:21Z", - "deletions": 4, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69490", + "created_at": "2026-04-20T23:12:06Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68535/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68535", + "files_url": "https://github.com/openclaw/openclaw/pull/69490/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69490", "labels": [ - "gateway", - "size: S" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68535, - "review_comments_count": 0, - "state": "open", - "title": "cron: prefer sessionTarget for failure alerts", - "updated_at": "2026-04-18T12:03:39Z" + "number": 69490, + "review_comments_count": 1, + "state": "closed", + "title": "fix(google): correct model registry lookup for gemma model IDs", + "updated_at": "2026-04-20T23:14:14Z" }, { - "additions": 367, - "author": "kagura-agent", + "additions": 4, + "author": "hclsys", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68530 ## Problem Light and REM dreaming phases were running on every heartbeat that triggered the deep dreaming cron event, spawning narrative subagent sessions each time (~47K tokens per session). Over a few days this accumulated 7\u2026", - "changed_files": 2, + "body_excerpt": "## Problem Per the Anthropic skill spec (which the OpenClaw skill router follows), every \\`description\\` field must include both **what** the skill does **and when** to use it (trigger conditions). Without WHEN, routing silently under-sele\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 6, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68534", - "created_at": "2026-04-18T11:39:13Z", - "deletions": 17, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69489", + "created_at": "2026-04-20T23:10:33Z", + "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68534/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68534", + "files_url": "https://github.com/openclaw/openclaw/pull/69489/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69489", "labels": [ - "extensions: memory-core", - "size: M" + "size: XS", + "extensions: memory-wiki" ], "merged": false, - "number": 68534, - "review_comments_count": 6, + "number": 69489, + "review_comments_count": 2, "state": "open", - "title": "fix(memory-core): add cooldown guard to prevent dreaming-narrative from spawning on every heartbeat", - "updated_at": "2026-04-19T07:05:33Z" + "title": "fix(skills): add WHEN + trigger phrases to 4 skill descriptions", + "updated_at": "2026-04-20T23:12:35Z" }, { - "additions": 341, - "author": "Feelw00", + "additions": 508, + "author": "enis-uys", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** When a plugin's `register()` function throws after already calling `api.registerHttpRoute()`, `api.registerService()`, `api.registerHook()`, etc., the catch block in `src/plugins/loader.ts` only restores process-g\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Describe the problem and fix in 2-5 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 6, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68531", - "created_at": "2026-04-18T11:24:07Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69488", + "created_at": "2026-04-20T23:06:17Z", + "deletions": 67, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68531/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68531", + "files_url": "https://github.com/openclaw/openclaw/pull/69488/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69488", "labels": [ - "size: M" + "app: web-ui", + "commands", + "size: L" ], "merged": false, - "number": 68531, - "review_comments_count": 7, + "number": 69488, + "review_comments_count": 2, "state": "closed", - "title": "fix(plugins): roll back partial registry array contributions when register() throws", - "updated_at": "2026-04-18T14:19:34Z" + "title": "UI: harden chat scroll state", + "updated_at": "2026-04-20T23:22:34Z" }, { - "additions": 81, - "author": "YangManBOBO", + "additions": 727, + "author": "cholaolu-boop", "author_association": "NONE", - "body_excerpt": "## Summary - `resolveChannelGroupRequireMention` now returns **false** when the channel\u2019s **`groupPolicy`** is **`open`** and there is no explicit **`requireMention`** on the resolved group or wildcard entry. - Default remains **true** for\u2026", - "changed_files": 3, + "body_excerpt": "## Problem Each call to `rewriteTranscriptEntriesInSessionFile` leaves the pre-rewrite entries as abandoned sibling branches of the new leaf (append-only session semantics: `branch(parent)` + re-append of the entire suffix). openclaw's tra\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68528", - "created_at": "2026-04-18T11:21:50Z", - "deletions": 8, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69486", + "created_at": "2026-04-20T23:04:21Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68528/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68528", + "files_url": "https://github.com/openclaw/openclaw/pull/69486/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69486", "labels": [ - "size: S" + "agents", + "size: L" ], "merged": false, - "number": 68528, - "review_comments_count": 2, + "number": 69486, + "review_comments_count": 3, "state": "open", - "title": "fix(groups): default requireMention off when groupPolicy is open (#68476)", - "updated_at": "2026-04-18T11:49:42Z" + "title": "fix(runner): ancestry-aware cleanup of rewrite-abandoned transcript entries", + "updated_at": "2026-04-21T01:44:00Z" }, { - "additions": 39, - "author": "cesararevalo", - "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - During startup slack http registry gets reset, it becomes empty... - Preventing slack http requests to be routed properly. If this PR fixes a plugin beta-release blocker, title it `\u2026", - "changed_files": 2, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68523", - "created_at": "2026-04-18T11:01:34Z", - "deletions": 5, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68523/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68523", - "labels": [ - "channel: slack", - "size: XS" - ], - "merged": false, - "number": 68523, - "review_comments_count": 7, - "state": "open", - "title": "Fix to Slack HTTP Registry", - "updated_at": "2026-04-18T22:51:43Z" - }, - { - "additions": 1, - "author": "hxy91819", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Remove `@` maintainer attribution from the secret-scanning replacement comment template in SKILL.md - The person executing the skill is already a maintainer \u2014 GitHub's author association badge makes this clear, so a har\u2026", - "changed_files": 1, + "additions": 99, + "author": "Magicray1217", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem\\n\\nAfter upgrading to 2026.4.14, existing conversations fail with 'Something went wrong'. Gateway logs show repeated active-memory timeouts on the pre-reply path.\\n\\n## Root cause\\n\\nThe before_prompt_build hook had no top-level\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68521", - "created_at": "2026-04-18T10:59:59Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69485", + "created_at": "2026-04-20T23:02:06Z", + "deletions": 70, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68521/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68521", + "files_url": "https://github.com/openclaw/openclaw/pull/69485/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69485", "labels": [ - "maintainer", - "size: XS" + "size: S" ], "merged": true, - "number": 68521, - "review_comments_count": 0, + "number": 69485, + "review_comments_count": 1, "state": "closed", - "title": "fix(secret-scanning): remove maintainer @ attribution from replacement comment template", - "updated_at": "2026-04-18T11:02:46Z" + "title": "fix(active-memory): gracefully degrade on timeout instead of failing entire reply", + "updated_at": "2026-04-21T03:06:08Z" }, { - "additions": 1808, - "author": "hxy91819", + "additions": 28622, + "author": "jesse-merhi", "author_association": "MEMBER", - "body_excerpt": "## Summary - Remove `@` maintainer attribution from the secret-scanning replacement comment template in SKILL.md - The person executing the skill is already a maintainer \u2014 GitHub's author association badge makes this clear, so a har\u2026", - "changed_files": 21, + "body_excerpt": "## Summary - add an end-to-end pipeline that turns every published openclaw GitHub Security Advisory into a reusable OpenGrep rule - compile the per-advisory rules into two super-configs (`precise.yml` + `broad.yml`) under `security/opengr\u2026", + "changed_files": 18, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68519", - "created_at": "2026-04-18T10:57:16Z", - "deletions": 162, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69483", + "created_at": "2026-04-20T22:53:32Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68519/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68519", + "files_url": "https://github.com/openclaw/openclaw/pull/69483/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69483", "labels": [ "scripts", "maintainer", "size: XL" ], "merged": false, - "number": 68519, - "review_comments_count": 2, - "state": "closed", - "title": "fix(secret-scanning): remove maintainer @ attribution from replacement comment template", - "updated_at": "2026-04-18T11:06:11Z" + "number": 69483, + "review_comments_count": 14, + "state": "open", + "title": "feat(security): add GHSA detector-review pipeline and OpenGrep CI workflows", + "updated_at": "2026-04-21T02:06:09Z" }, { - "additions": 93, - "author": "kagura-agent", + "additions": 3, + "author": "hclsys", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68508 \u2014 System event messages (async exec completion notifications with `System:` and `System (untrusted):` prefixes) were leaking into the visible WebChat/Control UI chat transcript. These are internal agent-only signals\u2026", - "changed_files": 2, + "body_excerpt": "## Problem \\`openclaw channels status\\` advertised a \\`status --deep\\` tip in two places (\\`status.ts:142\\`, \\`status-config-format.ts:85\\`) and in its own --help description (\\`channels-cli.ts:108\\`), but the nested command only accepts \\\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68518", - "created_at": "2026-04-18T10:54:59Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69481", + "created_at": "2026-04-20T22:45:47Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68518/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68518", + "files_url": "https://github.com/openclaw/openclaw/pull/69481/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69481", "labels": [ - "app: web-ui", - "size: S" + "cli", + "commands", + "size: XS" ], "merged": false, - "number": 68518, - "review_comments_count": 2, + "number": 69481, + "review_comments_count": 0, "state": "open", - "title": "fix(ui): filter system event messages from chat transcript (#68508)", - "updated_at": "2026-04-18T10:57:25Z" + "title": "fix(channels): disambiguate status --deep tip to top-level openclaw status", + "updated_at": "2026-04-20T23:11:00Z" }, { - "additions": 329, - "author": "openperf", + "additions": 3176, + "author": "gumadeiras", "author_association": "MEMBER", - "body_excerpt": "### Summary - **Problem**: The `openclaw-weixin` sidecar invokes `cleanStaleGatewayProcessesSync()` during its init path. The Unix filter in `src/infra/restart-stale-pids.ts` excluded only `process.pid`, and the two Windows filters did the\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - Problem: read-only CLI status paths regressed after bundled plugin runtime deps moved into extensions; channel/status/doctor paths could import full plugin runtimes just to inspect Telegram, Slack, or Discord config. - Why it\u2026", + "changed_files": 85, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68517", - "created_at": "2026-04-18T10:47:27Z", - "deletions": 6, + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69479", + "created_at": "2026-04-20T22:16:29Z", + "deletions": 366, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68517/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68517", + "files_url": "https://github.com/openclaw/openclaw/pull/69479/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69479", "labels": [ + "docs", + "channel: discord", + "channel: slack", + "channel: telegram", + "cli", + "commands", + "agents", "maintainer", - "size: M" + "size: XL", + "extensions: minimax" ], "merged": true, - "number": 68517, - "review_comments_count": 2, + "number": 69479, + "review_comments_count": 25, "state": "closed", - "title": "fix(infra/restart): exclude ancestor pids from stale-gateway cleanup", - "updated_at": "2026-04-18T17:05:56Z" + "title": "fix(cli): keep channel status checks off plugin runtimes", + "updated_at": "2026-04-21T17:56:50Z" }, { - "additions": 169, - "author": "frankekn", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: `openclaw agent --deliver` drops outbound replies that contain relative `MEDIA:./out/photo.png` tokens. The raw relative path reaches the outbound media loader, which rejects it with `LocalMediaAccessError: Local medi\u2026", - "changed_files": 4, + "additions": 51, + "author": "scoootscooob", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: latest `origin/main` still defaults the bundled Moonshot provider and related selection surfaces to `kimi-k2.5`, even though Moonshot's current API docs list `kimi-k2.6` as the latest multimodal model. - Why it matter\u2026", + "changed_files": 19, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68516", - "created_at": "2026-04-18T10:39:01Z", - "deletions": 4, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69477", + "created_at": "2026-04-20T22:05:35Z", + "deletions": 39, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68516/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68516", + "files_url": "https://github.com/openclaw/openclaw/pull/69477/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69477", "labels": [ + "commands", "agents", "maintainer", - "size: S" + "size: S", + "extensions: kimi-coding", + "extensions: moonshot" ], "merged": true, - "number": 68516, - "review_comments_count": 2, + "number": 69477, + "review_comments_count": 0, "state": "closed", - "title": "fix(cli): normalize reply-media paths for agent --deliver", - "updated_at": "2026-04-18T12:09:02Z" + "title": "providers: default Moonshot to Kimi 2.6", + "updated_at": "2026-04-20T23:21:39Z" }, { - "additions": 1, - "author": "altaywtf", - "author_association": "MEMBER", - "body_excerpt": "## Summary - add the missing `## Unreleased` changelog entry for the already-merged `$schema` config fix from #47322 ## Changes - append one fix entry under `CHANGELOG.md` `## Unreleased` -> `### Fixes` ## Validation - verified `origin/mai\u2026", - "changed_files": 1, + "additions": 823, + "author": "steipete", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - land the Telegram transport lifecycle/socket cleanup from #68128, with HTTP/1-only undici dispatchers from #69243 - land the getUpdates liveness bookkeeping from #64333 so recoverable errors do not false-trigger stall restarts\u2026", + "changed_files": 18, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68515", - "created_at": "2026-04-18T10:34:21Z", - "deletions": 0, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69476", + "created_at": "2026-04-20T22:03:45Z", + "deletions": 75, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68515/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68515", + "files_url": "https://github.com/openclaw/openclaw/pull/69476/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69476", "labels": [ + "docs", + "channel: telegram", + "gateway", "maintainer", - "size: XS" + "size: L" ], "merged": true, - "number": 68515, + "number": 69476, "review_comments_count": 1, "state": "closed", - "title": "docs(changelog): add missing entry for #47322", - "updated_at": "2026-04-18T10:35:44Z" + "title": "fix(telegram): harden polling transport liveness", + "updated_at": "2026-04-20T22:12:14Z" }, { - "additions": 291, - "author": "evandance", + "additions": 48, + "author": "Jaswir", "author_association": "CONTRIBUTOR", - "body_excerpt": "Feishu's `md` tag treats `_` as an italic marker, so its autolink parser terminates at the first underscore. URLs with underscore-separated parameters lost their tail to unclickable static text. Pre-wrap bare http(s) URLs as `[url](url)` b\u2026", - "changed_files": 4, + "body_excerpt": "## Summary Fixes #69358 Fixes #69415 Fixes #69427 `get-reply-run.ts` now checks `baseBodyForPrompt.trim()` (which includes the inbound-context prefix) instead of `baseBodyFinal.trim()` for the empty-turn gate, and falls back to the plain `\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68514", - "created_at": "2026-04-18T10:34:06Z", - "deletions": 1, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68514/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68514", - "labels": [ - "channel: feishu", - "size: M" - ], - "merged": false, - "number": 68514, - "review_comments_count": 3, - "state": "open", - "title": "fix(feishu): preserve URL boundaries in post markdown messages", - "updated_at": "2026-04-18T10:47:13Z" - }, - { - "additions": 443, - "author": "jasonmakr", - "author_association": "NONE", - "body_excerpt": "## Summary Fixes #68452 When a cron-triggered isolated run's last successful tool result is the `NO_REPLY` silent sentinel, the agent correctly produces no user-visible output (the tool already handled delivery). Before this fix, `resolveI\u2026", - "changed_files": 6, - "cluster_id": "cluster-68452-3", - "cluster_ids": [ - "cluster-68452-3" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68512", - "created_at": "2026-04-18T10:33:11Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69474", + "created_at": "2026-04-20T21:43:30Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68512/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68512", + "files_url": "https://github.com/openclaw/openclaw/pull/69474/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69474", "labels": [ - "extensions: memory-core", - "agents", - "size: M" + "size: S" ], - "merged": false, - "number": 68512, - "review_comments_count": 3, - "state": "open", - "title": "fix: treat cron runs with NO_REPLY tool results as silent success", - "updated_at": "2026-04-18T10:39:36Z" + "merged": true, + "number": 69474, + "review_comments_count": 1, + "state": "closed", + "title": "fix(gateway): restore webchat pure-image turn handling (#69358)", + "updated_at": "2026-04-21T05:05:01Z" }, { - "additions": 68, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** `emitGatewayRestart()` increments `sigusr1AuthorizedCount` via `authorizeGatewaySigusr1Restart()` before emitting SIGUSR1. If the emit throws (e.g. `process.kill(pid, \"SIGUSR1\")` raises under a sandboxed runtime),\u2026", + "additions": 118, + "author": "MrMiaigi", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary This PR adds defensive validation to prevent the pricing cache corruption issue reported in #367, where costs were being reported as 100-1000x higher than expected (e.g., $3120 for 2.3M tokens on gpt-5.4-mini instead of ~$1.73).\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68511", - "created_at": "2026-04-18T10:26:11Z", - "deletions": 0, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69473", + "created_at": "2026-04-20T21:27:58Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68511/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68511", + "files_url": "https://github.com/openclaw/openclaw/pull/69473/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69473", "labels": [ + "gateway", "size: S" ], "merged": false, - "number": 68511, - "review_comments_count": 0, + "number": 69473, + "review_comments_count": 3, "state": "closed", - "title": "fix(infra): revert sigusr1 authorization when emitGatewayRestart emission throws", - "updated_at": "2026-04-18T13:02:50Z" + "title": "fix: add pricing sanity checks to prevent cost inflation (#367)", + "updated_at": "2026-04-21T10:44:09Z" }, { - "additions": 2, - "author": "hxy91819", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Move the `#67807` changelog entry from `### Changes` to `### Fixes`, since it is a bug fix - Reword the entry to use the conventional `Cron/delivery:` prefix consistent with other entries in the Fixes section", - "changed_files": 1, + "additions": 173, + "author": "pdd-cli", + "author_association": "NONE", + "body_excerpt": "## Summary - Suppress messages where the model's reply is a bare reasoning preamble (a word like `think`, `thinking`, `thought`, `reasoning`, or `analysis` on its own line) followed by the `NO_REPLY` sentinel, instead of delivering the cha\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68509", - "created_at": "2026-04-18T10:21:41Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69472", + "created_at": "2026-04-20T21:26:00Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68509/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68509", + "files_url": "https://github.com/openclaw/openclaw/pull/69472/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69472", "labels": [ - "maintainer", - "size: XS" + "size: S" ], - "merged": true, - "number": 68509, - "review_comments_count": 2, - "state": "closed", - "title": "changelog: move #67807 entry to Fixes section", - "updated_at": "2026-04-18T10:29:49Z" + "merged": false, + "number": 69472, + "review_comments_count": 1, + "state": "open", + "title": "auto-reply: suppress reasoning-prefaced silent replies", + "updated_at": "2026-04-20T21:28:33Z" }, { - "additions": 8, - "author": "grimmjoww", - "author_association": "NONE", - "body_excerpt": "See the diff", - "changed_files": 1, + "additions": 465, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary **Root Cause:** aria refs (ax1, ax2, ...) captured via `browser snapshot refs=aria` were stored with their `backendDOMNodeId` in `RoleRef.roleRefs`, but `refLocator` had no handler for the `ax\\d+` pattern \u2014 it fell through to `p\u2026", + "changed_files": 11, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68507", - "created_at": "2026-04-18T10:03:57Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69468", + "created_at": "2026-04-20T21:16:16Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68507/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68507", + "files_url": "https://github.com/openclaw/openclaw/pull/69468/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69468", "labels": [ - "size: XS" + "gateway", + "agents", + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68507, + "number": 69468, "review_comments_count": 2, "state": "closed", - "title": "fix(gateway): try SIGUSR1 restart before spawning external processes", - "updated_at": "2026-04-19T06:40:33Z" + "title": "fix: make aria ax refs persistent across browser multi-step actions", + "updated_at": "2026-04-20T21:22:23Z" }, { - "additions": 206, - "author": "likewen-tech", + "additions": 481, + "author": "taitruong", "author_association": "NONE", - "body_excerpt": "$## Summary\\n- add clearer cause and next-step guidance for degraded `status --all` diagnosis states\\n- classify gateway log and health failures into actionable recovery hints instead of raw errors alone\\n- cover invalid config, unreachabl\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - `ModelDefinitionSchema` now accepts an optional `params: Record` field (previously rejected as unknown key under `.strict()`). - Added `params` to `ProviderRuntimeModel` type. - New `mergeConfiguredModelParams\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68506", - "created_at": "2026-04-18T10:01:54Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69464", + "created_at": "2026-04-20T21:07:06Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68506/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68506", + "files_url": "https://github.com/openclaw/openclaw/pull/69464/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69464", "labels": [ - "commands", + "docs", + "agents", "size: M" ], "merged": false, - "number": 68506, - "review_comments_count": 3, + "number": 69464, + "review_comments_count": 8, "state": "open", - "title": "status: improve degraded-state recovery guidance", - "updated_at": "2026-04-18T10:04:30Z" + "title": "fix(ollama): honor params.num_ctx on configured models (#44550)", + "updated_at": "2026-04-20T22:09:56Z" }, { - "additions": 69, - "author": "anyech", + "additions": 322, + "author": "hgezim", "author_association": "NONE", - "body_excerpt": "# fix(memory-core): preserve inline REM nesting while normalizing separate-report heading levels ## Summary This fixes a real generated-markdown regression in memory-core REM previews without breaking the inline daily-note path. The origin\u2026", - "changed_files": 4, + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: Users need to correlate individual runs and group related requests/subagents in external dashboards (e.g., Helicone.ai, DodoRouter.com). - Why it matters: Easier tracing on\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68505", - "created_at": "2026-04-18T10:00:37Z", - "deletions": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69463", + "created_at": "2026-04-20T21:05:45Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68505/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68505", + "files_url": "https://github.com/openclaw/openclaw/pull/69463/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69463", "labels": [ - "extensions: memory-core", - "size: S" + "agents", + "size: M" ], "merged": false, - "number": 68505, + "number": 69463, "review_comments_count": 2, "state": "open", - "title": "fix(memory-core): normalize REM preview heading levels", - "updated_at": "2026-04-18T10:15:49Z" + "title": "feat(observability): add configurable session tracing headers for LLM requests", + "updated_at": "2026-04-20T22:08:22Z" }, { - "additions": 271, - "author": "likewen-tech", - "author_association": "NONE", - "body_excerpt": "$## Summary\\n- filter routine gateway tail noise and wrapper residue from `status --all` diagnosis output\\n- group repeated lane-wait, subagent-end, detached-flow, and context-overflow diagnostics into concise summaries\\n- stop surfacing u\u2026", + "additions": 142, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Fix #69289: Browser aria refs fail in multi-step actions", "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68503", - "created_at": "2026-04-18T09:49:29Z", - "deletions": 22, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69461", + "created_at": "2026-04-20T20:59:59Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68503/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68503", + "files_url": "https://github.com/openclaw/openclaw/pull/69461/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69461", "labels": [ "gateway", - "commands", - "size: M" + "agents", + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68503, - "review_comments_count": 2, - "state": "open", - "title": "status: reduce diagnosis noise in status --all", - "updated_at": "2026-04-18T09:54:48Z" + "number": 69461, + "review_comments_count": 1, + "state": "closed", + "title": "fix #69289: Browser aria refs fail in multi-step actions", + "updated_at": "2026-04-20T21:06:25Z" }, { - "additions": 271, - "author": "monasprox", - "author_association": "NONE", - "body_excerpt": "## Summary Adds documentation for using **Azure AI Foundry** models with OpenClaw, covering both Anthropic (Claude) and OpenAI (GPT) model families. ## What's included - `docs/providers/azure-ai-foundry.md` \u2014 full provider guide following\u2026", - "changed_files": 2, + "additions": 104, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Fix #69294: ACP plugin probe fails on Windows 11 causing gateway crash", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68502", - "created_at": "2026-04-18T09:49:19Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69459", + "created_at": "2026-04-20T20:56:55Z", + "deletions": 20, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68502/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68502", + "files_url": "https://github.com/openclaw/openclaw/pull/69459/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69459", "labels": [ - "docs", - "size: XS" + "extensions: memory-core", + "agents", + "size: S", + "extensions: acpx", + "r: too-many-prs", + "extensions: lmstudio" ], "merged": false, - "number": 68502, - "review_comments_count": 2, - "state": "open", - "title": "docs: add Azure AI Foundry provider guide", - "updated_at": "2026-04-18T10:03:16Z" + "number": 69459, + "review_comments_count": 1, + "state": "closed", + "title": "fix #69294: ACP plugin probe fails on Windows 11 causing gateway crash", + "updated_at": "2026-04-20T21:06:26Z" }, { - "additions": 229, - "author": "likewen-tech", + "additions": 581, + "author": "rzyns", "author_association": "NONE", - "body_excerpt": "$## Summary - separate recent failures from historical residue in founder-visible task summaries - update `tasks`, `status`, and `flows` to use the split instead of one generic failure bucket - add targeted coverage for recent-vs-historica\u2026", - "changed_files": 11, + "body_excerpt": "## Summary - Hoist `activeMemoryCapability` out of the scope-swapped `memoryPluginState` so a plugin scope that does not include the memory plugin no longer wipes the capability globally \u2014 fixes the memory-wiki bridge seeing `capabilityPlu\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68499", - "created_at": "2026-04-18T09:34:48Z", - "deletions": 25, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69458", + "created_at": "2026-04-20T20:56:51Z", + "deletions": 47, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68499/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68499", + "files_url": "https://github.com/openclaw/openclaw/pull/69458/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69458", "labels": [ - "commands", - "size: M" + "gateway", + "agents", + "size: L", + "extensions: memory-wiki" ], "merged": false, - "number": 68499, - "review_comments_count": 4, + "number": 69458, + "review_comments_count": 5, "state": "open", - "title": "tasks: separate recent and historical failures in founder-visible summaries", - "updated_at": "2026-04-18T12:34:15Z" + "title": "fix(memory): keep active memory capability visible across plugin scopes", + "updated_at": "2026-04-21T13:57:12Z" }, { - "additions": 3, - "author": "masatohoshino", + "additions": 104, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `event-helpers.ts` imports the `MatrixEvent` type from the bare `matrix-js-sdk` package root, while sibling files in the same extension reach the SDK via a deeper subpath. - Why it matters: Mixed import paths to the s\u2026", - "changed_files": 3, + "body_excerpt": "## Summary When the ACP plugin probe runs on Windows 11, the embedded ACP agent subprocess can crash (e.g. exit=3221225783 = STATUS_ACCESS_VIOLATION). This propagates as an unhandled promise rejection. Since calls on unhandled rejections,\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68498", - "created_at": "2026-04-18T09:33:53Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69457", + "created_at": "2026-04-20T20:56:40Z", + "deletions": 20, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68498/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68498", + "files_url": "https://github.com/openclaw/openclaw/pull/69457/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69457", "labels": [ - "channel: matrix", - "size: XS" + "extensions: memory-core", + "agents", + "size: S", + "extensions: acpx", + "r: too-many-prs", + "extensions: lmstudio" ], "merged": false, - "number": 68498, - "review_comments_count": 0, - "state": "open", - "title": "fix(matrix): pin event-helpers import to canonical matrix-js-sdk subpath (refs #50477)", - "updated_at": "2026-04-18T10:24:27Z" + "number": 69457, + "review_comments_count": 1, + "state": "closed", + "title": "fix #69294: ACP plugin probe fails on Windows 11 causing gateway crash", + "updated_at": "2026-04-20T21:03:55Z" }, { - "additions": 127, - "author": "infocentr", + "additions": 316, + "author": "samgibson-bot", "author_association": "NONE", - "body_excerpt": "## Summary - Add `command-dispatch: exec` (with `command-exec: `) to workspace skill frontmatter. - When a slash command bound to such a skill is invoked, OpenClaw runs the script in the skill's `baseDir` and delivers stdout\u2026", + "body_excerpt": "feat(cron): add bash-kind payload for zero-LLM cron execution Introduce a third CronPayload variant `{ kind: \"bash\", command, ... }` that runs the configured shell command directly via /bin/bash -c, captures stdout, and routes it through t\u2026", "changed_files": 7, - "cluster_id": "cluster-37377-2", - "cluster_ids": [ - "cluster-37377-2" - ], - "cluster_role": "member", + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68495", - "created_at": "2026-04-18T09:28:18Z", - "deletions": 14, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69455", + "created_at": "2026-04-20T20:41:53Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68495/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68495", + "files_url": "https://github.com/openclaw/openclaw/pull/69455/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69455", "labels": [ - "agents", - "size: S" + "app: web-ui", + "gateway", + "size: M" ], "merged": false, - "number": 68495, - "review_comments_count": 1, - "state": "open", - "title": "Skills: add exec dispatch for slash commands", - "updated_at": "2026-04-18T09:31:18Z" + "number": 69455, + "review_comments_count": 6, + "state": "closed", + "title": "feat(cron): add bash-kind payload for zero-LLM cron execution", + "updated_at": "2026-04-20T21:30:15Z" }, { - "additions": 214, - "author": "hclsys", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68486 \u2014 the macOS restart helper that \\`openclaw update\\` emits (darwin branch of \\`prepareRestartScript\\`) was writing every \\`launchctl\\` stderr to \\`/dev/null\\` and chaining the final fallback \\`kickstart\\` with \\`|| t\u2026", - "changed_files": 4, + "additions": 198, + "author": "cmaldonado80", + "author_association": "NONE", + "body_excerpt": "## Summary This PR packages the local Control UI slowness fixes that materially reduced gateway churn during investigation, plus one small server-side hardening for stale bundle rollouts. ### Included fixes - bound chat/session refresh to\u2026", + "changed_files": 15, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68492", - "created_at": "2026-04-18T09:20:47Z", - "deletions": 10, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69454", + "created_at": "2026-04-20T20:41:32Z", + "deletions": 23, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68492/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68492", + "files_url": "https://github.com/openclaw/openclaw/pull/69454/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69454", "labels": [ - "cli", - "size: M", - "extensions: qa-lab" + "app: web-ui", + "gateway", + "size: M" ], - "merged": true, - "number": 68492, - "review_comments_count": 6, - "state": "closed", - "title": "fix(update-cli): capture macOS launchctl stderr to a log file instead of /dev/null", - "updated_at": "2026-04-18T17:42:52Z" + "merged": false, + "number": 69454, + "review_comments_count": 1, + "state": "open", + "title": "Control UI: reduce unnecessary gateway churn and prevent stale index caching", + "updated_at": "2026-04-20T20:46:23Z" }, { - "additions": 6, - "author": "MoerAI", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Feishu sends a duplicate text/card message after streaming completes because the `onIdle`-triggered `closeStreaming()` does not record the streamed content in `deliveredFinalTexts`. The subsequent `final` delivery bypasses the i\u2026", + "additions": 43, + "author": "patl4588", + "author_association": "NONE", + "body_excerpt": "\u2026example) OpenClaw's provider system already supports custom baseUrl overrides for any provider, but it isn't documented for the anthropic provider specifically. This PR adds a small recipe to docs/concepts/model-providers.md showing how t\u2026", "changed_files": 1, - "cluster_id": "cluster-33883-5", - "cluster_ids": [ - "cluster-33883-5" - ], - "cluster_role": "member", + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68491", - "created_at": "2026-04-18T09:17:51Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69452", + "created_at": "2026-04-20T20:25:29Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68491/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68491", + "files_url": "https://github.com/openclaw/openclaw/pull/69452/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69452", "labels": [ - "channel: feishu", + "docs", "size: XS" ], "merged": false, - "number": 68491, - "review_comments_count": 1, + "number": 69452, + "review_comments_count": 3, "state": "open", - "title": "fix(feishu): prevent duplicate message after streaming card close (#67791)", - "updated_at": "2026-04-18T09:21:07Z" + "title": "docs(providers): document Anthropic-compatible proxy config (aiusage example)", + "updated_at": "2026-04-20T20:28:51Z" }, { - "additions": 69, - "author": "kagura-agent", + "additions": 1111, + "author": "100yenadmin", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68471 \u2014 Heartbeat triggers unnecessary `cli session reset: reason=system-prompt` every 30 minutes. ## Problem The built-in heartbeat mechanism causes a full CLI session reset each time it fires because the `extraSystemPro\u2026", - "changed_files": 7, + "body_excerpt": "## Summary This PR carves the GPT-5 and prompt-layer foundation out of the original plan-mode umbrella PR. It exists to land the model-facing groundwork first: prompt overlay behavior, agent scope, context-file injection scanning, and syst\u2026", + "changed_files": 11, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68490", - "created_at": "2026-04-18T09:17:30Z", - "deletions": 7, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68490/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68490", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69449", + "created_at": "2026-04-20T20:03:33Z", + "deletions": 15, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69449/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69449", "labels": [ "agents", - "size: S" + "size: XL", + "extensions: openai" ], "merged": false, - "number": 68490, - "review_comments_count": 2, - "state": "closed", - "title": "fix: exclude volatile inbound metadata from extraSystemPromptHash", - "updated_at": "2026-04-18T12:49:26Z" + "number": 69449, + "review_comments_count": 0, + "state": "open", + "title": "[Plan Mode 1/9] GPT-5 prompt foundation", + "updated_at": "2026-04-20T20:05:30Z" }, { - "additions": 76, - "author": "Feelw00", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** The subagent sweeper self-stops the moment `subagentRuns` becomes empty, without checking `pendingLifecycleErrorByRunId`. That same sweeper cycle is the only thing that expires pending-error entries via `PENDING_E\u2026", - "changed_files": 2, + "additions": 612, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - fix Discord reply-stage `requireMention` resolution for guild/channel overrides when the channel plugin runtime is unavailable - preserve `channels.discord.guilds..channels..requireMention: false` instead of fa\u2026", + "changed_files": 14, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68489", - "created_at": "2026-04-18T09:15:55Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69446", + "created_at": "2026-04-20T19:54:38Z", + "deletions": 35, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68489/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68489", + "files_url": "https://github.com/openclaw/openclaw/pull/69446/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69446", "labels": [ + "app: web-ui", + "gateway", "agents", - "size: S" + "size: L", + "r: too-many-prs" ], "merged": false, - "number": 68489, - "review_comments_count": 0, + "number": 69446, + "review_comments_count": 3, "state": "closed", - "title": "fix(agents): keep subagent sweeper alive while pendingLifecycleErrorByRunId has entries", - "updated_at": "2026-04-18T10:06:55Z" + "title": "fix: honor requireMention false in Discord guild channels", + "updated_at": "2026-04-20T20:00:03Z" }, { - "additions": 5, - "author": "MoerAI", + "additions": 393, + "author": "sallyom", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary MiniMax-M2.7 and M2.7-highspeed image attachments were silently dropped because `buildMinimaxCatalog()` hardcoded `input: [\"text\"]` via `buildMinimaxTextModel()`, bypassing the correct image-detection logic already present in `b\u2026", - "changed_files": 1, - "cluster_id": "cluster-65165-6", - "cluster_ids": [ - "cluster-65165-6" + "body_excerpt": "## Summary Reasoning-capable image models can return only signed reasoning blocks and no final text, causing the image tool to fail instead of retrying for a user-visible text description. This PR adds: - retry once with reasoning disabled\u2026", + "changed_files": 5, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69444", + "created_at": "2026-04-20T19:48:57Z", + "deletions": 14, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69444/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69444", + "labels": [ + "agents", + "maintainer", + "size: M" ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68485", - "created_at": "2026-04-18T09:03:47Z", - "deletions": 45, + "merged": true, + "number": 69444, + "review_comments_count": 14, + "state": "closed", + "title": "fix: handle reasoning-only image responses", + "updated_at": "2026-04-21T04:20:23Z" + }, + { + "additions": 58, + "author": "sk7n4k3d", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Partial fix for #69396. The config writer does an atomic temp-file + `rename` into `configPath`, which **replaces the symlink with a regular file** on every config touch \u2014 `openclaw update`, `meta.lastTouchedAt` bump on restart,\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69438", + "created_at": "2026-04-20T19:00:41Z", + "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68485/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68485", + "files_url": "https://github.com/openclaw/openclaw/pull/69438/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69438", "labels": [ "size: S", - "extensions: minimax" + "r: too-many-prs" ], "merged": false, - "number": 68485, - "review_comments_count": 0, - "state": "open", - "title": "fix(minimax): enable image input for M2.7 models in provider catalog (#65424)", - "updated_at": "2026-04-18T09:05:06Z" + "number": 69438, + "review_comments_count": 1, + "state": "closed", + "title": "fix(config/io): preserve symlinked config by writing through realpath", + "updated_at": "2026-04-21T10:17:16Z" }, { - "additions": 199, - "author": "lyfuci", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: OpenClaw redacts secret-looking values (\\`apiKey\\`, \\`token\\`, \\`secret\\`, bearer, etc.) in agent-visible tool output but the redaction is transparent at the text layer \u2014 the placeholder \\`\"***\"\\` / \\`\"\u2026` instead of updating the canonical `openai-\u2026", + "changed_files": 15, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69430", + "created_at": "2026-04-20T18:37:54Z", + "deletions": 51, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69430/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69430", + "labels": [ + "app: web-ui", + "gateway", + "commands", + "agents", + "size: L", + "r: too-many-prs", + "extensions: openai" + ], + "merged": false, + "number": 69430, + "review_comments_count": 0, + "state": "closed", + "title": "fix: preserve Codex default auth profile on OAuth login", + "updated_at": "2026-04-21T09:30:22Z" + }, + { + "additions": 174, + "author": "MonkeyLeeT", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - validate Slack `replyToId` values before treating them as `thread_ts` - fall back to the known `threadId` anchor when `replyToId` is an internal OpenClaw message id - add regression coverage for the send path plus Slack thread\u2026", + "changed_files": 5, + "cluster_id": "cluster-69429-2", + "cluster_ids": [ + "cluster-69429-2" + ], + "cluster_role": "canonical", + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69429", + "created_at": "2026-04-20T18:35:53Z", + "deletions": 7, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69429/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69429", + "labels": [ + "channel: slack", + "size: S" + ], + "merged": false, + "number": 69429, + "review_comments_count": 0, + "state": "open", + "title": "fix(slack): preserve thread anchors over internal reply ids", + "updated_at": "2026-04-21T16:25:03Z" + }, + { + "additions": 90, + "author": "hkalkoti1", "author_association": "NONE", - "body_excerpt": "## Summary After an in-place npm upgrade, the running process may reference a hashed `link-understanding` chunk that no longer exists on disk (`ERR_MODULE_NOT_FOUND`). Previously this **silently killed message dispatch** for any URL-contai\u2026", - "changed_files": 1, + "body_excerpt": "Title: fix(msteams): paginate thread replies and keep recent context ## Summary - Problem: Teams thread context enrichment only used the first Graph replies page, so long threads could skew toward the oldest replies. - Why it matters: the\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68481", - "created_at": "2026-04-18T08:48:21Z", - "deletions": 4, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69428", + "created_at": "2026-04-20T18:35:24Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68481/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68481", + "files_url": "https://github.com/openclaw/openclaw/pull/69428/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69428", "labels": [ - "size: XS" + "channel: msteams", + "size: S" ], "merged": false, - "number": 68481, - "review_comments_count": 2, + "number": 69428, + "review_comments_count": 4, "state": "open", - "title": "fix(auto-reply): don't drop URL messages when link-understanding import fails", - "updated_at": "2026-04-18T12:35:36Z" + "title": "fix(msteams): paginate thread replies and keep recent context", + "updated_at": "2026-04-20T20:11:24Z" }, { - "additions": 76, - "author": "Bartok9", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary The `normalizePluginConfig` clamp hard-coded a `60_000` ms ceiling for `config.timeoutMs`, silently reducing any configured value above 60 seconds down to `60_000` ms at runtime. This made it impossible for operators to set long\u2026", - "changed_files": 6, + "additions": 63, + "author": "sk7n4k3d", + "author_association": "NONE", + "body_excerpt": "Fixes #69353. ### Summary `isAnthropic1MModel` in `src/agents/context.ts` gates the 1M context window on `provider === \"anthropic\"`, so `context1m: true` was a silent no-op for any provider proxying Claude Opus 4 / Sonnet 4 \u2014 notably the b\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68480", - "created_at": "2026-04-18T08:43:20Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69426", + "created_at": "2026-04-20T18:28:06Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68480/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68480", + "files_url": "https://github.com/openclaw/openclaw/pull/69426/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69426", "labels": [ - "docs", + "agents", "size: S" ], - "merged": true, - "number": 68480, + "merged": false, + "number": 69426, "review_comments_count": 0, - "state": "closed", - "title": "fix(active-memory): raise timeoutMs ceiling from 60s to 120s", - "updated_at": "2026-04-18T19:32:16Z" + "state": "open", + "title": "agents/context: unlock context1m on proxied Anthropic 1M-capable models (#69353)", + "updated_at": "2026-04-20T19:21:10Z" }, { - "additions": 95, - "author": "scaraude", + "additions": 109, + "author": "sk7n4k3d", "author_association": "NONE", - "body_excerpt": "## Summary - add `--profile ` to `openclaw models auth login` - pass the requested profile through the login command into provider auth context - let the OpenAI Codex OAuth provider honor that explicit target profile name ## Why Toda\u2026", - "changed_files": 6, + "body_excerpt": "Fixes #69400. ### Summary Teach `resolveCliProgramArguments` (the helper that builds macOS LaunchAgent / systemd `ProgramArguments` for `openclaw gateway` and `openclaw node run` services) to honor an `OPENCLAW_WRAPPER` environment variabl\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68477", - "created_at": "2026-04-18T08:34:12Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69425", + "created_at": "2026-04-20T18:22:32Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68477/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68477", + "files_url": "https://github.com/openclaw/openclaw/pull/69425/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69425", + "labels": [ + "gateway", + "size: S" + ], + "merged": false, + "number": 69425, + "review_comments_count": 2, + "state": "open", + "title": "daemon: honor OPENCLAW_WRAPPER in LaunchAgent ProgramArguments (#69400)", + "updated_at": "2026-04-20T19:21:24Z" + }, + { + "additions": 118, + "author": "sk7n4k3d", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #69412. When `openclaw update` runs on a package install and the running version already matches the resolved channel target, the command short-circuits before invoking the global package manager. Without this guard, `npm\u2026", + "changed_files": 3, + "cluster_id": "cluster-69412-3", + "cluster_ids": [ + "cluster-69412-3" + ], + "cluster_role": "member", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69421", + "created_at": "2026-04-20T18:12:44Z", + "deletions": 0, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69421/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69421", "labels": [ "cli", - "commands", - "size: S", - "extensions: openai" + "size: S" ], "merged": false, - "number": 68477, - "review_comments_count": 1, + "number": 69421, + "review_comments_count": 2, "state": "open", - "title": "feat(auth): add --profile to models auth login", - "updated_at": "2026-04-18T08:37:27Z" + "title": "update: skip package install when already on target version (#69412)", + "updated_at": "2026-04-20T19:21:39Z" }, { - "additions": 230, - "author": "jetd1", + "additions": 409, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - When a provider returns 429 with a long `retry-after` (e.g. Anthropic's 239s for quota exhaustion), Stainless-based SDKs sleep for the full duration before retrying. The run blocks and the error never surfaces to OpenClaw's mo\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - treat localhost shared-auth CLI-mode clients as `cli_container_local` even when their client id is not the public `cli` id - preserve the existing loopback/private-host/proxy/origin/shared-auth gates so only local internal too\u2026", + "changed_files": 10, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68474", - "created_at": "2026-04-18T08:29:21Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69420", + "created_at": "2026-04-20T18:02:53Z", + "deletions": 30, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68474/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68474", + "files_url": "https://github.com/openclaw/openclaw/pull/69420/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69420", "labels": [ + "app: web-ui", + "gateway", "agents", - "size: M" + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68474, + "number": 69420, "review_comments_count": 3, - "state": "open", - "title": "fix: skip SDK retry on 429 with long retry-after across providers", - "updated_at": "2026-04-18T09:14:49Z" + "state": "closed", + "title": "fix: treat localhost internal CLI-mode tools as local", + "updated_at": "2026-04-20T18:08:46Z" }, { - "additions": 110, - "author": "jasonmakr", - "author_association": "NONE", - "body_excerpt": "## Summary The `LANGUAGE_STOP_WORDS.english` array contained only 8 entries (`and`, `are`, `for`, `into`, `its`, `our`, `then`, `were`), allowing common English stopwords and LLM transcript role markers to surface as top concept themes in\u2026", - "changed_files": 2, + "additions": 130, + "author": "sk7n4k3d", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Fixes #69301. ## Summary `/new` and `/reset` in channel-bound auto-reply sessions (Telegram DM, group chats, etc.) currently carry over **every** persisted override \u2014 including auto-created ones from runtime fallbacks (rate-limit auth rota\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68473", - "created_at": "2026-04-18T08:28:22Z", - "deletions": 1, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69419", + "created_at": "2026-04-20T17:59:39Z", + "deletions": 47, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68473/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68473", + "files_url": "https://github.com/openclaw/openclaw/pull/69419/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69419", "labels": [ - "extensions: memory-core", + "gateway", "size: S" ], - "merged": false, - "number": 68473, + "merged": true, + "number": 69419, "review_comments_count": 0, - "state": "open", - "title": "fix(memory-core): expand concept stopword list to filter transcript noise", - "updated_at": "2026-04-18T08:31:27Z" + "state": "closed", + "title": "session: clear auto-sourced model/auth overrides on /new and /reset", + "updated_at": "2026-04-21T02:36:34Z" }, { - "additions": 6, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes openclaw#68027 - Browser attachOnly mode fails with \"profile openclaw is not running\" despite healthy CDP endpoint. ## Root Cause When `attachOnly` is enabled and `profileState.running` is false (which is expected since Op\u2026", - "changed_files": 1, + "additions": 1597, + "author": "fgabelmannjr", + "author_association": "NONE", + "body_excerpt": "## Summary This PR adds SecretRef support to core MCP server configuration so `mcp.servers.*.env.*` and `mcp.servers.*.headers.*` can use SecretInput values in addition to plaintext literals. Before this change, core `mcp.servers` only acc\u2026", + "changed_files": 26, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68469", - "created_at": "2026-04-18T08:20:34Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69417", + "created_at": "2026-04-20T17:56:11Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68469/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68469", + "files_url": "https://github.com/openclaw/openclaw/pull/69417/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69417", "labels": [ - "size: XS" + "docs", + "cli", + "commands", + "agents", + "size: XL" ], "merged": false, - "number": 68469, - "review_comments_count": 0, + "number": 69417, + "review_comments_count": 10, "state": "open", - "title": "fix(browser): allow attachOnly profiles retry window for CDP connection", - "updated_at": "2026-04-18T08:24:17Z" + "title": "fix(mcp): allow SecretRef values in mcp.servers env and headers [AI-assisted]", + "updated_at": "2026-04-20T19:14:19Z" }, { - "additions": 351, - "author": "yfge", + "additions": 386, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - add `channels.whatsapp.silentErrorReplies` to the WhatsApp config schema/types and UI hints - suppress gateway-synthesized WhatsApp error payloads when that flag is enabled, matching Telegram behavior - add targeted inbound-di\u2026", - "changed_files": 15, + "body_excerpt": "## Summary Fixes #69396. `config.write` had two related problems around config persistence: 1. atomic temp-write + rename targeted the symlink path itself, so writing `~/.openclaw/openclaw.json` replaced a user-managed symlink with a regul\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68465", - "created_at": "2026-04-18T08:01:21Z", - "deletions": 13, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69416", + "created_at": "2026-04-20T17:53:41Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68465/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68465", + "files_url": "https://github.com/openclaw/openclaw/pull/69416/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69416", "labels": [ - "channel: whatsapp-web", + "app: web-ui", "agents", - "size: M" + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68465, - "review_comments_count": 1, - "state": "open", - "title": "fix(whatsapp): support silentErrorReplies parity", - "updated_at": "2026-04-18T08:17:37Z" + "number": 69416, + "review_comments_count": 3, + "state": "closed", + "title": "fix: preserve symlinked config writes", + "updated_at": "2026-04-20T18:00:11Z" }, { - "additions": 720, - "author": "nnlevy", + "additions": 204, + "author": "danicuki", "author_association": "NONE", - "body_excerpt": "## Summary - persist a per-run delivery claim and user-safe delivery payload for subagent completions - route active-parent completion announces queue-first with fail-closed semantics instead of direct-first fallback behavior - harden iMes\u2026", - "changed_files": 14, + "body_excerpt": "## Summary - **Problem:** Signal renders native @mentions as `@` or `@` after hydrating `\\uFFFC` placeholders, but the mention-gating regex patterns are derived from the agent's display name (e.g. `\\b@?caio\\b`). These never ma\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68464", - "created_at": "2026-04-18T08:00:14Z", - "deletions": 91, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69413", + "created_at": "2026-04-20T17:42:06Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68464/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68464", + "files_url": "https://github.com/openclaw/openclaw/pull/69413/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69413", "labels": [ - "channel: imessage", - "agents", - "size: L" + "channel: signal", + "size: M" ], "merged": false, - "number": 68464, - "review_comments_count": 6, + "number": 69413, + "review_comments_count": 2, "state": "open", - "title": "Harden subagent completion delivery", - "updated_at": "2026-04-18T08:23:53Z" + "title": "signal: detect bot mentions from native envelope metadata", + "updated_at": "2026-04-20T20:49:32Z" }, { - "additions": 61, - "author": "BruceMacD", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `openclaw onboard` in Ollama cloud-only mode populated the provider's model list from a hardcoded, stale array (`kimi-k2.5:cloud`, `minimax-m2.7:cloud`, `glm-5.1:cloud`). The local-only and cloud+local modes already d\u2026", + "additions": 116, + "author": "sk7n4k3d", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #69272. `buildOpenAICompletionsParams` never emitted `prompt_cache_key` on the Completions path, so operators running OpenAI-compatible proxies (vLLM, SGLang, Chutes, etc.) could not opt into stable prompt caching per sess\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68463", - "created_at": "2026-04-18T07:59:12Z", - "deletions": 5, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69411", + "created_at": "2026-04-20T17:30:26Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68463/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68463", + "files_url": "https://github.com/openclaw/openclaw/pull/69411/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69411", "labels": [ - "maintainer", + "agents", "size: S" ], "merged": false, - "number": 68463, + "number": 69411, "review_comments_count": 0, "state": "open", - "title": "onboard (ollama): populate cloud-only model list from ollama.com/api/tags", - "updated_at": "2026-04-18T09:43:44Z" + "title": "agents: forward prompt_cache_key on openai-completions when compat.supportsPromptCacheKey is set", + "updated_at": "2026-04-20T17:32:57Z" }, { - "additions": 218, - "author": "smartchainark", + "additions": 161, + "author": "bobrenze-bot", "author_association": "NONE", - "body_excerpt": "## Summary Closes #68423. `maybeRecoverSuspiciousConfigRead` would silently restore from `~/.openclaw/openclaw.json.bak` whenever the live config looked clobbered (update-channel-only root). It did not verify the backup itself was clean. I\u2026", - "changed_files": 4, + "body_excerpt": "## Summary - **Problem:** `DEFAULT_SESSION_MAINTENANCE_MODE` was `\"warn\"`, so the built-in entry cap (500) and age prune (30 days) were silently skipped on every default install. Sessions accumulated without bound \u2014 production instances re\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68462", - "created_at": "2026-04-18T07:55:39Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69404", + "created_at": "2026-04-20T17:22:44Z", + "deletions": 58, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68462/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68462", + "files_url": "https://github.com/openclaw/openclaw/pull/69404/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69404", "labels": [ + "gateway", + "commands", "size: M" ], - "merged": false, - "number": 68462, - "review_comments_count": 5, - "state": "open", - "title": "fix(config): refuse to restore from a polluted backup containing redacted secrets (#68423)", - "updated_at": "2026-04-18T08:19:52Z" + "merged": true, + "number": 69404, + "review_comments_count": 1, + "state": "closed", + "title": "fix(sessions): enforce maintenance by default and prune on load to prevent gateway OOM", + "updated_at": "2026-04-21T03:06:08Z" }, { - "additions": 470, - "author": "JuniperSling", + "additions": 189, + "author": "MrMiaigi", + "author_association": "CONTRIBUTOR", + "body_excerpt": "The bug: three persist sites accumulated cost instead of snapshotting it like tokens. This caused cost to be inflated 1x-72x on multi-persist sessions because the same cumulative usage was added repeatedly. Root cause: persistSessionUsageU\u2026", + "changed_files": 6, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69403", + "created_at": "2026-04-20T17:22:25Z", + "deletions": 33, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69403/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69403", + "labels": [ + "agents", + "size: M" + ], + "merged": true, + "number": 69403, + "review_comments_count": 1, + "state": "closed", + "title": "fix(cost): snapshot estimatedCostUsd instead of accumulating (#69347)", + "updated_at": "2026-04-21T02:44:38Z" + }, + { + "additions": 7, + "author": "Tsenghan", "author_association": "NONE", - "body_excerpt": "# feat(tencent): add bundled Tencent Cloud provider plugin (TokenHub + Token Plan) ## Summary - **Problem:** OpenClaw has no first-class support for Tencent Cloud HY3 models. Users on Tencent Cloud have to hand-roll OpenAI-compatible provi\u2026", - "changed_files": 13, + "body_excerpt": "## Problem In the webchat Control UI, locally generated images (e.g. from the image generation tool) fail to display with the error **\"Attachment unavailable\"**, even though the files exist in allowed directories. ## Root Cause The gateway\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68460", - "created_at": "2026-04-18T07:51:44Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69402", + "created_at": "2026-04-20T17:15:31Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68460/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68460", + "files_url": "https://github.com/openclaw/openclaw/pull/69402/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69402", "labels": [ - "docs", - "size: M" + "app: web-ui", + "size: XS" ], "merged": false, - "number": 68460, - "review_comments_count": 6, + "number": 69402, + "review_comments_count": 1, "state": "open", - "title": "feat(tencent): add bundled Tencent Cloud provider plugin (Tokenhub + Token Plan)", - "updated_at": "2026-04-18T15:10:43Z" + "title": "fix: sync auth token to state after gateway hello for media preview URLs", + "updated_at": "2026-04-20T17:20:20Z" }, { - "additions": 513548, - "author": "juliopx", + "additions": 207, + "author": "PrinceOfEgypt", "author_association": "NONE", - "body_excerpt": "## Summary - **`/loop` mode**: nuevo modo de operaci\u00f3n aut\u00f3noma continua para el agente - **AgentMode refactor**: renombrado `IntensiveMode` \u2192 `AgentMode` e `intensive` \u2192 `hyperfocus` en toda la base de c\u00f3digo - **Steer mid-turn**: inyecci\u2026", - "changed_files": 5591, + "body_excerpt": "Fixes #67197 ## Summary AI-assisted PR. This adds an opt-in config to surface the existing one-line model fallback notices even when verbose mode is off. New config: - `agents.defaults.notifyOnModelFallback: true` When enabled, the first a\u2026", + "changed_files": 9, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68459", - "created_at": "2026-04-18T07:45:52Z", - "deletions": 163961, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69399", + "created_at": "2026-04-20T16:57:53Z", + "deletions": 49, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68459/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68459", + "files_url": "https://github.com/openclaw/openclaw/pull/69399/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69399", "labels": [ "docs", - "channel: bluebubbles", - "channel: discord", - "channel: googlechat", - "channel: imessage", - "channel: line", - "channel: matrix", - "channel: mattermost", - "channel: msteams", - "channel: nextcloud-talk", - "channel: nostr", - "channel: signal", - "channel: slack", - "channel: telegram", - "channel: tlon", - "channel: voice-call", - "channel: whatsapp-web", - "channel: zalo", - "channel: zalouser", - "app: android", - "app: ios", - "app: macos", - "gateway", - "extensions: copilot-proxy", - "extensions: diagnostics-otel", - "extensions: llm-task", - "extensions: lobster", - "extensions: memory-core", - "extensions: memory-lancedb", - "extensions: open-prose", - "scripts", - "docker", - "agents", - "channel: feishu", - "channel: twitch", - "extensions: device-pair", - "extensions: minimax-portal-auth", - "extensions: phone-control", - "extensions: talk-voice", - "channel: irc", - "size: XL", - "extensions: acpx" + "size: M" ], "merged": false, - "number": 68459, + "number": 69399, "review_comments_count": 0, - "state": "closed", - "title": "feat: loop mode, hyperfocus refactor, steer mid-turn, llama.cpp thinking", - "updated_at": "2026-04-18T07:48:04Z" + "state": "open", + "title": "feat: add opt-in fallback notices outside verbose mode", + "updated_at": "2026-04-20T17:18:12Z" }, { - "additions": 29, - "author": "masatohoshino", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: `matrix-js-sdk` triggers `INEFFECTIVE_DYNAMIC_IMPORT` esbuild warnings and a \"multiple entrypoints\" runtime error because the package is reachable through both static and dynamic import paths. - Why it matters: Bundli\u2026", - "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68458", - "created_at": "2026-04-18T07:44:59Z", - "deletions": 1, + "additions": 909, + "author": "janetnoodle", + "author_association": "NONE", + "body_excerpt": "Fixes #65964 ## What changed - save generated TTS audio under managed OpenClaw media instead of ephemeral `/tmp/openclaw/...` paths - thread `mediaUrl` through TTS results so reply/delivery paths use the managed artifact location - add reg\u2026", + "changed_files": 15, + "cluster_id": "cluster-63896-7", + "cluster_ids": [ + "cluster-63896-7" + ], + "cluster_role": "canonical", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69395", + "created_at": "2026-04-20T16:28:25Z", + "deletions": 23, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68458/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68458", + "files_url": "https://github.com/openclaw/openclaw/pull/69395/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69395", "labels": [ - "channel: matrix", - "size: XS" + "gateway", + "agents", + "size: L" ], "merged": false, - "number": 68458, - "review_comments_count": 2, - "state": "closed", - "title": "fix(matrix): isolate credentials runtime import boundary (refs #50477)", - "updated_at": "2026-04-18T07:56:27Z" + "number": 69395, + "review_comments_count": 7, + "state": "open", + "title": "Fix TTS media paths by saving audio under managed media", + "updated_at": "2026-04-21T06:40:29Z" }, { - "additions": 44, - "author": "bluesky6868", + "additions": 18, + "author": "silas-dandelion-cult", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: `sanitizeMimeType` in `src/media-understanding/apply.ts` matches MIME types with an **unanchored** regex, so malformed input silently truncates to a valid-looking prefix. Example: `\"image/png junk\"` \u2192 `\"image/png\"`; `\u2026", + "body_excerpt": "Fixes #66701 ## Summary `normalizeReplyPayload` in `src/auto-reply/reply/normalize-reply.ts` leaks chain-of-thought / internal reasoning to channel when the assistant body ends with a trailing `NO_REPLY` token. ## Repro Assistant response\u2026", "changed_files": 2, - "cluster_id": "cluster-68225-2", + "cluster_id": "cluster-66701-3", "cluster_ids": [ - "cluster-68225-2" + "cluster-66701-3" ], "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68456", - "created_at": "2026-04-18T07:35:10Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69394", + "created_at": "2026-04-20T16:27:17Z", + "deletions": 10, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68456/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68456", + "files_url": "https://github.com/openclaw/openclaw/pull/69394/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69394", "labels": [ "size: XS" ], "merged": false, - "number": 68456, - "review_comments_count": 0, + "number": 69394, + "review_comments_count": 2, "state": "open", - "title": "security(media): anchor sanitizeMimeType regex to reject malformed input", - "updated_at": "2026-04-18T07:38:01Z" + "title": "fix(auto-reply): suppress entire payload when trailing NO_REPLY token present", + "updated_at": "2026-04-20T17:56:11Z" }, { - "additions": 90, - "author": "ahbi1006-hue", - "author_association": "NONE", - "body_excerpt": "## Problem When adding a second Feishu IM channel in the same OpenClaw instance, the accountId is always forced to DEFAULT_ACCOUNT_ID (\"default\"), making it impossible to register multiple independent Feishu bots. ## Changes - `extensions/\u2026", - "changed_files": 3, + "additions": 573, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## What `usageTotals` in `pi-embedded-subscribe.ts` was never reset after compaction. While `clearStaleAssistantUsageOnSessionMessages` zeros out per-message usage, the `usageTotals` accumulator kept the pre-compaction `total` value. ## Wh\u2026", + "changed_files": 22, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68455", - "created_at": "2026-04-18T07:30:52Z", - "deletions": 11, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69393", + "created_at": "2026-04-20T16:26:33Z", + "deletions": 42, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68455/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68455", + "files_url": "https://github.com/openclaw/openclaw/pull/69393/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69393", "labels": [ + "app: web-ui", + "gateway", + "cli", + "agents", "channel: feishu", - "size: S" + "size: L", + "r: too-many-prs" ], "merged": false, - "number": 68455, - "review_comments_count": 3, + "number": 69393, + "review_comments_count": 1, + "state": "closed", + "title": "fix: reset totalTokens after compaction", + "updated_at": "2026-04-20T16:33:57Z" + }, + { + "additions": 37, + "author": "jinbowang1", + "author_association": "NONE", + "body_excerpt": "## What this does Adds a short \"Recovering from a destructive spawn\" section to `skills/coding-agent/SKILL.md`, right before the `Learnings (Jan 2026)` appendix. The skill today tells users to run agents with `bypassPermissions` (Claude Co\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69391", + "created_at": "2026-04-20T16:18:24Z", + "deletions": 0, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69391/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69391", + "labels": [ + "size: XS" + ], + "merged": false, + "number": 69391, + "review_comments_count": 2, "state": "open", - "title": "feat(feishu): allow custom accountId during Feishu channel onboarding", - "updated_at": "2026-04-18T07:36:14Z" + "title": "docs(coding-agent): add \"recovering from a destructive spawn\" note", + "updated_at": "2026-04-20T16:26:36Z" }, { - "additions": 109, - "author": "leonidas1712", + "additions": 35, + "author": "shahyashish", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: persisted per-agent/provider config could preserve OpenRouter's legacy base URL (`https://openrouter.ai/v1`) during model-config merge instead of adopting the canonical `https://openrouter.ai/api/v1`. - Why it matters\u2026", - "changed_files": 5, + "body_excerpt": "The issue was that `coerceImageAssistantText` only extracted content from text blocks. For vision models with reasoning enabled, the actual response text often resides in 'thinking' blocks (mapped from `reasoning_content`) while the standa\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68454", - "created_at": "2026-04-18T07:30:02Z", - "deletions": 39, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69389", + "created_at": "2026-04-20T16:09:45Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68454/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68454", + "files_url": "https://github.com/openclaw/openclaw/pull/69389/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69389", "labels": [ "agents", - "size: S", - "extensions: qa-lab" + "size: XS" ], "merged": false, - "number": 68454, - "review_comments_count": 3, + "number": 69389, + "review_comments_count": 4, "state": "closed", - "title": "fix(openrouter): replace legacy base URL during model-config merge", - "updated_at": "2026-04-18T16:02:27Z" + "title": "Fix: Image tool fails with reasoning-capable vision models that return empty content", + "updated_at": "2026-04-20T20:38:38Z" }, { - "additions": 156, - "author": "anyech", + "additions": 16, + "author": "shahyashish", "author_association": "NONE", - "body_excerpt": "Fixes #68452. ## Summary This fixes a cron silent-success bug in embedded runner finalization. If an isolated cron `agentTurn` receives a successful tool result whose content is exact `NO_REPLY`, but the model then ends with an empty final\u2026", - "changed_files": 3, - "cluster_id": "cluster-68452-3", - "cluster_ids": [ - "cluster-68452-3" - ], - "cluster_role": "canonical", - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68453", - "created_at": "2026-04-18T07:25:58Z", - "deletions": 6, + "body_excerpt": "The issue was caused by the agent runtime proceeding with a final answer based on a stale message snapshot after long-latency tool turns (like 'exec' or 'process poll'). Even if a new user message arrived during the tool's execution, the o\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69388", + "created_at": "2026-04-20T16:08:01Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68453/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68453", + "files_url": "https://github.com/openclaw/openclaw/pull/69388/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69388", "labels": [ - "agents", - "size: S" + "size: XS" ], "merged": false, - "number": 68453, - "review_comments_count": 2, + "number": 69388, + "review_comments_count": 5, "state": "open", - "title": "fix(cron): preserve silent tool-result `NO_REPLY` on empty final turn", - "updated_at": "2026-04-19T05:53:26Z" + "title": "Fix: [Bug]: Assistant can answer a previous user question after a long multi-tool turn", + "updated_at": "2026-04-20T16:10:49Z" }, { - "additions": 1700, - "author": "seanniu93", + "additions": 90, + "author": "shahyashish", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: isolated cron, isolated heartbeat, and one-shot follow-up runs can create bundle MCP runtimes and leave them alive after the one-shot run ends, which causes connection/process accumulation over time. - Why it matters:\u2026", - "changed_files": 18, + "body_excerpt": "To resolve the issue of the agent ignoring stop commands and entering an infinite retry loop during execution denials, I implemented a 'consecutive denial protection' mechanism in `runTaskInFlow`. This fix addresses the critical loop by: 1\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68450", - "created_at": "2026-04-18T07:23:52Z", - "deletions": 908, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69387", + "created_at": "2026-04-20T16:06:38Z", + "deletions": 83, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68450/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68450", + "files_url": "https://github.com/openclaw/openclaw/pull/69387/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69387", "labels": [ - "channel: matrix", - "agents", - "size: XL" + "size: S" ], "merged": false, - "number": 68450, + "number": 69387, "review_comments_count": 3, "state": "open", - "title": "fix(mcp): dispose bundled MCP runtimes after isolated one-shot runs", - "updated_at": "2026-04-18T17:29:33Z" + "title": "Fix: CRITICAL: Agent ignores stop commands during exec denial - infinite retry loop, delayed command flood, and queue overflow", + "updated_at": "2026-04-20T18:06:54Z" }, { - "additions": 146, - "author": "kagura-agent", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem When a model ID contains a provider prefix like `google/gemma-4-26b-a4b`, OpenClaw splits on `/` and treats `google` as the provider identifier, routing to Google's remote API instead of the configured local LM Studio backend. #\u2026", - "changed_files": 3, + "additions": 1959, + "author": "nathandrewes", + "author_association": "NONE", + "body_excerpt": "## Summary Adds a new bundled extension `@openclaw/aj-router` that routes each model request through a classifier + sensitivity gate + alias map to pick the cheapest provider/model that can handle the prompt. Disabled by default. - `before\u2026", + "changed_files": 22, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68448", - "created_at": "2026-04-18T07:20:20Z", - "deletions": 36, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69385", + "created_at": "2026-04-20T16:00:29Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68448/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68448", + "files_url": "https://github.com/openclaw/openclaw/pull/69385/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69385", "labels": [ - "agents", - "size: S" + "docs", + "size: XL" ], "merged": false, - "number": 68448, - "review_comments_count": 1, - "state": "closed", - "title": "fix: prioritize explicit provider config over model ID prefix parsing", - "updated_at": "2026-04-18T12:49:22Z" + "number": 69385, + "review_comments_count": 8, + "state": "open", + "title": "Extensions: add aj-router plugin for classifier-driven model selection", + "updated_at": "2026-04-20T16:06:33Z" }, { - "additions": 3, - "author": "suboss87", + "additions": 996, + "author": "pgondhi987", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Stops DM `allowFrom` entries (from pairing) from leaking into group policy sender bypass. When `account.groupAllowFrom` is undefined, the code fell back to `configuredAllowFrom` (DM entries), making `hasGroupAllowFrom` true and\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - **Problem:** ACP child sessions (`agent:{id}:acp:{uuid}`) were not recognized as subagent-envelope sessions by `isSubagentSessionKey`, so subagent tool policy, spawn-depth caps, per-parent child caps, and the `subagents.allowA\u2026", + "changed_files": 18, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68446", - "created_at": "2026-04-18T07:03:38Z", - "deletions": 4, + "comments_count": 11, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69383", + "created_at": "2026-04-20T15:58:50Z", + "deletions": 29, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68446/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68446", + "files_url": "https://github.com/openclaw/openclaw/pull/69383/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69383", "labels": [ - "channel: whatsapp-web", - "size: XS" + "gateway", + "cli", + "agents", + "maintainer", + "size: XL" ], - "merged": false, - "number": 68446, - "review_comments_count": 1, - "state": "open", - "title": "fix(whatsapp): stop DM allowFrom fallback into group policy sender bypass", - "updated_at": "2026-04-18T07:19:26Z" + "merged": true, + "number": 69383, + "review_comments_count": 18, + "state": "closed", + "title": "fix(agents): enforce subagent envelope inheritance on ACP child sessions [AI-assisted]", + "updated_at": "2026-04-21T16:52:19Z" }, { - "additions": 89, - "author": "mushuiyu886", + "additions": 33, + "author": "shahyashish", "author_association": "NONE", - "body_excerpt": "## Summary - **#68376**: Fix gateway crash caused by unhandled promise rejection in exec tool's `onUpdate` callback. The `emitUpdate()` call could produce a rejected Promise from an async `onUpdate`, but the synchronous call site never cau\u2026", - "changed_files": 5, + "body_excerpt": "Added the missing `coerceImageAssistantText` function to `src/agents/minimax-vlm.ts` and updated it to include a fallback to `extractAssistantThinking()` when the assistant's text content is empty. This ensures that reasoning-capable visio\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68445", - "created_at": "2026-04-18T06:57:13Z", - "deletions": 15, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69382", + "created_at": "2026-04-20T15:58:48Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68445/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68445", + "files_url": "https://github.com/openclaw/openclaw/pull/69382/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69382", "labels": [ - "extensions: memory-core", "agents", - "size: S" + "size: XS" ], "merged": false, - "number": 68445, - "review_comments_count": 2, - "state": "open", - "title": "fix: exec tool gateway crash (#68376) and memory-core dreaming bloat (#68379)", - "updated_at": "2026-04-18T07:10:24Z" + "number": 69382, + "review_comments_count": 4, + "state": "closed", + "title": "Fix: Image tool fails with reasoning-capable vision models that return empty content", + "updated_at": "2026-04-20T20:38:21Z" }, { - "additions": 268, - "author": "GaosCode", + "additions": 588, + "author": "pgondhi987", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Feishu group replies automatically @mention other inbound mention targets when a message mentions the bot plus additional entities. - Why it matters: In multi-bot group chats, this turns one user message into repeated\u2026", - "changed_files": 7, + "body_excerpt": "## Summary - **Problem:** Hook mappings that use `{{\u2026}}` template expressions in their `sessionKey` (e.g. the built-in `gmail` preset with `sessionKey: \\\"hook:gmail:{{messages[0].id}}\\\"`) render attacker-controlled webhook payload values i\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68444", - "created_at": "2026-04-18T06:56:04Z", - "deletions": 46, + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69381", + "created_at": "2026-04-20T15:54:59Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68444/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68444", + "files_url": "https://github.com/openclaw/openclaw/pull/69381/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69381", "labels": [ "docs", - "channel: feishu", - "size: M" + "gateway", + "maintainer", + "size: L" ], - "merged": false, - "number": 68444, - "review_comments_count": 0, - "state": "open", - "title": "fix(feishu): stop auto-forwarding mentions when disabled", - "updated_at": "2026-04-18T06:59:25Z" + "merged": true, + "number": 69381, + "review_comments_count": 14, + "state": "closed", + "title": "fix(gateway): enforce allowRequestSessionKey gate on template-rendered mapping sessionKeys", + "updated_at": "2026-04-21T04:42:22Z" }, { - "additions": 104, - "author": "monasprox", + "additions": 227, + "author": "chrispatil", "author_association": "NONE", - "body_excerpt": "## Summary Adds a new `list` action to the Feishu channel plugin that enables reading chat history for a given chat/group by `container_id`. ## Motivation Currently the Feishu plugin only supports fetching a single message by `messageId`.\u2026", + "body_excerpt": "## Summary The preflight-compaction and memory-flush gates computed their threshold from `reserveTokensFloor` alone, silently ignoring `agents.defaults.compaction.reserveTokens` when it was set above the floor. After this fix, the effectiv\u2026", "changed_files": 6, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "cluster_id": "cluster-66830-3", + "cluster_ids": [ + "cluster-66830-3" + ], + "cluster_role": "canonical", "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68443", - "created_at": "2026-04-18T06:55:05Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69379", + "created_at": "2026-04-20T15:41:43Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68443/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68443", + "files_url": "https://github.com/openclaw/openclaw/pull/69379/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69379", "labels": [ - "channel: feishu", - "size: S" + "agents", + "size: M" ], "merged": false, - "number": 68443, + "number": 69379, "review_comments_count": 2, "state": "open", - "title": "feat(feishu): add list action to read chat history by container_id", - "updated_at": "2026-04-18T10:03:07Z" + "title": "fix(compaction): preflight/memoryFlush gates respect reserveTokens above floor", + "updated_at": "2026-04-20T23:25:13Z" }, { - "additions": 30094, - "author": "100yenadmin", + "additions": 943, + "author": "eleqtrizit", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary PR-11 of the plan-mode rollout series. Sits on top of PR-10 (#68440) which is a hard prerequisite. Net-new in this PR are 2 commits (\\`29bf11710e\\` + \\`fe274f395a\\`) \u2014 focused review surface is \\`git diff feat/plan-archetype-and\u2026", - "changed_files": 141, + "body_excerpt": "## Summary - Rejects HEIF-family tool image payloads before tool-result sanitization reaches native image decoding - Bounds the ISO BMFF brand scan to the declared `ftyp` box size ## Changes - Added a lightweight HEIF/AVIF brand check in `\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 10, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68441", - "created_at": "2026-04-18T06:41:54Z", - "deletions": 230, + "comments_count": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69378", + "created_at": "2026-04-20T15:38:47Z", + "deletions": 24, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68441/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68441", + "files_url": "https://github.com/openclaw/openclaw/pull/69378/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69378", "labels": [ - "docs", - "channel: telegram", - "app: web-ui", - "gateway", "agents", - "size: XL", - "extensions: openai" + "maintainer", + "size: L" ], "merged": false, - "number": 68441, - "review_comments_count": 103, - "state": "open", - "title": "feat(plan-mode): universal /plan slash commands across all channels (PR-11)", - "updated_at": "2026-04-19T06:50:51Z" + "number": 69378, + "review_comments_count": 12, + "state": "closed", + "title": "Guard unsupported tool image formats before resize", + "updated_at": "2026-04-20T19:45:03Z" }, { - "additions": 23671, - "author": "100yenadmin", + "additions": 751, + "author": "eleqtrizit", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary PR-10 of the plan-mode rollout series. Sits on top of #67514 / #67538 / #67542 / #67721 / PR-8 / PR-9 (all currently in flight on the rollup branch). Net-new in this PR are 2 commits (\\`78c6eb488c\\` + \\`1bf9d7b4e7\\`) \u2014 focused r\u2026", - "changed_files": 115, + "body_excerpt": "## Summary - Tighten the `gateway` tool config-mutation preflight so agent-driven `config.patch` and `config.apply` calls cannot rewrite operator-trusted config subtrees. - Cover id-keyed `agents.list[]` entries so merge-patch updates cann\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 6, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68440", - "created_at": "2026-04-18T06:41:08Z", - "deletions": 221, + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69377", + "created_at": "2026-04-20T15:37:50Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68440/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68440", + "files_url": "https://github.com/openclaw/openclaw/pull/69377/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69377", "labels": [ - "docs", - "app: web-ui", - "gateway", "agents", - "size: XL", - "extensions: openai" + "maintainer", + "size: L" ], - "merged": false, - "number": 68440, - "review_comments_count": 32, - "state": "open", - "title": "feat(plan-mode): plan archetype + ask_user_question + auto mode (PR-10)", - "updated_at": "2026-04-18T16:16:13Z" + "merged": true, + "number": 69377, + "review_comments_count": 9, + "state": "closed", + "title": "fix(gateway): tighten gateway config mutation guard", + "updated_at": "2026-04-20T19:28:07Z" }, { - "additions": 0, - "author": "hxy91819", - "author_association": "MEMBER", - "body_excerpt": "## Summary - PR #67679 landed a duplicate line under `### Changes` in the Unreleased block in addition to the detailed entry that was already present under `### Fixes`. - The short `### Changes` line appears to have been auto-generated fro\u2026", - "changed_files": 1, + "additions": 8, + "author": "eleqtrizit", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - reserve the `OPENCLAW_*` namespace for trusted shell and global runtime env input - fail closed for new workspace `.env` runtime-control keys instead of relying on per-key denylist updates ## Changes - add an `OPENCLAW_` works\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68439", - "created_at": "2026-04-18T06:39:33Z", - "deletions": 1, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69376", + "created_at": "2026-04-20T15:37:39Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68439/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68439", + "files_url": "https://github.com/openclaw/openclaw/pull/69376/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69376", "labels": [ "maintainer", "size: XS" ], "merged": true, - "number": 68439, + "number": 69376, "review_comments_count": 0, "state": "closed", - "title": "docs(changelog): deduplicate #67679 entry", - "updated_at": "2026-04-18T06:41:55Z" + "title": "fix(dotenv): reserve workspace OPENCLAW env namespace", + "updated_at": "2026-04-20T18:43:31Z" }, { - "additions": 89, - "author": "mushuiyu886", - "author_association": "NONE", - "body_excerpt": "## Summary - **#68376**: Catch rejected `onUpdate` promises in the exec tool's `emitUpdate()` to prevent unhandled rejections from crashing the gateway - **#68379**: Cap dreaming artifact growth \u2014 day-based narrative session keys, 2MB corp\u2026", - "changed_files": 5, + "additions": 528, + "author": "eleqtrizit", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - limit paired-device pairing visibility and approvals to the caller device for non-admin device sessions - preserve the existing global pairing behavior for admin and non-device operator sessions ## Changes - scope `device.pair\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68437", - "created_at": "2026-04-18T06:20:28Z", - "deletions": 15, + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69375", + "created_at": "2026-04-20T15:36:31Z", + "deletions": 19, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68437/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68437", + "files_url": "https://github.com/openclaw/openclaw/pull/69375/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69375", "labels": [ - "extensions: memory-core", - "agents", - "size: S" + "gateway", + "maintainer", + "size: L" ], - "merged": false, - "number": 68437, + "merged": true, + "number": 69375, "review_comments_count": 1, "state": "closed", - "title": "fix: exec tool gateway crash (#68376) and memory-core dreaming bloat (#68379)", - "updated_at": "2026-04-18T06:56:54Z" + "title": "Limit paired-device pairing actions to the caller device", + "updated_at": "2026-04-20T18:50:40Z" }, { - "additions": 1322, - "author": "foxer0952", - "author_association": "NONE", - "body_excerpt": "## Summary The OpenAI-compatible `/v1/chat/completions` endpoint currently recognises only `text` / `input_text` / `image_url` content parts and silently drops `input_audio`, `file`, and `video_url`. This brings it closer to parity with th\u2026", - "changed_files": 6, + "additions": 381, + "author": "eleqtrizit", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - require read-capable operator scopes for chat-class gateway websocket broadcasts - keep pairing-scoped and node-role connections from passively receiving session chat event frames ## Changes - classify `chat`, `agent`, and `ch\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68435", - "created_at": "2026-04-18T06:19:19Z", - "deletions": 18, + "comments_count": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69373", + "created_at": "2026-04-20T15:36:03Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68435/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68435", + "files_url": "https://github.com/openclaw/openclaw/pull/69373/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69373", "labels": [ "gateway", - "size: XL" + "maintainer", + "size: M" ], - "merged": false, - "number": 68435, - "review_comments_count": 12, - "state": "open", - "title": "feat(gateway): accept audio/file content blocks in /v1/chat/completions", - "updated_at": "2026-04-18T10:37:24Z" + "merged": true, + "number": 69373, + "review_comments_count": 5, + "state": "closed", + "title": "fix(gateway): require read scope for chat websocket broadcasts", + "updated_at": "2026-04-20T21:24:34Z" }, { - "additions": 101, - "author": "richddr", + "additions": 249, + "author": "azaricstefan", "author_association": "NONE", - "body_excerpt": "## Summary - prewarm mirrored outbound sessions after `message send` records session metadata - reuse the existing session skills snapshot logic so the first callback turn is not a cold-start session - add a regression test covering proact\u2026", - "changed_files": 4, + "body_excerpt": "## Summary - fail closed for protected canvas/a2ui iframe URLs when a scoped canvas capability host is unavailable - refresh `hello.canvasHostUrl` before the 10-minute capability TTL expires by reconnecting the Control UI websocket shortly\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68433", - "created_at": "2026-04-18T06:14:14Z", - "deletions": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69372", + "created_at": "2026-04-20T15:34:44Z", + "deletions": 35, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68433/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68433", + "files_url": "https://github.com/openclaw/openclaw/pull/69372/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69372", "labels": [ - "size: S" + "app: web-ui", + "size: M" ], "merged": false, - "number": 68433, + "number": 69372, "review_comments_count": 2, "state": "open", - "title": "Prewarm mirrored outbound sessions before first callback", - "updated_at": "2026-04-18T06:20:43Z" + "title": "fix: refresh control-ui canvas capabilities", + "updated_at": "2026-04-20T15:40:33Z" }, { - "additions": 52, - "author": "mushuiyu886", - "author_association": "NONE", - "body_excerpt": "## Summary - **#68376**: Catch rejected `onUpdate` promises in the exec tool's `emitUpdate()` to prevent unhandled rejections from crashing the gateway - **#68379**: Cap dreaming artifact growth \u2014 day-based narrative session keys, 2MB corp\u2026", - "changed_files": 4, + "additions": 102, + "author": "PratikRai0101", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Problem: Ollama provider fails to initialize in implicit discovery mode because required fields (`baseUrl`, `models`) are missing during config validation. - Why it matters: Validation fails before discovery runs, so local mod\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68432", - "created_at": "2026-04-18T06:09:09Z", - "deletions": 12, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69370", + "created_at": "2026-04-20T15:25:09Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68432/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68432", + "files_url": "https://github.com/openclaw/openclaw/pull/69370/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69370", "labels": [ - "extensions: memory-core", - "agents", "size: S" ], - "merged": false, - "number": 68432, - "review_comments_count": 5, + "merged": true, + "number": 69370, + "review_comments_count": 4, "state": "closed", - "title": "fix: exec tool gateway crash (#68376) and memory-core dreaming bloat (#68379)", - "updated_at": "2026-04-18T06:23:09Z" + "title": "fix(ollama): inject default baseUrl and models during normalization to unblock implicit discovery #69085", + "updated_at": "2026-04-21T03:06:08Z" }, { - "additions": 18, - "author": "visionik", + "additions": 235, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Harden three CI workflow files against `template-injection` findings reported by zizmor (v1.24.1), using the canonical fix pattern: hoist every dynamic `${{ \u2026 }}` expression out of the `run:` block into a step-level `env:` dicti\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Fixes #69360. ## Problem Isolated cron `agentTurn` runs could finish successfully but still be marked as `Agent couldn't generate a response`. In the failing runs, the model stopped normally and `finalAssistantVisibleText` was p\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68431", - "created_at": "2026-04-18T06:01:55Z", - "deletions": 8, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69367", + "created_at": "2026-04-20T15:06:20Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68431/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68431", + "files_url": "https://github.com/openclaw/openclaw/pull/69367/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69367", "labels": [ - "maintainer", - "size: XS" + "app: web-ui", + "agents", + "size: M", + "r: too-many-prs" ], - "merged": true, - "number": 68431, - "review_comments_count": 0, + "merged": false, + "number": 69367, + "review_comments_count": 3, "state": "closed", - "title": "ci(security): harden workflow steps against template-injection", - "updated_at": "2026-04-18T06:04:58Z" + "title": "fix: keep isolated cron agentTurn runs from dropping visible answers", + "updated_at": "2026-04-20T15:11:16Z" }, { - "additions": 80, - "author": "lyfuci", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: The embedded ACP runtime health probe hardcodes \\`codex\\` as the default probe agent and has no way to override that through plugin config. On hosts that install, for example, OpenCode as their only ACP agent (no Code\u2026", - "changed_files": 8, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "additions": 258, + "author": "srinivaspavan9", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** When an async exec command completes, the Control UI rendered two internal runtime messages as visible chat bubbles: (1) a fake \"You\" bubble containing `System (untrusted): [...] Exec completed...` and (2) a pure\u2026", + "changed_files": 5, + "cluster_id": "cluster-52463-7", + "cluster_ids": [ + "cluster-52463-7" + ], + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68430", - "created_at": "2026-04-18T06:01:18Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69366", + "created_at": "2026-04-20T14:55:30Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68430/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68430", + "files_url": "https://github.com/openclaw/openclaw/pull/69366/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69366", "labels": [ - "size: S", - "extensions: acpx" + "app: web-ui", + "size: M" ], "merged": false, - "number": 68430, - "review_comments_count": 1, + "number": 69366, + "review_comments_count": 3, "state": "open", - "title": "extensions/acpx: expose probeAgent config so non-codex ACP stacks stay available", - "updated_at": "2026-04-19T04:39:04Z" + "title": "fix(ui): hide async exec system events and heartbeat acks from chat transcript", + "updated_at": "2026-04-20T15:02:16Z" }, { - "additions": 68, - "author": "afurm", + "additions": 236, + "author": "Chevron7Locked", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: several bundled web-search plugins accepted `SecretRef` objects for `plugins.entries..config.webSearch.apiKey`, but runtime compatibility lookup only registered Brave a\u2026", - "changed_files": 8, + "body_excerpt": "## Summary - **Problem:** When `runWithModelFallback` falls back to a secondary provider it writes `providerOverride`/`modelOverride`/`modelOverrideSource:\"auto\"` to the session. On subsequent turns `createModelSelectionState` re-applies t\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68424", - "created_at": "2026-04-18T05:51:13Z", - "deletions": 0, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69365", + "created_at": "2026-04-20T14:46:53Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68424/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68424", + "files_url": "https://github.com/openclaw/openclaw/pull/69365/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69365", "labels": [ - "size: S", - "extensions: moonshot", - "extensions: tavily" + "size: M" ], - "merged": false, - "number": 68424, - "review_comments_count": 0, - "state": "open", - "title": "fix(web-search): restore SecretRef runtime compatibility for bundled providers", - "updated_at": "2026-04-18T06:04:26Z" + "merged": true, + "number": 69365, + "review_comments_count": 8, + "state": "closed", + "title": "fix(model-selection): clear auto-failover overrides so primary is retried on each turn", + "updated_at": "2026-04-21T03:06:08Z" }, { - "additions": 10, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68369 The \"new chat\" welcome state and message thread in the web dashboard were stretching to the full width of the content area instead of being constrained to a readable column width. This is a regression fix. ## Root C\u2026", - "changed_files": 1, + "additions": 154, + "author": "kylejfrost", + "author_association": "NONE", + "body_excerpt": "## Summary - **Problem:** `parseCliJsonl()` stores the transient `SessionStart:resume` hook `session_id` instead of the real conversation `session_id`. The stored id is not a resumable conversation, so the next turn's `--resume` fails with\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68422", - "created_at": "2026-04-18T05:45:43Z", - "deletions": 1, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69363", + "created_at": "2026-04-20T14:42:23Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68422/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68422", + "files_url": "https://github.com/openclaw/openclaw/pull/69363/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69363", "labels": [ - "app: web-ui", - "size: XS" + "agents", + "size: S" ], "merged": false, - "number": 68422, + "number": 69363, "review_comments_count": 0, "state": "open", - "title": "fix(ui): constrain web chat width to 920px for better readability", - "updated_at": "2026-04-18T05:47:09Z" + "title": "fix(agents): ignore SessionStart hook session_ids when resuming claude-cli", + "updated_at": "2026-04-21T16:48:44Z" }, { - "additions": 56, - "author": "mushuiyu886", + "additions": 244, + "author": "Menci", "author_association": "NONE", - "body_excerpt": "## Summary - **#68376**: Catch rejected `onUpdate` promises in the exec tool's `emitUpdate()` to prevent unhandled rejections from crashing the gateway - **#68379**: Cap dreaming artifact growth \u2014 day-based narrative session keys, 2MB corp\u2026", - "changed_files": 4, + "body_excerpt": "## Problem Some OpenAI-compatible providers (notably GitHub Copilot's `/responses` endpoint) encode connection/session state into `input[].id` values as long base64 tokens. Those IDs outlive the upstream connection they were issued against\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68421", - "created_at": "2026-04-18T05:41:44Z", - "deletions": 11, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69362", + "created_at": "2026-04-20T14:37:27Z", + "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68421/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68421", + "files_url": "https://github.com/openclaw/openclaw/pull/69362/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69362", "labels": [ - "extensions: memory-core", "agents", - "size: S" + "size: M" ], "merged": false, - "number": 68421, + "number": 69362, "review_comments_count": 3, - "state": "closed", - "title": "fix: exec tool gateway crash (#68376) and memory-core dreaming bloat (#68379)", - "updated_at": "2026-04-18T06:01:00Z" + "state": "open", + "title": "fix(openai-responses): auto-recover from connection-bound item ID rejections", + "updated_at": "2026-04-20T15:01:46Z" }, { - "additions": 242, - "author": "miyago9267", + "additions": 1245, + "author": "adminsairolotech-bit", "author_association": "NONE", - "body_excerpt": "## Summary Incomplete-turn exits (empty response, reasoning-only retries exhausted, or terminal error stopReason) currently surface `\"\u26a0\ufe0f Agent couldn't generate a response. Please try again.\"` directly to the user. This wastes a configured\u2026", - "changed_files": 7, + "body_excerpt": "## Summary - Add Puter AI provider plugin (`puter`) for OpenClaw - Access 13+ models: GPT-5.4, Claude Opus 4.7, Gemini 2.5, Grok, DeepSeek, etc. - OpenAI-compatible API: streaming, tool calling, vision - 6 free-tier models marked with \ud83c\udd93 ba\u2026", + "changed_files": 17, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68420", - "created_at": "2026-04-18T05:38:22Z", - "deletions": 3, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69357", + "created_at": "2026-04-20T14:06:02Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68420/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68420", + "files_url": "https://github.com/openclaw/openclaw/pull/69357/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69357", "labels": [ - "agents", - "size: M" + "docs", + "r: third-party-extension", + "size: XL" ], "merged": false, - "number": 68420, - "review_comments_count": 5, - "state": "open", - "title": "Agents/fallback: rotate to fallback model on incomplete-turn exits", - "updated_at": "2026-04-18T09:11:14Z" + "number": 69357, + "review_comments_count": 7, + "state": "closed", + "title": "feat: Add Puter AI Provider Plugin (V1 MVP)", + "updated_at": "2026-04-20T19:17:12Z" }, { - "additions": 439, - "author": "briandevans", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: On 2026.4.15, `mistral/mistral-small-latest` with reasoning enabled streams `delta.content` as an Anthropic-style typed-block array (`[{type:\"thinking\", thinking:[\u2026]}, {type:\"text\", text:\"\u2026\"}]`) instead of a string. T\u2026", - "changed_files": 3, - "cluster_id": "cluster-68309-3", + "additions": 72, + "author": "KimHyeongRae0", + "author_association": "NONE", + "body_excerpt": "## Summary - Problem: `openclaw tasks audit` reports `inconsistent_timestamps` / \"startedAt is earlier than createdAt\" on the majority of tasks (succeeded/failed/timed_out/running), making audit output noisy ([#69229](https://github.com/op\u2026", + "changed_files": 2, + "cluster_id": "cluster-69229-3", "cluster_ids": [ - "cluster-68309-3" + "cluster-69229-3" ], "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68418", - "created_at": "2026-04-18T05:34:58Z", - "deletions": 14, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69356", + "created_at": "2026-04-20T14:04:47Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68418/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68418", + "files_url": "https://github.com/openclaw/openclaw/pull/69356/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69356", "labels": [ - "agents", - "size: M" + "size: S" ], "merged": false, - "number": 68418, - "review_comments_count": 6, + "number": 69356, + "review_comments_count": 2, "state": "open", - "title": "fix(agents): unpack typed-block delta.content arrays in openai-completions stream", - "updated_at": "2026-04-18T05:44:59Z" + "title": "fix(tasks): clamp createdAt to startedAt on task creation (#69229)", + "updated_at": "2026-04-21T10:11:47Z" }, { - "additions": 94, - "author": "acinader", + "additions": 704, + "author": "mikaeldiakhate-cell", "author_association": "NONE", - "body_excerpt": "## What Server deployments (e.g. the AWS CloudFormation template) place OpenClaw state at `OPENCLAW_STATE_DIR=/data/openclaw` and symlink `~/.openclaw \u2192 /data/openclaw` for convenience. The exec approvals path check was tripping on this sy\u2026", - "changed_files": 2, + "body_excerpt": "## Problem A stock `openclaw update` silently overwrites locally patched installs. Regressions return quietly because operators have no signal that the running package has diverged from the pristine npm release. Concrete trigger: the 2026-\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68417", - "created_at": "2026-04-18T05:34:31Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69355", + "created_at": "2026-04-20T14:04:20Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68417/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68417", + "files_url": "https://github.com/openclaw/openclaw/pull/69355/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69355", "labels": [ - "size: S" + "docs", + "commands", + "size: L" ], "merged": false, - "number": 68417, - "review_comments_count": 2, + "number": 69355, + "review_comments_count": 6, "state": "open", - "title": "fix(exec-approvals): allow ~/.openclaw symlink when OPENCLAW_STATE_DIR is set", - "updated_at": "2026-04-18T18:50:10Z" + "title": "feat(doctor): detect local rebuild vs pristine npm release", + "updated_at": "2026-04-20T14:09:08Z" }, { - "additions": 246, - "author": "skylee-01", + "additions": 87, + "author": "nnish16", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: `supportsAdaptiveThinking()` in `anthropic-transport-stream.ts` and `shouldUseAnthropicAdaptiveThinkingDefault()` in `register.runtime.ts` use hardcoded model-ID checks that omit Opus 4.7, Sonnet 4.7, and all future 4\u2026", - "changed_files": 4, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary Teach the zsh completion generator to emit positional argument specs for leaf commands, including `_files` completion for path-like arguments. This restores tab completion for `openclaw wiki ingest ` without changing unrel\u2026", + "changed_files": 2, + "cluster_id": "cluster-69293-4", + "cluster_ids": [ + "cluster-69293-4" + ], + "cluster_role": "canonical", "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68416", - "created_at": "2026-04-18T05:28:34Z", - "deletions": 29, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69352", + "created_at": "2026-04-20T13:53:48Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68416/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68416", + "files_url": "https://github.com/openclaw/openclaw/pull/69352/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69352", "labels": [ - "agents", - "size: M", - "extensions: anthropic" + "cli", + "size: S" ], "merged": false, - "number": 68416, - "review_comments_count": 6, + "number": 69352, + "review_comments_count": 8, "state": "open", - "title": "fix(agents): forward-compat adaptive thinking for Claude 4.7+ models", - "updated_at": "2026-04-18T05:58:27Z" + "title": "fix: complete zsh positional wiki ingest paths", + "updated_at": "2026-04-20T18:21:50Z" }, { - "additions": 455, - "author": "mraleko", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Control UI dropped user image messages after history reload because transcript-backed media fields were not rendered. - Why it matters: image uploads appeared during the optimistic send path, then disappeared once the\u2026", - "changed_files": 8, + "additions": 29, + "author": "KimHyeongRae0", + "author_association": "NONE", + "body_excerpt": "## Summary - Problem: [#69290](https://github.com/openclaw/openclaw/issues/69290) reports that `/new` and `/reset` reply `\u2705 ACP session reset in place.` for non-ACP sessions. - Why it matters: the source on `main` (and `v2026.4.15`) alread\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68415", - "created_at": "2026-04-18T05:19:16Z", - "deletions": 23, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69349", + "created_at": "2026-04-20T13:46:25Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68415/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68415", + "files_url": "https://github.com/openclaw/openclaw/pull/69349/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69349", "labels": [ - "app: web-ui", - "size: M" + "size: XS" ], - "merged": true, - "number": 68415, - "review_comments_count": 4, - "state": "closed", - "title": "fix(ui): keep history-backed user image messages visible", - "updated_at": "2026-04-18T19:45:16Z" + "merged": false, + "number": 69349, + "review_comments_count": 0, + "state": "open", + "title": "test(auto-reply): guard non-ACP reset reply (#69290)", + "updated_at": "2026-04-20T13:50:38Z" }, { - "additions": 56, - "author": "anyech", + "additions": 14, + "author": "antongoryachev", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Active Memory silently clamps configured `timeoutMs` values above `60000` down to `60000`, so a requested `90000` budget never actually reaches runtime. - Why it matters: operators can believe they are testing a longe\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - **Problem:** `sessions.json.estimatedCostUsd` is inflated 1\u00d7\u201372\u00d7 over real OpenRouter cost because three persist sites snapshot tokens but accumulate cost. The same run-cumulative `usage` object is handled multiple times per r\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68411", - "created_at": "2026-04-18T05:00:35Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69348", + "created_at": "2026-04-20T13:42:30Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68411/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68411", + "files_url": "https://github.com/openclaw/openclaw/pull/69348/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69348", "labels": [ - "size: S" + "agents", + "size: XS" ], "merged": false, - "number": 68411, - "review_comments_count": 0, + "number": 69348, + "review_comments_count": 1, "state": "closed", - "title": "fix(active-memory): honor timeoutMs values up to 90s", - "updated_at": "2026-04-18T16:01:02Z" + "title": "fix(sessions): snapshot estimatedCostUsd to mirror token snapshot semantics", + "updated_at": "2026-04-21T02:13:04Z" }, { - "additions": 252, - "author": "jasonmakr", + "additions": 368, + "author": "abajirao", "author_association": "NONE", - "body_excerpt": "## Problem Light sleep and REM dreaming phases write managed blocks into daily memory files (`memory/YYYY-MM-DD.md`) when using inline storage mode. These blocks contain session-agnostic candidate memories that leak cross-session context w\u2026", - "changed_files": 4, + "body_excerpt": "## Summary - **Problem:** When a streaming response terminates with `stopReason=stop` but produces zero content, zero thinking, zero tool calls, and zero tokens in/out, OpenClaw surfaces the generic `\u26a0\ufe0f Agent couldn't generate a response.\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68408", - "created_at": "2026-04-18T04:40:57Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69346", + "created_at": "2026-04-20T13:39:46Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68408/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68408", + "files_url": "https://github.com/openclaw/openclaw/pull/69346/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69346", "labels": [ - "extensions: memory-core", + "agents", "size: M" ], "merged": false, - "number": 68408, + "number": 69346, "review_comments_count": 4, "state": "open", - "title": "fix(memory-core): strip dreaming managed blocks from daily memory reads", - "updated_at": "2026-04-18T06:44:02Z" + "title": "fix(embedded-runner): actionable diagnostic for empty-stream config errors", + "updated_at": "2026-04-20T13:52:13Z" }, { - "additions": 29, - "author": "jack-ra", + "additions": 142, + "author": "bradfreels", "author_association": "NONE", - "body_excerpt": "Ensure gateway management commands are handled locally by OpenClaw even when focused on an ACP session. This prevents these commands from being erroneously sent to the agent.", + "body_excerpt": "## Summary Fixes #69281. Cron jobs configured with `delivery.mode: \"none\"` were incorrectly recording: - `deliveryStatus: \"not-delivered\"` (should be `\"not-requested\"`) - A spurious `deliveryError: \"\u26a0\ufe0f \u2709\ufe0f Message failed\"` This produced fal\u2026", + "changed_files": 4, + "cluster_id": "cluster-44533-4", + "cluster_ids": [ + "cluster-44533-4" + ], + "cluster_role": "member", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69345", + "created_at": "2026-04-20T13:37:15Z", + "deletions": 6, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69345/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69345", + "labels": [ + "size: S" + ], + "merged": false, + "number": 69345, + "review_comments_count": 1, + "state": "open", + "title": "fix: mark cron delivery as not-requested when mode is \"none\" (#69281)", + "updated_at": "2026-04-20T13:50:38Z" + }, + { + "additions": 20, + "author": "abacha", + "author_association": "NONE", + "body_excerpt": "The TUI currently chunks any non-whitespace sequence longer than 32 characters by injecting a space. This is intended to protect narrow terminals from layout issues but causes corruption in many common code snippets (e.g. Ruby method chain\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68407", - "created_at": "2026-04-18T04:40:05Z", - "deletions": 5, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69344", + "created_at": "2026-04-20T13:36:36Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68407/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68407", + "files_url": "https://github.com/openclaw/openclaw/pull/69344/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69344", "labels": [ "size: XS" ], "merged": false, - "number": 68407, + "number": 69344, "review_comments_count": 2, "state": "open", - "title": "fix(acp): bypass agent dispatch for /status, /acp, and /unfocus commands", - "updated_at": "2026-04-18T04:43:21Z" + "title": "fix(tui): increase token chunking limit and preserve code-like fragments", + "updated_at": "2026-04-20T14:08:03Z" }, { - "additions": 229, - "author": "coygeek", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Fix Summary The release ships VM deployment guides that tell operators to set `OPENCLAW_GATEWAY_TOKEN=change-me-now` while binding the gateway to LAN. The gateway startup weak-secret guard only rejects a different sentinel value, so a n\u2026", - "changed_files": 9, + "additions": 282, + "author": "claytonlin1110", + "author_association": "NONE", + "body_excerpt": "## Summary - Problem: `openclaw.json` rejected per-model provider-specific fields (for example `reasoning.max_tokens`), so users could not configure provider-native request options at model granularity. - Why it matters: Providers like Ope\u2026", + "changed_files": 12, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68404", - "created_at": "2026-04-18T04:30:23Z", - "deletions": 96, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69342", + "created_at": "2026-04-20T13:34:23Z", + "deletions": 20, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68404/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68404", + "files_url": "https://github.com/openclaw/openclaw/pull/69342/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69342", "labels": [ - "docs", - "gateway", + "agents", "size: M" ], - "merged": true, - "number": 68404, - "review_comments_count": 1, - "state": "closed", - "title": "fix: Published deployment token placeholder bypasses gateway...", - "updated_at": "2026-04-18T17:29:44Z" + "merged": false, + "number": 69342, + "review_comments_count": 7, + "state": "open", + "title": "fix: support per-model provider extraParams", + "updated_at": "2026-04-20T18:32:23Z" }, { - "additions": 59, - "author": "bek91", + "additions": 1, + "author": "CCcassiusdjs", "author_association": "NONE", - "body_excerpt": "## Summary - stop seeding new Slack thread sessions with bot-authored thread history - keep human thread context seeding intact for first-turn bootstrap - remove the duplicate plain-text `ThreadStarterBody` prelude when no thread history b\u2026", - "changed_files": 6, + "body_excerpt": "## Summary - `normalizeLongTokenForDisplay` splits tokens \u226533 chars with spaces to prevent terminal overflow - `isCopySensitiveToken` only guarded underscore-separated names; hyphenated identifiers like `my-long-package-name-component` wer\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68402", - "created_at": "2026-04-18T04:29:52Z", - "deletions": 19, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69340", + "created_at": "2026-04-20T13:12:02Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68402/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68402", + "files_url": "https://github.com/openclaw/openclaw/pull/69340/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69340", "labels": [ - "channel: slack", - "size: S" + "size: XS" ], "merged": false, - "number": 68402, + "number": 69340, "review_comments_count": 0, "state": "open", - "title": "[Context] Avoid replaying Slack bot thread context", - "updated_at": "2026-04-18T04:39:37Z" + "title": "fix(tui): preserve hyphen-separated tokens from line-wrap splitting", + "updated_at": "2026-04-20T13:12:56Z" }, { - "additions": 105, - "author": "lyfuci", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: On WSL2 Ubuntu with `[boot] systemd=true`, `openclaw gateway start` fails with the misleading error `Gateway start failed: Error: systemctl not available; systemd user services are required on Linux.` even when system\u2026", - "changed_files": 5, + "additions": 25, + "author": "steipete", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - remove Discord's declared optional `@discordjs/opus` runtime dependency - use the `opusscript` range that satisfies `prism-media`'s optional peer path - remove `@discordjs/opus` from pnpm build-script allowlists and package co\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68400", - "created_at": "2026-04-18T04:26:05Z", - "deletions": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69339", + "created_at": "2026-04-20T13:11:38Z", + "deletions": 24, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68400/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68400", + "files_url": "https://github.com/openclaw/openclaw/pull/69339/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69339", "labels": [ - "gateway", - "size: S" + "channel: discord", + "maintainer", + "size: XS" ], - "merged": false, - "number": 68400, - "review_comments_count": 1, - "state": "open", - "title": "daemon/systemd: distinguish WSL user D-Bus socket missing from missing systemctl", - "updated_at": "2026-04-19T04:39:03Z" + "merged": true, + "number": 69339, + "review_comments_count": 4, + "state": "closed", + "title": "fix(discord): avoid native opus install path", + "updated_at": "2026-04-20T14:25:10Z" }, { - "additions": 60, - "author": "hclsys", + "additions": 7, + "author": "CCcassiusdjs", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68391 \u2014 \\`openclaw models\\` declares \\`--agent \\` as a top-level option but only \\`status\\` and \\`list\\` actually consume it. The \\`set\\` and \\`set-image\\` write-paths inherited the flag without wiring it through, so\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - When `ingestDelta` returns `null` (no visible change yet \u2014 first commentary-only delta, tool-call delta, or unchanged content), the handler returned early, skipping `setActivityStatus(\"streaming\")` and `armStreamingWatchdog` -\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68399", - "created_at": "2026-04-18T04:24:04Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69338", + "created_at": "2026-04-20T13:11:26Z", "deletions": 4, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68399/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68399", + "files_url": "https://github.com/openclaw/openclaw/pull/69338/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69338", "labels": [ - "cli", - "size: S" + "size: XS" ], - "merged": false, - "number": 68399, - "review_comments_count": 1, + "merged": true, + "number": 69338, + "review_comments_count": 0, "state": "closed", - "title": "fix(cli): reject --agent on models set/set-image instead of silently writing global default", - "updated_at": "2026-04-19T01:15:29Z" + "title": "fix(tui): arm streaming watchdog on every delta, not only visible ones", + "updated_at": "2026-04-21T11:53:37Z" }, { - "additions": 23, - "author": "skernelx", + "additions": 6, + "author": "CCcassiusdjs", "author_association": "NONE", - "body_excerpt": "## Summary `sessions_spawn` currently hard-errors when `runtime=\"subagent\"` receives `streamTo` or `resumeSessionId`, even though the subagent code path never consumes either field. Schema-strict providers (most notably `gpt-5.4` via the O\u2026", - "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary - `extractAssistantVisibleText` returned `undefined` when a message had phased text blocks but no `final_answer` block yet, causing TUI to display nothing during streaming and for models that omit `` tags - Add a commenta\u2026", + "changed_files": 1, + "cluster_id": "cluster-32900-10", + "cluster_ids": [ + "cluster-32900-10" + ], + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68397", - "created_at": "2026-04-18T04:11:36Z", - "deletions": 26, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69337", + "created_at": "2026-04-20T13:10:37Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68397/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68397", + "files_url": "https://github.com/openclaw/openclaw/pull/69337/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69337", "labels": [ - "agents", "size: XS" ], "merged": false, - "number": 68397, - "review_comments_count": 0, + "number": 69337, + "review_comments_count": 2, "state": "open", - "title": "fix(sessions_spawn): silently strip ACP-only fields for runtime=subagent", - "updated_at": "2026-04-18T04:13:30Z" + "title": "fix(tui): show commentary-phase text when no final_answer blocks present", + "updated_at": "2026-04-20T13:14:14Z" }, { - "additions": 1713, - "author": "BunsDev", - "author_association": "MEMBER", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - Problem: OAuth authority drifted between OpenClaw auth profiles and `.codex/auth.json`, and local Codex callback/refresh paths could fail or hang in ways that looked like \"slow OAut\u2026", - "changed_files": 28, + "additions": 16, + "author": "mzogithub", + "author_association": "NONE", + "body_excerpt": "## TL;DR OpenAI removed the `/backend-api/responses` alias on `chatgpt.com` server-side. The OpenAI SDK appends `/responses` to the configured `baseUrl`, so OpenClaw's current `baseUrl` (`https://chatgpt.com/backend-api`) now resolves to `\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 8, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68396", - "created_at": "2026-04-18T04:10:20Z", - "deletions": 209, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69336", + "created_at": "2026-04-20T13:04:11Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68396/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68396", + "files_url": "https://github.com/openclaw/openclaw/pull/69336/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69336", "labels": [ - "docs", - "agents", - "maintainer", - "size: XL", + "size: XS", "extensions: openai" ], "merged": true, - "number": 68396, - "review_comments_count": 16, + "number": 69336, + "review_comments_count": 0, "state": "closed", - "title": "[codex] fix(auth): harden OAuth refresh and Codex CLI bootstrap flows", - "updated_at": "2026-04-18T06:09:33Z" + "title": "fix(openai-codex): use /backend-api/codex/ base URL", + "updated_at": "2026-04-21T02:21:05Z" }, { - "additions": 24, - "author": "MonkeyLeeT", + "additions": 80, + "author": "steipete", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Accept `agents.defaults.compaction.truncateAfterCompaction` in the Zod config schema and add regression coverage at both the leaf schema and public config validation layers. ## Root cause The public config type, help metadata, a\u2026", - "changed_files": 3, + "body_excerpt": "## Summary - remove extension-owned runtime packages from the root npm dependency graph - keep only genuinely shared runtime packages mirrored at the root - add package-manifest contract coverage so bundled plugin deps stay plugin-local ##\u2026", + "changed_files": 9, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68395", - "created_at": "2026-04-18T04:09:17Z", - "deletions": 0, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69335", + "created_at": "2026-04-20T13:00:50Z", + "deletions": 270, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68395/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68395", + "files_url": "https://github.com/openclaw/openclaw/pull/69335/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69335", "labels": [ - "size: XS" + "scripts", + "maintainer", + "size: S" ], - "merged": false, - "number": 68395, - "review_comments_count": 0, - "state": "open", - "title": "fix(config): accept truncateAfterCompaction", - "updated_at": "2026-04-19T02:14:30Z" + "merged": true, + "number": 69335, + "review_comments_count": 7, + "state": "closed", + "title": "fix(deps): remove extension-owned deps from root install", + "updated_at": "2026-04-20T14:03:12Z" }, { - "additions": 123, - "author": "lyfuci", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: When users set `plugins.allow` to a channel-style id (for example `[\"feishu\"]`) instead of the real plugin id (`openclaw-lark`), the loader still emits `plugins.allow is empty; discovered non-bundled plugins may auto-\u2026", + "additions": 39, + "author": "steipete", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - stop postinstall from installing every bundled extension runtime dependency by default - keep source-checkout pruning, dist pruning, legacy sidecars, and Baileys hotfix handling - retain an explicit `OPENCLAW_EAGER_BUNDLED_PLU\u2026", "changed_files": 3, - "cluster_id": "cluster-64729-9", - "cluster_ids": [ - "cluster-64729-9" - ], - "cluster_role": "member", + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68389", - "created_at": "2026-04-18T04:06:01Z", - "deletions": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69334", + "created_at": "2026-04-20T12:57:57Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68389/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68389", + "files_url": "https://github.com/openclaw/openclaw/pull/69334/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69334", "labels": [ - "size: S" + "scripts", + "maintainer", + "size: XS" ], - "merged": false, - "number": 68389, - "review_comments_count": 2, - "state": "open", - "title": "plugins: clarify allowlist warning when entries don't match discovered ids", - "updated_at": "2026-04-19T04:38:57Z" + "merged": true, + "number": 69334, + "review_comments_count": 5, + "state": "closed", + "title": "fix(plugins): stop eager bundled plugin dep install", + "updated_at": "2026-04-20T13:41:20Z" }, { - "additions": 846, - "author": "jacko2bot", + "additions": 621, + "author": "richardclawbot", "author_association": "NONE", - "body_excerpt": "## Summary Fixes #68329 \u2014 CLI-backed sessions skipped both pre-turn native compaction checks and post-turn context-engine/plugin maintenance, so context grew unbounded. For `claude-cli` specifically, compacting only OpenClaw's local transc\u2026", - "changed_files": 9, + "body_excerpt": "## Summary - skip the zero-diff ACP verification gate for persistent sessions and downgrade oneshot zero-diff runs with real progress output to blocked follow-up instead of hard failure - add the ACP worktree diff verifier and regression c\u2026", + "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68388", - "created_at": "2026-04-18T04:05:48Z", - "deletions": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69328", + "created_at": "2026-04-20T12:29:20Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68388/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68388", + "files_url": "https://github.com/openclaw/openclaw/pull/69328/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69328", "labels": [ - "commands", + "app: web-ui", "agents", "size: L" ], "merged": false, - "number": 68388, - "review_comments_count": 4, + "number": 69328, + "review_comments_count": 3, "state": "open", - "title": "fix(cli-backend): restore compaction lifecycle and rotate claude-cli sessions after compaction", - "updated_at": "2026-04-18T14:55:53Z" + "title": "fix(acp): avoid false zero-diff failures and append session messages", + "updated_at": "2026-04-20T12:35:20Z" }, { - "additions": 30, - "author": "bluesky6868", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: the exec secret resolver accepted any non-JSON single-value stdout verbatim when `jsonOnly: false`, including plugin/log noise followed by the intended scalar. - Why it matters: if an exec-backed resolver emits machin\u2026", - "changed_files": 2, + "additions": 6, + "author": "amknight", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary The slack extension's `BundledChannelEntryContract` pointed its `runtime` specifier at `./runtime-api.js` \u2014 a barrel module that re-exports the full slack runtime surface (29 chunks, ~284KB). The framework calls `setChannelRunti\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68384", - "created_at": "2026-04-18T03:48:19Z", - "deletions": 1, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68384/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68384", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69325", + "created_at": "2026-04-20T12:18:51Z", + "deletions": 2, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69325/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69325", "labels": [ + "channel: slack", + "maintainer", "size: XS" ], "merged": false, - "number": 68384, + "number": 69325, "review_comments_count": 0, - "state": "open", - "title": "fix(secrets): reject noisy plain exec stdout", - "updated_at": "2026-04-18T05:21:29Z" + "state": "closed", + "title": "perf(slack): narrow runtime-setter specifier to avoid loading 284KB barrel", + "updated_at": "2026-04-20T12:33:57Z" }, { - "additions": 74, - "author": "kagura-agent", + "additions": 38572, + "author": "100yenadmin", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68373 **Problem:** `restoreMemoryPluginState` from plugin cache overwrites memory capability with `undefined` because the cached snapshot was taken before capability registration. This causes wiki bridge import to return 0 artifacts\u2026", - "changed_files": 2, + "body_excerpt": "## Summary **Draft follow-up to [#68939](https://github.com/openclaw/openclaw/pull/68939)** \u2014 stacks on top of the plan-mode umbrella PR. Ships 5 code commits + 1 docs commit that harden the plan-mode 1.0 release. This PR's diff intentiona\u2026", + "changed_files": 201, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68382", - "created_at": "2026-04-18T03:39:40Z", - "deletions": 11, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68382/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68382", + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69324", + "created_at": "2026-04-20T12:18:44Z", + "deletions": 335, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69324/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69324", "labels": [ - "size: S" + "docs", + "channel: telegram", + "app: macos", + "app: web-ui", + "gateway", + "commands", + "agents", + "size: XL", + "extensions: openai" ], "merged": false, - "number": 68382, - "review_comments_count": 3, - "state": "closed", - "title": "fix(plugins): preserve existing capability during plugin cache state restore", - "updated_at": "2026-04-18T12:49:20Z" + "number": 69324, + "review_comments_count": 0, + "state": "open", + "title": "feat(plan-mode): 1.0 release follow-up \u2014 hardening + Telegram attachment + config + security + DX (stacks on #68939)", + "updated_at": "2026-04-20T12:19:29Z" }, { - "additions": 141, - "author": "chrisabad", + "additions": 96, + "author": "tdack", "author_association": "NONE", - "body_excerpt": "## Summary Adds a `maxExecutionMs` per-task timeout configuration to the command queue, preventing individual tasks from blocking the lane indefinitely. ## Changes - `src/process/command-queue.ts`: Add `maxExecutionMs` option, enforce time\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Adds per-agent TTS configuration override support, allowing individual agents to customize TTS settings independently: - **Problem:** All agents shared global TTS configuration, preventing per-agent customization. - **Why it mat\u2026", + "changed_files": 9, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68381", - "created_at": "2026-04-18T03:36:42Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69323", + "created_at": "2026-04-20T12:15:40Z", + "deletions": 26, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68381/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68381", + "files_url": "https://github.com/openclaw/openclaw/pull/69323/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69323", "labels": [ + "agents", "size: S" ], "merged": false, - "number": 68381, - "review_comments_count": 4, + "number": 69323, + "review_comments_count": 16, "state": "open", - "title": "feat: add maxExecutionMs per-task timeout to command lane", - "updated_at": "2026-04-19T02:46:56Z" + "title": "feat: add per-agent TTS configuration override support", + "updated_at": "2026-04-21T13:25:19Z" }, { - "additions": 141, - "author": "m0x14o", + "additions": 199, + "author": "sk7n4k3d", "author_association": "NONE", - "body_excerpt": "## Summary - preserve existing launchd proxy environment variables when reinstalling the macOS LaunchAgent without proxy vars in the current shell - keep explicit proxy overrides while filling missing proxy keys from the existing plist - d\u2026", + "body_excerpt": "## Summary Fixes #69295. `doctor.memory.status` previously returned vector-memory readiness for the active default agent only. Dashboards that want to show memory state for every configured agent had to shell out to the CLI, which can hang\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68377", - "created_at": "2026-04-18T03:05:16Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69322", + "created_at": "2026-04-20T12:15:36Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68377/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68377", + "files_url": "https://github.com/openclaw/openclaw/pull/69322/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69322", "labels": [ "docs", "gateway", "size: S" ], "merged": false, - "number": 68377, + "number": 69322, "review_comments_count": 2, "state": "open", - "title": "fix(daemon): preserve launchd proxy env on reinstall", - "updated_at": "2026-04-18T03:09:08Z" + "title": "gateway: expose per-agent memory status in doctor.memory.status", + "updated_at": "2026-04-20T12:24:00Z" }, { - "additions": 419, - "author": "hxy91819", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Add two custom lint rules to prevent credential leaks via the config API - Fix uncovered URL config fields (`browser.cdpUrl`, `gateway.remote.url`) ### Lint 1: `check-no-redact-import-in-runtime.mjs` Ensures runtime code (brow\u2026", - "changed_files": 9, + "additions": 25, + "author": "tdack", + "author_association": "NONE", + "body_excerpt": "## Summary Adds complete Google Gemini TTS speech provider implementation with audioProfile support: - **Problem:** OpenClaw Gemini TTS provider exists but lacks audioProfile support for voice personality customization. - **Why it matters:\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68375", - "created_at": "2026-04-18T02:53:44Z", - "deletions": 15, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69321", + "created_at": "2026-04-20T12:15:24Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68375/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68375", + "files_url": "https://github.com/openclaw/openclaw/pull/69321/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69321", "labels": [ - "scripts", - "maintainer", - "size: M" + "size: XS" ], "merged": false, - "number": 68375, - "review_comments_count": 13, + "number": 69321, + "review_comments_count": 10, "state": "open", - "title": "lint: add config redact coverage guards", - "updated_at": "2026-04-18T09:59:24Z" + "title": "feat: add audioProfile support to Gemini TTS config", + "updated_at": "2026-04-21T09:44:53Z" }, { - "additions": 52, - "author": "chrisabad", + "additions": 455, + "author": "sk7n4k3d", "author_association": "NONE", - "body_excerpt": "## Summary Tool results written to the session JSONL are now capped at `SESSION_MAX_TOOL_RESULT_CHARS` (50KB / 51,200 chars) to prevent oversized `exec`/`read`/`web_fetch` output from inflating session files and consuming the entire contex\u2026", - "changed_files": 4, + "body_excerpt": "Fixes #69299. Adds a `skills.uninstall` Gateway RPC method, mirroring `skills.install`, so operators can remove an installed ClawHub skill from the default agent workspace over the Gateway control plane. ## Changes - Schema: `SkillsUninsta\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68372", - "created_at": "2026-04-18T02:47:00Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69319", + "created_at": "2026-04-20T12:05:15Z", "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68372/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68372", + "files_url": "https://github.com/openclaw/openclaw/pull/69319/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69319", "labels": [ + "docs", + "app: macos", + "app: web-ui", + "gateway", "agents", - "size: S" + "size: M" ], "merged": false, - "number": 68372, - "review_comments_count": 5, + "number": 69319, + "review_comments_count": 3, "state": "open", - "title": "feat: add session-persistence truncation cap for tool results", - "updated_at": "2026-04-19T02:41:46Z" + "title": "gateway: register skills.uninstall RPC (mirror of skills.install)", + "updated_at": "2026-04-20T17:16:34Z" }, { - "additions": 1838, - "author": "OpenCodeEngineer", - "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68369 ## Problem The \"new chat\" welcome state and message thread stretch to the full width of the content area. This is a regression \u2014 the fix was implemented on branch `issue-57235-web-sessions` (commit `0df41d246c`) but never merg\u2026", - "changed_files": 43, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "additions": 20, + "author": "sk7n4k3d", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #69241. The GitHub Copilot provider's default model list was missing several models that Copilot actually serves today. Adding: - `claude-opus-4.7` (latest Anthropic Opus, top of list for default preference) - `claude-opus\u2026", + "changed_files": 2, + "cluster_id": "cluster-69241-4", + "cluster_ids": [ + "cluster-69241-4" + ], + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68370", - "created_at": "2026-04-18T02:33:31Z", - "deletions": 49, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69318", + "created_at": "2026-04-20T11:53:56Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68370/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68370", + "files_url": "https://github.com/openclaw/openclaw/pull/69318/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69318", "labels": [ - "app: web-ui", - "gateway", - "agents", - "size: XL" + "size: XS" ], "merged": false, - "number": 68370, - "review_comments_count": 1, - "state": "closed", - "title": "Web UI: constrain chat thread and input to 920px max-width", - "updated_at": "2026-04-18T02:41:25Z" + "number": 69318, + "review_comments_count": 0, + "state": "open", + "title": "github-copilot: expand default model list with Opus 4.7, 4.5, Haiku 4.5, Gemini 2.5 Pro", + "updated_at": "2026-04-20T11:55:56Z" }, { - "additions": 770, - "author": "visionik", + "additions": 572, + "author": "amknight", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Relax the gateway's default Permissions-Policy so the control-ui's own origin can use the microphone. The prior value denied microphone access for every origin (including the page itself), which silently blocked the chat view's\u2026", - "changed_files": 3, + "body_excerpt": "## Summary Slack startup-perf changes that drop slack's cold `register()` from **14.1s \u2192 6.2s (-56%)** on top of #69316. Work is shifted off the cold path so it only happens when actually exercised. Validated end-to-end via dist-mode gatew\u2026", + "changed_files": 9, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68368", - "created_at": "2026-04-18T02:29:05Z", - "deletions": 5, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69317", + "created_at": "2026-04-20T11:49:47Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68368/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68368", + "files_url": "https://github.com/openclaw/openclaw/pull/69317/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69317", "labels": [ - "gateway", + "channel: slack", "maintainer", "size: L" ], - "merged": true, - "number": 68368, - "review_comments_count": 0, - "state": "closed", - "title": "fix(gateway): allow microphone access for same-origin in Permissions-Policy header", - "updated_at": "2026-04-18T03:03:51Z" + "merged": false, + "number": 69317, + "review_comments_count": 4, + "state": "open", + "title": "perf(slack): narrow runtime-setter + lazy-load 4 modules + narrow 2 SDK surfaces", + "updated_at": "2026-04-21T03:47:54Z" }, { - "additions": 97, - "author": "neeravmakwana", + "additions": 255, + "author": "amknight", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: Under OpenClaw's `google-gemini-cli` model provider, the Gemini CLI is driven non-interactively via `--prompt`, and its default per-tool approval mode silently strips built-in tools that require confirmation (`write_f\u2026", - "changed_files": 6, + "body_excerpt": "## Summary - memoize plugin loader alias maps by effective resolution context - reuse the resolved Jiti loader config/cache key on hot loader-cache hits - bound the loader alias/config caches to avoid unbounded growth on unique module path\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68366", - "created_at": "2026-04-18T02:27:04Z", - "deletions": 12, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69316", + "created_at": "2026-04-20T11:46:16Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68366/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68366", + "files_url": "https://github.com/openclaw/openclaw/pull/69316/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69316", "labels": [ - "docs", - "gateway", - "agents", - "size: S" + "maintainer", + "size: M" ], - "merged": false, - "number": 68366, - "review_comments_count": 0, - "state": "open", - "title": "Google Gemini CLI: pass --yolo so non-interactive --prompt invocations expose write/edit tools (#68216)", - "updated_at": "2026-04-18T02:56:18Z" + "merged": true, + "number": 69316, + "review_comments_count": 1, + "state": "closed", + "title": "perf: memoize plugin loader alias maps", + "updated_at": "2026-04-20T14:17:02Z" }, { - "additions": 6, - "author": "jjmk6", - "author_association": "NONE", - "body_excerpt": "## Summary Fix broken internal links and display text consistency reported in issue #50828. ### Changes - `docs/plugins/manifest.md`: `/configuration` \u2192 `/configuration-reference` - `docs/gateway/troubleshooting.md`: - Link paths: `/gatewa\u2026", - "changed_files": 3, + "additions": 266, + "author": "garrytan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Context I'm building a plugin that wraps subagent execution in a durable job queue: crash recovery, retry with backoff, timeout enforcement. The `DetachedTaskLifecycleRuntime` seam (#68886) and plugin registration contract (#68915) give\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68365", - "created_at": "2026-04-18T02:14:46Z", - "deletions": 6, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69313", + "created_at": "2026-04-20T11:29:58Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68365/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68365", + "files_url": "https://github.com/openclaw/openclaw/pull/69313/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69313", "labels": [ "docs", - "gateway", - "size: XS" + "commands", + "size: M" ], - "merged": false, - "number": 68365, - "review_comments_count": 0, - "state": "open", - "title": "docs: fix broken links and display text consistency (fixes #50828)", - "updated_at": "2026-04-18T02:16:10Z" + "merged": true, + "number": 69313, + "review_comments_count": 9, + "state": "closed", + "title": "tasks: add detached task recovery hook before markLost", + "updated_at": "2026-04-20T23:06:18Z" }, { - "additions": 20, - "author": "jasonmakr", + "additions": 287, + "author": "Jerry-Xin", "author_association": "NONE", - "body_excerpt": "## Problem `buildNarrativeSessionKey` includes a millisecond timestamp (`nowMs` from `Date.now()`) in the session key, making it unique per dream run: ```ts return `dreaming-narrative-${params.phase}-${workspaceHash}-${params.nowMs}`; ```\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Fixes #69311 `splitMediaFromOutput()` incorrectly extracts `MEDIA:` directives from 4-space/tab indented code blocks because `parseFenceSpans()` only recognizes fenced (`\\`\\`\\``/`~~~`) code blocks. This causes code lines to be s\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68364", - "created_at": "2026-04-18T02:14:36Z", - "deletions": 10, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69312", + "created_at": "2026-04-20T11:27:52Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68364/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68364", + "files_url": "https://github.com/openclaw/openclaw/pull/69312/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69312", "labels": [ - "extensions: memory-core", - "size: XS" + "size: M" ], "merged": false, - "number": 68364, - "review_comments_count": 1, + "number": 69312, + "review_comments_count": 2, "state": "open", - "title": "fix: prevent unbounded narrative session growth by stabilizing session key (#68354)", - "updated_at": "2026-04-18T02:19:06Z" + "title": "fix: prevent MEDIA: false-positive extraction from indented code blocks", + "updated_at": "2026-04-21T12:17:46Z" }, { - "additions": 558, - "author": "mcaxtr", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: after wiring WhatsApp runtime to honor `accounts.default`, schema validation, runtime compat, and live monitor behavior still had several mismatches around debounce, self-chat, and inherited group/default-account beha\u2026", - "changed_files": 20, + "additions": 573, + "author": "Jerry-Xin", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #69309 When a `MEDIA:` directive fails (path not in allowlist, file not found, etc.), OpenClaw Core silently drops the media item. Users and agents receive no feedback. This PR surfaces those failures as user-visible warni\u2026", + "changed_files": 16, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68362", - "created_at": "2026-04-18T02:08:44Z", - "deletions": 97, + "comments_count": 11, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69310", + "created_at": "2026-04-20T11:26:13Z", + "deletions": 25, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68362/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68362", + "files_url": "https://github.com/openclaw/openclaw/pull/69310/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69310", "labels": [ - "docs", - "channel: whatsapp-web", - "commands", - "maintainer", "size: L" ], "merged": false, - "number": 68362, - "review_comments_count": 3, - "state": "closed", - "title": "fix(whatsapp): align config schema and monitor behavior", - "updated_at": "2026-04-18T03:18:25Z" + "number": 69310, + "review_comments_count": 34, + "state": "open", + "title": "fix: surface dropped media to users instead of silently swallowing", + "updated_at": "2026-04-21T16:21:31Z" }, { - "additions": 572, - "author": "mcaxtr", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: WhatsApp runtime, setup output, and security path guidance still disagreed on whether shared multi-account defaults live at channel root or under `channels.whatsapp.accounts.default`. - Why it matters: runtime compat\u2026", - "changed_files": 14, + "additions": 93, + "author": "sk7n4k3d", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Fix `getShellConfig()` so `exec` no longer exits with code 1 when `process.env.SHELL` is a non-interactive placeholder such as `/usr/bin/false`, `/bin/false`, `/usr/sbin/nologin`, or `/sbin/nologin`. - Apply the same filter to\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68361", - "created_at": "2026-04-18T02:07:49Z", - "deletions": 50, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69308", + "created_at": "2026-04-20T11:19:01Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68361/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68361", + "files_url": "https://github.com/openclaw/openclaw/pull/69308/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69308", "labels": [ - "channel: whatsapp-web", - "maintainer", - "size: L" + "agents", + "size: S" ], - "merged": false, - "number": 68361, - "review_comments_count": 2, + "merged": true, + "number": 69308, + "review_comments_count": 0, "state": "closed", - "title": "fix(whatsapp): wire shared defaults through accounts.default", - "updated_at": "2026-04-18T03:18:21Z" + "title": "shell: fall back to sh when SHELL is /usr/bin/false or nologin", + "updated_at": "2026-04-21T07:18:12Z" }, { - "additions": 281, - "author": "mcaxtr", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: after introducing account-scoped WhatsApp group session keys, legacy activation state still lived on the old unsuffixed key and activation-only entries could be misread or reused incorrectly. - Why it matters: named-a\u2026", - "changed_files": 5, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68360", - "created_at": "2026-04-18T02:07:11Z", - "deletions": 44, + "additions": 112, + "author": "sk7n4k3d", + "author_association": "NONE", + "body_excerpt": "## Summary - Problem: \\`openclaw wiki ingest \\`, \\`openclaw wiki scan \\`, and every other leaf command with a positional argument emits a zsh completion function that lists options only. Typing \\`openclaw wiki ingest T\\` tr\u2026", + "changed_files": 2, + "cluster_id": "cluster-69293-4", + "cluster_ids": [ + "cluster-69293-4" + ], + "cluster_role": "member", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69305", + "created_at": "2026-04-20T11:10:08Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68360/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68360", + "files_url": "https://github.com/openclaw/openclaw/pull/69305/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69305", "labels": [ - "channel: whatsapp-web", - "maintainer", - "size: M" + "cli", + "size: S" ], "merged": false, - "number": 68360, - "review_comments_count": 5, - "state": "closed", - "title": "fix(whatsapp): preserve scoped group activation backfill", - "updated_at": "2026-04-18T03:18:10Z" + "number": 69305, + "review_comments_count": 4, + "state": "open", + "title": "CLI: complete positional args in zsh completion", + "updated_at": "2026-04-20T11:51:50Z" }, { - "additions": 640, - "author": "mcaxtr", - "author_association": "MEMBER", - "body_excerpt": "## Summary - Problem: WhatsApp inbound policy and group-session routing for named accounts were spread across multiple monitor paths, making later multi-account fixes hard to apply consistently. - Why it matters: named accounts need an acc\u2026", - "changed_files": 19, + "additions": 562, + "author": "haishmg", + "author_association": "NONE", + "body_excerpt": "Closes #69233 ## What changed This adds an optional per-group WhatsApp admin override via `channels.whatsapp.groups..admin` and wildcard `channels.whatsapp.groups.\"*\".admin`. When an admin is configured for a group scope: - the config\u2026", + "changed_files": 15, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68359", - "created_at": "2026-04-18T02:06:37Z", - "deletions": 177, + "comments_count": 7, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69297", + "created_at": "2026-04-20T10:19:40Z", + "deletions": 8, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68359/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68359", + "files_url": "https://github.com/openclaw/openclaw/pull/69297/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69297", "labels": [ + "docs", "channel: whatsapp-web", - "maintainer", "size: L" ], "merged": false, - "number": 68359, - "review_comments_count": 5, - "state": "closed", - "title": "fix(whatsapp): centralize inbound policy and scoped group routes", - "updated_at": "2026-04-18T03:18:05Z" + "number": 69297, + "review_comments_count": 17, + "state": "open", + "title": "fix(whatsapp): Add group admin privacy controls", + "updated_at": "2026-04-20T17:59:16Z" }, { - "additions": 0, - "author": "XxXKoZXxX", + "additions": 81, + "author": "chaosreload", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 0, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68358", - "created_at": "2026-04-18T02:05:23Z", - "deletions": 0, + "body_excerpt": "## Problem When a globally- or workspace-installed plugin declares channels in its manifest (e.g. a third-party plugin declares `channels: [\"acme-chat\"]`), OpenClaw's plugin loader already auto-discovers and loads it from `~/.openclaw/exte\u2026", + "changed_files": 3, + "cluster_id": "cluster-20478-13", + "cluster_ids": [ + "cluster-20478-13" + ], + "cluster_role": "member", + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69292", + "created_at": "2026-04-20T10:11:33Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68358/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68358", + "files_url": "https://github.com/openclaw/openclaw/pull/69292/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69292", "labels": [ - "size: XS" + "size: S" ], "merged": false, - "number": 68358, - "review_comments_count": 0, - "state": "closed", - "title": "clawmerge", - "updated_at": "2026-04-18T02:25:59Z" + "number": 69292, + "review_comments_count": 2, + "state": "open", + "title": "fix(doctor): skip plugins.entries for installed plugins already auto-loaded via manifest channels", + "updated_at": "2026-04-21T07:18:24Z" }, { - "additions": 1, - "author": "samimjafari", - "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 1, + "additions": 23, + "author": "xialonglee", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - Fix reasoning-tag filtering in streaming paths to recognize namespaced tags like `...`. - Align streaming tag parsing with existing final-text sanitization behavior so reasoning text is consist\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68356", - "created_at": "2026-04-18T01:57:49Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69288", + "created_at": "2026-04-20T09:57:21Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68356/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68356", + "files_url": "https://github.com/openclaw/openclaw/pull/69288/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69288", "labels": [ + "agents", "size: XS" ], "merged": false, - "number": 68356, - "review_comments_count": 1, - "state": "closed", - "title": " alpha", - "updated_at": "2026-04-18T01:59:46Z" + "number": 69288, + "review_comments_count": 0, + "state": "open", + "title": "fix(agents): strip antml thinking tags in streaming", + "updated_at": "2026-04-21T12:43:15Z" }, { - "additions": 35, - "author": "kagura-agent", - "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68347 **Problem:** `WakeParamsSchema` used `additionalProperties: false` (AJV), rejecting unknown properties like `paperclip` injected by Paperclip 2026.416.0 in wake payloads. **Fix:** Changed to `additionalProperties: true` so unk\u2026", + "additions": 54, + "author": "matsuri1987", + "author_association": "NONE", + "body_excerpt": "## Summary Fixes #69281 When `delivery.mode` is `\"none\"`, `dispatchCronDelivery` now returns `delivered: undefined` instead of `delivered: false`. This allows `resolveDeliveryStatus` to correctly return `\"not-requested\"` instead of `\"not-d\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68355", - "created_at": "2026-04-18T01:48:10Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69285", + "created_at": "2026-04-20T09:44:56Z", + "deletions": 15, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68355/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68355", + "files_url": "https://github.com/openclaw/openclaw/pull/69285/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69285", "labels": [ - "app: web-ui", - "gateway", - "size: XS" + "size: S" ], "merged": true, - "number": 68355, - "review_comments_count": 1, + "number": 69285, + "review_comments_count": 2, "state": "closed", - "title": "fix: allow unknown properties in WakeParams schema (#68347)", - "updated_at": "2026-04-18T03:40:27Z" + "title": "fix(cron): return undefined for delivered when delivery not requested", + "updated_at": "2026-04-20T13:16:11Z" }, { - "additions": 202, - "author": "neeravmakwana", + "additions": 3, + "author": "MoerAI", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: OpenRouter model runs (e.g. `openrouter/google/gemini-2.5-flash`, Grok 4.x, minimax-m2.7) return blank responses with `stopReason=stop payloads=0` and surface `\u26a0\ufe0f Agent couldn't generate a response`. - Why it matters:\u2026", - "changed_files": 3, + "body_excerpt": "## Summary The iMessage channel health monitor falsely detects idle iMessage channels as dead sockets, causing 59+ unnecessary provider restarts per 48 hours during normal idle periods. ## Root Cause The channel health monitor uses a fixed\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68351", - "created_at": "2026-04-18T01:35:24Z", - "deletions": 14, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69283", + "created_at": "2026-04-20T09:39:18Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68351/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68351", + "files_url": "https://github.com/openclaw/openclaw/pull/69283/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69283", "labels": [ - "agents", - "size: M" + "channel: imessage", + "size: XS" ], "merged": false, - "number": 68351, - "review_comments_count": 5, - "state": "closed", - "title": "fix(openrouter): surface reasoning_details visible-text as user output (#68261)", - "updated_at": "2026-04-18T02:12:23Z" + "number": 69283, + "review_comments_count": 1, + "state": "open", + "title": "fix(imessage): skip stale-socket health check for iMessage channel (#35072)", + "updated_at": "2026-04-21T09:07:08Z" }, { - "additions": 556, - "author": "YoungMoneyInvestments", + "additions": 3, + "author": "sukhdeepjohar", "author_association": "NONE", - "body_excerpt": "## Summary - thread reply-routing idempotency keys through outbound delivery and Telegram send paths - dedupe Telegram sends by account/chat/idempotency key to prevent duplicate routed replies - normalize raw Discord send/poll targets to c\u2026", - "changed_files": 14, + "body_excerpt": "## Summary - Add missing `truncateAfterCompaction: z.boolean().optional()` to the compaction zod schema - Regenerate config baseline hash The field is declared in the TypeScript type (`types.agent-defaults.ts:451`), read at runtime (`compa\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68350", - "created_at": "2026-04-18T01:31:11Z", - "deletions": 330, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69282", + "created_at": "2026-04-20T09:25:35Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68350/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68350", + "files_url": "https://github.com/openclaw/openclaw/pull/69282/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69282", "labels": [ - "channel: discord", - "channel: telegram", - "size: L" + "docs", + "size: XS" ], "merged": false, - "number": 68350, - "review_comments_count": 1, + "number": 69282, + "review_comments_count": 0, "state": "open", - "title": "fix: harden channel reply routing", - "updated_at": "2026-04-18T19:26:06Z" + "title": "fix(config): add truncateAfterCompaction to compaction zod schema", + "updated_at": "2026-04-20T09:26:31Z" }, { - "additions": 161, - "author": "neeravmakwana", + "additions": 43, + "author": "stainlu", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - Problem: On a local Ollama setup, a Modelfile `PARAMETER num_ctx 32768` override was ignored during discovery (only the base model's `.context_length` was read), which tripped `context-window-guard` with \"Model context window\u2026", - "changed_files": 5, + "body_excerpt": "## Summary - **Problem:** On a fresh session, the main agent does not respond to user messages. Two reproducible failure modes: (1) the agent replies with the literal string `HEARTBEAT_OK`, which the delivery runtime treats as \"no reply\" a\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68349", - "created_at": "2026-04-18T01:23:51Z", - "deletions": 12, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69278", + "created_at": "2026-04-20T09:00:48Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68349/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68349", + "files_url": "https://github.com/openclaw/openclaw/pull/69278/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69278", "labels": [ - "docs", - "size: S" + "agents", + "size: XS" ], "merged": false, - "number": 68349, - "review_comments_count": 2, + "number": 69278, + "review_comments_count": 0, "state": "open", - "title": "Ollama: honor Modelfile num_ctx and auto-detect tool support", - "updated_at": "2026-04-19T06:41:39Z" + "title": "fix(agents): stop injecting heartbeat system prompt on non-heartbeat runs (#69079)", + "updated_at": "2026-04-21T16:07:45Z" }, { - "additions": 2, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes openclaw#68282 The `openclaw status` and related status commands are slow on a fresh process because doctor contract loading uses the slow jiti path instead of native loading for built artifacts. ## Root Cause The `getJiti\u2026", - "changed_files": 1, + "additions": 265, + "author": "broBinChen", + "author_association": "NONE", + "body_excerpt": "## Summary - **Problem:** Reasoning emitted by the agent runtime via `emitAgentEvent({ stream: \"thinking\", ... })` (see `src/agents/pi-embedded-subscribe.ts:emitReasoningStream`) never reached chat broadcasts. `createAgentEventHandler` onl\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68348", - "created_at": "2026-04-18T01:18:46Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69277", + "created_at": "2026-04-20T08:58:29Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68348/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68348", + "files_url": "https://github.com/openclaw/openclaw/pull/69277/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69277", "labels": [ - "size: XS" + "gateway", + "size: M" ], "merged": false, - "number": 68348, - "review_comments_count": 0, - "state": "open", - "title": "fix: use native loading for doctor contract API to speed up status command", - "updated_at": "2026-04-18T01:22:02Z" + "number": 69277, + "review_comments_count": 3, + "state": "closed", + "title": "fix(gateway): surface stream:\"thinking\" events in chat broadcasts", + "updated_at": "2026-04-20T12:04:51Z" }, { - "additions": 69, - "author": "kagura-agent", + "additions": 105, + "author": "stainlu", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Problem Image attachments are dropped with 'model does not support images' even when the model has image capability configured. The issue is in `resolveGatewayModelSupportsImages()` which uses case-sensitive exact matching on model ID,\u2026", + "body_excerpt": "## Summary - **Problem:** When `mcp.servers` is configured and a cron job spawns an isolated agent session that uses an MCP tool, the MCP child subprocess (e.g. Lightpanda) is spawned fresh every run and never terminated. Each cron fire le\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68346", - "created_at": "2026-04-18T01:05:24Z", - "deletions": 5, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69276", + "created_at": "2026-04-20T08:57:09Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68346/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68346", + "files_url": "https://github.com/openclaw/openclaw/pull/69276/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69276", "labels": [ - "gateway", "size: S" ], "merged": false, - "number": 68346, - "review_comments_count": 1, - "state": "closed", - "title": "fix: use normalized model lookup in resolveGatewayModelSupportsImages (#68272)", - "updated_at": "2026-04-18T12:49:15Z" + "number": 69276, + "review_comments_count": 0, + "state": "open", + "title": "fix(cron): dispose bundled-MCP subprocesses after isolated cron agent runs (#68623)", + "updated_at": "2026-04-20T18:22:49Z" }, { - "additions": 669, - "author": "fangguisheng520", + "additions": 11, + "author": "broBinChen", "author_association": "NONE", - "body_excerpt": "\u2026nguages ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue la\u2026", - "changed_files": 27, - "cluster_id": "cluster-67921-3", - "cluster_ids": [ - "cluster-67921-3" - ], - "cluster_role": "member", + "body_excerpt": "## Summary - **Problem:** The `openclaw acp` bridge constructs its `GatewayClient` without a `caps` array. The gateway uses `caps` to decide which event firehoses to forward \u2014 specifically `wantsToolEvents` (see `src/gateway/server-methods\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68345", - "created_at": "2026-04-18T01:00:50Z", - "deletions": 649, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69275", + "created_at": "2026-04-20T08:56:22Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68345/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68345", + "files_url": "https://github.com/openclaw/openclaw/pull/69275/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69275", "labels": [ - "app: web-ui", - "size: M" + "size: XS" ], "merged": false, - "number": 68345, - "review_comments_count": 6, - "state": "open", - "title": "Modify several web pages by hard-coding the language into multiple la\u2026", - "updated_at": "2026-04-18T01:52:23Z" + "number": 69275, + "review_comments_count": 0, + "state": "closed", + "title": "fix(acp): declare TOOL_EVENTS capability so live tool calls reach ACP clients", + "updated_at": "2026-04-20T12:04:59Z" }, { - "additions": 18, - "author": "yxjsxy", + "additions": 61, + "author": "Bartok9", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - allow `extensions.ollama.config.baseUrl` in the Ollama plugin config schema - add a focused test to lock the schema entry in place - align plugin schema with existing runtime behavior and docs for remote Ollama hosts ## Proble\u2026", + "body_excerpt": "## Summary `openclaw tasks audit` reports false-positive `inconsistent_timestamps` warnings on the majority of tasks (both succeeded and failed), making the audit output noisy and hiding real issues. ## Root Cause Tasks frequently start be\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68342", - "created_at": "2026-04-18T00:21:13Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69273", + "created_at": "2026-04-20T08:43:38Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68342/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68342", + "files_url": "https://github.com/openclaw/openclaw/pull/69273/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69273", "labels": [ - "size: XS" + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68342, - "review_comments_count": 1, + "number": 69273, + "review_comments_count": 0, "state": "closed", - "title": "fix(ollama): allow baseUrl in plugin config schema", - "updated_at": "2026-04-18T18:45:29Z" + "title": "fix(tasks): add tolerance for startedAt before createdAt in task audit", + "updated_at": "2026-04-20T08:45:15Z" }, { - "additions": 150, - "author": "thesomewhatyou", - "author_association": "CONTRIBUTOR", - "body_excerpt": "- [x] Mark as AI-assisted in the PR title or description - [x] Note the degree of testing (lightly tested) - [x] Confirm you understand what the code does This PR fixes multiple critical bugs and vulnerabilities found during a repository a\u2026", - "changed_files": 6, + "additions": 443, + "author": "de1tydev", + "author_association": "NONE", + "body_excerpt": "## Summary Restore session invariants across compaction and reset instead of patching each symptom in isolation. This coordinated fix now covers four connected paths: - subscribe-time `before_compaction` / `after_compaction` hook context -\u2026", + "changed_files": 19, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68341", - "created_at": "2026-04-18T00:18:46Z", - "deletions": 152, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69270", + "created_at": "2026-04-20T08:31:17Z", + "deletions": 17, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68341/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68341", + "files_url": "https://github.com/openclaw/openclaw/pull/69270/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69270", "labels": [ "gateway", "agents", "size: M" ], "merged": false, - "number": 68341, - "review_comments_count": 10, + "number": 69270, + "review_comments_count": 7, "state": "open", - "title": "fix: remediate critical vulnerabilities and logic regressions", - "updated_at": "2026-04-18T01:23:56Z" + "title": "fix(compaction): restore session invariants across compaction and reset", + "updated_at": "2026-04-21T06:37:46Z" }, { - "additions": 96, - "author": "anniesurla", + "additions": 595, + "author": "mzogithub", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", + "body_excerpt": "## Summary Two related bugs that made Anthropic sessions (specifically Claude Opus 4.7 with adaptive thinking) unusable when the pi-coding-agent wrapper was active. ### Bug 1 \u2014 `thinking.type.enabled` rejected by Opus 4.7 **Symptom:** API\u2026", "changed_files": 7, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68339", - "created_at": "2026-04-18T00:06:08Z", - "deletions": 6, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69268", + "created_at": "2026-04-20T08:25:28Z", + "deletions": 21, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68339/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68339", + "files_url": "https://github.com/openclaw/openclaw/pull/69268/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69268", "labels": [ - "docs", - "size: S", - "extensions: nvidia" + "agents", + "size: L" ], "merged": false, - "number": 68339, - "review_comments_count": 5, + "number": 69268, + "review_comments_count": 4, "state": "open", - "title": "fix(nvidia): wire onboarding auth and document NIM endpoint", - "updated_at": "2026-04-18T00:31:28Z" + "title": "fix(anthropic): Opus 4.7 thinking.type leak + assistant-prefill short-circuit", + "updated_at": "2026-04-21T06:55:38Z" }, { - "additions": 65, - "author": "evgyur", - "author_association": "NONE", - "body_excerpt": "## Summary - Parse empty `MEDIA:` directives whose media path appears on the following line. - Preserve ordered text/media segments when consuming the continuation path. - Keep the change scoped to media output parsing only; no delivery, r\u2026", + "additions": 17, + "author": "nightq", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Adds logging for all 4xx error responses in the hook gateway handler to improve debuggability. ## Root Cause When hook POSTs fail validation (HTTP 400), no trace is left in the gateway journal. This makes it difficult to diagnos\u2026", + "changed_files": 1, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69267", + "created_at": "2026-04-20T08:14:25Z", + "deletions": 1, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69267/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69267", + "labels": [ + "gateway", + "size: XS", + "r: too-many-prs" + ], + "merged": false, + "number": 69267, + "review_comments_count": 3, + "state": "closed", + "title": "fix: add logging for 4xx hook gateway errors", + "updated_at": "2026-04-20T08:38:51Z" + }, + { + "additions": 147, + "author": "EronFan", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem Webchat \u4e2d\u7528\u6237\u6d88\u606f\u53d1\u9001\u540e\u4f1a\u77ed\u6682\u51fa\u73b0\uff0c\u7136\u540e\u5728\u5386\u53f2\u5237\u65b0\u3001\u9519\u8bef\u6216\u91cd\u8fde\u540e\u6d88\u5931\u3002 ## Root cause \u524d\u7aef up()/loadChatHistory() \u7528\u670d\u52a1\u7aef chat.history \u5168\u91cf\u8986\u76d6\u672c\u5730 chatMessages\uff1b\u4f46 gateway \u5bf9\u7528\u6237\u6d88\u606f transcript \u7684\u5199\u5165\u662f\u5f02\u6b65\u7684\uff08emitUserTranscriptUpdate\uff09\uff0c\u5bfc\u81f4\u5386\u53f2\u5237\u65b0\u53ef\u80fd\u5148\u4e8e transcript \u843d\u76d8\uff0c\u5f62\u6210 race\u3002 ## Fix \u53d1\u9001\u7528\u6237\u6d88\u606f\u65f6\u7ed9\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68338", - "created_at": "2026-04-18T00:06:06Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69266", + "created_at": "2026-04-20T08:07:27Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68338/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68338", + "files_url": "https://github.com/openclaw/openclaw/pull/69266/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69266", "labels": [ - "size: S" + "app: web-ui", + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68338, + "number": 69266, "review_comments_count": 2, - "state": "open", - "title": "Parse multiline MEDIA directives", - "updated_at": "2026-04-18T06:57:53Z" + "state": "closed", + "title": "fix(webchat): preserve optimistic user messages during history reload", + "updated_at": "2026-04-20T08:11:25Z" }, { - "additions": 5, - "author": "jlapenna", + "additions": 172, + "author": "slepybear", "author_association": "CONTRIBUTOR", - "body_excerpt": "Add explicit warning on Docker deployment for ACP tools Clarifies that ACP harness CLI tools (such as `@google/gemini-cli`, `@mariozechner/pi-coding-agent`) must be installed on the `gateway` container rather than the `sandbox` container b\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Add test coverage for two Chinese AI provider extensions (`qianfan` and `kimi-coding`) that currently have no tests. - **qianfan (\u767e\u5ea6\u5343\u5e06)**: 6 tests covering provider registration, auth resolution, model catalog, and model propert\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68337", - "created_at": "2026-04-18T00:05:20Z", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69263", + "created_at": "2026-04-20T08:01:39Z", "deletions": 0, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68337/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68337", + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69263/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69263", "labels": [ - "docs", - "size: XS" + "size: S", + "extensions: kimi-coding", + "extensions: qianfan" ], "merged": false, - "number": 68337, - "review_comments_count": 0, + "number": 69263, + "review_comments_count": 4, "state": "open", - "title": "docs(acp): Add explicit warning on Docker deployment for ACP tools", - "updated_at": "2026-04-18T20:31:45Z" + "title": "test(qianfan,kimi-coding): add provider plugin and onboard config tests", + "updated_at": "2026-04-20T08:03:46Z" }, { - "additions": 22, - "author": "LightDriverCS", - "author_association": "NONE", - "body_excerpt": "## Problem The CLI activation loader in `src/plugins/activation-planner.ts` filters plugins by `plugin.activation.onCommands` (or `commandAliases[].cliCommand`). memory-core's manifest only declared a `commandAliases` entry with `cliComman\u2026", - "changed_files": 2, + "additions": 221, + "author": "slepybear", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Fixes #68016 where QQ Bot cannot send locally-generated images (screenshots, AI-generated images) saved to `~/.openclaw/media/outbound/`. ## Root Cause The `resolveQQBotPayloadLocalFilePath()` function in `extensions/qqbot/src/u\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68335", - "created_at": "2026-04-18T00:00:33Z", - "deletions": 0, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69262", + "created_at": "2026-04-20T07:59:34Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68335/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68335", + "files_url": "https://github.com/openclaw/openclaw/pull/69262/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69262", "labels": [ - "extensions: memory-core", - "size: XS" + "size: M", + "extensions: kimi-coding", + "extensions: qianfan", + "channel: qqbot" ], "merged": false, - "number": 68335, - "review_comments_count": 0, + "number": 69262, + "review_comments_count": 3, "state": "open", - "title": "fix(memory-core): activate on wiki CLI subcommand", - "updated_at": "2026-04-18T07:06:17Z" + "title": "fix(qqbot): allow outbound and inbound media paths in resolveQQBotPayloadLocalFilePath", + "updated_at": "2026-04-20T08:05:27Z" }, { - "additions": 86, - "author": "LightDriverCS", + "additions": 811, + "author": "hyspacex", "author_association": "NONE", - "body_excerpt": "## Problem `restoreMemoryPluginState` unconditionally overwrites `memoryPluginState.capability` with `undefined` when the restoring state has no capability (typical for a cached plugin-registry snapshot taken before the capability was regi\u2026", + "body_excerpt": "## Summary The Ollama embedding provider attached `Authorization: Bearer ` to whatever `baseUrl` resolved to, without scoping by where the key came from. Three concrete leaks: - An env-sourced `OLLAMA_API_KEY` (the Ollama Cloud con\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68334", - "created_at": "2026-04-18T00:00:29Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69261", + "created_at": "2026-04-20T07:54:22Z", + "deletions": 21, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68334/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68334", + "files_url": "https://github.com/openclaw/openclaw/pull/69261/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69261", "labels": [ - "size: S" + "size: L" ], "merged": false, - "number": 68334, - "review_comments_count": 4, + "number": 69261, + "review_comments_count": 3, "state": "open", - "title": "fix(memory): split restoreMemoryPluginState into restore/merge for cache-hit bug", - "updated_at": "2026-04-18T18:50:29Z" + "title": "fix(ollama): scope embedding auth to declared host boundaries", + "updated_at": "2026-04-20T07:58:53Z" }, { - "additions": 62, - "author": "kagura-agent", + "additions": 45, + "author": "717986230", + "author_association": "NONE", + "body_excerpt": "## Description Add Claude Opus 4.7, Claude Opus 4.6, Claude Opus 4.5, Claude Haiku 4.5, and Gemini 2.5 Pro to the GitHub Copilot provider's DEFAULT_MODEL_IDS. ## Changes - claude-opus-4.7 - claude-opus-4.6 - claude-opus-4.5 - claude-haiku-\u2026", + "changed_files": 5, + "cluster_id": "cluster-69241-4", + "cluster_ids": [ + "cluster-69241-4" + ], + "cluster_role": "member", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69259", + "created_at": "2026-04-20T07:49:00Z", + "deletions": 2, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69259/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69259", + "labels": [ + "docs", + "gateway", + "size: XS" + ], + "merged": false, + "number": 69259, + "review_comments_count": 0, + "state": "open", + "title": "feat(github-copilot): add Claude Opus 4.7 and other models to default list", + "updated_at": "2026-04-20T07:50:31Z" + }, + { + "additions": 921, + "author": "omarshahine", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #68299 **Problem:** `createMatrixClient` ignores the `network.dangerouslyAllowPrivateNetwork` configuration, so self-hosted Matrix homeservers on private IPs (192.168.x.x, localhost, etc.) are blocked with `resolves to private/intern\u2026", - "changed_files": 3, + "body_excerpt": "## Problem Two distinct user sends to a DM \u2014 a command followed by a pasted URL that iMessage renders as a standalone URL-balloon message \u2014 have distinct `messageId`s and no `associatedMessageGuid` cross-reference. The debouncer's `buildKe\u2026", + "changed_files": 16, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68332", - "created_at": "2026-04-17T23:48:00Z", - "deletions": 2, + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69258", + "created_at": "2026-04-20T07:43:18Z", + "deletions": 22, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68332/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68332", + "files_url": "https://github.com/openclaw/openclaw/pull/69258/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69258", "labels": [ - "channel: matrix", - "size: S" + "docs", + "channel: bluebubbles", + "scripts", + "maintainer", + "size: L" ], "merged": true, - "number": 68332, - "review_comments_count": 1, + "number": 69258, + "review_comments_count": 11, "state": "closed", - "title": "Matrix: forward dangerouslyAllowPrivateNetwork config to client SSRF policy", - "updated_at": "2026-04-18T04:50:54Z" + "title": "fix(bluebubbles): add opt-in coalesceSameSenderDms for split-send DMs", + "updated_at": "2026-04-21T08:44:41Z" }, { - "additions": 585, - "author": "acwilan", + "additions": 40, + "author": "717986230", "author_association": "NONE", - "body_excerpt": "## Summary - **Problem:** TTS voice/provider and STT language/prompt settings are global \u2014 all agents share the same speech config, making it impossible to give different agents different voices or transcription languages. - **Why it matte\u2026", - "changed_files": 12, - "cluster_id": "cluster-66252-3", - "cluster_ids": [ - "cluster-66252-3" - ], - "cluster_role": "member", + "body_excerpt": "## Description Add Tasks section to gog SKILL.md with commands for managing tasks. ## Changes - Tasks list tasklists: \\gog tasks lists list --json\\ - Tasks list: \\gog tasks list --json\\ - Tasks add: \\gog tasks add \u2026", + "changed_files": 4, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68331", - "created_at": "2026-04-17T23:44:10Z", - "deletions": 8, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69257", + "created_at": "2026-04-20T07:35:36Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68331/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68331", + "files_url": "https://github.com/openclaw/openclaw/pull/69257/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69257", "labels": [ - "agents", - "size: L" + "docs", + "gateway", + "size: XS" ], "merged": false, - "number": 68331, + "number": 69257, "review_comments_count": 3, "state": "open", - "title": "feat: per-agent TTS and STT config overrides [AI-assisted]", - "updated_at": "2026-04-17T23:51:11Z" + "title": "docs: add gog tasks commands to SKILL.md", + "updated_at": "2026-04-20T07:39:39Z" }, { - "additions": 0, - "author": "MonkeyLeeT", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Accept `agents.defaults.compaction.truncateAfterCompaction` in the Zod config schema and add regression coverage at both the leaf schema and public config validation layers. ## Root cause The public config type, help metadata, a\u2026", - "changed_files": 0, + "additions": 11, + "author": "lllyin", + "author_association": "NONE", + "body_excerpt": "## Summary - **Problem**: Isolated cron sessions with `deleteAfterRun: true` are being deleted prematurely during a run if a \"Direct Delivery\" (structured content or threaded reply) is triggered, even if subagents (workers) are still activ\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 0, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68328", - "created_at": "2026-04-17T23:39:44Z", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69256", + "created_at": "2026-04-20T07:33:47Z", "deletions": 0, - "draft": true, - "files_url": "https://github.com/openclaw/openclaw/pull/68328/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68328", + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69256/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69256", "labels": [ "size: XS" ], "merged": false, - "number": 68328, - "review_comments_count": 0, - "state": "closed", - "title": "fix(config): accept truncateAfterCompaction", - "updated_at": "2026-04-18T04:04:34Z" + "number": 69256, + "review_comments_count": 3, + "state": "open", + "title": "fix(cron): prevent premature session cleanup when subagents are running", + "updated_at": "2026-04-21T12:01:52Z" }, { - "additions": 101, - "author": "JIRBOY", + "additions": 333, + "author": "stiva1979-jpg", "author_association": "NONE", - "body_excerpt": "## Summary - **Root cause**: `loadAuthProfileStoreForSecretsRuntime` triggered plugin loading via `overlayExternalAuthProfiles` \u2192 `resolveProviderPluginsForHooks`, causing ~60s of jiti plugin compilation on first call during gateway startu\u2026", - "changed_files": 8, + "body_excerpt": "## Summary Adds a new Gateway RPC method `agent.identity.full` that exposes the local OpenClaw agent's full identity (parsed frontmatter plus raw IDENTITY.md + SOUL.md content) to authenticated Gateway clients. **Why:** Downstream tools th\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 5, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68327", - "created_at": "2026-04-17T23:16:26Z", - "deletions": 16, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69253", + "created_at": "2026-04-20T07:27:39Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68327/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68327", + "files_url": "https://github.com/openclaw/openclaw/pull/69253/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69253", "labels": [ "gateway", - "scripts", - "agents", - "size: S" + "size: M" ], "merged": false, - "number": 68327, - "review_comments_count": 8, + "number": 69253, + "review_comments_count": 5, "state": "open", - "title": "fix(gateway): reduce startup latency by ~36s", - "updated_at": "2026-04-18T07:15:56Z" + "title": "feat(gateway): add agent.identity.full method", + "updated_at": "2026-04-20T07:32:38Z" }, { - "additions": 65, - "author": "JeevaByte", + "additions": 545, + "author": "zhonghe0615", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: **Telegram bots forwarding messages into configured channels were processed as normal user messages, creating noise, potential loops, and unintended AI responses to automated traffic.\u2026", - "changed_files": 11, + "body_excerpt": "## Summary This changes recurring cron jobs to retry transient failures on the configured retry backoff window before falling back to their next natural schedule. Previously, transient failures for recurring cron jobs effectively waited un\u2026", + "changed_files": 13, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68325", - "created_at": "2026-04-17T23:10:37Z", - "deletions": 17, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69252", + "created_at": "2026-04-20T07:27:38Z", + "deletions": 50, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68325/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68325", + "files_url": "https://github.com/openclaw/openclaw/pull/69252/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69252", "labels": [ - "docs", - "channel: telegram", - "size: S" + "app: web-ui", + "gateway", + "cli", + "agents", + "size: L" ], "merged": false, - "number": 68325, - "review_comments_count": 1, + "number": 69252, + "review_comments_count": 9, "state": "open", - "title": "telegram: add allowBots parity for inbound filtering", - "updated_at": "2026-04-17T23:56:30Z" + "title": "fix(cron): retry transient recurring failures before next schedule", + "updated_at": "2026-04-21T06:39:22Z" }, { - "additions": 43, - "author": "hclsys", + "additions": 206, + "author": "EronFan", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68282 \u2014 \\`openclaw status\\` (and \\`--json\\`, \\`--deep\\`, \\`--usage\\`) pays a ~15s first-call penalty on every fresh process, dominated by doctor-contract loading through the default jiti path. The reporter measured the co\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Fixes a release pipeline regression where `patches/` was copied in the build stage but stripped by `pnpm prune --prod` in the `runtime-assets` stage. The runtime stage never re-added it, yet `package.json` still carries `pnpm.pa\u2026", + "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68324", - "created_at": "2026-04-17T23:07:58Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69248", + "created_at": "2026-04-20T07:22:48Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68324/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68324", + "files_url": "https://github.com/openclaw/openclaw/pull/69248/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69248", "labels": [ - "size: XS" + "docker", + "agents", + "size: M", + "r: too-many-prs" ], "merged": false, - "number": 68324, + "number": 69248, "review_comments_count": 2, "state": "closed", - "title": "fix(plugins): enable native jiti for doctor-contract loader to cut status cold-start ~13s", - "updated_at": "2026-04-18T22:36:46Z" + "title": "fix(docker): include patches/ in published runtime image", + "updated_at": "2026-04-20T07:27:53Z" }, { - "additions": 65, - "author": "kvnkho", - "author_association": "NONE", - "body_excerpt": "## Summary - Send `KILOCODE_API_KEY` as a Bearer token in the **extension** kilocode model discovery fetch so the gateway can resolve the user and include their BYOK models in the response. ## Problem When OpenClaw discovers models via `fe\u2026", - "changed_files": 3, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "additions": 82, + "author": "kagura-agent", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Fixes #69229 ## Problem `openclaw tasks audit` reports false-positive `inconsistent_timestamps` warnings when `startedAt` is slightly earlier than `createdAt` due to sub-millisecond clock jitter between separate `Date.now()` calls. ## Fix\u2026", + "changed_files": 2, + "cluster_id": "cluster-69229-3", + "cluster_ids": [ + "cluster-69229-3" + ], + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68322", - "created_at": "2026-04-17T23:04:21Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69247", + "created_at": "2026-04-20T07:14:06Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68322/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68322", + "files_url": "https://github.com/openclaw/openclaw/pull/69247/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69247", "labels": [ - "scripts", - "size: S", - "extensions: kilocode" + "size: S" ], "merged": false, - "number": 68322, + "number": 69247, "review_comments_count": 1, "state": "open", - "title": "fix(kilocode): send auth header in model discovery to include BYOK models", - "updated_at": "2026-04-17T23:11:31Z" + "title": "fix(tasks): allow timestamp jitter tolerance in audit inconsistency check", + "updated_at": "2026-04-20T07:16:12Z" }, { - "additions": 1, - "author": "itsuzef", + "additions": 12, + "author": "g18166599417-svg", "author_association": "NONE", - "body_excerpt": "## Summary - Adds `eleven_v3` to `ELEVENLABS_TTS_MODELS` in the bundled ElevenLabs speech provider - The model already worked end-to-end (the API call passes `model_id` straight through with no validation), but was absent from the allowlis\u2026", - "changed_files": 1, + "body_excerpt": "## Summary Enable cache-ttl based context pruning for all providers using the \\openai-completions\\ API type. Currently, \\isCacheTtlEligibleProvider\\ only returns \\ rue\\ for Anthropic-family and Google-family providers (plus those registere\u2026", + "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68321", - "created_at": "2026-04-17T22:59:50Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69245", + "created_at": "2026-04-20T07:10:25Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68321/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68321", + "files_url": "https://github.com/openclaw/openclaw/pull/69245/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69245", "labels": [ + "agents", "size: XS" ], "merged": false, - "number": 68321, - "review_comments_count": 1, + "number": 69245, + "review_comments_count": 0, "state": "open", - "title": "feat(elevenlabs): register eleven_v3 in TTS model allowlist", - "updated_at": "2026-04-17T23:01:14Z" + "title": "feat: enable cache-ttl context pruning for openai-completions providers", + "updated_at": "2026-04-20T07:11:53Z" }, { - "additions": 33, - "author": "1aifanatic", + "additions": 4, + "author": "kiote", "author_association": "NONE", - "body_excerpt": "## Summary - The Ollama plugin's `configSchema` had `additionalProperties: false` with only `discovery.enabled` allowed, rejecting any `plugins.entries.ollama.config.baseUrl` at startup - Values set via `openclaw config set plugins.entries\u2026", - "changed_files": 3, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "body_excerpt": "## Summary Add commonly available Copilot models that were missing from `DEFAULT_MODEL_IDS`: - `claude-opus-4.7` - `claude-opus-4.5` - `claude-haiku-4.5` - `gemini-2.5-pro` These models are available on Copilot plans (confirmed via OpenCod\u2026", + "changed_files": 1, + "cluster_id": "cluster-69241-4", + "cluster_ids": [ + "cluster-69241-4" + ], + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68320", - "created_at": "2026-04-17T22:58:48Z", - "deletions": 6, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69244", + "created_at": "2026-04-20T07:08:12Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68320/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68320", + "files_url": "https://github.com/openclaw/openclaw/pull/69244/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69244", "labels": [ "size: XS" ], "merged": false, - "number": 68320, - "review_comments_count": 2, + "number": 69244, + "review_comments_count": 0, "state": "open", - "title": "fix(ollama): add baseUrl to configSchema and wire it through discovery", - "updated_at": "2026-04-18T19:05:18Z" + "title": "feat(github-copilot): add missing Copilot models to defaults", + "updated_at": "2026-04-20T07:09:25Z" }, { - "additions": 218, - "author": "Jcxu97", - "author_association": "NONE", - "body_excerpt": "Closes #68294. ## Problem On Node 24 the built-in undici (ships with Node core, currently 6.x) and OpenClaw's bundled `undici@8.0.2` define two **distinct** `FormData` classes. `transcribeOpenAiCompatibleAudio` builds its multipart body vi\u2026", - "changed_files": 3, + "additions": 15, + "author": "Magicray1217", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Undici 8 enables HTTP/2 ALPN by default, causing Telegram long-polling connections to stall on Windows (IPv6 + H2 multiplexing issues). The core fetch-guard (\\src/infra/net/undici-runtime.ts\\) already applies \\\u0007llowH2: false\\ fo\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68318", - "created_at": "2026-04-17T22:57:31Z", - "deletions": 2, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69243", + "created_at": "2026-04-20T07:04:26Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68318/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68318", + "files_url": "https://github.com/openclaw/openclaw/pull/69243/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69243", "labels": [ - "size: M" + "channel: telegram", + "size: XS" ], "merged": false, - "number": 68318, - "review_comments_count": 0, - "state": "open", - "title": "fix(media): route FormData transcriptions through bundled undici realm (#68294)", - "updated_at": "2026-04-17T23:03:07Z" + "number": 69243, + "review_comments_count": 1, + "state": "closed", + "title": "fix(telegram): disable HTTP/2 for all Telegram polling dispatchers", + "updated_at": "2026-04-20T22:04:38Z" }, { - "additions": 2, - "author": "1aifanatic", + "additions": 19, + "author": "Magicray1217", "author_association": "NONE", - "body_excerpt": "## Summary - The `/reasoning stream` directive was showing `Reasoning stream enabled (Telegram only).` in all channels - Reasoning stream works in Lark/Feishu and other channels, not just Telegram - The `(Telegram only)` qualifier was misl\u2026", - "changed_files": 2, - "cluster_id": "cluster-68311-2", - "cluster_ids": [ - "cluster-68311-2" - ], - "cluster_role": "member", + "body_excerpt": "## Summary \\ esolveGlobalLane\\ unconditionally remapped \\CommandLane.Cron\\ to \\CommandLane.Nested\\, which funnelled **all** cron work into a serial bottleneck (\\ ested\\ defaults to \\maxConcurrent: 1\\) and effectively ignored \\cron.maxConcu\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68317", - "created_at": "2026-04-17T22:56:35Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69240", + "created_at": "2026-04-20T06:57:10Z", + "deletions": 9, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68317/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68317", + "files_url": "https://github.com/openclaw/openclaw/pull/69240/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69240", "labels": [ - "docs", + "agents", "size: XS" ], "merged": false, - "number": 68317, + "number": 69240, "review_comments_count": 0, "state": "open", - "title": "fix(directive): remove incorrect 'Telegram only' label from reasoning stream ack", - "updated_at": "2026-04-18T01:39:56Z" + "title": "fix(cron): preserve cron lane for top-level dispatch, only remap to nested for inner ops", + "updated_at": "2026-04-20T06:58:24Z" }, { - "additions": 46, - "author": "evgyur", + "additions": 1, + "author": "palacici", "author_association": "NONE", - "body_excerpt": "## Summary - preserve unsent media final payloads after successful block streaming - keep duplicate suppression for already-sent block payloads via `blockReplyPipeline.hasSentPayload(payload)` - keep successful streamed text-only final pay\u2026", - "changed_files": 2, + "body_excerpt": "## Summary memory-core is a bundled plugin that provides core memory functionality (dreaming, memory recall, etc.), but its openclaw.plugin.json is missing the enabledByDefault: true field. This causes openclaw doctor and openclaw update t\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68316", - "created_at": "2026-04-17T22:56:05Z", - "deletions": 15, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69237", + "created_at": "2026-04-20T06:36:59Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68316/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68316", + "files_url": "https://github.com/openclaw/openclaw/pull/69237/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69237", "labels": [ - "size: S" + "extensions: memory-core", + "size: XS" ], "merged": false, - "number": 68316, - "review_comments_count": 3, + "number": 69237, + "review_comments_count": 0, "state": "open", - "title": "Preserve unsent media payloads after block streaming", - "updated_at": "2026-04-17T23:34:22Z" + "title": "fix: add enabledByDefault to memory-core plugin manifest", + "updated_at": "2026-04-20T06:37:53Z" }, { - "additions": 36, - "author": "1aifanatic", - "author_association": "NONE", - "body_excerpt": "## Summary - `detectWorkflowFile` was silently swallowing all errors from `resolveWorkflowFile` - A path like `lobster/haiku-ppc64-hidden-alias-autofix-once.lobster` that doesn't exist on disk was returned as `null`, causing the caller to\u2026", - "changed_files": 2, - "cluster_id": "cluster-68101-4", + "additions": 95, + "author": "stainlu", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - **Problem:** The built-in heartbeat mechanism triggers a full CLI session reset every 30 minutes because `extraSystemPromptHash` includes the volatile inbound-meta envelope. A user message via Feishu/Telegram produces one inbo\u2026", + "changed_files": 6, + "cluster_id": "cluster-64380-3", "cluster_ids": [ - "cluster-68101-4" + "cluster-64380-3" ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68313", - "created_at": "2026-04-17T22:50:57Z", - "deletions": 2, + "cluster_role": "canonical", + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69236", + "created_at": "2026-04-20T06:36:32Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68313/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68313", + "files_url": "https://github.com/openclaw/openclaw/pull/69236/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69236", "labels": [ - "extensions: lobster", - "size: XS" + "agents", + "size: S" ], "merged": false, - "number": 68313, + "number": 69236, "review_comments_count": 4, "state": "open", - "title": "fix(lobster): surface file-not-found error for workflow-like pipeline paths", - "updated_at": "2026-04-18T01:39:27Z" + "title": "fix(agents): exclude volatile inbound metadata from CLI session reuse hash (#68471)", + "updated_at": "2026-04-20T18:12:59Z" }, { - "additions": 35, - "author": "1aifanatic", + "additions": 59439, + "author": "Deepnoa", "author_association": "NONE", - "body_excerpt": "## Summary - `deleteSession` during dreaming narrative cleanup fails with `missing scope: operator.admin` when the cron session lacks admin permissions - This is expected best-effort behavior, but the `warn` log fires on every dreaming cyc\u2026", - "changed_files": 2, - "cluster_id": "cluster-65653-11", - "cluster_ids": [ - "cluster-65653-11" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68312", - "created_at": "2026-04-17T22:48:00Z", - "deletions": 3, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68312/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68312", + "body_excerpt": "## Summary - add a `runs` alias that forwards to the existing sense-worker `run` plugin command - update the run help text to advertise both `/openclaw run ...` and `/openclaw runs ...` - extend the sense-worker registration and help tests\u2026", + "changed_files": 191, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69232", + "created_at": "2026-04-20T06:31:02Z", + "deletions": 169, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69232/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69232", "labels": [ - "extensions: memory-core", - "size: XS" + "docs", + "channel: slack", + "app: android", + "app: ios", + "app: web-ui", + "gateway", + "scripts", + "agents", + "size: XL" ], "merged": false, - "number": 68312, + "number": 69232, "review_comments_count": 0, "state": "open", - "title": "fix(memory-core): downgrade narrative cleanup WARN to debug for missing-scope errors", - "updated_at": "2026-04-17T22:49:20Z" + "title": "[codex] add runs alias for sense-worker command", + "updated_at": "2026-04-20T06:31:20Z" }, { - "additions": 1, - "author": "nightq", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Updates the confirmation message shown when enabling reasoning stream mode to correctly indicate that the feature works in both Telegram and Feishu (Lark) channels. ## Root Cause The reasoning stream feature was implemented for\u2026", - "changed_files": 1, - "cluster_id": "cluster-68311-2", - "cluster_ids": [ - "cluster-68311-2" - ], - "cluster_role": "canonical", + "additions": 31, + "author": "717986230", + "author_association": "NONE", + "body_excerpt": "## Description Add heartbeat configuration section to \\docs/cli/config.md\\ with CLI examples for common heartbeat options. ## Changes - Add heartbeat configuration section with CLI examples - Document \\\u0007gents.defaults.heartbeat\\ path and c\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68311", - "created_at": "2026-04-17T22:47:46Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69231", + "created_at": "2026-04-20T06:30:48Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68311/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68311", + "files_url": "https://github.com/openclaw/openclaw/pull/69231/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69231", "labels": [ + "docs", + "gateway", "size: XS" ], "merged": false, - "number": 68311, + "number": 69231, "review_comments_count": 1, "state": "open", - "title": "fix: update reasoning stream message to include Feishu support", - "updated_at": "2026-04-17T22:50:28Z" + "title": "docs: add heartbeat configuration examples to config CLI reference", + "updated_at": "2026-04-20T06:33:09Z" }, { - "additions": 200, - "author": "Chased1k", - "author_association": "NONE", - "body_excerpt": "## Summary - Adds a narrow, model-agnostic resubmission in the embedded runner attempt loop for turns that end with `stopReason=\"error\"` + `usage.output=0` + empty `content[]`. Bounded at 3 retries. Placed before the `incompleteTurnText` s\u2026", + "additions": 51, + "author": "zhuisDEV", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - use the full plugin manifest registry when checking plugins.allow for phantom entries - stop treating bundled non-channel plugins like openai, google, and acpx as phantom allowlist IDs - add regression coverage for bundled non\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68310", - "created_at": "2026-04-17T22:47:43Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69230", + "created_at": "2026-04-20T06:28:08Z", + "deletions": 12, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68310/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68310", + "files_url": "https://github.com/openclaw/openclaw/pull/69230/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69230", "labels": [ - "agents", - "size: M" + "size: S" ], "merged": false, - "number": 68310, + "number": 69230, "review_comments_count": 1, "state": "open", - "title": "fix(pi-embedded-runner): retry silent stopReason=error turns (non-frontier models)", - "updated_at": "2026-04-18T22:40:42Z" + "title": "fix(security): trust manifest registry in phantom plugin audit", + "updated_at": "2026-04-20T06:30:14Z" }, { - "additions": 11, - "author": "1aifanatic", + "additions": 249, + "author": "nakamotoliu", "author_association": "NONE", - "body_excerpt": "## Summary - `resolveBrowserSsrFPolicy` was returning `{}` (empty object) when `browser.ssrfPolicy` was not configured - The CDP fetch helper uses `ssrfPolicy ?? { allowPrivateNetwork: true }` \u2014 so `{}` (truthy) bypassed the default, block\u2026", - "changed_files": 2, + "body_excerpt": "## Summary - add `browser.profiles..headless` to the browser profile config schema - make `resolveProfile()` compute a per-profile headless value that falls back to global `browser.headless` - use the resolved profile headless flag i\u2026", + "changed_files": 22, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68308", - "created_at": "2026-04-17T22:44:17Z", + "comments_count": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69228", + "created_at": "2026-04-20T06:25:41Z", "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68308/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68308", + "files_url": "https://github.com/openclaw/openclaw/pull/69228/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69228", "labels": [ - "size: XS" + "size: M" ], "merged": false, - "number": 68308, - "review_comments_count": 1, + "number": 69228, + "review_comments_count": 7, "state": "open", - "title": "fix(browser): return undefined ssrfPolicy when browser.ssrfPolicy is unset", - "updated_at": "2026-04-18T19:01:59Z" + "title": "browser: support per-profile headless override", + "updated_at": "2026-04-20T11:59:32Z" }, { - "additions": 9, - "author": "1aifanatic", - "author_association": "NONE", - "body_excerpt": "## Summary - `resolveCommandsSystemPromptBundle` was calling `resolveBootstrapContextForRun` without a `warn` callback - Bootstrap file truncation warnings were silently discarded in the commands / system-prompt path - Wires up `makeBootst\u2026", - "changed_files": 1, + "additions": 433, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - enrich gateway pairing failures with reason-specific details, request ids, and remediation hints - surface the richer pairing recovery guidance in CLI status output and Control UI formatting - document the PAIRING_REQUIRED con\u2026", + "changed_files": 15, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68307", - "created_at": "2026-04-17T22:38:04Z", - "deletions": 1, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69227", + "created_at": "2026-04-20T06:25:40Z", + "deletions": 51, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68307/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68307", + "files_url": "https://github.com/openclaw/openclaw/pull/69227/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69227", "labels": [ - "size: XS" + "docs", + "app: web-ui", + "gateway", + "commands", + "maintainer", + "size: M" ], - "merged": false, - "number": 68307, - "review_comments_count": 0, - "state": "open", - "title": "fix(commands): emit WARN when bootstrap files are truncated", - "updated_at": "2026-04-17T22:39:11Z" + "merged": true, + "number": 69227, + "review_comments_count": 2, + "state": "closed", + "title": "Fix pairing-required recovery details", + "updated_at": "2026-04-20T07:04:04Z" }, { - "additions": 63, - "author": "1aifanatic", - "author_association": "NONE", - "body_excerpt": "## Summary - `normalizeTelegramReplyToMessageId` now rejects `0` and negative values in addition to non-numeric inputs - Telegram message IDs are always positive integers; passing `0` or a negative value would result in a `400 Bad Request`\u2026", - "changed_files": 2, + "additions": 707, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary When a paired read-only device reconnects asking for wider operator scopes, surface the real approval state instead of a generic pairing/auth failure. ## Changes - format pairing rejection details into actionable scope/role/meta\u2026", + "changed_files": 48, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68306", - "created_at": "2026-04-17T22:36:09Z", - "deletions": 4, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69226", + "created_at": "2026-04-20T06:25:14Z", + "deletions": 125, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68306/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68306", + "files_url": "https://github.com/openclaw/openclaw/pull/69226/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69226", "labels": [ - "channel: telegram", - "size: S" + "app: web-ui", + "gateway", + "cli", + "commands", + "agents", + "maintainer", + "size: L" ], - "merged": false, - "number": 68306, - "review_comments_count": 0, - "state": "open", - "title": "fix(telegram): reject zero and negative replyToMessageId values", - "updated_at": "2026-04-17T22:37:16Z" + "merged": true, + "number": 69226, + "review_comments_count": 7, + "state": "closed", + "title": "Surface pending scope upgrades in gateway auth errors", + "updated_at": "2026-04-20T08:17:45Z" }, { - "additions": 6, - "author": "1aifanatic", + "additions": 369, + "author": "trevorlarson", "author_association": "NONE", - "body_excerpt": "## Summary - `sendMessageSlack` guards against `NO_REPLY` sentinel tokens before calling the Slack API - `sendMessageTelegram` was missing the same guard \u2014 a `NO_REPLY` token could reach the Telegram API - This caused a visible flash of te\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - add Discord config `splitOnCodeBlocks` (default off) - split mixed prose + fenced code into distinct messages before normal chunking - propagate option through shared outbound send path and monitor fast-path/native command pat\u2026", + "changed_files": 18, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68304", - "created_at": "2026-04-17T22:31:20Z", - "deletions": 0, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69223", + "created_at": "2026-04-20T06:21:54Z", + "deletions": 15, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68304/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68304", + "files_url": "https://github.com/openclaw/openclaw/pull/69223/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69223", "labels": [ - "channel: telegram", - "size: XS" + "docs", + "channel: discord", + "gateway", + "size: M" ], "merged": false, - "number": 68304, - "review_comments_count": 0, - "state": "open", - "title": "fix(telegram): suppress NO_REPLY sentinel before sendMessageTelegram API call", - "updated_at": "2026-04-17T22:32:45Z" + "number": 69223, + "review_comments_count": 2, + "state": "closed", + "title": "discord: split mixed replies on fenced code blocks", + "updated_at": "2026-04-20T21:02:00Z" }, { - "additions": 34, - "author": "Nimraakram22", + "additions": 871, + "author": "hyspacex", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 2, - "cluster_id": "cluster-62238-18", + "body_excerpt": "## Summary Closes #69132. Ollama 0.16.0 and later no longer expose `/api/experimental/web_search` on the local host, which is the only path the bundled provider was calling. Every `web_search` against `tools.web.search.provider = \"ollama\"`\u2026", + "changed_files": 10, + "cluster_id": "cluster-69132-4", "cluster_ids": [ - "cluster-62238-18" + "cluster-69132-4" ], "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68302", - "created_at": "2026-04-17T22:28:08Z", - "deletions": 12, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69222", + "created_at": "2026-04-20T06:20:03Z", + "deletions": 133, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68302/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68302", + "files_url": "https://github.com/openclaw/openclaw/pull/69222/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69222", "labels": [ - "gateway", - "size: XS" + "docs", + "size: L" ], "merged": false, - "number": 68302, - "review_comments_count": 5, + "number": 69222, + "review_comments_count": 1, "state": "open", - "title": "Fix/systemd restart exit null", - "updated_at": "2026-04-17T22:37:44Z" + "title": "fix(ollama): restore web search compatibility on Ollama 0.16+", + "updated_at": "2026-04-20T16:25:48Z" }, { - "additions": 46, - "author": "dlebee-agent", - "author_association": "NONE", - "body_excerpt": "Fixes #68297 Related: #68240 ## What Mirrors the `--daemon-env` flag added to `openclaw onboard --install-daemon` in #68240, now for `openclaw node install`. ```bash openclaw node install --host --port 18789 \\ --daemon-env OPENCLAW_AL\u2026", - "changed_files": 3, + "additions": 1000, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "This keeps approval-required scope and role upgrades, but makes that model explicit instead of looking like a broken pairing. - include requested vs approved access on pairing-required upgrade errors - show the same upgrade state in `openc\u2026", + "changed_files": 19, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68301", - "created_at": "2026-04-17T22:27:14Z", - "deletions": 1, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69221", + "created_at": "2026-04-20T06:19:54Z", + "deletions": 83, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68301/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68301", + "files_url": "https://github.com/openclaw/openclaw/pull/69221/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69221", "labels": [ + "docs", + "app: web-ui", + "gateway", "cli", - "commands", - "size: XS" + "maintainer", + "size: XL" ], - "merged": false, - "number": 68301, - "review_comments_count": 6, - "state": "open", - "title": "feat(node): add --daemon-env flag to openclaw node install", - "updated_at": "2026-04-17T22:38:50Z" + "merged": true, + "number": 69221, + "review_comments_count": 7, + "state": "closed", + "title": "Explain pairing scope upgrades during reconnects", + "updated_at": "2026-04-20T07:44:31Z" }, { - "additions": 5, - "author": "1aifanatic", - "author_association": "NONE", - "body_excerpt": "## Summary - Hook handler errors were logged with only the error message, no stack trace - Errors like `f.toLowerCase is not a function` in `agent:bootstrap` hooks could not be traced to their source without source maps - Now logs the full\u2026", - "changed_files": 1, + "additions": 85, + "author": "zeroaltitude", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem The plugin loader's per-plugin snapshot/rollback dance captures several `previousMemory*` values to restore after a non-activating load \u2014 but **`previousMemoryCapability` was missing**. Both restore sites (the `if (!shouldActiva\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68300", - "created_at": "2026-04-17T22:26:33Z", - "deletions": 1, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69219", + "created_at": "2026-04-20T05:57:21Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68300/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68300", + "files_url": "https://github.com/openclaw/openclaw/pull/69219/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69219", "labels": [ - "size: XS" + "size: S" ], - "merged": false, - "number": 68300, + "merged": true, + "number": 69219, "review_comments_count": 0, - "state": "open", - "title": "fix(hooks): include stack trace and event context in internal hook error logs", - "updated_at": "2026-04-17T22:28:01Z" + "state": "closed", + "title": "fix(plugins): preserve memory capability across snapshot plugin loads", + "updated_at": "2026-04-20T20:26:27Z" }, { - "additions": 106, - "author": "bluesky6868", + "additions": 18, + "author": "epicseven-cup", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Discord startup swallows `fetchUser(\"@me\")` failures and leaves `botUserId` unset, which lets guild preflight skip the no-mention drop in degraded startup. - Why it matters: A failed bot identity fetch turns `requireM\u2026", - "changed_files": 4, + "body_excerpt": "## Summary - **Problem:** The Discord bot permission list in `docs/channels/discord.md` was a flat list that didn't reflect how permissions are actually organized in the Discord bot invite flow UI. - **Why it matters:** Users following the\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68298", - "created_at": "2026-04-17T22:26:25Z", - "deletions": 4, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69218", + "created_at": "2026-04-20T05:56:23Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68298/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68298", + "files_url": "https://github.com/openclaw/openclaw/pull/69218/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69218", "labels": [ + "docs", "channel: discord", - "size: S" + "size: XS" ], "merged": false, - "number": 68298, + "number": 69218, "review_comments_count": 2, "state": "open", - "title": "fix(discord): fail closed when bot identity is unavailable", - "updated_at": "2026-04-18T04:31:00Z" + "title": "place permission under each branch of bot permissions for discord docs", + "updated_at": "2026-04-20T06:35:01Z" }, { - "additions": 38, - "author": "1aifanatic", - "author_association": "NONE", - "body_excerpt": "## Summary - The `read` tool diagnostic guard in `handleToolExecutionStart` only checked `path` and `file_path` when deciding whether to emit a \"read tool called without path\" warning - Models like Claude commonly use `file` and `filePath`\u2026", - "changed_files": 2, + "additions": 2368, + "author": "BradGroux", + "author_association": "MEMBER", + "body_excerpt": "## Summary This patch stops transcript-only OpenClaw assistant artifacts from leaking back out through user-facing history surfaces. The concrete issue here is the delivery-mirror and gateway-injected assistant messages that are intentiona\u2026", + "changed_files": 44, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68296", - "created_at": "2026-04-17T22:25:17Z", - "deletions": 2, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69217", + "created_at": "2026-04-20T05:54:06Z", + "deletions": 841, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68296/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68296", + "files_url": "https://github.com/openclaw/openclaw/pull/69217/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69217", "labels": [ + "docs", + "channel: discord", + "channel: mattermost", + "channel: msteams", + "channel: telegram", + "app: web-ui", + "gateway", + "scripts", "agents", - "size: XS" + "maintainer", + "size: XL", + "extensions: openai", + "extensions: qa-lab" ], "merged": false, - "number": 68296, - "review_comments_count": 1, + "number": 69217, + "review_comments_count": 7, "state": "open", - "title": "fix(agents): add file and filePath aliases to read tool diagnostic path check", - "updated_at": "2026-04-18T01:40:28Z" + "title": "Hide transcript-only OpenClaw history artifacts", + "updated_at": "2026-04-20T06:42:35Z" }, { - "additions": 167, - "author": "dlebee-agent", - "author_association": "NONE", - "body_excerpt": "Fixes #68287 ## Problem `openclaw node install` fails on node-only VMs with: ``` Node install failed: Error: systemctl enable failed: Failed to enable unit: Unit file openclaw-gateway.service does not exist. ``` ## Root cause `activateSyst\u2026", - "changed_files": 2, + "additions": 756, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - split gateway probe output into separate reachability, capability, and read-probe signals - rename default gateway status probe wording so connect-only success no longer implies full RPC/write health - update troubleshooting/d\u2026", + "changed_files": 23, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68293", - "created_at": "2026-04-17T22:11:00Z", - "deletions": 2, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69215", + "created_at": "2026-04-20T05:49:46Z", + "deletions": 72, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68293/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68293", + "files_url": "https://github.com/openclaw/openclaw/pull/69215/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69215", "labels": [ + "docs", "gateway", - "size: S" + "cli", + "commands", + "maintainer", + "size: L" ], - "merged": false, - "number": 68293, - "review_comments_count": 0, - "state": "open", - "title": "fix(systemd): use resolveSystemdServiceName in activate/uninstall", - "updated_at": "2026-04-17T22:18:48Z" + "merged": true, + "number": 69215, + "review_comments_count": 4, + "state": "closed", + "title": "Split gateway probe capability from reachability", + "updated_at": "2026-04-20T06:32:17Z" }, { - "additions": 9, - "author": "thesomewhatyou", + "additions": 15, + "author": "nightq", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Security and reliability audit followup addressing 5 bugs across the gateway, cron, and failover subsystems. Two are security-critical, one is a trust boundary gap, and two are correctness/perf fixes for error classification and\u2026", + "body_excerpt": "## Summary Fixes #69160 When onboarding multiple providers sequentially, the second provider's was replacing entirely instead of merging with models from the first provider. ## Root Cause In , the field was being set directly to , which ov\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68292", - "created_at": "2026-04-17T22:08:17Z", - "deletions": 9, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69213", + "created_at": "2026-04-20T05:47:35Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68292/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68292", + "files_url": "https://github.com/openclaw/openclaw/pull/69213/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69213", "labels": [ - "gateway", - "size: XS" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68292, - "review_comments_count": 15, + "number": 69213, + "review_comments_count": 3, "state": "closed", - "title": "fix: security hardening \u2014 MCP ownership spoofing, poll double-delivery, cron trust escalation, failover classification gaps", - "updated_at": "2026-04-18T00:09:47Z" + "title": "fix: merge models from multiple providers instead of replacing", + "updated_at": "2026-04-20T05:52:22Z" }, { - "additions": 8, - "author": "YASSINENFAI", + "additions": 1078, + "author": "Maaannnn", "author_association": "NONE", - "body_excerpt": "Fixes #68249 ## Problem - Brave plugin enabled in config (\\plugins.entries.brave.enabled: true\\) - But didn't load when \\plugins.enabled\\ was false/undefined - \\web_search\\ tool was unavailable ## Root Cause \\ esolvePluginActivationState\\\u2026", + "body_excerpt": "## Summary - Support `encrypted_content` replay for `openai-completions` assistant/tool continuations. - Send `previous_response_id` for HTTP `openai-responses` / `openai-codex-responses` tool-only continuations. - Add mock transport paylo\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68290", - "created_at": "2026-04-17T22:00:34Z", - "deletions": 11, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69212", + "created_at": "2026-04-20T05:38:32Z", + "deletions": 20, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68290/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68290", + "files_url": "https://github.com/openclaw/openclaw/pull/69212/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69212", "labels": [ - "size: XS" + "agents", + "size: XL" ], "merged": false, - "number": 68290, - "review_comments_count": 3, + "number": 69212, + "review_comments_count": 9, "state": "open", - "title": "fix(plugins): allow explicitly enabled plugins to load when plugins.enabled is false", - "updated_at": "2026-04-17T23:52:14Z" + "title": "agents: replay encrypted_content for volcengine seed thinking summary", + "updated_at": "2026-04-20T09:15:06Z" }, { - "additions": 546, - "author": "Takhoffman", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - add a dedicated `openclaw workspace reset` command for safely trashing and reseeding a workspace - register the command in the core CLI and wire it through the existing onboard reset helpers - add focused command, helper, and\u2026", - "changed_files": 10, + "additions": 206, + "author": "skylee-01", + "author_association": "NONE", + "body_excerpt": "## Summary - Problem: On Windows, the claude-cli provider passes the system prompt (~10K-30K+ chars) via `--append-system-prompt` as a CLI argument. Windows `CreateProcessW` has a ~32,767-char command-line limit, causing `spawn ENAMETOOLON\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68289", - "created_at": "2026-04-17T21:59:25Z", - "deletions": 3, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69211", + "created_at": "2026-04-20T05:35:47Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68289/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68289", + "files_url": "https://github.com/openclaw/openclaw/pull/69211/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69211", "labels": [ - "cli", - "commands", - "maintainer", - "size: L" + "agents", + "size: M" ], "merged": false, - "number": 68289, - "review_comments_count": 3, + "number": 69211, + "review_comments_count": 4, "state": "open", - "title": "feat(workspace): add safe workspace reset command", - "updated_at": "2026-04-17T22:03:58Z" + "title": "fix(agents): guard Windows CLI argv against ENAMETOOLONG by moving system prompt to stdin", + "updated_at": "2026-04-20T05:42:53Z" }, { - "additions": 49, - "author": "dlebee-agent", - "author_association": "NONE", - "body_excerpt": "Fixes #68287 ## Problem `openclaw node install` fails on node-only VMs with: ``` Node install failed: Error: systemctl enable failed: Failed to enable unit: Unit file openclaw-gateway.service does not exist. ``` ## Root cause `activateSyst\u2026", - "changed_files": 6, + "additions": 884, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Doctor now reports device-pairing trouble states that previously left users stuck: pending pairing requests, pending role/scope upgrades, public-key mismatch repairs, paired-token drift, and stale local cached device tokens. It prints conc\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68288", - "created_at": "2026-04-17T21:55:40Z", - "deletions": 5, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69210", + "created_at": "2026-04-20T05:34:46Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68288/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68288", + "files_url": "https://github.com/openclaw/openclaw/pull/69210/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69210", "labels": [ + "docs", "gateway", - "cli", "commands", - "size: S" + "maintainer", + "size: L" ], - "merged": false, - "number": 68288, - "review_comments_count": 1, + "merged": true, + "number": 69210, + "review_comments_count": 4, "state": "closed", - "title": "fix(systemd): use resolveSystemdServiceName in activate/uninstall", - "updated_at": "2026-04-17T22:13:21Z" + "title": "fix: surface device pairing auth drift in doctor", + "updated_at": "2026-04-20T06:10:20Z" }, { - "additions": 14, - "author": "ajfonthemove", + "additions": 576, + "author": "everySympathy", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: mergeHybridResults computes vectorScore and textScore per result but drops them when building the return object. Only the weighted combined score survives. - Why it matters: operators running multi-agent setups need t\u2026", - "changed_files": 4, - "cluster_id": "cluster-68166-3", + "body_excerpt": "## Summary - Problem: `memory-core` exposed no `dreaming.model` config, so Dream Diary narrative runs always inherited the session default model even when users wanted a separate model for dreaming. - Why it matters: users on rate-limited\u2026", + "changed_files": 10, + "cluster_id": "cluster-66583-2", "cluster_ids": [ - "cluster-68166-3" + "cluster-66583-2" ], "cluster_role": "canonical", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68286", - "created_at": "2026-04-17T21:44:50Z", - "deletions": 0, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69209", + "created_at": "2026-04-20T05:29:40Z", + "deletions": 58, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68286/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68286", + "files_url": "https://github.com/openclaw/openclaw/pull/69209/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69209", "labels": [ "extensions: memory-core", - "size: XS" + "size: L" ], "merged": false, - "number": 68286, - "review_comments_count": 0, + "number": 69209, + "review_comments_count": 6, "state": "open", - "title": "feat(memory-core): expose vectorScore and textScore in hybrid search results", - "updated_at": "2026-04-17T23:31:05Z" + "title": "feat(memory-core): add dreaming.model override", + "updated_at": "2026-04-20T07:05:24Z" }, { - "additions": 3023, - "author": "vincentkoc", - "author_association": "MEMBER", - "body_excerpt": "## Summary - problem: Codex auth ownership was still split between OpenClaw canonical auth, runtime `.codex` bootstrap/overlay paths, and Codex ambient host auth in `codex exec` / app-server harness flows. - why it matters: OAuth state cou\u2026", - "changed_files": 58, + "additions": 8, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Switch the GitHub Copilot onboarding default from `gpt-4o` to `claude-opus-4.6` and keep the bundled default model list aligned with that choice. Testing: - pnpm test extensions/github-copilot/models.test.ts - pnpm test src/plugins/contrac\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 4, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68284", - "created_at": "2026-04-17T21:39:54Z", - "deletions": 993, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69207", + "created_at": "2026-04-20T05:24:53Z", + "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68284/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68284", + "files_url": "https://github.com/openclaw/openclaw/pull/69207/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69207", "labels": [ - "docs", - "gateway", - "agents", "maintainer", - "size: XL", - "extensions: openai", - "extensions: codex" + "size: XS" ], "merged": true, - "number": 68284, - "review_comments_count": 16, + "number": 69207, + "review_comments_count": 0, "state": "closed", - "title": "refactor(auth): centralize codex oauth ownership in OpenClaw", - "updated_at": "2026-04-18T20:34:13Z" + "title": "Default GitHub Copilot onboarding to Claude Opus 4.6", + "updated_at": "2026-04-20T05:34:16Z" }, { - "additions": 185, - "author": "TheDillonHall", + "additions": 14, + "author": "Sanjays2402", "author_association": "NONE", - "body_excerpt": "## Summary Fixes a native approval handler bootstrap retry storm observed in production when the handler could not connect to the gateway because the local device lacked `operator.approvals`. The previous behavior retried every 1000ms for\u2026", + "body_excerpt": "## Summary - **Problem:** `SessionsSpawnToolSchema.streamTo` was declared without a description, so models with `runtime=\"subagent\"` routinely emit `streamTo: \"parent\"` on the first `sessions_spawn` attempt, get rejected server-side with `\u2026", "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "cluster_id": "cluster-69166-3", + "cluster_ids": [ + "cluster-69166-3" + ], + "cluster_role": "canonical", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68283", - "created_at": "2026-04-17T21:36:47Z", - "deletions": 15, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69203", + "created_at": "2026-04-20T05:19:42Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68283/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68283", + "files_url": "https://github.com/openclaw/openclaw/pull/69203/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69203", "labels": [ - "size: M" + "agents", + "size: XS" ], "merged": false, - "number": 68283, + "number": 69203, "review_comments_count": 0, "state": "open", - "title": "fix(approvals): back off native handler bootstrap retries", - "updated_at": "2026-04-17T21:39:35Z" + "title": "fix(sessions-spawn): document runtime=\"acp\" requirement on streamTo schema", + "updated_at": "2026-04-21T03:54:13Z" }, { - "additions": 182, - "author": "amittell", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary - fail fast for local loopback probe/status auth resolution when gateway auth is required but unresolved - return a local probe failure instead of attempting an anonymous loopback websocket connect - add focused regression cover\u2026", - "changed_files": 9, + "additions": 643, + "author": "jaredar1232", + "author_association": "NONE", + "body_excerpt": "## Summary Spawned children from `sessions_spawn` lose thread context. The child's `deliveryContext` is persisted as `{\"channel\":\"slack\"}` with no `to` / `threadId`, so when the child replies the outbound adapter has no `thread_ts` and the\u2026", + "changed_files": 6, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68280", - "created_at": "2026-04-17T21:11:15Z", - "deletions": 50, + "comments_count": 9, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69201", + "created_at": "2026-04-20T05:07:25Z", + "deletions": 19, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68280/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68280", + "files_url": "https://github.com/openclaw/openclaw/pull/69201/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69201", "labels": [ - "gateway", - "cli", - "commands", - "size: M" + "agents", + "size: L" ], "merged": false, - "number": 68280, - "review_comments_count": 2, + "number": 69201, + "review_comments_count": 17, "state": "open", - "title": "fix(gateway): fail fast on missing local probe auth", - "updated_at": "2026-04-17T21:19:04Z" + "title": "fix(spawn): propagate parent deliveryContext to sessions_spawn children", + "updated_at": "2026-04-21T17:31:53Z" }, { - "additions": 28, - "author": "zoneblaze", + "additions": 36, + "author": "rrrrrredy", "author_association": "NONE", - "body_excerpt": "## Summary - prevents explicit non-default Discord `accountId` sends from silently inheriting the default/top-level token - returns `source: none` when the explicit account has no token instead of falling back to default identity - adds re\u2026", + "body_excerpt": "## Summary - detect `node:sqlite` runtime failures in `buildMemorySearchUnavailableResult` - return a targeted SQLite-unavailable warning/action instead of the generic embedding/provider message - add a unit test that locks in the sqlite-m\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68278", - "created_at": "2026-04-17T21:00:22Z", - "deletions": 5, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69199", + "created_at": "2026-04-20T04:56:03Z", + "deletions": 6, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68278/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68278", + "files_url": "https://github.com/openclaw/openclaw/pull/69199/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69199", "labels": [ - "channel: discord", + "extensions: memory-core", "size: XS" ], "merged": false, - "number": 68278, - "review_comments_count": 2, + "number": 69199, + "review_comments_count": 1, "state": "open", - "title": "fix(discord): honor explicit accountId token resolution in cron deliveries", - "updated_at": "2026-04-18T07:53:22Z" + "title": "fix(memory): improve error message when node:sqlite is unavailable", + "updated_at": "2026-04-20T05:14:30Z" }, { - "additions": 92, - "author": "Dithilli", + "additions": 165, + "author": "omarshahine", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Adds a troubleshooting section for users hitting the silent-fallback bug cluster (#59257, #58575, #49168) where an isolated cron job with `payload.model: \"ollama/...\"` completes with `lastStatus: \"ok\"` but the actual inference r\u2026", - "changed_files": 2, + "body_excerpt": "## Summary Add optional `systemPrompt` to the BlueBubbles per-group config and forward it into inbound context as `GroupSystemPrompt`, so configured per-group behavioral directives are injected into the agent's system prompt on every turn.\u2026", + "changed_files": 8, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68277", - "created_at": "2026-04-17T20:56:21Z", - "deletions": 0, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69198", + "created_at": "2026-04-20T04:50:25Z", + "deletions": 3, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68277/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68277", + "files_url": "https://github.com/openclaw/openclaw/pull/69198/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69198", "labels": [ "docs", - "gateway", - "size: XS" + "channel: bluebubbles", + "scripts", + "maintainer", + "size: S" ], - "merged": false, - "number": 68277, + "merged": true, + "number": 69198, "review_comments_count": 2, - "state": "open", - "title": "docs(troubleshooting): document isolated-cron payload.model silent-fallback workaround", - "updated_at": "2026-04-17T20:59:16Z" + "state": "closed", + "title": "bluebubbles: forward per-group systemPrompt into GroupSystemPrompt", + "updated_at": "2026-04-21T03:01:23Z" }, { - "additions": 9, - "author": "zoneblaze", + "additions": 10, + "author": "altierac", "author_association": "NONE", - "body_excerpt": "## Summary - filters Android chat history entries that are cron delivery completion markers (\"A cron job ... just completed successfully\") so they do not render as user messages - strips top-level `...` wrapping from text me\u2026", - "changed_files": 1, + "body_excerpt": "## Summary When a backgrounded exec command completes while `process(poll)` is actively waiting for it, `maybeNotifyOnExit()` fires a phantom \"Exec completed\" system event. The agent \u2014 often after context compaction \u2014 cannot correlate the\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68276", - "created_at": "2026-04-17T20:55:47Z", + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69197", + "created_at": "2026-04-20T04:47:55Z", "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68276/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68276", + "files_url": "https://github.com/openclaw/openclaw/pull/69197/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69197", "labels": [ - "app: android", + "agents", "size: XS" ], "merged": false, - "number": 68276, - "review_comments_count": 4, + "number": 69197, + "review_comments_count": 2, "state": "open", - "title": "feat(android/chat): filter cron-delivery noise and strip wrapper", - "updated_at": "2026-04-18T17:57:29Z" + "title": "fix(exec): suppress ghost notifications when poll is actively consuming output", + "updated_at": "2026-04-20T13:30:44Z" }, { - "additions": 14, - "author": "drobison00", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 6, + "additions": 376, + "author": "jaredar1232tetris", + "author_association": "NONE", + "body_excerpt": "## Summary When a router agent calls `sessions_spawn` to delegate to a top-level worker agent (configured in `openclaw.json` `agents.list`), the spawned worker's session is created with `deliveryContext: {\"channel\":\"slack\"}` only \u2014 no `to`\u2026", + "changed_files": 5, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68274", - "created_at": "2026-04-17T20:42:36Z", - "deletions": 11, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69195", + "created_at": "2026-04-20T04:41:16Z", + "deletions": 13, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68274/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68274", + "files_url": "https://github.com/openclaw/openclaw/pull/69195/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69195", "labels": [ - "app: macos", - "maintainer", - "size: XS" + "agents", + "size: M" ], "merged": false, - "number": 68274, - "review_comments_count": 1, + "number": 69195, + "review_comments_count": 5, "state": "closed", - "title": "Fix macos ssh host checking", - "updated_at": "2026-04-17T20:53:15Z" + "title": "fix(spawn): propagate parent deliveryContext to sessions_spawn children", + "updated_at": "2026-04-20T04:48:08Z" }, { - "additions": 44, - "author": "hclsys", - "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Fixes #68260 \u2014 the bundled Ollama plugin's \\`configSchema\\` was locked to \\`discovery.enabled\\` only (via \\`additionalProperties: false\\`), but the runtime code at \\`extensions/ollama/provider-discovery.ts:70,149\\` and \\`extensi\u2026", - "changed_files": 2, + "additions": 2, + "author": "armorbreak001", + "author_association": "NONE", + "body_excerpt": "## Problem **#68945** \u2014 `agents.defaults.humanDelay` has no effect on Telegram. Messages are sent immediately regardless of the configured delay, while all other channels respect it. ## Root Cause `dispatchTelegramMessage()` passes `dispat\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68270", - "created_at": "2026-04-17T20:22:19Z", + "conversation_url": "https://github.com/openclaw/openclaw/pull/69194", + "created_at": "2026-04-20T04:38:15Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68270/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68270", + "files_url": "https://github.com/openclaw/openclaw/pull/69194/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69194", "labels": [ + "channel: telegram", "size: XS" ], "merged": false, - "number": 68270, - "review_comments_count": 2, + "number": 69194, + "review_comments_count": 0, "state": "closed", - "title": "fix(ollama): allow baseUrl in plugin configSchema to match what the provider code already reads", - "updated_at": "2026-04-18T18:45:27Z" + "title": "fix(telegram): wire humanDelay into block-streaming dispatcher", + "updated_at": "2026-04-20T21:41:40Z" }, { - "additions": 51, - "author": "Lucenx9", + "additions": 248, + "author": "omarshahine", "author_association": "CONTRIBUTOR", - "body_excerpt": "Fixes #56982 ## Summary - stop `openclaw doctor` from warning that gateway auth is off or missing a token when `gateway.auth.mode` is `\"trusted-proxy\"` - keep the warning only for `gateway.auth.mode=\"none\"` and `gateway.auth.mode=\"token\"`\u2026", - "changed_files": 2, + "body_excerpt": "## Problem BlueBubbles uses a hardcoded 10s timeout (`DEFAULT_TIMEOUT_MS = 10_000` in `extensions/bluebubbles/src/types.ts`) for every HTTP request, including outbound message sends via `/api/v1/message/text`. On macOS 26 (Tahoe), BlueBubb\u2026", + "changed_files": 11, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68269", - "created_at": "2026-04-17T20:16:27Z", - "deletions": 1, + "comments_count": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69193", + "created_at": "2026-04-20T04:35:53Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68269/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68269", + "files_url": "https://github.com/openclaw/openclaw/pull/69193/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69193", "labels": [ - "commands", + "docs", + "channel: bluebubbles", + "maintainer", + "size: M" + ], + "merged": true, + "number": 69193, + "review_comments_count": 4, + "state": "closed", + "title": "fix(bluebubbles): configurable sendTimeoutMs, bump send default to 30s", + "updated_at": "2026-04-20T17:14:04Z" + }, + { + "additions": 28, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Telegram setup no longer offers `@username` resolution for `allowFrom`, which relied on an unsupported Bot API lookup path for DM users. Setup now requires numeric sender IDs and the Telegram docs/tests are aligned with that behavior.", + "changed_files": 6, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69191", + "created_at": "2026-04-20T04:27:10Z", + "deletions": 91, + "draft": false, + "files_url": "https://github.com/openclaw/openclaw/pull/69191/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69191", + "labels": [ + "docs", + "channel: telegram", + "maintainer", "size: S" ], - "merged": false, - "number": 68269, + "merged": true, + "number": 69191, "review_comments_count": 0, "state": "closed", - "title": "[codex] CLI/Doctor: skip gateway token warning in trusted-proxy mode", - "updated_at": "2026-04-18T23:04:44Z" + "title": "fix(telegram): require numeric allowFrom ids in setup", + "updated_at": "2026-04-20T04:37:04Z" }, { - "additions": 119, - "author": "mkoslacz", - "author_association": "NONE", - "body_excerpt": "## Why External reconcilers that track async agent dispatches need a **read-only** way to fetch the messages belonging to a single run from a live session. The existing path is to send a probe message via `sessions.send` (e.g. `[RECONCILER\u2026", + "additions": 89, + "author": "kagura-agent", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Problem On Windows, the claude-cli provider passes the user prompt as a shell argument with `shell: true`. Windows has an 8191-character command-line limit, causing `ENAMETOOLONG` errors for long prompts. Fixes #69158 ## Solution - `res\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68267", - "created_at": "2026-04-17T20:05:07Z", + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69179", + "created_at": "2026-04-20T03:42:15Z", "deletions": 2, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68267/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68267", + "files_url": "https://github.com/openclaw/openclaw/pull/69179/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69179", "labels": [ - "app: web-ui", - "gateway", + "agents", "size: S" ], "merged": false, - "number": 68267, - "review_comments_count": 4, - "state": "open", - "title": "feat(gateway): add optional runId filter to chat.history [AI-assisted]", - "updated_at": "2026-04-18T16:04:45Z" + "number": 69179, + "review_comments_count": 0, + "state": "closed", + "title": "fix: pass claude-cli prompt via stdin to avoid Windows ENAMETOOLONG (#69158)", + "updated_at": "2026-04-20T03:44:16Z" }, { - "additions": 64, - "author": "lemonheaded", - "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Telegram re-encodes videos when `width`/`height` are missing from `sendVideo`, which causes portrait (9:16) videos to display squished on the receiving end - Why it matters: Any bot sending portrait video content (AI-\u2026", - "changed_files": 4, - "cluster_id": "cluster-18915-2", + "additions": 173, + "author": "OwenYWT", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary - try Ollama's existing experimental web_search endpoint first, then the stable local `/api/web_search` endpoint - when both local endpoints return 404 and an Ollama API key is configured, retry via `https://ollama.com/api/web_s\u2026", + "changed_files": 2, + "cluster_id": "cluster-69132-4", "cluster_ids": [ - "cluster-18915-2" + "cluster-69132-4" ], - "cluster_role": "canonical", + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68266", - "created_at": "2026-04-17T20:02:09Z", - "deletions": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69178", + "created_at": "2026-04-20T03:33:30Z", + "deletions": 11, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68266/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68266", + "files_url": "https://github.com/openclaw/openclaw/pull/69178/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69178", "labels": [ - "channel: telegram", "size: S" ], "merged": false, - "number": 68266, - "review_comments_count": 3, - "state": "open", - "title": "fix(telegram): pass video dimensions to prevent portrait video distortion", - "updated_at": "2026-04-17T20:07:41Z" - }, - { - "additions": 782, - "author": "kevinheneveld", - "author_association": "NONE", - "body_excerpt": "## Summary - strip runtime/system-event lines from user-role history entries before transcript sanitization - apply that stripping in both the chat history handler and the session-history snapshot/SSE path used by Control UI refreshes - hi\u2026", - "changed_files": 5, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68262", - "created_at": "2026-04-17T19:50:26Z", - "deletions": 29, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68262/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68262", - "labels": [ - "app: web-ui", - "gateway", - "size: L" - ], - "merged": false, - "number": 68262, - "review_comments_count": 10, + "number": 69178, + "review_comments_count": 2, "state": "open", - "title": "fix: hide internal prompts from chat history", - "updated_at": "2026-04-18T17:59:20Z" + "title": "fix(ollama): fall back web search endpoints", + "updated_at": "2026-04-20T04:38:10Z" }, { - "additions": 43, - "author": "mkoslacz", + "additions": 25, + "author": "skylee-01", "author_association": "NONE", - "body_excerpt": "## Bug `buildGatewayReloadPlan()` in [`src/gateway/config-reload-plan.ts`](src/gateway/config-reload-plan.ts) treats any unmatched config path as a gateway restart trigger (existing test at L250: *\"defaults unknown paths to restart\"*). The\u2026", + "body_excerpt": "## Summary - Problem: The `session_status` tool always reports `0/131k (0%)` context usage because the `buildStatusText()` call in `session-status-tool.ts` does not pass the `contextTokens` parameter from the session entry. - Why it matter\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68257", - "created_at": "2026-04-17T19:33:09Z", + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69177", + "created_at": "2026-04-20T03:29:06Z", "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68257/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68257", + "files_url": "https://github.com/openclaw/openclaw/pull/69177/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69177", "labels": [ - "gateway", + "agents", "size: XS" ], "merged": false, - "number": 68257, + "number": 69177, "review_comments_count": 0, "state": "open", - "title": "fix(gateway): stop restarting gateway on OAuth token refresh (auth.profiles.*) [AI-assisted]", - "updated_at": "2026-04-19T03:31:18Z" + "title": "fix(agents): pass contextTokens to buildStatusText in session_status tool", + "updated_at": "2026-04-20T06:03:12Z" }, { - "additions": 107, - "author": "holeshotclaw", + "additions": 19, + "author": "visormatt", "author_association": "NONE", - "body_excerpt": "## Summary - skip bundled memory-core recall/repair doctor paths when another memory plugin owns the active slot - probe the active runtime memory manager for embedding readiness so doctor output matches the selected backend - fix a strict\u2026", + "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68255", - "created_at": "2026-04-17T19:31:12Z", - "deletions": 1, - "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68255/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68255", + "comments_count": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69176", + "created_at": "2026-04-20T03:27:12Z", + "deletions": 4, + "draft": true, + "files_url": "https://github.com/openclaw/openclaw/pull/69176/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69176", "labels": [ - "commands", - "size: S" + "docker", + "size: XS" ], "merged": false, - "number": 68255, - "review_comments_count": 1, + "number": 69176, + "review_comments_count": 0, "state": "closed", - "title": "fix: honor the active memory plugin in doctor checks", - "updated_at": "2026-04-17T19:56:32Z" + "title": "chore: poking around", + "updated_at": "2026-04-20T15:52:19Z" }, { - "additions": 69, - "author": "mjamiv", + "additions": 36, + "author": "nightq", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Slack Socket Mode bots were being restarted by the gateway every ~35 minutes on idle \u2014 even when the WebSocket was fully healthy, Slack's server pings were flowing, and the bot was simply waiting for the next message. The fix op\u2026", + "body_excerpt": "## Summary Fixes the bug where onboarding multiple providers overwrites instead of merging them, ensuring users can onboard multiple providers without losing previously configured models. ## Root Cause was replacing the entire object with\u2026", "changed_files": 4, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68253", - "created_at": "2026-04-17T19:29:17Z", - "deletions": 0, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69175", + "created_at": "2026-04-20T03:25:25Z", + "deletions": 14, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68253/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68253", + "files_url": "https://github.com/openclaw/openclaw/pull/69175/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69175", "labels": [ - "channel: slack", - "size: S" + "size: S", + "r: too-many-prs" ], "merged": false, - "number": 68253, - "review_comments_count": 0, - "state": "open", - "title": "fix(slack): opt out of stale-socket health-monitor (Socket Mode owns liveness)", - "updated_at": "2026-04-19T03:28:31Z" + "number": 69175, + "review_comments_count": 1, + "state": "closed", + "title": "fix: merge provider models instead of replacing on OAuth onboarding", + "updated_at": "2026-04-20T03:31:39Z" }, { - "additions": 2, - "author": "ShayMeshGit", + "additions": 545, + "author": "Lee-Si-Yoon", "author_association": "NONE", - "body_excerpt": "## Summary - Problem: Links on localized documentation pages (e.g., German `/de/docs/providers/index`) were 404ing because they pointed to the domain root (e.g., `/providers/ollama`) instead of the localized documentation path (e.g., `/de/\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - Problem: No bundled FriendliAI provider \u2014 users had to configure it manually. - What changed: Added extensions/friendliai/ as a new bundled provider plugin: manifest, 8-model catalog (Llama, DeepSeek, Qwen3, GLM, K-EXAONE), AP\u2026", + "changed_files": 12, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 2, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68250", - "created_at": "2026-04-17T19:10:02Z", - "deletions": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69174", + "created_at": "2026-04-20T03:19:12Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68250/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68250", + "files_url": "https://github.com/openclaw/openclaw/pull/69174/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69174", "labels": [ - "scripts", - "size: XS" + "docs", + "size: M" ], "merged": false, - "number": 68250, - "review_comments_count": 3, - "state": "closed", - "title": "docs: use relative links in provider index to fix localization #68139", - "updated_at": "2026-04-18T10:24:58Z" + "number": 69174, + "review_comments_count": 12, + "state": "open", + "title": "feat: add FriendliAI model provider", + "updated_at": "2026-04-21T08:41:30Z" }, { - "additions": 27, - "author": "Nimraakram22", - "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: - **Problem:** The Xcode Copilot extension cannot connect to OpenClaw because it specifically targets the legacy `/v1/engines/copilot-codex/completions` endpoint and sends a raw `prom\u2026", + "additions": 10, + "author": "omarshahine", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Unblocks the two baseline failures currently red on main. ### 1. `checks-node-agentic-agents-plugins` \u2014 broken by #68726 File: `src/agents/subagent-registry.steer-restart.test.ts:566` #68726 added `startedAt`/`endedAt`/`elapsedM\u2026", "changed_files": 2, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 5, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68247", - "created_at": "2026-04-17T19:03:24Z", - "deletions": 10, + "comments_count": 1, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69173", + "created_at": "2026-04-20T03:18:55Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68247/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68247", + "files_url": "https://github.com/openclaw/openclaw/pull/69173/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69173", "labels": [ "gateway", + "agents", + "maintainer", "size: XS" ], - "merged": false, - "number": 68247, - "review_comments_count": 6, + "merged": true, + "number": 69173, + "review_comments_count": 0, "state": "closed", - "title": "feat(gateway): Add Xcode Copilot Extension Support", - "updated_at": "2026-04-17T21:48:05Z" + "title": "test(agents,gateway): fix two main-baseline test breakages from #68726 and #65986", + "updated_at": "2026-04-20T03:45:22Z" }, { - "additions": 1, - "author": "linuxhgw", + "additions": 686, + "author": "wongcyrus", "author_association": "NONE", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 1, + "body_excerpt": "## Summary - Problem: Upstream merge and refactor broke the custom endpoint and API type override features for Gemini across Search, Embeddings, Image Generation, and Media Understanding. - Why it matters: Users utilizing LiteLLM, OneAPI,\u2026", + "changed_files": 19, "cluster_id": null, "cluster_ids": [], "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68244", - "created_at": "2026-04-17T18:30:52Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69172", + "created_at": "2026-04-20T03:18:22Z", + "deletions": 108, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68244/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68244", + "files_url": "https://github.com/openclaw/openclaw/pull/69172/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69172", "labels": [ - "size: XS" + "scripts", + "size: L", + "extensions: anthropic", + "extensions: byteplus", + "extensions: volcengine" ], "merged": false, - "number": 68244, - "review_comments_count": 1, + "number": 69172, + "review_comments_count": 8, "state": "open", - "title": "Add new file 'r' with initial content", - "updated_at": "2026-04-17T18:31:43Z" + "title": "Fix/google overrides", + "updated_at": "2026-04-21T05:35:54Z" }, { - "additions": 63, - "author": "Tuarisa", + "additions": 17, + "author": "vvitovec", "author_association": "NONE", - "body_excerpt": "## Problem The `image` tool (media-understanding) fails with: ``` No API provider registered for api: ollama ``` \u2026whenever the selected vision model is backed by a provider whose API is contributed through an OpenClaw plugin (e.g. `ollama/\u2026", + "body_excerpt": "## Summary - document that `sessions_spawn.streamTo` requires `runtime=\"acp\"` - stop subagent callers from guessing `streamTo: \"parent\"` and paying for a guaranteed retry - add a schema regression test for the runtime hint ## Testing - `co\u2026", "changed_files": 2, - "cluster_id": null, - "cluster_ids": [], - "cluster_role": null, + "cluster_id": "cluster-69166-3", + "cluster_ids": [ + "cluster-69166-3" + ], + "cluster_role": "member", "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68243", - "created_at": "2026-04-17T18:27:59Z", - "deletions": 0, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69170", + "created_at": "2026-04-20T03:04:43Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68243/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68243", + "files_url": "https://github.com/openclaw/openclaw/pull/69170/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69170", "labels": [ - "size: S" + "agents", + "size: XS" ], "merged": false, - "number": 68243, + "number": 69170, "review_comments_count": 0, "state": "open", - "title": "fix(media-understanding): register custom API stream handler before image completion", - "updated_at": "2026-04-18T08:55:49Z" + "title": "fix(agent): document that sessions_spawn streamTo is ACP-only", + "updated_at": "2026-04-20T03:06:25Z" }, { - "additions": 221, - "author": "sahilsatralkar", + "additions": 75, + "author": "kagura-agent", "author_association": "CONTRIBUTOR", - "body_excerpt": "## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 4, + "body_excerpt": "Fixes #69160 When onboarding a second provider, `applyProviderAuthConfigPatch` was replacing `agents.defaults.models` entirely with the new provider's models instead of merging them. **Change:** In `src/plugins/provider-auth-choice-helpers\u2026", + "changed_files": 3, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68242", - "created_at": "2026-04-17T18:27:24Z", - "deletions": 2, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69169", + "created_at": "2026-04-20T03:04:33Z", + "deletions": 7, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68242/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68242", + "files_url": "https://github.com/openclaw/openclaw/pull/69169/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69169", "labels": [ - "channel: whatsapp-web", - "size: M" + "commands", + "size: S" ], "merged": false, - "number": 68242, - "review_comments_count": 2, - "state": "open", - "title": "Fix: issue 67394 whatsapp autoreply delivery logging", - "updated_at": "2026-04-17T18:38:46Z" + "number": 69169, + "review_comments_count": 1, + "state": "closed", + "title": "fix: merge models on provider onboarding instead of replacing", + "updated_at": "2026-04-20T03:43:37Z" }, { - "additions": 47, - "author": "dlebee-agent", + "additions": 21, + "author": "JavieSanchezB", "author_association": "NONE", - "body_excerpt": "Fixes #67565 ## What Adds a repeatable `--daemon-env KEY=VALUE` option to `openclaw onboard --install-daemon` so that extra `Environment=` lines can be injected directly into the generated systemd unit at bootstrap time \u2014 no post-onboard r\u2026", - "changed_files": 5, + "body_excerpt": "\u2026ing in session lock inspection ## Summary Describe the problem and fix in 2\u20135 bullets: If this PR fixes a plugin beta-release blocker, title it `fix(): beta blocker - ` and link the matching `Beta blocker: ): beta blocker - ` and link the matching `Beta blocker: - ` issue labeled `be\u2026", - "changed_files": 2, - "cluster_id": "cluster-62238-18", - "cluster_ids": [ - "cluster-62238-18" - ], - "cluster_role": "member", + "additions": 43, + "author": "zhouhe-xydt", + "author_association": "CONTRIBUTOR", + "body_excerpt": "## Summary Fixes concurrent callers being silently dropped when `--session-id` is used and a turn is in progress. - `acquireSessionWriteLock` now receives `timeoutMs` from `params.timeoutMs` so the lock wait time aligns with the agent turn\u2026", + "changed_files": 3, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68235", - "created_at": "2026-04-17T17:57:49Z", - "deletions": 3, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69159", + "created_at": "2026-04-20T02:37:41Z", + "deletions": 1, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68235/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68235", + "files_url": "https://github.com/openclaw/openclaw/pull/69159/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69159", "labels": [ - "gateway", + "agents", "size: XS" ], "merged": false, - "number": 68235, - "review_comments_count": 2, + "number": 69159, + "review_comments_count": 0, "state": "open", - "title": "fix: issue 53120", - "updated_at": "2026-04-17T18:01:24Z" + "title": "fix(agent): pass --timeout to session write lock and expose SessionWriteLockError", + "updated_at": "2026-04-20T02:39:44Z" }, { - "additions": 1377, - "author": "omarshahine", - "author_association": "CONTRIBUTOR", - "body_excerpt": "Ready for review. Smoke-tested live on Lobster on `3ef012f20c`. ## Summary All outbound BlueBubbles HTTP calls now route through a single typed `BlueBubblesClient` that resolves SSRF policy and auth material once at construction. Previousl\u2026", - "changed_files": 15, + "additions": 7, + "author": "sharkqwy", + "author_association": "NONE", + "body_excerpt": "## Summary\\n- add Google Tasks command examples to the bundled `skills/gog/SKILL.md`\\n- include list/add/update/done/undo/delete command snippets for quick agent use\\n\\n## Validation\\n- pnpm check\\n- pnpm vitest run test/scripts/stage-bund\u2026", + "changed_files": 1, "cluster_id": null, "cluster_ids": [], "cluster_role": null, - "comments_count": 3, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68234", - "created_at": "2026-04-17T17:54:01Z", - "deletions": 314, + "comments_count": 2, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69154", + "created_at": "2026-04-20T02:11:14Z", + "deletions": 0, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68234/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68234", + "files_url": "https://github.com/openclaw/openclaw/pull/69154/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69154", "labels": [ - "channel: bluebubbles", - "maintainer", - "size: XL" + "size: XS", + "r: too-many-prs" ], "merged": false, - "number": 68234, - "review_comments_count": 12, - "state": "open", - "title": "bluebubbles: consolidate HTTP traffic through typed BlueBubblesClient", - "updated_at": "2026-04-19T06:56:04Z" + "number": 69154, + "review_comments_count": 1, + "state": "closed", + "title": "docs(gog): add Google Tasks command examples", + "updated_at": "2026-04-20T02:12:38Z" }, { - "additions": 93, - "author": "taosiyuan163", - "author_association": "NONE", - "body_excerpt": "Fixes #68160 ## Summary - require `hello-ok.auth` in `HelloOkSchema` so the protocol schema matches the gateway handshake payload shipped in `#67810` - add a focused regression test and update protocol docs/examples so the required `auth`\u2026", - "changed_files": 8, - "cluster_id": "cluster-68160-3", - "cluster_ids": [ - "cluster-68160-3" - ], - "cluster_role": "member", - "comments_count": 1, - "conversation_url": "https://github.com/openclaw/openclaw/pull/68227", - "created_at": "2026-04-17T17:44:59Z", - "deletions": 32, + "additions": 260, + "author": "obviyus", + "author_association": "CONTRIBUTOR", + "body_excerpt": "Preserves explicit target context for isolated cron runs with `delivery.mode: none`, and forwards that context into embedded agent messaging.", + "changed_files": 6, + "cluster_id": null, + "cluster_ids": [], + "cluster_role": null, + "comments_count": 4, + "conversation_url": "https://github.com/openclaw/openclaw/pull/69153", + "created_at": "2026-04-20T02:02:12Z", + "deletions": 5, "draft": false, - "files_url": "https://github.com/openclaw/openclaw/pull/68227/files", - "html_url": "https://github.com/openclaw/openclaw/pull/68227", + "files_url": "https://github.com/openclaw/openclaw/pull/69153/files", + "html_url": "https://github.com/openclaw/openclaw/pull/69153", "labels": [ - "docs", - "app: macos", - "app: web-ui", - "gateway", - "size: S" + "maintainer", + "size: M" ], - "merged": false, - "number": 68227, - "review_comments_count": 0, - "state": "open", - "title": "fix(protocol): require hello-ok auth", - "updated_at": "2026-04-18T01:31:32Z" + "merged": true, + "number": 69153, + "review_comments_count": 4, + "state": "closed", + "title": "fix(cron): preserve isolated message targets", + "updated_at": "2026-04-20T02:40:05Z" }, { - "additions": 46, - "author": "ymaxgit", - "author_association": "NONE", - "body_excerpt": "## Summary - **Problem**: `sanitizeMimeType` in `src/media-understanding/apply.ts` used an unanchored regex (`/^(type/subtype)/`). A string like `text/plain