DeepSeek Harness Hub
← 返回列表

ZZZjf13960/dsh-onfail

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

CI 挂了也别离开 DSH:侧栏一张失败卡,点一下带 log 开修。

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/28 · 已提供中文文档

DSH 插件:轮询 GitHub Actions,将失败的检查以卡片形式呈现,并打开带有日志上下文的修复会话。

综合分
28.5
GitHub 分
28.5
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ZZZjf13960/dsh-onfail
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-onfail

CI 挂了也别离开 DSH:侧栏一张失败卡,点一下带 log 开修。

DeepSeek Harness 插件:轮询此工作区的 GitHub 仓库 Actions(当前分支,或打开的 PR head),将新的失败检查以侧栏卡片形式呈现(job 名称、SHA、有用的日志摘录),并带着该失败上下文继续当前会话。

已在 dsh 0.1.1-rc.2 上测试(package.json 的 dsh.peer / engines.dsh)。

v0.2 仅支持轮询。不支持 webhook。

安装

需要 DSH web profile。在任意目录下:

dsh plugin --profile web add github:ZZZjf13960/dsh-onfail

此包在 main 分支上附带已提交的 JavaScript(dsh/index.js + dsh/client.js),因此 GitHub 说明符无需 prepare 构建或 pnpm allowBuilds 门控即可加载。

然后启动(或重启)web UI:

dsh --profile web

该插件通过 cordis.patch.yml 以包名 dsh-onfail 挂载。在 Settings 中,Plugins 应显示一张 Onfail (GitHub Actions) 卡片。侧栏页脚会出现一个 CI 控件;失败的检查也会以覆盖卡片形式呈现。

移除

以下任一形式都会移除 profile 依赖和 bundle 层:

dsh plugin --profile web remove github:ZZZjf13960/dsh-onfail

dsh plugin --profile web remove dsh-onfail

重启 web UI,以便宿主进程卸载路由和浏览器端部分。

配置

| 字段 | 默认值 | 位置 |
| ----- | ------- | ----- |
默认范围为 auto:当前工作区的 git remote get-url origin(owner/repo)和 git rev-parse --abbrev-ref HEAD(分支)。如果该分支存在打开的 PR(gh pr view 或 REST),插件会跟随 PR head。设置中的手动 repo 仍会覆盖自动检测。

| 字段 | 默认值 | 位置 |
| ----- | ------- | ----- |
| repo | 从 git origin 自动获取 | 插件设置卡片,或 config.repo(owner/name)。为空表示自动。 |
| token | 空 | 插件设置卡片(不会回显)。优先使用 gh auth login。也可用 DSH_ONFAIL_TOKEN,然后是 GITHUB_TOKEN |
| pollIntervalMs | 60000 | 设置卡片或 loader 配置(约 60 秒) |
| fixture | false | 设置复选框、loader 配置,或 DSH_ONFAIL_FIXTURE=1 |
| logTailChars | 4000 | 获取上限;卡片/提示词存储一段简短有用的摘录 |

Token 解析顺序:插件配置 token → gh auth token / 现有 gh 登录 → DSH_ONFAIL_TOKEN → GITHUB_TOKEN。如果 gh 无法读取 Actions,则回退到环境变量/配置 token 路径(缺少 gh 不应意味着缺少卡片)。两者都缺失时会给出可读的错误;harness 不会崩溃。没有任何硬编码。

经典 repo PAT(或 GitHub App 安装 token)需要该仓库的 Actions 读取权限。细粒度 PAT 需要 Actions: Read。使用 gh auth login 时,无需第二个 PAT。

Loader 覆盖示例($DSH_HOME/profiles/web/cordis.patch.yml):

- id: dsh-onfail
config:
repo: your-org/your-repo   # 可选;为空 = 从 git origin 自动获取
pollIntervalMs: 60000
fixture: false

轮询

每隔 pollIntervalMs,宿主端会:

1. 从工作区当前目录检测 owner/repo + 分支(以及打开的 PR head,如果有)
2. GET /repos/{owner}/{repo}/actions/runs?status=completed&branch={branch}
3. 过滤到该分支 / PR head SHA —— 而不是 main 上所有历史红色记录
4. 对于失败的 job,获取日志并存储失败的步骤 + 有用的错误行(已脱敏)
5. 仅当此 job id + SHA 尚未展示过时才发出卡片(持久化在 $DSH_HOME/onfail-shown.json 下)。使用新 job id 的重新运行可能会再次展示。轮询同一个已完成的失败 job 不会重复堆叠。

没有 webhook。浏览器端每隔几秒轮询 GET /dsh-onfail/state 并渲染卡片。

点击以继续当前会话

点击卡片会在当前会话(sessions.list.current / sessions.binding / sessions.active)上调用 session.prompt(..., 'queue')。它不会创建会话,不会打开新的会话 id,也不会抢占焦点。如果没有当前会话,卡片会显示可读的 role=status 错误 —— 那不是成功。Composer 粘贴不是成功。

Fixture 模式

测试和实时 UI 走查可以在没有 GitHub token 的情况下生成卡片:

- 设置,Onfail,启用 Fixture 模式,或
- DSH_ONFAIL_FIXTURE=1,或
- loader config.fixture: true

这会加载 fixtures/failed-run.json(acme/widget,job unit-tests,SHA aaaabbb,一段失败的测试日志尾部)。Fixture 模式将该 payload 视为新的失败,因此卡片仍会出现。

node --test

验收检查

1. 从 GitHub 上的 main 安装。 Manifest 测试断言 dsh.bundle.patch 指向 cordis.patch.yml,该文件插入包 dsh-onfail,外加 exports["./client"] 和 dsh.client。JS 已提交到 main。验证器仍会运行 dsh plugin --profile web add github:ZZZjf13960/dsh-onfail。

2. 失败的 Actions 检查变为侧边栏卡片(job、SHA、日志摘录),针对当前分支 / 打开的 PR,仅新失败。Fixture 和轮询映射器会生成该卡片形状。客户端注册 sidebar.footer.action 和 shell.overlay。验证器仍会在 DSH Web 中确认 CI 页脚 / 覆盖层卡片。

3. 点击卡片会继续当前会话,包含 repo、job、SHA、失败步骤和一段简短有用的日志。点击路径是在当前会话上调用 session.prompt(..., 'queue')。缺少当前会话或提示被拒绝时,卡片上会显示 role=status 错误。Composer 粘贴不是会话。验证器仍会在实时 UI 中点击卡片。

4. 缺少 token:可读错误,harness 不会崩溃或挂起。 没有 token(且没有 gh 登录)时调用 apply() 会设置 error 并仍然注册路由;它从不抛出异常。验证器仍会在 token/repo 为空的情况下打开插件 UI。

5. 移除会删除 profile 条目。 已记录;dsh plugin remove 会根据安装状态协调 bundles。验证器仍会运行 remove 并检查 dsh.profile.bundles。

布局

dsh-onfail/
package.json           # dsh.bundle + dsh.client + dsh.peer + exports
.github/workflows/test.yml
cordis.patch.yml       # 插入 id/name: dsh-onfail
fixtures/failed-run.json
dsh/index.js           # 宿主 apply
dsh/plugin.js          # 轮询循环 + /dsh-onfail/* 路由
dsh/client.js          # 惰性 CJS 浏览器端
dsh/config.js poll.js cards.js http.js scope.js shown.js log.js
test/*.test.js

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群