Repository navigation
Releases
v0.8.0 — 兼容 dsh 0.2.0-rc.2
适配 dsh 0.2.0-rc.2(自 v0.7.0 的 dsh 0.1.5-rc.2 跨两个 minor 升级,两处破坏性变化):
- settings 服务重构:宿主移除
SettingsProvider.installSection运行时注册,换为SettingsForms——插件配置改由 cordis loader 按导出的Configschema 声明式注入(值写在 profile patch 的插件行上,改动即重载插件 fiber),client 端配置表单由 SettingsForms 自动生成。本插件删除installSection注册与settings注入,enabled/announceToAgent语义不变 - schemastery 分叉包切换:dsh 0.2.0 把
@deepseek-ai/schemasteryfork 收紧到~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.launcherslot 与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
适配 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
变更
适配 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 驱动调度模型
变更
本版将调度模型改为完全依赖持久化的下次执行时间(nextRunAt):cron / 固定间隔只用于计算它,到期即触发。
新增:一次性任务
- 只设一个执行时间(新建页默认当前 +1 小时),触发一次即自动归档——成功、失败、手动「立即执行」都算消耗
- 创建入口:新建任务页「一次性」模式 /
timer_agent工具run_at参数 / APIrunAt字段 - 「跳过一次」对一次性任务无意义: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:固定间隔执行模式
新特性
固定间隔执行(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
适配 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:任务预设 · 跳过一次 · 界面优化
新特性
任务预设(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
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
Merge pull request #2 from LouisHaoL/fix/web-boot-inject-crash fix: web 启动崩溃 + 查看会话不跳转 + 卡片内容溢出