Skip to content

v0.4.0 后台运行:托盘驻留、定时回归与通知汇报

Choose a tag to compare

@yxpil yxpil released this 24 Oct 08:50
· 10 commits to main since this release

本版重点:关掉窗口它还在跑,跑完主动告诉你结果

v0.3.0 解决了"给别人用、给 AI 用";这一版解决"人不在电脑前也要跑、跑完要知道"。(Postman 的 B3/B4 顺延为 v0.5.0/v0.6.0,见 23 号文档 §2。)

定时回归任务(12 号文档)

  • 三种触发:cron(5 段或 6 段,本机时区,自实现解析零依赖)、固定间隔(epoch 对齐,不随触发累加漂移)、单次定时。编辑器实时给出未来 5 次触发时间,非法表达式就地给中文原因(0 9 * * 1-5、*/15 * * * *、0 0 13 * 5 的"日或周"并集语义都按 Vixie cron 走)。
  • 必须锁环境:没选环境或环境不属于目标项目,直接拒绝保存 —— 定时回归跟着界面当前激活环境跑是最常见的事故源。
  • 重叠策略:skip(上次未完就跳过)/ queue(排队,上限 3,再多丢弃)/ parallel。
  • 错过补跑:应用没运行错过的触发点,启动时按策略只补最近一次并发 warn 通知「错过 N 次,已补跑最近一次」,或整体跳过;单次任务跑完自动停用;目标被删除时任务自动停用并留一条 error 通知,不会每秒重复失败。
  • 时钟可信:到期判定用单调时钟(process.hrtime),把系统时间往前拨不会提前触发、往后拨不会重复触发;库里的排期与内存不一致(界面编辑过、或另一个实例改过同一库)会自动重新对齐。
  • 目标范围支持集合 / 项目 / 单接口,等价一次 runner:start,结果照常进 runner_run 与历史。案例、MD 文档测试与动作宏尚未落地(文档 §6 明确标注未实现)。

通知体系(15 号文档)

  • 事件源:Runner 完成(默认集合:2/2 通过)、stopOnFail 中止(error)、定时任务完成、misfire 补跑、外部调用异常、DB 错误。定时任务触发的运行不会再补一条 Runner 通知,一次运行只汇报一次。
  • 五通道:应用内 Toast(error 需手动关)、通知中心(不可关,底栏铃铛 + 未读角标 99+ 封顶 + 320px 右侧抽屉,按今天/昨天/更早分组、按类型筛选、点条目跳到那次运行或任务)、OS 原生通知(只在窗口失焦或收进托盘时发,前台不打扰)、声音(映射为 OS 通知的非静默,勿扰交给系统)、Webhook(raw / 企业微信 / 钉钉 / 飞书四种模板)。
  • 防轰炸:相同事件同源 60s 内合并成一条并累计 ×N;Webhook 每地址每分钟最多 6 条,超出丢弃;定时任务默认只在结果翻转(成功↔失败)时通知,可切"每次都发"。
  • 脱敏:secret 变量值在标题、正文、OS 通知与 Webhook 载荷里一律 ***;Webhook 地址按敏感配置掩码显示,只接受 http(s)。

系统托盘

  • 「关闭窗口时最小化到托盘」默认开:关窗只隐藏不退出,定时任务在后台按计划继续跑;托盘图标在有待处理 error 未读时位图叠加红点(非 emoji)。
  • 托盘菜单:打开主窗口、最近 3 条通知摘要、立即运行任务子菜单、退出。关掉该设置后,标题栏关闭即真退出。

报告导出(顺带补上 07 号文档欠的 runner:report)

  • runner:report {runId, format:'json'|'junit'|'html', filePath?} 复用 CLI 的渲染器;不给路径就写到 userData/reports/集合名-时间戳.后缀,自定义路径后缀与格式不符时自动补正确后缀。
  • 定时任务可选"每次落报告",报告绝对路径直接写进通知正文(真机验证:报告:C:\...\reports\默认集合-20261024-163923.json)。

界面

  • 右侧面板新增「任务」档;底栏右侧铃铛 + 未读角标;通知设置对话框是 6 事件 × 4 通道矩阵 + 托盘/状态变化开关 + Webhook 配置与连通性测试。
  • 命令面板新增:显示定时任务面板、打开通知中心、通知设置。
  • 任务编辑器里可直接「新建环境」——定时任务必须锁环境,不能逼用户先去导 Postman 环境。

验证(全部实跑,不是声明)

  • npm run gate 全绿:typecheck ×2、eslint、prettier、check-channels、25 个测试文件 / 253 个用例(较 v0.3.0 的 21 文件 / 200 用例新增 53 例)。
  • 契约面从 48 个 invoke 通道 + 4 个事件扩到 62 个 invoke + 6 个事件;DB 迁移到 006_schedule_notify。
  • 新增用例:tests/unit/schedule/cron.test.ts(13)、tests/integration/schedule/scheduler.test.ts(12,桩 Runner 精确驱动 overlap/queue 上限/misfire/单调时钟)、tests/integration/schedule/tasks.test.ts(10,真实 Runner + 真实靶场 + 报告落盘)、tests/integration/notify/channels.test.ts(18,注入 desktop 桩与 fetch 桩验证通道矩阵、合并、限流、脱敏、1000 条环形清理)。
  • npm run verify:flow 真机两轮全绿(exit 0,两轮 console 错误数均为 0):新建任务 → cron 预览 5 次 → 非法表达式报错 → 就地建环境 → 保存 → 立即运行 → Toast「每小时冒烟:2/2 通过」→ 通知中心条目含通过率与报告路径 → 点条目跳 Runner → 全部已读角标消失;第二轮验证关窗收进托盘(进程存活 + 页面转后台)→ 关掉托盘设置后关窗真退出。
  • 安装包冒烟:out/win-unpacked/ToAPI.exe 启动 → 迁移到 schema 6 → 握手 v0.4.0 → 无托盘创建失败日志 → verdict: PASS(SVG 图标 13、DOM 内 emoji 0、pageErrors 0)。

尚未做(不装)

  • 动作宏录制与回放、系统级唤醒(任务计划程序 / launchd / systemd timer,即"应用完全退出也跑")。
  • 压测与宏相关的事件类型暂不进订阅矩阵,等对应功能落地再注册。