DeepSeek Harness 长任务怎么办?DSH plugin 后台任务与 ctx.jobs 控制

配置与使用发布于 2026-10-03作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSH plugin后台任务ctx.jobs配置使用
DeepSeek Harness 用后台任务运行时管理长任务:bash、subagent 等生产方在 ctx.jobs 注册作业,JobId 形如 <kind>-N,状态分 running、stopping、completed 等五种,可用 job_list、job_output、job_kill 控制。

DeepSeek Harness 用一套「后台任务运行时」管理长任务:bash、subagent 等生产方在 ctx.jobs 注册作业,JobId 形如 <kind>-N,状态有 running、stopping、completed、killed、failed 五种,模型侧可用 job_list、job_output、job_kill 查看与控制(来源)。

DeepSeek Harness 后台任务是什么:长任务与 ctx.jobs

当一项工作跑得久、不适合阻塞对话时,它会被注册成一个 job;运行时的职责是持有身份、访问控制、生命周期状态与输出环,而执行资源归生产方(来源)。 要点:

  1. 哪些算 job — 内置 kind 至少有 bash 与 subagent;JobKind 派生自可声明合并扩展的 map,插件也能加自己的 kind。预期:跑构建、跑测试、长委派都会落到这里。
  2. id 形如 <kind>-N — JobId 是品牌化 id,JobSpec.kind 同时充当 id 前缀。预期:一眼看出这是哪类任务。
  3. 访问控制靠拥有者授权 — JobSpec.owner 声明拥有者会话;访问由它设栏,而非靠 id 保密。预期:把关照 id 当安全手段是错的。
  4. 生产方与运行时分工 — JobSpec 声明身份、拥有者会话、可选的拉取式 output 源与启动器;运行时做完预检后带 JobHandle 调用 run(),提交注册后不再执行可能失败的步骤。预期:预检失败时什么都不会注册。

DeepSeek Harness 后台任务的状态与进度怎么看

JobStatus 取 running、stopping、completed、killed、failed 之一;生产方特有的事实在运行期间归入 JobView.progress,结算后归入 JobView.detail(来源)。 观察方式:

  1. 看实时进度 — 生产方用 JobHandle.updateProgress(line) 替换实时进度行(例如 3/10、当前阶段)。预期:进度是覆盖式的,结算时会清空。
  2. 看结算原因 — 结算后终态原因走 JobOutcome.detail。预期:任务为什么结束、失败在哪,看这里。
  3. 看输出环 — 生产方用 JobHandle.append(text) 逐块追加输出,偏移按 UTF-8 字节推进。预期:模型侧读到的是环里的内容,outputLimitBytes 限制每次完成通知或输出读取的字节上限,但它约束的是模型可见面、不影响观察者。
  4. 看完成回调 — JobHooks.done 在生产方释放资源时 resolve,而不是在工作完成时。预期:别把 done 当成「任务成功」的信号。

DeepSeek Harness 任务控制与清理:job_list、job_output、job_kill

模型侧有三个工具可用:job_list 列出任务、job_output 读取输出、job_kill 请求终止;终止必须同步、幂等并最终结算 done(来源)。 控制要点:

  1. 列出与读取 — 用 job_list 找到目标任务,再用 job_output 读它的输出。预期:能在会话里直接追长任务的进展。
  2. 终止 — 用 job_kill 请求终止,JobStatus 会经过 stopping 走向 killed。预期:终止是请求式的,等它真正结算。
  3. 拥有者销毁会连带取消 — owner 当前注册的 live Agent 一旦销毁,它的 job 会被取消并 await。预期:会话结束会带着它名下的任务一起收尾。
  4. 无主 job 更宽松 — 省略 owner 会创建无主 job,对任何调用者开放直到服务销毁。预期:谨慎使用,这种任务不受会话围栏保护。
  5. 结算后写入会丢弃 — 结算后(生产方自行结束、被 kill 或注册表强制拆除)再写入不抛错,而是记录后丢弃。预期:生产方收尾的 flush 不会破坏自身清理路径。

想看看社区怎么用插件扩展长任务与任务面板,可以先进 DSH Plugin Hub 浏览。

注意事项与常见问题

  1. 别把任务 id 当密钥:访问控制依赖拥有者授权,id 本身不是保密手段。
  2. done 不等于成功:它只是资源释放的信号,结果要看结算状态与 detail。
  3. 输出上限是模型可见面的约束:outputLimitBytes 不改变环的保留策略。
  4. 长任务与子代理常常一起出现:委派出去的长任务也会变成 job,见《DeepSeek Harness 子代理怎么用》。
  5. 在 CI 等非交互场景里发起任务:注意退出语义,见《脚本和 CI 里怎么跑 dsh plugin 命令》。

来源:后台任务运行时(官方文档)、工具 Schema 目录(官方文档)

常见问题

DeepSeek Harness 的哪些操作会变成后台任务(job)?

在 DeepSeek Harness 里,长时间运行的生产方会注册成 job,内置的 kind 至少有 bash 与 subagent;JobKind 派生自可声明合并扩展的 map,插件也能注册自己的 kind,注册表把每个 kind 当作不透明的 id 命名空间。

DeepSeek Harness 后台任务有哪些状态?

DeepSeek Harness 后台任务的 JobStatus 取 running、stopping、completed、killed、failed 之一;生产方特有的事实在运行期间归入 JobView.progress,结算后归入 JobView.detail。

怎么查看和控制 DeepSeek Harness 里的后台任务?

DeepSeek Harness 面向模型的工具有 job_list、job_output 与 job_kill:前者列出任务,中间读取输出,后者请求终止。终止请求必须同步、幂等,并最终结算对应的 done。

DeepSeek Harness 后台任务的访问权限是怎么控制的?

DeepSeek Harness 后台任务的访问权限靠拥有者授权而非 id 保密:JobSpec 可声明 owner 会话,owner 当前注册的 live Agent 一旦销毁,其 job 会被取消并 await;省略 owner 则创建无主 job,对任何调用者开放直到服务销毁。

为什么 DeepSeek Harness 的任务输出有时会写不进去?

DeepSeek Harness 的 job 结算后(生产方自行结束、被 kill 或注册表强制拆除)再写入不会抛错,而是记录后丢弃,这样生产方收尾时的 flush 不会破坏自身的清理路径。

相关术语

ctx.jobs
ctx.jobs 是 DeepSeek Harness 的后台任务注册表服务,长时间运行的生产方通过它注册作业,运行时统一持有身份、访问控制、生命周期状态与输出环。— DeepSeek Harness 官方文档 - 后台任务运行时
JobId
JobId 是后台任务的品牌化标识,按 <kind>-N 生成;访问控制依赖拥有者授权而非 id 的保密性,因此不能把关照 id 当作安全手段。— DeepSeek Harness 官方文档 - 后台任务运行时
JobStatus
JobStatus 是任务的生命周期状态,取 running、stopping、completed、killed、failed 之一;运行期间的进度落在 JobView.progress,结算细节落在 JobView.detail。— DeepSeek Harness 官方文档 - 后台任务运行时
JobHandle
JobHandle 是交给生产方的作用面,提供 append 向输出环追加分块、updateProgress 更新实时进度行;它对应的方法都是同步的,且在该 job 整个生命周期内有效。— DeepSeek Harness 官方文档 - 后台任务运行时

来源