agentic_huge_data_base / wiki
页面 jcode · 3.6 斜杠命令与行内交互·DeepWiki 中文全文译文

3.6 · 斜杠命令与行内交互(Slash Commands and Inline Interactive)

代理式研究运行时 · 聚焦本章的模块关系、源码依据与实现要点。

项目jcode 章节3.6 状态全文译文 模块界面与交互、工作流与编排、接口与服务契约、模型调用与提供方适配
源码线索
  • crates/jcode-overnight-core/Cargo.toml
  • crates/jcode-overnight-core/src/helper_tests.rs
  • crates/jcode-overnight-core/src/lib.rs
  • crates/jcode-overnight-core/src/prompts.rs
  • docs/AWS_BEDROCK_PROVIDER.md
  • src/overnight.rs
  • src/provider/bedrock.rs
  • src/subscription_catalog.rs
  • src/tui/app/commands.rs
  • src/tui/app/commands_overnight.rs
模块标签
  • 界面与交互
  • 工作流与编排
  • 接口与服务契约
  • 模型调用与提供方适配
  • 测试、发布与运维

章节正文

斜杠命令与行内交互

斜杠命令与内联交互

相关源文件

本章引用的主要源码文件:

  • crates/jcode-overnight-core/Cargo.toml
  • crates/jcode-overnight-core/src/helper_tests.rs
  • crates/jcode-overnight-core/src/lib.rs
  • crates/jcode-overnight-core/src/prompts.rs
  • docs/AWS_BEDROCK_PROVIDER.md
  • src/overnight.rs
  • src/provider/bedrock.rs
  • src/subscription_catalog.rs
  • src/tui/app/commands.rs
  • src/tui/app/commands_overnight.rs
  • src/tui/app/inline_interactive.rs
  • src/tui/app/input.rs
  • src/tui/app/local.rs
  • src/tui/app/remote.rs
  • src/tui/app/remote/key_handling.rs
  • src/tui/app/remote/server_events.rs
  • src/tui/app/state_ui.rs
  • src/tui/app/tests.rs
  • src/tui/app/tests/state_model_poke_03.rs
  • src/tui/app/tests/support_failover/part_01.rs
  • src/tui/app/tests/support_failover/part_02.rs
  • src/tui/app/tui_lifecycle.rs
  • src/tui/app/tui_state.rs
  • src/tui/app/turn.rs
  • src/tui/ui_inline_interactive.rs
  • src/tui/ui_overlays.rs

本页面详细介绍了基于 TUI 的斜杠命令实现,以及用于选择模型、会话和账户的交互式选择器覆盖层。这些组件在用户意图(自然语言/选择)与系统状态(代码实体空间)之间架起了桥梁。

斜杠命令实现

斜杠命令是由 TUI App 处理的特殊输入模式,用于执行系统操作而不向大语言模型(LLM)发送消息。这些命令主要在 commands 模块中进行解析和分发。

命令分发与路由

当用户提交以 / 开头的输入时,App 通过 src/tui/app/commands.rs 路由请求。命令可以在本地处理,也可以在 serve/connect 模式下转发到远程服务器。

命令函数/实现用途
/improvehandle_improve_command_local src/tui/app/commands.rs:1-8启动一个子代理,基于对话记录改进当前代码。
/refactorhandle_refactor_command_local src/tui/app/commands.rs:1-8用于代码重构的专用代理流程。
/reviewhandle_review_command_local src/tui/app/commands.rs:11-20触发对当前会话变更的代码审查。
/overnightOvernightCommand::parse src/tui/app/commands_overnight.rs通过 OvernightManifest 调度长时间运行的自主任务。
/transfermaybe_begin_pending_local_transfer src/tui/app/local.rs:74-75在不同提供方或会话之间迁移会话上下文。
/compacthandle_compaction_event src/tui/app/turn.rs:69-71手动触发上下文压缩以节省 Token。
/modelopen_model_picker src/tui/app/inline_interactive.rs:185-186打开内联模型选择覆盖层。
/sessionsopen_session_picker src/tui/app/inline_interactive.rs:10-11打开会话管理覆盖层。
/workspacehandle_workspace_command src/tui/app/remote/workspace.rs导航多会话 Niri 风格工作区。

来源: src/tui/app/commands.rs:1-20, src/tui/app/local.rs:74-85, src/tui/app/inline_interactive.rs:1-15

代理命令(/improve、/refactor、/review)

这些命令不仅仅是发送提示词,它们使用 ManualSubagentSpec src/tui/app/commands.rs:11-20 启动一个带有专用系统提示词的独立会话。

  • 数据流: 当前会话状态被快照,通过 id::generate_session_id() 生成新的会话 ID,然后调用 launch_prompt_in_new_session_local src/tui/app/commands.rs:11-20
  • 审查基础设施: 使用 REVIEW_PREFERRED_MODEL(默认为 "gpt-5.5")确保高质量的反馈 src/tui/app/commands.rs:31

