关于 publishorder
publishorder 是本地命令行工具和 MCP 服务,可根据依赖图规划 monorepo 包的发布顺序。它支持分层、按变更包制定计划和报告环路,并保证排序确定。
主要功能
- 01计算确定性的发布顺序
- 02按依赖层级分组包
- 03规划变更包及其依赖者
- 04报告依赖环路
- 05验证图输入
适用场景
- 01规划 monorepo 的发布顺序
- 02仅发布变更包及其依赖者
- 03查找阻碍发布计划的环路
MCP 相关
提供 `plan_publish_order` MCP 工具。客户端传入包依赖关系和可选的变更集合,结果包含顺序、层级、环路以及纳入或排除的包。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| changed | array | 否 | 已更改的软件包名称;指定后,计划将准确涵盖这些软件包及所有传递依赖于它们的软件包(可选) |
| packages | array | 是 | monorepo 中的软件包(至少一个) |
详细介绍
publishorder
你即将发布一个 monorepo 版本,而各个包必须按正确顺序发布:依赖项尚未发布的包不能先发布。publishorder 接收包依赖图——每个包的名称,以及必须先于它发布的包的名称——并计算发布计划:
- 发布顺序 — 对纳入计划的包进行拓扑排序,使用 Kahn 算法计算。每当有多个包可以发布时,优先选择名称按字母顺序排列最靠前的包,因此相同的依赖图始终会得到完全相同的顺序。
- 层级 — 按深度对包分组。第 0 层包含没有纳入计划的依赖项的包;其他包位于比其最深的纳入计划依赖项高一层的位置。同一层的所有包可以一起发布,只要它们下方的各层已发布。
- 变更集计划 — 传入已变更包的名称后,计划将恰好涵盖这些包以及所有直接或传递依赖于它们的包。其余包会列为
excluded,指向这些包的依赖项不会限制顺序——它们已发布。 - 循环检测 — 如果纳入计划的包无法排序,publishorder 不会报错或猜测,而是返回
ok: false,并给出确切的循环:按照名称和依赖项升序进行深度优先搜索,返回找到的第一个循环,并将组成该循环的包列出(依赖自身的包会报告为仅包含一个名称的循环)。完全位于排除包之间的循环不会阻止变更集计划。
依赖图必须完整:依赖项或变更条目中引用了未提供的包,会导致验证错误;包名称缺失或重复,以及字段类型错误也会导致验证错误。错误会指出出错路径(例如 packages[1].dependencies[0] references unknown package "core"),并且不会生成部分计划。计算是纯本地的:不使用网络、不读取配置,也不会读取你传入的输入以外的任何文件。
CLI
npx @reneturcios/publishorder plan --input args.json
npx @reneturcios/publishorder --version
args.json 包含完整的参数对象:
{
"packages": [
{ "name": "core", "version": "1.4.1" },
{ "name": "lib", "dependencies": ["core"] },
{ "name": "app", "dependencies": ["lib"] }
],
"changed": ["core"]
}
每个包的 dependencies 默认为 [],version 为可选项,且不会影响顺序;changed 整体为可选项。计划以 JSON 格式输出:
{
"ok": true,
"order": ["core", "lib", "app"],
"levels": [["core"], ["lib"], ["app"]],
"cycle": [],
"included": ["app", "core", "lib"],
"excluded": []
}
退出代码:成功时为 0,运行时错误时为 1(包括无法读取或无效的输入文件,或无效输入),用法错误时为 2。
MCP 服务
npx -y @reneturcios/publishorder mcp
MCP 客户端配置:
{
"mcpServers": {
"publishorder": {
"command": "npx",
"args": ["-y", "@reneturcios/publishorder", "mcp"]
}
}
}
工具
-
plan_publish_order— 根据依赖图规划 monorepo 发布顺序。packages(数组,必填,至少一个元素)— 包对象,格式为{name, dependencies?, version?};name在集合中必须唯一,每个dependencies条目都必须指向另一个已提供的包changed(字符串数组,可选)— 提供此项时,计划将涵盖这些包以及所有传递依赖于它们的包
返回
{ok, order, levels, cycle, included, excluded}。
Docker
docker run -i ghcr.io/cloudcorprecords/publishorder
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/publishorder plan --input /w/args.json
开发
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
许可证
MIT — 版权所有 (c) 2026 Rene Turcios
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。