Resolve conflicts in docs and TypeScript files after project rename
from Moltbot to OpenClaw. All GLM provider implementations updated to
use OpenClawConfig type and openclaw CLI command in documentation.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
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.
The previous documentation suggested API keys work on both general and
coding endpoints with just different billing. Research confirmed this
is misleading - keys are subscription-gated and will return error 1113
("Insufficient balance") when used on the wrong endpoint type.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Resolve conflicts with Xiaomi MiMo provider addition (#3454).
Both PRs added new providers to the same infrastructure files.
Conflicts resolved by including both sets of changes:
- docs/providers/index.md: Add Xiaomi link alongside GLM docs
- src/cli/program/register.onboard.ts: Add all CLI flags
- src/commands/auth-choice-options.ts: Add all auth choices and groups
- src/commands/auth-choice.apply.api-providers.ts: Add all handlers
- src/commands/onboard-auth.config-core.ts: Add all config imports
- src/commands/onboard-auth.credentials.ts: Add all credentials functions
- src/commands/onboard-auth.ts: Add all exports
- src/commands/onboard-non-interactive/local/auth-choice.ts: Add all handlers
- src/commands/onboard-types.ts: Add all types
- src/infra/provider-usage.shared.ts: Add all provider labels
- src/infra/provider-usage.types.ts: Add all provider IDs
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Update existing test files to cover all four GLM provider variants:
- auth-choice-options.test.ts: Group test for zai, zai-coding, zhipu,
zhipu-coding auth choice menu presence (follows MiniMax/Moonshot pattern)
- program.smoke.test.ts: Add CLI flag wiring tests for --zai-coding-api-key,
--zhipu-api-key, --zhipu-coding-api-key
- model-auth.test.ts: Add env var resolution tests for:
- zai-coding with fallback to ZAI_API_KEY
- zhipu with ZHIPU_API_KEY
- zhipu-coding with fallback to ZHIPU_API_KEY
- provider-usage.test.ts: Add test for zhipu bigmodel.cn endpoint
(will fail until fetchZhipuUsage is implemented)
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Update provider documentation with:
- Four provider variants table (zai, zai-coding, zhipu, zhipu-coding)
- Region and plan type guidance
- CLI setup commands for all variants
- Environment variable fallback chains
- Config snippets for each variant
- Important notes on key interchangeability and billing
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add onboarding support for all four GLM provider variants:
- CLI flags: --zai-coding-api-key, --zhipu-api-key, --zhipu-coding-api-key
- Auth choice menu options with regional grouping
- Interactive and non-interactive auth handlers
- hasCredential guards for proper token/env var precedence
- OAuth rejection for non-API-key auth methods
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add four distinct provider variants for GLM models:
- zai: International pay-as-you-go (api.z.ai)
- zai-coding: International Coding Plan (api.z.ai/coding)
- zhipu: China pay-as-you-go (bigmodel.cn)
- zhipu-coding: China Coding Plan (bigmodel.cn/coding)
Includes:
- Provider config functions with proper base URLs
- GLM model definition (glm-4.7, 205K context)
- Env var resolution with fallback chains
- Provider ID normalization for aliases
- Usage provider IDs and labels
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
What:
- resolve shell from PATH in bash-tools tests (avoid /bin/bash dependency)
- mock DNS for web-fetch SSRF tests (no real network)
- stub a2ui bundle in canvas-host server test when missing
Why:
- keep gateway test suite deterministic on Nix/Garnix Linux
Tests:
- not run locally (known missing deps in unit test run)
What:
- stub resolvePinnedHostname in web-fetch tests to avoid DNS flake
- close lock file handles via FileHandle.close during cleanup to avoid EBADF
Why:
- make CI deterministic without network/DNS dependence
- prevent double-close errors from GC
Tests:
- pnpm vitest run --config vitest.unit.config.ts src/agents/tools/web-tools.fetch.test.ts src/agents/session-write-lock.test.ts (failed: missing @aws-sdk/client-bedrock)
* refactor(ui): enhance loadSessions function to accept overrides for session loading parameters
- Updated loadSessions to include optional parameters for activeMinutes, limit, includeGlobal, and includeUnknown.
- Modified refreshChat to use the new activeMinutes parameter when loading sessions.
- Removed duplicate applySettingsFromUrl call in handleConnected function.
* feat(ui): implement session refresh functionality after chat
- Added `refreshSessionsAfterChat` property to `ChatHost` and `GatewayHost` types.
- Introduced `isChatResetCommand` function to identify chat reset commands.
- Updated `handleSendChat` to set `refreshSessions` based on chat reset commands.
- Modified `handleGatewayEventUnsafe` to load sessions when chat is finalized and `refreshSessionsAfterChat` is true.
- Enhanced `refreshChat` to load sessions with `activeMinutes` set to 0 for immediate refresh.
NTFS does not allow < or > in filenames, causing the XML filename
escaping test to fail on Windows CI with ENOENT.
Replace file<test>.txt with file&test.txt — & is valid on all platforms
and still requires XML escaping (&), preserving the test's intent.
Fixes#3748
Previous fix only checked skippedEmpty > 0, but when model returns
content: [] no payloads are created at all. Now also checks
replies.length === 0 to catch this case.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>