Skip to content

Releases

v0.8.0 — 兼容 dsh 0.2.0-rc.2

Choose a tag to compare

@LouisHaoL LouisHaoL released this 09 Oct 07:11

适配 dsh 0.2.0-rc.2(自 v0.7.0 的 dsh 0.1.5-rc.2 跨两个 minor 升级,两处破坏性变化):

  • settings 服务重构:宿主移除 SettingsProvider.installSection 运行时注册,换为 SettingsForms——插件配置改由 cordis loader 按导出的 Config schema 声明式注入(值写在 profile patch 的插件行上,改动即重载插件 fiber),client 端配置表单由 SettingsForms 自动生成。本插件删除 installSection 注册与 settings 注入,enabled/announceToAgent 语义不变
  • schemastery 分叉包切换:dsh 0.2.0 把 @deepseek-ai/schemastery fork 收紧到 ~3.18.4(3.18.3/4 引入 Mode/SchemaOutput 类型体系),与原版 schemastery 同名声明合并后 typecheck 冲突。插件改用 fork 与宿主同源(运行时行为不变,宿主对 schema 本就鸭子类型调用)
  • 其余宿主面逐一核对不变:服务注入名(settings 移除后为四项)、webServer 路由、systemPrompt.section、tools.register、session/event/turn/end、client 端 slots/sessions 注入与 /plugins/<id>/client.js 服务路径;dsh.compatibility.dshReleases 声明更新为 0.2.0-rc.2
  • peer/dev 依赖对齐 dsh 0.2.0-rc.2 配对版本(cordis ~4.0.4、全部 @deepseek-ai/dsh-* 对齐 0.2.0-rc.2)
  • 宿主侧加法扩展(本插件不消费、不受影响):tools 新增 cancel 决策与 projectContent 投影;system-prompt 新增 interpolate 选项与 TOOL_COMPUTER_USE/MCP_SERVERS 段位;ui-settings 新增 settings.launcher slot 与 configForms(原 settingsScope 改名)

向下兼容:任务台账格式无变化,v0.7.0 及更早的 ~/.dsh/timer-agent/jobs.json 升级即用。真机验证:隔离 DSH_HOME 分别起 dsh web 0.2.0-rc.2 与 0.1.5-rc.2,插件均正常挂载、/api/dsh-timer-agent/jobs 200、台账零副作用;更旧版本 dsh 请用 v0.7.0。

v0.7.0 — 兼容 dsh 0.1.5-rc.2

Choose a tag to compare

@LouisHaoL LouisHaoL released this 22 Sep 14:44

适配 dsh 0.1.5-rc.2(npm latest;自 v0.6.0 适配的 0.1.2-rc.1 跨四个 minor,宿主插件面几乎全部稳定,仅两处破坏性变化)。

破坏性变化迁移

  • agents.cancel(cause):宿主把自由文本 cause 换成稳定意图枚举(user / parent / hook / disposed)。本插件的超时取消迁移为 { kind: 'hook', reason: … }——无人到场的自动取消并携带原因。
  • 冷读服务拆分:sessionPersistence.inspect 已被宿主移除。钉住会话恢复时的预设重建改走新服务 sessionQuery.readSession(完整事件流,agent-preset/selected 最近一次仍优先生效);宿主未挂 sessionQuery 时回退 sessionPersistence.stat 读 header。

经核对不变的部分

五项服务注入名(webServer / tools / systemPrompt / agents / settings)、webServer.register 路由面、systemPrompt.section、tools.register + defineTool、session/event 的 turn/end 结算、可选服务 agentDefaultModel / llm / agentPresets、followup 消息形状——全部原样保留。

其他

  • peer/dev 依赖对齐 dsh 0.1.5-rc.2 配对版本(cordis ^4.0.2);插件继续使用 schemastery(宿主对 schema 仅做鸭子类型调用,不受分叉包影响)
  • dsh.compatibility.dshReleases 更新为 0.1.5-rc.2
  • 任务台账格式无变化,v0.6.0 及更早的 ~/.dsh/timer-agent/jobs.json 升级即用

验证

  • typecheck / 268 项行为测试 / build / 静态冒烟全绿
  • 真机验证:隔离 DSH_HOME 启动 dsh web 0.1.5-rc.2,插件正常挂载,GET /api/dsh-timer-agent/jobs 返回 200,台账零副作用

