mcpField
P
publishorder

publishorder

本地服务
github.com/CloudCorpRecords开发工具01 周前更新

关于 publishorder

publishorder 是本地命令行工具和 MCP 服务,可根据依赖图规划 monorepo 包的发布顺序。它支持分层、按变更包制定计划和报告环路,并保证排序确定。

主要功能

  1. 01计算确定性的发布顺序
  2. 02按依赖层级分组包
  3. 03规划变更包及其依赖者
  4. 04报告依赖环路
  5. 05验证图输入

适用场景

  1. 01规划 monorepo 的发布顺序
  2. 02仅发布变更包及其依赖者
  3. 03查找阻碍发布计划的环路

MCP 相关

提供 `plan_publish_order` MCP 工具。客户端传入包依赖关系和可选的变更集合,结果包含顺序、层级、环路以及纳入或排除的包。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-publishorder": {
"command": "npx",
"args": [
"-y",
"@reneturcios/publishorder"
]
}
}
}
启动命令npx -y @reneturcios/publishorder

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/publishorder0.1.0
ocighcr.io/cloudcorprecords/publishorder:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
changedarray否已更改的软件包名称;指定后,计划将准确涵盖这些软件包及所有传递依赖于它们的软件包(可选)
packagesarray是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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。