@hzttt/config-portal
v2026.2.26
Published
OpenClaw visual config portal plugin (Kimi/Qwen/Feishu)
Readme
OpenClaw Config Portal Plugin
Visual config plugin for OpenClaw gateway settings.
What This Portal Manages (V2)
- Provider routing (
schemaVersion: 2)- Generic providers list (add/edit, no delete)
- Primary route (
routing.primaryProviderId+routing.primaryModelId)
- Feishu channel
- Credentials + connection fields are written to
channels.feishu.accounts.<accountId> - Policy fields remain at
channels.feishutop level
- Credentials + connection fields are written to
- QQ channel (
qqbot)- Writes to
channels.qqbot
- Writes to
API Contract
GET /plugins/config-portal/api/config
- Returns V2 payload:
{
"schemaVersion": 2,
"routing": {
"primaryProviderId": "kimi-coding",
"primaryModelId": "kimi-k2.5-coding-preview"
},
"providers": [],
"channels": {
"feishu": {},
"qq": {}
}
}POST /plugins/config-portal/api/config
- Accepts both:
- V2 payload (
schemaVersion: 2) - Legacy V1 payload (
activeModelProvider,kimi,qwen,feishu,qq)
- V2 payload (
- Server normalizes input to V2 before applying.
Write Behavior
- Providers are upsert-only (existing providers not present in payload are preserved).
agents.defaults.model.primaryis set fromrouting.- Existing
fallbacksare preserved. - Feishu secrets (
appSecret,encryptKey,verificationToken) are preserved when incoming fields are empty. - QQ
clientSecretis preserved when incoming field is empty. - If QQ
appIdchanges,clientSecretmust be provided in the same save (to avoid stale secret mismatch). dmPolicy="open"requiresallowFromto include"*"(invalid payload is rejected).
Routes
- Page:
/plugins/config-portal - API:
/plugins/config-portal/api/config - Legacy Page Alias:
/plugins/openclaw-config-portal - Legacy API Alias:
/plugins/openclaw-config-portal/api/config
Notes
- Saving writes directly to OpenClaw config file.
- Saving QQ channel changes now clears all contents under
~/clawd/qqbot-data/(including session and known-users cache files) so QQBot reconnects with fully fresh state. - QQ save now also writes a pending reset marker; after gateway restart, config-portal performs one startup cleanup pass to clear shutdown-time rewrites like
known-users.json. - Saving now also triggers a Gateway restart automatically so runtime model/channel changes take effect.
- Restart order is: daemon restart command first, then authorized in-process
SIGUSR1fallback. - Frontend now probes
/api/configduring restart and shows explicit success/failure status.
