智能体开发中,CI 失败往往需要打断当前任务去浏览器或终端查看日志。切换上下文增加了心智负担。dsh-onfail 插件直接在 DSH Web 界面中暴露失败状态,让你无需离开当前会话即可修复问题。
插件简介¶
这是 DeepSeek Harness (DSH) 的联网工具插件,由 ZZZjf13960 维护。它通过轮询机制,获取当前工作区 GitHub 仓库的 Actions 运行状态(当前分支或开放 PR 的 HEAD),将新的失败检查显示为侧边栏卡片。点击卡片后,插件会读取日志上下文,调用当前会话的 session.prompt 接口,在当前任务中继续处理错误。
核心功能¶
-
轮询 GitHub Actions 失败状态
插件不依赖 Webhook,而是通过定时轮询(默认间隔 60 秒)检查仓库的 Actions 运行记录。它过滤出当前分支或 PR HEAD 的失败 Job,并记录已展示过的 Job ID 以避免重复堆叠。 -
侧边栏卡片展示
失败的检查会以卡片形式出现在 DSH Web 的侧边栏底部或覆盖层中。卡片内容包含 Job 名称、提交 SHA 以及截取的日志片段(默认截取 4000 字符)。 -
点击继续当前会话
点击卡片不会创建新会话或打断当前任务。它调用当前会话的session.prompt(..., 'queue')方法,将失败 Job 的上下文(仓库、Job ID、SHA、日志)推入当前队列,实现无缝修复。 -
Fixture 模式
支持在无 Token 或测试环境下使用。通过配置开启或设置环境变量DSH_ONFAIL_FIXTURE=1,插件会加载内置的fixtures/failed-run.json数据进行演示。
安装与启用¶
安装该插件需要先配置一个 DSH Web Profile。
1、执行以下命令安装插件:
dsh plugin --profile web add github:ZZZjf13960/dsh-onfail
2、启动或重启 DSH Web UI:
dsh --profile web
3、在插件设置卡片中,应能看到 Onfail (GitHub Actions) 选项。侧边栏底部会出现一个 CI 控制项,失败的检查会渲染为卡片。
配置与使用¶
基础配置¶
在插件设置卡片或 cordis.patch.yml 中可配置以下参数:
| 配置项 | 默认值 | 说明 |
|---|---|---|
repo |
自动 | 自动从 git remote get-url origin 获取,或手动指定 owner/name。留空则自动。 |
token |
空 | GitHub Token。优先使用 gh auth login 获取。 |
pollIntervalMs |
60000 |
轮询间隔,单位毫秒。 |
logTailChars |
4000 |
日志截取字符数。 |
fixture |
false |
是否开启 Fixture 模式。 |
Token 权限与解析¶
插件需要读取 GitHub Actions 的权限。Token 的解析优先级如下:
- 插件配置中的
token字段 gh auth token(如果gh命令可用)- 环境变量
DSH_ONFAIL_TOKEN - 环境变量
GITHUB_TOKEN
对于精细权限的 Personal Access Token (PAT),必须授予 Actions: Read 权限。
Fixture 模式测试¶
在测试或无 Token 环境下,可以通过以下方式开启 Fixture 模式:
- 在设置卡片中勾选 Fixture mode
- 设置环境变量
DSH_ONFAIL_FIXTURE=1 - 在 loader 配置中设置
config.fixture: true
开启后,插件将加载 fixtures/failed-run.json 数据来模拟失败卡片展示。
适用场景与注意事项¶
适用场景:
* 需要“原地”修复 CI 错误,不想在浏览器和 DSH 之间切换。
* 在 DSH Web 界面中集中管理开发与调试流程。
注意事项:
* 插件必须在一个已存在的 DSH Web Profile 环境下运行。
* 点击卡片继续会话的前提是当前必须存在一个活跃会话。如果没有活跃会话,卡片会显示 role=status 错误信息,而不是成功状态。
* 插件本身不会崩溃。如果 Token 缺失且 gh 命令不可用,插件会显示可读的错误信息,而不会导致 Harness 崩溃。