Skip to content

iFlyCode WebView 前端完整分析 (Vue.js 2.7 + Pinia)

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

1. 概述

本文档详细分析 iFlyCode WebView 前端代码,包括技术栈、路由结构、Pinia Stores、JS↔Java Bridge 通信协议、权限系统、UI 组件和中文界面字符串。

重要修正: 之前文档(doc 30)错误地记录为 Vue.js 3 + Pinia。实际分析发现 WebView 使用 Vue.js 2.7.14(兼容 Composition API),而非 Vue 3。

2. 技术栈

技术版本用途
Vue.js2.7.14前端框架(非 Vue 3)
Pinia状态管理(3 stores)
Vue Router路由管理(17 路径)
Element UIUI 组件库(70+ 组件)
Mermaid图表渲染(20+ 图类型)
KaTeX数学公式渲染
Cytoscape网络图可视化
DOMPurifyHTML 安全过滤
Vite构建工具

2.1 构建产物统计

类型数量总大小
JS 文件84~10.5 MB
CSS 文件24~460 KB
图片/图标8~50 KB
SVG3~5 KB
HTML1491 B

2.2 Top 10 JS 文件

文件大小内容
index-f0296668.js3.6 MBVue 2.7 + Element UI + 核心业务逻辑
index-9c2209c9.js1.5 MBElement UI 组件 + Pinia chat store
sendMsgMode-8b767ec0.js280 KBSQL Chat + 消息发送模式
cytoscape.esm-23e802cd.js902 KBCytoscape 网络图库
mermaid-parser.core-dc9f3dce.js611 KBMermaid 图表解析器
katex-db156564.js478 KBKaTeX 数学公式
architectureDiagram-IEHRJDOE.js406 KB架构图渲染
tips-f0105b0c.js80 KB代码补全提示
index-1aaa16d8.js34 KBCodeCheck store
chunk-A2AXSNBT-9b062cf2.js77 KB共享 chunk

3. Vue Router 路径

3.1 路由表

路径页面说明
/主页默认首页
/login登录页用户登录
/chat-view智能问答AI 聊天对话
/code-check代码检查代码质量检查
/code-review代码评审Git 代码评审
/code-search代码搜索语义代码搜索
/unit-test单元测试单测生成
/unit-test-bank单测题库单测管理
/multi-test批量单测批量单测生成
/sql-pageSQL 页面SQL 生成/优化
/setting-page设置页插件配置
/about-page关于页版本信息
/history-record历史记录对话历史
/tool-box工具箱功能入口
/function-guide功能引导新手引导
/web-view/:nameWebView通用 WebView 页面

3.2 路由守卫

  • router.beforeEach — 路由前置守卫(1 处)
  • router.afterEach — 路由后置守卫(1 处)

4. Pinia Stores

4.1 Store 定义

Store文件状态领域
chatindex-f0296668.js聊天消息、对话列表、模型选择
codeCheckindex-1aaa16d8.js代码检查结果、检查列表
sqlsendMsgMode-8b767ec0.jsSQL 对话、数据源、表列表

注意: 之前文档(doc 30)记录了 7 个 Pinia Stores,实际只有 3 个。其余 4 个(Git Review、Code Search、Settings、Unit Test)可能是 Vue 2 Options API 组件的本地状态,而非独立 Pinia Store。

5. JS↔Java Bridge 通信协议

5.1 Bridge 架构

┌─────────────────────────────────────────────────┐
│                  WebView (JCEF)                   │
│                                                   │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐    │
│  │ ideaUtil  │  │ vscodeUtil│  │ eclipseUtil│    │
│  │ (IDEA)    │  │ (VSCode)  │  │ (Eclipse)  │    │
│  └───────────┘  └───────────┘  └───────────┘    │
│        │              │              │            │
│        ▼              ▼              ▼            │
│  ┌─────────────────────────────────────────┐     │
│  │         handlerReceivedMsg(type, value) │     │
│  │         sendMsgToIdea(type, value)      │     │
│  └─────────────────────────────────────────┘     │
│                                                   │
└─────────────────────────────────────────────────┘

5.2 三种 IDE Bridge 实现

IDEA Bridge (ideaUtil-11ab0730.js)