仅在 dsh ≥ 0.1.5 上验证;旧版 dsh 请继续使用 v0.6.0。

v0.6.0 — 兼容 dsh 0.1.2-rc.1

Choose a tag to compare

@LouisHaoL LouisHaoL released this 07 Sep 05:56

变更

适配 dsh 0.1.2-rc.1(修复 #3:插件 boot 崩溃,整个 dsh web 无法启动)。

Settings API 迁移

dsh 0.1.2-rc.1 移除了 @deepseek-ai/dsh-settings 的 installSettingsSection / settingsNamespace 导出:

  • inject 增加 'settings',改用 ctx.settings.installSection(ctx, ns, schema, entry, hooks)
  • 设置命名空间改为普通小写连字符字符串 'timer-agent'

依赖清理

  • 移除已停发的 dsh-client-runtime(0.1.2 不再发布;client 侧 ClientContext 改为本地结构类型)
  • 移除 devDeps 中已停发的 dsh-client-ui-slots
  • dsh.bundle.client.inject 去掉 client-runtime,其余 peer/dev 依赖对齐 ^0.1.2-rc.1
  • 本地 JsonValue 类型(dsh-tools 0.1.2 不再转发)

兼容性

  • ✅ 任务台账(~/.dsh/timer-agent/jobs.json)无任何变更,升级即用
  • ⚠️ 本版面向 dsh 0.1.2-rc.1;0.1.1.x 宿主请继续用 v0.5.0(settings API 双方互不兼容)

Full Changelog: v0.5.0...v0.6.0

v0.5.0 — 一次性任务 + nextRunAt 驱动调度模型

Choose a tag to compare

@LouisHaoL LouisHaoL released this 05 Sep 11:49

变更

本版将调度模型改为完全依赖持久化的下次执行时间(nextRunAt):cron / 固定间隔只用于计算它,到期即触发。

新增:一次性任务

  • 只设一个执行时间(新建页默认当前 +1 小时),触发一次即自动归档——成功、失败、手动「立即执行」都算消耗
  • 创建入口:新建任务页「一次性」模式 / timer_agent 工具 run_at 参数 / API runAt 字段
  • 「跳过一次」对一次性任务无意义:UI 隐藏、服务端拒绝

变更

  • 暂停不再清空下次执行时间;恢复基于真实上次执行时间(最后一条 execution.startedAt,回退 lastTriggeredAt)重算,错过的执行不补跑,直接跳到下一个未来时间点
  • 固定间隔 / 一次性任务的下次执行时间可手动修改(详情页控件 / PATCH nextRunAt / 工具 next_run_at);Cron 严格按表达式,服务端拒绝手改
  • 循环任务 tick 滚动加竞态防护:用户手改的 nextRunAt 不会被调度器覆盖
  • 新建页执行模式改为下拉框(位于「启用定时执行」之后,未勾选时禁用)
  • 修复:normalizeSchedule 现识别一次性规则(带时间证据才保留,遗留空白脏行仍丢弃)

向下兼容

  • ✅ 旧版本台账(~/.dsh/timer-agent/jobs.json)无需迁移,升级即用:v0.4.0 及更早的 cron / 固定间隔 / 暂停态行全部原样保留;空白脏行仍被丢弃(与旧版一致),损坏台账依旧降级不崩溃
  • ✅ 旧版代码路径不可能写出一次性任务的行形态,不存在旧任务被误判为一次性而自动归档的风险
  • ⚠️ 唯一注意:升级后若回滚到 v0.4.0,一次性任务的排程会被旧版校验丢弃(任务变回未排程);cron / 固定间隔任务不受影响

Full Changelog: v0.4.0...v0.5.0

v0.4.0:固定间隔执行模式

Choose a tag to compare

@LouisHaoL LouisHaoL released this 05 Sep 03:50

新特性

固定间隔执行(interval)

  • 任务可按「每 N 分钟」执行(从上次触发时刻起算),支持 分钟 / 小时 / 天 三种单位——补齐 cron 表达不了的间隔(如每 302 分钟)
  • 网格不漂移:宿主停机、任务暂停、执行超时等错过的时间段按整周期前推,重启后周期不变
  • 手动执行即重锚:手动跑一次后,下次 = 手动时刻 + N;定时触发仍按原网格推进
  • 新建任务弹窗与详情页均可切换 cron / 间隔两种模式,详情页以「每 N 分钟/小时/天」展示

覆盖范围

  • 定时引擎(TimerRunner):间隔触发、网格前推、手动重锚
  • HTTP 路由:create / patch 模式互切、停用重启用、跳过一次均感知间隔
  • timer_agent 工具:create/update 新增 interval_minutes 参数(0 切回 cron 模式),summary 汇报 interval_minutes

测试

  • 新增 tests/schedule.mts(间隔纯函数 17 项)
  • e2e 新增间隔用例 15 项:引擎 / 路由 / 工具三层
  • e2e 142 / UI 35 / client-apply 15 / schedule 17 全部通过

完整变更: v0.2.1...v0.4.0

v0.2.1 — 适配 dsh 0.1.1-rc.2

Choose a tag to compare

@LouisHaoL LouisHaoL released this 04 Sep 03:06

适配 dsh 0.1.1-rc.2(当前 latest)。已验证:全新安装 dsh 0.1.1-rc.2 后 dsh web 正常启动,定时任务面板与回环 API 工作正常。

变更

  • 依赖升级:@deepseek-ai/* peer/dev 依赖 0.1.0-rc.6 → 0.1.1-rc.2
  • 修复 Windows 启动崩溃:新版 dsh 将插件加载错误升级为 fatal load failure,而 Windows 下 jobs.json 的 temp+rename 原子写在目标文件被占用时(另一个 dsh 实例、杀软扫描等)抛 EPERM,直接挡死 dsh web 启动。现在 replaceFile 会对 EPERM/EACCES 指数退避重试 5 次,仍失败降级为 copy+unlink,保存永不炸宿主

安装

dsh plugin --profile web add link:<本目录绝对路径>

安装后重启 dsh web。

v0.3.0:任务预设 · 跳过一次 · 界面优化

Choose a tag to compare

@LouisHaoL LouisHaoL released this 29 Aug 03:44

新特性

任务预设(Preset)

  • 新建/编辑任务时,目标会话为「新会话」可选择 agent 预设(如 standard、code 等),已固定会话不受影响
  • 新增 GET /api/dsh-timer-agent/preset-options 路由,返回可用预设列表与默认值
  • timer_agent 工具 create/update 支持 preset 参数

跳过一次

  • 任务详情「定时运行」区新增跳过一次按钮:跳过下一次定时执行,直接到下下次
  • 按钮悬停预览跳过后的新运行时间
  • 实现基于 nextRunAt 前滚一次(基准 max(nextRunAt, now),兼容错过触发的补跑场景)

界面优化

  • 上次触发 / 下次运行位置互换,跳过按钮紧贴下次运行时间
  • 新建与编辑窗口的目标会话树区域缩小并支持拖拽调节
  • 详情页执行记录默认显示 3 条(全部/收起切换),Prompt 默认显示 4 行(查看/收起切换)

测试

  • e2e 124 项 / UI 35 项 / client-apply 15 项全部通过
  • 双实例真实宿主验证:preset-options 路由、preset CRUD、skipNext 均正常

完整变更: v0.2.0...v0.3.0

v0.1.1 - Remove dsh-web dependency

Choose a tag to compare

@LouisHaoL LouisHaoL released this 25 Aug 06:54

The timer-agent plugin now works correctly without dsh-web plugin installed.

Changes

  • Add fallback selectors for finding conversation column: [data-pane=conversation], [class*=centerCol]\
  • Add fallback for sessions service when unavailable (noop implementation)
  • Add fallback for ctx.effect when unavailable (check existence before calling)
  • Add fallback in target-options.sessionRows when sessions service missing
  • Update CSS to support [class*=centerCol]\ positioning context

This ensures the timer-agent UI panel works in various DSH deployments where the exact DOM structure or available services may vary.

v0.1.0-alpha

Choose a tag to compare

@LouisHaoL LouisHaoL released this 25 Aug 03:22
20076ae
Merge pull request #2 from LouisHaoL/fix/web-boot-inject-crash

fix: web 启动崩溃 + 查看会话不跳转 + 卡片内容溢出