Bundle
dsh-output-style
Single-select answer modes for DeepSeek Harness.
- Source
- null-object-0000
- License
- Apache-2.0
- Updated
- Updated 2 days ago
Readme
# dsh-output-style 中文 | [English](README.en.md) 面向 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的会话级回答方式插件。 它在输入框旁提供一个单选入口,统一管理表达风格和思考引导;后选会覆盖前选,不会改变模型、权限、工具、Plan 或 Goal。 菜单内按**表达方式**和**思考引导**分组,便于快速区分用途。 ## 回答方式 表达方式: | 模式 | 作用 | | --- | --- | | `default` | 不注入额外引导,正常回答。 | | `eli5` | 用白话和类比解释复杂内容,让我看懂。 | | `adhd-friendly` | **开始行动**——把任务拆成马上能做的下一步。 | | `bluf` | 先说最重要的,再补充关键理由。 | | `layers` | 先给必要重点,需要时再逐层展开。 | 思考引导: | 模式 | 作用 | | --- | --- | | `interview` | 一次问一个问题,把模糊想法梳理清楚。 | | `feynman` | 通过解释、复述和纠错,建立真正理解。 | | `rubber-duck` | 通过追问推理,找到没有想清楚的地方。 | ## 同一个问题,八种回答方式 我们向同一个模型提出了同一个问题: > 我想做一个类似短网址的服务:输入一个很长的网址,返回一个短网址,访问短网址时再跳回原地址。我应该怎么设计? 模式没有改变模型、工具或权限,但明显改变了回答的组织方式,以及 Agent 如何推进问题。 ### 想直接获得答案 **默认** 给出一份完整的技术方案,从数据模型、短码生成讲到缓存、安全和规模化。信息最全面,但也需要一次消化最多内容。 **通俗解释** 先把短网址比作酒店服务: > 短码是房号,数据库是登记本,服务器是前台。 理解核心模型后,再引入 Base62、重定向和缓存等真实技术概念。它没有回避术语,而是先为术语建立直觉。 **开始行动** 先压缩成可以执行的设计: > 一张表保存“短码 → 长网址”,创建时生成短码,访问时查表并返回 302。 随后只确认是否需要继续搭建代码。用户选择“只要设计”后,Agent 又把结果收敛成短码、跳转方式、存储三个决策。本次运行共回复两步,只追问了一次。 **结论先行** 第一句话直接给出推荐方案: > 核心就是一张映射表,短码用自增 ID 经 Base62 编码生成,访问时查表并返回 302。 后面的表结构、缓存与安全说明都是对这条结论的补充。它并不刻意缩短答案,而是确保用户不用读到最后才知道建议是什么。 **分层展开** 只提供第一层必要信息:生成短码、保存映射、访问时重定向,然后让用户选择继续展开短码冲突、缓存并发或安全防滥用。 这是本次测试中最短的直接回答,正文约 724 字,只有默认模式的约 28%。 ### 想和 Agent 一起思考 **访谈梳理** Agent 没有立即假设需求,而是依次确认了三个问题: 1. 使用场景和规模; 2. 技术栈偏好; 3. 最终想要设计文档还是可运行代码。 得到答案后,才整理出架构、数据模型、接口、安全约束和成功标准。它适合“我大概知道想做什么,但还说不清具体需求”的阶段。 **费曼学习** Agent 先解释短网址为什么本质上是一张映射表,然后用一个诊断问题检查理解: > 为什么使用“自增 ID + Base62”,而不是“对长网址做哈希再截断”?两者的根本区别是什么? 目标不只是给出设计,而是确认用户能否自己解释关键取舍。 **橡皮鸭** Agent 连续提出了八个窄问题,从服务规模一路追问到哈希碰撞、去重机制和短码枚举。 用户最初选择“长网址哈希后截断”,经过逐步推演,最终发现: > “同一长链得到同一短码”其实由查表去重保证,而不是由哈希保证;哈希截断只增加了碰撞处理,并没有带来额外收益。 最后方案自然收敛为“查表去重 + 随机不可枚举短码”。橡皮鸭没有替用户直接做决定,而是帮助用户发现自己推理中的隐藏假设。 > [!NOTE] > 这是一组真实运行结果,不是预先编写的固定答案。模型每次生成的技术细节可能不同;回答方式控制的是信息如何组织、问题如何推进,而不是把回答锁死成某个模板。 ## 环境要求 - DeepSeek Harness `>=0.1.0-rc.7`(开发基于 `0.1.1-rc.2`)。 - 一个要安装进去的 DSH profile(下面以 `web` profile 为例)。 ## 安装 ```sh dsh plugin --profile web add dsh-output-style ``` 重启 `dsh web`。回答方式选择器会出现在输入框工具行、权限控件旁边。 从本地检出目录安装: ```sh dsh plugin --profile web add file:/path/to/dsh-output-style ``` ## 卸载 ```sh dsh plugin --profile web remove dsh-output-style ``` 然后重启 `dsh web`。 ## 使用 - `/style` —— 列出当前表达风格和所有可用风格。 - `/style <id>` —— 切换表达风格,例如 `/style layers`。 - `/style off` 或 `/style default` —— 回到默认。 - `/method` —— 列出当前思考引导和所有可用方法。 - `/method <id>` —— 切换思考引导;`/method off` 回到默认。 - 页面选择器与斜杠命令使用同一套会话状态。 插件不会把每种回答方式注册成独立的斜杠命令,以免占满输入框的命令面板。日常使用推荐直接通过页面选择器切换。 选择按**会话**保存,resume / fork 后仍能恢复。无论通过选择器还是快捷命令切换,新回答方式都会关闭原来的回答方式。 ## 工作原理 插件分为 host 和 client 两部分: - **host**(`src/index.ts`)—— 注册系统提示词片段、互斥的会话投影和斜杠命令。 - **client**(`src/client/`)—— 提供输入框旁的单一选择器,并打包为 `lib/client.js`。 host 和 client 都读取 `command/run` / `command/done` 持久化事件的同一份纯折叠,因此模型看到的引导和页面选中状态始终一致,也不需要写自定义 Session Event。 ### I Have ADHD 适配 `adhd-friendly` 改编自 [`ayghri/i-have-adhd`](https://github.com/ayghri/i-have-adhd),保留上游项目的 10 条行为规则、例外情况和发送前检查。 开启与持久化由 DSH 负责,因此没有嵌入上游 Skill 自己的开关指令;选择回答方式也不会改变 Agent 的运行模式。 本适配固定对应上游提交 `cbe69fb83c08a37cf54d5ec9ec6bb88c8bc9973c`。归属和许可证见 [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md)。来源名称仅出现在说明与致谢中,不会显示在选择器文案里。 ### ELI5 设计 `eli5` 是面向 DSH 场景重新编写的提示词,参考了常见的 ELI5 实践和 [`mblode/agent-skills`](https://github.com/mblode/agent-skills/tree/main/skills/eli5) 等社区实现,不是逐字复制,也不宣称为官方实现。它保留白话要点、贯穿类比、真实技术名称、逐层深入和明确下一步;开启、持久化、工具与 Agent 模式仍由 DSH 负责。 ## 开发 ```sh pnpm install pnpm run typecheck pnpm run test pnpm run build pnpm run dist ``` `pnpm run dist` 会执行 `publint`。它会报告一条预期内的 CJS/ESM 警告:DSH 浏览器加载器要求 CommonJS 客户端 bundle 固定使用 `lib/client.js`,因此不能改为 `.cjs`。 ## 发布 发布由 [GitHub Actions](.github/workflows/publish.yml) 和 npm Trusted Publishing(OIDC)完成,不需要长期 npm token。 推送 `v*` 标签后,流水线会执行类型检查、测试、构建、发布检查、版本校验和 npm 发布。 ```sh npm version patch # 也可以使用 minor / major git push --follow-tags ``` ## 许可证 [Apache-2.0](LICENSE)。改编的 `i-have-adhd` 内容使用 MIT 许可证,详见 [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md)。
Install
dsh plugin --profile web add github:null-object-0000/dsh-output-style
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-output-style from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.