autoqueue — DSH 无人值守任务队列

前言

DSH(DeepSeek Harness)采用插件化架构,生态中存在多种工作流插件。开发者常需要处理定时任务或后台任务,而不希望这些操作阻塞当前的前台会话。autoqueue 是一款由 alin-ever 维护的工作流类插件,旨在将 Markdown 任务交给队列,由 DSH 后台自动派发、反阻塞、重试、结算并归档。

该插件的核心设计是调度器与任务的分离:调度器负责定时触发(如 cron),到点时自动创建即时任务;即时任务则执行一次性的具体工作,拥有完整的状态机生命周期。两者互不干扰,确保正常任务不打扰用户,队列任务不改变普通前台会话的运行状态。

核心功能

根据已核实的事实,该插件包含以下核心能力:

  • 调度与执行分离:调度器不进入状态机,不执行;即时任务拥有完整的状态流转。
  • 定时触发:支持通过 cron 表达式或 schedule 字段设定触发时间。
  • 状态机管理:任务具备 pending、running、done、failed、stopped、interrupted 六种状态。
  • 会话隔离与权限控制:每次执行使用独立的专属会话 ID 和运行目录,不干扰普通 Host 会话。
  • 无人值守执行:执行模式严格限制,默认最大并发为 1。
  • React 看板界面:提供任务、调度、归档三个独立标签页的监控界面。
  • 文件收件箱机制:支持直接将 Markdown 文件丢入队列目录以创建任务。
  • 自动注入工具:插件加载后自动向普通 Host 会话注册 19 个 autoqueue_* Host 工具。
  • HTTP API 与 OpenAPI:提供完整的 RESTful API 和 OpenAPI 3.1 文档接入。

安装与配置

安装

通过官方提供的安装命令添加插件:

dsh plugin --profile web add -w @alintever/dsh-plugin-autoqueue@latest

兼容性

  • 基线版本:插件经过审计和自测的精确基线是 @deepseek-ai/dsh 0.1.5-rc.1。
  • 清单范围:插件清单接受 >=0.1.1-rc.2 <0.1.6。升级 DSH 后建议重新运行单元测试和 Playwright。
  • 依赖:@deepseek-ai/dsh-sandbox-policy、@deepseek-ai/dsh-tools、@deepseek-ai/dsh-user-approval 跟随 DSH 引擎版本范围。

配置

对于远程部署或反向代理场景,必须配置鉴权参数:

config:
  allowedHosts:
    - queue.example.com
  apiToken: "replace-with-a-long-random-secret"

也可以通过环境变量提供 token:DSH_AUTOQUEUE_TOKEN 或 AUTOQUEUE_API_TOKEN。一旦设置 token,本地访问 localhost 也必须携带鉴权头。

使用方法

1. 通过 API 创建任务

使用 POST /api/queue/task 创建即时任务:

curl -X POST http://127.0.0.1:3080/api/queue/task \
  -H 'Content-Type: application/json' \
  -d '{
    "requestId": "my-001",
    "key": "daily-report",
    "content": "# 生成日报\n\n收集今天的工作数据,输出 report.md",
    "priority": 5,
    "autoArchive": true,
    "enableNotifications": false
  }'

2. 通过 API 创建调度器

在请求体中包含 cron 或 schedule 字段即可创建调度器:

curl -X POST http://127.0.0.1:3080/api/queue/task \
  -H 'Content-Type: application/json' \
  -d '{
    "requestId": "my-002",
    "key": "weekly-insight",
    "content": "# 生成周报\n\n汇总本周代码提交与 issue 进展",
    "cron": "0 9 * * 1",
    "priority": 5
  }'

调度器到点时会自动创建即时任务,即时任务继承调度器的配置。

3. 通过文件收件箱

队列目录默认为 ~/.dsh/queue/tasks/。文件名作为 key,正文作为任务内容。文件头支持声明调度方式:

echo "# 生成日报" > ~/.dsh/queue/tasks/daily-report.md

Markdown 文件头示例:

<!-- cron: 0 8 * * 1-5 -->
<!-- deadline: 0 21 * * * -->
# 每日工作报告

4. 使用看板

安装后,在 DSH Web 侧边栏点击「任务工作台」。看板提供任务/调度/归档三个标签页,支持查看状态、编辑(非运行中)、停止、重跑、归档等操作。

安全与隔离

autoqueue 严格限制执行模式,确保不干扰主进程:

  1. 会话隔离:每次 attempt 使用独立的运行目录和专属会话 ID(autoqueue-session-<uuid>),Runner 拒绝读写非本命名空间的会话。
  2. 执行模式:使用 autoqueue-unattended-v2 preset,禁用提问、jobs、subagent/fork/control/list、workflow、Ralph。bash/pwsh 强制 enableRunInBackground:false。
  3. 权限固化:会话创建后,approvalPolicy 被固化为 never 并持久化验证。
  4. Host 工具隔离:插件向普通 Host 会话注入 19 个 autoqueue_* 工具,但这些工具在 autoqueue-session-* 自有任务 Agent 中被隐藏,执行层 Guard 也会拒绝绕过可见性的工具调用。

适用场景

该插件适合需要自动化处理后台任务的场景,例如:

  • 定时生成日报、周报。
  • 需要持久化、可重试的批量数据处理。
  • 不希望打断当前用户交互的自动化流程。

结语

autoqueue 为 DSH 提供了一套完整的无人值守任务队列方案。它通过调度器与任务的分离设计,配合严格的会话隔离机制,实现了在后台静默执行任务的能力。通过文件收件箱、HTTP API 和 React 看板,开发者可以灵活地管理任务流。

更多详情请查看插件目录或源码仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