# 发布 本文件面向维护者。包的运行时内容与发布清单见 `package.json` 的 `files`。 ## 发布前必须通过的检查 ```bash npm run build # client.js 是由 tools/ 生成的,先重建 npm test # 全套 8 个 suite npm run pack:check # 按 files 复制出「将要发布的文件」,在其中整套再跑一遍 ``` `prepublishOnly` 已经串好这三步,所以 `npm publish` 会**自己**先跑一遍; 如果 bundle 与源码不一致、或 `files` 漏了运行时依赖,发布会**直接失败**而不是发出去一个坏包。 `pack:check` 存在的理由是一个真实事故:`files` 里曾漏掉 `host/lichess.mjs`, 而那是 `index.js` 的运行时 import——按那份清单发出去,用户装到的插件 Host 半边直接加载失败。它现在会:复制将要发布的文件 → 检查 `index.js` 的每个相对 import 都在包里 → 在**复制出来的那份**里跑整套测试。 ## 步骤 ```bash npm login # 首次;账号需对该包名有发布权 npm version minor # 或 major/patch:先确认版本号 npm publish # 未加 scope 的包默认就是公开的 ``` `npm publish --dry-run` 可以先看一遍将被打包的文件清单而不真正发布。 > **发布不可撤销**:npm 只在 72 小时内允许 `npm unpublish`,之后版本号永远被占用 > (只能再发一个更高版本)。所以先 dry-run 看清单,再真发。 ## 发布之后 ```bash npm view dsh-chess-board version dist.tarball # 确认注册表上的版本与 tarball ``` 然后在一个干净的 DSH profile 里真装一次(**不要**在开发目录里 link 测试, 那验不到打包内容): ```powershell dsh plugin add dsh-chess-board ``` 装完**重启 DSH**:board bundle 列表只在宿主启动时组装一次。重启后确认棋盘标签页出现、 能走子、能查询评估。 ## 上架 DSH 的「插件市场」 **发布到 npm 不会让插件出现在 DSH 的插件市场里。** 市场是 `dsh-community-market`,它聚合的是**目录提供方**; 其中 dshfind 的来源是 **GitHub 仓库的 topic**,不是 npm。 它自己的 README 写得很明确: > Add the `dsh-plugin` topic to your **public** GitHub repository. A scheduled job syncs the topic > every day at 02:17 UTC, so a newly tagged repo shows up in the marketplace within about a day — > no issue or PR needed. > — 所以上架只需要两件事:**公开仓库** + **topic `dsh-plugin`**(每天 02:17 UTC 同步,约一天内出现)。 列表里显示的是**仓库名 + 仓库简介**,所以这两样要写好。 ### 仓库的 About 简介(可直接粘) ``` 在 DSH(DeepSeek Harness)右侧边栏里下国际象棋:完整规则、八档内置对手、lichess 云端评估 / 复盘 / 战术题,中英双语。· A chess tab for DeepSeek Harness: full rules, built-in opponent, lichess eval, review and puzzles. ``` ### 要加的 topics ``` dsh-plugin dsh deepseek-harness cordis-plugin chess lichess board-games ``` `dsh-plugin` 是**入场券**(市场靠它收录);其余用于站内搜索与分类。 注意:`package.json` 里的 `keywords: ["dsh-plugin", …]` 只服务 **npm 搜索**, **不能**替代 GitHub topic。 ### 另一个来源(收录方式未验证) DSH 的市场还内置了 `deepseek1024.com/api/v2/plugins` 这个目录。它的文档明确写了 "是受支持的来源**不**代表默认/推荐/已审核",而我**没有**在本地文件里找到它的收录提交入口—— 所以这里不写猜测的步骤;真要上那个来源,去它的站点问。 ### 仓库首次提交 ```bash git init git add . git commit -m "dsh-chess-board: a chess tab for DSH" git branch -M main git remote add origin git@github.com:/dsh-chess-board.git git push -u origin main ``` 仓库名建议与包名一致(`dsh-chess-board`):市场条目按仓库组织,名字一致时用户从市场走到 npm 不会迷路。 `.gitignore` 已经写好了(内含 `local/`、`node_modules/`、`*.tgz`)。 ## 包名现状 `dsh-chess` 在 npm 上已被他人占用(`dushaobindoudou`,2026-09-10 的 0.0.1 占位版, 属于 dsh-workflow / dsh-selfrepair 那一套),因此本包发布为 **`dsh-chess-board`**。 可用的备选(发布时实测 404):`dsh-lichess-chess`、`dsh-chess-tab`、`dsh-chess-plugin`、`deepseek-chess`。 ## 版本与授权 - 版本从 **0.1.0** 起:功能完整但对外承诺有限(见 README 的「已知限制」)。 - 代码 MIT(`LICENSE`)。**棋子美术是第三方作品**,其条款与出处记录在 `NOTICE.md`—— 它随包发布,`verify-bundle.mjs` 会断言出处文字确实在 bundle 里,所以这段渊源不会在后续改动中丢失。