javascript
// JS→Java: 通过 window.myObject.sendMessage
function sendMsgToIdeaHandler(type, value = "") {
  window.myObject.sendMessage(
    JSON.stringify({ type, value })
  );
}

// Java→JS: 通过 window.receiveData 回调
window.receiveData = function receiveData(data) {
  let message = typeof data === "object" ? data : JSON.parse(data);
  handlerReceivedMsg(message.type, message.value);
};

VSCode Bridge (vscodeUtil-49d49699.js)

javascript
// JS→Java: 通过 vscode.postMessage
function sendMsgToIdeaHandler(type, value) {
  vscode.postMessage({ type, value: JSON.stringify(value) });
}

// Java→JS: 通过 window message event
window.addEventListener("message", (event) => {
  handlerReceivedMsg(event.data.type, event.data.value);
});

Eclipse Bridge (eclipseUtil-82d0751a.js)

javascript
// JS→Java: 通过 window.sendMessage
function sendMsgToIdeaHandler(type, value = "") {
  window.sendMessage(
    JSON.stringify({ type, value: JSON.stringify(value) })
  );
}

// Java→JS: 通过 window.receiveData 回调
window.receiveData = function receiveData(data) {
  handlerReceivedMsg(JSON.parse(data).type, JSON.parse(data).value);
};

5.3 Java→JS 消息类型 (handlerReceivedMsg switch/case)

完整从源码提取的 50+ 消息类型:

消息类型处理方法说明
CHAT:AGENT_ERRORhanldeAgentErrorAgent 错误
CHAT:GET_USER_INFOreceiveUserInfo用户信息
CHAT:GET_CONVERSATIONgetConversation获取对话
CHAT:UPDATE_CONVERSATION_LISTupdateConversationList更新对话列表
CHAT:UPDATE_SELECT_CODEupdateSelectCode更新选中代码
CHAT:SET_SEND_MESSAGE_TYPEsetSendMessageType设置发送模式
CHAT:GET_MODEL_LISTgetModelList获取模型列表
CHAT:PREDICTupdatePredictList更新预测列表
CHAT:RECEIVER_IDE_FILE_STATEgetIdeFileState / getIdeaKnowledgefileMessageIDE 文件状态
CHAT:RECEIVER_DOC_KNOWLEDGE_LISTgetDocKnowledgeInfo文档知识库
CHAT:RECEIVER_CODE_KNOWLEDGE_LISTgetCodeKnowledgeInfo代码知识库
CHAT:RECEIVER_HISTORY_LIST历史记录
CHAT:SEND_OPEN_DIR_LISTgetOpenDirListInfo打开目录列表
CHAT:SEND_VALID_WEBSITE_RESULT网站验证结果
CHAT:CHOOSE_FILE选择文件
CHAT:GET_FEEDBACK_LIST反馈列表
CHAT_TALK:RECEIVER_RECOMMEND_GAMEPLAY推荐玩法
CODE_CHECK:GET_CODE_CHECK_LISTgetCodeSearchCodeList代码检查列表
CODE_CHECK:UPDATE_CODE_CHECK更新代码检查
CODE_REVIEW:RECEIVER_CODE_REVIEW代码评审结果
CODE_REVIEW:RECEIVER_CHANGE_RESULT变更结果
CODE_REVIEW:RECEIVER_PAGE_INIT页面初始化
CODE_SEARCH:GET_CODESEARCH_CODE_LISTgetCodeSearchCodeList代码搜索结果
CODE_SEARCH:GET_CODESEARCH_REPOSITORY_LISTgetCodeSearchRepositoryList仓库列表
CODE_SEARCH:GET_CODESEARCH_LANGUAGE_LISTgetCodeSearchLanguageList语言列表
COMMON:OPEN_PAGE打开页面
COMMON:PLUGIN_BASE_INFO插件基本信息
COMMON:SHOW_MESSAGE_IN_WEB显示消息
GIT:CODE_KNOWLEDGE_REPO_STATUS知识库状态
GIT:CODE_KNOWLEDGE_RE_INDEX知识库重建索引
GIT:REPO_AUTHORIZE仓库授权
GIT:STATUSGit 状态
LOGIN:GO_LOGIN前往登录
LOGIN:LOGIN_SUCCEEDreceiveLoginSuccess登录成功
LOGIN:RECEIVER_LOGIN_IFRAME_SRCreceiveLoginIframeSrc登录 iframe
SETTING:GET_CONFIGgetSettingInfo获取配置
SETTING:CHANGE_THEMEchangeTheme切换主题
SETTING:GET_CAN_OPEN_CODE_ENHANCE代码增强开关
SETTING:RECEIVE_REPO_STATUS仓库状态
SETTING:SEND_SHOW_OPERATE_GUIDANCEreceiveOperateGuideData操作引导
SQL_CHAT:GET_CONVERSATIONSQL 对话
SQL_CHAT:UPDATE_CONVERSATION_LISTSQL 对话列表
SQL_CHAT:RECEIVE_LINK_TEST连接测试
SQL_CHAT:RECEIVE_SAVE保存
SQL_CHAT:RECEIVE_SOURCE_LISTsqlReceiveSourceList数据源列表
SQL_CHAT:RECEIVE_SOURCE_TYPES数据源类型
SQL_CHAT:RECEIVE_TABLE_LIST表列表
SQL_CHAT:SOURCE_REFRESH_SAVE刷新保存
UNIT_TEST:FUNCTION_LIST函数列表
UNIT_TEST:GET_ALL_CODE_FILEreceiveSaveMessage获取代码文件
UNIT_TEST:GET_UT_INFOaddUTContent单测信息
UNIT_TEST:GET_METHOD_CASEreceiveClassCaseData方法用例
UNIT_TEST:GET_CASE_CODEreceiveCaseCode用例代码
BATCH_UNIT_TEST:GET_TASK_LIST批量单测任务列表
BATCH_UNIT_TEST:MESSAGE批量单测消息
BATCH_UNIT_TEST:REFRESH_TASK_DOWNLOAD_STATUS批量单测下载状态

