Skip to content

1. WebView 前端加密逻辑

1.1 前端加密: 完全不存在

对 WebView 所有 JS 文件进行穷举搜索,关键词覆盖: encrypt, decrypt, crypto, RSA, AES, SM4, MD5, btoa, atob, CryptoJS, sm-crypto, sm2, sm3, cipher, base64

结论: WebView 前端不执行任何加密操作。

  • 无加密库导入 (无 CryptoJS, sm-crypto, forge, etc.)
  • btoa/atob Base64 编码调用
  • 无哈希函数调用
  • 密码字段 (SQL 数据库连接密码) 以明文通过 JS Bridge 发送
  • Git Token 以明文通过 JS Bridge 发送
  • 登录流程使用浏览器重定向 (非 WebView 内表单提交), 密码不经过 WebView

1.2 前端安全机制

机制实现说明
HTML 净化DOMPurify防止 XSS, 用于 Mermaid 图表渲染
输入验证Element UI 表单验证前端表单校验 (非安全目的)
权限控制PermissionCodeEnumUI 展示控制, 非安全强制
传输安全依赖 JCEF 沙箱JS Bridge 通信无加密

1.3 敏感数据在前端的明文暴露

数据类型位置传输方式加密
SQL 数据库密码index-3c7ef179.jsSQL_CHAT:SQL_LINK_TEST / SQL_CHAT:SQL_SAVE
Git 访问令牌index-4639cb2d.jsGIT:SAVE_TOKEN
用户聊天输入sendMsgMode-8b767ec0.jsCHAT:SEND_MSG
AI 生成的代码(响应)CHAT:GET_CONVERSATION

2. 八大功能模块完整协议链路

2.1 Chat 对话

完整数据流

用户输入文本


Vue 组件 (ChatInput) ─── sendMsgHandler()
  │  构建 sendMsgData = {
  │    inputText: 用户输入,
  │    type: "TALK:INTELLIGENT" | command,
  │    intelligent: [{type:"command", value:"code_explain"}, ...],
  │    sessionId: 当前会话ID,
  │    knowledge: 知识库引用,
  │    relatedFiles: 相关文件,
  │    code: 选中代码
  │  }


sendMsgToIdea("CHAT:SEND_MSG", sendMsgData)


ideaUtil: window.myObject.sendMessage(JSON.stringify({type: "CHAT:SEND_MSG", value: sendMsgData}))


Java WebViewWindowPanel.handleRequest(json)
  │  解析 JSON → module="CHAT", command="SEND_MSG"
  │  路由到 ChatService.handleSendMsg()


Java ChatService
  │  构建 MessageDto:
  │  {
  │    id: UUID,
  │    command: "talk_intelligent",  // CommandEnum
  │    stream: true,
  │    timeStamp: 毫秒时间戳,
  │    path: 当前文件路径,
  │    lang: 文件语言,
  │    content: 选中代码/文件内容,
  │    sessionId: 会话ID,
  │    modelCode: AI模型代码,
  │    permissionCode: "talk_intelligent",
  │    intelligent: [{type:"command", value:"code_explain"}, ...],
  │    knowledge: 知识库引用,
  │    relatedFiles: 相关文件,
  │    md5: 文件MD5
  │  }


PluginWebsocketClient.sendWsMessage(MessageDto, Project)
  │  → AGENT_REQUEST.put(id, message)  // 请求追踪
  │  → new Gson().toJson(message)
  │  → webSocket.send(json)


Agent (Node.js) 接收 WebSocket 消息
  │  → ChatService.chat(message, sendConfig, options)
  │  → getSendData(): 构建 API 请求数据
  │    - 合并 baseData (requestId, modelCode, enterpriseId, token, language, ...)
  │    - 合并用户消息 (message, sessionId, intelligent, knowledge, ...)
  │  → _getSSEHandler(): 创建 SSE 流处理器


Agent → 星火 API (HTTP SSE)
  │  POST /api/starspark/v1/agent/chat/async/ask
  │  Headers: { access-token: userToken }
  │  Body: { requestId, modelCode, message, sessionId, ... }


