GSD Core 的 npm 包更名实录:迁移到 @opengsd 作用域与包身份治理

发布时间:2026/9/27 23:54:03
GSD Core 的 npm 包更名实录:迁移到 @opengsd 作用域与包身份治理 【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载本文以仓库归档的 changeset 片段 .changeset/archived/opengsd-org-rename.md 为主体梳理 GSDGit. Ship. Done项目将 npm 包整体迁移到opengsd作用域的历史变更旧的get-shit-done-redux与gsd-redux/sdk如何改名、为何伴随 1.0.0 大版本跳变、CLI 命令名如何保持不变以及当前仓库如何通过“单一身份来源”机制治理包名。读完本文你将掌握 scoped npm 包迁移的完整命令对照、版本策略以及在本仓库源码中定位与校验包身份的实操路径。变更背景一次影响安装命令的整包改名.changeset/archived/opengsd-org-rename.md记录了一次Rebrand品牌/标识更名型变更其核心动作是将两个 npm 包从旧名称迁移到新的opengsd组织作用域scope下。对于使用 npm 的开发者来说作用域scope前缀是包归属的命名空间opengsd/xxx意味着包由 OpenGSD 组织统一发布作用域的切换会直接改变npm install、npx、import时书写的包名属于需要用户手动跟随的破坏性变更。从当前仓库的档案可以看到这条更名线的最终走向项目如今以opengsd/gsd-core为唯一正式包名见 package.json 的name字段而更名前的旧包get-shit-done-cc/get-shit-done-redux属于被归档的历史版本线。文档 docs/RELEASE-NOTES-LEGACY.md 明确写道旧版本线1.0.0→1.42.x及预发布版本已“frozen冻结”当前opengsd/gsd-core的版本号从1.0.0重新起算——这正是 changeset 中“major bump主版本跳变”的直接体现。包名对照与核心变更项归档片段给出的变更可以拆成四组事实逐一说明如下维度变更前变更后说明主 CLI 包get-shit-done-reduxopengsd/get-shit-done-redux无作用域 → 归入opengsd作用域SDK 包gsd-redux/sdkopengsd/gsd-sdk作用域从gsd-redux迁移到opengsd版本号旧版本线1.0.0major bump两个包都以 1.0.0 重新起算CLI 二进制名get-shit-done-redux、gsd-sdk、gsd-tools保持不变命令名与包名解耦用户 shell 习惯不受影响这份对照表是整篇变更的核心包名变了、版本重置了但命令行入口没有变。这意味着升级时脚本和文档中所有npm install/npx引用需要更新而已安装的 CLI 调用方式例如gsd-tools command可以原样继续使用。安装命令的迁移从裸包名到 scoped 包名归档片段明确给出了新旧安装命令的迁移示例# 迁移前旧包名 npm install -g get-shit-done-redux # 迁移后scoped 包名 npm install -g opengsd/get-shit-done-redux对于 scoped 包npm 有两条等价路径# 全局安装 scoped 包 npm install -g opengsd/get-shit-done-redux # 免安装直接执行临时拉取最新版 npx -y --packageopengsd/get-shit-done-reduxlatest -- get-shit-done-redux --claude后一种npx形式正是当前仓库 gsd-core/bin/lib/package-identity.cjs 中formatManualInstall/manualInstallCommand函数生成的安装命令模板源码中拼装npx -y --packagepackageNamelatest -- binName ...可以看作这次改名工程的“落地工具”。配套的验证手段同样重要。升级后建议立即确认当前安装的包身份与版本# 查看当前全局安装的 scoped 包版本 npm ls -g opengsd/get-shit-done-redux # 查看 npm dist-tag 指向当前 opengsd/gsd-core 线也适用 npm dist-tag ls opengsd/gsd-core为什么伴随 1.0.0版本线重置的语义归档片段用括号注明两个包均以1.0.0major bump发布。从 VERSIONING.md 可知项目遵循 Semantic Versioning 2.0.0并规定MAJORx.0.0用于对配置格式、CLI 标志或运行时 API 的破坏性变更发布分latest稳定版与next预发布两个 dist-tag用户不会被动拿到预发布版本。包名作用域切换意味着旧包名在 npm registry 上成为历史用户需要显式改用新包名才能继续安装更新这天然构成一次“对使用方式的破坏”因此重置为1.0.0是语义化版本框架下最清晰的表达。仓库文档 docs/RELEASE-NOTES-LEGACY.md 也特别提醒由于新版本线复用了1.0.0、1.1.0等低位版本号阅读旧档案时必须把旧版本号理解为已退役的get-shit-done-cc/get-shit-done-redux线避免与当前版本混淆。CLI 二进制名不变包名与命令解耦的设计changeset 特别强调get-shit-done-redux、gsd-sdk、gsd-tools三个 CLI 二进制名保持不变。这是 npm 包迁移中容易被忽略、但收益明显的一点——package.json的bin字段决定安装后暴露哪些命令它与包名是两套独立标识。包名改变只影响“如何安装”二进制名不变则保证“如何调用”零迁移成本。这一设计在当前仓库中被完整继承并进一步收敛根 package.json 的bin字段同时注册gsd-core、gsd-tools、gsd_run、gsd-mcp-server等多个命令而 gsd-core/bin/lib/package-identity.cjs 作为“包坐标单一来源”集中导出packageName、binName、repoSlug、updateCacheFileName等身份信息供安装器、更新检查、运行时解析统一引用。仓库中的包身份治理单一来源与防漂移测试改名不是一次性sed替换关键在于让“包名”在仓库中只有一处权威定义避免散落各处的硬编码在后续迭代中再次漂移。当前仓库提供了三层治理机制1. 生成式单一来源。gsd-core/bin/lib/package-identity.cjs 由 scripts/generate-package-identity.cjs 从package.json生成文件头标注 “DO NOT EDIT”并以PACKAGE_NAME别名向后兼容旧消费方注释明确说明这是为 #516 时代消费方保留的兼容别名使已安装目录树中的合成 package.json 也能正确解析包名。2. 测试强制约束。测试 tests/package-name-single-source.test.cjs 做了两件事其一扫描bin/install.js、gsd-core/bin/**、scripts/*.cjs等运行时文件禁止在非注释代码行中出现硬编码的opengsd/gsd-core字面量其二断言身份模块导出的PACKAGE_NAME必须等于package.json的name。其文件头注释直言这保证了“未来任何改名都是一次文件变更one-file change”。这意味着本文所述的改名若再次发生只需改package.json并重新生成身份模块其余代码零改动。3. ADR 决策存档。更名后的 SDK 包边界后续被进一步退役架构决策 docs/adr/0174-retire-gsd-sdk-package-boundary.md 记录了opengsd/gsd-sdk包边界被移除、收敛为单一 TypeScript 源码树的过程归档片段 .changeset/archived/191-retire-sdk-package-seam.md 记录了删除sdk/、移除gsd-sdkshim/bin 发布路径的后续动作。这条演化链说明opengsd/gsd-sdk在本文所述改名后并未长期独立存在而是逐步并入主包——阅读旧文档时需注意这一点避免按已退役的包名安装。实践清单跟随一次包改名把本次变更的经验沉淀为可复用的操作清单适用于任何 scoped npm 包迁移盘点引用面搜索仓库内所有旧包名字面量package.json、文档、CI 配置、安装脚本确认每个出现位置。更新安装命令npm install -g old→npm install -g opengsd/new同时检查npx --package形式的免安装命令。确认 CLI 二进制名是否保留若保留则调用侧脚本无需改动只需在文档中标注“包名已变、命令不变”。执行大版本跳变作用域切换按 SemVer 属于破坏性变更以1.0.0重置版本线并明确latest/nextdist-tag 规则避免用户被动拿到预发布版本。建立单一身份来源将包名收敛到一处生成式模块如本仓库的package-identity.cjs并用测试禁止运行时代码硬编码包名保证下次改名仍是“一次文件变更”。归档变更记录在.changeset/中留下如 opengsd-org-rename.md 这样的片段——按 .changeset/README.md 的机制每个 PR 的用户可见变更都会沉淀为独立片段发布时自动合入CHANGELOG.md历史片段则归档保留以作 provenance来源追溯。小结opengsd-org-rename这次变更的完整图景是包名迁入opengsd作用域、版本以 1.0.0 重置、CLI 命令保持稳定而仓库以“单一身份来源 防硬编码测试 ADR 存档”承接了改名带来的长期治理需求。对于使用者最直接的行动是更新安装命令并核对已安装包的 dist-tag对于维护者package-identity.cjs与package-name-single-source.test.cjs构成了可复制的“一次文件变更完成改名”范式。后续的 SDK 包边界退役ADR-0174则进一步说明作用域统一之后包边界的取舍同样需要以决策记录的形式沉淀供后续演进参考。赞分享【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载相关推荐gsd-core 更新检查修复解析scoped 包名 opengsd/gsd-core 与 update_available 的正确实现gsd core 更新检查修复解析scoped 包名 opengsd/gsd core 与 update_available 的正确实现 导读 本文以 .cAgent Governance Toolkit 包身份迁移地图从 Microsoft 命名到 AAIF 基金会规范包身份的全生态迁移指南Agent Governance Toolkit 包身份迁移地图从 Microsoft 命名到 AAIF 基金会规范包身份的全生态迁移指南 本文是 AGTA人工智能AI AgentAI 安全治理策略引擎Agent 沙箱认证鉴权gsd-core 包身份缝Package Identity Seam修复 SessionStart 更新检查的构建期单一事实源gsd core 包身份缝Package Identity Seam修复 SessionStart 更新检查的构建期单一事实源 本文围绕 gsd core上一篇5分钟掌握Video Analyzer零代码实现智能视频内容理解下一篇Slang 编译器 IR 逐操作码回归套件解析generics-and-existentials 测试束的设计与实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考