iFlyCode Inline Chat 子系统完整分析
版本: 3.4.2-222 | 分析日期: 2026-05-11
1. 概述
com/aicode/inline/ 包是 iFlyCode 内联聊天功能的完整实现,包含 8 个子包(controller、dto、enums、content、ide、listener、render、status)和 action 子包。内联聊天允许用户在编辑器中直接与 AI 对话,无需切换到侧边栏。
2. Controller 子包
2.1 SessionController (455 strings) — 最大类
路径: com/aicode/inline/controller/SessionController职责: 会话控制器 — 内联聊天会话的生命周期管理
关键方法:
executeRequest()— 执行内联聊天请求doStop()— 停止生成doCancelCategory()— 取消分类选择doErrorRetry()— 错误重试lockSession()— 锁定会话(生成中)unlockSession()— 解锁会话(生成完成)getInlineChatStepEnum()— 获取当前步骤setTipText()— 设置提示文本renderCategoryPanel()— 渲染分类面板getCareOffset()— 获取光标偏移getEndLineNumber()— 获取结束行号setChangeLength()— 设置变更长度getSelectionModel()— 获取选区模型hasSelection()— 是否有选区removeSelection()— 移除选区inlineChatBtnCache— 内联聊天按钮缓存
关键依赖:
InlineChatService— 内联聊天服务InlineChatStepEnum— 步骤枚举CodeInfoDto$RangeDTO— 代码范围EditorKt— Kotlin 编辑器工具ChatMessage— 聊天消息InlineChatCategoryPanelRenderer— 分类面板渲染器
内部类: $X — 步骤映射(CATEGORY, ERROR)
2.2 EphemeralChatSessionController (73 strings)
路径: com/aicode/inline/controller/EphemeralChatSessionController职责: 临时会话控制器 — 管理单次内联聊天会话
关键方法:
lockSession()— 锁定会话unlockSession()— 解锁会话showSendButton()— 显示发送按钮showStopButton()— 显示停止按钮getInputComponent()— 获取输入组件getButtonPanel()— 获取按钮面板
关键依赖:
SessionController— 会话控制器InlineChatInputPanel— 输入面板InlineChatInputComponent— 输入组件SendStopActionButtonPanel— 发送/停止按钮面板
2.3 ChatInputController (inline 版, 83 strings)
路径: com/aicode/inline/controller/ChatInputController职责: 内联聊天输入控制器 — 管理内联聊天输入框
关键方法:
getText()— 获取输入文本setText()— 设置输入文本updateInput()— 更新输入stop()— 停止生成getClassName()/getMethodName()— H() 解码
3. DTO 子包
3.1 InlineChatInfo (113 strings)
路径: com/aicode/inline/dto/InlineChatInfo职责: 内联聊天信息 — 内联聊天请求的完整数据
字段:
message— String — 用户消息sessionController— SessionController — 会话控制器inlineChatVersion— String — 内联聊天版本requestId— String — 请求 IDcontent— String — 内容lineList— List — 行列表trimPrefix— boolean — 是否修剪前缀handleLineIndex— int — 处理行索引
3.2 LastChatQuestionInfo (52 strings)
路径: com/aicode/inline/dto/LastChatQuestionInfo职责: 上次聊天问题信息 — 记录上次提问位置
字段:
offset— int — 光标偏移
3.3 LastSelectionTextCache (78 strings)
路径: com/aicode/inline/dto/LastSelectionTextCache职责: 上次选区文本缓存 — 缓存用户选中的代码
字段:
careOffsetStart— int — 光标起始偏移selectionStart— int — 选区起始selectionEnd— int — 选区结束realStartOffset— int — 真实起始偏移realEndOffset— int — 真实结束偏移text— String — 选区文本range— CodeInfoDto$RangeDTO — 代码范围
4. Enums 子包
4.1 InlineChatCategoryEnum (91 strings)
路径: com/aicode/inline/enums/InlineChatCategoryEnum职责: 内联聊天分类枚举 — AI 操作类型
枚举值 (8 个):
- EXPLAIN — 代码解释
- COMMENT — 文档注释
- REFACTOR — 代码重构
- FIX — 代码修复
- GENERATE — 代码生成
- OPTIMIZE — 代码优化
- DEBUG — 代码调试
- TEST — 单元测试
关键方法:
getCategoryEnumByValue()— 按值获取枚举getCategoryEnumByName()— 按名称获取枚举
4.2 InlineChatOperateEnum (32 strings)
路径: com/aicode/inline/enums/InlineChatOperateEnum职责: 内联聊天操作枚举 — 操作类型
4.3 InlineChatStepEnum (38 strings)
路径: com/aicode/inline/enums/InlineChatStepEnum职责: 内联聊天步骤枚举 — 会话状态
枚举值:
- CATEGORY — 分类选择阶段
- ERROR — 错误状态
5. Content 子包
5.1 ChatMessage (47 strings)
路径: com/aicode/inline/content/ChatMessage职责: 聊天消息 — 用户问题和选中代码
字段:
question— String — 用户问题selected— String — 选中的代码
toString: ChatMessage(question=, selected=)
6. Agent Enums 补充
6.1 CommandEnum (726 strings) — 命令枚举
关键命令 (部分):
CODE_TEST_MAKE_CASE_JAVA— Java 单测生成SQL_TEST_CONNECT— SQL 连接测试GIT_SEARCH— Git 搜索INLINECHAT_CATEGORY— 内联聊天分类ACTION_ABORT— 取消操作CODE_BATCH_UNIT_TEST_CREATE— 批量单测创建GIT_CODE_KNOWLEDGE_RE_INDEX— 代码知识库重新索引CODE_FAULT_ANALYSIS— 代码故障分析REPO_STATUS— 仓库状态CODE_TEST_SAVE— 单测保存USER_PERMISSION— 用户权限CODE_COMMENT— 代码注释GIT_USER_REPOS— 用户仓库CODE_DEBUG_DUPLICATE— 代码调试重复GIT_REVIEW— Git 评审SQL_SOURCE_TYPES— SQL 源类型CODE_EXPLAIN— 代码解释DIALOG_DIFF— 对话 DiffCODE_CHECK— 代码检查GIT_DIFF— Git DiffUSER_KNOWLEDGE_LIST— 用户知识列表CODE_GENERATE_TEST_CASE— 测试用例生成
6.2 ModuleEnum (62 strings) — 模块枚举
枚举值:
- CHAT — 智能对话
- CODE_SEARCH — 代码搜索
- SQL_CHAT — SQL 对话
- CODE_CHECK — 代码检查
- UNIT_TEST — 单元测试
- BATCH_UNIT_TEST — 批量单测
- GIT_VIEW — Git 视图
- UNIT_TESTING — 单测执行
6.3 PermissionEnum (235 strings) — 权限枚举
枚举值 (20+):
- INLINE_CHAT — 内联聊天
- CHAT_MODULE — 聊天模块
- CODE_OPTIMIZATION — 代码优化
- FUNCTION_SPLIT — 函数拆分
- COMMENTS — 注释
- DOC_COMMENTS — 文档注释
- GENERATE_TEST_CASE — 测试用例生成
- REVIEW — 评审
- CODE_DEBUG — 代码调试
- GENERATE_COMMIT — 提交信息生成
- CODE_KNOWLEDGE_BASE — 代码知识库
- UNIT_TESTING — 单测
- BATCH_UNITTEST — 批量单测
- SQL_GENERATION — SQL 生成
- SQL_OPTIMIZATION — SQL 优化
- CHAT_SQL_GENERATION — 聊天 SQL 生成
- CHAT_SQL_OPTIMIZATION — 聊天 SQL 优化
- DEMAND_SPLIT — 需求拆分
- DEMAND_TEST — 需求测试
- CODE_COMMENT — 代码注释
权限列表:
PERMISSION_ORDER_LIST— 权限顺序列表RIGHT_PERMISSION_ORDER_LIST— 右侧权限顺序列表getAction()— 获取 ActiongetPermission()— 获取权限getEditorAction()— 获取编辑器 Action
6.4 PageEnum (70 strings) — 页面枚举
枚举值:
- CHAT_VIEW — 聊天视图
- CODE_CHECK — 代码检查
- CODE_REVIEW — 代码评审
- UNIT_TEST — 单元测试
- UNIT_TESTING — 单测执行
- SETTING_PAGE — 设置页面
6.5 AgentModuleEnum (71 strings) — Agent 模块枚举
枚举值:
- CHAT — 聊天
- CODE_COMPLETE — 代码补全
- CODE_CHECK — 代码检查
- CODE_SEARCH — 代码搜索
- GIT_REVIEW — Git 评审
- INLINE_CHAT — 内联聊天
- SQL_CHAT — SQL 对话
- UNIT_TEST — 单元测试
- BATCH_UNIT_TEST — 批量单测
- CODE_TEST_TEMPLATE — 测试模板
7. Agent DTO Search 子包
7.1 CodeSearchDto (89 strings)
路径: com/aicode/agent/dto/search/CodeSearchDto职责: 代码搜索 DTO — 搜索结果条目
字段:
id— String — IDrepoUrl— String — 仓库 URLrepoName— String — 仓库名称repoType— String — 仓库类型filePath— String — 文件路径fileName— String — 文件名language— String — 语言isOpen— boolean — 是否开源startRow— int — 起始行endRow— int — 结束行code— String — 代码片段codeLength— int — 代码长度codeVector— String — 代码向量(可能用于语义搜索)
7.2 PageInfo (46 strings)
路径: com/aicode/agent/dto/search/PageInfo职责: 分页信息
字段:
currentPage— int — 当前页pageSize— int — 每页大小total— int — 总数totalPage— int — 总页数
7.3 ReposInfoDto (41 strings)
路径: com/aicode/agent/dto/search/ReposInfoDto职责: 仓库信息 DTO
字段:
id— String — IDrepoUrl— String — 仓库 URLrepoName— String — 仓库名称branch— String — 分支repoType— String — 仓库类型
8. Service Response 子包
8.1 BizResponse (44 strings)
路径: com/aicode/service/response/BizResponse职责: 业务响应 — 通用响应封装
字段:
RES_CODE_SUCCESS— 成功响应码resCode— String — 响应码
关键依赖:
Hutool StrUtil— 字符串工具
9. 内联聊天完整流程
1. 用户选中文本 → Alt+\ → InlineChatAction
└── SessionController.executeRequest()
├── lockSession() → 禁止输入
├── renderCategoryPanel() → 显示分类选择
│ └── InlineChatCategoryPanelRenderer
│ ├── EXPLAIN / COMMENT / REFACTOR / FIX
│ ├── GENERATE / OPTIMIZE / DEBUG / TEST
│ └── InlineChatCategoryEnum.getCategoryEnumByName()
└── InlineChatStepEnum.CATEGORY
2. 用户选择分类 → SessionController
└── 构建 InlineChatInfo
├── message = 用户输入
├── sessionController = 当前会话
├── inlineChatVersion = 版本号
├── content = 选中代码
├── lineList = 行列表
├── trimPrefix = 是否修剪前缀
└── handleLineIndex = 处理行索引
└── InlineChatCommandService → WebSocket: INLINECHAT_DIRECT
3. Agent 流式响应
├── SessionController.unlockSession() → 允许操作
└── InlineChatStepEnum → 渲染结果
4. 用户操作:
├── Alt+Y → InlineChatAcceptAction → 应用修改
├── Alt+X → InlineChatRejectAction → 撤销修改
├── Alt+Z → InlineChatStopAction → ABORT
├── Alt+D → InlineChatRetryAction → 重试
└── Alt+\ → InlineChatUndoAction → 撤销10. 关键发现
SessionController 是核心: 455 个字符串,是内联聊天最大的类,管理会话生命周期、分类选择、请求执行和状态转换。
8 个分类: InlineChatCategoryEnum 定义 8 种 AI 操作类型(解释/注释/重构/修复/生成/优化/调试/测试),覆盖最常见的代码操作需求。
2 个步骤: InlineChatStepEnum 只有 CATEGORY(分类选择)和 ERROR(错误)两个步骤,说明内联聊天的状态机相对简单。
codeVector 字段: CodeSearchDto 包含
codeVector字段,可能存储代码的语义向量,用于基于向量相似度的代码搜索(RAG)。20+ 权限: PermissionEnum 定义 20+ 个权限,每个权限对应一个功能模块,通过
PERMISSION_ORDER_LIST和RIGHT_PERMISSION_ORDER_LIST控制权限顺序和显示。Hutool StrUtil: BizResponse 使用 Hutool 的
StrUtil,这是第五处 Hutool 依赖。LastSelectionTextCache: 缓存用户选中的代码和精确偏移,确保内联聊天请求包含准确的代码范围信息。
EphemeralChatSessionController: 临时会话控制器管理单次会话,与 SessionController(持久会话)配合使用。
10 个 Agent 模块: AgentModuleEnum 定义 10 个模块,与 ModuleEnum(7 个 UI 模块)不同,Agent 模块更细粒度,包含 CODE_TEST_TEMPLATE 等子模块。
PageEnum 6 页面: 定义 6 个 WebView 页面(聊天/代码检查/代码评审/单测/单测执行/设置),与 WebViewWindowPanel$K 的模块映射对应。