dsh-onfail: 在 DSH 中处理 GitHub Actions 失败

智能体开发中,CI 失败往往需要打断当前任务去浏览器或终端查看日志。切换上下文增加了心智负担。dsh-onfail 插件直接在 DSH Web 界面中暴露失败状态,让你无需离开当前会话即可修复问题。

插件简介

这是 DeepSeek Harness (DSH) 的联网工具插件,由 ZZZjf13960 维护。它通过轮询机制,获取当前工作区 GitHub 仓库的 Actions 运行状态(当前分支或开放 PR 的 HEAD),将新的失败检查显示为侧边栏卡片。点击卡片后,插件会读取日志上下文,调用当前会话的 session.prompt 接口,在当前任务中继续处理错误。

核心功能

  1. 轮询 GitHub Actions 失败状态
    插件不依赖 Webhook,而是通过定时轮询(默认间隔 60 秒)检查仓库的 Actions 运行记录。它过滤出当前分支或 PR HEAD 的失败 Job,并记录已展示过的 Job ID 以避免重复堆叠。

  2. 侧边栏卡片展示
    失败的检查会以卡片形式出现在 DSH Web 的侧边栏底部或覆盖层中。卡片内容包含 Job 名称、提交 SHA 以及截取的日志片段(默认截取 4000 字符)。

  3. 点击继续当前会话
    点击卡片不会创建新会话或打断当前任务。它调用当前会话的 session.prompt(..., 'queue') 方法,将失败 Job 的上下文(仓库、Job ID、SHA、日志)推入当前队列,实现无缝修复。

  4. 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 的解析优先级如下:

  1. 插件配置中的 token 字段
  2. gh auth token(如果 gh 命令可用)
  3. 环境变量 DSH_ONFAIL_TOKEN
  4. 环境变量 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 崩溃。

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

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

小夜