星火 API 返回 SSE 流
  │  data: {"text": "生成的文本片段1", "ended": false}
  │  data: {"text": "片段2", "ended": false}
  │  ...
  │  data: {"text": "最后片段", "ended": true}


Agent SSE Handler 处理每个 chunk
  │  → sendWSMessage(ws, responseData, requestId)
  │  → WebSocket 发送 ResponseStreamDto:
  │    {
  │      id: 原始请求ID,
  │      code: "0",
  │      data: { ended: false, text: "增量文本" }
  │    }


Java PluginWebsocketListener.onMessage(json)
  │  → SocketMessageListener.onMessage()
  │  → 按 module="CHAT" 路由到 ChatService.handleMessage()
  │  → 解析 streamStep / streamEnd


Java → WebView 推送
  │  WebViewWindowPanel.sendMessage2webView(type, data)
  │  → CefBrowser.executeJavaScript("window.receiveData({type, value})")


JS handlerReceivedMsg(type, value)
  │  case "CHAT:GET_CONVERSATION" → messageHandler.getConversation(value)
  │  case "CHAT:UPDATE_CONVERSATION_LIST" → messageHandler.updateConversationList(value)


Vue Pinia Store (chatStore) 更新
  │  → Vue 响应式系统触发
  │  → UI 重新渲染 (消息气泡、代码块、Mermaid 图表)

关键参数

参数说明
CommandEnumtalk_intelligent智能对话命令
WebSocket 方向Java → Agent请求
Agent API/api/starspark/v1/agent/chat/async/ask异步流式
响应模式SSE (Server-Sent Events)流式增量
加密明文传输

2.2 CodeCheck 代码检查

完整数据流

用户触发代码检查 (点击按钮 / 保存文件)


Vue 组件 (CodeCheckView)
  │  sendMsgToIdea("CODE_CHECK:REQUEST_CODE_CHECK_LIST")


Java CodeCheckService
  │  → 构建 MessageDto { command: "code_check", ... }
  │  → WebSocket 发送给 Agent


Agent ChatService.chat()
  │  → POST /api/starspark/v1/agent/chat/async/ask
  │  (command 映射为 code_check 场景)


星火 API 返回检查结果 (SSE)


Agent → Java (WebSocket): streamStep 消息


Java → WebView: "CODE_CHECK:UPDATE_CODE_CHECK" / "CODE_CHECK:GET_CODE_CHECK_LIST"


Vue codeCheckStore 更新 → UI 展示问题列表

修复操作

用户点击 "修复" 按钮
  → sendMsgToIdea("CODE_CHECK:FIX", { issueId, fixCode })
  → Java CodeCheckService → Agent → API
  → 返回修复代码 → Java → DiffDialog 展示
  → 用户确认 → 应用代码修改

关键参数

参数说明
CommandEnumcode_check代码检查命令
Agent API/api/starspark/v1/agent/chat/async/ask复用 Chat API
JS→Java 消息CODE_CHECK:REQUEST_CODE_CHECK_LIST, CODE_CHECK:FIX
Java→JS 消息CODE_CHECK:GET_CODE_CHECK_LIST, CODE_CHECK:UPDATE_CODE_CHECK
加密明文传输

2.3 CodeComplete 代码补全

完整数据流

用户在编辑器中输入 / 停顿


Java EditorManagerService (DocumentListener)
  │  检测停顿时间 > 阈值 (默认 200ms)
  │  或用户按 Alt/Option + \ 手动触发


Java CodeCompleteService
  │  → 构建 MessageDto {
  │      command: "code_complete",
  │      path: 当前文件路径,
  │      lang: 文件语言,
  │      content: 文件完整内容,
  │      range: [光标位置],
  │      docChangeCount: 文档修改计数,
  │      md5: 文件内容MD5
  │    }
  │  → WebSocket 发送给 Agent


Agent CodeService.codeComplete()
  │  → POST /api/starspark/v1/platform/code/assist
  │  Body: { code, language, cursorPosition, ... }


星火 API 返回补全建议 (非流式)
  │  { suggestions: [{text: "补全代码", score: 0.95}, ...] }


Agent → Java (WebSocket): ResponseDto


