Skip to content

Releases: Noob-stupid/dsh-connection-card-host

v1.0.76

Choose a tag to compare

@github-actions github-actions released this 12 Oct 09:17

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.76 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.75

Choose a tag to compare

@github-actions github-actions released this 12 Oct 05:36

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.75 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.74

Choose a tag to compare

@github-actions github-actions released this 12 Oct 04:41

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.74 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.73

Choose a tag to compare

@github-actions github-actions released this 10 Oct 08:55

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.73 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.72

Choose a tag to compare

@github-actions github-actions released this 08 Oct 03:13

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.72 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.71

Choose a tag to compare

@github-actions github-actions released this 07 Oct 10:03

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.71 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.66

Choose a tag to compare

@github-actions github-actions released this 03 Oct 20:38

npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.66 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。

v1.0.17 — 拖拽/连线可见性 + 落点判定 + apply 半装配修复(累积 1.0.4–1.0.17)

Choose a tag to compare

@Noob-stupid Noob-stupid released this 02 Oct 08:07

@noob-stupid/dsh-connection-card-host@1.0.17 — 本页 tgz 附件与 npm 上 1.0.17 的 tarball 是同一份字节
(实测 sha512 base64 与 registry dist.integrity 逐字相同)。

本次是一次性累积发布:1.0.4 – 1.0.16 从未发布过(npm 与 GitHub 都没有它们的制品)。
上一个是 1.0.3,因此 1.0.17 一次性带上这段的全部改动。

# npm(推荐,可锁版本)
dsh plugin --profile web add @noob-stupid/dsh-connection-card-host

# 固定版本:本页 tgz 附件
dsh plugin --profile web add https://github.com/Noob-stupid/dsh-connection-card-host/releases/download/v1.0.17/noob-stupid-dsh-connection-card-host-1.0.17.tgz
dsh plugin --profile web add ./noob-stupid-dsh-connection-card-host-1.0.17.tgz

1. apply 半装配修复

症状:卡片宿主没装上,连接消息被渲染成纯文本。

根因:apply() 只有末尾一个兜底 try/catch。前段一旦抛错 ——
现场证据是 tool "connection_send" is already registered —— 后面整段初始化被跳过,
于是"一个工具注册失败"直接让整个插件废掉。

处置:

  • 感知工具注册与 RPC 桥注册改为各自容错:失败记 audit 后继续往下走。
  • 每次 apply 打 6 位实例短标识(apply: entered [xxxxxx] / apply: THREW [xxxxxx]),
    日志里同形态的错有多条时能分清来自哪个实例、哪次装配。
  • 刻意未做"重复注册幂等":同 fiber 下重名冲突是 DSH 注册表语义,
    吞掉它会掩盖"确实装了两次"这一真问题。

2. 拖拽落点判定:两处互相独立的病因

两个 bug 症状一样(拖到会话行上不认),病因却不同:

  • (a) 只取栈顶 —— elementFromPoint(单数)只返回最上面那一个元素。
    皮肤/叠加层压在会话行之上时,拿到的永远是那层叠加层 → 改
    elementsFromPoint(复数)穿透,从栈顶往下找第一个会话行。
  • (b) 命中判据过严 —— 原来额外要求"命中的行在全量映射表里"。
    改为"命中的行 ≠ 映射全表";仍不中时做邻居夹逼,且只有唯一解才采用
    (避免猜错行,接错对象比不接更糟)。

3. 几何优先命中

新增几何优先路径:先用 rect 包含判定(指针坐标落在哪个会话行的矩形内)定位。

关键性质:它不参与命中测试 → 对 overlay、对 pointer-events: none 免疫 ——
即别人盖在上面也不影响几何判定。

优先级:几何优先 → 失败退 DOM 栈穿透 → 再失败 邻居夹逼。


4. 可定位诊断套件

从"看不出来"变成"照着读就知道卡在哪":

  • dragEnd 打印 xy=(…) + 指针下元素栈 + pe= 计算值 + 最近行 rect/距离。
  • reason 拆成两档:no-row-under-cursor(指针下压根没有行)
    与 row-unresolved(行在,但解析不出是哪一条)—— 这两个的修法完全不同。
  • 轨道打印 host[z/conn/idx] root[z/pos/tf] + 中点栈顶 3 层 + 线样式读数
    (含变量逐跳展开,任何一跳被皮肤改写都会现形)。

5. 轨道宿主与层级

根因:z-index 只在同一个堆叠上下文里可比。插件各槽位渲染在 DSH 不同容器里,
容器不同 = 堆叠上下文不同 —— 别人只要把自己那个容器排在我们之上,
我们元素自身 z-index 抬多高都赢不了。

