dsh-structured
Structured output for DSH: no-label title card first, then tables/lists/steps; per-session switch and style.md override. 让 DSH 的每条实质回复默认结构化。
一句话定位
Structured output for DSH: no-label title card first, then tables/lists/steps; per-session switch and style.md override. 让 DSH 的每条实质回复默认结构化。
安装方式
在 DSH 的 web profile 中执行下面的命令;装完刷新页面即可。
$ dsh plugin --profile web add dsh-structured@1.0.13
兼容的 DSH 版本
>=0.1.7-rc.2 <0.4.0-0
作者与热度
feigo313 · ★ 10 · 更新于 2026-11-09
关于这个插件
dsh-structured
让 DSH 的每条实质回复默认结构化:首句给结论,内容用表格 / 清单 / 步骤排出来;1.0 起再加一层人格模式:身份头 / 三卡 / 收尾由插件渲染,模型只交内容。按会话开关,默认开启;规则可用 style.md 整份覆盖(人格开启时不注入)。
它解决的是一个实测问题:只靠 ~/.dsh/AGENTS.md 第 7 节的提示词规则,56 条符合触发条件的回复里只有 21 条真的结构化(37.5%),长上下文下继续衰减。本插件把同一条规则放进每次请求都会重新求值的 system prompt section,并在末尾追加一句轻量提醒,不依赖模型记住历史。
路线图:Phase 1 结构化已完成;Phase 2 做视觉热点规范引导与卡片系统,见 [docs/ROADMAP.md](docs/ROADMAP.md)。
判定优先级
1. 老板读得快不快
2. 会不会打断会话(稳定性)
3. token 成本
4. 实现优雅
对应到实现:注入只有一条规则段(约 400 字)+ 一句尾部提醒(约 50 字);任何异常都放行原请求;不接管 GenUI,不改 agent 循环。
安装
要求:DSH 0.2.x – 0.3.x(@deepseek-ai/cordis 4.x),Node ≥ 22。
默认目标就是 desktop profile。 插件只硬依赖 systemPrompt(desktop 由 @deepseek-ai/dsh-base 提供),commands 是可选服务;不依赖 Electron/headless 专有 API,也没有 profile 分支。安装前先跑一次预检:
node scripts/desktop-check.mjs
desktop 由 Electron 独占只影响 CLI 的 --profile desktop 子命令,不影响插件本身;推荐走插件管理入口,或退出 Desktop 后手工 pnpm(方式二)。
方式一:插件市场
在 DSH 插件管理里搜索 dsh-structured 安装;市场收录后可用。桌面端由应用侧加载 client,不需要浏览器刷新。
方式二:npm
dsh plugin --profile add dsh-structured@1.0.4
dsh plugin add 会转发给 profile 里的 pnpm;1.0.4 已在临时 DSH_HOME 实测可装(pnpm 会自动把新版本加进 minimumReleaseAgeExclude)。
desktop profile 由 Electron 独占,使用插件管理搜索/安装,不要跑 --profile desktop。
方式三:GitHub Release
从 GitHub Releases 下载最新版的 dsh-structured-.tgz(当前 0.9.1),在插件管理里选择本地包;不使用 npm 时,市场 YAML 的 tarball 指向该 release。
开发方式:本地 tgz / 手工 pnpm(desktop profile)
本地包只用于开发验证:在 DSH 插件管理里选择仓库根的 dsh-structured-.tgz,或 plugin_manager.install_bundle 指向该文件。手工 pnpm 方式如下。
desktop profile 由 Electron 独占:全局 dsh plugin --profile desktop ... 会被 CLI 直接拒绝(profile "desktop" is managed exclusively by the Electron application)。不要用那条命令。要先完全退出 Desktop,再在 profile 目录里手工 pnpm:
$dir = Join-Path $env:DSH_HOME 'profiles\desktop' Copy-Item "$dir\package.json" "$dir\package.json.bak-before-dsh-structured" Copy-Item "$dir\pnpm-lock.yaml" "$dir\pnpm-lock.yaml.bak-before-dsh-structured" Copy-Item "$dir\cordis.patch.yml" "$dir\cordis.patch.yml.bak-before-dsh-structured" Set-Location $dir $tgz = "dsh-structured-0.9.1.tgz" # 把 tgz 放到当前目录,或写成实际路径 pnpm add $tgz
手工 pnpm 不会自动改 bundle 列表,需要把 dsh-structured 加进 $dir\package.json 的 dsh.profile.bundles(只加一次,不要重复):
{
"dsh": { "profile": { "bundles": ["...", "dsh-structured"] } }
}
启动 Desktop。
开发期用独立测试 profile 时,dsh plugin --profile <测试 profile> add 可以正常使用,并且会自动追加 bundle 行;新 profile 可用 dsh --from-default-profile headless "..." 创建。
Desktop 兼容性依据
- 预检:
node scripts/desktop-check.mjs全部 PASS —— desktop profile 已初始化、bundle 栈含dsh-base/dsh-web-app、files含cordis.patch.yml、main/exports指向存在文件、dsh.client.platform: web与exports["./client"]就位、engines.dsh/dsh.compatibility.dshReleases已声明、运行时只 importnode:、无 Electron 专有 API、无 profile 分支、状态走DSH_HOME。 - desktop 是主目标,Web 只做兼容。 本会话本身运行在 desktop profile,
systemPrompt与commands由 live host 的 Service 查询确认;dsh.client.platform: web是 DSH 客户端模块的格式(desktop 的 Web UI 也加载它),不代表 Web 优先。 - desktop 实装实测:desktop profile 已装 0.9.1(
dependencies/bundles各一处,见docs/MAINTENANCE-LOG.md2026-10-23 条目);desktop 会话最新system/message命中注入(可用scripts/session-inspect.mjs复跑)。 - 视觉层由 desktop 应用侧加载,验收以应用内实际渲染为准;不要求用户手动刷新。
兼容性门禁
本包声明 @deepseek-ai/schemastery peer:Config(theme/visual/defaultEnabled/tailReminder/includeSubagents/genui + personaEnabled/persona/personaRevision/personaName/personaSignature/personaAvatar)用它生成设置表单;这是 host 提供的服务,不是门禁。真正门禁是 engines.dsh(>=0.1.7-rc.2 <0.4.0-0,0.9.4 起覆盖 0.3.x),dsh-app-boot 在有 engines.dsh 时读取它;dsh.compatibility.dshReleases 是 advisory。实测 DSH CLI 0.1.7-rc.2 与 desktop 0.2.1-rc.2;0.2.1-rc.3 / 0.3.0-rc.1 为声明性兼容(插件依赖的 systemPrompt / commands / configForms / plugins.bundle.config 均为宿主稳定服务面,未见破坏性变更公告;未逐项实测,实测后将更新标注)。
使用
/structured # 查看本会话状态 /structured off # 关闭本会话(下一轮生效) /structured on # 重新开启 /structured status # 同 /structured
- 开关按会话独立,状态落在
$DSH_HOME/dsh-structured/state.json(tmp + rename 原子写)。 - 新会话默认开启;
defaultEnabled: false可改默认值(见配置)。 - 视觉层由插件设置
visual控制(默认开启),不写state.json;/structured on|off只控制提示词注入,不影响视觉层。 - 自定义规则:写
$DSH_HOME/dsh-structured/style.md,非空即整份覆盖内置文本,保存后下一轮生效;文件为空或删除时回落内置。 - 用
style.md承载长期设定(可选):style.md的内容会被原样放进每次请求的 section,代价是整份覆盖内置文本;想同时保留结构规则,把src/index.js的BUILTIN_STYLE_TEXT全文抄进去再追加。注意互斥:persona 开启时style.md不注入(PersonaMode 只注入内容合同);要长期设定请迁移到语气设置页的性格字段,或显式关闭人格后再用style.md。 - 内置文本与
~/.dsh/AGENTS.md第 7 节同源:首句结论、组件化正文、一段一主题、禁过程叙事与复述、证据优先、短答不套卡;清晰优先,不设硬性篇幅上限。
同分类对比
同一分类下 Star 最高的 5 个,便于横向比较。
| 插件 | 作者 | Star | 版本 | 更新 |
|---|---|---|---|---|
| archify | tt-a1i | 95.2K | 0.0.0 | 2026-11-10 |
| nuwa-skill | alchaincyf | 37.9K | 2.0.1 | 2026-11-10 |
| distilly | titanwings | 26.5K | 1.0.0 | 2026-10-13 |
| learn-harness-engineering | walkinglabs | 24.1K | 0.1.0 | 2026-10-22 |
| dsh-Go | ccch1mneyyy | 18.1K | 0.0.0 | 2026-11-10 |