模块以 cli/main.py 为统一入口(通过 __main__.py 暴露 python -m cli,并通过 pyproject 控制台脚本 vibe-trading = "cli:main" 注册),负责检测 .env、运行首次引导 (cli.onboard)、打印横幅 (cli.intro)、驱动基于 Rich Live 的 REPL 循环,并将非 chat 子命令回退到 _legacy.main 以保持向后兼容。
- 命令注册:
cli/commands/slash_router.py维护不可变的SLASH_COMMANDS元组与别名表,支持模糊匹配 (match_commands);cli.commands.institutional、cli.commands.research_playbook、cli.main._register_live_slash_commands在导入时通过 idempotent 函数追加命令,避免重复且保证 help/completer 可见。 - 子命令实现:每个 slash 命令对应一个独立模块,暴露统一的
run(ctx, *args)接口;_MULTI_COMMAND_MODULES(chat/show/session)通过run(ctx, name, *args)分发多个子命令。 - REPL 核心:
cli.input+cli.completer处理输入与补全;cli.components.{chat_log,hint_bar,tool_event,working_indicator}与cli.ui.{banner,rail,transcript}提供可复用的 Rich renderable;InteractiveContext承载 session/history/debug/pending_proposal 等状态。 - 安全拦截:REPL 输入路径在送入模型前拦截
/halt、/resume、/connector、/data及裸 kill 词(停/stop/kill),直接调用src.live.halt或复用 legacy 解析器执行,确保 kill switch 不依赖模型配合(SPEC.md Consent §2/§4)。 - 会话持久化:
SessionStoreJSONL 日志 + SQLite FTS5 搜索索引双写,失败均 best-effort 吞异常,不阻塞主循环。 - 脚本区
agent/scripts/包含开发期 benchmark (bench_performance.py) 与补丁/运行脚本,不属于包发布范围。