5.4 JS→Java 消息发送

JS→Java 通过 sendMsgToIdea(type, value) 发送,type 为字符串常量。从源码分析发现,消息类型与 Java→JS 的类型命名规则一致(MODULE:ACTION 格式),但具体的 JS→Java 发送类型在 minified 代码中较难提取,因为函数名被压缩为变量引用。

6. 权限系统 (PermissionCodeEnum)

6.1 权限代码完整列表

权限代码频次说明
unitTest4单元测试
functionSplit4函数拆分
codeOptimization4代码优化
iFlyTest4iFlyTest 助理
iFlyDev4iFlyDev 助理
codeKnowledgeBase3代码知识库
iFlyDBA3iFlyDBA 助理
iFlyPm3iFlyPM 助理
iFlyOps3iFlyOps 助理
docComment2文档注释
inlineComment2行注释
codeExplain2代码解释
openInlineChat2内联聊天
sqlGenerate2SQL 生成
sqlOptimize2SQL 优化
iFlyMate2iFlyMate 助理
codeSearch1代码搜索
codeCheck1代码检查
batchUnitTest1批量单测
codeReview1代码评审
demandTest1需求测试
generateTestCase1测试用例生成
demandAnalysis1需求分析
demandSplit1需求拆分
chatSQLGeneration1SQL 对话生成
chatSQLOptimization1SQL 对话优化
failureAnalysis1故障分析
anomalyDetection1异常检测
focus1关注
knowledge1知识
currentOpenFile1当前打开文件
openFileList1打开文件列表
localRepo1本地仓库
docKnowledge1文档知识
codeKnowledge1代码知识
webSearch1网络搜索
webDoc1网络文档
database1数据库
directory1目录

6.2 实验开关 (ExperimentEnum)

开关说明
openFunctionSplit函数拆分功能
openCodeOptimization代码优化功能
openInlineChat内联聊天功能
openIFlyTestiFlyTest 助理
openIFlyDBAiFlyDBA 助理
openIFlyDeviFlyDev 助理
openIFlyPmiFlyPM 助理
openIFlyOpsiFlyOps 助理

6.3 聊天类型 (ChatTypeEnum)

