Skip to content

Releases: Max-Null/dsh-node-appearance

v0.10.1 — shell 工具按平台别名命中

Choose a tag to compare

@Max-Null Max-Null released this 02 Oct 09:24

修复

  • 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 — 恢复系统提示词卡(带独立开关)

Choose a tag to compare

@Max-Null Max-Null released this 01 Oct 14:09

新增

  • 恢复系统提示词卡,带独立开关(默认开)。

    与上下文注入行同一处境的另一半: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 壳)

Choose a tag to compare

@Max-Null Max-Null released this 01 Oct 13:56

新增

  • 接管「加载技能」行(skill),展开体剥掉 <skill_content> 三层壳。

    官方 SkillRow 的展开体是一个 <pre>,里面铺 skill 工具返回的规范渲染块:<skill_content name> 套 <skill_resources>(一两行资源指引)再套 <skill_instructions>(技能正文)。那层 XML 壳对人不构成信息,却把正文夹在中间 —— 与触发卡那条 <goal_round> 骨架同一个问题。

    接管姿势同提问卡与交付行(tool.call.toolview 的 skill key,priority -1 遮蔽)。四态、状态词、技能名、查看 入口与 data-tool / data-state 锚点逐项保留,只换展开体:

    • 技能正文直出,三层壳在解析时丢掉
    • 资源指引另起一节并默认收起(它解释技能去哪些路径找素材,属于按需查看的背景)
    • 形状不符则原样铺回结果原文,与官方等价 —— 绝不把展开体渲染成空白

内部

  • 解析用逐行对帧而不是宽松正则:正文里出现 </skill_instructions> 这类字面量是允许的(官方测试就带这种用例)。15 个新用例覆盖对帧、字面量、形状不符与四态。

v0.8.0 — 恢复被官方隐藏的上下文注入行(带开关)

Choose a tag to compare

@Max-Null Max-Null released this 30 Sep 21:01

新增

  • 恢复 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 链接改绝对地址

Choose a tag to compare

@Max-Null Max-Null released this 28 Sep 21:16

长目标按条折行

目标常常是一整段长句,里面用 ① ② ③ 列出条目 —— 数据里没有换行,读起来就是一大坨。新增 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 — 折叠摘要条着色 + 触发通知卡字段化

Choose a tag to compare

@Max-Null Max-Null released this 28 Sep 20:13

折叠摘要条着色

内核把一串工具调用折成一行摘要(「已读取文件并执行了命令」)或一层轮次摘要(「已完成工作 · 用时 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(破坏性)

Choose a tag to compare

@Max-Null Max-Null released this 28 Sep 20:14

本 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 后生效。设置入口:设置 → 插件配置 → 节点外观。


相关讨论:issue #1、#2

v0.5.0 — 交付文件行接管 + 独立配色

Choose a tag to compare

@Max-Null Max-Null released this 20 Sep 17:07

交付文件行(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 — 提问卡接管 + 目标详情折叠条

Choose a tag to compare

@Max-Null Max-Null released this 20 Sep 17:07

提问卡接管

ask_user_question 的卡片改为展示当时给出的全部选项,被选中的用 ask 类别色反显并打勾。官方转录卡只保留已选答案,提问一旦结算就再也看不到其他选项——本插件把 options 从调用参数里读回来。行外壳与官方 ToolRow 逐项对齐,locale 复用官方 conversation 字典。

目标详情折叠条

官方目标条下方接一条与它拼成同一张卡的详情行,把官方条上被 ellipsis 截断的目标展开成可读详情:完整目标、阶段、阻塞原因、自主轮次、目标标识。只读投影,不碰官方的编辑 / 暂停 / 清除。

安装 / 升级

pnpm add @max-null/dsh-node-appearance@0.4.0