[ImgBot] Optimize images - #1
Open
imgbot[bot] wants to merge 143 commits into
Open
Conversation
github-actions
Bot
force-pushed
the
avwq_dev
branch
from
June 20, 2026 18:19
90671ac to
b12223a
Compare
github-actions
Bot
force-pushed
the
avwq_dev
branch
from
June 25, 2026 02:45
a906132 to
643410c
Compare
github-actions
Bot
force-pushed
the
avwq_dev
branch
from
July 8, 2026 09:21
9d02090 to
4ae8d73
Compare
*Total -- 244.65kb -> 227.75kb (6.91%) /ui/public/provider-icons/ProviderIcon-abacus.svg -- 0.91kb -> 0.65kb (28.25%) /ui/public/favicon.svg -- 3.19kb -> 2.53kb (20.85%) /ui/public/provider-icons/ProviderIcon-vertexai.svg -- 0.36kb -> 0.31kb (14.05%) /docs/assets/pixel-lobster.svg -- 2.11kb -> 1.82kb (13.96%) /ui/public/provider-icons/ProviderIcon-stepfun.svg -- 1.90kb -> 1.69kb (11.08%) /docs/assets/openclaw-logo-text.svg -- 63.57kb -> 56.75kb (10.74%) /docs/assets/openclaw-logo-text-dark.svg -- 63.63kb -> 56.82kb (10.71%) /ui/public/provider-icons/ProviderIcon-augment.svg -- 2.01kb -> 1.80kb (10.33%) /docs/images/groups-flow.svg -- 2.74kb -> 2.50kb (8.53%) /docs/assets/sponsors/nvidia.svg -- 3.53kb -> 3.29kb (6.69%) /docs/assets/sponsors/nvidia-dark.svg -- 3.53kb -> 3.29kb (6.69%) /ui/public/provider-icons/ProviderIcon-kiro.svg -- 0.66kb -> 0.62kb (6.21%) /ui/public/provider-icons/ProviderIcon-chutes.svg -- 0.27kb -> 0.26kb (5.05%) /ui/public/provider-icons/ProviderIcon-jetbrains.svg -- 0.82kb -> 0.79kb (4.74%) /ui/public/provider-icons/ProviderIcon-litellm.svg -- 1.26kb -> 1.20kb (4.5%) /ui/public/provider-icons/ProviderIcon-codebuff.svg -- 0.33kb -> 0.31kb (4.19%) /ui/public/provider-icons/ProviderIcon-venice.svg -- 0.21kb -> 0.20kb (4.13%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-elevenlabs.svg -- 0.19kb -> 0.18kb (4.08%) /ui/public/provider-icons/ProviderIcon-clawrouter.svg -- 0.42kb -> 0.40kb (3.95%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-deepgram.svg -- 0.20kb -> 0.19kb (3.86%) /ui/public/provider-icons/ProviderIcon-ollama.svg -- 3.69kb -> 3.57kb (3.12%) /ui/public/provider-icons/ProviderIcon-llmproxy.svg -- 0.54kb -> 0.52kb (3.09%) /ui/public/provider-icons/ProviderIcon-crossmodel.svg -- 0.43kb -> 0.42kb (2.75%) /ui/public/provider-icons/ProviderIcon-kilo.svg -- 0.86kb -> 0.84kb (2.49%) /docs/assets/sponsors/convex-light.svg -- 3.05kb -> 2.98kb (2.4%) /docs/assets/sponsors/convex.svg -- 3.05kb -> 2.98kb (2.4%) /ui/public/provider-icons/ProviderIcon-opencodego.svg -- 0.21kb -> 0.21kb (2.33%) /ui/public/provider-icons/ProviderIcon-opencode.svg -- 0.21kb -> 0.21kb (2.33%) /ui/public/provider-icons/ProviderIcon-openrouter.svg -- 0.65kb -> 0.63kb (2.11%) /ui/public/provider-icons/ProviderIcon-groq.svg -- 0.49kb -> 0.48kb (1.98%) /ui/public/provider-icons/ProviderIcon-mimo.svg -- 0.30kb -> 0.30kb (1.94%) /ui/public/provider-icons/ProviderIcon-mistral.svg -- 0.41kb -> 0.40kb (1.67%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-qoder.svg -- 0.36kb -> 0.35kb (1.63%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-zai.svg -- 0.48kb -> 0.48kb (1.61%) /ui/public/provider-icons/ProviderIcon-amp.svg -- 0.61kb -> 0.60kb (1.6%) /ui/public/provider-icons/ProviderIcon-grok.svg -- 0.70kb -> 0.69kb (1.4%) /ui/public/provider-icons/ProviderIcon-t3chat.svg -- 0.93kb -> 0.92kb (1.36%) /ui/public/provider-icons/ProviderIcon-warp.svg -- 0.44kb -> 0.44kb (1.32%) /ui/public/provider-icons/ProviderIcon-bedrock.svg -- 3.79kb -> 3.75kb (1.21%) /ui/public/provider-icons/ProviderIcon-sakana.svg -- 0.66kb -> 0.65kb (1.19%) /ui/public/provider-icons/ProviderIcon-commandcode.svg -- 0.52kb -> 0.52kb (1.12%) /ui/public/provider-icons/ProviderIcon-antigravity.svg -- 0.43kb -> 0.42kb (0.91%) /ui/public/provider-icons/ProviderIcon-alibaba.svg -- 0.88kb -> 0.87kb (0.89%) /ui/public/provider-icons/ProviderIcon-crof.svg -- 0.67kb -> 0.66kb (0.88%) /ui/public/provider-icons/ProviderIcon-zed.svg -- 0.60kb -> 0.59kb (0.65%) /ui/public/provider-icons/ProviderIcon-devin.svg -- 0.75kb -> 0.75kb (0.65%) /docs/assets/sponsors/github.svg -- 0.81kb -> 0.80kb (0.61%) /docs/assets/sponsors/github-light.svg -- 0.81kb -> 0.80kb (0.6%) /ui/public/provider-icons/ProviderIcon-minimax.svg -- 1.30kb -> 1.30kb (0.52%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-cursor.svg -- 0.76kb -> 0.76kb (0.51%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-gemini.svg -- 0.82kb -> 0.82kb (0.47%) /docs/assets/sponsors/openai.svg -- 1.32kb -> 1.31kb (0.45%) /docs/assets/sponsors/openai-light.svg -- 1.32kb -> 1.31kb (0.45%) /ui/public/provider-icons/ProviderIcon-synthetic.svg -- 7.51kb -> 7.48kb (0.4%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-windsurf.svg -- 1.18kb -> 1.18kb (0.33%) /docs/assets/sponsors/blacksmith.svg -- 9.79kb -> 9.76kb (0.26%) /docs/assets/sponsors/blacksmith-light.svg -- 9.79kb -> 9.76kb (0.26%) /ui/public/provider-icons/ProviderIcon-doubao.svg -- 0.43kb -> 0.43kb (0.23%) /docs/assets/sponsors/vercel-light.svg -- 3.60kb -> 3.59kb (0.16%) /docs/assets/sponsors/vercel.svg -- 3.60kb -> 3.59kb (0.16%) /ui/public/provider-icons/ProviderIcon-claude.svg -- 2.51kb -> 2.51kb (0.16%) /ui/public/provider-icons/ProviderIcon-deepseek.svg -- 3.47kb -> 3.46kb (0.14%) /ui/public/provider-icons/ProviderIcon-perplexity.svg -- 0.74kb -> 0.74kb (0.13%) /packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/packages/speech-core/node_modules/openclaw/ui/public/provider-icons/ProviderIcon-copilot.svg -- 3.54kb -> 3.54kb (0.11%) /ui/public/provider-icons/ProviderIcon-manus.svg -- 5.46kb -> 5.46kb (0.11%) /ui/public/provider-icons/ProviderIcon-kimi.svg -- 1.13kb -> 1.12kb (0.09%) /ui/public/provider-icons/ProviderIcon-factory.svg -- 5.64kb -> 5.64kb (0.07%) /ui/public/provider-icons/ProviderIcon-poe.svg -- 1.57kb -> 1.57kb (0.06%) Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
github-actions
Bot
force-pushed
the
avwq_dev
branch
from
July 15, 2026 02:41
2e8da9b to
2333bd5
Compare
addstone
pushed a commit
that referenced
this pull request
Aug 14, 2026
… errors (openclaw#122624) * fix(codex): read canonical transcript session targets (#1) * test(slack): reproduce reconnect timer surviving shutdown * fix(slack): keep reconnects within one socket lifecycle * test(slack): exercise native reconnect over loopback * test(slack): satisfy reconnect integration checks
addstone
pushed a commit
that referenced
this pull request
Aug 14, 2026
* fix: stop bundled plugin startup refresh loops * feat: continue web sessions in the terminal (openclaw#122870) * feat: continue sessions in terminal Add a credential-free Control UI continuation command and allow openclaw resume to reuse current-profile authentication only for byte-exact configured Gateway targets. * fix(gateway): separate public origin TLS ownership Allow exact public-origin resume targets to reuse local authentication without inheriting the direct local listener certificate fingerprint. * fix(gateway): scope exact targets to gateway mode Prevent remote profiles from reusing dormant local Gateway authentication for explicit loopback or public-origin targets. * fix(cli): encode terminal resume handoffs Replace shell-specific quoting with a strict credential-free base64url handoff, gate configured auth reuse to validated handoffs, and skip unused session discovery. * fix(gateway): isolate handoff auth identity Suppress ambient Gateway auth fallback for validated handoffs while preserving explicit credentials, configured SecretRefs, stored device auth, and exact-target TLS ownership. * fix(cli): harden terminal resume handoffs * fix(cli): parse terminal handoff outcomes * fix(cli): bind handoffs to resolved agent * test(ui): align terminal continuation proof * docs(plan): track terminal continuation * refactor(ui): keep terminal handoff result local * fix(ui): keep composer capability menus within the viewport (openclaw#122296) * fix(ui): constrain composer capability menus * fix(ui): cap composer capability menu height * test(ui): cover long capability menu states * test(ui): capture capability menu interaction states * fix(ui): keep dark capability states legible * test(cron): focus runtime config composition (openclaw#122867) Co-authored-by: Amp <amp@ampcode.com> * feat(cli): allow editing automation display names (openclaw#122702) * feat(cli): allow editing automation display names * feat(cli): allow clearing automation display names * fix(ui): show progress during new session startup (openclaw#122713) * fix(ui): show progress during new session startup Refs openclaw#122703 * oc-1fa: keep new-session progress through handoff * fix(ui): keep new-session handoff live * fix(ui): preserve navigation callback contract * fix: make live updater checkout portable (oc-237) (openclaw#122873) * refactor(media): remove orphan generation facades (openclaw#122874) * refactor(agents): split subagent-control.ts into owner modules (openclaw#122875) * fix(ui): archived sessions leave sidebar after navigation (openclaw#122876) * oc-ad0.1: fix archived child session retention * oc-37c: evict archived child on navigation * fix(ci): expose AI pack diagnostics (openclaw#122786) * fix(recovery): reclaim proven-stale reply-only ownership with zero queued backlog (openclaw#122265) * fix(recovery): reclaim proven-stale reply-only ownership with zero queued backlog Stuck-session recovery kept reply-only ownership forever when the queued backlog was empty: isActiveRunProgressStale short-circuits to false at queueDepth 0, so stale active_reply_work was never reclaimed even after the durable session became killed. Evaluate staleness for reply-only ownership without the queue gate (the gate stays for run-handle paths), so proven-stale reply work expires through the existing abort-and-drain owner path while global-lane and deferred-maintenance exemptions and live reply work with recent progress are preserved. Closes openclaw#122227 * fix(recovery): keep maintenance phases out of zero-backlog stale reclaim The zero-backlog reclaim path (requireQueueBacklog: false) applied to every reply-only operation, including preflight_compacting and memory_flushing. Those phases are explicitly recognized as compaction and may honor a configured timeout above the stale threshold, so a valid long-running maintenance operation could be force-cleared early. Restore the queue-backlog guard for the maintenance phases so an unqueued compaction or memory flush is never reclaimed by this path; ordinary reply-only ownership keeps the zero-backlog expiry. Adds regressions for both maintenance phases. * fix(ci): ignore zombie-only Vitest process groups (openclaw#122759) * test(agents): scope extension fixtures to explicit owners (openclaw#122883) * ci: fingerprint preferred pnpm hooks (openclaw#122852) Co-authored-by: Amp <amp@ampcode.com> * fix(ci): record startup JS growth in the Control UI budget baseline Startup JS gzip reached 329483 B on main (build-artifacts, af49764), 1198 B over the 328285 B baseline + 1024 B tolerance, after cumulative chat/session UI growth landed in openclaw#122296, openclaw#122713, openclaw#122870, and openclaw#122876. Record the CI-measured bytes (within the 4096 B ratchet) to restore green build-artifacts and QA Smoke lanes. * fix(codex): keep sessionless mirror warnings out of onboarding (openclaw#122831) * fix(codex): skip mirrors for sessionless runs * fix(codex): restore openai model provider on media understanding turns PR openclaw#122163 made thread/start modelProvider caller-supplied and updated the web-search caller but missed media understanding, breaking its tests on main full runs (cross-lane gap). Pass the provider explicitly and export the retire binding prod now touches from the shared-client test mock. * test(codex): align prompt assertions with reworded guidance PR openclaw#121522 reworded the Skill Workshop guidance and cd7b7f6 reworded the message-tool final-reply text; both updated core tests but missed these codex mirror assertions (cross-lane gap breaking main full runs). * test(codex): scope agent-projection fixture session to its agent PR openclaw#114388 made multi-agent session ownership explicit; the atlas-scoped projection test still used the shared main-scoped session key and now trips AgentSelectionRequiredError (fourth cross-lane escape on main). * fix(telegram): prevent multi-agent startup migration false positives (openclaw#122877) * fix(telegram): resolve legacy state owners explicitly * docs(changelog): note Telegram migration ownership fix * Revert "docs(changelog): note Telegram migration ownership fix" This reverts commit e02962e. * fix(reef): redact relay errors containing credentials (openclaw#119603) * feat: let limited browsers request admin access (openclaw#121459) * feat(gateway): add live device scope upgrades * feat(ui): add limited-access upgrade flow * fix(protocol): refresh Swift scope upgrade models * perf(ui): lazy-load device scope upgrades * fix(ci): complete scope upgrade generated surfaces * perf(ui): lazy-load GitHub link hovercards * fix(ui): keep admin repair guidance focusable * fix(ui): gate and refresh scope upgrade banner * refactor(ui): keep gateway client within line budget * fix(ci): align rebased scope upgrade checks * fix(ui): resolve scope upgrade in browser tests * fix(gateway): honor refreshed scope upgrade deadline * fix(gateway): honor refreshed scope upgrade deadline * fix(gateway): coalesce scope upgrade waiters * fix(ui): gate scope upgrade actions * chore(plugin-sdk): refresh rebased API baseline * fix(scope-upgrade): return canonical request ids * fix(ui): preserve gateway event type binding * fix(protocol): generate scope upgrade result models * fix(ui): preserve scope upgrade recovery guidance * chore(plugin-sdk): refresh rebased API baseline * test(ui): avoid scope upgrade navigation race * docs(control-ui): clarify scope upgrade approver * test(gateway): align appended method counts * chore(plugin-sdk): refresh rebased API baseline * refactor(ui): keep place picker within line budget * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * chore(plugin-sdk): refresh rebased API baseline * fix(gateway): preserve scope-upgrade browser origin * fix(matrix): retain previews when replacement delivery fails * test(matrix): tighten replacement proof * test(matrix): bind live replacement marker * test(matrix): type redaction ledger * test(matrix): observe nonvisible cleanup * fix(matrix): retain visible drafts on handler abort * test(commands): stub plugin metadata snapshot in onboard-inference test (openclaw#122901) The configured-model case lacked a current plugin metadata snapshot, so model normalization cold-discovered every bundled manifest; the prepared empty snapshot keeps the test on its intended boundary and reduced Vitest file wall time from 26.72s to 2.57s (the shell measurements were 194.45s and 56.21s including unrelated lock queues). * docs(skills): document session and transcript fetching in openclaw-debugging (openclaw#122904) Adds a Fetching Sessions and Transcripts section: sessions CLI first, then the per-agent SQLite data plane (session_nodes lookup from chat URL fragments, transcript_events shape, __openclaw sender provenance, session_transcript_fts, media://inbound mapping) and a dependency-free node:sqlite read-only recipe for hosts without sqlite3. Read-only-against- live-gateway rule stated inline. * fix: preserve compaction history when final audit fails * fix: redact compaction rejection diagnostics * fix: redact compaction retry errors * fix: isolate compaction structure audit * fix(ui): preserve picked image previews (openclaw#122905) Fall back to stored attachment data URLs when object URL previews are unavailable in the shared composer surface. * fix(zalo): keep packaged setup wizard loadable (openclaw#122902) * fix(zalo): package setup runtime surface * fix(tooling): track setup surface artifacts * fix(ci): run affected extension suites when changed-test planning falls back (openclaw#122885) The PR-changed test planner fails safe to the compact full-suite plan for any diff touching packages/**, but that compact plan excludes all extension test configs, so mixed package+extension PRs landed with zero extension test execution (escapes: PR openclaw#120534 breaking extensions/codex run-attempt.native-hook-relay.test.ts, PRs openclaw#122163/openclaw#121522 and cd7b7f6 breaking media-understanding-provider.test.ts and thread-lifecycle.test.ts on main full runs). The preflight now appends whole-config shards for the diff's touched extensions whenever the precise plan fails safe; whole configs (not precise targets) because the fail-safe cause leaves the non-extension diff's extension impact unbounded. * fix(gateway): resolve agent list model identity (openclaw#122907) Publish canonical resolved primary models with matching runtime and thinking metadata in agents.list. * test(microsoft-foundry): remove global test bridge (openclaw#122881) * test(microsoft-foundry): remove global test bridge * test(microsoft-foundry): type boundary fixtures * perf(ui): keep route transition out of startup * fix(e2e): verify suspend control over WebSocket (openclaw#122888) * fix(slack): prevent duplicate Socket Mode connections after reconnect errors (openclaw#122624) * fix(codex): read canonical transcript session targets (#1) * test(slack): reproduce reconnect timer surviving shutdown * fix(slack): keep reconnects within one socket lifecycle * test(slack): exercise native reconnect over loopback * test(slack): satisfy reconnect integration checks * fix(msteams): honor inbound channel media limit (openclaw#122315) * fix(msteams): honor inbound channel media limit * test(msteams): update lifecycle runtime mock * style(msteams): avoid resolver config shadowing * style(msteams): format lifecycle resolver mock * refactor(msteams): inline media fallback --------- Co-authored-by: DanielCardenas <djerez@lean-tech.io> Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com> * improve: speed up CLI spawn tests (openclaw#122891) * test(agents): trim cli spawn test imports * test(agents): distinguish prerelease policies --------- Co-authored-by: Amp <amp@ampcode.com> * fix(plugins): repair status and CLI fixtures (openclaw#122925) * fix: internal recovery prompts appear as operator-authored messages (openclaw#122908) * fix(agents): hide recovery prompts from transcripts Suppress settled-turn finalization and reasoning/empty-response control prompts at the session writer boundary. * test(agents): align hidden recovery prompt expectations * fix(ci): rotate stale dependency snapshot (openclaw#122921) Co-authored-by: Amp <amp@ampcode.com> * docs(gateway): clarify dynamic operator scopes (openclaw#122931) * fix: code mode dead-ends on oversized tool results instead of returning bounded output (openclaw#122924) * fix(agents): bound code mode bridge results Return oversized bridge, guest output, and final values as bounded successful projections with actionable narrowing guidance. * refactor(agents): absorb code mode output bounds * fix(ci): prevent channel add command test timeout (openclaw#122879) * test(channels): isolate add env setup contracts * test(channels): cover adapter env setup * fix(parallels): preserve plugin inventory during updates (openclaw#122912) * fix(parallels): preserve plugin inventory during updates * fix(parallels): preserve dev update plugin inventory * fix(ui): contain OAuth wizard modal content (openclaw#122892) * fix(ui): contain OAuth wizard modal content * test(ui): poll OAuth modal containment * refactor(ai): internalize ChatGPT SSE protocol (openclaw#122930) * feat(ui): show useful environment facts in the picker (openclaw#122923) * feat(ui): show environment facts in Where picker Preserve environment platform, trust, session-host, and capability metadata through new-session discovery while keeping placement availability tied to live executable nodes. Render bounded quiet device/cloud facts and add mocked browser coverage for task openclaw#33. * docs(plan): track picker environment facts * refactor(ui): split place browser rendering * docs(agents): require screenshot/video proof for UI-visible and gateway-behavior changes (openclaw#122920) Adds hard policy: UI-visible changes need before/after screenshots or a short video as PR evidence; gateway-behavior changes provable in the Control UI need an isolated dev-gateway live run with a recorded video. Documents the verified video upload flow (user-attachments endpoint, mp4/webm both served) and the bare-URL embed rule for GitHub's player. * fix(tools): preserve partial web fetch status (openclaw#122866) * fix(ui): deliver failed steer retries as a new turn when the session is idle (openclaw#122919) A steer rejected on the run/leaf fence parks as a failed steered queue row. Retry previously refused whenever the target run was gone, leaving the user's message permanently stuck with 'that run is no longer active'. Retry now converts the parked row into a plain queued send when the session is idle, so the text delivers as a fresh turn; active-run retries keep the original steer binding, and disconnected retries keep the existing error. * fix: stopping a session leaves subagents running with no stop control (openclaw#122909) * fix(gateway): cascade session stop to subagents Cascade exact and session-wide aborts through the subagent registry and keep Control UI Stop visible while descendants remain active. * refactor(gateway): absorb stop cascade orchestration * chore(gateway): refresh plugin SDK API contract for abort refactor Regenerates the export-closure contract after the stop-cascade refactor moved gateway abort orchestration exports, and drops a redundant Boolean() wrapper flagged by lint. Public SDK surface gate is unchanged. * chore(gateway): regenerate plugin SDK API baseline * fix(qa): preserve Code Mode reads in model-switch mock (openclaw#122935) * fix(ci): prevent flaky extension wrapper SIGTERM test (openclaw#122917) * test(scripts): wait for valid wrapper pids * test(scripts): harden PID marker reads * fix: session model selection replaced by response aliases and fallback wins (openclaw#122910) * fix(agents): keep session model selection canonical Preserve configured session model identity across response aliases and turn-local fallbacks. * fix(gateway): align session model projection consumers * test(gateway): mark session event model selection * test(gateway): stabilize sender avatar fixture (openclaw#122942) * perf(test): cut workflow guard import overhead (openclaw#122940) Co-authored-by: Amp <amp@ampcode.com> * test(extensions): remove duplicate runtime replays (openclaw#122949) * fix(ui): fence stale recovery scope work (openclaw#122944) * docs(deploy): add verification, cost, observability, and troubleshooting to the Cloudflare guide (openclaw#122932) The template shipped without the operator-facing half: no way to prove the restore path works before depending on it, no cost signal for the always-on versus webhook-only choice, no log surfaces, and no failure-mode index. Adds an architecture diagram, a restore rehearsal, measured recovery numbers from the real-R2 proof, provisioned-resource cost guidance, wrangler tail observability, and a troubleshooting index covering image architecture, Litestream S3 credentials, the startupz/readyz split, and ephemeral-disk config loss. * fix: prompt caching breaks on Claude Opus 5 and Sonnet 5 (openclaw#121283) * fix: prompt caching breaks on Claude Opus 5 and Sonnet 5 shouldPreserveThinkingBlocks() matched modern Claude ids with a hardcoded family list plus /claude-[5-9]/ future-proofing. That regex assumes the generation follows the prefix (claude-5-x), but shipped generation-5 ids place the family in between (claude-opus-5, claude-sonnet-5, claude-mythos-5), so none matched and dropThinkingBlocks flipped to true. Signed thinking blocks were stripped from replayed history, diverging every request and invalidating the Anthropic prompt cache on the default opus/sonnet aliases. Read the generation from the id instead, preserving blocks for generation 4 and newer. This handles both id shapes and matches the idiom already used in audit-extra.sync.ts and live-model-filter.ts. Closes openclaw#121251 * fix: correct Claude thinking replay contract Use the canonical Claude model identity and exact Anthropic preservation contract when deciding whether replay may retain prior thinking blocks. Carry deployment metadata through provider-family and fallback paths, and include canonicalModelId in the transcript policy cache key. Release note: Restore prompt-cache reuse for Claude Opus 5 and Sonnet 5 while continuing to strip unsupported Sonnet and Haiku 4.5 thinking history. * refactor: remove unused replay compatibility helper Use the canonical Claude drop predicate at the remaining test call sites and remove the unconsumed preservation export so the dependency/dead-code gate stays clean. * fix: keep Claude replay contract internal Use canonical llm-core identity resolution without exporting a new llm-core capability, avoiding unintended Plugin SDK API drift. --------- Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com> * fix(sessions): highWaterBytes 0 no longer deletes all session history (openclaw#119909) * fix(sessions): zero highWaterBytes no longer clears all session history resolveHighWaterBytes passed an explicit non-positive highWaterBytes through verbatim. The resolved value is the disk-budget cleanup loop's stop condition, so a zero target made enforce mode evict every unprotected session and prune its extracted archives instead of trimming to the documented 80% default. Route the non-positive case to the function's existing unusable-value branch (computeDefault). Not null: that disables the budget and permits unbounded growth, which is right for a cap but wrong for a target. Sibling of openclaw#119422, which fixed the same harm for maxDiskBytes and guarded only resolveMaxDiskBytes. * test(infra): isolate worktree migration discovery Keep worktree migration coverage focused on its real filesystem, Git, and SQLite owner while avoiding unrelated channel and plugin doctor cold starts on fork CI. Co-authored-by: masatohoshino <g515hoshino@gmail.com> * test(ci): carry owner-approved SDK and doctor gate repairs Carry the already-approved plugin SDK contract manifest and focused doctor-flow test isolation from the maintainer-owned CI repair. Preserve real config migration, persistence, snapshot, and SQLite cleanup coverage; no production behavior changes. Co-authored-by: masatohoshino <g515hoshino@gmail.com> * fix(sessions): use the renamed withTestDir helper in the new budget test * fix(sessions): align high-water zero contract * style(sessions): format high-water changes --------- Co-authored-by: Peter Steinberger <steipete@gmail.com> Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com> * fix(ui): model picker shifts when another user starts typing (openclaw#122809) * fix(ui): keep composer model picker stable while typing * test(ui): prove typing keeps model picker stable Co-authored-by: Colin Johnson <colin@solvely.net> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com> * feat(ui): split new session place picker (openclaw#122938) * feat(ui): split new session place picker * test(ui): cover three-chip session picker * fix(gateway): allow downloading zero-byte artifacts (openclaw#122928) * fix(gateway): preserve zero-byte artifacts * fix(gateway): keep non-string data out of artifact lists * test(gateway): compact zero-byte artifact coverage * feat(ui): open subagent details in chat sidebar (openclaw#122941) * feat(ui): open subagent details in chat sidebar * chore: drop changelog edit (release generation owns it) * refactor(ui): drop duplicate close in subagent detail panel The sidebar region header already owns a Close Details control in both wide and narrow layouts; the panel-local X duplicated it 40px away. * fix(ui): stop subagent transcript loader when pane presentation retires Pane retention wipes sidebarContent directly, so the detail slot's render-time reset can never run again; a pending refresh timer plus incoming task events kept refetching chat.history for a hidden panel. * docs(ui): note close-control ownership in subagent detail header * fix(ui): break transcript renderer import cycle * fix(ui): use shared action cursor for subagent rows * fix: install or review the publisher you picked when ClawHub skills share a slug (openclaw#121697) * fix(skills): keep ClawHub publisher identity from search through install ClawHub search returns one entry per publisher, so several results can share a slug. Every client collapsed the selection to that bare slug before calling skills.detail and skills.install, and ClawHub answered 409 AMBIGUOUS_SKILL_SLUG with no in-product way forward. searchClawHubSkills now records the publisher-qualified reference once, on the result that carries it, and the Gateway protocol documents it. skills.detail parses the same reference grammar skills.install already accepted, so review and install cannot resolve to different publishers. Control UI carries that one reference through row actions, detail, busy state, and acknowledgement retries, and shows it so otherwise identical rows are distinguishable. Fixes openclaw#117633 * fix(apps): send the ClawHub publisher reference from native skill browsers macOS, iOS, and Android read the qualified reference from search results and use it for skills.detail, install, busy state, installed matching, and list identity, so two publishers sharing a slug stay distinct instead of collapsing into one ambiguous request. * fix(skills): refuse external-source skill detail instead of reading a same-slug skill ClawHub has no source-qualified read endpoint, so a skills-sh reference parsed down to its bare slug would have returned a registry skill's card while install resolved the external artifact. Review and install could name different skills. skills.detail now fails closed on any reference that carries a source, and the macOS and AgentPro rows show the publisher reference next to the summary instead of only when a summary is missing, so same-slug rows stay distinguishable. * chore(apps): refresh native i18n source baseline for the skill row references * refactor(skills): drop the unread search-result ownerHandle field installRef is the one reference clients send back, and no client reads the publisher handle separately, so the protocol and Control UI carry one field instead of two. * fix(skills): name the next step when external skill detail is refused Clients that gate install behind a successful review would otherwise see only a refusal, so the error names the direct install path and the CLI equivalent. * fix(macos): use a doc comment on the ClawHub row subtitle swift-format's docComments rule requires doc comments on declarations; the subtitle property carried a regular comment and failed macos-swift. * fix(skills): carry ClawHub trust state to clients that can install Forwarding installRef let clients install the exact publisher the operator picked, including external skills-sh sources. It did not forward the trust state that says ClawHub never scanned that source, so iOS AgentPro — the one surface that installs in a single tap with no review step — could install an unscanned artifact with nothing on screen saying so. The CLI already labels these (docs/clawhub/cli.md, docs/cli/skills.md); native clients could not, because trustState was never on the wire. trustState becomes an optional field on SkillsSearchResultSchema. It is purely additive: older clients ignore an unknown key and the field is absent for registry results, so downgraded readers are unaffected and no protocol version moves. Every client that renders a search row now shows "Not scanned by ClawHub", matching the CLI wording exactly: iOS AgentPro in the row above the install button, macOS and Android beside the review action, and Control UI on the row that explains why review is refused for these sources. Covered by a wire assertion that the state reaches clients for an external source and stays absent for registry rows, plus decode-and-label tests on the shared Swift kit and the Android parser, and a Control UI render assertion. * fix(ui): size the ClawHub detail dialog to a refusal message Refusing detail for an external source made an error-only dialog reachable. The shared preview panel reserves a tall reader height for skill documents, so a two-line refusal rendered in a mostly empty dialog and read as broken rather than deliberate. Found by inspecting the review captures. * revert(ui,apps): drop the ClawHub trust label layer Maintainer product decision: skills.sh runs its own scanners, so OpenClaw does not add a second alert layer in the apps. Removes the label from Control UI, iOS, macOS and Android, and drops the trustState wire field that nothing would render. The CLI keeps its existing label; changing that is a separate call. Publisher identity, the fail-closed detail refusal, and the message-only dialog are unchanged. Splits the oversized skills view test file to satisfy max-lines without a suppression. * test(ui): fix ClawHub skill fixture checks * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com> * oc-e35: restore explicit multi-agent UI ownership (openclaw#122889) * fix(agents): hydrate CLI images from agent workspaces (openclaw#122684) * fix(agents): hydrate CLI images from agent workspace * fix(agents): preserve resolved CLI workspace owner * fix(agents): keep workspace owner in prepared params * fix(agents): resolve CLI owner before preparation * fix(agents): preserve CLI runtime policy owner --------- Co-authored-by: Adkid-Zephyr <169631528+Adkid-Zephyr@users.noreply.github.com> Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com> * fix(ai): honor embedded transport policy (openclaw#122946) * refactor: remove residual normalization aliases (openclaw#122956) * refactor: remove residual normalization aliases * test(gateway): isolate approval authority handshake * fix(qa): isolate staged auth state (openclaw#122958) * fix(wizard): honor gateway overrides in manual flow (openclaw#122961) * refactor(config): retire dead streaming.progress.render key (openclaw#122927) * refactor(config): retire dead streaming.progress.render key The key had zero runtime consumers after openclaw#122552. Core doctor now strips it via stripRetiredTuningKnobs, and production LOC is net -13. * fix(tooling): pin plugin SDK surface counts to the reduced export set The retired progress-draft render reader counted twice via channel-outbound and channel-message's wildcard re-export. * fix(projects): avoid stale GitHub results after token rotation (openclaw#122613) * fix(projects): avoid stale GitHub results after token rotation * fix(gateway): scope GitHub caches by credential * style(gateway): format GitHub credential scope --------- Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com> * fix(cli): avoid restart hint for unchanged config (openclaw#122953) * fix(cli): avoid restart hint for unchanged config * docs(cli): clarify no-op restart guidance * fix(onboard): allow imports after runtime scaffolding (openclaw#122967) * fix(cli): fail fast when onboarding profile is busy (openclaw#122968) * fix: GitHub project selection cloned repos before Start Session (openclaw#122906) * fix(ui): defer GitHub project clone until submit Keep remote project selection as draft state and materialize it before sessions.create on Start Session. * fix(ui): consolidate deferred project selection * test(ui): drop duplicate remote project assertion * fix(deploy): repair probes that silently pass and a blueprint that cannot boot (openclaw#122963) Three defects proven by running the shipped configs: Kubernetes probes checked only the status code against /startupz, but the pinned image predates that route and the Control UI answers unknown paths with a catch-all 200. A wedged pod was therefore marked Ready forever. Probes now assert the JSON probe contract and target routes the pinned image actually serves; verified in a kind cluster where the old command exits 0 on the missing route and the new one exits 1. render.yaml set no dockerCommand, so the image CMD ran without --allow-unconfigured and a fresh Render disk exited 78 with 'Missing config' before binding. Reproduced locally with Render's exact env. The Cloudflare Container readiness poll had the same route mismatch against operator-supplied official image digests; it now polls /healthz, which every published image serves. Also replaces an R2 verification step that could never fail: wrangler cannot list object keys, so the documented command 404'd into || true. * docs: repair spellcheck and anchor drift (openclaw#122960) * docs: repair spellcheck and anchor drift * docs: satisfy markdown anchor lint * docs(hosting): fix unsafe deployment instructions (openclaw#122971) * test(agents): remove global test APIs (openclaw#122972) * fix(slack): accept org-wide user IDs in Enterprise Grid policies (openclaw#122934) * test(slack): accept org-wide enterprise users * fix(slack): allow org-wide enterprise users * style(slack): format enterprise user policy * test(slack): preserve enterprise user identity scope * fix(slack): preserve enterprise user identity scope * fix(slack): import workspace identity normalizer * fix(slack): normalize enterprise owner ids --------- Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com> * refactor(state): simplify schema migration validation (openclaw#122959) * perf(test): avoid embedded runtime imports in btw suite (openclaw#122957) Co-authored-by: Amp <amp@ampcode.com> * fix(agents): preserve setup inference auth owner (openclaw#122975) * feat(ui): open bare pair command without a chat turn (openclaw#120855) Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com> * test(extensions): repair stale full-config extension tests (openclaw#122978) clickclack inbound mention gating: openclaw#114388 (1ca60fb) made multi-agent fallback ownership explicit, so the openclaw#115484 fixture now declares its clickclack:default service-bot binding. policy CLI: openclaw#114388 (1ca60fb) removed ambient ownership from normalized multi-agent configs, so the openclaw#111087 routing-probe fixture uses the sole main agent and still reaches the intended findings exit. Teams and Zoom node invoke policy: openclaw#118451 (7d40666) added trusted audio backend, buffer size, and format forwarding; assert those fields alongside the configured commands. Teams node host: openclaw#118451 (7d40666) made default audio commands platform-dependent at import time after openclaw#111455 added the sox dedupe test; reset modules and mock Darwin before importing defaults. * fix(cli): rejected profile commands no longer create state (openclaw#122970) * fix(cli): defer profile state creation past argument validation * test(cli): use tracked profile temp directory * test(doctor): align checkpoint expectation with pristine roots * fix(agents): report recovered compaction runs as completed (openclaw#122974) * refactor(gateway): remove suspension mock replay (openclaw#122977) * test(gateway): remove suspension mock replay * test(agents): stabilize headless timeout assertion * feat(node-host): add negotiated private worker controls (openclaw#122939) * feat(node-host): add private worker supervisor controls * refactor(node-host): harden private worker controls * refactor(node-host): simplify private worker controls * docs(plan): track private worker controls * fix(node-host): satisfy private control CI guards * test(gateway): follow worker service construction boundary * test(gateway): register private control release train * fix(gateway): retain worker dialect across reapproval * fix(sessions): preserve durable transcript ownership (openclaw#122729) Resolve transcript writes through the durable SQLite session-window owner, reject owner changes transactionally, and repair unambiguous stolen-owner aliases with Doctor. Co-authored-by: Ayaan Zaidi <hi@obviy.us> Co-authored-by: Thorsten Stresow <185197304+thostr1@users.noreply.github.com> * feat(xai): add Grok 4.6 catalog and preserve OAuth xhigh (openclaw#122762) * feat(xai): add Grok 4.6 catalog and preserve OAuth xhigh Add first-class Grok 4.6 discovery, pricing, and reasoning metadata while keeping the existing Grok 4.3 API-key and server-tool defaults unchanged. Preserve xhigh only for Grok 4.6 so OAuth auto no longer inherits the Grok 4.5 high downgrade. Closes nothing; tracks openclaw#122734. * fix(xai): resolve the OAuth auto alias to its canonical model in the thinking policy The OAuth catalog row keeps id "auto" and records the provider-selected target in params.canonicalModelId; judging the raw alias collapsed the default OAuth route to an off-only thinking picker for every model. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(xai): refresh catalog-order assertions and restore stream deadlines for Grok 4.6 Exact-order catalog and onboarding arrays now include the new row with its metadata assertion; payload-capture timeouts return to their original values, Grok 4.5 off-clamp and Grok 4.3 modern-model coverage are restored, and the Grok 4.6 xhigh boundary test passes its id explicitly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat(agents): add Grok 4.6 to the curated high-signal live matrix xai is a curated-only high-signal provider, so the new flagship was structurally excluded from default live sweeps; add it alongside Grok 4.5 with its test and docs mirrors, matching the 4.5 precedent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(xai): align Grok frontier metadata * fix(xai): align Grok 4.6 catalog contract Remove the unsupported moving alias, centralize OAuth auto target resolution, correct cached pricing, and keep live coverage on the stable xhigh completion path. Co-authored-by: Kiran Magic <262980978+kiranmagic7@users.noreply.github.com> --------- Co-authored-by: Kiran Magic <262980978+kiranmagic7@users.noreply.github.com> Co-authored-by: Kiran Magic <kiran@Alices-Laptop.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Kiran <kiranmagic7@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com> * test(plugins): refresh fixture contracts (openclaw#122986) * improve: one channel picker and one model picker across the Control UI (openclaw#122964) * fix(ui): unify channel pickers with icons Preserve channel values and mutation ownership across Automations, pairing, setup, and Workboard while sharing accessible picker rendering and artwork. * refactor(ui): unify model pickers Share provider-aware model selection across chat, new sessions, Automations, Agents, model defaults, Session Observer, Talk, and Memory while preserving owner-specific values and locks. * fix(ui): keep picker change callbacks value-only Keep the Web Awesome element private to model-picker custom-mode handling while preserving one-argument callbacks for every picker consumer. * fix(ui): satisfy model picker types Keep custom sentinel options within the shared model option shape and guard optional Memory placeholder translation keys. * refactor(ui): remove obsolete model option template import Drop the Lit import after Agents model options became pure shared-picker data. * fix(ui): satisfy picker lint gates Use explicit model option mapping, remove stale E2E locals, and keep the Cron behavior suite within its enforced line budget. * test(ui): target unified session model picker * fix(ci): rename state migration assertion map off the env-var pattern OPENCLAW_STATE_MIGRATION_ASSERTIONS (a module-local const introduced by openclaw#122959) matches the OPENCLAW_[A-Z0-9_]+ source scan in scripts/check-env-var-count.mts, pushing the env-var ratchet to 503/502 and failing check:env-var-count on every branch based on current main. It is not an environment variable; rename it to STATE_MIGRATION_ASSERTIONS so the ratchet stays an honest env-var count. * test(oc-path): make perf budgets robust to CI scheduler noise (openclaw#122994) * fix(memory): keep session reconciliation off search path (openclaw#120837) * fix(memory): keep session reconciliation off search path * test(memory): decouple reconciliation test from provider fixture --------- Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com> * fix(agents): preserve headless timeout ownership (openclaw#122997) * fix(gateway): preserve system agent ownership (openclaw#122987) * fix(gateway): preserve system agent ownership * chore(plugin-sdk): refresh ownership API baseline * fix(gateway): preserve global system event routing * refactor(ui): one task-detail surface for rail and subagent clicks (openclaw#123003) * refactor(ui): unify task details in sidebar panel * docs(ui): describe task detail sidebar * refactor(ui): collapse onSelectTask into onOpenTaskDetail Two names for the same open-the-panel action; rows now call the callback directly. * fix(ui): clear rail open-task highlight when detail slot closes openTaskId derived from sidebarContent alone, but region close only collapses the layout and retains content, leaving a stale aria-current row; gate the highlight on detail-slot visibility. * fix(ui): keep requester sessions out of subagent transcripts and let reopen retry failed lookups A queued subagent has no child session yet; falling back to its sessionKey rendered the requester's conversation as the task transcript. And a failed tasks.get permanently suppressed the panel's render-driven load; selection now clears the recorded error so reopening retries, matching the old rail behavior. * test(buzz): add opt-in thread QA coverage (openclaw#116081) * test(buzz): add opt-in thread QA coverage * fix(buzz): preserve QA conversation kind --------- Co-authored-by: Dallin Romney <dallinromney@gmail.com> * perf(test): avoid unrelated runtime imports in MCP suite (openclaw#122998) Remove duplicate adversarial filter integration coverage, replace broad plugin/auth imports with contract-complete test leaves, and repair the main env-var ratchet broken by an unrelated newly added internal constant. Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03 Co-authored-by: Amp <amp@ampcode.com> * fix(ci): sanitize AI manifest during installer pack (openclaw#122952) * test(agents): move recovery transcript proof to QA (openclaw#123006) * fix(discord): chunk long thread initial messages (openclaw#117354) Discord rejected over-limit starter messages and could leave ordinary threads empty after creation. Split initial content through the existing Discord chunking and nonce-retry path while preserving confirmed-versus-ambiguous partial-delivery results. Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com> * refactor(plugin-sdk): remove retired Copilot login chain (openclaw#122988) * refactor(plugin-sdk): remove retired Copilot login chain * chore(plugin-sdk): refresh generated API baselines * build(github-copilot): remove unused prompt dependency * chore(plugin-sdk): reconcile API baselines after rebase * fix(e2e): declare agents-delete fixture owners (openclaw#123000) * fix(sessions): preserve pinned sessions during maintenance (openclaw#122990) * fix(state): accept shipped commitments schema (openclaw#122945) * fix(parallels): recover migration-refused gateway startup * fix(signal): fail probe when RPC verification fails (openclaw#123001) * feat(worker): expose supervised terminal outcomes (openclaw#123013) * feat(worker): expose supervised terminal outcomes * docs(plan): track supervisor terminal outcomes * test: speed up attempt execution helpers (openclaw#123012) Co-authored-by: Amp <amp@ampcode.com> * fix(replies): keep approval-unavailable notices durable (openclaw#121179) Punchcard-Session: clear-lantern-summit-v2 * fix(ui): stop misreporting limited Custodian access (openclaw#123011) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com> Co-authored-by: Vyctor H. Brzezowski <krzyszchweski@gmail.com> Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: Jacqueline Henriksen <jjjhenriksen@gmail.com> Co-authored-by: Josh Lehman <josh@martian.engineering> Co-authored-by: Vincent Koc <vincentkoc@ieee.org> Co-authored-by: licheer-zte <li.qi16@xydigit.com> Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com> Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com> Co-authored-by: Calin Laurentiu Ilie <calinilielaur@gmail.com> Co-authored-by: Daniel Cárdenas <dacardenasj@unal.edu.co> Co-authored-by: DanielCardenas <djerez@lean-tech.io> Co-authored-by: Colin Johnson <colin@solvely.net> Co-authored-by: Chinmay Rawat <88652081+Chinmayrawat15@users.noreply.github.com> Co-authored-by: Masato Hoshino <g515hoshino@gmail.com> Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com> Co-authored-by: Feng <laufs0310@163.com> Co-authored-by: Adkid-Zephyr <169631528+Adkid-Zephyr@users.noreply.github.com> Co-authored-by: PIYUSH RATHORE <163632958+Piyushrathoree@users.noreply.github.com> Co-authored-by: Sarah Fortune <sjf@openai.com> Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com> Co-authored-by: Ayaan Zaidi <hi@obviy.us> Co-authored-by: Thorsten Stresow <185197304+thostr1@users.noreply.github.com> Co-authored-by: kiranmagic7 <kiranmagic@proton.me> Co-authored-by: Kiran Magic <262980978+kiranmagic7@users.noreply.github.com> Co-authored-by: Kiran Magic <kiran@Alices-Laptop.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Kiran <kiranmagic7@users.noreply.github.com> Co-authored-by: Dallin Romney <dallinromney@gmail.com> Co-authored-by: xingzhou <zhang.guiping@xydigit.com> Co-authored-by: Leon-SK668 <0668001470@xydigit.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Beep boop. Your images are optimized!
Your image file size has been reduced by 7% 🎉
Details
📝 docs |
repo | 🙋🏾 issues | 🏪 marketplace
~Imgbot - Part of Optimole family