类型说明
codeExplain代码解释
docComment文档注释
inlineComment行注释
functionSplit函数拆分
codeOptimization代码优化
unitTest单元测试
quickFix快速修复
demandTest需求测试
generateTestCase测试用例生成
demandAnalysis需求分析
demandSplit需求拆分
chatSQLGenerationSQL 生成
chatSQLOptimizationSQL 优化
helpDoc帮助文档
anomalyDetection异常检测
failureAnalysis故障分析
focus关注

6.4 聊天视图类型 (ChatViewTypeEnum)

类型说明
chat智能问答
sqlChatSQL 对话

6.5 SQL 聊天类型 (SqlChatTypeEnum)

类型说明
sqlGenerateSQL 生成
sqlOptimizeSQL 优化

6.6 IDE 类型 (IdeaEnum)

类型说明
IDEAIntelliJ IDEA
VSCODEVS Code
ECLIPSEEclipse

6.7 插件版本 (PluginSenseEnum)

类型说明
consumer消费者版
insider内部版

6.8 下拉菜单 (DropDownEnum)

类型说明
ASSISTANT助理选择

6.9 底部栏 (BarEnum)

类型说明
ToolBox工具箱
More更多
FeedBack反馈
NewChat新对话
Record历史

7. Element UI 组件使用

7.1 使用的 Element UI 组件 (70+)

类别组件
基础ElButton, ElButtonGroup, ElLink, ElIcon, ElTag
表单ElForm, ElFormItem, ElInput, ElInputNumber, ElSelect, ElOption, ElOptionGroup, ElRadio, ElRadioButton, ElRadioGroup, ElCheckbox, ElCheckboxButton, ElCheckboxGroup, ElSwitch, ElSlider, ElTimePicker, ElTimeSelect, ElDatePicker, ElUpload, ElUploadDrag, ElUploadList, ElCascader, ElCascaderPanel, ElCascaderMenu, ElColorPicker, ElTransfer, ElTransferPanel
数据ElTable, ElTableColumn, ElTableBody, ElTableHeader, ElTableFooter, ElTableRow, ElTableFilterPanel, ElPagination, ElPager, ElTree, ElTreeNode, ElStatistic, ElDescriptions, ElDescriptionsItem, ElDescriptionsRow
导航ElMenu, ElMenuItem, ElMenuItemGroup, ElSubmenu, ElTabs, ElTabPane, ElTabBar, ElTabNav, ElBreadcrumb, ElBreadcrumbItem, ElPageHeader, ElSteps, ElStep
通知ElAlert, ElDialog, ElDrawer, ElPopover, ElPopconfirm, ElTooltip, ElMessage
布局ElContainer, ElHeader, ElMain, ElAside, ElFooter, ElRow, ElCol, ElDivider
其他ElCard, ElCarousel, ElCarouselItem, ElCollapse, ElCollapseItem, ElTimeline, ElTimelineItem, ElProgress, ElSpinner, ElSkeleton, ElSkeletonItem, ElAvatar, ElBadge, ElBacktop, ElEmpty, ElResult, ElScrollbar, ElCalendar, ElImage, ElDropdown, ElDropdownMenu, ElDropdownItem, ElAutocomplete, ElRate

8. 中文 UI 字符串

8.1 导航与页面名称

字符串说明
主页首页
智能问答聊天页面
历史记录对话历史
代码搜索语义搜索
工具箱功能入口
代码检查代码质量
批量单测批量单元测试
代码评审Git 评审
登录登录页
设置配置页
关于版本信息
操作引导新手引导

8.2 助理名称

字符串说明
通用助理默认助理
iFlyDev助理 — 更懂工程和业务【企业版】开发助理
iFlyTest助理 — 更懂测试【企业版】测试助理
iFlyPM助理 — 更懂产品和需求【企业版】产品助理
iFlyOps助理 — 更懂运维【企业版】运维助理

8.3 设置项

