ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

dsh-routing-suite 扁平化迁移指南:从 submodule 到直接文件模式的结构重构与安装变更

dsh-routing-suite 扁平化迁移指南:从 submodule 到直接文件模式的结构重构与安装变更 dsh-plugin人工智能大模型AI 技能/插件提示工程AI Agent【免费下载链接】dsh-routing-suitedsh-routing-suite — injector router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).项目地址https://gitcode.com/gh_mirrors/ds/dsh-routing-suite点击查看免费下载本文基于 docs/FLATTEN-MIGRATION.md 撰写。该文档记录了 dsh-routing-suite 自refactor/flat-submodules起将嵌套仓库submodule模式重构为仓库内直接文件模式的全部要点新旧目录结构对比、克隆与安装方式差异、重型数据边界、测试验证方式、发布红线与回滚路径。读完本文你将掌握迁移后的仓库布局、无需--recurse-submodules的全新克隆方式、平铺后的预设安装目录、以及如何规避重型数据误入 git 与在迁移分支上误打 tag 的风险。迁移背景为什么要做扁平化在refactor/flat-submodules分支之前dsh-routing-suite 采用嵌套仓库submodule模式仓库顶层通过.gitmodules引用两个独立子仓库dsh-routing-suite/ .gitmodules injector/ ← submodule (dsh-super-injector) preset/ ← submodule (dsh-router-standard)submodule 模式存在明显的使用摩擦克隆门槛高拉取仓库必须附加--recurse-submodules否则injector/、preset/两个目录是空的路径易出错submodule 的检出根与仓库内其他目录层级不一致预设装配时经常出现preset/preset之类的多余嵌套版本割裂组件的版本演进依赖各自上游仓库的提交状态与本仓库主线的演进不同步。重构后的直接文件模式本分支将两个上游组件的内容直接落入仓库普通目录彻底移除 submodule 依赖dsh-routing-suite/ .gitignore LICENSE injector/ ← 普通目录dsh-super-injector 内容tracked files preset/ ← 普通目录dsh-router-standard 内容tracked files router-standard/ router-spec/ router-react/ ← 平铺可直接复制安装无 preset/preset 额外嵌套 docs/ probe/(仅 tracked) scripts/ README.md ...从当前仓库的实测看git ls-files确认根目录下已不存在.gitmodules文件injector/与preset/均为被 git 普通跟踪的目录其中injector/含 16 个被跟踪文件、preset/含 49 个被跟踪文件。原文档记载的数字injector 15 个、preset 93 个与当前镜像统计略有出入可以推断这是镜像裁剪或后续提交演进导致的差异但不影响子模块已被移除、组件内容直接入库这一核心事实。使用差异克隆与安装的三大变化1. 克隆不再需要--recurse-submodules迁移前git clone --recurse-submodules https://github.com/yjh051108/dsh-routing-suite.git迁移后普通克隆即可获得完整内容git clone https://github.com/yjh051108/dsh-routing-suite.git这一变更消除了 submodule 检出的两个常见故障点网络不佳时子模块拉取失败导致目录为空、以及子模块指针与主仓库 commit 不匹配导致的dirty checkout。2. 预设安装目录已平铺迁移后预设的安装路径为preset/router-standard见 preset/router-standard/目录内直接包含agent.cordis.yml、preset.yml、router-bootstrap-v34.mjs、router-core-v34.mjs等装配所需文件不再有多余的preset/preset嵌套可以整体复制后按 preset/README.md 的说明装配到 DSH profile。3. 版本演进策略调整组件版本injector / router-standard随本仓库统一演进上游独立仓库dsh-super-injector、dsh-router-standard仍保留用于独立发布、镜像与归档具体时机待定。从 injector/package.json 可以看到上游仓库的repository.url仍指向各自的独立 GitHub 仓库说明扁平化只是入库形态的变更并未切断上游独立仓库的存在。数据边界重型 probe 数据保持 gitignore扁平化后preset/probe/下携带了多类重型数据deepseek-v4-pro-weights模型权重类数据dsh-2020-dataset数据集results实验结果sessions会话记录deepseek-tokenizer分词器这些数据保持 gitignore不会进入 git。仓库根 .gitignore 已补充同类忽略项防止误提交具体条目如下node_modules/ *.log .tmp/ # flattened preset heavy probe data (keep out of git) preset/probe/deepseek-v4-pro-weights/ preset/probe/dsh-2020-dataset/ preset/probe/results/ preset/probe/sessions/ preset/probe/deepseek-tokenizer/这意味着克隆仓库后preset/probe/下这几类数据目录是空的需要数据时得通过其他渠道如上游发布物获取而不是依赖 git 分发。这也解释了为何git ls-files preset只统计出 49 个文件——大量重型数据文件被忽略规则排除在版本控制之外。测试与 CI扁平化后的验证方式本地验证2026-08-25 记录迁移后的仓库使用 Node 直接运行自检与单元测试验证结果如下# 1. 预设自检脚本 node preset/router-standard/router-bootstrap-v34.selftest.mjs # → SELFTEST PASS # 2. 路由单元测试 node --test preset/router.test.mjs # → 26/26 pass以上两条命令在当前仓库均有对应实现佐证preset/router-standard/router-bootstrap-v34.selftest.mjs 是一个零依赖的静态源码自检脚本它直接读取同目录下的router-bootstrap-v34.mjs与agent.cordis.yml源码文本用 30 余项断言检查引导文案拼接、硬门控restrictLift、二级工具目录、压力释放工具是否已撤除等关键实现是否在场脚本末尾逻辑为存在失败项时输出SELFTEST FAIL并以退出码 1 结束全部通过时输出SELFTEST PASS——这与文档记载的验证输出完全一致preset/router.test.mjs 采用 Node 内置测试运行器实测包含 26 个test(...)用例与文档记载的26/26 pass吻合。CI 状态.github/workflows/ci.yml暂未推送文档明确说明.github/workflows/ci.yml尚未推送原因是推送所用的 GitHub tokenOAuth App缺少workflowscopeGitHub 会直接拒绝创建 workflow 文件。模板保留在D:\dsh\prep-public\workflows\维护者本地路径待 token 授权后补充。这也提示读者当前仓库尚无线上 CI 流水线验证以本地命令为准。发布红线迁移分支不发布文档对版本状态给出了明确约束router-standard 当前处于研发线v1.19.1 / v34尚未发布本仓库只做结构重构与基建禁止基于本分支打 tag / 发 release发布时机由维护者另行决定。这与 preset/package.json 中的版本号互相印证dsh-router-standard的 version 为0.3.0同时目录内保留了一个发布物dsh-router-standard-0.3.0.tgz供直接装配使用而 injector/package.json 中dsh-external/dsh-super-injector版本为0.3.3。读者在使用本仓库时应当把它当作结构重构后的研发快照而不是正式发布线。回滚如何回到 submodule 形态如果扁平化重构需要撤销文档给出了两条路径# 路径一通过 revert 撤销合并提交 git revert merge-sha # 路径二切回 main若本分支尚未合并直接丢弃分支即可 git checkout main老版本仓库仍可回退到main之前的 submodule 形态。值得注意的是回滚到 submodule 形态后克隆命令需要重新加回--recurse-submodules.gitmodules与子模块指针会一并恢复。源码级佐证扁平化如何影响装配链路迁移不仅是目录形态变化也对安装与构建链路产生了连带影响以下几点可以从源码确认1. 根 package.json 统一了分发入口根 package.json 现在以dsh-external/dsh-super-injector的身份作为分发入口main指向./injector/lib/index.jsexports同时暴露根入口与./client子路径./injector/lib/client.js。dsh.bundle.patch指向./cordis.patch.yml。也就是说安装路径从先装 injector 子模块、再装 preset 子模块的两段式变成了从仓库根一次性装配的单段式这正是扁平化在包层面的落地。2. prepare 脚本支持 git/path 依赖的自包含构建根 package.json 的prepare钩子指向node injector/scripts/prepare.mjs。该脚本injector/scripts/prepare.mjs专门解决以github:/git依赖形式安装时仓库无构建产物的问题它优先使用本地安装的tsdowndevDependency否则回退到npx --yes tsdown构建产出自包含的lib/host client bundle不需要DSH_CHECKOUT、不需要源码 checkout。构建失败时脚本会主动以非零退出码中止——设计上明确坏掉的 lib/ 比清晰的报错更糟。这保证了扁平化后以 git 依赖方式装配 injector 依然可用。3. 独立安装手册仍然有效injector/INSTALL.md 提供了三种装配方式Release 包安装 / git 装配 / 手动 patch其中方式 Bgit 装配正是为扁平化后的仓库形态设计的——dsh plugin --profile web add github:yjh051108/dsh-super-injector即可构建由已提交的prepare脚本自动完成。安装后的验证命令也一并记录在手册中dev_plugin_status → 看到 dsh-super-injector active且操作统计面板正常 dev_self_test → 一键回归 8 项期望全部 PASS总结dsh-routing-suite 的扁平化迁移是一次典型的降低装配摩擦的结构重构移除 submodule → 组件内容直接入库 → 根包统一分发。对使用者而言收益是克隆命令简化、预设目录平铺、版本随主线统一演进代价则是重型 probe 数据不再随 git 分发、以及迁移分支暂时不能作为发布线。本指南所引用的结构、忽略规则、自检与测试脚本、package.json 配置均可直接在当前仓库对应路径下复核供后续维护与二次开发参考。赞分享dsh-plugin人工智能大模型AI 技能/插件提示工程AI Agent【免费下载链接】dsh-routing-suitedsh-routing-suite — injector router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).项目地址https://gitcode.com/gh_mirrors/ds/dsh-routing-suite点击查看免费下载相关推荐Elsa Core 授权模型迁移指南从扁平 verb:resource 到结构化 {resource}:{verb}Elsa Core 授权模型迁移指南从扁平 verb:resource 到结构化 {resource}:{verb} Elsa Core 的权限词汇表发生了根后端工作流自动化流程编排低代码OpCore-Simplify 使用指南为黑苹果自动生成可用的 OpenCore EFIOpCore Simplify 使用指南为黑苹果自动生成可用的 OpenCore EFI OpCore Simplify 是一个面向黑苹果的 OpenCore开发工具CLIVutronMusic v3.3.0 插件化架构迁移从网易云直连到多平台插件平等的重构实战指南VutronMusic v3.3.0 插件化架构迁移从网易云直连到多平台插件平等的重构实战指南 本文以 VutronMusic 官方迁移状态文档 docs/桌面应用音视频前端上一篇用 OpenDesign 复刻 IBM Carbon 风格设计系统从 DESIGN 规范到 tokens.css 的工程落地下一篇使用 esp-iot-solution 的 usb_device_uvc 组件将 ESP32 打造为 USB UVC 摄像头设备创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进