Both #75585 (msteams sent-message marker persistence) and #75586 (matrix
approval reaction target persistence) landed on main 2026-05-03 but
appended their changelog entries under `## 2026.4.30`, which was
finalized on 2026-05-01. Move them under `## Unreleased ### Fixes` so
the released section stays frozen and the new fixes are credited in the
right release window. Thanks @amknight.
Keep reset/deleted session archives searchable while preserving visibility filtering, and keep internal cron-run archives opaque when live ownership metadata is gone.\n\nRefs #56131.\nThanks @buyitsydney.
Summary:
- The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry.
- Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction.
Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold
Validation:
- ClawSweeper review passed for head a6a1967316.
- Required merge gates passed before the squash merge.
Prepared head SHA: a6a1967316
Review: https://github.com/openclaw/openclaw/pull/76393#issuecomment-4365255585
Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Externalize @larksuiteoapi/node-sdk from the bundled Feishu ESM runtime so packaged startup loads the SDK as a plugin-local runtime dependency instead of inlining the SDK's ESM __dirname path.
Adds changelog credit and a tsdown-config regression assertion.
Fixes#76291.
Fixes#76494.
Co-authored-by: Chris Zhang <4436110+zqchris@users.noreply.github.com>
Summary:
- The PR adds an internal Tree-sitter-backed shell command explainer under `src/infra`, parser runtime/tests, dependency/build-policy updates, an index export, and a changelog entry.
- Reproducibility: not applicable. this is a feature PR rather than a bug report. For the prior PR blocker, source inspection shows byte-to-string span conversion and focused Unicode span coverage on the exact head.
Automerge notes:
- Ran the ClawSweeper repair loop before final review.
- Included post-review commit in the final squash: Repair shell command explainer automerge blockers
- Included post-review commit in the final squash: fix(clawsweeper): address review for automerge-openclaw-openclaw-7500…
Validation:
- ClawSweeper review passed for head 47577579e9.
- Required merge gates passed before the squash merge.
Prepared head SHA: 47577579e9
Review: https://github.com/openclaw/openclaw/pull/75004#issuecomment-4351322592
Co-authored-by: Jesse Merhi <jessejmerhi@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
* fix(openai-codex): honor providerConfig.baseUrl in dynamic-model synthesis fallback
The synthesis fallback in resolveCodexForwardCompatModel hardcoded
OPENAI_CODEX_BASE_URL when the model registry had no template row to
clone, which meant openai-codex providers configured with a custom
baseUrl (e.g. a local proxy that forwards Codex traffic) silently
fell back to api.openai.com / chatgpt.com - bypassing the proxy and
typically failing the auth contract.
Synthesis now reads ctx.providerConfig.baseUrl when present, with the
existing OPENAI_CODEX_BASE_URL constant as the fallback. No effect on
template-clone or registry-find paths, which already inherit the
configured baseUrl through the cloned template.
* docs(changelog): add Unreleased Fixes entry for #76428 codex synthesis baseUrl honor
* fix(gateway): read-only fast path for models.list catalog loading
The gateway model catalog refresh calls loadModelCatalog without
readOnly, triggering ensureOpenClawModelsJson (60-70s), full PI SDK
registry instantiation, auth storage discovery, and live provider
plugin augmentation on every Control UI list/refresh. None of this
is needed for a read-only UI listing.
Three changes:
1. Gateway catalog refresh now passes readOnly: true to loadModelCatalog.
2. In readOnly mode, skip augmentModelCatalogWithProviderPlugins — live
provider discovery is explicit admin/background work, not a UI list
operation.
3. Add a persisted models.json fast path: when readOnly is true, first
try reading the existing models.json directly and converting
providers.<provider>.models[] to catalog rows. Falls back to the
full PI registry path if the file is missing or unreadable.
Observed improvement on a production install:
loadGatewayModelCatalog: 967 entries / 4651ms → 89 entries / 8ms
Live models.list during startup: ~18s → ~2s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(gateway): preserve full model catalog view
* fix(agents): preserve read-only catalog defaults
* fix(agents): preserve provider catalog defaults
---------
Co-authored-by: Marvinthebored <peter@lindsey.jp>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>