Java → Inlay 渲染
  │  PluginEditorInlayHintsProvider 渲染灰色补全提示
  │  用户按 Tab 接受 / Esc 拒绝


(无 WebView 参与 — 纯 Java UI 渲染)

关键参数

参数说明
CommandEnumcode_complete代码补全命令
Agent API/api/starspark/v1/platform/code/assist补全专用 API
响应模式同步 (非流式)一次性返回
WebView不参与纯 IntelliJ Inlay 渲染
加密明文传输, 含完整文件内容

2.4 InlineChat 行内对话

完整数据流

用户选中代码 + 触发 InlineChat (快捷键 / 右键菜单)


Java InlineChatCommandService
  │  → InlineChatPanel 显示在编辑器行内
  │  → 用户输入指令 (如 "解释这段代码", "优化", "添加注释")


Java InlineChatInputPanel → 用户按 Enter
  │  → 构建 MessageDto {
  │      command: "dialog_edit",
  │      content: 选中代码,
  │      range: 代码范围,
  │      path: 文件路径,
  │      data: { inputText: 用户指令, directName: 分类名 }
  │    }
  │  → WebSocket 发送给 Agent


Agent ChatService.chat()
  │  → POST /api/starspark/v1/agent/chat/inline/chat
  │  Body: { message, code, range, ... }


星火 API 返回 SSE 流


Agent → Java (WebSocket): streamStep 消息


Java → InlineChatPanel 更新
  │  → 实时显示 AI 生成的代码
  │  → 生成完成后展示 Accept/Reject/Diff 按钮


用户点击 Accept
  │  → Java 应用代码修改到编辑器
  │  → 或展示 DiffDialog 供用户确认

关键参数

参数说明
CommandEnumdialog_edit行内对话编辑命令
Agent API/api/starspark/v1/agent/chat/inline/chat行内对话专用
响应模式SSE 流式实时更新
WebView不参与纯 IntelliJ JPanel 渲染
加密明文传输, 含选中代码

2.5 SQL SQL助手

完整数据流

用户在 SQL 页面输入问题


Vue 组件 (SqlChatInput)
  │  构建 sendMsgData = {
  │    intelligent: [{type:"command", value:"sql_generate"}],
  │    params: { sqlInfo: { sourceId, database, tables, ... } }
  │  }
  │  sendMsgToIdea("SQL_CHAT:SEND_MSG", sendMsgData)


Java SqlService
  │  → 构建 MessageDto {
  │      command: "sql_generate_talk",
  │      sessionId: SQL会话ID,
  │      data: { sqlInfo: { sourceId, database, ... } }
  │    }
  │  → WebSocket 发送给 Agent


Agent SqlService + ChatService
  │  → POST /api/starspark/v1/agent/chat/generateSql (生成)
  │  → POST /api/starspark/v1/agent/chat/optimizeSql (优化)
  │  Headers: { access-token: userToken }


星火 API 返回 SSE 流 (SQL 语句 + 解释)


Agent → Java (WebSocket): streamStep


Java → WebView: "SQL_CHAT:GET_CONVERSATION" / "SQL_CHAT:UPDATE_CONVERSATION_LIST"


Vue sqlStore 更新 → UI 展示 SQL 结果

数据源管理 (含密码)

用户配置数据库连接
  │  填写: host, port, user, password, database


sendMsgToIdea("SQL_CHAT:SQL_LINK_TEST", {
  client: 数据库类型,
  host, port, user, password, database
})
  │  ⚠️ password 明文传输!


Java SqlService → WebSocket → Agent SqlService
  │  → Agent 使用 knex.js 建立数据库连接
  │  → 执行测试查询


Agent → Java: "SQL_CHAT:RECEIVE_LINK_TEST" (成功/失败)

关键参数

参数说明
CommandEnumsql_generate_talk / sql_optimize_talkSQL 生成/优化
Agent API/api/starspark/v1/agent/chat/generateSql生成
Agent API/api/starspark/v1/agent/chat/optimizeSql优化
JS→Java 消息SQL_CHAT:SEND_MSG, SQL_CHAT:SQL_LINK_TEST, SQL_CHAT:SQL_SAVE, SQL_CHAT:SOURCE_LIST, SQL_CHAT:TABLE_LIST, SQL_CHAT:SOURCE_DELETE
Java→JS 消息SQL_CHAT:RECEIVE_SOURCE_TYPES, SQL_CHAT:RECEIVE_LINK_TEST, SQL_CHAT:RECEIVE_SAVE, SQL_CHAT:RECEIVE_SOURCE_LIST, SQL_CHAT:RECEIVE_TABLE_LIST, SQL_CHAT:GET_CONVERSATION, SQL_CHAT:UPDATE_CONVERSATION_LIST
加密⚠️ 数据库密码明文传输

2.6 GitReview Git审查

完整数据流

用户触发代码评审 (Git Diff 视图)


Vue 组件 (CodeReviewView)
  │  sendMsgToIdea("CODE_REVIEW:PAGE_READY", null)
  │  sendMsgToIdea("CODE_REVIEW:GET_CODEREVIEW_LIST", { path: diff目录 })


Java GitReviewService
  │  → 获取 Git Diff 内容
  │  → 构建 MessageDto {
  │      command: "git_review",
  │      content: diff内容,
  │      path: 文件路径
  │    }
  │  → WebSocket 发送给 Agent


Agent ChatService.chat()
  │  → POST /api/starspark/v1/agent/chat/review
  │  Body: { diff, path, ... }


星火 API 返回评审结果 (SSE)


Agent → Java (WebSocket): streamStep


Java → WebView: "CODE_REVIEW:RECEIVER_CODE_REVIEW"


Vue 更新 → 展示评审结果列表

变更结果查看

用户点击查看变更
  → sendMsgToIdea("CODE_REVIEW:GET_CHANGE_RESULT", { filePath, changeId })
  → Java → Agent → API
  → 返回变更代码
  → Java → WebView: "CODE_REVIEW:RECEIVER_CHANGE_RESULT"
  → 展示 Diff 视图

用户点击结束
  → sendMsgToIdea("CODE_REVIEW:GET_CHANGE_RESULT_END", true)

关键参数

参数说明
CommandEnumgit_review / git_diff评审/Diff
Agent API/api/starspark/v1/agent/chat/review评审专用
JS→Java 消息CODE_REVIEW:PAGE_READY, CODE_REVIEW:GET_CODEREVIEW_LIST, CODE_REVIEW:GET_CHANGE_RESULT, CODE_REVIEW:GET_CHANGE_RESULT_END
Java→JS 消息CODE_REVIEW:RECEIVER_PAGE_INIT, CODE_REVIEW:RECEIVER_CODE_REVIEW, CODE_REVIEW:RECEIVER_CHANGE_RESULT
加密明文传输, 含 Git Diff

2.7 CodeSearch 代码搜索

完整数据流

用户在代码搜索页面输入查询


Vue 组件 (CodeSearchView)
  │  sendMsgToIdea("CODE_SEARCH:REQUEST_CODESEARCH_CODE_LIST", { query, repo, language })


Java CodeSearchService
  │  → 构建 MessageDto {
  │      command: "git_search",
  │      data: { query, repo, language }
  │    }
  │  → WebSocket 发送给 Agent


Agent RagService
  │  → POST /api/ragserver/v1/code/search (RAG 语义搜索)
  │  或 POST /restapi/ragserver/v1/code/searchInRepo (仓库内搜索)
  │  Headers: { access-token: userToken }


RAG 服务返回搜索结果
  │  { results: [{ filePath, line, content, score }, ...] }


Agent → Java (WebSocket): ResponseDto


Java → WebView: "CODE_SEARCH:GET_CODESEARCH_CODE_LIST"


Vue 更新 → 展示搜索结果列表

仓库/语言列表

初始化:
  → sendMsgToIdea("CODE_SEARCH:REQUEST_CODESEARCH_REPOSITORY_LIST")
  → Java → Agent → POST /api/ragserver/v1/code/getUserRepos
  → 返回 → "CODE_SEARCH:GET_CODESEARCH_REPOSITORY_LIST"

  → sendMsgToIdea("CODE_SEARCH:REQUEST_CODESEARCH_LANGUAGE_LIST")
  → Java → Agent → POST /api/ragserver/v1/code/getLanguages
  → 返回 → "CODE_SEARCH:GET_CODESEARCH_LANGUAGE_LIST"

