iFlyCode Chat 与 Git 集成系统分析
版本: 3.4.2-222 | 分析日期: 2026-05-11
1. 概述
com/aicode/chat/ 包实现聊天输入控制器,com/aicode/git/ 包实现 Git 评审和代码知识库集成。这两个包是 iFlyCode 智能对话和代码评审功能的核心入口。
2. Chat 包
2.1 ChatInputController (348 strings)
路径: com/aicode/chat/ChatInputController职责: 聊天输入控制器 — 管理聊天输入框的状态和消息发送
关键方法:
sendMessage(String, String)— 发送聊天消息sendCodeMessage(String, String, String)— 发送代码消息handleAction(String)— 处理 ActionsetModelCode(String)— 设置模型代码getModelCode()— 获取模型代码getSelectedText()— 获取选中文本getEditor()— 获取编辑器getProject()— 获取项目clearInput()— 清空输入setInputText(String)— 设置输入文本isCodeDebug()— 是否代码调试setCodeDebug(boolean)— 设置代码调试setChatTest(String)— 设置聊天测试getChatTest()— 获取聊天测试
关键依赖:
ChatService— 聊天服务PluginWebsocketClient— WebSocket 客户端CommandEnum— 命令枚举WebViewDataTypeEnum— WebView 数据类型AICodeSettingsState— 设置状态EditorUtils— 编辑器工具InlineChatController— 内联聊天控制器Presentation— 调试呈现
消息发送流程:
用户输入 → ChatInputController.sendMessage()
│
├── 获取选中文本 getSelectedText()
├── 获取编辑器上下文 getEditor()
├── 构建 MessageDto
│ ├── command = CommandEnum.CHAT
│ ├── text = 用户输入
│ ├── modelCode = 当前模型
│ └── data = 代码上下文
│
└── ChatService.sendWsMessage() → WebSocket → Agent代码调试模式:
isCodeDebug()/setCodeDebug()— 切换代码调试模式- 调试模式下,聊天消息包含异常堆栈信息
- 由
Presentation和DebuggerFilter触发
2.2 ChatInputController$1 (匿名内部类)
职责: Action 处理器 — 处理 WebView 发送的 Action
2.3 ChatInputController$2 (匿名内部类)
职责: 消息回调 — 处理 Agent 响应
3. Git 包
3.1 GitReviewService (192 strings) — 已在 doc 39 分析
补充: Git 评审服务的详细 DTO 结构
Git 评审请求 DTO:
MessageDto
├── command = GIT_DIFF
├── data = GitDiffData
│ ├── diffContent — Git diff 内容
│ ├── commitMessage — 提交信息
│ ├── branch — 当前分支
│ └── repoUrl — 仓库 URL
└── sessionId — 会话 IDGit 评审响应 DTO:
ResponseDto
├── code = 200
└── data = ReviewResult
├── issues — 问题列表
├── suggestions — 建议列表
└── score — 评分3.2 GitResponseDTO (81 strings)
路径: com/aicode/dto/GitResponseDTO职责: Git 响应 DTO
字段:
status— Integer — 状态码repoUrl— String — 仓库 URLrepoId— String — 仓库 IDbranch— String — 分支command— String — 命令repoName— String — 仓库名称code— String — 代码
toString: GitResponseDTO(status=, repoUrl=, repoId=, branch=, command=, repoName=, code=)
3.3 Git 状态推送
WebViewDataTypeEnum 中与 Git 相关的类型:
GIT_STATUS— Git 状态变更GIT_CODE_KNOWLEDGE_REPO_STATUS— Git 代码知识库状态
状态推送流程:
Git 事件触发
│
├── GitStatusListener.onGitStatusChanged()
│ └── WebViewWindowPanel.sendMessage2webView()
│ └── GIT_STATUS → WebView 更新
│
└── CodeKnowledgeRepoStatusListener.onStatusChanged()
└── WebViewWindowPanel.sendMessage2webView()
└── GIT_CODE_KNOWLEDGE_REPO_STATUS → WebView 更新4. 聊天与 Git 集成流程
┌──────────────────────────────────────────────────────────────┐
│ ChatInputController │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 输入框 (WebView) │ │
│ │ ├── sendMessage() → ChatService → WebSocket │ │
│ │ ├── sendCodeMessage() → ChatService → WebSocket │ │
│ │ └── handleAction() → 操作分发 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 代码调试模式: │
│ Presentation → setCodeDebug(true) │
│ → sendMessage() 包含异常堆栈 │
│ → Agent 返回 AI 调试建议 │
└──────────────────────────────────────────────────────────────┘
│
WebSocket: CHAT / CODE_DEBUG
│
┌──────────────────────────────────────────────────────────────┐
│ Git 集成 │
│ PrepushReviewAction → GitReviewService → GIT_DIFF │
│ CommitMessageSuggestionAction → GitReviewService → GIT_DIFF │
│ GitStatusListener → GIT_STATUS → WebView │
│ CodeKnowledgeRepoStatusListener → GIT_CODE_KNOWLEDGE_REPO │
└──────────────────────────────────────────────────────────────┘5. 关键发现
ChatInputController 是聊天枢纽: 348 个字符串,管理聊天输入、消息发送、代码调试模式切换,是 WebView 聊天界面的后端控制器。
代码调试模式:
isCodeDebug()/setCodeDebug()切换代码调试模式,当程序抛出异常时由DebuggerFilter自动触发,将异常信息发送给 AI 进行调试分析。双消息通道:
sendMessage()(普通聊天)和sendCodeMessage()(代码消息),后者包含代码上下文信息。Git 双入口: PrepushReview(Push 前评审)和 CommitMessage(提交信息生成)都通过
GIT_DIFF命令,但请求参数不同。代码知识库:
GIT_CODE_KNOWLEDGE_REPO_STATUS表明 iFlyCode 有代码知识库功能,可能基于 RAG (Retrieval-Augmented Generation) 实现代码搜索和上下文增强。模型切换:
setModelCode()/getModelCode()允许用户在聊天中切换 AI 模型,与CodeModel.modelCode对应。chatTest 字段:
setChatTest()/getChatTest()可能用于测试模式,与MessageDto.chatTest字段对应。