Three coordinated things:
1. Resolve the committed upstream/main merge conflicts. 94 files were
sitting with raw <<<<<<< HEAD ... >>>>>>> upstream/main blocks. Every
conflict had HanzoBot/Bot on HEAD and OpenClaw on upstream. Resolved
by keeping HEAD everywhere — 540 conflict blocks.
2. Rewrite remaining OpenClaw text refs.
OPENCLAW → HANZO_BOT
OpenClaw → HanzoBot (PascalCase type identifiers)
openclaw → bot (codebase convention — botToken,
botUsername etc.; avoids invalid
hyphenated JS identifiers)
openclaw[_]/openclaw[A-Z] → bot[_]/bot[A-Z] (compound)
ai.openclaw.x → ai.hanzo.bot.x (JVM package path)
3. Delete or rename openclaw-named file paths (116 of them). Dead
duplicates with a Bot-named canonical from the partial migration:
deleted. Otherwise renamed.
ai/openclaw/** → deleted (ai/hanzo/bot/** canonical)
Sources/OpenClaw*/ → deleted (Sources/Bot* canonical)
Tests/OpenClawIPCTests/ → deleted (Tests/BotIPCTests canonical)
OpenClawKit/ → deleted (BotKit canonical)
openclaw-tools.*.ts → deleted (bot-tools.*.ts canonical)
openclaw-root.ts etc. → deleted (bot-root.ts canonical)
types.openclaw.ts → deleted (types.bot.ts canonical)
extensions/*/openclaw.plugin.json → renamed hanzo-bot.plugin.json
docs/start/openclaw.md → renamed hanzo-bot.md (+ zh-CN)
docs/assets/openclaw-*.png, whatsapp-openclaw*.jpg → deleted
scripts/.../openclaw-* → deleted (bot/hanzo-bot parallels)
openclaw.mjs → deleted (hanzo-bot.mjs is package.bin)
Then patched 65 broken JS/TS import strings where hanzo-bot had ended
up inside an import path ('./types.hanzo-bot.js' → './types.bot.js'
etc., since the on-disk filename uses the brand-neutral bot- prefix).
Pre-existing lint debt cleaned up to get oxlint --type-aware to 0/0:
removed the dead i18n test that referenced a path no longer existing;
defined the missing DIDConfig and WalletConfig types in types.base.ts
(they were imported but never declared); dropped unused imports;
collapsed redundant type assertion and a tautological meta.bot lookup
that the openclaw→bot rename made redundant.
The a2ui.bundle.js generated artifact is kept at its pre-rebrand
contents — it gets regenerated by 'pnpm canvas:a2ui:bundle' from
sources I cannot rebuild in this commit; the source side is clean.
Verified: 0 occurrences of openclaw (case-insensitive) in tree source
content, 0 file or directory paths with openclaw in the name; oxlint
--type-aware src test reports 0/0.
4.6 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| CLI reference for `hanzo-bot channels` (accounts, status, login/logout, logs) |
|
channels |
hanzo-bot channels
Manage chat channel accounts and their runtime status on the Gateway.
Related docs:
- Channel guides: Channels
- Gateway configuration: Configuration
Common commands
hanzo-bot channels list
hanzo-bot channels status
hanzo-bot channels capabilities
hanzo-bot channels capabilities --channel discord --target channel:123
hanzo-bot channels resolve --channel slack "#general" "@jane"
hanzo-bot channels logs --channel all
Add / remove accounts
hanzo-bot channels add --channel telegram --token <bot-token>
hanzo-bot channels remove --channel telegram --delete
Tip: hanzo-bot channels add --help shows per-channel flags (token, app token, signal-cli paths, etc).
When you run hanzo-bot channels add without flags, the interactive wizard can prompt:
- account ids per selected channel
- optional display names for those accounts
Bind configured channel accounts to agents now?
If you confirm bind now, the wizard asks which agent should own each configured channel account and writes account-scoped routing bindings.
You can also manage the same routing rules later with hanzo-bot agents bindings, hanzo-bot agents bind, and hanzo-bot agents unbind (see agents).
When you add a non-default account to a channel that is still using single-account top-level settings (no channels.<channel>.accounts entries yet), HanzoBot moves account-scoped single-account top-level values into channels.<channel>.accounts.default, then writes the new account. This preserves the original account behavior while moving to the multi-account shape.
Routing behavior stays consistent:
- Existing channel-only bindings (no
accountId) continue to match the default account. channels adddoes not auto-create or rewrite bindings in non-interactive mode.- Interactive setup can optionally add account-scoped bindings.
If your config was already in a mixed state (named accounts present, missing default, and top-level single-account values still set), run hanzo-bot doctor --fix to move account-scoped values into accounts.default.
Login / logout (interactive)
hanzo-bot channels login --channel whatsapp
hanzo-bot channels logout --channel whatsapp
Troubleshooting
- Run
hanzo-bot status --deepfor a broad probe. - Use
hanzo-bot doctorfor guided fixes. hanzo-bot channels listprintsClaude: HTTP 403 ... user:profile→ usage snapshot needs theuser:profilescope. Use--no-usage, or provide a claude.ai session key (CLAUDE_WEB_SESSION_KEY/CLAUDE_WEB_COOKIE), or re-auth via Claude Code CLI.hanzo-bot channels statusfalls back to config-only summaries when the gateway is unreachable. If a supported channel credential is configured via SecretRef but unavailable in the current command path, it reports that account as configured with degraded notes instead of showing it as not configured.
Capabilities probe
Fetch provider capability hints (intents/scopes where available) plus static feature support:
hanzo-bot channels capabilities
hanzo-bot channels capabilities --channel discord --target channel:123
Notes:
--channelis optional; omit it to list every channel (including extensions).--targetacceptschannel:<id>or a raw numeric channel id and only applies to Discord.- Probes are provider-specific: Discord intents + optional channel permissions; Slack bot + user scopes; Telegram bot flags + webhook; Signal daemon version; MS Teams app token + Graph roles/scopes (annotated where known). Channels without probes report
Probe: unavailable.
Resolve names to IDs
Resolve channel/user names to IDs using the provider directory:
hanzo-bot channels resolve --channel slack "#general" "@jane"
hanzo-bot channels resolve --channel discord "My Server/#support" "@someone"
hanzo-bot channels resolve --channel matrix "Project Room"
Notes:
- Use
--kind user|group|autoto force the target type. - Resolution prefers active matches when multiple entries share the same name.
channels resolveis read-only. If a selected account is configured via SecretRef but that credential is unavailable in the current command path, the command returns degraded unresolved results with notes instead of aborting the entire run.