Skip to content

[ImgBot] Optimize images - #1

Open
imgbot[bot] wants to merge 143 commits into
avwq_devfrom
imgbot
Open

[ImgBot] Optimize images#1
imgbot[bot] wants to merge 143 commits into
avwq_devfrom
imgbot

Conversation

@imgbot

@imgbot imgbot Bot commented Mar 13, 2026

Copy link
Copy Markdown

Beep boop. Your images are optimized!

Your image file size has been reduced by 7% 🎉

Details
File Before After Percent reduction
/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.50%
/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.40%
/docs/assets/sponsors/convex.svg 3.05kb 2.98kb 2.40%
/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.60%
/ui/public/provider-icons/ProviderIcon-grok.svg 0.70kb 0.69kb 1.40%
/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.60%
/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.40%
/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%
Total : 244.65kb 227.75kb 6.91%

📝 docs | :octocat: repo | 🙋🏾 issues | 🏪 marketplace

~Imgbot - Part of Optimole family

addstone and others added 6 commits July 9, 2026 17:47
*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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants