Repository navigation
Releases: Max-Null/dsh-node-appearance
Release list
v0.10.1 — shell 工具按平台别名命中
修复
-
shell 工具的颜色覆盖在 Windows 上不生效(issue #1)。
data-tool属性一直都在、选择器形状也对,变的是名字随平台变:内核 bundle 里tool-bash与tool-pwsh按process.platform互斥注册(packages/bundle/base/cordis.patch.yml),于是同一个 shell 行在 POSIX 上是data-tool="bash"、在 Windows 上是data-tool="pwsh"——只认字面名的覆盖必然在其中一侧落空,querySelector('[data-tool="bash"]')返回null是必然。bash与pwsh现在互为别名:配任一个都作用到当前平台实际渲染的那一行;两个都配则各自独立(直接命中优先于别名)。分组依据是内核自己的判断——ui-tool 的TOOL_VARIANTS把pwsh映射到 bash 行变体(pwsh: 'bash',注释写着「the PowerShell twin is a shell tool: the bash row family」)。 -
顺带修一处同类缺口:出厂类别表之外的工具名,其显式覆盖此前连 CSS 规则都不生成——用户配了、不报错、无效果。设置项承诺的是「按 wire 工具名覆盖」,类别表只是出厂默认。
测试
- palette 30 → 37(+7 条:别名双向命中 / 两个都配互不干扰 / 别名对对称且同类别 / 表外覆盖生成规则 / 表外无效值被拒 / 表外覆盖排在兜底之后)。
v0.10.0 — 恢复系统提示词卡(带独立开关)
新增
-
恢复系统提示词卡,带独立开关(默认开)。
与上下文注入行同一处境的另一半:
isVisibleChatNode()也排除system-prompt,官方system-message/request-prompt两条 Definition 仍在生成、只是不再渲染 —— 所以遮蔽同一个 key 没有意义,走的是自有 kind(system-prompt-notice)的 Definition + 同 kind 渲染器。本版只接管
system-message那半:系统提示词发生变化时各出一张卡,首轮那张就是「会话发起时的系统提示词」,之后内容变了再出一张并标「系统提示词更新」。request-prompt那半不做 —— 它要复刻与system-message协作的位置状态机(shownByUpdate/stableRequestPromptAnchor),增量只是「没变时也补一张」。形态照官方:同一张折叠行、同一对文案 key(
message.systemPrompt/message.systemPromptUpdate)、保留data-system-prompt-body锚点;不渲染 markdown —— 提示词的换行与缩进本身就是信息。状态推导直接调官方服务方法uiConversation.inspectSystemPrompt,不自己复刻。
修复
- 系统提示词卡接回来时漏了配色:只把它注册进 slot,忘了加进
ACCENTED_ROWS,于是那行有图标有标题、却没有色条与淡色底,夹在两行「上下文注入」中间像一段裸文本。现在与注入行同色(context类别)、同样带 3px 左轨与 8% 淡底。 - 设置卡的「恢复初始设置」漏写
showContextInjection,重置时那个开关不会被还原。现在三个开关在同一批写入里。
v0.9.0 — 接管「加载技能」行(剥掉 XML 壳)
新增
-
接管「加载技能」行(
skill),展开体剥掉<skill_content>三层壳。官方
SkillRow的展开体是一个<pre>,里面铺skill工具返回的规范渲染块:<skill_content name>套<skill_resources>(一两行资源指引)再套<skill_instructions>(技能正文)。那层 XML 壳对人不构成信息,却把正文夹在中间 —— 与触发卡那条<goal_round>骨架同一个问题。接管姿势同提问卡与交付行(
tool.call.toolview的skillkey,priority -1 遮蔽)。四态、状态词、技能名、查看入口与data-tool/data-state锚点逐项保留,只换展开体:- 技能正文直出,三层壳在解析时丢掉
- 资源指引另起一节并默认收起(它解释技能去哪些路径找素材,属于按需查看的背景)
- 形状不符则原样铺回结果原文,与官方等价 —— 绝不把展开体渲染成空白
内部
- 解析用逐行对帧而不是宽松正则:正文里出现
</skill_instructions>这类字面量是允许的(官方测试就带这种用例)。15 个新用例覆盖对帧、字面量、形状不符与四态。
v0.8.0 — 恢复被官方隐藏的上下文注入行(带开关)
新增
-
恢复 0.2.0 起被官方隐藏的上下文注入行,带「显示上下文注入」开关(默认开)。
DSH 从
dsh-v0.1.7-alpha.1起,ui-chat 的isVisibleChatNode()把普通上下文注入行整个从对话面板滤掉 —— 记忆快照、AGENTS.md、技能目录、时间快照全在其中,只放行含工具增删的 context 行。官方那条
context节点仍在生成、只是不再渲染,所以遮蔽同一个 key 没有意义。本版改为注册自有 kind(context-injection)的ConversationNodeDefinition接住同一批user/message,再以该 kind 注册渲染器 ——ChatNodeDataMap是 merge-extensible 的,这是官方留的注册口。形态对齐官方
ContextInjectionRow:同一张折叠行、同一个message.contextInjection文案、配色沿用context类别。
修复
- 展开体的双层滚动条:初版照官方给展开体加了
max-height: 280px; overflow: auto,与会话消息流叠加成内外两条滚动条,读一次要滚两次。官方那 141px 是为它自己的行节奏服务的,注入正文动辄上千字并不适用 —— 改为不限高,滚动只留给消息流那一层。
内部
- 注入判定与
producer/form投影复刻自@deepseek-ai/dsh-session/surface与 ui-chat 的conversation-nodes/event-projection.ts(浏览器半边不能值导入其他包),派生集中在context-injection-model.ts的纯函数里,新增 21 个用例。
v0.7.1 — 长目标按条折行 + README 链接改绝对地址
长目标按条折行
目标常常是一整段长句,里面用 ① ② ③ 列出条目 —— 数据里没有换行,读起来就是一大坨。新增 objectiveLines():只在渲染前把圈号(U+2460–U+2473,即 ①–⑳)前的位置换成换行,不改动任何会话数据 —— 卡片拿到的仍是原文,复制出去也还是原文。
「目标详情」与触发卡的「目标」共用它,两处表现一致。
判据刻意取得简单:只认圈号(中文语境里它基本只作列表项标记),万一误断也只是多一行;反过来若加「前导必须是分号 / 句号」这类条件,遇到紧跟在无标点分条后的 ③ 就会漏断。8 条单测覆盖(分条、行首不留空行、无圈号逐字返回、不碰 1. / (2) / 三、 等其它编号写法)。
空文本块不再渲染
PlainBody 此前没跳过空串 —— 官方 ModelFacingContent 有 run.text !== '' 检查,首版漏抄。后果是空 text 块会多渲染一个空 <pre>(零视觉影响)。现已对齐。
README 链接改绝对地址
12 处截图引用改为 raw.githubusercontent.com、4 处文档链接改为 github.com/.../blob/ 的绝对地址 —— 相对路径在 npm 页面渲染不出来(图会裂、链接会 404),而 npm 上的 README 是发布时的快照,只能靠发新版修正。
安装 / 升级
pnpm add @max-null/dsh-node-appearance@0.7.1重启 dsh 后生效。设置入口:设置 → 插件配置 → 节点外观。
已实测:SSiD fork dev 隔离实例 + DSH 0.2.0-rc.1 —— 造了一个带 ①–⑤ 的真实目标,卡片渲染为 6 行(标题 1 + 分条 5)、高度 120px(6 × 20px 行高),console 零错误。
v0.7.0 — 折叠摘要条着色 + 触发通知卡字段化
折叠摘要条着色
内核把一串工具调用折成一行摘要(「已读取文件并执行了命令」)或一层轮次摘要(「已完成工作 · 用时 35 秒」)时,这些收起态的行此前没有任何配色 —— 展开后成员行各有类别色,收起反而丢了线索。现在:
- 过程组组头按内核在
data-process-activity上发布的排名第一的类别取色,与展开后各成员行同一色系;取色不解析标题文本。 - Turn 级摘要条用新类别
summary(默认灰蓝#94a3b8)—— 它只有轮次号与工具计数,没有类别语义,硬套类别色是武断的。 - 两者只在收起态着色:展开后成员行各自带色,容器再涂就是两层色块叠在一起。
- 两种形态用两种涂法:组头是「一行摘要」(以图标起头),走 3px 左轨 + 淡色底、内距 8px 让轨与图标之间有呼吸;Turn 摘要条是整行宽的分节线(内核给它
padding: 0加一条底部发丝线),改用底线染色、不加轨也不内缩。
触发通知卡:目标轮次字段化
接管 conversation.chat.node 的 turn-trigger。目标轮次那张卡原本把模型提示词原文连同骨架一起显示:
<goal_round>
Objective: "……"
Round: 1/256
Continue working toward the objective in this same session. …
</goal_round>
骨架对人不构成信息,却占满整个展开区。现在:
- 折叠头加轮次徽标(
第 1 / 256 轮),收起态即可读到走到第几轮; - 展开体字段化:「目标」是还原了 JSON 转义的目标原文,「模型收到的指令」独立成节并默认收起(保留可查性,不销毁);
- 其余触发来源(
schedule/webhook/job/subagent…)按官方同构渲染 —— 遮蔽是全 key 的,所以 kind → 标题/图标映射逐条复刻了官方那一份; - 提示词解析是全有或全无:骨架任一处不符(内核改了格式、
maxGoalRounds未设导致写出Round: 1/undefined)即整卡退回「原文 + 等宽显示」,绝不显示半截字段。
peer 放宽到跨 minor
peer 从 ^0.1.7-rc.2 改为 >=0.1.7-rc.2 <0.3.0。caret 的上界是下一个 minor,内核一跨 minor(如 0.1.x → 0.2.x)所有写 ^0.1.* 的插件会一起失配 —— 而失配的插件不会被加载、也不会出现在「未激活」列表里(在进入 fiber 图之前就被跳过),界面上不报错,只是少一批插件。
本插件依赖的 DOM 锚点(data-process-activity / data-turn-process / data-turn-trigger)在 0.1.7-rc.2 与 0.2.0-rc.1 上逐字相同,所以宽范围是准确的声明,不是放宽。
安装 / 升级
pnpm add @max-null/dsh-node-appearance@0.7.0重启 dsh 后生效。设置入口:设置 → 插件配置 → 节点外观(配色列表新增「工作摘要」一项)。
已实测:SSiD fork dev 隔离实例 + DSH 0.2.0-rc.1 —— 目标轮次与 tool-jobs 两条触发路径、开关往返、console 均通过;L2 留痕见仓库 docs/验证记录.md。
未实测:装版(0.1.7-rc.2)上的表现 —— 兼容性依据是源码比对(所用锚点在两版内核里逐字相同),不是实机。
v0.6.0 — 适配 DSH 0.1.7-rc.2(破坏性)
本 Release 为补建:0.6.0 当初发布了 npm,但漏了打 tag 与建 Release。tag 已于 2026-09-29 补打(指向发布时的实际 HEAD
a74b21c,而不是把 version 改成 0.6.0 的那个提交),此处补上对应的变更说明。
适配 DSH 0.1.7-rc.2(破坏性)
内核 0.1.7-rc.2 移除了若干服务面,本版全线跟随,不再支持 0.1.2-alpha.2 及更早的内核:
- host:不再调用
settings.installSection(0.1.7 已从 settings 服务面移除),section 改由 loader 依模块导出的 Config schema 自动构成; - client:
ctx.settingsScope→ctx.configForms.get(entry id);插件配置卡的槽位从dsh-client-ui-settings-plugins迁到dsh-client-ui-plugin-manager; - config:
showThinking/colors/toolColors改为Volatile<T>+.volatile(),对象字段的写入走mutate()路径操作(set()只接受 scalar 字段); - 依赖:
schemastery→^3.18.4、新增cosmokit ^1.8.5、cordis→^4.0.4。
peer 全线收紧为 ^0.1.7-rc.2。这条上界后来在 0.7.0 被放宽(caret 的上界是下一个 minor,内核跨 minor 时插件会被静默跳过),升到 0.7.0 时不必再迁就它。
设置卡片默认展开
折叠态会让用户以为「设置不见了」(用户反馈)。这张卡片是插件页上唯一承载本插件设置的位置,默认展开更符合预期,仍可手动收起。
README
- 新增「插件版本 ↔ DSH 版本」对应表;
- 更新已过时的 host / client 侧描述;
- 补工具名查询指引:工具名就是 DOM 上
data-tool属性的值,Windows 下 shell 工具叫pwsh而非bash。
安装 / 升级
pnpm add @max-null/dsh-node-appearance@0.6.0重启 dsh 后生效。设置入口:设置 → 插件配置 → 节点外观。
v0.5.0 — 交付文件行接管 + 独立配色
交付文件行(present)接管
官方折叠行把全部文件名逗号拼成一行(fileNames() 的 .join(', ')),多文件时读不完,也看不出这一轮交付了几个。接管后:
- 折叠态只报「首个文件名 + 数量」——
a.md 等 3 个文件 - 展开态逐文件成行:扩展名徽标 + 文件名 + 所在目录,结果文本上方标
输出 N 行 - 行外壳与提问卡同一套基线(24px 行高、2px 分隔点、running 扫光、hover 才现的 Inspect 胶囊),locale 复用官方
deliverables字典 - 派生逻辑在纯函数
deliverable-model.ts,组件只做 JSX;新增 23 条单测(半截 JSON、空 files 等降级路径都有覆盖)
交付行独立配色:deliver(青蓝 #06b6d4)
此前 present 归 file 类别,与 read / write 同色——而生成文件的那些行与交付行常常同屏出现,绿色分不清谁是谁。现在单列 deliver 类别(与 file 绿差 47° 色相),设置页「节点外观」多一行可单独调整。
安装 / 升级
pnpm add @max-null/dsh-node-appearance@0.5.0重启 dsh 后生效。设置入口:设置 → 插件配置 → 节点外观。
v0.4.0 — 提问卡接管 + 目标详情折叠条
提问卡接管
ask_user_question 的卡片改为展示当时给出的全部选项,被选中的用 ask 类别色反显并打勾。官方转录卡只保留已选答案,提问一旦结算就再也看不到其他选项——本插件把 options 从调用参数里读回来。行外壳与官方 ToolRow 逐项对齐,locale 复用官方 conversation 字典。
目标详情折叠条
官方目标条下方接一条与它拼成同一张卡的详情行,把官方条上被 ellipsis 截断的目标展开成可读详情:完整目标、阶段、阻塞原因、自主轮次、目标标识。只读投影,不碰官方的编辑 / 暂停 / 清除。
安装 / 升级
pnpm add @max-null/dsh-node-appearance@0.4.0