Replies: 18 comments
|
我们把 dsh-web 的约 20 个社区插件( 0.1.2-alpha.1:cohort 还没发 npmalpha.1 是有意不发 npm 的 preview,registry 的
固化成 skill 的话,这部分的核心是:先确认目标 cohort 是否已发布;把 SDK 删包/删面清单当迁移矩阵的输入;客户端产物保持单一,靠运行时解析 cohort 表面;注入服务漂移要么探测要么拿掉,别硬等;网关调用按描述符布局组参,fakes 编码同一张表。 0.1.2-alpha.2:已发布,坑换了方向alpha.2 发到了 npm(
不变的部分:客户端产物仍是双 cohort 兼容,没消费 alpha.2 独有的运行时面,跑在 alpha.1 宿主上没问题;上一轮的 store shim 和 给 skill 的建议:升级已发布的 cohort 时,重点不再是「怎么装进未发布 cohort」,而是 peer 裁剪、cordis 双副本、seam 迁移,和外部插件的存量绑定。 我们是 dsh-web 社区插件仓库(zhu1090093659/dsh-web)。每条的决策记录和验证细节在仓库的 .agents/notes/implemented 和 docs/archive,可以按需展开。 |
|
近期再琢磨一个形态互补的东西,流程随后整理出来参考,是个无人值守的迁移 bot(GitHub Action):插件 repo 装一个 workflow,监听 dsh-v* release,自动完成迁移,树有变更才开 Issue + PR,稍后转public,reply会附上详细地址和信息 |
|
我们也做了一版,思路和 @t4wefan 贴的 oh-my-dsh 那份很接近(版本卡片 ≈ 我这里的 结构:方法在 事实表是怎么来的:不是读 changelog,是逐包 diff 了 几条可能对楼上几位也有用的核对结果:
@zhu1090093659 你那 10 条里 #4(cordis 等 0.1.2 rc 出来我会跑 |
DSH 0.1.1 → 0.1.2 插件迁移实录:6 个插件的升级过程与踩坑记录
0. 迁移对象与结果
结论先行:真正的工作量集中在「读会话快照 + 注册 slot」这两类插件;纯 DOM/自包含插件几乎零成本。官方保留的 1. 升级环境准备# 0.1.2-alpha.1 不在 npm(npm latest 是 0.1.1-rc.2),需要源码构建:
git clone https://github.com/deepseek-ai/deepseek-harness
git checkout dsh-v0.1.2-alpha.1
pnpm install && pnpm run build
# 全局 dsh 指到源码构建产物;动手前先备份 ~/.dsh(profile/会话/凭据都在里面)插件仓库的 devDependencies 用 link 指到 DSH 源码的包(如 2. 五个核心破坏性变更(附前后对照)2.1
|
|
dsh-webui 是一个完全不修改 DSH 源码、 投入到了哪里
实际功能与价值1. 对话体验(把「用起来舒服」做到极致)
2. 模型与供应商(把模型能力用对)
3. 技能与工具
4. AI 浏览器
5. 自动化与团队编排(最重的两块)
6. 本地记忆(把「长期记忆」做成产品)
7. 用量与统计
8. 文件与工作区
9. 外观与系统
为什么这些对官方有参考价值
给官方的礼物:DSH 版本号升级技能包🔗 https://github.com/statem-li/dsh-version-upgrade-0.1.1-to-0.1.2 一个面向插件作者(不是插件用户)的 Agent 技能集合包:把插件 repo 从
开放信息
|
|
我来抛砖引玉一下,结合自己的兼容经验做的,希望能帮上忙。 https://github.com/Nothing1024/dsh-upgrade-compat 覆盖个人痛点主要是:
思路如下(AI辅助生成) Phase 1: 版本差异检测 |
楼里已经有很好的具体 API 经验和扫描脚本;我们想补充的是一套能长期容纳这些事实的通用骨架。为此,我们用 oh-my-dsh 的 我们的结构
实际执行链可以概括为: 我们特别想避免的四个误区
forward test 带来的实证这次真实迁移命中了纯 API diff 之外的问题:Cordis 基础版本需要随 cohort 对齐;settings 从独立函数迁到 service seam;Profile 生命周期与异步边界变化;domain event ownership 移动;内置 preset root 改变 ID 优先级;warm compiler cache 会掩盖声明变化;workspace 成功会隐藏 tarball 中指向旧 sibling package 的依赖图。 当前 alpha 分支已经通过 install、cold typecheck、全部 workspace tests、build、真实入口 smoke、composition 和边界检查。empty-consumer 安装没有被虚报为通过:它发现两个产品包仍需先获得协调的 prerelease 版本,才能证明候选 tarball 不会回落到 registry 中旧的 sibling package。 可直接参考的材料如果官方开始制作 skill,欢迎直接拆用主流程、contract-surface 分类、validation matrix、evidence-card 模板和 prerelease version card;其中 prerelease 事实应继续针对最终 RC 发布包逐项复核。 |
|
我们这边是从「先声明、后验证」的角度做插件升级适配的,也结合 0.1.1 → 0.1.2 做了一次完整的实际升级,分享几条观察。 1. 挂点声明 + 树差检测。 把插件实际依赖的官方路径先声明成挂点(例如 2. 规则与事实绑定。 目前的 check 规则同时保留「实测证据(源码 file:line)+ 上游挂点」。升级以后,可以直接根据命中的挂点定位需要重新验证的规则。 这和 3. 一些「静态全绿、运行时才暴露」的情况。
所以目前升级验证里有一条经验比较重要:
4. 一个 DSH 比较特殊的安全问题。 在 DSH 上开发或升级 DSH 插件时,开发对象本身就是当前运行宿主。重启、终止 DSH、修改 harness 源码、删除当前 preset、卸载正在使用的插件,都可能直接影响正在进行的开发会话。 因此升级 skill 里也许值得明确一个前提:
如果是,最好把这类操作交回人工;涉及「停 → 启」的操作,也尽量保持原子性。 5. 一个已经实际跑通的例子。 我们维护了一个小型的 DSH 插件工程化工具 dsh-plugin-maker,目前主要提供 scaffold、contract check、impact analysis 和接盘体检。 这次 Maker 自身已经完成了从 0.1.1 → 0.1.2 的升级适配:
到这里,我们实际跑通了一条完整的链: 而且这套能力现在并不只服务 Maker 自己生成的插件, 所以目前更希望看到的,可能不是一个「官方自动升级所有第三方插件」的方案,而是更机器可读的 compatibility / impact surface,例如: 这样第三方生态可以各自决定怎么迁移、怎么测试、怎么修复。 另外也建议继续区分:
和
因为这两件事在实际升级里并不总是一回事。 很好奇官方后续会不会考虑提供类似 upgrade impact / compatibility surface 的机制,或者目前更倾向于完全由插件作者自己维护这部分迁移? |
|
oh-my-dsh基于这份征集建了迁移 skill 仓库: |
|
各位开发者们好,我也同意@yangyang0507 的观点,开发者们这一个月一直在追官方版本的更新,类似西西弗斯一样不停推着石头。 所以我盯的不是 0.1.2 这一版,是升级本身。skill 里我没放变两版本变更单,只放一种程序化的使用技巧:把每块插件单独放进空框架起一遍,缺谁由官方启动审计点名。判断不经过llm判断 ——同一版跑很多遍结果都一样,新版本dsh重跑新的清单。我的关注点:是落在一块块隔离测试,合法在cordis基座上程序化的跑。 然后这个skill就有了优雅的跨版本的能力。复用官方仓库已有函数和教程思路,看到@tianyicui 号召分享一下,也希望社区开发规范立起来,目前函数的适配性我还在更新完善,大家有兴趣可以看下: |
|
A concrete alpha.2 migration result from DSH Live Voice PR #51, now merged, adds two checks that may be useful in an official upgrade skill:
The Live Voice gate used a frozen install, peer-graph check, 241 tests, Node 22.19/current hosted CI, the complete official alpha.2 source build, official CLI packed-plugin installation, and an authenticated Web workspace/Session plus deterministic one-turn fake-provider composition against exact upstream commit That proof does not include credential-backed Qwen, physical audio devices, BFCache, or packaged Desktop. The broader lesson is to verify the published type graph and exact installed runtime composition, not only imports and unit tests. |
|
感谢 @tianyicui 发起征集!我们基于这个讨论建了一个社区 skill 仓库,并用 docker 容器做了插件升级全链路验证:oh-my-dsh/dsh-plugin-upgrade-skill 几个对官方整理 migration guide 可能有用的回馈:
完整验证报告(四幕过程、新旧宿主对照表、可复现的容器步骤、插件源码附录): 这个 skill 的核心原则是"先判定平面再迁移",平面判定错误是迁移失败的第一大原因。希望对官方有帮助 🙏 |
|
一天之内楼里出现了 5 个独立 skill 仓库 + 3 份实战报告,方案已经不缺了,缺的是合流——0.1.2 rc 出来时每家各自再核一遍同样的 API,就是重复劳动了。 提议:以 oh-my-dsh/dsh-plugin-upgrade-skill 为社区合流点。 理由:组织仓库而非个人号(旁边就是 我先带头:PR #37 已提,把我们仓库里核对出的东西并进去了——
如果各位也愿意把互补的部分 PR 过去,这份东西很快就完整了:@zhu1090093659 的运行时坑单(跨 cohort shim、 我们自己的仓库(william-jin-cmu/dsh-plugin-upgrade)保留 scripts 层继续维护: |
|
DSH Doctor 帮助 Agent 诊断和升级 DeepSeek Harness 插件:识别新旧版本之间的 API 变化,修改可以确定迁移的代码,提示需要开发者判断的语义变化,重新构建并验证插件。 基于doctor CLI升级而来,普通用户可以用来诊断DSH无法启动问题,开发者可以用来帮助自己升级插件。https://github.com/bruc3van/dsh-doctor |
DSH 0.1.1 → 0.1.2 插件升级 Skill 官方设计建议
1. 背景:一次真实的 0.1.1 → 0.1.2 兼容恢复我们在把本地 DSH 及其扩展升级到 1.1 遇到的不兼容问题
1.2 我们如何解决
1.3 实际验收结果恢复完成时,我们不仅检查了首页:还验证了新建会话与标准模式、四个侧栏入口无新增控制台错误、定时任务及运行历史可读、多模型页面能加载模型、项目看板能读取真实会话,以及外部客户端 HTTP 轮询和 WebSocket 均正常。任务数量、运行记录和数百个既有会话均与切换前基线一致;这些结果只用于证明本次数据保全,不是通用产品指标。 1.4 从案例中沉淀出的经验
正因为一次升级可以同时改变“插件代码、组合配置、浏览器契约和外部协议”,我们希望把这套恢复经验上升为官方可持续维护的插件升级方法,而不是只记录本次补丁。 2. 核心建议官方 Skill 不应是一份固定的 API 搜索替换清单,而应是一套“稳定迁移流程 + 按版本维护的事实卡 + 确定性检查工具 + 真实运行验收”。其目标不是让 Agent 尽可能多改代码,而是识别插件实际依赖的契约面,只修改被目标版本影响的部分,并证明迁移后行为仍然正确。 建议将两个任务明确拆开:
3. 推荐的 Skill 结构
主 Skill 建议支持三种模式:只读影响评估、单一目标版本迁移、跨版本兼容。只读请求不得自动安装依赖或修改代码;进入迁移前应先输出命中文件、拟采用的版本事实卡、验证方案和回滚范围。 4. 插件风险分级参考社区提出的“先按插件类型分流”,建议进一步按契约耦合程度分为四级:
风险等级应由扫描结果决定,而不是由插件作者自报。一个插件命中多个类别时按最高等级处理。 5. 强制迁移流程
6. 0.1.2 必须覆盖的契约变化Web Client 与 Slot
本次实证中,旧 wrapper 未转发 0.1.2 新增的 Host、Remote 与外部通道
7. 官方完成标准
“可以编译”“插件能 activate”“首页返回 200”都不能单独作为迁移完成证据。 8. 建议 Core 同步提供的能力P0:随 0.1.2 RC 提供
P1:降低生态升级风险
P2:持续维护
9. 发布与维护原则
10. 参考依据 |
|
楼里 17 条发言我逐条读完,连同自己插件从 0.1.1 直跳 alpha.2 的实测,整理成了一个可跑的 skill:https://github.com/TT-Wang/dsh-hop (MIT)。结构上没有新发明,就是大家已经收敛的「稳定流程 + 按版本事实」。里面有两块楼里还没有的。 一个是幽灵宿主体检脚本。源码检出原地升级后,跑着的老进程还在执行内存里的旧代码,磁盘上 另一个是外部客户端/bot 车道。启动 token 每个进程换,但换来的 cookie 用盘上密钥签名,宿主重启后照样能用,无人值守脚本兑换一次就够。agent 中途提问的 维护这块我的想法: 数字事实会过期,方法过期得慢得多。所以 skill 里把两者分开:幽灵体检、按面分行、验证阶梯是方法,跨版本不动;包裹键、schema 号、cookie 期限是数字,每条标出处——一手实测、本机核对、楼里实录,三档。别人接手时知道哪条能直接用,哪条得先复核。楼里 17 条发言每条进了哪、算哪档,references/community-map.md 里有全表,官方取材请向原作者致谢。 数字事实还要能重新生成。 有了这两条,新版本发布日的动作是固定的:全部数字事实先降档为「待复核」;跑再生命令拿新候选;每条候选有人在真宿主上撞过才升回「一手」,没人撞的留在待复核档;幽灵体检照旧第 0 步。这四步写在 skill 的「下一跳怎么维护」一节。 合流的事:幽灵体检脚本和 wire/bot 配方,合流仓要的话我直接 PR 过去。长期看最省事的还是 @goatliamia 和 @FlytoMAYDAY80 提过的,官方随版本发机器可读的 changed surfaces;发出来之前,社区能自己做的就是把再生命令维护住。 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
我们考虑官方搞一个面向插件作者的(不是面向插件用户的),如何把自己插件 repo 里的代码,从 0.1.1 升级到 0.1.2 的 skill。
有没有人搞过,我们可以借鉴一下?会致谢的。
All reactions