OAuth credentials with a refresh token auto-renew on first API call,
so the doctor should not warn about access token expiration when a
refresh token is present. This avoids unnecessary "expired" warnings
that prompt users to re-auth when no action is needed.
Fixes#3032
Co-authored-by: Ayush Ojha <ayushozha@outlook.com>
Fixes#4531
When accessing the Web UI from a different machine on the LAN, users
were getting a cryptic 'disconnected (1008): pairing required' error
with no indication of how to resolve it.
Changes:
1. Enhanced server error message to include:
- Clear explanation of the pairing requirement
- Step-by-step CLI instructions (openclaw devices list/approve)
- The specific request ID to approve
- Note that approval must be done on the server machine
- Alternative method (localhost Control UI)
2. Updated Web UI to propagate the full error message from the server
instead of the generic 'connect failed' message
Impact:
- Non-breaking change (only improves error messaging)
- Backwards compatible with existing clients
- Significantly improves UX for LAN/remote access scenarios
Before:
Error: disconnected (1008): pairing required
After:
Error: Device pairing required. On the OpenClaw server machine, run:
'openclaw devices list' to see pending requests, then
'openclaw devices approve <request-id>' to approve this device.
Alternatively, access the Control UI from the server's localhost to approve.
Fixes#4536 - WebChat shows empty Assistant responses
Root cause: Standard Google providers (google-gemini-cli, google-generative-ai)
were incorrectly classified as 'reasoning tag providers', which:
1. Added instructions to use <think> and <final> tags in system prompt
2. Enabled enforceFinalTag=true which requires ALL responses to have <final> tags
3. Stripped responses to empty strings when no <final> tag found
Gemini 2.0 doesn't natively use these tags, so all responses were stripped empty.
Changes:
- Remove 'google-gemini-cli' from isReasoningTagProvider()
- Remove 'google-generative-ai' from isReasoningTagProvider()
- Keep 'google-antigravity' (Gemini 3.0 DOES use reasoning tags)
- Add clarifying comments about which providers natively use tags
Impact:
- ✅ Gemini 2.0 responses now display correctly
- ✅ OpenAI errors now shown to users
- ✅ Google Antigravity (Gemini 3.0) still works correctly
- ✅ Ollama and Minimax unchanged
Unify style and link closing in render.ts to use LIFO order across
both element types, fixing cases where bold/italic spans containing
autolinks produced invalid HTML like <b><a></b></a>.
The react action used readStringParam for messageId and chatId, which
rejected numeric values with a misleading "messageId required" error.
Switched to readStringOrNumberParam to match the delete/edit actions.
Closes#1459
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fixes#4038
The global fetch in Node.js doesn't support undici's dispatcher option,
which is required for ProxyAgent to work. This fix imports fetch from
undici directly to enable proper proxy support for Telegram API calls.
Root cause: makeProxyFetch() was using global fetch with { dispatcher: agent },
but Node.js's global fetch ignores the dispatcher option. Using undici.fetch
ensures the ProxyAgent dispatcher is properly respected.
Tested: Build passes, TypeScript compilation successful.
registerTelegramNativeCommands() calls listSkillCommandsForAgents()
without passing agentIds, causing ALL agents' skill commands to be
registered on EVERY Telegram bot. When multiple agents share skill
names (e.g. two agents both have a "butler" skill), the shared `used`
Set in listSkillCommandsForAgents causes de-duplication suffixes
(_2, _3) and all commands appear on every bot regardless of agent
binding.
This fix uses the existing resolveAgentRoute() (already imported) to
find the bound agent for the current Telegram accountId, then passes
that agentId to listSkillCommandsForAgents(). The function already
accepts an optional agentIds parameter — it just wasn't wired from
the Telegram registration path.
Before: All agents' skill commands registered on every Telegram bot,
causing /butler_2, /housekeeper_2 dedup suffixes and potential
BOT_COMMANDS_TOO_MUCH errors when total exceeds 100.
After: Each Telegram bot only registers skill commands for its own
bound agent. No cross-agent dedup, no command limit overflow.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add Kimi K2.5 model to synthetic catalog
Add hf:moonshotai/Kimi-K2.5 to the synthetic model catalog.
This model is available via dev.synthetic.new API.
- 256k context window
- 8192 max tokens
- Supports reasoning
* chore: fix formatting in onboard-helpers.ts
* fix: update config candidate ordering test (#4407) (thanks @manikv12)
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Replaced the static image with a responsive logo using the <picture> element for light/dark mode support. Updated contributor name from 'Clawd' to 'Molty'.
Replaces the previous ASCII art in both the CLI banner and the wizard header with a new, wider design and updates the label to 'OPENCLAW' for consistency.