Skip to content

iFlyCode Agent Service 层与 Action Batch 批量系统完整分析

版本: 3.4.2-222 | 分析日期: 2026-05-11

1. 概述

本文档分析 com/aicode/agent/service/(7 个类)、com/aicode/agent/service/impl/(9 个类)和 com/aicode/action/batch/(含子包 15+ 个类)三个包。Agent Service 层是 iFlyCode 与 Agent 通信的业务逻辑层,Action Batch 是批量操作(批量单测、批量文档)的完整实现。

2. Agent Service 接口层

2.1 ChatService (接口)

路径: com/aicode/agent/service/ChatService职责: 聊天服务接口 — 定义聊天消息发送方法

关键方法:

  • sendWsMessage(CommandEnum, Object, Project) — 发送 WebSocket 消息
  • sendMessage2webView(Project, Object) — 推送消息到 WebView

2.2 CodeCheckService (接口)

路径: com/aicode/agent/service/CodeCheckService职责: 代码检查服务接口 — 定义代码检查方法

2.3 CodeCompleteService (接口)

路径: com/aicode/agent/service/CodeCompleteService职责: 代码补全服务接口 — 定义代码补全方法

2.4 CommonService (接口)

路径: com/aicode/agent/service/CommonService职责: 通用服务接口 — 定义通用消息处理方法

2.5 GitReviewService (接口)

路径: com/aicode/agent/service/GitReviewService职责: Git 评审服务接口 — 定义 Git 评审方法

2.6 InlineChatCommandService (接口)

路径: com/aicode/agent/service/InlineChatCommandService职责: 内联聊天命令服务接口 — 定义内联聊天命令方法

2.7 RequestTipService (接口)

路径: com/aicode/agent/service/RequestTipService职责: 请求补全服务接口 — 定义代码补全请求方法

3. Agent Service 实现层

3.1 ChatServiceImpl (312 strings) — 最大服务实现

路径: com/aicode/agent/service/impl/ChatServiceImpl职责: 聊天服务实现 — 处理聊天消息的发送和响应

关键方法:

  • sendWsMessage() — 发送 WebSocket 消息
    • 构建 MessageDto(id, stream, command, sessionId, modelCode, data, text)
    • 使用 PluginWebsocketClient.sendWsMessage() 发送
    • 创建 OpenTelemetry Span 记录发送
  • sendMessage2webView() — 推送消息到 WebView
    • 使用 WebViewWindowPanel.sendMessage2webView() 推送
    • 根据 WebViewDataTypeEnum 类型分发
  • handleChatResponse() — 处理聊天响应
    • 解析 Agent 响应 JSON
    • 根据 CommandEnum 类型分发到不同的处理逻辑
    • 流式响应使用 streamStep 标识步骤

关键依赖:

  • PluginWebsocketClient — WebSocket 客户端
  • WebViewWindowPanel — WebView 面板
  • MessageDto — 消息 DTO
  • CommandEnum — 命令枚举
  • WebViewDataTypeEnum — WebView 数据类型
  • OpenTelemetryUtil — APM 工具
  • Gson — JSON 解析
  • AICodeSettingsState — 设置状态

3.2 CodeCheckServiceImpl (189 strings)

路径: com/aicode/agent/service/impl/CodeCheckServiceImpl职责: 代码检查服务实现 — 处理代码检查请求和响应

关键方法:

  • handleCodeCheckResponse() — 处理代码检查响应
    • 解析 CodeCheckDto(codeFragment, errorType, errorMessage, codeInfo)
    • 推送检查结果到 WebView
    • 在编辑器中显示检查标记

3.3 CodeCompleteServiceImpl (156 strings)

路径: com/aicode/agent/service/impl/CodeCompleteServiceImpl职责: 代码补全服务实现 — 处理代码补全响应

关键方法:

  • handleCodeCompleteResponse() — 处理代码补全响应
    • 解析 AgentCodeTip(补全结果)
    • 使用 Flow.Subscriber 处理流式响应
    • 调用 EditorManagerService 应用补全

3.4 CommonServiceImpl (134 strings)

路径: com/aicode/agent/service/impl/CommonServiceImpl职责: 通用服务实现 — 处理通用消息

关键方法:

  • handleCommonMessage() — 处理通用消息
    • 处理 USER_PERMISSION — 权限更新
    • 处理 REPO_STATUS — 仓库状态
    • 处理 USER_KNOWLEDGE_LIST — 知识库列表
    • 处理 LOGIN — 登录响应
    • 处理 PLUGIN_UPDATE — 插件更新

3.5 GitReviewServiceImpl (192 strings)

路径: com/aicode/agent/service/impl/GitReviewServiceImpl职责: Git 评审服务实现 — 处理 Git 评审请求和响应

关键方法:

  • handleGitReviewResponse() — 处理 Git 评审响应
    • 解析评审结果(issues, suggestions, score)
    • 推送结果到 WebView

3.6 InlineChatCommandServiceImpl (178 strings)

路径: com/aicode/agent/service/impl/InlineChatCommandServiceImpl职责: 内联聊天命令服务实现 — 处理内联聊天请求和响应

关键方法:

  • handleInlineChatResponse() — 处理内联聊天响应
    • 解析 InlineChatInfo 和响应数据
    • 使用 SessionController 更新会话状态
    • 流式响应使用 streamStep 标识步骤
    • 调用 DiffService 应用代码修改

3.7 RequestTipServiceImpl (89 strings)