处置:

  • 轨道挂专用宿主:div 追加为 document.body 的最后一个子节点
    ("排在最后"与"高 z-index"一样重要 —— 若应用根自身建了堆叠上下文,
    先挂上去的 body 子节点仍会被盖住),与槽位结构彻底解耦。
    两条线共用一个宿主,层内用 z-index 排(轨道 9998 / 拖拽线 9999)。
  • 两处遮挡诊断的盲点已修:pointer-events: none 的元素会被
    elementsFromPoint 跳过,于是"测量栈"根本看不到自己 →
    测量瞬间临时放开 pe(pointerEvents='auto')取栈,finally 恢复
    (异常路径也不会留下脏状态)。

6. 可见性:一场走到撤回的排查(如实记录)

症状:线画出来了,但看不见;装 web-ui-skin-center 时必现,关掉就正常。

根因:两条线借的是**「文字色」令牌** --dsw-alias-label-primary。
皮肤把它设成 #dbe2f2 这类浅值 → 白线落在亮壁纸 = 隐形。

中间过程(已被撤回,此处存档):一度改用**「中间调」自有令牌**
--ccr-rail-color / --ccr-drag-color,并给线加 7px 双向晕试图"加粗显现"。

用户裁定:「我们只是解决怎么显现,并不是颜色问题!」、「这个拉线的样子也该(回)到之前的」。

因此 v1.0.17 全部撤回:

  • --ccr-rail-color / --ccr-drag-color 两个令牌已删除(源码注释里留了存档)。
  • 线宽 / 颜色 / 透明度回到初版:单描边原线宽,诊断读数 lines=3 为证。
  • 唯一保留的"显现"修复是第 5 节的专用宿主 —— 因为堆叠上下文才是真病根,
    颜色只是被误当成病因的表象。

7. 未包含 / 已知项

  • client 跳过(无 client 声明) 的热重载问题未包含在本次发布内。
    症状在改名(@dsh-external/… → @noob-stupid/…)后出现,
    疑为按包名键控的 pkgMeta 缓存失配。
    打包版经整机重启后正常 —— 即只影响开发态热重载,不影响正式安装。
  • 皮肤侧仍建议:装饰层放低层级 + 设 pointer-events: none。
    本插件的宿主已挂在 body 层级,皮肤若也往 body 高层级堆,仍会互相压。

8. 未验证项(如实)

  • 未在真实 profile 做浏览器端加载验证(发版方不启动实例)。
  • preempt(第四档)未做端到端演练(该档默认关闭)。
  • macOS / Linux 未测(本次仅在 Windows 上构建与验证)。
  • README / docs/ 为门面版本(预览线与门面的文档定位不同,晋级时保留门面版)。

