Skip to content

iFlyCode Agent webpack 完整模块解构 + 循环依赖图 + 二进制深度分析

版本: 3.4.2-222 | 分析日期: 2026-05-31 | 文档编号: 107


1. Agent index.js 完整模块解构(1,156 模块精确映射)

1.1 模块按大小分布

大小范围模块数总大小典型内容
< 1KB688 (59.5%)~350KBNode.js 内置库的桥接/stub 模块
1-5KB370 (32.0%)~1.1MB小工具函数、配置、常量
5-20KB79 (6.8%)~800KB中间件、DTO 转换、部分 Controller
20-100KB17 (1.5%)~600KBcheerio/htmlparser2/fast-glob/knex
100KB-1MB1 (0.1%)451KB (模块 71050)iconv-lite 编码库
> 1MB1 (0.1%)1.4MB (模块 35303)marked (Markdown 解析器)

总代码大小: 4.2MB(其中业务代码 ~2.9MB,嵌入式数据 ~1.3MB)

1.2 Top 20 最大模块身份识别(之前从未映射)

排名模块 ID大小真实身份说明
#1353031,411,037B (1.3MB)markedMarkdown 解析器。用于渲染 AI 返回的 Markdown 格式回答。最大模块
#271050451,191Biconv-lite字符编码转换库。支持 150+ 编码
#39850595,526BcheerioHTML DOM 解析器,用于 AI 回答中的 HTML 处理
#49099788,754B嵌入式 JSON 数据0 个依赖—纯数据,可能是预编译规则表
#55017181,963Biconv-lite (编码表)iconv-lite 的编码映射表
#6254672,800Bmermaid流程图渲染支持
#76765570,492B错误码常量表0 个依赖,导出一组 EE_* 错误码
#89994558,726Bhtmlparser2HTML 解析器(cheerio 的底层依赖)
#95500752,255Bfast-glob文件系统 glob 匹配引擎
#104247742,679Bmermaid图表渲染
#115440940,323Bmermaid图表渲染
#127078232,815Bmermaid图表渲染
#133037729,054Bmermaid图表渲染
#142136026,017BknexSQL 查询构建器
#155980025,462BSaxesParserXML SAX 解析器
#16514824,402BknexSQL 方言处理
#179726123,541B嵌入式数据0 个依赖,纯数据(可能是正则表)
#184644021,534Bnode-fetchHTTP fetch polyfill
#192090520,284Biconv-lite编码表
#204717418,880BknexSQL 方言

关键发现: 1.3MB 的 marked 模块是 index.js 中最大的单一内容,远超加密模块或 prompt 模板。说明Markdown 渲染是 Agent 的核心能力

1.3 模块依赖调用统计

统计项数值
require() 调用3,980 次
被引用的唯一模块 ID1,514 个(超过实际模块数 1,156,说明存在非 ncc 打包的模块引用)
引用最多的模块g(70857) = Node.js path 模块(~400+ 次引用)
无依赖的模块~10 个纯数据模块(90997, 67655, 97261 等)

1.4 模块按功能领域分类

功能域估计模块数占代码比例关键模块 ID
Node.js 内置库(fs/path/os/net/crypto)~1505%70857, 16928, 72136 等
Web 框架(Express/WS/portfinder)~808%动态
加密/安全(sm-crypto/crypto)~308%1618, 32214, 22920, 76982, 42135
Markdown/HTML 渲染(marked/cheerio/htmlparser2)~8040%35303, 98505, 99945
SQL 数据库(knex/sqlite3/mysql2/pg)~20015%21360, 5148, 47174
Prompt 模板/LLM~305%68577
Controller/Service 业务代码~6010%20875, 35606, 62687, 50283, 7396
文件/代码分析(tree-sitter/fast-glob/fs-extra)~605%55007
日志/监控(log4js/OpenTelemetry)~604%
工具类(lodash/uuid/lru-cache/jschardet)~2005%
数据(嵌入式 JSON/编码表)~65%90997, 97261

修正 doc 66 的估计:之前 doc 66 称 "67 条 API 路由、5 种加密算法",未提及渲染和 SQL 是最大的模块。marked 模块本身(1.3MB)比所有加密模块总和(~300KB)大 4 倍。


2. Java 插件端完整依赖分析

2.1 包依赖关系图

68 个包之间的全部依赖关系(内部 com.aicode.* import 分析):

