← 返回列表
✓ 可直接安装
⌨️ dsh-composer-history
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/12 · 已提供中文文档
DeepSeek Harness Web 编写器的终端风格输入历史:边缘优先的箭头键,精确恢复草稿/光标位置,浏览器本地持久化历史,Ctrl+R 反向搜索,工作区召回——以及滑动上下文感知(召回/搜索中的压缩摘要,带一键 /compact 填充的压缩通知)。
综合分
39.5
GitHub 分
39.5
用户评分
—
★ Stars
14
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-composer-historynpm 包 dsh-composer-history 已校验归属本仓库,走 npm 安装最省事
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-composer-history @ 0.8.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 16:26:36
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-input-trigger@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-settings@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
⌨️ dsh-composer-history
- 1024 商店渠道:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-composer-history(计入 deepseek1024.com 安装排名)。
Gitee
为 DeepSeek Harness Web GUI 输入框提供终端风格的输入历史。
像在终端里一样按 ↑ —— 同时保护你输入到一半的草稿。
License
DSH plugin
dsh-doctor
Node
CI
Version
npm version
npm downloads
English · 简体中文 · Español · Português · हिन्दी
兼容性
| 层面 | 状态 |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-rc.2(GitHub tag,2026-09-11 验证;客户端 peer 依赖 >=0.1.2-rc.1 =0.1.5-alpha.1 =24.0.0 |
| 平台 | 仅 Web GUI(客户端插件;浏览器本地存储;无网络请求,无原生代码) |
| 模型 | 任意(不发起模型请求 —— 纯 UI 行为) |
浏览器端部分依托已发布的客户端包(dsh-client-ui-conversation、dsh-client-ui-input-trigger、dsh-client-ui-settings)以及 cordis 的 Context;它不再依赖已被移除的 dsh-client-runtime 包,因此客户端层面也与 0.1.2-rc.1 宿主保持对齐。
拦截锚定在 Web 输入框的 DOM 上:[data-input-scroll] 内的 contenteditable 表面 div[data-composer-input](自 0.1.2-alpha.5 / 0.1.2-rc.1 起发布的 Lexical 输入框),同时仍匹配 [data-input-scroll] 内的旧版 textarea 输入框(harness 版本至 0.1.1-rc.2);其他位置的 textarea 直接放行。兼容性工作流的 jsdom Web 行为冒烟测试会针对打包后的 bundle 断言这一 identity/text/caret 界面。
0.1.2-rc.1(适配于 2026-09-04):会话信封仅为存储日志读取兼容性保留其可忽略字段——Session.append 仍无法写入该字段,因此审计门行为不变。已于 2026-09-06 针对 dsh-v0.1.3-alpha.1 主检出(完整门链 + 配置文件安装冒烟测试)验证。
0.1.5-rc.1(适配于 2026-09-10):依赖锁定版本移至已发布的 0.1.5-rc.1 系列;无接缝变更影响此插件的行为。
0.1.5-rc.2(适配于 2026-09-11):依赖锁定版本移至已发布的 0.1.5-rc.2 系列;无接缝变更影响此插件的行为。
你将获得
dsh-composer-history 将终端的输入历史带入 DeepSeek Harness Web GUI 输入框:
1. 边缘优先的方向键回溯——单独按 ↑/↓ 首先移动光标;仅当光标位于首行/末行时才触发历史回溯。首次回溯会暂存 {draft, caret},再次到达最新条目(或按 Esc)会精确恢复两者——绝不清除。
2. 持久化历史——每条已发送消息都会追加到有界的浏览器本地存储中,因此回溯在页面重新加载后依然保留,并可跨会话使用。
3. 反向搜索——Ctrl+R(可配置)在合并的历史、片段和模板之上打开查询浮层。
4. 智能输入层——/save//load 片段、带 {{workspace}}/{{session}}/{{draft}} 变量的提示模板,以及浏览器本地的复用洞察。
5. 滑动上下文感知——压缩摘要以 [compacted] … 条目的形式加入回溯和搜索,并且每次压缩都会以一条瞬时通知宣告,附带一键 /compact 填充。
6. 版本化 JSON 备份——将全部四个库(历史、片段、模板、洞察)导出/导入为一份带模式版本的文档;导出时可下载或复制,导入时可选择文件或粘贴。
纯 UI 行为:无会话事件、无智能体循环变更、无模型请求。回溯的文本仅进入普通输入框草稿;只有你按下 Enter 时,它才会到达模型。
快速开始
1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-composer-history#main"
or from npm (published releases)
dsh plugin --profile web add dsh-composer-history
2. restart and verify the row
dsh --profile web --dump-config | grep -A3 'id: composer-history'
安装与卸载
npm 包附带构建好的 bundle;源码检出必须先构建(pnpm run build)——客户端包检查会拒绝在未构建的 bundle 上启动。
- git 渠道(最新 main):dsh plugin --profile web add "github:PerryLink/dsh-composer-history#main"。
- npm 渠道(已发布版本):dsh plugin --profile web add dsh-composer-history。
- tarball 渠道:在本仓库中执行 pnpm pack,然后执行 dsh plugin --profile web add ./dsh-composer-history-.tgz。
- 卸载:dsh plugin --profile web remove dsh-composer-history(或从配置文件补丁中移除该行)。
配置
所有可调项都是 Schemastery Config 字段(可从 cordis.yml 和设置文档中更改)。以 id 为目标的覆盖会替换整行——请重新声明你需要的每个键。无效的枚举值会让整个 dsh 启动大声失败。
| 键 | 默认值 | 含义 |
|---|---|---|
| recallWithDraft | 'save' | 召回模式(save / gate):save 在召回前暂存非空草稿;gate 仅在草稿为空时召回(Claude/Codex 风格的门控) |
| restoreOnEscape | true | 当 Esc 结束浏览时恢复暂存的草稿 |
| edgeMode | 'logical' | 边缘检测模式(logical / visual):按 \n 行或按测量到的换行行 |
| enableCtrlAlias | true | 让 Ctrl+↑/↓ 表现得像裸方向键 |
| restoreCaret | true | 在触底 / Esc 时也恢复暂存的光标位置 |
| upKey | 'ArrowUp' | 向上召回的 KeyboardEvent.key;'' 禁用 |
| downKey | 'ArrowDown' | 走向更新 / 恢复的 KeyboardEvent.key;'' 禁用 |
| escapeKey | 'Escape' | 退出浏览的 KeyboardEvent.key;'' 禁用 |
| maxHistory | 500 | 最大召回条目数(保留最新的);0 = 无限制 |
| includeKinds | ['user'] | 允许进入历史的对话节点类型(添加 'steering' 以包含引导消息) |
| historyScope | 'session' | 历史范围(session / workspace):workspace 会在当前会话的用户消息之前前置其他已列出会话的用户消息 |
| persistHistory | true | 将已发送消息追加到浏览器本地存储 |
| maxPersisted | 200 | 最大持久化条目数;0 = 无限制 |
| enableSearch | true | 启用 Ctrl+R 反向搜索覆盖层 |
| searchKeys | ['Ctrl+R'] | 打开搜索的和弦规格(修饰键 Ctrl/Alt/Meta/Shift + 一个键名);格式错误的规格会让浏览器 fiber 大声失败 |
| searchCaseSensitive | false | 搜索匹配是否区分字母大小写 |
| includeCompactionSummaries | true | 允许 [compacted] … 检查点摘要进入召回和搜索 |
| showCompactionNotice | true | 当压缩检查点落地时显示一条临时通知 |
| compactCommandText | '/compact' | 通知的“Compact now”操作填入编辑器的斜杠命令;'' 隐藏该操作 |
| enableSnippets | true | 启用片段库(/save、/load、搜索面板选取) |
| maxSnippets | 200 | 最大存储片段数;0 = 无限制 |
| enableTemplates | true | 启用提示模板库(插入时填充变量) |
| enableInsights | true | 启用复用洞察提示(本地使用统计) |
| insightMinUses | 2 | 显示复用提示前的最小使用次数 |
| enableCompactionHighlight | true | 在搜索面板中为 [compacted] … 摘要添加独特标记 |
工具与界面
| 界面 | 类型 | 备注 |
|---|---|---|
| ArrowUp | 键绑定 | 边缘优先的 ↑/↓ 召回——暂存 {draft, caret},在触底或 Esc 时精确恢复两者 |
| Ctrl+R | 键绑定 | 在合并历史、片段和模板上进行反向搜索覆盖层 |
| /save | 命令 | 将当前草稿保存为带名称和标签的片段 |
| /load | 命令 | 在光标处插入已保存的片段 |
| templates | UI | 历史、片段、模板和洞察的版本化 JSON 备份导出/导入(仅限显式点击) |
| composer-history | 设置命名空间 | 将解析后的配置带入浏览器端 |
键绑定
| 按键 | 状态 | 行为 |
|---|---|---|
| ↑ | IDLE,光标在第一行 | 暂存 {draft, caret},填入最新条目,光标移至末尾(无历史 → 放行) |
| ↑ | BROWSING,光标在第一行 | 更早的条目;停留在最旧条目(拦截,不修改) |
| ↑ | 光标不在第一行 | 完全放行(浏览器移动光标) |
| ↓ | IDLE | 始终放行(普通光标移动) |
| ↓ | BROWSING,光标在最后一行 | 更新的条目;到达最新条目 → 恢复 savedDraft + savedCaret → IDLE |
| ↓ | 光标不在最后一行 | 完全放行 |
| Esc | BROWSING(restoreOnEscape: true) | 恢复 savedDraft + savedCaret → IDLE,已拦截 |
| Esc | 其他情况 | 放行(菜单/弹窗的 Escape 语义不受影响) |
| Ctrl+↑/↓ | enableCtrlAlias: true | 与单独的方向键相同 |
| searchKeys 组合键 | 编辑器获得焦点、plain 阶段、无菜单/选区/输入法 | 打开反向搜索;浏览结束,显示的文本成为草稿 |
| Shift/Alt/Meta+方向键、输入法、选区 | 任意 | 始终放行 |
upKey/downKey/escapeKey/searchKeys 可重命名上述按键;修饰键策略(以及搜索组合键的精确修饰键匹配)保持不变。在搜索覆盖层内:↑/↓ 移动匹配选择(选中的行滚动到可视区域),Enter 填入,Esc 取消,点击选择,在外部按下则取消;每一行中匹配的子串都会高亮显示。
反向搜索
- 打开:在编辑器获得焦点且输入为 plain 时按下 searchKeys 组合键(此处的 Ctrl+R 也会阻止浏览器页面重新加载——该按键仅在编辑器内被消费)。
- 过滤:对合并历史(当前会话 + 持久化 + 工作区条目)进行子串匹配;大小写敏感性由 searchCaseSensitive 决定;每一行中匹配的子串都会高亮显示。
- 选择:Enter 填入草稿并将光标移至末尾——与普通召回使用相同的单一 setDraft 写入路径。召回文本只有在你随后按下 Enter 时才会到达模型。
- 取消:Esc 或点击面板外部;草稿不受影响。
智能输入层
在终端风格历史之上,三个浏览器本地库将编辑器转变为可复用的输入界面。以下所有内容都存放在 localStorage 中(键为 dsh.composer-history.snippets.v1、.templates.v1、.insights.v1),绝不接触网络,且每个开关都是一个 Config 字段。
片段(跨会话命令库)
/save ship-check --tag=release,ops
check the build, run the smoke suite, tag the release ← 草稿的其余部分即为片段
/save ship-check → “已保存片段:ship-check”
/load ship-check → 该片段会填充到输入框
Ctrl+R → 搜索面板会在历史记录旁列出片段(绿色徽章 = 名称)
- /save 会消耗 Enter,将草稿(去掉命令行)以 kebab-case 名称保存,并可附带标签,然后清空输入框。没有可保存的内容 → 显示错误提示,命令不会发送。
- /load 会在光标处插入片段(替换整个草稿,光标移到末尾),并计入使用次数。
- 作用域:带有工作区 cwd 保存的片段为工作区作用域;未带 cwd 保存的片段为全局作用域。maxSnippets 限制库的大小;同名保存会替换。
- 该插件从不发送:每次填充都落在普通草稿中,你的 Enter 仍然由你掌控。
带变量的提示模板
模板是存储的提示文本,带有 {{variable}} 占位符。搜索面板会用紫色徽章列出它们;选择一个模板会根据当前会话填充变量并插入结果。内置变量:{{workspace}}(会话的 cwd)、{{session}}(会话 id)、{{draft}}(当前草稿)。引用未知变量的模板会明确报错并列出缺失项——半填充的提示比错误更糟。
整个库——历史记录、片段、模板和洞察——通过面板的 Export JSON / Import file 操作导出到单个带版本的 JSON 文档,并从中导入;参见下方 备份导出与导入。这是明确的用户操作;插件自身从不写入文件。
复用洞察
每条新提交的用户消息(以及每次片段加载)都会以精确文本为键,生成一条浏览器本地使用记录。当你输入时,一旦草稿匹配到至少在 insightMinUses(默认 2)个会话中使用过的提示,输入框下方会显示一条小提示:used M× in N sessions · 在 N 个会话里用过 M 次。可通过 enableInsights 切换;统计数据仅包含去重后的文本和计数器。
压缩摘要高亮
Ctrl+R 会用琥珀色徽章标记 [compacted] … 摘要(历史记录保持无徽章),片段为绿色,模板为紫色——面板的来源一目了然。可通过 enableCompactionHighlight 切换。
备份导出与导入
所有四个浏览器本地库都会导出到单个带版本的 JSON 文档,并从中导入。面板的 Export JSON / Copy JSON / Import file / Paste JSON 操作完全在浏览器中运行:导出时下载或复制到剪贴板,导入时选择文件或粘贴文本——不会上传任何内容,也不涉及宿主 RPC 或网络调用。
文档结构
{
"schemaVersion": 1,
"exportedAt": 1735689600000,
"data": {
"history": ["…"],
"snippets": [{ "name": "…", "text": "…", "tags": [], "scope": "global", "createdAt": 0, "updatedAt": 0, "useCount": 0, "lastUsedAt": 0 }],
"templates": [{ "name": "…", "text": "…", "description": "", "updatedAt": 0 }],json
"insights": [{ "text": "…", "sessions": [], "uses": 0, "lastUsedAt": 0 }]
}
}
合并与冲突策略
- 历史条目是纯字符串,按精确文本去重;重复或空白条目会被跳过,绝不会被覆盖。
- 片段和模板以 name 为键;洞察以精确的 text 为键。当键相同时发生冲突,时间戳最新者胜出(片段/模板用 updatedAt,洞察用 lastUsedAt);时间戳更早或相同的导入会被跳过,新键则追加。
- 导入遵循 maxPersisted 和 maxSnippets;模板和洞察的上限为各自固定的协议限制(各 500)。
- 结果通知会报告写入了多少条记录、跳过了多少条(更早/重复)。
模式版本管理
schemaVersion 从 1 开始。导入会执行逐步迁移(一次一个版本),以便未来的格式能就地升级旧文档。如果文档的 schemaVersion 新于当前构建所理解的版本,则会被拒绝并报错——它绝不会被静默丢弃或部分合并;版本过旧而无法迁移的文档也会以同样方式被拒绝。
滑动上下文
harness 核心为每个 dsh 会话提供一个滑动上下文窗口,与 Claude Code 和 Codex 所采用的工作流相同:当对话接近模型的上下文限制(或提供方报告溢出)时,harness 会自动压缩——较早的轮次会被摘要,并置于一个 compaction 检查点标记之后,该标记在记录中保持可见,模型只保留摘要加上最近的尾部内容,会话继续。/compact 可按需触发同样的压缩,该标记会渲染为一行可展开的“Context compacted”。
dsh-composer-history 将编辑器接入该工作流,因此窗口滑动永远不会让你丢失输入历史:
- 召回在压缩后依然存活——被遮蔽的轮次仍保留在 Chat 视图发布的最终对话中,因此 ↑ 仍可遍历你在检查点前后发送的每条消息。
- 摘要加入历史——每个检查点的摘要文本会作为 [compacted] … 条目进入 ↑ 召回和 Ctrl+R 搜索(开关:includeCompactionSummaries),因此模型不再逐字看到的上下文仍只需一次按键即可调出。
- 压缩通知——当页面打开期间出现检查点时,一条临时 snackbar 会进行提示(即 Claude Code 的“Auto-compacting conversation…”时刻),其中包含摘要片段以及一键 Fill /compact 操作(showCompactionNotice、compactCommandText);填充内容会进入普通草稿,只有你按 Enter 才会发送。
- 搜索计数——Ctrl+R 面板现在会显示实时的 N entries / N matches 状态行,长条目会被限制为两行。
压缩本身(阈值、摘要模型、/compact)由 harness 核心的压缩插件负责——本插件只观察 Chat 视图的对话投影已经发布的检查点标记(uiConversation.binding(id).target('chat').legacy.nodes),因此它无需任何 agent 循环或模型请求的改动即可工作。
权限与数据
- 权限:该插件在其 workshop 清单中仅声明 browser:local-storage——别无其他。无网络、无子进程、无会话事件。
- 数据:四个浏览器本地的 localStorage 键——dsh.composer-history.v1(已发送消息历史)、dsh.composer-history.snippets.v1(片段文本 + 标签 + 使用计数器)、dsh.composer-history.templates.v1(模板文本),以及 dsh.composer-history.insights.v1(去重后的提示文本 + 每会话使用计数器)。全部有界,仅限同源,绝不上传;损坏的载荷会静默重置。
- 模型可见 ⟺ 你按下 Enter:召回文本、片段加载、模板填充以及 /compact 填充都落入普通的 composer 草稿。在你按下 Enter 之前,任何内容都不会到达模型。
安全边界
- 仅限 UI,绝不强制执行。 该插件只编辑 composer 草稿;沙箱、审批和会话系统仍是强制执行权威,任何命令或工具都不会被声称或绕过。
- 除显式导出外,任何内容都不会离开浏览器。 历史、片段、模板和洞察都存于 localStorage;不上传任何内容,也不发起任何模型请求或网络调用。带版本的备份导出仅在显式点击时写入本地下载或剪贴板。
- 大声失败。 无效的枚举值会导致整个 dsh 启动失败;格式错误的搜索组合键会导致浏览器 fiber 失败——错误配置绝不会静默降级。
- 一切皆有界。 maxHistory、maxPersisted 和 maxSnippets 限制保留条目数;损坏或外来的载荷会静默重置。
- 直通时零副作用。 该插件仅在 plain 输入阶段进行拦截,并让位于斜杠菜单、命令弹窗、IME 组合输入、文本选择和修饰键组合。
已知限制
- Composer DOM 外观。 拦截锚定在宿主私有的 DOM 上:位于 [data-input-scroll] 内的 contenteditable div[data-composer-input](harness 0.1.2-alpha.5 / 0.1.2-rc.1 及更高版本);位于 [data-input-scroll] 内的旧版 textarea composer(0.1.1-rc.2 及之前的版本)仍会被匹配。这种形态并非已发布的 API(上游提案 C3 记录了插件只能猜测宿主 DOM),因此未来宿主 DOM 的变更可能会静默破坏拦截——兼容工作流的 jsdom 冒烟测试会针对打包后的 bundle 重新断言该外观。
- 逻辑行与视觉行。 默认的 logical 以 \n 为界(一条自动换行的长消息算作一行);visual 通过一个隐藏镜像来测量真实的换行,该镜像复制 contenteditable 表面的计算盒子(每次边界检查进行 O(lines·log n) 二分查找,按草稿/宽度记忆化)。镜像测量需要真实的布局引擎——纯 span 数学改为进行单元测试,而在 Lexical 编辑器上测量得到的 span 保持尽力而为(逻辑行仍为默认)。
- 持久化历史是按浏览器隔离的。 存储位于单一源的 localStorage 中;它从不在浏览器或机器之间同步。损坏的载荷会静默重置。
- 撤销栈包含召回事务。 每次填充/恢复都是输入机撤销日志中的一个 setDraft 事务;Ctrl+Z 会逐步回退经过的召回。精度修复需要上游暴露编辑范围。
- 召回一个 /xxx 条目后按 Enter 会走正常的命令认领/裁决路径(符合预期,且 Enter 从不被拦截)。
- 菜单/弹窗和非 plain 阶段始终优先;已提交的发送和会话切换都会重置为 IDLE。
- 引用芯片(U+FFFC 占位符)会随召回/恢复的草稿文本一起保留。
- historyScope: 'workspace' 会读取其他已列出会话的 Chat 目标;某个会话的 Chat 视图若尚未在本页面中激活,则暂不贡献任何内容。
- 搜索浮层是纯 DOM(不依赖 React);它会渲染所有匹配项,直至 maxHistory 上限。
- 压缩感知是观察性的。 在安装之前(或在会话切换之前)落地的检查点从不触发通知;其摘要事件落在已加载窗口之外的检查点不会贡献任何 [compacted] … 条目(summary: null)。
- 通知中的“Compact now”操作仅将配置的命令文本填充到草稿中——发送仍需用户按 Enter。
- 片段、模板和洞察均为浏览器本地。 名称采用 kebab-case(1..64 个字符);标签上限为 8 × 32 个字符。模板变量从实时会话解析;{{draft}} 是选取时的草稿。
开发
sh
pnpm install # node ^22.19 || >=24
pnpm run build # tsc build + tsdown bundle (lib/)
pnpm run typecheck # tsc --noEmit (src + tests)
pnpm test # vitest run
pnpm run test:watch # vitest watch
pnpm run test:coverage # vitest run --coverage
pnpm run check:readmes # README consistency gate
pnpm run verify:pack # pack-surface check
主题
deepseek-harness · dsh · dsh-plugin · web-gui · input-history · keyboard-shortcuts · compaction · sliding-context · typescript
贡献者
- @PerryLink — 创建者与维护者:边缘优先的箭头召回、持久化历史、反向搜索、滑动上下文感知、片段库、提示模板、复用洞察,以及 dsh.bundle / dshWorkshop 清单。
PerryLink DSH 插件家族
这个项目是由 PerryLink 维护的 40 个 DeepSeek Harness 插件之一。如果这个插件对你有帮助,其他的很可能也会:
| 插件 | 一句话简介 |
|---|---|
| dsh-auto-review | 审批链上的第二模型自动审查,默认失败关闭 | |
| dsh-background-agents | 持久化的后台子代理,带 Web UI 侧边栏、消息传递和中断功能 | |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排放和延迟集于一个面板。 | |
| dsh-checkpoint-rewind | 等同于 Claude Code /rewind:快照、会话分叉、一键恢复 | |
| dsh-claude-move | 将 Claude Code 会话、记忆、技能和 CLAUDE.md 迁移到 DSH | |
| dsh-click | 面向 DeepSeek Harness 的跨平台原生桌面控制——以 Windows 优先。 | |
| dsh-data-quality | 数据集质量检查和引用交叉核对(此处消费的可选数值桥接) | |
| dsh-defend | 面向 DeepSeek Harness 的提示注入、越狱和密钥泄露防御。 | |
| dsh-doublecheck | 工程纪律守卫:需求拷问、测试门禁、对抗性审查 | |
| dsh-draw | 面向 DeepSeek Harness 的统一静态图像生成路由。 | |
| dsh-fast | 面向 DeepSeek Harness 的只读性能诊断。 | |
| dsh-fund-research | 面向中国公募基金的确定性研究报告 | |
| dsh-github | 面向 DSH 的 GitHub PR/issue 集成,每次写入均需审批 | |
| dsh-industry-research | 行业研究编排,通过本插件的 ctx.researchReport.assemble 封存其交付物 | |
| dsh-library | 面向 DeepSeek Harness 的本地文档知识库。 | |
| dsh-local-ai | 面向 DeepSeek Harness 的本地模型(Ollama)集成。 | |
| dsh-lsp-actions | 通过语言服务器提供 LSP 诊断、格式化、补全、代码操作和重命名 | |
| dsh-mask | PII 脱敏中间件:在模型边界匿名化,在展示层恢复 | |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 设置标签页,显示状态、工具和错误 | |
| dsh-memento | 需审批的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 | |
| dsh-observe | 面向 DeepSeek Harness 的 OpenTelemetry 和 Langfuse 可观测性导出器。 | |
| dsh-output-styles | 等同于 Claude Code outputStyles 的运行时样式切换 | |
| dsh-reach | 多渠道审批/提问桥接:微信/Telegram/飞书,会话控制台 | |
| dsh-permission-rules | Claude Code 风格的声明式 allow/deny/ask 权限规则,带审计 | |
| dsh-personal-directive | 带顶栏开关的个人指令注入器(框架版) | |
| dsh-plugin-guide | 作为按需智能体技能提供的插件开发知识库 | |
| dsh-plugin-doctor | 面向 DSH 插件的零依赖静态 + 沙箱冒烟检测器 | |
| dsh-research-report | 可验证的研究报告引擎:内容寻址的证据账本和密封版本 | |
| dsh-score | 面向 DeepSeek Harness 插件的多维度质量评分。 | |
| dsh-session-pin | 在 Web 侧边栏中固定会话,并保持持久排序 | |
| dsh-session-sync | 面向 DeepSeek Harness 的跨设备会话同步——你的会话存储的专用 git 镜像。 | |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖和供应链审查 | |
| dsh-talk | 面向 DeepSeek Harness 的语音优先会话循环:对它说话,听它回答。 | |
| dsh-test-drive | 面向 DeepSeek Harness 插件的隔离安装与冒烟测试试驾。 | |
| dsh-ticktick | TickTick/滴答清单任务桥接:会话头部面板 + 11 个工具 | |
| dsh-translate | 面向 DeepSeek Harness 的供应商参数转换和确定性 JSON 修复。 | |
| dsh-wechat | 微信 ↔ DSH 桥接(腾讯 iLink 机器人):文本/图片/文件/语音,在聊天中审批 | |
| dsh-autotier | 自动强/廉价模型层级路由,带确定性风险防护和 /tier 命令 | |
| dsh-catalog | PerryLink 系列的 DSH Desktop Market 标准目录源 | |
| dsh-cert-mcp | 只读 MCP 服务器,公开认证注册表:等级、快照和五维证据 | |
| dsh-kit | 一条命令即可安装核心系列的入门包 | |
| dsh-plugin-certification | 社区认证注册表,提供可复现检查的等级和徽章 | |
| dsh-plugin-kit | PerryLink DSH 插件共享的零运行时依赖工具包 | |
| dsh-plugin-portal | 零依赖静态门户,将整个插件系列渲染为单个页面 | |
| dsh-plugin-upgrade-015 | 合并的 0.1.3-alpha.1 → 0.1.5-rc.1 升级通道卡片,外加零依赖接缝扫描器 | |
| dsh-team-rooms | 跨会话团队房间:共享消息总线、任务板和时线 | |
从 DSH Desktop Market 安装
所有 PerryLink 插件均可在内置的 DSH Desktop Market 中浏览:Market → Sources → add source → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选择它。安装仍需经过 Market 的 npm 身份验证和你的确认。
许可证
Apache License 2.0 © 2026 dsh-composer-history contributors扫码进群