Repository navigation
Releases
Run Shelf 1.6.0
Run Shelf 1.6.0 增加排队补跑、运行优先级和任意时长超时,适合需要串行跑满长时间窗口的任务。
主要变化:
- 「上次未结束」新增「排队补跑」:到点时上一次还在运行,不再记为跳过,而是等它结束后立即补跑一次;期间多次触发合并为一次。手动运行不排队。
- 新增「优先级」:标准 / 后台。后台任务在电脑繁忙时让出 CPU,子进程一并继承。
- 超时预设扩展到 12 小时,并支持自定义小时和分钟;不在预设里的超时值不再被误显示为「不限制」。
- 脚本运行时可读取
RUNSHELF_TASK_ID、RUNSHELF_RUN_ID;设置了超时的任务还会得到RUNSHELF_TIMEOUT_AT(ISO 8601 截止时间),可据此提前收尾。 - CLI / TaskSpec 新增
concurrency(skip/queue/allow)和priority(standard/background)字段。
稳定性修复:
- 定时任务改由独立的运行宿主进程监管。调度进程崩溃、被 launchd 重启或升级重新注册时,正在运行的脚本不再变成孤儿或被误标为失效,结果照常记录。
- 失败通知改为写入通知收件箱、由 App 投递。此前调度进程在任务失败或超时时发通知会直接崩溃,连带中断其他长任务;App 未运行时通知会在下次打开后补发(保留 24 小时)。
runshelf run cancel在脚本尚未启动时只记录取消请求,不再误杀监管进程。
行为变化:
- 后台调度进程改为交互级进程类型。此前由调度器启动的所有任务都被系统压到低优先级,现在默认与前台应用同等获得 CPU;需要让出资源的任务请设为「后台」。
- 用
RUN_SHELF_APP_SUPPORT_DIR运行 App 时,不再注册、注销或修复后台调度,开发预览不会影响已安装的正式版。
校验:
scripts/check.sh通过。- 使用隔离任务目录完成运行配置区的实机 UI 检查。
- App 与发布产物通过签名、公证、staple 和完整性校验。
Run Shelf 1.5.3
修复侧边栏与运行历史中的时间展示一致性。
- 运行历史耗时改为“分/秒”形式,避免用户手动换算较大的秒数。
- 选择“下次运行”排序时,失败、超时、跳过和取消的任务也展示未来计划时间,同时保留最近运行状态图标与提示。
- 运行中与历史记录共用同一套耗时格式化逻辑。
校验:
scripts/check.sh通过。- App 与发布产物通过签名、公证、staple 和完整性校验。
Run Shelf 1.5.2
Run Shelf 1.5.2 调整任务超时预设,让常用的短时与长时任务配置更直接。
主要变化:
- 超时选项统一为不限制、30 秒、1 分钟、5 分钟、10 分钟、30 分钟、1 小时和 2 小时。
- 移除 2 分钟预设,并新增 2 小时预设。
校验:
scripts/check.sh通过。
Run Shelf 1.5.1
Run Shelf 1.5.1 简化侧边栏任务状态,让运行健康与下一次调度更容易快速判断。
主要变化:
- 正常任务显示下一次运行时间,并用单一的绿色行尾图标表示最近运行成功。
- 运行中任务显示系统强调色进度指示和持续时间。
- 失败、超时、跳过、取消、计划异常和停用状态使用各自明确的图标与文案。
- 每行最多显示一个状态图标,避免同时展示当前状态与历史状态造成混淆。
- 成功图标的悬停提示和辅助功能标签包含完整的上次运行语义与时间。
- 计划无效状态优先于历史运行结果,避免把不可调度任务显示为健康。
校验:
scripts/check.sh通过。- 使用隔离任务目录完成真实 App 侧边栏布局、状态颜色和停用状态检查。
Run Shelf 1.5.0
Run Shelf 1.5.0 改进任务列表、运行状态与编辑体验。
主要变化:
- 侧边栏支持手动拖拽排序和按下次运行时间排序,并记住用户选择。
- 使用 SF Symbols 清晰区分等待、运行、成功、失败、超时、取消、跳过、计划异常和停用状态。
- 修复手动运行记录可能未及时出现在日志列表的问题。
- 修复切换任务后计划编辑器可能显示上一任务计划类型的问题。
- 精简设置与任务检查器,移除无意义的来源标记和脚本插入工具。
- 恢复紧凑的三栏标题栏布局,并修正侧边栏折叠时的控件与标题位置。
校验:
scripts/check.sh通过。- 使用隔离任务目录完成展开、折叠、排序菜单和多种任务状态的实机 UI 检查。
Run Shelf 1.4.0
Run Shelf 1.4.0
本版本源于一次对调度器、Runner、日志链路和 CLI 契约的全面正确性审查:修复多个会
导致任务漏跑、状态失真和 UI 冻结的缺陷,为 AI agent 补齐发现与集成入口,并完成开
源前的文档准备。
调度与运行可靠性:
- 修复调度器按任务记账导致的泄漏:与手动运行并发时任务可能被永久跳过,现按 run id 记账。
- 调度与手动运行竞争同一任务时不再误记 failed、误发失败通知,统一记为 skipped。
- 运行元数据的跨进程回收改在 claim 锁内二次确认,成功记录不再可能被覆写成 stale。
- 超时改用单调时钟计量,睡眠唤醒后不再误杀正常运行的脚本。
- 睡眠或关机跨越多个调度点时,错过的运行逐一记录 stale,不再无声消失。
- 夏令时春季跳变日落在跳变时段的任务当天照常运行一次,不再静默跳过。
- 保留清理不再删除 meta 损坏的运行目录,日志得以保留排查。
App 修复:
- 修复新建任务 sheet 因缺少环境对象而崩溃的问题。
- 手动运行移出 Swift 并发协作线程池,多个长任务并发运行不再冻结日志和刷新。
- 切换任务或运行记录时不再短暂显示上一个任务的日志内容。
- 恢复日志滚动位置不再触发全文档布局,也不再因刷新竞态错位。
CLI 契约(破坏性变更):
- 未知参数一律返回 usage 错误,拼错
--dry-run不会再造成真实写入。 - 前台运行失败改为返回
ok: false、error.code: "run_failed"(退出码仍为 8),完整运行记录保留在result.run。 - 更新已有任务(含
--dry-run)强制要求--expected-revision,防止静默覆盖并发修改。 - envelope 增加
schemaVersion;新增version、schema task-spec --example、agent-setup命令;退出码语义统一。
Agent 集成:
- 新增
runshelf agent-setup:一条命令把集成说明幂等写入~/.claude/CLAUDE.md或AGENTS.md,内容与help agent同源。 - 设置页新增「命令行与 AI Agent」:安装 CLI、复制集成说明、写入配置文件。
- 任务记录创建来源,CLI/agent 创建的任务在侧边栏和 Inspector 显示「CLI」标记。
文档与开源准备:
- README 加入截图与演示动图,新增英文版 README,补齐 CHANGELOG,增加 issue/PR 模板。
校验:
- scripts/check.sh 全部通过(含全部测试、universal Debug 构建、schema 同步检查)。
- CLI 契约在隔离数据目录下按 help agent 声明的完整流程端到端验证。
- 发布产物使用 Developer ID 签名,提交 Apple 公证并 staple 后发布。
Run Shelf 1.3.0
Run Shelf 1.3.0
重写 App 的任务刷新与日志展示链路,解决长时间运行后侧边栏切换变慢、内存持续增长,以及阅读历史日志时滚动位置跳动的问题。
- 无变化的磁盘扫描不再发布 SwiftUI 更新。
- 只有当前选中且正在运行的 run 会刷新日志;历史日志保持静止。
- 实时日志刷新不再替换滚动视图,相同内容不再触发重绘。
- 用轻量 tab 按钮替换会在频繁切换时积累观察对象的分段 Picker。
- 保持现有任务目录、schema、CLI、Runner 和 Scheduler 协议不变。
校验:
- 37 项测试通过,0 失败。
- App 与 CLI universal Debug 构建通过(arm64 + x86_64)。
- 隔离数据任务切换压力测试中,热切换稳定在 14–27 ms;多轮空闲扫描后关键 Observation 对象数量不增长。
- 发布产物使用 Developer ID 签名,提交 Apple 公证并 staple 后发布。
Run Shelf 1.2.1
Run Shelf 1.2.1
修复 1.2.0 对旧任务时区字段处理过严,导致包含历史 timezone: "UTC" 的任务无法保存的问题。
旧版 Run Shelf 实际一直使用 Mac 本机时区计算 Cron;1.2.1 会在读取旧 schemaVersion 1 任务时将历史非本地时区值规范化为 local,保持原有执行时间,并在下一次保存时写回真实语义。CLI 新建或更新任务时仍只接受 timezone: "local",避免产生未实现的时区行为。
校验:
- 35 项测试通过,0 失败、0 跳过。
- 旧 UTC 任务加载、备注/脚本/计划保存、任务切换、重启持久化、手动运行与日志展示的隔离 UI 冒烟通过。
- App 与 CLI universal Debug 构建通过(arm64 + x86_64)。
- Xcode 静态分析通过。
- 发布产物使用 Developer ID 签名,提交 Apple 公证并 staple 后发布。
Run Shelf 1.2.0
Run Shelf 1.2.0
本版本集中修复长期使用后任务切换变慢、历史与日志读取无上限,以及 App、CLI、后台调度器并发修改任务时的数据一致性问题。
主要变化:
- 将任务选择、磁盘监控和本地运行协调从
TaskStore拆分,移除侧边栏切换路径中的同步磁盘扫描和不必要视图重建。 - 引入稳定的跨进程仓库锁与任务锁,防止重名创建、并发覆盖和任务删除后被旧运行重新创建。
- 严格执行 TaskSpec 与 UTF-8 文件契约,未知字段和不支持的时区会返回明确错误。
- 历史记录改为限量、增量读取;CLI 日志默认最多返回 1 MiB,并支持显式完整读取。
- 后台调度改为可选能力,未启用时仍可编辑、保存和手动运行任务。
- 降低运行状态轮询频率并增加调度日志轮转,减少空闲唤醒和长期磁盘增长。
- 补充并发、数据安全、CLI 端到端和 Runner/Scheduler 回归测试。
- 建立 Schema 生成检查、统一本地/CI 门禁和可验证的版本号映射。
校验:
- 34 项测试通过,0 失败、0 跳过。
- App 与 CLI universal Debug 构建通过(arm64 + x86_64)。
- Xcode 静态分析通过。
- 发布产物使用 Developer ID 签名,提交 Apple 公证并 staple 后发布。
Run Shelf 1.1.1
修复后台调度进程无法由 macOS 启动的问题。这个问题会导致 App 退出后定时任务不再自动执行,CLI 或 App 创建的任务都会受影响。
升级到 1.1.1 后,首次打开 App 会自动刷新后台调度登记;之后关闭 App,RunShelfScheduler 会继续由 launchd 运行。
校验:
- xcodebuild test 通过
- App 与 DMG 均已 Developer ID 签名、公证并 staple
- 本机验证 launchd 状态为 running,scheduler 心跳正常更新