身份

  • npm 包名 @noob-stupid/dsh-connection-card-host,license BSD-3-Clause,
    author Noob-stupid;repository / homepage / bugs 均指向门面仓库
    Noob-stupid/dsh-connection-card-host(不含 preview)。
  • 四个 @deepseek-ai/* peerDependencies 全部 optional: true,版本区间未变。
  • cordis.patch.yml 里 id: connection-card-host 未变(patch 层按 id 匹配已装实例,
    变的只是 insert 里的 name:)。
  • ⚠️ npm install github: 不可用 —— 四个 @deepseek-ai/* peerDependencies 不在公开 registry 上。

声明

未 force-push;未移动或删除任何已发布 tag;未 unpublish;未触碰预览线仓库
(dsh-connection-card-host-preview,只读 fetch);未写入任何 profile;未重启任何 DSH 实例。
v1.0.0 – v1.0.3 及其 Release 资产逐字段未动(npm 侧 1.0.2 / 1.0.3 的
integrity / shasum 同样未变)。

v1.0.3 — 连线渲染裁剪切修复 + preempt(第四档,默认关闭)

Choose a tag to compare

@Noob-stupid Noob-stupid released this 02 Oct 06:03

@noob-stupid/dsh-connection-card-host@1.0.3 — 本页 tgz 附件与 npm 上 1.0.3 的 tarball 是同一份字节
(实测 sha512 base64 与 registry dist.integrity 逐字相同)。

# npm(推荐,可锁版本)
dsh plugin --profile web add @noob-stupid/dsh-connection-card-host

# 固定版本:本页 tgz 附件
dsh plugin --profile web add https://github.com/Noob-stupid/dsh-connection-card-host/releases/download/v1.0.3/noob-stupid-dsh-connection-card-host-1.0.3.tgz
dsh plugin --profile web add ./noob-stupid-dsh-connection-card-host-1.0.3.tgz

修复:连线/轨道在几何裁剪退化时整层不渲染

症状:conns=3 … segments=0 missing=[无] —— 连接在(conns 有数)、missing 也报"无缺失",
但 segments=0,整层画不出来;用户体感是"看不到线、也拉不出线"。

根因:轨道/连线段的几何裁剪在合并退化的情形下产出非法矩形
(clip 的宽或高为 0、或越界 → right < left),于是整层渲染被丢弃。
更麻烦的是诊断不可定位:null 与空数组都被读成"0 条",看不出到底哪一条、为什么被丢。

处置:

  • 退化护栏:一旦裁剪结果退化(零宽高 / 出界 / right < left),退回 viewport 而不是整层不画。
  • 诊断增强:每个被跳过的连接带原因与实际数字,直接可读,例如
    skips=[c1:未分到 lane | c2:纵向裁没 …] —— 从"0 条"变成"第几条、因为什么、数字多少"。

preempt:抢占式中断(第四档紧急度,默认关闭)

紧急度从三档变四档,新增的第四档是"抢占式中断":

  • 默认关闭。开通需要写权限。
  • 每连接 5 分钟 1 次(限流)。
  • 工具执行中绝不打断(硬红线)。
  • 旧三档语义未变(quiet / normal / urgent 行为与判据照旧)。
  • 实现细节:cancel() 需带 keepInbox,否则会清空收件箱。

按会话 scope 的连接工具(v1.0.1 起)

  • 没参与任何连接的会话不再背 connection_* 的 schema,省约 1700 tokens。
  • 走官方 system-prompt/assemble waterfall。
  • fail-open:DSH 若改了 context.scope.session.id 的形状 → 退化为全局注册,
    不会坏,但不再省 token。⚠️ 该接缝没有自动化回归能保证。

身份

  • npm 包名 @noob-stupid/dsh-connection-card-host(1.0.2 首次上 npm)。
  • 安装:dsh plugin --profile web add @noob-stupid/dsh-connection-card-host,或用简写 /
    GitHub tgz(见上)。
  • ⚠️ npm install github: 不可用 —— 四个 @deepseek-ai/* peerDependencies 不在公开 registry 上。

⚠️ 已知事项

  • 改名后旧 profile / 旧注入装配会失配(旧名 @dsh-external/… 与新名不是同一个包)。
    本机已修好(热装配新名 + 清理旧名与注入器记录),但需重启一次才能消除
    重复注册的运行时实例(当前运行时还剩 2 个实例、重复注册 connection_send)。
  • cordis.patch.yml 里的行 id: connection-card-host 未变(patch 层按 id 匹配已装实例,
    变的只是 insert 里的 name:)。

未验证项(如实)

  • 未在真实 profile 做浏览器端加载验证(未重启实例,未把任何 profile 切到新包名跑端到端)。
  • preempt 未做端到端真机演练(该档默认关闭)。
  • README / docs/ 为门面版本(预览线与门面的文档定位不同,晋级时保留门面版)。

声明

未 force-push;未移动或删除任何已发布 tag;未 unpublish;未触碰预览线仓库
(dsh-connection-card-host-preview,只读 fetch);未写入任何 profile;未重启任何 DSH 实例。

v1.0.2 — 改名为 @noob-stupid/dsh-connection-card-host(npm 首发)+ README 精简 + 外部卡片使用声明

Choose a tag to compare

@Noob-stupid Noob-stupid released this 02 Oct 04:54

npm 首发

@noob-stupid/dsh-connection-card-host@1.0.2 已发布到 npm(本包第一次上 npm)。

# npm(推荐,可锁版本)
dsh plugin --profile web add @noob-stupid/dsh-connection-card-host

# GitHub 直装(装默认分支最新提交,不是固定版本)
dsh plugin --profile web add github:Noob-stupid/dsh-connection-card-host
dsh plugin --profile web add Noob-stupid/dsh-connection-card-host   # 同上,可省 github:

# 固定版本:用本页的 tgz 附件
dsh plugin --profile web add https://github.com/Noob-stupid/dsh-connection-card-host/releases/download/v1.0.2/noob-stupid-dsh-connection-card-host-1.0.2.tgz
dsh plugin --profile web add ./noob-stupid-dsh-connection-card-host-1.0.2.tgz

改名

包名 @dsh-external/dsh-connection-card-host → @noob-stupid/dsh-connection-card-host。

  • 旧名 @dsh-external/… 从未发布到 npm,所以不存在"改名导致的旧包弃用"问题。
  • cordis.patch.yml 里的行 id: connection-card-host 未变,patch 层按 id 匹配已装实例;
    变的只是 insert 里的 name:。
  • 已装实例不受影响:本插件不是从 npm 装的,已装的那个 profile 仍然从它自己
    node_modules 里的旧名副本解析,本次发布不碰任何 profile。
  • ⚠️ 若要把某个 profile 切到新名,需要同步改该 profile package.json 的
    dependencies 与 dsh.profile.bundles 里的包名(bundle 是按包名解析的,
    不是按 patch 行 id)。本次未改动任何 profile。

安装:修掉一条真实故障(与改名无关)

四个 @deepseek-ai/* peer 统一标了 peerDependenciesMeta.optional,依赖区间一字未改。

现象 实测
不标 optional pnpm 硬报 ERR_PNPM_NO_MATCHING_VERSION(@deepseek-ai/dsh-client-runtime 在公开 registry 上最高只有 0.1.1-rc.2)—— 装不上
只标那一个 能装上,但把**整棵 @deepseek-ai/dsh 依赖树(602 个包)**装进 profile,耗时 1 分 36 秒
四个全标 612 毫秒、只加 1 个包,落 lib/ 164 个文件
  • 这条故障 v1.0.1 起就存在(本次用未改动的 v1.0.1 tgz 复现过,同样报错),不是改名引入的。
  • 本包运行时一个 @deepseek-ai/* 都不 import(lib/ 全树 grep 无命中;浏览器端那两个包由
    DSH 的 __ModuleLoader__ 注入),所以"声明契约、不强制安装"是准确表达。
  • 版本门控未削弱:DSH 的 evaluatePluginCompatibility 只读 peerDependencies,
    从不读 peerDependenciesMeta —— 四条区间照旧生效。详见 docs/compatibility.md。

README

叙事重定位

  • 首屏引言由「让会话互相看得见…」改成平台身份:
    「把「连接」做成 DSH 里的一等对象 —— 一个连接级插件宿主」;
    "互相看得见、说得上话、共用得上工具"降为支撑句。
  • 开场痛点由"会话互相隔离"改成「DSH 的会话之间缺一个可编程的关系层」。
  • 新增一句"为什么是你":别的插件把能力写死在插件里,这个插件让能力变成连接上可安装的卡片。
  • 新增架构图 docs/assets/diagram-connection-platform.svg(手写 SVG、无外部字体/图片依赖):
    会话 A ↔ 连接(事件总线 · 权限边界 · 卡片宿主 · 公约盒)↔ 会话 B,卡片挂在连接上、经适配层调用 DSH。
    与原有 demo-drag.svg(交互手势示意)职责分开。
  • 「当前状态」→「路线图(规划中)」;requestRemote 等由"空壳/stub"改为
    「接口已就位、实现待补」——事实(尚未实现)保留在表里,只换预期框架。
  • 页脚许可证 MIT → BSD-3-Clause(与 LICENSE 一致)。

精简(中英同步)

引用 前 后
demo-drag-anchor.gif 2 处 1 处(另一处改为起手式/开关语义清单)
demo-permission.svg 2 处 1 处
demo-card-tool.svg 2 处 1 处
diagram-connection-platform.svg — 新增 1 处

README.md 17,710 B / 427 行 → 21,041 B / 474 行;
README.en.md 19,412 B / 457 行 → 23,392 B / 514 行。
(字节增加来自新增的架构图引用、安装说明与外部卡片声明;重复贴图已全部去掉。)

demo-drag-anchor.mp4 与 demo-drag-rail.mp4 仍各被引用一次,未删。

新增声明:第三方 / 社区卡片可以直接下载安装、装完即用 —— 含三种来源(包名 / 仓库 tgz /
本地目录)、装完即可用(不重启、不改 DSH 配置)、分端可见边界、版本门控(不匹配明确拒绝并说明原因)。
不称"官方卡片市场",不暗示官方背书。


版权署名

  • LICENSE:Copyright (c) 2026, huahuo → Copyright (c) 2026, Noob-stupid
  • package.json 补 "author": "Noob-stupid (https://github.com/Noob-stupid)"
  • 未改 git 配置、未改写历史提交的作者。

未验证项

  • 未在真实 DSH profile 里跑过安装(未碰 web / desktop profile,未重启实例)。
    安装结论来自:pnpm 9.15.9 + profile 同款配置(nodeLinker: hoisted + autoInstallPeers: false)
    的独立目录实测,以及发布后从公开 registry 按包名安装的实测。
  • 未验证浏览器端真实加载:本次只发布,没有把任何 profile 切到新包名去跑一遍端到端。
  • lib/client.js.map 由本机工具链重建(tsdown 0.22.2 / rolldown 1.1.1),与上一版 map
    内容不同(源映射元数据差异),lib/client.js 本身除 id 一行外逐字节一致。
  • 除 id 一行与 lib/client.js.map 外,lib/ 全树重建后与仓库里的版本逐字节一致
    (git add 后零变更)。

声明

未 force-push、未移动或删除任何 tag、未 unpublish、未改 npm token、
未触碰预览线仓库(dsh-connection-card-host-preview)、未触碰 web/desktop profile、
未重启任何 DSH 实例。