galvanize-dsh:在 DSH 智能体内注册事件触发,按需唤醒无头会话

前言

DeepSeek Harness(DSH)里跑智能体时,常见需求是「某事发生了再叫我处理」:下载目录里来了简历、邮箱收到报告、Webhook 被调用、仓库有新的 push。自己写定时轮询脚本,要么延迟大,要么占资源,还要单独维护唤醒逻辑和 DSH 会话的衔接。

galvanize-dsh 是社区维护的 DSH 原生 Cordis bundle,把「注册触发器 → 事件到达 → 拉起新的 DSH 会话并带上 prompt 与事件数据」接到 galvanize core 上。插件本身只做薄客户端:在智能体 schema 里暴露五个 trigger_* 工具,具体调度与唤醒由本机 galvanize core 的 loopback API 完成。安装结束会做一次 heartbeat 证明,避免「装上了其实没加载」的静默失败。

这是什么

  • 名称与归属:插件包名 galvanize-dsh,仓库 lychee888/galvanize-dsh,维护者 lychee888;在 SkillHub 插件目录 分类为「工作流」。
  • 定位:给 DSH 智能体一套事件触发能力(文件夹、邮件 IMAP、Webhook、emit、git 等由 core 支持的路径);触发后 core 执行 wake,spawn 一次新的 headless DSH 会话,携带你的 prompt 与事件载荷。
  • 许可:MIT(见仓库 README)。

核心功能

安装并验证通过后,智能体可用下表工具(均代理到 galvanize core 本地 API,不在 JS 里实现 wake 逻辑):

工具 作用
trigger_add 注册触发器(folder / webhook / emit / imap 等)
trigger_list 查看当前监听项及配置
trigger_test 走真实分发路径发送合成事件
trigger_status 守护进程、最近触发、今日次数、最近错误等健康信息
trigger_remove 移除触发器(含路由清理)

事件路径可概括为:

event ── galvanize core ── wake ──▶ dsh --profile <wakeProfile> "<prompt>"
 (folder/mail/webhook/git/emit)     (去重、冷却、路由、投递)          新的 DSH 会话

要点(均来自 README):

  • 薄客户端:通过 core 的 GET /version、POST /manage/<op> 等接口通信,行为与 core 面向 Hermes / Claude Code / Codex 的插件一致。
  • 单 surface:插件与 galvanize mcp 不应同时挂载;core 的 doctor 会标记 double-mount。
  • Wake 预设:每次事件 core 执行 dsh --profile <wakeProfile> "<prompt>";profile、命令与 heartbeat 周期写在 bundle 的 cordis 配置行里。
  • Webhook + DSH/shell wake:trigger_add 在 kind=webhook 时需要 relay_url,可选 relay_token;未部署 relay 会在创建触发器前报错。relay 部署见 galvanize 仓库 relay 说明。

当前 package 版本为 0.1.6(以仓库 package.json 为准);Node 要求 ^22.19 || >=24,与 DSH 自身范围一致。支持 Windows、macOS、Linux。

安装与启用

安装前本机需准备好两样东西。

1. galvanize core(含 daemon 与自启动):

pipx install "git+https://github.com/lychee888/galvanize.git"
galvanize init

2. DeepSeek Harness,且 dsh CLI 在 PATH 上:

npm install -g @deepseek-ai/dsh

然后无需 clone 仓库,一条命令从 GitHub 安装 bundle 并挂载到 DSH 的 web profile(可用 --profile <p> 换 profile):

npx github:lychee888/galvanize-dsh install

也可全局安装后执行:

npm install -g github:lychee888/galvanize-dsh

安装器会 bootstrap headless wake profile、对目标 profile 与 wake profile 分别探测,并在四项检查均通过时才报告成功,例如:

  ✔ core /version handshake        core 0.2.0, api 1
  ✔ authenticated core access      read-only trigger list succeeded
  ✔ patch row 'galvanize/tools'    row present, package resolvable
  ✔ plugin heartbeat               plugin 0.1.6, core_api_ok=true, 3s ago
LOADED: all four checks green.

说明:

  • galvanize-dsh verify --profile <name> 在对应 profile 运行时可重跑上述检查。
  • galvanize-dsh uninstall 可撤销安装;若曾用自定义 --profile / --wake-profile,卸载时需带上相同选项。
  • --wake-profile <name> 可指定非默认 headless 的唤醒 profile;安装器会把选择写入各 profile 的 cordis.patch.yml。
  • 会话 heartbeat 记录在 ~/.galvanize/dsh-heartbeats/<profile>/;验证不接受已停、过期或不健康的会话。升级插件后若需补全 profile 身份,应重新运行安装器。
  • 安装器会更新 core 共享项 dsh_wake_profile,使 galvanize add --wake dsh 与插件创建的触发器使用同一 wake profile;请与插件一并升级 core,否则安装可能报错。该设置仅影响新创建的触发器。

典型用法

CLI 注册文件夹触发并 wake DSH:

galvanize add folder ~/inbox --name triage --wake dsh \
  --prompt 'Read {file} and write a triage summary to ~/inbox-out/{file}.md'

echo hello > ~/inbox/demo.txt   # 约一分钟后可看到 ~/inbox-out/demo.txt.md

在 DSH 对话里让智能体自行注册:

用自然语言说明需求,例如「inbox 里来了 lab report 就唤醒我」;智能体会调用 trigger_add,并 test-fire 一次以便确认路径,之后仅在真实事件发生时再唤醒。

适用场景与注意

适合谁

  • 已在用或计划用 galvanize 做本机事件编排,并希望 DSH 智能体能在对话里直接增删查触发器、看状态。
  • 需要「事件驱动的一次性 DSH 会话」,而不是长期占用的轮询 job。

使用前请注意

  • 插件与 galvanize core 以当前用户、当前机器权限运行;触发器监听的路径、邮件、Webhook 等同理会落在该环境下。安装前应阅读仓库源码与 MIT 许可证,确认符合你的安全与合规要求。
  • DSH 社区插件目录(SkillHub)是独立站点,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本文仅介绍该社区插件的能力与官方 README 中的步骤。
  • 与 core 版本需匹配;README 要求 plugin 与 core 一起升级,并依赖 heartbeat 与 authenticated core access 做加载证明。
  • 开发集成测试 fixture 固定 DSH 0.1.1-rc.2 与 HMR 1.0.16(README 说明较新 HMR 移除了该 DSH 版本使用的 API);生产环境请以你本机安装的 DSH 版本为准。

结尾

galvanize-dsh 把 galvanize 的事件触发与 DSH 无头唤醒接成一条可验证的安装路径:智能体侧五个 trigger_* 工具,core 侧 dedupe、路由与 dsh --profile … 唤醒。若你要在 Harness 里做「文件 / 邮件 / Webhook / git 到了再跑一轮 agent」,可从目录页了解摘要,并按 GitHub README 完成 core、DSH 与 npx github:lychee888/galvanize-dsh install 的安装与四项 LOADED 检查。

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

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

小夜