Skip to content

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) — 处理 Action
  • setModelCode(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() — 切换代码调试模式
  • 调试模式下,聊天消息包含异常堆栈信息
  • PresentationDebuggerFilter 触发

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 — 会话 ID

Git 评审响应 DTO:

ResponseDto
  ├── code = 200
  └── data = ReviewResult
      ├── issues — 问题列表
      ├── suggestions — 建议列表
      └── score — 评分

3.2 GitResponseDTO (81 strings)

路径: com/aicode/dto/GitResponseDTO职责: Git 响应 DTO

字段:

  • status — Integer — 状态码
  • repoUrl — String — 仓库 URL
  • repoId — String — 仓库 ID
  • branch — 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. 关键发现

  1. ChatInputController 是聊天枢纽: 348 个字符串,管理聊天输入、消息发送、代码调试模式切换,是 WebView 聊天界面的后端控制器。

  2. 代码调试模式: isCodeDebug() / setCodeDebug() 切换代码调试模式,当程序抛出异常时由 DebuggerFilter 自动触发,将异常信息发送给 AI 进行调试分析。

  3. 双消息通道: sendMessage()(普通聊天)和 sendCodeMessage()(代码消息),后者包含代码上下文信息。

  4. Git 双入口: PrepushReview(Push 前评审)和 CommitMessage(提交信息生成)都通过 GIT_DIFF 命令,但请求参数不同。

  5. 代码知识库: GIT_CODE_KNOWLEDGE_REPO_STATUS 表明 iFlyCode 有代码知识库功能,可能基于 RAG (Retrieval-Augmented Generation) 实现代码搜索和上下文增强。

  6. 模型切换: setModelCode() / getModelCode() 允许用户在聊天中切换 AI 模型,与 CodeModel.modelCode 对应。

  7. chatTest 字段: setChatTest() / getChatTest() 可能用于测试模式,与 MessageDto.chatTest 字段对应。

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