@vinelink-lab/dsh-vera
v0.1.2
Published
dsh plugin bundle (Vera), maintained by VineLink
Maintainers
Readme
dsh-Vera
由 VineLink 维护、面向 dsh(deepseek harness)的插件组合包(bundle)。以 Apache-2.0 协议开源,见 LICENSE。
这是什么
@vinelink-lab/dsh-vera 是一个 Cordis 插件,按 dsh 的组合包(bundle)规范打包:package.json 的 dsh.bundle 字段声明了 cordis.patch.yml,供 dsh plugin add 安装进某个 profile 时应用。
src/index.ts— 插件入口,导出name/Config/apply。cordis.patch.yml— 安装该组合包时应用的配置层。tests/— Vitest 测试。
开发
pnpm install
pnpm run check # typecheck + lint + test + build单独运行:
pnpm run typecheck
pnpm run lint
pnpm run test
pnpm run build # 输出到 lib/
pnpm run dev # watch 模式构建本地联调
pnpm run dev:harnessscripts/dev.sh 自动完成手动联调的几步:先 pnpm run build 一次(供 lib/client.js 让 client slot 注入能解析到),生成一个 --patch overlay——禁用目标 profile 里可能已真实安装的 vera 行(若该 profile 从没装过这个组合包,禁用一个不存在的行只是 stderr 上的一条警告,不影响启动),并以新 id vera-local 插入一行指向本仓库 src/index.ts(服务端改动改完重启 dsh 即生效,无需重新构建;loader patch 不允许在同一 id 下把行的 name 改指到别处,两行同 id 插入也会报 duplicate loader entry id,所以联调行必须走一个新 id,并把真实那行禁用掉),再在后台跑 tsdown --watch(client 端改动经 dsh 现有 HMR 推到浏览器,无需重启),最后从 harness checkout 执行 pnpm dsh web --patch <overlay>。
默认 harness checkout 路径是 ~/work/ai/deepseek-harness,可用 DSH_HARNESS_DIR 覆盖;该 checkout 需已执行过 pnpm run build(apps/cli/lib/bin.js 存在)。DSH_PROFILE 可覆盖目标 profile(默认 web)。脚本之后的参数原样转发给 dsh web,例如:
pnpm run dev:harness -- --no-open --port 4000
/api/*请求报 403(如「新建会话失败:… transport failure for /api/session/create: HTTP 403」) 这不是 Vera 的问题,是 dsh 的浏览器信任围栏(DNS-rebinding 防护)在拒绝:凡 Host 头不是回环地址(localhost/127.x/[::1])且不在trustedHosts(回环 + 派生 LAN IP +--trusted-host)里的/api/*请求一律返回 403。用域名反代或 LAN IP 打开 UI 都会触发;Vera 自己的/api/vera/*走 exact 路由、不过围栏,所以登录正常而建会话失败,容易误判。绕开它用回环 URL 即可;要固定用某个域名/IP,启动时加dsh web --trusted-host <host[:port]>(可重复),或在 profile 的cordis.patch.yml里配 web-app 的trustedHosts。DevTools 看响应体可区分:forbidden即本围栏,unauthorized则是浏览器会话 cookie 缺失(用带?token=的 URL 重开)。
也可以手写 overlay 自己联调,等价于脚本做的事(若这个 profile 从未装过 vera,第一行可以省略):
- id: vera
disabled: true
- insert:
- id: vera-local
name: '/absolute/path/to/dsh-Vera/src/index.ts'pnpm dsh web --patch /path/to/overlay.yml安装进 profile
已发布到 npm 后,可直接按包名安装:
dsh plugin --profile <profile-name> add @vinelink-lab/dsh-vera本地 checkout(未发布或联调场景):
dsh plugin --profile <profile-name> add /path/to/dsh-VeraCI/CD
.github/workflows/ci.yml:push 到main和每个 PR 上运行质量门禁——lint、typecheck、test、build(Node 22.19 / 24 双跑)。.github/workflows/release.yml:在 GitHub Release 被 publish 时,用当时package.json里的版本号发布到 npmjs.com(npm publish --provenance)。走 npm Trusted Publishing(OIDC),不依赖任何长期 token。发布流程:先在main上把package.json的version提到目标版本并合并,再打对应 tag、创建 GitHub Release,workflow 会自动发布。- 首次发布例外:npm 没有"预注册" trusted publisher 的机制,全新包名必须先手动发布一次才能在其设置页里绑定这个仓库和 workflow:本地
npm login(走 2 小时会话认证,不落地任何 token)→pnpm run build→npm publish --access public。发布成功后去 npmjs.com 该包的 Settings → Trusted Publisher,绑定 orgVineLink-Lab、repodsh-Vera、workflow 文件名release.yml。之后的版本都由 workflow 自动发布,不需要配置NPM_TOKENsecret。
- 首次发布例外:npm 没有"预注册" trusted publisher 的机制,全新包名必须先手动发布一次才能在其设置页里绑定这个仓库和 workflow:本地
参考
- dsh 插件开发教程:
docs/user/develop/basic(deepseek-harness 仓库) - 打包与安装:
docs/user/develop/basic/publish.zh.md