路径: com/aicode/agent/service/impl/RequestTipServiceImpl职责: 请求补全服务实现 — 处理代码补全请求

关键方法:

  • requestTip() — 请求代码补全
    • 构建 CodeGenerateEditorRequest(完整的补全请求上下文)
    • 使用 PluginWebsocketClient.sendWsMessage() 发送
    • 创建 OpenTelemetry Span

4. Service 层消息分发架构

PluginWebsocketListener.onMessage()


SocketMessageHandleListener.handleSocketMessage()

    ├── 解析 JSON → ResponseDto (code, data, command)

    ├── 根据 CommandEnum 分发:
    │   ├── CHAT → ChatServiceImpl
    │   ├── CODE_CHECK → CodeCheckServiceImpl
    │   ├── CODE_COMPLETE → CodeCompleteServiceImpl
    │   ├── INLINECHAT_* → InlineChatCommandServiceImpl
    │   ├── GIT_DIFF → GitReviewServiceImpl
    │   └── 其他 → CommonServiceImpl

    └── 推送结果到 WebView:
        └── WebViewWindowPanel.sendMessage2webView()

5. Action Batch 包 — 批量操作系统

5.1 BatchUnitTestAction (基类)

路径: com/aicode/action/batch/BatchUnitTestAction职责: 批量单测 Action — 批量生成单元测试的入口

5.2 BatchUTGeneratorAction

路径: com/aicode/action/batch/BatchUTGeneratorAction职责: 批量单测生成器 Action — 批量生成单元测试

关键逻辑:

  1. 收集项目中所有符合条件的类
  2. 过滤排除项(abstract, interface, enum, annotation)
  3. 对每个类创建 CreateTestFileTask
  4. 使用进度条显示生成进度
  5. 支持暂停和取消

5.3 BatchUTNodeAction

路径: com/aicode/action/batch/BatchUTNodeAction职责: 批量单测节点 Action — 从项目树节点触发的批量单测

5.4 BatchUTDocAction

路径: com/aicode/action/batch/doc/BatchUTDocAction职责: 批量文档生成 Action — 批量生成文档注释

5.5 Batch/Node 子包

职责
BatchUTTreeNode批量单测树节点 — 项目树中的复选框节点
BatchUTTreeNodeRenderer树节点渲染器 — 渲染复选框和类名
BatchUTTreeModel树模型 — 管理树节点数据
BatchUTTreePanel树面板 — 包含树和工具栏的面板
BatchUTProgressPanel进度面板 — 显示批量生成进度
BatchUTConfigPanel配置面板 — 批量单测的配置选项

5.6 批量单测完整流程

1. 用户右键项目/目录 → BatchUTGeneratorAction

   ├── 扫描目录下所有 Java 类
   │   └── 过滤: abstract/interface/enum/annotation

   ├── 显示 BatchUTTreePanel
   │   ├── BatchUTTreeModel — 树模型
   │   ├── BatchUTTreeNode — 复选框节点
   │   └── BatchUTTreeNodeRenderer — 渲染器

   ├── 用户选择类 → BatchUTConfigPanel
   │   ├── 测试框架选择 (JUnit 4/5, TestNG)
   │   ├── Mock 框架选择 (Mockito, PowerMock)
   │   ├── 重复规则 (COEXIST/OVERWRITE/SKIP)
   │   └── 目标目录选择

   ├── 开始生成 → BatchUTProgressPanel
   │   ├── 进度条
   │   ├── 当前类名
   │   └── 成功/失败计数

   └── 对每个选中的类:
       ├── TestSubjectInspector.inspect() — 检查
       ├── TestTemplateContextBuilder.build() — 构建上下文
       ├── JavaTestBuilderImpl.build() — 生成代码
       └── CreateTestFileTask.run() — 写入文件

6. 关键发现

  1. ChatServiceImpl 最大: 312 strings,是 Agent Service 层中最大的实现类,处理聊天消息的发送、响应解析和 WebView 推送。

  2. 7 个 Service 接口 + 7+ 个实现: Agent Service 层采用接口+实现的分离模式,每个 CommandEnum 类型对应一个 Service 接口和实现。

  3. SocketMessageHandleListener 是分发核心: 根据 CommandEnum 将消息分发到不同的 Service 实现,是 Agent 通信层的消息路由器。

  4. 批量单测有完整 UI: BatchUTTreePanel(树选择)+ BatchUTConfigPanel(配置)+ BatchUTProgressPanel(进度),提供完整的批量操作体验。

  5. BatchUTTreeNode 复选框: 使用复选框树节点让用户选择要生成单测的类,支持全选/反选。

  6. 3 种批量操作: BatchUnitTestAction(单测)、BatchUTNodeAction(从树节点触发)、BatchUTDocAction(文档注释),覆盖批量操作的主要场景。

  7. CommonServiceImpl 处理 5+ 命令: USER_PERMISSION、REPO_STATUS、USER_KNOWLEDGE_LIST、LOGIN、PLUGIN_UPDATE,是通用消息的集中处理点。

  8. InlineChatCommandServiceImpl 流式处理: 使用 streamStep 标识流式响应步骤,与 SessionController 配合更新内联聊天状态。

  9. RequestTipServiceImpl 89 strings: 补全请求服务实现,构建 CodeGenerateEditorRequest 并通过 WebSocket 发送。

  10. 批量单测复用 Template 包: 批量单测的代码生成逻辑完全复用 com/aicode/template/ 包的 JavaTestBuilderImpl 和 CreateTestFileTask。

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