mirror of
https://github.com/hanzoai/bot.git
synced 2026-10-30 17:24:26 +00:00
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.
5.0 KiB
5.0 KiB
summary, read_when, title
| summary | read_when | title | |
|---|---|---|---|
| Directive syntax for /think + /verbose and how they affect model reasoning |
|
Thinking Levels |
Thinking Levels (/think directives)
What it does
- Inline directive in any inbound body:
/t <level>,/think:<level>, or/thinking <level>. - Levels (aliases):
off | minimal | low | medium | high | xhigh | adaptive- minimal → “think”
- low → “think hard”
- medium → “think harder”
- high → “ultrathink” (max budget)
- xhigh → “ultrathink+” (GPT-5.2 + Codex models only)
- adaptive → provider-managed adaptive reasoning budget (supported for Anthropic Claude 4.6 model family)
x-high,x_high,extra-high,extra high, andextra_highmap toxhigh.highest,maxmap tohigh.
- Provider notes:
- Anthropic Claude 4.6 models default to
adaptivewhen no explicit thinking level is set. - Z.AI (
zai/*) only supports binary thinking (on/off). Any non-offlevel is treated ason(mapped tolow). - Moonshot (
moonshot/*) maps/think offtothinking: { type: "disabled" }and any non-offlevel tothinking: { type: "enabled" }. When thinking is enabled, Moonshot only acceptstool_choiceauto|none; HanzoBot normalizes incompatible values toauto.
- Anthropic Claude 4.6 models default to
Resolution order
- Inline directive on the message (applies only to that message).
- Session override (set by sending a directive-only message).
- Global default (
agents.defaults.thinkingDefaultin config). - Fallback:
adaptivefor Anthropic Claude 4.6 models,lowfor other reasoning-capable models,offotherwise.
Setting a session default
- Send a message that is only the directive (whitespace allowed), e.g.
/think:mediumor/t high. - That sticks for the current session (per-sender by default); cleared by
/think:offor session idle reset. - Confirmation reply is sent (
Thinking level set to high./Thinking disabled.). If the level is invalid (e.g./thinking big), the command is rejected with a hint and the session state is left unchanged. - Send
/think(or/think:) with no argument to see the current thinking level.
Application by agent
- Embedded Pi: the resolved level is passed to the in-process Pi agent runtime.
Verbose directives (/verbose or /v)
- Levels:
on(minimal) |full|off(default). - Directive-only message toggles session verbose and replies
Verbose logging enabled./Verbose logging disabled.; invalid levels return a hint without changing state. /verbose offstores an explicit session override; clear it via the Sessions UI by choosinginherit.- Inline directive affects only that message; session/global defaults apply otherwise.
- Send
/verbose(or/verbose:) with no argument to see the current verbose level. - When verbose is on, agents that emit structured tool results (Pi, other JSON agents) send each tool call back as its own metadata-only message, prefixed with
<emoji> <tool-name>: <arg>when available (path/command). These tool summaries are sent as soon as each tool starts (separate bubbles), not as streaming deltas. - Tool failure summaries remain visible in normal mode, but raw error detail suffixes are hidden unless verbose is
onorfull. - When verbose is
full, tool outputs are also forwarded after completion (separate bubble, truncated to a safe length). If you toggle/verbose on|full|offwhile a run is in-flight, subsequent tool bubbles honor the new setting.
Reasoning visibility (/reasoning)
- Levels:
on|off|stream. - Directive-only message toggles whether thinking blocks are shown in replies.
- When enabled, reasoning is sent as a separate message prefixed with
Reasoning:. stream(Telegram only): streams reasoning into the Telegram draft bubble while the reply is generating, then sends the final answer without reasoning.- Alias:
/reason. - Send
/reasoning(or/reasoning:) with no argument to see the current reasoning level.
Related
- Elevated mode docs live in Elevated mode.
Heartbeats
- Heartbeat probe body is the configured heartbeat prompt (default:
Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.). Inline directives in a heartbeat message apply as usual (but avoid changing session defaults from heartbeats). - Heartbeat delivery defaults to the final payload only. To also send the separate
Reasoning:message (when available), setagents.defaults.heartbeat.includeReasoning: trueor per-agentagents.list[].heartbeat.includeReasoning: true.
Web chat UI
- The web chat thinking selector mirrors the session's stored level from the inbound session store/config when the page loads.
- Picking another level applies only to the next message (
thinkingOnce); after sending, the selector snaps back to the stored session level. - To change the session default, send a
/think:<level>directive (as before); the selector will reflect it after the next reload.