dsh-structured 0.8.3 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +17 -9
- package/cordis.patch.yml +2 -0
- package/docs/DESIGN-REFERENCES.md +1 -1
- package/docs/RISK-ROLLBACK.md +3 -1
- package/docs/ROADMAP.md +3 -3
- package/docs/VISUAL-CRITIQUE.md +1 -1
- package/docs/VISUAL-PLAN.md +10 -10
- package/lib/client.js +588 -508
- package/lib/index.js +22 -10
- package/package.json +3 -1
- package/scripts/measure-prose.mjs +3 -1
- package/scripts/theme-contrast.mjs +104 -0
- package/src/client.js +588 -508
- package/src/index.js +22 -10
- package/test/client-visual.test.mjs +130 -3
- package/test/measure-prose.test.mjs +9 -0
- package/test/structured.test.mjs +4 -1
- package/test/theme.test.mjs +121 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.1 — 2026-10-23
|
|
4
|
+
|
|
5
|
+
- 代码/diff 隔离:` ```diff `/`patch` 代码块、`[data-diff]`/`.md-diff`/GenUI diff 区域不套插件的 code/table chrome;diff 行色与宿主渲染保持原样。代码/diff 回复允许代码块或 diff 卡直接作首块,不强制标题卡。
|
|
6
|
+
- 设置中心:`theme`、`visual`、`defaultEnabled`、`tailReminder`、`includeSubagents`、`genui` 六个 profile 级 Config 字段,全部 `.volatile()`,带中英双语 description;标准 bundle 详情表单优先,不新增 React 依赖。
|
|
7
|
+
- `statusText` 显示主题与视觉层;client 订阅 `configForms` 的 theme/visual 变化;`/structured on|off` 仍只控制按会话提示词。
|
|
8
|
+
- 写入 active profile 的 Cordis patch;home patch/CLI overlay 优先,表单 `writable=false` 时不静默成功(README 说明)。`state.json` 仍只存会话提示词开关。
|
|
9
|
+
- 未做主题市场/自定义 CSS/按消息主题;未 push/publish/市场 PR。
|
|
10
|
+
|
|
11
|
+
## 0.9.0 — 2026-10-23
|
|
12
|
+
|
|
13
|
+
- 主题系统:新增 `theme` Config(deepseek/codex/anthropic,默认 deepseek)与三套明/暗 token;暗色改用宿主 `body[data-ds-dark-theme]`,删除 `[data-theme="dark"]`。
|
|
14
|
+
- client 通过 `configForms` 读取 theme,写 `body[data-dsh-structured-theme]`;视觉关闭时移除 style 与 `data-dsh-structured*`;configForms 缺失回落 deepseek/开启。
|
|
15
|
+
- 新增 `scripts/theme-contrast.mjs`(3×2 全组 ≥4.5)、`test/theme.test.mjs`;`--ds-code-bg`/`--ds-code-text` 落地;语义状态色改用 `--ds-success/warn/error`。
|
|
16
|
+
|
|
3
17
|
## 0.8.3 — 2026-10-22
|
|
4
18
|
|
|
5
19
|
- 提示词优先级加固:首段 markdown 标题卡即使后文使用 `dsh-ui` 也必须存在;`dsh-ui` 只能跟在标题卡与正文之后,不得用其 `title` 充当首卡,不得把结论/判断/风险/下一步做成 dsh-ui 组件;宿主默认要出 UI 时以插件规则为准。
|
package/README.md
CHANGED
|
@@ -81,7 +81,7 @@ pnpm add $tgz
|
|
|
81
81
|
|
|
82
82
|
### 兼容性门禁
|
|
83
83
|
|
|
84
|
-
本包声明 `@deepseek-ai/schemastery` peer:`Config`(visual/defaultEnabled/tailReminder/includeSubagents/genui)用它生成设置表单;这是 host 提供的服务,不是门禁。真正门禁是 `engines.dsh`(`>=0.1.7-rc.2 <0.3.0-0`),`dsh-app-boot` 在有 `engines.dsh` 时读取它;`dsh.compatibility.dshReleases` 是 advisory。实测 DSH CLI `0.1.7-rc.2` 与 desktop `0.2.1-rc.2`。
|
|
84
|
+
本包声明 `@deepseek-ai/schemastery` peer:`Config`(theme/visual/defaultEnabled/tailReminder/includeSubagents/genui)用它生成设置表单;这是 host 提供的服务,不是门禁。真正门禁是 `engines.dsh`(`>=0.1.7-rc.2 <0.3.0-0`),`dsh-app-boot` 在有 `engines.dsh` 时读取它;`dsh.compatibility.dshReleases` 是 advisory。实测 DSH CLI `0.1.7-rc.2` 与 desktop `0.2.1-rc.2`。
|
|
85
85
|
|
|
86
86
|
## 使用
|
|
87
87
|
|
|
@@ -96,15 +96,22 @@ pnpm add $tgz
|
|
|
96
96
|
- 新会话默认开启;`defaultEnabled: false` 可改默认值(见配置)。
|
|
97
97
|
- 视觉层由插件设置 `visual` 控制(默认开启),不写 `state.json`;`/structured on|off` 只控制提示词注入,不影响视觉层。
|
|
98
98
|
- 自定义规则:写 `$DSH_HOME/dsh-structured/style.md`,**非空即整份覆盖**内置文本,保存后下一轮生效;文件为空或删除时回落内置。
|
|
99
|
+
- **用 `style.md` 承载人格 / 长期设定(可选)**:`style.md` 的内容会被原样放进每次请求的 section,所以也可以写人格、收尾格式或长期设定;代价是**整份覆盖**——内置结构化规则会消失。想同时保留两者,把 `src/index.js` 的 `BUILTIN_STYLE_TEXT` 全文抄进去,再在后面追加人格段。只当人格用、不需要结构化时,建议把 `tailReminder` 设为 `false`,否则尾部提醒仍会要求「首段 markdown 标题卡」。`style.md` 位于 `$DSH_HOME`,所有 profile 共用同一份。
|
|
99
100
|
- 内置文本与 `~/.dsh/AGENTS.md` 第 7 节同源:首句结论、组件化正文、一段一主题、禁过程叙事与复述、证据优先、短答不套卡;清晰优先,不设硬性篇幅上限。
|
|
100
101
|
|
|
102
|
+
### 代码 / diff 例外
|
|
103
|
+
|
|
104
|
+
- ` ```diff ` / ` ```patch ` 代码块、`[data-diff]`、`.md-diff`、`[class*="_diff_"]` 与 GenUI diff 区域**不套**插件的代码块/表格 chrome;diff 行色与宿主渲染保持原样。`data-diff`/类名守卫是防御性选择器,当前 host 是否真实可达未单独 live 验证。
|
|
105
|
+
- 当回复主要是代码、代码 diff、文件修改或补丁时,代码块或 diff 卡可以直接作为第一块,不强制标题卡;仍不写过程叙事。
|
|
106
|
+
- `/structured off` 仍只控制提示词;视觉层由插件设置 `visual` 控制。
|
|
107
|
+
|
|
101
108
|
### 视觉层(desktop 主目标;web 兼容)
|
|
102
109
|
|
|
103
|
-
客户端半区会给对话 markdown 加一层排版:标题层级与图标方块、表头/细横线/状态列、代码块语言色与贴合 banner
|
|
110
|
+
客户端半区会给对话 markdown 加一层排版:标题层级与图标方块、表头/细横线/状态列、代码块语言色与贴合 banner、风险/验收/结论三色卡片、结论/下一步卡、列表/链接/分隔线。`theme` 提供 `deepseek`(默认)/`codex`/`anthropic` 三套 token;`--ds-accent` 负责任 fill/border/icon,`--ds-accent-text` 负责文字/链接/标签/行内 code/表格结论(保证小字 AA);暗色走宿主 `body[data-ds-dark-theme]`。Codex 为绿 `#10A37F`/文字 `#0B6B4F`,Anthropic 为陶土 `#CC785C`/文字 `#A14A2E`,DeepSeek 默认蓝 `#2563EB` 不变;只给宿主节点加 class/attribute,不改消息内容,headless / CLI 不加载 client 半区。
|
|
104
111
|
|
|
105
|
-
视觉方向只做一套:**Linear 的秩序 + Notion 的卡片 + Stripe 的信息密度 + Vercel AI Elements 的回复结构**,见 [`docs/DESIGN-REFERENCES.md`](docs/DESIGN-REFERENCES.md)。卡片用图标方块 + 13px 标签 + 淡色表面;状态只在 68px 状态列着色,不再整行 pastel
|
|
112
|
+
视觉方向只做一套:**Linear 的秩序 + Notion 的卡片 + Stripe 的信息密度 + Vercel AI Elements 的回复结构**,见 [`docs/DESIGN-REFERENCES.md`](docs/DESIGN-REFERENCES.md)。卡片用图标方块 + 13px 标签 + 淡色表面;状态只在 68px 状态列着色,不再整行 pastel;表格结论用强调左规线。`theme` 只切换 token,不做主题市场/自定义 CSS/按消息主题。
|
|
106
113
|
|
|
107
|
-
设计与分阶段计划见 [`docs/VISUAL-PLAN.md`](docs/VISUAL-PLAN.md),视觉热点/层级诊断见 [`docs/VISUAL-CRITIQUE.md`](docs/VISUAL-CRITIQUE.md),卡片类型与热点预算见 [`docs/CARD-SYSTEM.md`](docs/CARD-SYSTEM.md)。视觉层由插件设置 `visual`
|
|
114
|
+
设计与分阶段计划见 [`docs/VISUAL-PLAN.md`](docs/VISUAL-PLAN.md),视觉热点/层级诊断见 [`docs/VISUAL-CRITIQUE.md`](docs/VISUAL-CRITIQUE.md),卡片类型与热点预算见 [`docs/CARD-SYSTEM.md`](docs/CARD-SYSTEM.md)。视觉层由插件设置 `visual` 控制(默认开启),`theme` 控制三套 token;`/structured on|off` 只控制提示词注入。
|
|
108
115
|
|
|
109
116
|
Phase 2 已落地 2.1–2.4:卡片类型(结论/判断/指标/风险/下一步/验收/重点)、`data-dsh-structured-card-type` 归属标记、GenUI 软联动(检测到才追加 `dsh-ui` 路由,未检测走纯 markdown fallback,不硬依赖)。
|
|
110
117
|
|
|
@@ -127,14 +134,15 @@ Phase 2 已落地 2.1–2.4:卡片类型(结论/判断/指标/风险/下一
|
|
|
127
134
|
```yaml
|
|
128
135
|
- id: dsh-structured
|
|
129
136
|
config:
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
theme: deepseek # deepseek | codex | anthropic;三套主题 token
|
|
138
|
+
visual: true # 客户端视觉层;由插件设置页切换,不写 state.json
|
|
139
|
+
defaultEnabled: true # 新会话默认开启
|
|
140
|
+
tailReminder: true # system prompt 末尾追加一句提醒
|
|
132
141
|
includeSubagents: false # 子代理会话不注入(它的产出不直接面向用户)
|
|
133
|
-
genui: auto
|
|
134
|
-
visual: true # 客户端视觉层;由插件设置页切换,不写 state.json
|
|
142
|
+
genui: auto # auto | on | off;auto 检测到 GenUI 才追加 dsh-ui 路由
|
|
135
143
|
```
|
|
136
144
|
|
|
137
|
-
`visual`、`defaultEnabled`、`tailReminder`、`includeSubagents`、`genui` 都是 `.volatile()` 配置,插件设置页(bundle 详情表单)可编辑;写入走 active profile 的 Cordis patch,home patch / CLI overlay
|
|
145
|
+
`theme`、`visual`、`defaultEnabled`、`tailReminder`、`includeSubagents`、`genui` 都是 `.volatile()` 配置,插件设置页(bundle 详情表单)可编辑;写入走 active profile 的 Cordis patch,home patch / CLI overlay 优先。若表单快照的 `writable` 为 false,说明当前配置被上层覆盖,设置页不会静默写入成功;请改上层配置或接受只读。`/structured on|off` 只影响 `state.json` 里的按会话提示词开关,不影响 `theme`/`visual`。
|
|
138
146
|
|
|
139
147
|
## 验证注入生效
|
|
140
148
|
|
package/cordis.patch.yml
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# tailReminder 是否在 system prompt 末尾追加一句提醒(默认 true)
|
|
7
7
|
# includeSubagents 是否也给子代理会话注入(默认 false,子代理产出不直接面向用户)
|
|
8
8
|
# genui auto | on | off;auto 检测到 dsh-genui 才追加 dsh-ui 路由(默认 auto)
|
|
9
|
+
# theme deepseek | codex | anthropic;客户端主题 token(默认 deepseek)
|
|
9
10
|
# visual 是否启用客户端视觉层(默认 true;由插件设置页切换,不写 state.json)
|
|
10
11
|
#
|
|
11
12
|
# 需要改默认值时,在 profile 的 cordis.patch.yml 里覆盖同一行(整份 config 替换,不是深合并):
|
|
@@ -19,4 +20,5 @@
|
|
|
19
20
|
tailReminder: true
|
|
20
21
|
includeSubagents: false
|
|
21
22
|
genui: auto
|
|
23
|
+
theme: deepseek
|
|
22
24
|
visual: true
|
package/docs/RISK-ROLLBACK.md
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
# 视觉方案:风险评估与回滚路径(0.7.3
|
|
1
|
+
# 视觉方案:风险评估与回滚路径(0.7.3 历史,0.9.1 更新)
|
|
2
|
+
|
|
3
|
+
> 0.9.1 现状:`theme`/`visual` 由 profile Config 控制;普通首引用 lead 与文本前缀 tone 已删除;下文 0.7.3 的风险/回滚记录仅作历史参考,当前回滚以 profile `cordis.patch.yml` 和插件卸载为准。
|
|
2
4
|
|
|
3
5
|
评估对象:`src/client.js` 的视觉层(CSS 皮肤 + 语义装饰)+ `src/index.js` 注入的标题卡契约。
|
|
4
6
|
实装状态:desktop profile 已装 0.7.3(`file:<repo>/dsh-structured-0.7.3.tgz`,`dsh.profile.bundles` 中一行)。
|
package/docs/ROADMAP.md
CHANGED
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
|
|
66
66
|
### 2.6 单一视觉方案定稿与回归
|
|
67
67
|
|
|
68
|
-
- 锁定一套「工程蓝图」视觉:token
|
|
69
|
-
- `/structured on|off`
|
|
70
|
-
-
|
|
68
|
+
- 锁定一套「工程蓝图」视觉:token、字号、间距、卡片样式;0.9.0 增加 deepseek/codex/anthropic 三套 token,`theme` 由 profile Config 控制,不做主题市场。
|
|
69
|
+
- `/structured on|off` 只控制按会话的提示词开关;`theme`/`visual` 在设置页。
|
|
70
|
+
- 验收:三套主题在明/暗、不同桌面宽度下不溢出、不遮挡;设置页可切换。
|
|
71
71
|
|
|
72
72
|
## 非目标
|
|
73
73
|
|
package/docs/VISUAL-CRITIQUE.md
CHANGED
package/docs/VISUAL-PLAN.md
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
结构化只解决“信息顺序”,视觉层解决“扫读成本”。方案是三层,不动 markdown 渲染器、不接管 GenUI:
|
|
10
10
|
|
|
11
|
-
1. **结构契约**(已有):首句结论 + 表格/清单/步骤 +
|
|
12
|
-
2. **视觉层**(本次落地):用客户端 CSS + 轻量 DOM
|
|
11
|
+
1. **结构契约**(已有):首句结论 + 表格/清单/步骤 + 清晰优先(不设硬性篇幅上限),host 每请求注入。
|
|
12
|
+
2. **视觉层**(本次落地):用客户端 CSS + 轻量 DOM 属性,给标题、表格、代码块、引用、列表、链接做统一排版;0.9.0 起主题 token 走 deepseek/codex/anthropic 三套,暗色由宿主 `body[data-ds-dark-theme]` 驱动。
|
|
13
13
|
3. **组件层**(交接 GenUI):需要交互、图表、可排序表格时,用 ` ```dsh-ui ` fence 交给 `dsh-genui`;视觉层只美化它周围的普通 markdown。
|
|
14
14
|
|
|
15
|
-
视觉方向定为
|
|
15
|
+
视觉方向定为 **「工程蓝图」**:等宽小标签、清晰网格、明暗自动跟随;0.9.0 提供三套 token,不做主题市场/自定义 CSS/按消息主题。
|
|
16
16
|
|
|
17
17
|
## 现状与差距
|
|
18
18
|
|
|
@@ -99,9 +99,9 @@ CSS 视觉层 + 标题关键词图标 + callout 三色 + 代码语言色 + 结
|
|
|
99
99
|
|
|
100
100
|
### P1(1–2 天):单一视觉方案定稿与回归
|
|
101
101
|
|
|
102
|
-
-
|
|
103
|
-
- 明暗由宿主
|
|
104
|
-
-
|
|
102
|
+
- 锁定 token/字号/间距/卡片样式;0.9.0 增加 deepseek/codex/anthropic 三套 token,`theme` 由 profile Config 控制,不做主题市场。
|
|
103
|
+
- 明暗由宿主 `body[data-ds-dark-theme]` 驱动;补对比度、密度、窄屏和 `prefers-reduced-motion` 回归。
|
|
104
|
+
- 验收:三套主题在明/暗、desktop 窗口宽度下都不溢出、不遮挡;设置页可切换。
|
|
105
105
|
|
|
106
106
|
### P2(2–3 天):代码块与表格交互
|
|
107
107
|
|
|
@@ -124,10 +124,10 @@ CSS 视觉层 + 标题关键词图标 + callout 三色 + 代码语言色 + 结
|
|
|
124
124
|
| 流式期间 DOM 改写导致内容冻结 | 只加属性,不改文本/节点;MutationObserver + rAF 合批;不在流式中间做 wrapper |
|
|
125
125
|
| 主题 token 不覆盖代码高亮色 | 复用宿主 `--dsw-alias-markdown-code-block*`(如果存在),否则用 `color-mix` 派生;不写死 hex 作为唯一来源 |
|
|
126
126
|
| 视觉层让回复变长/变重 | CSS 不增加内容;组件只加边框/间距;P3 用截图和 DOM 节点数做回归 |
|
|
127
|
-
| 用户想要不同风格 |
|
|
127
|
+
| 用户想要不同风格 | 0.9.0 提供 deepseek/codex/anthropic 三套 token;不做主题市场/自定义 CSS;文字规则仍用 `style.md` 覆盖 |
|
|
128
128
|
|
|
129
129
|
## 已定
|
|
130
130
|
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
- 个性化:`style.md`
|
|
131
|
+
- 视觉方案:一套「工程蓝图」,0.9.0 起提供三套 token(deepseek/codex/anthropic)。
|
|
132
|
+
- 开关:`/structured on|off` 只控制提示词;`theme`/`visual` 在设置页。
|
|
133
|
+
- 个性化:`style.md` 只覆盖文字规则;不做主题市场/自定义 CSS。
|