最依赖的包(被最多其他包引用):
  util:    49 个包依赖它  ← 核心工具层
  agent:   38 个包        ← 通信层 
  inline:  34 个包        ← 内联聊天子系统
  content: 27 个包        ← 编辑器内容
  action:  25 个包        ← Action 框架
  enums:   25 个包        ← 枚举定义
  message: 25 个包        ← 消息 DTO
  service: 23 个包        ← 服务接口
  diff:    23 个包        ← Diff 系统
  settings:21 个包        ← 设置系统

2.2 循环依赖(44 个双向对)

agent 是最大的循环依赖源,与 14 个包存在双向引用:

agent  ↔ service       agent  ↔ inline       agent  ↔ view
agent  ↔ util          agent  ↔ enums        agent  ↔ listener
agent  ↔ diff          agent  ↔ settings     agent  ↔ template
agent  ↔ test          agent  ↔ apm          agent  ↔ updater
agent  ↔ action        agent  ↔ PluginStartupActivity

其他关键循环:
  inline  ↔ action     inline  ↔ listener   inline  ↔ apm
  service ↔ domain     service ↔ language   service ↔ enums
  util    ↔ 16 个包    ← util 几乎与所有包双向引用

架构结论: util ↔ 全包的循环引用说明工具层与业务层耦合度高,这是 Java 端最大的架构问题。

2.3 包大小分布(以文件数计)

范围包数包名
30+ 文件2enums (30), util (30)
10-20 文件7agent.service(15), listener(12), service.editor(11), etc.
5-10 文件14action(21, 含子包), inline(10), inline.ide(10), etc.
2-5 文件26大部分子包
1 文件19icons, message, PluginStartupActivity, etc.

3. Agent 二进制(89MB Linux Node.js)深度分析

3.1 Node.js 版本和编译特征

属性
Node.js 版本v18.18.0
文件类型ELF 64-bit LSB x86-64, dynamically linked, with debug_info, not stripped
标准 Node.js v18.18.0 大小~35MB (通常 strip 后 ~25MB)
本二进制大小88,956,488 字节 (89MB)
差异+54MB(未 strip 的 debug 符号 + 静态链接库)

编译主机路径泄露:

已脱敏

这是编译构建的 Jenkins 工作区路径,说明 Agent Node.js 是在 CI 环境(Jenkins)上编译的。

3.2 嵌入式内容分析

内容是否存在说明
硬编码的 JS 代码❌ 无0 个 require()module.exports 模式
硬编码的 URL⚠️ 少量噪声无 iFlyCode 专用 URL,只有 V8/ICU/Unicode 的内置 URL
硬编码 IP❌ 无只有 V8 测试用例中的随机 IP
私钥/证书❌ 无OpenSSL 的 PEM 相关符号,无实际键值
Git commit hash⚠️ 5 个其中 4 个是 V8 的 commit (e5271cc 等),非 iFlyCode
开发路径⚠️ 1 个Jenkins CI 构建路径

结论:Agent 的 Node.js 二进制是标准的 Node.js v18.18.0 源码编译,未额外嵌入 iFlyCode 代码。 89MB 的原因是 with debug_info, not stripped。标准 Node.js 发行版 strip 后为 ~25MB,89MB 与其相差 ~64MB 的调试符号。没有隐藏代码或密钥在此二进制中。

3.3 与企业版 Node.js 的关系

Node.js 官方 v18.18.0 (源码)
  → Jenkins CI 编译 (已脱敏)
  → 加入调试符号 (--with-debug-info)
  → 输出 89MB 二进制
  → 打包进 iFlyCode agent.zip

4. Velocity 模板全量分析

