packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
接管浏览器端 edit/write 工具卡片,用近线性行级 diff 只显示真正变化行,并对替换对做行内字符下划线高亮,消除内置 diff 对未变化相同行的重复渲染。
接管 DSH 浏览器的 edit / write 工具卡片,用近线性行级 diff 做真正的差异展示,消除内置 DiffBlock 把「未变化的相同行」在删除区红 - 行和新增区绿 + 行各渲染一遍的重复。
渲染全在浏览器端,主机端半身只负责把配置转成 settings 命名空间。单击即换新渲染,不碰 DSH 源码。
原版 diff 的显示相当离谱:一次只修改一行,它却把这行连同上下各三行一起带进 diff,共十四行,其中七行被折叠,正好红区和绿区完全不重叠。不点开二级展开根本看不出到底改了什么——点开了也照样看花眼。
这个插件把无关的相同行全部去除。只修改一行时,就只显示一行红一行绿,真正的修改加粗划线,一眼就能看清改在哪里。
另外,PTC 模式下默认只显示调用成功与否,本插件也做了适配,能正常显示修改内容。
它是这四件里的头一件。写入这件事第一次看得清之后,才显出另外三处漏:覆写不可逆、内容不合法、远程够不着。对应的分别是 dsh-write-create-only、dsh-write-rule-guard 与 dsh-remote-file-system,四件的首次提交时间也与这层先后一致。
本插件默认已接管最后那件的 edit_remote 与 write_remote,见下面的 extraTools。
- 与新增行绿 +,消除重复。--dsw-* 主题变量,视觉上就是原生卡片。- /+ 前缀;底部 └ +A -R · N file(s) 变更统计。edit / write 双双接管,覆盖新建只显示绿色新增,纯删、多 hunk 等场景。run_code 子调用中的 edit / write 同样显示优化后的修改 diff,通过 callId 中的 :code: 标记识别子调用。注意 write 是全文件覆写,无旧内容,只能显示全新增;想看精确 diff 应使用 edit。extraTools 让 dsh-remote-file-system 的 edit_remote、write_remote 一并使用优化显示,插件已默认开启这两个,参数名不同的工具可逐项覆盖。| 效果图 | |
|---|---|
| 原版 diff | ![]() |
| 本插件 | ![]() |
光看静态截图不过瘾?看看这个插件的实际演示效果。
四件一起讲的宣传片,中文与日语配音两版同在一个投稿里:
从 GitHub 安装:源码在 src/,lib/ 不入仓库,安装时 npm 会触发 prepare 脚本现场构建。
dsh plugin --profile web add github:better-er/dsh-edit-diff
从 npm 安装:包内已含构建产物 lib/index.js 与 lib/client.js,安装时不再构建。
dsh plugin --profile web add dsh-edit-diff
两种方式装完都会自动挂载,重启 DSH web 后启用,无需手工编辑任何文件。
dsh plugin --profile web remove dsh-edit-diff
彻底移除,重启 DSH web 后不再加载。
extraTools 列出 edit 与 write 之外要接管的工具。每条写工具名和读取参数用的参数名,参数名省略时按 file_path、old_string、new_string、content 取值。
插件自带的 cordis.patch.yml 已经默认接管 dsh-remote-file-system 的这两个远程工具:
- insert:
- id: dsh-edit-diff
name: dsh-edit-diff
config:
extraTools:
- name: edit_remote
- name: write_remote
它们的参数名和原生一致,只写名字即可。参数名不同的工具再补:
extraTools:
- name: some_tool
pathKey: target
oldKey: before
newKey: after
contentKey: body
要改这份默认,在 profile 的 cordis.patch.yml 里按 id 覆盖:
- id: dsh-edit-diff
config:
extraTools:
- name: some_tool
判断规则:参数里同时有旧文本与新文本就按 edit 型渲染,否则有整文件内容就按 write 型渲染。
配置经 settings 命名空间 dsh-edit-diff 送到浏览器端,settings 变化会让浏览器端重建这批 key 的注册。
dsh.client,导出 ./client。dsh.bundle,因此也是一个自挂载的 bundle 层插件:用 dsh plugin --profile <name> add 从 GitHub 安装后,会被自动识别为 profile layer 并挂载,无需手工写组合 entry。ctx.inject(['settings'], ...) 子级里以 effect 注册 settings.configure({ auto: false }, ctx.fiber),声明本插件自带配置页面;配置字段用 .volatile() 声明后才会出现在设置表单中。浏览器端拿不到 cordis 配置,改用 ctx.configForms.get('dsh-edit-diff') 读解析后的值,这是双半插件传配置的唯一通道。tool.call.toolview 的 edit 与 write 两个 key,以及 extraTools 里声明的每个工具名。priority: -1低于内置 file-mutation-toolview 的默认 0,用更低优先级遮蔽默认渲染,而不是在同一优先级上 clash。callId 包含 :code: 判断是否为 run_code 子调用,从 argsRaw 中提取 old_string/new_string 即 edit 或 content 即 write 动态构建 diff。src/,pnpm build 通过 tsdown 生成 lib/index.js、lib/index.d.ts、lib/client.js 与 sourcemap,运行时只加载 lib/ 发布产物。@deepseek-ai/schemastery。本地开发:
pnpm install
pnpm typecheck
pnpm build
改完源码需重新 pnpm build,DSH web 的 HMR 观察到 lib/client.js 变化后自动重载。