Skip to content

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 — 请求 ID
  • content — 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 — 对话 Diff
  • CODE_CHECK — 代码检查
  • GIT_DIFF — Git Diff
  • USER_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() — 获取 Action
  • getPermission() — 获取权限
  • 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 — ID
  • repoUrl — String — 仓库 URL
  • repoName — 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 — ID
  • repoUrl — String — 仓库 URL
  • repoName — 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. 关键发现

  1. SessionController 是核心: 455 个字符串,是内联聊天最大的类,管理会话生命周期、分类选择、请求执行和状态转换。

  2. 8 个分类: InlineChatCategoryEnum 定义 8 种 AI 操作类型(解释/注释/重构/修复/生成/优化/调试/测试),覆盖最常见的代码操作需求。

  3. 2 个步骤: InlineChatStepEnum 只有 CATEGORY(分类选择)和 ERROR(错误)两个步骤,说明内联聊天的状态机相对简单。

  4. codeVector 字段: CodeSearchDto 包含 codeVector 字段,可能存储代码的语义向量,用于基于向量相似度的代码搜索(RAG)。

  5. 20+ 权限: PermissionEnum 定义 20+ 个权限,每个权限对应一个功能模块,通过 PERMISSION_ORDER_LISTRIGHT_PERMISSION_ORDER_LIST 控制权限顺序和显示。

  6. Hutool StrUtil: BizResponse 使用 Hutool 的 StrUtil,这是第五处 Hutool 依赖。

  7. LastSelectionTextCache: 缓存用户选中的代码和精确偏移,确保内联聊天请求包含准确的代码范围信息。

  8. EphemeralChatSessionController: 临时会话控制器管理单次会话,与 SessionController(持久会话)配合使用。

  9. 10 个 Agent 模块: AgentModuleEnum 定义 10 个模块,与 ModuleEnum(7 个 UI 模块)不同,Agent 模块更细粒度,包含 CODE_TEST_TEMPLATE 等子模块。

  10. PageEnum 6 页面: 定义 6 个 WebView 页面(聊天/代码检查/代码评审/单测/单测执行/设置),与 WebViewWindowPanel$K 的模块映射对应。

本项目仅供学习研究,逆向分析内容归原厂商所有。