ue-log-reader
DeepSeek Harness 插件:UE 日志速读卡 — 模型调用 uelog 工具扫描 Saved/Logs,流式解析+聚合去重后渲染速读卡片,一键复制缺陷单摘要
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 31, 2026
- Updated
- Aug 31, 2026
Introduction
ue-log-reader
DeepSeek Harness 插件:UE(Unreal Engine)日志速读卡。用户在对话中说「分析一下日志」「刚闪退了看看日志」,模型自动调用 uelog 工具扫描 UE 项目 Saved/Logs/ 下的日志(支持标准 UE 日志与 Android 真机 adb logcat 格式),流式解析 + 聚合去重后渲染成一张速读卡片,并提供一键复制的缺陷单摘要。
架构沿用 vizcb-codeblock-visualizer 已跑通的「Host 路由 + Client turnTail 卡片 + 提示词 section」三件套。
功能
uelog模型工具:扫描日志(显式文件或缺省最新),流式逐行解析(数百 MB 不爆内存,默认只解析尾部 200MB),按「类别 + 归一化消息」聚合去重(同一报错刷 N 遍 = 1 条 × N),提取崩溃原因 + 前 10 帧堆栈 + 引擎版本;返回 JSON 摘要给模型做文字回答- 速读卡(turnTail 槽位):文件头(名称/体积/时间跨度/版本)+ 统计色块(Fatal/Error/Ensure/Warn,点击筛选)+ Top 问题列表(悬停显示首条原文)+ 可折叠崩溃详情(等宽字体)
- 动作按钮:
复制缺陷摘要(生成纯文本缺陷单:版本/时间/崩溃/堆栈前 5 帧/高频问题)、打开日志目录(系统文件管理器定位) - 失败可见化:未找到日志 / 路径越界 / 解析失败等一律显示明确原因,绝不静默空白
- 安全:显式路径必须落在
projectRoot/logRoots内(resolve + 包含性校验,含 URL 编码变体);只读操作,不写不改日志目录;扫描限流 + 串行化 + 同路径在途去重;结果按「路径+mtime+size+maxBytes」缓存
前置条件
- DeepSeek Harness 桌面版 2.x(web profile 亦可),profile 的
dsh.profile.bundles已含@deepseek-ai/dsh-base与@deepseek-ai/dsh-web-app(默认即有) - 一个可写的 UE 项目根目录(含
Saved/Logs/) - 自测(可选)需要 Node.js 24+
安装
方式 A —— 一键安装脚本(推荐)
# 1. 获取源码(git clone / 下载 zip)
# 2. 在仓库根目录运行(复制插件 + 写入 bundles):
powershell -ExecutionPolicy Bypass -File install-uelog.ps1
# 其他 profile:
powershell -ExecutionPolicy Bypass -File install-uelog.ps1 -ProfileName web
# 3. 重启 DeepSeek Harness
方式 B —— 手动复制
- 把
ue-log-reader目录复制到目标 profile 的node_modules/ - 在 profile 的
package.json的dsh.profile.bundles追加"ue-log-reader" - 重启
方式 C —— 作为 npm/git 依赖安装
在目标 profile 的 package.json 中加入依赖并注册 bundle(随后 pnpm install):
{
"dependencies": {
"ue-log-reader": "github:Reseezhang/ue-log-reader"
},
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "ue-log-reader"]
}
}
}
本插件零运行时依赖:解析用 Node 内置模块,
@deepseek-ai/dsh-tools由宿主 profile 提供,无需 npm install。
配置
默认值见 lib/index.js 的 DEFAULTS。在 profile 级 cordis.patch.yml 按 id 覆盖:
- id: ue-log-reader
config:
projectRoot: "D:/Projects/MyGame" # UE 项目根目录(必配;缺省退回工作区根)
logRoots: [] # 额外允许的日志根目录(如 adb pull 拉取的真机日志目录)
maxBytes: 209715200 # 单文件扫描上限(默认 200MB,超过只解析尾部)
maxTopIssues: 15 # Top 问题列表上限
scanRateMax: 6 # 扫描全局限流(10s 窗口内最大次数)
retryDelayMs: 2000 # 客户端卡片重试间隔
使用
- 重启 DeepSeek Harness
- 在对话里说「分析一下日志」或「刚闪退了,看看日志」
- 模型调用
uelog工具(未指定文件时扫<projectRoot>/Saved/Logs/最新日志;只有-backup-历史日志时自动选最新历史日志并标注「历史日志」) - 速读卡出现在消息下方:统计色块点击筛选、崩溃详情可展开、
复制缺陷摘要一键生成缺陷单文本、打开日志目录定位文件 - 文字回复里模型只给结论与建议(最可能的根因、建议提交人),不贴长堆栈;要写缺陷单时点卡片上的「复制缺陷摘要」按钮
真机日志(Android adb logcat)
插件自动识别 logcat 格式(threadtime/time/brief/raw 变体,含 ANSI 颜色码),UE 日志行(LogNet: Warning: ...)按 UE 级别解析,非 UE 行按 logcat 优先级分级(F→Fatal / E→Error / W→Warning),并支持 Fatal signal 崩溃块(#00 pc 0x... 堆栈帧,取前 10 帧)。
- 抓取真机日志到文件(任选其一):
adb logcat -d > device.log # 导出当前缓冲区后退出(推荐) adb logcat > device.log # 实时重定向,Ctrl+C 停止 - 把文件放到
<projectRoot>/Saved/Logs/下,或配置logRoots指向的目录,文件名以.log结尾 - 对话里说「分析一下日志」→ 自动扫最新日志(卡片头会标注 logcat 徽标表示真机格式)
- 也可直接说「分析一下 D:/任意位置/device.log」传显式绝对路径——默认要求位于 projectRoot/logRoots 内;真机 log 常在 Saved/Logs 之外,开启
allowAnyPath: true后任意位置的绝对路径均可(相对路径仍受包含性约束,防../穿越)
提示:真机 release 包崩溃堆栈是内存地址(
libUE4.so + 0x...),符号化(转成函数名)需要匹配构建的 .so/dSYM 符号表,属二期能力,当前显示地址帧。仓库自带
samples/device-sample.logcat.log样例(含 UE 行嵌入/聚合去重/Fatal signal 崩溃),可复制到 Saved/Logs 快速验证 logcat 路径。
路由
| 路由 | 说明 |
|---|---|
POST /uelog/scan | { file?, maxBytes? } → 摘要 JSON(缓存/限流/在途去重) |
POST /uelog/turn | { sessionId, seq } → 从会话事件取本次 uelog 调用参数+结果(卡片数据源) |
POST /uelog/reveal | { path } → 系统文件管理器定位 |
GET /uelog/debug | 自检状态 |
自测
node --test
解析单测(11 例)+ 宿主集成测试(8 例)。集成测试需要插件已安装到本机 desktop profile,否则自动跳过。
卸载
删掉 profile package.json bundles 里的 ue-log-reader 条目 + 删除插件目录 + 重启。
相关项目
- vizcb-codeblock-visualizer —— 把模型输出的 svg/html/mermaid 渲染为图表卡片 + present-files 文件预览(本插件的架构母版)