4.1 共享宏库(IflyCode common macros.java.ft

五大核心宏:

参数功能
#renderTestMethodName($methodName)方法名生成 testMethodName 测试方法名,自动处理重载
#renderJavaReturnVar($type)返回类型生成 Type result = 返回值声明
#renderTestCaseMethodName($caseMethodName, $methodName)用例名+方法名测试用例方法命名
#renderTestMethodNameAsWords($methodName)方法名驼峰转英文句子
#testMethodSuffix($methodName, $prefix)方法名+前缀重载方法名去重(同名加 _2, _3...)

4.2 框架专属宏分布

用途J4J4MJ4PJ5J5MSBTN
#renderMockedFields生成 @Mock 字段
#renderMockStubsMock 桩代码
#renderMockVerifiesMock 验证
#renderStaticMockStubs静态 Mock
#renderExceptionMessage异常消息断言
#renderCaseBranches分支用例
#setClassWithNoMock无 Mock 初始化
#renderFieldValueMockitoSpring @Value 注入
#parse引入共享宏

J4=JUnit4, J4M=JUnit4&Mockito, J4P=JUnit4&Powermock, J5=JUnit5, J5M=JUnit5&Mockito, SB=SpringBoot, TN=TestNG

4.3 back 文件的作用

unitTests/back 是一个 PowerMock 专用的测试方法体模板,包含:

  • 静态 Mock 准备(#renderStaticMockStubs
  • 内部调用 Mock(#renderInternalMethodCallsStubs
  • Spy 对象处理(#renderMethodCallWithSpy
  • Mock 验证(#renderMockVerifies

它不是完整模板,而是被 JUnit4&Powermock.java.ft 通过 #parse("back") 包含的片段。


5. Java 插件外部依赖清单(完整版)

5.1 运行时依赖(lib/ 目录中的 .jar)

类别版本用途
HTTP 客户端okhttp4.12.0WebSocket 和 HTTP 通信
okhttp-sse4.10.0SSE 流式响应
okio-jvm3.6.0OkHttp 底层 IO
OpenTelemetryopentelemetry-api/context/sdk1.36.0观测/追踪
opentelemetry-exporter-otlp1.36.0OTEL 导出
JSON 处理json (20080701)老版低版本兼容
json (20230618)新版主 JSON 处理
字符串/工具commons-lang33.12.0字符串/数组工具
commons-text1.10.0文本处理
hutool-all5.8.12综合 Java 工具包
Kotlinkotlin-stdlib1.9.10Kotlin 运行时
kotlin-stdlib-common/jdk7/jdk81.9.10Kotlin 跨平台支持
Diffjava-diff-utils4.12文本差异算法
其他jsr3053.0.2@Nullable 注解
annotations13.0JetBrains 注解
searchableOptionsIDE 快速搜索索引

5.2 Node.js 运行时依赖(package.json)

类别用途
Web 框架Express, ws, portfinderHTTP + WebSocket 服务器
数据库sqlite3 (v5.1.7), mysql2 (v3.2.0), pg (v8.11.3), knex (v2.5.1), dmdb, nedb5 种数据库支持
代码解析web-tree-sitter (v0.22.2)10 语言 AST 解析
加密sm-crypto (v0.3.13)SM2/SM3/SM4 国密算法
Markdown/HTMLmarked (v1.2.9), cheerio (v1.0.0-rc.12), fast-xml-parserMarkdown 渲染和 HTML 处理
文件操作fs-extra, adm-zip, fast-glob文件系统
编码检测iconv-lite, jschardet文件编码自动检测
文档提取word-extractor, tomlWord/TOML 文件解析
监控@opentelemetry/* (v0.49.1-1.24.1), log4jsAPM 和日志
工具lodash, uuid, lru-cache, node-fetch, eventsource-parser通用工具

6. 最终统计更新

6.1 所有分析数据汇总

统计项数值对应 doc
专题文档总数107
Java 反编译文件413 .java, 68 包doc 103
Java 循环依赖对44doc 107
Agent webpack 模块1,156, 总 4.2MBdoc 107
Agent require() 调用3,980doc 107
Worker.js 函数~3,061doc 104
WebView 前端 JS84 文件, 55 消息类型doc 104
Velocity 模板7 框架, 2 宏库, 1 片段doc 105
plugin.xml 项22 Action, 9 Listener, 7 Extension, 100% 覆盖doc 105
H() 解码器定义7doc 67
H() 调用文件226 .java 文件doc 80
H() 调用总次数4,628 (91.5% 可用率)doc 80
Agent 二进制Node.js v18.18.0, 89MB (debug + symbols)doc 104,107
加密算法RSA1024/SM2/SM4/AES-256-CTR/MD5doc 100
SDK 依赖33 npm + 22 Javadoc 107

6.2 最终未覆盖

已覆盖:  7 大子系统, 107 篇文档, 全部 413 类文件, 1,156 webpack 模块
         44 循环依赖对, 5 种加密算法, 10 tree-sitter 语言, 7 测试框架模板
         89MB 二进制验证 (无隐藏代码), 3 种 IDE Bridge

未覆盖: 仅动态验证 (需 GUI IDE + 网络代理)
         本环境: headless 终端, 无 JetBrains IDE, 无法抓包

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