/** * 模块: 蓝火 / cc-media-bridge 派活 harness — 真原生 CC 会话强制(v6.x) * * 痛点:用户在 wecom 群说「蓝火 修 X」/「蓝火 做 PPT」时,LLM 会本能选错路: * - sessions_spawn(agentId="claude", runtime="acp") — ACP 子 agent,不是真原生 CC * - Task tool / mcp__ccd_session__spawn_task — Claude Code Task 子 agent * - Bash "claude -p ..." / "claude --resume ..." — 直接 exec,绕开 cc-media-task * - 或自己用 Write+Bash 把活做了 — 截胡,用户明明指名让蓝火干 * * SKILL 命令式(v2.10.5+)+ 反模式列表 + harness 思想 L4 (cc-bridge-pre-fetch * for query) 都治不住 dispatch — 因为 query 是"读",dispatch 是"写",写路径 * 没人钉死。 * * 这模块就是 dispatch 路径的 hook 级钉死: * 1. before_prompt_build:检测"蓝火+动词"模式 → 标记 session 进入 dispatch * lockdown 窗口(默认 90s),同时 prependContext 注入硬约束:"必须 Bash * cc-media-task --owner ... --desc ... ,禁止 sessions_spawn / Task / * exec claude / Write+Bash 干" * 2. before_tool_call:会话在 lockdown 窗口里时,凡是 toolName 在 blocklist * 就直接 block(return { block:true, blockReason }),并在 reason 里告诉 * LLM 怎么改对——下一轮 LLM 会读到 blockReason 然后走 Bash cc-media-task * 3. 一旦看到正确路径(Bash 命令含 "cc-media-task")就清掉 lockdown 标记 * * 红线: * - capability detection: ~/.openclaw-media-bridge 不存在则跳过整个模块 * - 零 child_process / 零 fs 写 * - lockdown 只对 dispatch 触发后短窗口生效(默认 90s 或正确派活立解), * 避免 false positive 拦其他工具调用 * - blocklist 只拦"明显错路",留 Bash / Write / Read 等正常路径 */ import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; export declare function registerCcBridgeDispatchHarness(api: OpenClawPluginApi): void;