CLI Interactive & Skin Engine

交互层:终端 CLI 交互系统与皮肤渲染引擎

深度解密 cli.py 主控、prompt_toolkit 自动补全、Skin 皮肤映射与 KawaiiSpinner 渲染机制
CLI指令解析分发流
📊 图 11-1:CLI 交互主循环、指令路由解析与 Rich Panel 渲染流转图

💻 1. Interactive CLI 与 prompt_toolkit 输入引擎

cli.py 约 11k LOC 的主控流程中,为了在终端实现如 IDE 一般的实时输入反馈,系统放弃了原生 input(),引入了 prompt_toolkit 库:

  • SlashCommandCompleter(自动补全):定义在 hermes_cli/commands.py 的中央指令注册表动态转化为 Trie 树补全。当用户输入 / 时,自动下拉补全历史和别名列表。
  • 实时语法高亮:实时对命令中的反斜杠、JSON 参数段及路径进行词法分析渲染,确保交互不枯燥。
皮肤引擎样式加载蓝图
📊 图 11-2:皮肤渲染引擎 (Skin Engine) 样式加载与 ANSI 颜色映射蓝图

⚙️ 2. COMMAND_REGISTRY 指令中枢与别名解析

所有控制台斜杠指令统一在 hermes_cli/commands.pyCOMMAND_REGISTRY 数组中定义:

# commands.py 中 CommandDef 的结构
class CommandDef:
    def __init__(self, name: str, description: str, category: str, aliases: tuple = (), cli_only: bool = False):
        self.name = name
        self.description = description
        self.category = category
        self.aliases = aliases
        self.cli_only = cli_only

当用户在控制台或网关端(例如 Telegram)触发 `/bg` 或 `/background` 时,系统在 cli.pyprocess_command() 内部,调用 resolve_command(),自动溯源到 canonical name,并统一交由对应的方法分派处理,从而大幅降低了系统维护成本。

🎨 3. Skin 皮肤引擎与 Rich / KawaiiSpinner 闪烁表情

控制台之所以呈现出极其 premium 的视觉感受,离不开以下两套组件的配合工作:

  1. Skin Engine (hermes_cli/skin_engine.py): 在初始化阶段,引擎读取用户配置文件 config.yaml 中的 display.skin 字段(例如 kawaii_default),动态从 JSON/YAML 皮肤配置文件中映射 HEX/ANSI 色彩代码到 Rich 控制台的面板(Panel)和边框。
  2. KawaiiSpinner (agent/display.py): 在大模型生成和思考的漫长等待期,系统不仅启动一个字符动画,更在 KawaiiSpinner 中根据执行状态(API 阶段、工具调用阶段)切换可爱的颜表情(如 (* ^ ω ^)(o_O)),并将当前工具的参数结果以 前缀的形式渲染到侧边动态日志流。