Gateway 与 CLI 边缘#
核心保持平台无关。意外发生在边缘。
Gateway facade#
gateway/run.py— facadegateway/run_*.py— 各阶段gateway/platforms/<name>.py— 每平台一个适配器- 斜杠:mixin +
_command_handler_table(不要长if canonical ==)
每个事件只规范化一次 identity(gateway/session_identity.py)。
Busy 守卫(两道都重要)#
Agent 运行时:
- 适配器可能把入站文本排入活动会话队列
- Runner 在当普通聊天处理前拦截控制命令(
/stop、/approve…)
必须在阻塞中可用的新命令需要同时绕过两者。
CLI 边缘#
cli.py—HermesCLIfacade + mixins- 斜杠:
_SLASH_DISPATCH/_handle_<name>_command约定 - 单一命令注册表:
hermes_cli/commands.py - 配置加载器因表面而异——CLI 能见、Gateway 不见,多半用错了 loader
边缘上的配置与密钥#
- 行为 →
config.yaml - 密钥 →
.env/ secret scope - 多路复用下适配器必须用共享 scoped 读取器,禁止 miss 后回落
os.getenv泄出启动 profile
TUI / Desktop#
tui_gateway 说 JSON-RPC。Agent 行为仍在 Python——不要在 React 里重写一套。
练习#
- 找到
COMMAND_REGISTRY或_SLASH_DISPATCH,选一个命令定位 CLI 与 Gateway handler - 在
gateway/platforms/base.py找到活动会话排队处 - 扫一眼你在入门里用过的配置键在 defaults 中的位置
下一章#
延伸阅读#
gateway/AGENTS.md、hermes_cli/AGENTS.md、tui_gateway/AGENTS.md