字符串说明
开启代码生成增强代码增强开关
开启代码生成增强,会提高代码生成的准确性,但是可能会拉长生成时长增强说明
暂无可用代码知识库,请去知识管理平台添加知识库提示
开启代码补全提示补全开关
启用后,回车、停顿等操作均会触发代码补全;若关闭,可通过"Alt/Option + "手动触发代码补全补全说明
自定义停顿触发时间(单位:毫秒)停顿时间
聊天框发送消息按键配置发送按键
智能问答回复快捷键设置回复快捷键
行间快捷工具类型配置行间工具
编辑区沉浸式的功能入口样式设置沉浸式入口
开启函数注释快捷展示函数注释
开启行间注释快捷展示行注释
开启代码解释快捷展示代码解释
开启代码优化(Beta)快捷展示代码优化
开启单元测试快捷展示单元测试
开启函数拆分功能函数拆分
开启代码优化功能代码优化
开启inlineChat功能内联聊天
更新设置更新
自动更新新版本自动更新
知识库配置知识库
commit message配置Git 提交信息

8.4 通用 UI

字符串说明
确定确认按钮
取消取消按钮
清空清空
加载中加载状态
加载失败错误状态
暂无数据空状态
无匹配数据搜索无结果
请选择选择提示
提示提示标题
无权限!请登录后重试权限错误
新建对话新对话
更多更多选项
反馈反馈
SQL生成SQL 生成
SQL优化SQL 优化
单元测试单元测试
星火13B模型名称

8.5 SQL Chat 专用

字符串说明
切换数据库将清空已选数据表数据库切换提示
切换数据源将清空已选数据表数据源切换提示
当前代码库未建立索引知识库未索引
思考中AI 思考状态
思考过程思考过程展示
停止生成停止按钮
出错了错误提示
参考资料参考资料标题
向上滚动滚动按钮
向下滚动滚动按钮
展开展开
删除删除
刷新刷新
使用使用
已使用已使用
已选择已选择
引用引用
打开打开
信息收集信息收集

9. 关键发现

  1. Vue.js 2.7.14 而非 Vue 3: WebView 使用 Vue 2.7.14(兼容 Composition API),而非之前文档记录的 Vue 3。这是一个重要修正。

  2. 3 个 Pinia Stores 而非 7 个: 实际只有 chatcodeChecksql 三个 Pinia Store。Git Review、Code Search、Settings、Unit Test 可能使用 Vue 2 Options API 的本地状态。

  3. 三 IDE Bridge: 支持 IDEA、VSCode、Eclipse 三种 IDE 的 JS↔Java Bridge,每种 IDE 有不同的通信机制:

    • IDEA: window.myObject.sendMessage() + window.receiveData()
    • VSCode: vscode.postMessage() + window.addEventListener("message")
    • Eclipse: window.sendMessage() + window.receiveData()
  4. 50+ Java→JS 消息类型: 完整提取了 handlerReceivedMsg switch/case 中的所有消息类型,覆盖 CHAT、CODE_CHECK、CODE_REVIEW、CODE_SEARCH、COMMON、GIT、LOGIN、SETTING、SQL_CHAT、UNIT_TEST、BATCH_UNIT_TEST 共 11 个模块。

  5. 39 个权限代码: PermissionCodeEnum 包含 39 个权限值,覆盖所有功能模块和知识来源。

  6. 8 个实验开关: ExperimentEnum 控制 8 个功能的开关状态,说明部分功能是灰度发布。

  7. 17 个聊天类型: ChatTypeEnum 包含 17 种聊天类型,对应不同的 AI 功能。

  8. Element UI 70+ 组件: 使用了 Element UI 的 70+ 组件,覆盖表单、数据、导航、通知、布局等所有类别。

  9. Mermaid 20+ 图类型: 支持 architectureDiagram、blockDiagram、c4Diagram、flowDiagram、ganttDiagram、gitGraphDiagram、journeyDiagram、kanban、mindmap、pieDiagram、quadrantDiagram、requirementDiagram、sankeyDiagram、sequenceDiagram、stateDiagram、timeline、xychartDiagram 等 20+ 种图表。

  10. 156 个中文 UI 字符串: 提取了 156 个独特的中文 UI 字符串,覆盖导航、助理名称、设置项、通用 UI、SQL Chat 等领域。

  11. 5 个助理角色: 通用助理 + iFlyDev + iFlyTest + iFlyPM + iFlyOps,其中 4 个标注【企业版】。

  12. 模型名称 "星火13B": 确认了默认使用的 AI 模型是星火13B。

  13. Cody 源码泄露: 主 bundle 中包含 已脱敏 路径字符串,说明开发环境参考了 Sourcegraph Cody 的代码。

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