来源: src/tui/app/commands.rs:1-32

内联交互选择器

TUI 为复杂选择提供了交互式覆盖层。这些由 InlineInteractiveState 结构体管理 src/tui/app/inline_interactive.rs:95-103

模型选择器实现

模型选择器从活动的 Provider 动态获取可用模型,并以过滤列表形式展示。

关键组件:

  • ModelPickerCacheSignature:用于在提供方、模型或远程状态发生变化时使选择器缓存失效 src/tui/app/inline_interactive.rs:43-76
  • invalidate_model_picker_cache:递增 model_picker_catalog_revision 以强制重新加载提供方模型 src/tui/app/inline_interactive.rs:23-28
  • poll_model_picker_load:一个异步后台任务,从 provider_catalog 填充选择器条目 src/tui/app/local.rs:70
模型选择器数据流

下图展示了 TUI App 如何从用户输入 /model 过渡到代码级别的 ModelRoute 选择。

图表:模型选择管线

jcode · 模型选择器数据流 · 图 1
jcode · 模型选择器数据流 · 图 1

来源: src/tui/app/inline_interactive.rs:23-119, src/tui/app/local.rs:166-188, src/tui/app/tui_state.rs:118-143

会话选择器与追赶

会话选择器(/sessions)允许用户在历史会话或远程会话之间切换。

  • 实现: 通过 SessionPicker 结构体管理 src/tui/app/inline_interactive.rs:2-6
  • 追赶逻辑: 切换会话时,App 可能进入 PendingCatchupResume 状态 src/tui/app/remote.rs:81-90。它使用 catchup_candidatescatchup_queue_position 确定需要向 UI 重放多少历史记录 src/tui/app/inline_interactive.rs:16-20

来源: src/tui/app/remote.rs:81-106, src/tui/app/inline_interactive.rs:1-20

交互状态机

当交互式覆盖层处于活动状态时,TUI 会以不同方式处理事件。这在 src/tui/app/turn.rssrc/tui/app/remote/key_handling.rs 中控制。

输入处理逻辑
  1. 过滤: 选择器打开时,字符输入会追加到 inline_interactive_state.filter 中,而不是主 input 缓冲区 src/tui/app/inline_interactive.rs:101
  2. 导航: KeyCode::UpKeyCode::Down 更新 inline_interactive_state.selected src/tui/app/tests/state_model_poke_03.rs:20-31
  3. 预览: KeyCode::Right 或特定斜杠命令触发(如带尾随空格的 /model)切换 picker.preview src/tui/app/tests/state_model_poke_03.rs:16

图表:交互事件循环

jcode · 输入处理逻辑 · 图 2
jcode · 输入处理逻辑 · 图 2

来源: src/tui/app/turn.rs:124-148, src/tui/app/inline_interactive.rs:95-103, src/tui/app/state_ui.rs:28-45

Overnight 模式交互

/overnight 命令与 jcode-overnight-core crate 交互。它将 TUI 转换为长时间运行自主任务的监控状态。

  • 命令: 支持的子命令包括 startstatuslogreviewcancel src/tui/app/commands_overnight.rs
  • 自动唤醒: 使用 OvernightAutoPokeState 通过定期发送系统提醒来保持会话活跃,以防代理停滞 src/tui/app/commands.rs:35-40
  • UI 集成: App 在 tick 循环中调用 maybe_refresh_overnight_display_card(),以更新 TUI 主体中的进度可视化 src/tui/app/local.rs:73

来源: src/tui/app/commands_overnight.rs, src/tui/app/local.rs:73, src/tui/app/commands.rs:35-62

关键函数总结

函数文件描述
run_turn_interactivesrc/tui/app/turn.rs在大语言模型(LLM)轮次期间处理 UI 重绘和键盘事件的主循环。
handle_server_eventsrc/tui/app/remote/server_events.rs处理来自远程服务器的事件(如 ToolStartTextDelta),以更新 TUI 状态。
apply_restored_reload_inputsrc/tui/app/tui_lifecycle.rs在 TUI 重新加载后恢复输入缓冲区、光标位置和待处理图像。
save_input_for_reloadsrc/tui/app/state_ui.rs将当前 UI 状态序列化到 ~/.jcode/client-input-ID,以便在重启之间持久化。

来源: src/tui/app/turn.rs:26-31, src/tui/app/remote/server_events.rs:6-10, src/tui/app/tui_lifecycle.rs:6-10, src/tui/app/state_ui.rs:92-112