关键参数

参数说明
CommandEnumgit_search代码搜索命令
Agent API/api/ragserver/v1/code/searchRAG 语义搜索
Agent API/restapi/ragserver/v1/code/searchInRepo仓库内搜索
JS→Java 消息CODE_SEARCH:REQUEST_CODESEARCH_CODE_LIST, CODE_SEARCH:REQUEST_CODESEARCH_REPOSITORY_LIST, CODE_SEARCH:REQUEST_CODESEARCH_LANGUAGE_LIST
Java→JS 消息CODE_SEARCH:GET_CODESEARCH_CODE_LIST, CODE_SEARCH:GET_CODESEARCH_REPOSITORY_LIST, CODE_SEARCH:GET_CODESEARCH_LANGUAGE_LIST
加密明文传输

2.8 UnitTest 单元测试

完整数据流

用户触发单元测试生成 (右键菜单 / 快捷键)


Vue 组件 (UnitTestView)
  │  sendMsgToIdea("UNIT_TEST:PAGE_READY")
  │  sendMsgToIdea("UNIT_TEST:FUNCTION_CASE", { filePath, className, methodName })


Java UnitTestService
  │  → 构建 MessageDto {
  │      command: "code_test",
  │      path: 文件路径,
  │      content: 文件内容,
  │      range: 方法范围
  │    }
  │  → WebSocket 发送给 Agent


Agent TestService
  │  → POST /api/starspark/v1/agent/code/generateUnitTest (生成测试代码)
  │  → POST /api/starspark/v1/agent/code/generateUnitTestCaseTemplate (生成测试模板)
  │  Headers: { access-token: userToken }


星火 API 返回测试代码 (SSE)


Agent → Java (WebSocket): streamStep


Java → WebView: "UNIT_TEST:GET_UT_INFO" / "UNIT_TEST:GET_METHOD_CASE"


Vue 更新 → 展示生成的测试代码

测试代码保存

用户点击保存
  → sendMsgToIdea("UNIT_TEST:SAVE_CODE", { filePath, testCode })
  → Java → 创建/写入测试文件到项目

批量单元测试

用户触发批量测试
  → sendMsgToIdea("BATCH_UNIT_TEST:CREATE", { filePaths, options })
  → Java → Agent → POST /restapi/unit/v1/createUnitTask
  → 异步生成, 轮询状态:
    → sendMsgToIdea("BATCH_UNIT_TEST:GET_LIST")
    → "BATCH_UNIT_TEST:GET_TASK_LIST" / "BATCH_UNIT_TEST:MESSAGE"
  → 下载:
    → sendMsgToIdea("BATCH_UNIT_TEST:DOWNLOAD", taskId)
    → Agent → /restapi/unit/v1/exportByTaskId

关键参数

参数说明
CommandEnumcode_test / code_test_template单测生成
Agent API/api/starspark/v1/agent/code/generateUnitTest生成测试代码
Agent API/api/starspark/v1/agent/code/generateUnitTestCaseTemplate生成测试模板
Agent API/restapi/unit/v1/createUnitTask批量单测
JS→Java 消息UNIT_TEST:PAGE_READY, UNIT_TEST:FUNCTION_CASE, UNIT_TEST:FUNCTION_CASE_CODE, UNIT_TEST:SAVE_CODE, UNIT_TEST:REGENERATE, UNIT_TESTING:MAPPING_FILE
Java→JS 消息UNIT_TEST:GET_UT_INFO, UNIT_TEST:GET_METHOD_CASE, UNIT_TEST:GET_CASE_CODE, UNIT_TEST:GET_ALL_CODE_FILE, UNIT_TEST:FUNCTION_LIST, UNIT_TEST:RECEIVE_FUNCTION_CASE, UNIT_TEST:RECEIVE_FUNCTION_CASE_CODE
加密明文传输

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