跳转至

26 · 主分支、rc.2 与 Python 发布面的差异

26.1 先把版本坐标定住

源码精读主版本:main da00f7f5358f2949383b35c14f548bc20187d80c。可运行实验:dsh-v0.2.0-rc.2 / npm 0.2.0-rc.2 / 639ed015397290b3745d163aafe02ffee4aa3f84。研究时PyPI SDK/runtime latest:0.1.5rc1。GitHubrelease的prerelease标记与npm dist-tag是两个独立发布维度,latest指RC不代表正式稳定版。

两个Git快照的diff统计为 3925个文件变化、50228行新增、32381行删除。这是文本diff统计,不表示每个改动都是执行逻辑;大量为README/i18n/配置/notes与invariant companion删除。完整diff路径与统计公开在研究artifact,便于继续追踪。

26.2 课程涉及的主要行为差异

模块 rc.2 main快照 写代码时的处理
invariant伴随插件 bundle和一些包仍挂载/导出 大量移除invariantservice与companions 不给main示例抄rc.2 invariantimports;实验CLI保持自身发布tree
profile外部包解析/HMR 已有linkedRoots/LinkedRoot 新增ProfileRuntimeResolution.computeLatestResolution()/PluginPackages.refresh()与manifest/HMR协调 用当前源码章节讲main,实验使用rc.2公开SDKprofile
schedule模型tools schedule包内tools实现 独立tool-schedule package消费者 新main引用tool-schedule,不能假装rc.2也有相同包路径
fswrite/edit参数描述 原描述 file_path描述增加先输出该字段指引 不说这是mutationobserver修复;两边写完后的同步observer仍可失败
hook/mod集成 已有命令hooks,无Claude JS Mods包 命令hooks主体延续,新增claude-code-mods及UIbridge main新增Mods不能直接按rc.2npm安装;payload按真实字段,未真实外部E2E
coreloop/SDK主干 tag包含此路径 所研究的关键契约基本延续 仍核类型与配置,不凭相似README混用版本
会话逻辑格式 types/writer已V4 types/writer仍V4 两边都不能按滞后文档误称仅V3

此表是与课程功能相关的变化解释,不代替完整3925路径diff。新增功能还应核对对应profile是否真的挂载、已有settings/session怎么迁移;仅看package目录不能判定默认行为。

26.3 会话版本记录的一个真实陷阱

docs/session-format-status.md中的latestReleasedVersion3及旧alpha证据不应优先于tag内实际SessionHeader/types与writer。本次rc.2集成正常关闭后读到 session.v4.jsonl,固定rc.2源码也定义当前V4。

因此准确写法是:当前逻辑/写入格式V4,两快照均如此;仓库的某份发布状态记录滞后,不能据它把V4写成“尚未在任何发布版出现”。格式迁移与numericallyhighestcanonicalgeneration选择见16章,并不是修改文档数字就完成迁移。

主分支Sessiontypes · rc.2Sessiontypes

26.4 Python实验保持同一实际运行时

研究时Python发布面未同步到npm rc.2,所以课程没有直接 pip install latest再默认拉它的runtime来冒充rc.2。五个PythonSDK文件从rc.2tag原样复制、逐文件SHA校验,公开dsh_bin传rc.2npmCLI,这一方案是公共API已有能力,未增加私有协议或compatibilitylauncher。

TS客户端env替换而Python合并父env、TSresult无finishReason而Python有finish_reason,都按这个SDK快照描述。协议serverInfo.version0.0.1也不用于判定npm版本。更新时要同时核SDK源、launcher/profile、wirecontract与测试,不能只改requirements中的一个字符串。

26.5 更新的方法

git -C upstream fetch origin --tags
git -C upstream rev-parse origin/master
git -C upstream diff --name-status 639ed015397290b3745d163aafe02ffee4aa3f84 da00f7f5358f2949383b35c14f548bc20187d80c
npm view @deepseek-ai/dsh dist-tags --json

这些命令说明检查途径。课程固定工作树不随fetch自动checkout新版;最终复核记录保存远端查询时间、remoteSHA与npm/PyPIlatest。若差异已出现,先列出变动功能和影响,再决定新课程版本与实验依赖,不把旧引用直接换成main浮动URL。

26.6 为什么版本差异是设计课的一部分

一套everything-is-a-plugin运行时会同时演进interface、provider、consumer、profilebundle、产品UI和数据格式。变更一个包可能需要调整依赖注入与配置;删除一个invariantcompanion不代表目标行为被删除;抽取scheduletools不代表任务运行的持久语义已改变。

你自己的Agent要把相同原则用在业务上:固定可部署版本,记录tree和证据,区分接口变动与部署组合变动,为实际风险写边界测试。准确的设计理解最终要落到“用哪个版本、加载哪个provider、发生什么副作用、用什么结果验收”上。