Repository navigation
Releases: Noob-stupid/dsh-connection-card-host
Release list
v1.0.76
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.76 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.75
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.75 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.74
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.74 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.73
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.73 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.72
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.72 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.71
npm:https://www.npmjs.com/package/@noob-stupid/dsh-connection-card-host/v/1.0.71 —— npm 上的字节与本 Release 资产的字节来自同一次 npm pack。
v1.0.66
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)
@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.tgz1. 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,licenseBSD-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(第四档,默认关闭)
@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/assemblewaterfall。 - 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 精简 + 外部卡片使用声明
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 切到新名,需要同步改该 profilepackage.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-stupidpackage.json补"author": "Noob-stupid (https://github.com/Noob-stupid)"- 未改 git 配置、未改写历史提交的作者。
未验证项
- 未在真实 DSH profile 里跑过安装(未碰
web/desktopprofile,未重启实例)。
安装结论来自: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 实例。