开发工作流(development)

September 4, 2026 · View on GitHub

命令

# From the repository root
pnpm run build                  # four module libs + client bundle
pnpm run test:gates             # per-module unit tests (test:markdown / test:prompt / test:routes)
pnpm run verify:package-face    # exports / facade checks
pnpm run verify:publish-readiness  # release hygiene checks (docs locality, host closure, ...)

宿主 checkout 摆放约定

构建脚本(package.jsonbuild:* / check-types:*)以 ..\..\deepseek-harness 锚点借用宿主工具链(node_modules/.bin 下的 tsc / tsdown)。因此克隆本仓库后,先在同级目录摆一份 deepseek-harness 检出并构建(pnpm install && pnpm run build):

<parent>/
  deepseek-harness/     # dsh host checkout (built)
  <this-repo>/          # this package repository

开发期宿主 peer 的解析 = 把 node_modules/@deepseek-ai/* 按 junction 接到宿主检出的 workspace 源目录(与宿主 CLI 安装顶层 node_modules 内链接同形态)。

各模块的行为 eval(意图/回归用例)位于 modules/<m>/eval/;框架与运行方式见各模块 eval README(不随包发布,名称引用)。

tsdown 树外补丁(client 构建前置)

build:client 调用宿主共享 preset clientBundle,而宿主的 workspaceManifest 按宿主包布局(packages/*/*/package.json)查清单,树外插件查不到是结构必然(上游缺陷档案 tsdown-out-of-tree-manifest,按名引用)。不打补丁则 build:client 必败,症状:

ERROR Error: tsdown: no packages/*/*/package.json declares the name @catheadowl/dsh-extras

补丁文件:patch/tsdown-out-of-tree-fallback.patch——在 workspaceManifest 的 glob 未命中后回退 outOfTreeManifest(从构建 cwd 向上找最近的、name 匹配的 package.json;树内行为零变化)。每次更新宿主检出后重放:

git -C <host-checkout> apply patch/tsdown-out-of-tree-fallback.patch

作用域:只作用于本仓库的 build:client 编译期,不进产物、不构成消费者的任何前置条件(tarball 只带 lib/ 产物,运行时 Loader 只 import 产物)。

退役条件:上游 packages/client/tsdown.client.ts 的 manifest 查找支持树外包(不打补丁 build:client 直接成功)即可删除补丁与本节。

host-closure 网络检查

verify:publish-readiness 的 host-closure 检查走 npm registry 网络(每请求 10s 超时);网络不稳时用 Node 内建代理支持:$env:NODE_USE_ENV_PROXY='1'; $env:HTTPS_PROXY='http://<proxy>'(Node ≥ 24)。离线构建可设 DSH_SKIP_HOST_CLOSURE=1 跳过该检查(红检查永不静默转绿)。