Repository navigation
Releases
v0.2.1 — 装得上、装完能自证
v0.2.1 — 装得上、装完能自证
这一版没有改运行逻辑,只解决"别人装上之后能不能用、能不能自己确认"。
安装(给别人装)
在 DSH 的「设置 → 插件」里用安装入口填这个安装说明符:
github:BlankTasftu/dsh-delivery-library
等价的命令行写法(桌面端不自带 dsh CLI,所以多数人走设置页):
dsh plugin --profile <你的 profile> add github:BlankTasftu/dsh-delivery-library装好后页签从 对话 | 轨迹 变成 对话 | 轨迹 | 交付文件。宿主会把新的启动图推给
已打开的页面,一般不用手动刷新;没出现就按一次 F5。
装完自证(零依赖)
包内自带测试与排查工具,不需要安装任何东西:
node --test "test/*.test.mjs" # 期望 60/60
node tools/check-host-resolution.mjs # 从 profile 出发能否解析到 browser bundle
node tools/check-boot-graph.mjs # 插件在不在启动图、在哪个批次、批次能否投递这一版修了什么
test/与tools/现在随包交付。此前它们被files过滤掉,而 package.json 里
却带着test脚本 —— 装到别人机器上以后pnpm test会得到tests 0且退出码非 0,
等于"装完无法自证"。- 探针缓存搬出工作区:
tools/check-profile-patch.mjs抽 js-yaml 的缓存从
工作区.cache/改到系统临时目录,包被安装在node_modules里时不再往包目录写文件。 - README 安装章节重写:把"给别人装"放到最前,附自检命令与三个只读探针。
实测(都在这台机器上真跑过)
| 验证 | 结果 |
|---|---|
| 远端与本地一致性 | main 与 origin/main 同一提交,工作区 0 项未提交改动 |
| 干净克隆自洽性 | git clone → node --test → 60/60(无需安装任何依赖) |
| 干净实装 | pnpm add github:BlankTasftu/dsh-delivery-library → 4.9s,装到 0.2.1(24 个文件) |
| 装进去的必需件 | lib/index.js、lib/client.js、cordis.patch.yml、package.json 齐全;test/、tools/ 也在 |
| 装完自证 | 在装好的包目录里跑 node --test "test/*.test.mjs" → 60/60,退出码 0 |
| DSH 宿主的解析链 | 以安装目录为 profile 验证:dsh.client → exports["./client"] → lib/client.js → bundle patch → 宿主入口,全部可解析 |
| 无安装脚本 | 包内无 preinstall/postinstall/prepare,无第三方依赖,无 bin |
安装边界(重申)
这是个纯插件:宿主半侧是空实现(零 import/零 require),浏览器半侧只
require('react') —— 不联网、不写任何存储、不碰文件,运行时只注入一份带标记的
<style>、注册一个视图格子、注册两份词典。test/isolation.test.mjs 用 10 条静态
断言把这条边界钉住。
MIT
v0.2.0 — 交付文件库
v0.2.0 — 交付文件库
给 DSH 对话窗加第三个视图:把当前会话的全部显式交付(present)与文件产出
(write / edit)汇总成一份可检索的文件库 —— 不用再往回翻聊天记录找"刚才那个文件在哪"。
安装
dsh plugin --profile desktop add github:BlankTasftu/dsh-delivery-library装好后页签从 对话 | 轨迹 变成 对话 | 轨迹 | 交付文件。宿主会把新的启动图推给
已打开的页面(一般不用手动刷新);没出现就按一次 F5。
这一版有什么
- 两栏清单:
交付(present 声明)与产出(成功写出的文件)分开,各自计数 - 点一行在右侧栏预览该文件;拿不到右栏时自动退化成"复制路径",点击不会没反应
- 搜索同时匹配文件名、目录、说明;重复交付合并为一行并带
×N徽标与轮次 - 会话还有更早历史时,底部给 加载更早(走
session.loadOlder())
数据口径
| 栏位 | 来源 | 判据 |
|---|---|---|
| 交付 | 会话事件 deliverables/presented |
present 工具成功执行后由宿主写入 |
| 产出 | 会话事件 tool/call + tool/result |
只认 write、edit、完整改写的 str_replace_editor,且结果不是错误 |
读文件、删除、失败或被中断的调用、参数残缺的调用都不进清单;终端命令创建的文件
只在被显式 present 时进「交付」。口径与出厂 ui-deliverables 的卡片一致。
活动边界(只做插件该做的事)
- 纯插件:不改 DSH 本体,只往
conversation.view座位追加一个新 id 的格子 - 宿主半侧是空实现:零
import、零require、apply()为空 - 浏览器半侧只
require('react'):不联网、不写任何存储、不做动态求值、不碰文件
(文件只拼一个dsh-resource://地址交给侧栏服务去读) - 运行时只做三件事:注入一份带
data-plugin标记的<style>、注册一个视图格子、注册两份词典 - 包内没有第三方运行时依赖、没有安装脚本、没有可执行入口
这些不是口头承诺:test/isolation.test.mjs 用 10 条静态断言把它钉住,任何"顺手读个
文件/发个请求/改别的插件配置"的改动都会当场失败。
测试
零依赖,不需要安装任何东西:
node --test "test/*.test.mjs" # 60/60测试直接执行要发货的那份 lib/client.js(复刻 DSH 的 window.__ModuleLoader__.load
装载契约 + 一个迷你 React 运行时),所以断言的是发货文件本身,不存在源码与产物漂移。
请注意:客户端插件能打崩桌面端
客户端插件的 apply 里任何未捕获异常都会让 DSH 桌面端退出 —— 渲染进程的启动审计
会把未达 active 的条目汇总成 web boot: N entry did not activate,桌面主进程把它当
致命错误处理。
本插件的 apply 因此被刻意写成整体不可抛:每一步单独兜住,失败只降级、不冒泡,
并把面包屑写进一个渲染为 null 的诊断条目(可只读检查)。
0.1.0 正是踩了这个坑:一个 CSS 选择器多套了一层引号 → querySelector 抛
SyntaxError → apply 抛错 → 桌面端连续两次启动即退出。修复与完整复盘见
docs/DESIGN.md 第 5 节,
回归用例见 test/styles.test.mjs(带选择器校验的 document 桩)。
已知边界
- 清单只覆盖已载入的会话事件窗口(更长历史用「加载更早」向前补页)
- 视图是会话作用域的;空会话不渲染视图区(与出厂行为一致)
- 预览的是当前文件,不是交付那一刻的快照;文件被删后预览会报找不到
- 不提供"在资源管理器中显示":那需要宿主 desktop 路由与授权坐标,超出本插件范围
- 极端长的会话(几百个产出文件)列表一次性渲染,没有虚拟滚动
MIT