Repository navigation
Releases
v2.4.9
JSecProbe v2.4.9 更新内容
本次修复一个会造成现场证据丢失的缺陷:在「全局层面 / 关键证据点」上传的截图与附件,切换测评对象或页面再返回后界面显示为空;若随后继续编辑,引用会被写回数据库抹掉,严重时「孤儿文件清理」会删除磁盘原件。这类问题不报错、不崩溃,属于静默数据丢失,因此一并加固了上传落库时序与清理策略。
修复
-
修复:全局层面的证据上传后,切换页面 / 测评对象再回来就消失
现场核查页每次切换测评对象或重新进入页面都会重建整张表,重建时必须从数据库把该测评项的「证据清单」(
screenshot_paths)抄回来。资产视图一直是正常读库的,但「全局层面」视图重建行时把清单写死成空数组。于是出现一条逐步恶化的链条:- 全局层面上传 → 切走再回来 → 界面显示空(此时数据库与磁盘里的文件其实都还在);
- 此时只要再改动任意一格,自动保存按「空清单」写回数据库 → 引用被抹掉;
- 之后若执行设置页的「孤儿文件清理」,它发现这些文件没有任何记录引用,就会把原件删除 —— 这一步不可逆。
现已抽出共用的证据清单读回函数,全局视图与资产视图统一使用,杜绝「一处读、一处不读」再次发生。
-
修复:上传后立刻切页,可能还没来得及落库
证据上传与文本输入原本共用 1.5 秒自动保存防抖,上传完马上切换页面时容易丢失;且父组件处理上传事件时忽略了子组件回传的新行,用的是表格里的旧行标脏。现改为使用回传的新行,并把证据类改动的防抖窗口缩短到 300 毫秒。
-
修复:离开页面时若正在保存,最后一次改动被静默丢弃
卸载时如果恰好有一次自动保存正在进行,旧逻辑直接跳过本次 flush,脏标记随组件实例一起销毁。现改为标记「待补跑」,当前保存结束后再执行一次。
加固
- 设置页「孤儿文件清理」的孤儿判定增加 24 小时宽限:刚上传、或数据库引用因异常暂时缺失的证据文件不会被立即删除,避免「显示丢失」直接演变成「真丢」。
- 新增
src/views/onsite-verification/utils/screenshots.ts作为证据清单读回的唯一入口,并补齐历史脏 JSON 的降级处理。
质量保障
- 新增
tests/renderer/screenshots.test.ts(7 条用例),覆盖项目级 / 资产级读回必须一致、损坏 JSON 降级、空值与 null 等边界。 - 改写
useAutoSaveCore.test.ts的卸载竞态用例,断言「保存进行中卸载」会补跑而不是丢弃。 - 真机复核:修复后在「全局层面」上传截图与附件、反复切换安全域与测评对象、再正常关闭应用,数据库 5 条证据引用全部保留且均指向存在的物理文件,无新增孤儿文件;上传落库实测约 324 毫秒。
- 测试基线:6 个文件 70 个用例通过、1 个用例按环境跳过,退出码 0。
兼容性
数据库结构无变更,可直接覆盖升级。
注意:本次修复不会自动恢复历史上已被抹掉的引用。若此前遇到过证据消失,文件通常仍在数据目录的
screenshots/<项目ID>/<测评项ID>/或evidence/<项目ID>/<测评项ID>/下,可按目录名对应回测评项重新关联。在执行设置页「孤儿文件清理」前,请先备份这两个目录。
v2.4.8
JSecProbe v2.4.8 更新内容
本次修复了两个同根同源的地址拼接缺陷:它们都不会崩溃、不会弹错框,而是表现为「AI 已经配置好了,但就是不出结果」,是典型的静默失败。同时把 AI 请求地址的构造统一收口,避免同类问题再次出现。
修复
-
修复:本地 AI(Ollama)对话必定失败,提示「本地引擎请求失败(404)」
使用本地 Ollama 时,状态栏显示「AI 已配置」,但每次发送消息都失败。根因是「AI 智能辅助」的对话入口把地址拼成
{引擎地址}/v1就直接发起请求,缺少/chat/completions这一段;Ollama 对该路径只返回 Go 的默认 404 文本(404 page not found)。值得注意的是:AI 分析 / 结论 / 评估等其它功能走的是另一条路径(地址补全正确),报告生成更是直接使用 Ollama 原生接口——所以本地模型在除对话外的功能里一直是正常的,只有这一个入口受影响,这也是该问题长期未被发现的原因。
-
修复:报告生成的云端 AI 调用请求到不存在的端点
报告生成在云端模式下只补了
chat/completions、没有补版本段。由于保存配置时会把用户填写的/v1剥掉再入库,实际请求落在{域名}/chat/completions上,服务端返回 404 后被静默捕获并回退到内置模板——现象是「AI 报告没起作用,但也不报错」。
加固
- AI 请求地址构造统一收进
electron/services/ai-url.ts,作为全项目唯一入口;聊天、分析、报告生成不再各写一套拼接规则。 - 本地引擎地址做归一处理:把地址填成含
/v1、/chat/completions或带尾部斜杠的形式,都不会再拼出重复路径(如/v1/v1/chat/completions)。
质量保障
- 新增 4 条端点解析用例,覆盖默认地址、未配置回落、尾部斜杠与版本段的幂等性。
- 新增一条真机端到端用例:本机运行 Ollama 时,用真实模型跑通一次本地对话,断言返回 200 且内容非空;持续集成环境无 Ollama 时自动跳过。
- 测试基线:5 个文件 64 个用例,全部通过。
兼容性
数据库结构无变更,可直接覆盖升级。
说明:云端地址若指向内网自建服务,报告生成现在也会与聊天保持一致、受同一套 SSRF 防护约束;如确为内网部署,可设置环境变量
JSECPROBE_ALLOW_PRIVATE_API=1显式放行(会在日志中留痕)。
v2.4.7
JSecProbe v2.4.7 更新内容
本次是一个质量与稳定性版本:修复了一个会导致备份静默损坏的缺陷,为三条"坏了就丢数据、而且不会报错"的关键链路补齐了自动化测试,并完成了几项不改变功能的结构性优化。
修复
-
修复:备份加密中途失败会留下半个损坏的备份文件(静默数据损坏)
加密备份采用「先写
.enc-tmp临时文件、完成后再原子替换」的策略,以避免中途失败污染目标文件。但当加密过程中失败时(例如源文件缺失、读取出错),清理逻辑会尝试删除这个临时文件——而此时写入流仍持有文件句柄,Windows 下删除操作会因资源被占用而失败,该失败随后又被静默忽略,最终在磁盘上残留一个半个的.enc-tmp。这类残留物最危险的地方在于:它在备份列表里看得见,用户以为备份成功了,只有真正需要恢复时才会失败。现已改为先关闭写入流、释放句柄,再删除临时文件,确保任何失败路径都不会留下半成品。
-
修复:单元测试在本机无法稳定运行(开发侧)
Vitest 在本机环境下会因模块转换缓存写盘被拦截而以非 0 退出码结束,并随机跳过部分测试文件——这会让"改坏代码测试变红"这条最基本的保障失效。已定位到根因是缓存写盘路径与本机环境的兼容性问题,通过在模块加载期关闭该缓存解决;
npm test现在可稳定跑绿(5 个文件 59 个用例)。
质量保障
-
为三条关键链路补齐单元测试(共 5 个文件 59 个用例):
链路 覆盖要点 自动保存( useAutoSaveCore)脏数据兜底重试、停止之后不再触发、保存失败须保留数据 备份加解密 加密后明文 ZIP 必须删除、口令错误 / 密文篡改 / auth tag 篡改必须报错且不残留明文临时文件、相同明文两次加密的密文必须不同(salt / iv 每次随机) 内置标准与命令库入驻 seed 幂等性、数据版本一致时跳过加载 -
新增持续集成工作流:每次推送自动执行类型检查、版本号一致性检查、数据库结构漂移检查。
性能与体积
- 内置标准库与核查命令库由 TS 常量改为
*.seed.json惰性解析(standards.ts约 1.4 万行 → 99 行,commands.ts约 4 千行 → 39 行),源码总量约 8.6 万行降至约 6.6 万行,未使用到的数据不再进入启动路径。 - 七种采集连接器驱动改为动态 import 懒加载,未使用的数据库驱动不再随启动加载。
重构(无功能变更)
- 自动保存核心逻辑抽为
useAutoSaveCore,三个页面的 composable 共用同一套语义(编辑态与脏标记分离) - Markdown 渲染统一到
src/utils/markdown.ts(唯一入口),日期 / 时长格式化收进src/utils/format.ts - 项目内导航抽为
useProjectNav,项目下拉取数收进project-options - 路由守卫的登录态判断收敛到
useUserStore;4 处纯展示列表改用shallowRef
兼容性
数据库结构无变更,可直接覆盖升级;首次启动仍会自动备份数据文件。
v2.4.6
JSecProbe v2.4.6 更新内容
本次是一个紧急修复版本,解决 v2.4.2 ~ v2.4.5 用户下载更新成功但安装失败的问题。建议所有用户升级。
修复
-
修复:更新下载完成后提示「启动安装包失败」
根因是安装包缺少数字签名。安装前的 Authenticode 校验原逻辑为「非 Valid 一律拒绝」,而本项目目前没有代码签名证书,
Get-AuthenticodeSignature始终返回NotSigned,导致自管理更新源(GitCode / Cloudflare R2)下载来的安装包 100% 被拦截。现改为分级处置,只拦截真正意味着「文件被改动」的状态:
签名状态 处置 Valid/ValidButExpired(有签名,证书过期)放行(过期仅告警) NotSigned(未签名)放行并写告警日志 HashMismatch/NotTrusted/NotSignatureFound/Malformed/InvalidSignature/UnknownError拒绝执行 同时保留了两个开关:
JSECPROBE_REQUIRE_INSTALLER_SIGNATURE=1(将来拿到签名证书后强制校验)、JSECPROBE_SKIP_SIGNATURE_CHECK=1(排查时临时跳过)。 -
修复:需要管理员权限的安装包无法启动
安装包清单要求提权时,
CreateProcess无法完成 UAC 提升(错误ERROR_ELEVATION_REQUIRED,errno -740),原先直接判定失败。现自动改用ShellExecute(RunAs)路径,由系统正常弹出 UAC 窗口。 -
修复:安装失败提示过于笼统
原先无论何种原因都只显示一句「启动安装包失败,请稍后重试」。现在会把真实原因带出来(例如具体的签名状态、提权失败原因),便于一眼定位。
升级说明
重要:执行安装动作的是当前正在运行的旧版本客户端,因此本次修复无法直接拯救存量客户端。
- 若你在 v2.4.2 ~ v2.4.5 上已经遇到「启动安装包失败」:请先手动下载安装一次 v2.4.6(GitHub Releases / GitCode /
https://data.semove.ccwu.cc),此后的自动更新即恢复正常。 - 若暂时无法手动安装,可以设置环境变量
JSECPROBE_SKIP_SIGNATURE_CHECK=1后启动程序作为应急手段。
兼容性
数据库结构无变更,可直接覆盖升级;首次启动仍会自动备份数据文件。
v2.4.5
JSecProbe v2.4.5 更新内容
本次以编辑体验修复和上手引导重做为主,另含一批界面打磨。建议所有用户升级。
修复
- 项目列表:自动保存不再打断输入
原先点「编辑」即启动保存倒计时,且保存后整表重载,导致填到一半就被踢出编辑态。现拆分「编辑态」与「脏标记」为两个独立状态:倒计时从最后一次输入起算(8 秒),退出编辑时才收尾;保存后就地回写服务端字段,不再重建表格,编辑状态与后续输入都保留。 - 系统构成(资产台账):保存不再重排整表
原先每次保存都loadAssets()重载全部行,输入焦点与滚动位置丢失。现保存后只刷新分类统计与计数;新增行用创建接口返回体就地转为真实行。 - 保存往返瞬间的新输入不再被覆盖
名称、用途、备注等用户正在输入的字段一律以浏览器中的值为准,只回写id/updatedAt/progress等服务端计算字段。 - 保存失败的提示更准确
自动保存只清除成功落库的行,失败行保留脏标记由周期保存重试;手动保存区分「没有需要保存的修改」与「部分修改保存失败」,不再一律显示成功。
体验
- 新手引导按真实工作流重排
由原先绕着菜单介绍模块,改为 建项目 → 录资产 → 现场核查 → 问题汇总 → 出报告 的主线;支持键盘操作(← → 翻页、Enter 下一步、Esc 跳过)与焦点管理;播放进度可断点续播(超过 7 天或步骤变更则重新播放);完结页提供可直接下手的行动按钮;高亮目标改用data-guide锚点,不再依赖易重复的 CSS 类名。
全新环境尚无项目时,自动合并为「流程总览」并落到侧边栏,不会把用户推进空白页面。 - 三张核心页新增场景化首访提示
首次进入系统构成 / 现场核查 / 问题汇总时,给出该页操作要点的轻提示条,可关闭,各自独立记住;用户菜单中可随时「重置页面提示」。
界面
- 自动采集页命令列表改为卡片式布局,命令代码改为随内容收缩的内联代码片(等宽字体),点击卡片任意处即可勾选,选中卡片描边高亮。
- AI 智能辅助页 5 步进度条改为标准 stepper:圆点编号 + 连接线,完成步骤显示对勾、连接线转为蓝色;移除了原先无点击处理却显示手型的伪交互。
- 全局打磨:页面标题栏卡片化、统计卡样式统一、补全 CSS 设计变量(含 AI 主题色)、表格数字改为等宽对齐、多处深色主题配色修正。
兼容性
数据库结构无变更,v2.4.4 可直接覆盖升级;首次启动仍会自动备份数据文件。
v2.4.4
v2.4.4 更新内容
- chore: 发布 v2.4.4
- fix: 深色模式下现场核查表格扩展项分隔线颜色被覆盖失效
- feat(release): 新增 GitCode Release 脚本上传,补齐国内更新源自动化
- style: 侧边栏换用统一的 Lucide 风格线性图标
- fix: GitCode 源缺包时不再误用旧安装包,新增下载阶段自动换源重试
- feat: 恢复 GitCode 国内更新源,三源按可达性降级(GitCode -> GitHub -> R2)
本说明由 git log 自动生成。若需人工撰写,请添加
docs/releases/v2.4.4.md后重新发布。
v2.4.3
v2.4.3 更新内容
- chore: 发布 v2.4.3(项目列表显示修复、文档清理、发布脚本修复)
- fix: 操作列按钮不再垂直居中(td 误用 display:flex 脱离表格行布局)
- fix: 项目列表状态列被操作列遮挡;修复深色主题表格覆盖失效;清理审查类文档忽略规则;修复上传脚本 NaN 日志
- Delete tmp-gitpath.txt
- Delete docs/releases directory
- Delete docs/superpowers directory
- Delete docs/2026-09-17-自动采集执行引擎设计方案.md
- Delete docs/升级说明-用户视角-2026-09-19.md
本说明由 git log 自动生成。若需人工撰写,请添加
docs/releases/v2.4.3.md后重新发布。
v2.4.2
v2.4.2 更新内容
重要变更
- 项目导入 / 导出升级为整包归档:导出不再是只能看不能回导的 Excel,而是包含项目全部数据的 ZIP 归档 —— 项目本体与成员、资产台账与连接配置、测评记录、问题清单、采集任务/结果/文档、所引用的截图与证据文件,并随包携带项目依赖的测评标准与测评项。支持口令加密,导入时可先预览内容,再选择冲突处理:另存为副本(推荐)/ 覆盖 / 跳过。
- 导入后按真实数据重算项目的资产数与测评进度,不再沿用归档里的旧值。
- 仍可在导出对话框中切换为「表格清单(.xlsx)」,字段比以往更全(客户名称、测评师、起止日期、资产数、符合率等),但该格式不能导回。
问题修复
- 修复 AI 助手发消息长时间无响应:服务端 HTTP/2 长连接复用存在缺陷(同一连接的第 3 个请求起静默挂起),改为每次请求新建连接。
- 修复现场核查导入测评结果报「无法克隆对象」:响应式对象不能直接跨 IPC 传递。
- 修复现场核查表格每点击一次就变宽一点(行高测量累加)。
- 修复测评报告中的符合率恒为 0:改为读取实时计算结果。
- 老项目(未登记标准体系)的测评进度不再显示为 0。
一致性
- 现场核查页、问题清单页、测评报告的「符合率」统一为同一口径,统计时加入格内校验(全局项与资产项分别归位),两页数字不再打架。
安全
- 文件读取路径校验收口:仅放行「应用受管数据目录内」或「用户在对话框中亲手挑选过」的文件(登记表只记路径、不复制内容)。截图预览、截图上传、证据上传、知识库上传、AI 附件、导出附件等通道全部统一接入,堵住凭空构造路径读取任意文件的口子。
体验
- 页面切换过渡时长调优(离场 90ms / 入场 200ms),体感更轻快。
- 移除系统构成页无用的「新增资产」按钮。
- 批量 AI 分析使用原始附件路径,不再复制进数据目录,数据目录不会因此膨胀。
注意
- 导出归档时,设备连接口令默认不带走(密文与机器绑定,换机本就解不开)。若需同机完整恢复,请在导出时勾选该项。
- 归档包中的测评标准与测评项会随包导入;若本机已存在同名标准,导入时会给出告警。
v2.4.1
v2.4.1 更新内容
问题修复
- 修复现场核查「AI 智能推荐核查方法」弹窗手动关闭后按钮卡在「AI 分析中」的问题
- 修复数据库迁移 SQL 建表顺序,清理未登记孤儿迁移,迁移体系与运行时兜底保持一致
- 修复命令库种子重灌逻辑:按 id 判重,仅补充缺失命令,不再覆盖用户编辑
数据健壮性
- 删除项目/资产时级联清理采集任务、采集结果、连接配置等孤儿数据
- 统一 createdAt 为 UTC ISO 格式;补充采集/连接/命令库索引
- VACUUM INTO 备份路径单引号转义;迁移目录改为绝对路径
- system_settings 补齐 created_at 列兜底
安全加固
- Excel 解析库由 xlsx 替换为 exceljs(修复 CVE-2023-30533 / CVE-2024-22363),.xls 需另存为 .xlsx 后导入
- .env.example 敏感信息脱敏,移除真实 R2 账户信息
构建与发布
- latest.yml 自动补充 blockmap 字段,支持增量更新
- GitHub Releases 上传幂等,同名资产自动跳过
- 新增 npm run typecheck 脚本
v2.4.0
v2.4.0 更新内容
稳定性修复
- 自动采集任务异常逃逸至主进程导致应用崩溃/白屏的根因修复
- 采集任务执行链路 try/catch 兜底,采集失败不再触发应用级退出
- 数据库连接器(pg/mysql/mssql)挂接 error 兜底监听,避免 uncaughtException
- isTransientRejection 关键词补全(超时/econnreset),超时错误不再被误判为致命
- 路由过渡 mode="out-in" 多根组件兼容修复(自动采集页 el-dialog 移入根节点)
- 窗口后台节流关闭(setBackgroundThrottling(false)),最小化/遮挡时 rAF 仍运行
- 采集结果页签切换 / 命令明细展开在连接失败场景下的反馈修复
性能优化
- AI 本地引擎(Ollama/Herdsman)探测改为异步 execFile,消除主进程 execSync 阻塞
- 引擎安装状态 5 分钟缓存 + 验证安装 / 打开设置时 force 旁路
- PowerShell 探测强制 UTF-8 输出,修复中文路径下 herdsman 误报未安装
数据健壮性
- 启动备份 .bak-* 轮转保留最近 3 份,自动备份保留最近 10 份
- OCR 单张超时后终止旧 Worker,避免悬挂 Promise 阻塞后续识别
- 默认管理员 mustChangePassword=1,首次登录强制改密
- session.json token 用 safeStorage 加密 + 旧明文自动迁移
- 报告 / AI 密钥三处加密实现统一到 credential.util(兼容 enc:v1: 遗留)