Web 作曲器终端风格输入历史:边缘优先的方向键召回并精确还原草稿与光标、浏览器本地持久化历史、Ctrl+R 反向搜索,以及滑动上下文感知;0.5.0 再加智能输入层——跨会话片段库(/save、/load)、带变量的提示词模板、复用洞察与压缩摘要高亮。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-composer-history
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:PerryLink/dsh-composer-history
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
⌨️ dsh-composer-history
- 1024 商店渠道:先
npm i -g dsh1024,再dsh1024 plugin --profile web add dsh-composer-history(计入 deepseek1024.com 安装排行)。
DeepSeek Harness Web GUI 作曲器的终端式输入历史。
像在终端里一样按 ↑ —— 你打到一半的草稿不会丢。
English · 简体中文 · Español · Português · हिन्दी
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
Compatibility
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.7-rc.2(2026-09-24 核验:双 typecheck 尺子 + 294 项测试;client peers >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0)。该线上设置接缝就是 profile 条目自身的活 Config 表单——已移除的 ctx.settings.register / SettingsProvider 家族与客户端 ctx.settingsScope 服务双双消失,因此每个可调项都改经 ctx.configForms 传递。0.1.6+ 线上 SessionListState.current 已删除——当前会话改由保留事实推导,因此历史注入/片段库继续工作。 |
| Node | ^22.19.0 || >=24.0.0 |
| Platforms | 仅 Web GUI(客户端插件;浏览器本地存储;无网络、无原生代码) |
| Model | 任意(不发模型请求 —— 纯 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 作曲器(0.1.1-rc.2 及以前宿主线)的匹配;其余 textarea 一律穿过。compat 工作流的 jsdom web 行为冒烟针对打包产物断言该身份/文本/光标面。
0.1.2-rc.1(2026-09-04 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。已于 2026-09-06 对照 dsh-v0.1.7-alpha.1 master checkout 核验(全部门禁链 + profile 试装冒烟)。
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 线;无接缝变更影响本插件行为。
0.1.7-alpha.1(2026-09-22 已适配):设置接缝在两个半边都被替换。宿主半边不再通过已移除的 ctx.settings.register(ns, schema, { base }) 注册 composer-history 命名空间——该线上插件的持久设置面就是它自己的活 Config:每个可调项声明为 .volatile(),profile 条目 id(composer-history,即 bundle patch 的行 id)就是表单名,apply 认领生成表单的呈现策略(ctx.settings.configure({ auto: true }, ctx.fiber),由 effect 持有以便 reload 干净重注册)。浏览器半边改经 ctx.configForms.get('composer-history') 读取同一条目,取代已移除的 ctx.settingsScope.bind({ namespace });快照/订阅形状未变,因此每次提交的变更仍会重装接线。可编辑面是保留而非新增:旧命名空间暴露过的字段全部 volatile,没有任何新字段变成可编辑。既有的 settings.yaml 中名为 composer-history 的小节由宿主自身迁移进同 id 的 profile 条目。
What you get
dsh-composer-history 把终端的输入历史搬进 DeepSeek Harness Web GUI 作曲器:
- 边缘优先的方向键召回 —— 裸 ↑/↓ 先移动光标;只有当光标位于首行/末行时才触发历史召回。首次召回暂存
{draft, caret},回到最新一条(或按Esc)时两者精确还原 —— 从不被清空。 - 持久化历史 —— 每条已发送消息追加到有界的浏览器本地存储,刷新页面、跨会话仍可召回。
- 反向搜索 ——
Ctrl+R(可配置)在合并的历史、片段与模板上打开查询覆盖层。 - 智能输入层 ——
/save//load片段、带{{workspace}}/{{session}}/{{draft}}变量的提示词模板,以及浏览器本地的复用洞察。 - 感知滑动上下文 —— 压缩摘要以
[compacted] …条目加入召回与搜索,每次压缩弹出带一键/compact填入的短暂通知。
纯 UI 行为:不产生会话事件、不改 agent-loop、不发模型请求。召回的文本只进入普通作曲器草稿;只有你按下 Enter 才会到达模型。
Quick start
# 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'
Install & uninstall
npm 包自带构建产物;源码 checkout 须先构建(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-<version>.tgz。 - 卸载:
dsh plugin --profile web remove dsh-composer-history(或从 profile patch 中移除该行)。
Configuration
所有可调项都是 Schemastery Config 字段(可从 cordis.yml 与该条目的设置表单修改;profile patch 即持久化文档)。按 id 的覆盖会替换整行 —— 重新列出你需要的每个键。非法枚举值会响亮地中止整个 dsh 启动,设置表单的编辑也会在持久化前由宿主拒绝非法值。
| Key | Default | Meaning |
|---|---|---|
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'] |
允许进入历史的会话节点 kind(加入 'steering' 以包含 steer 消息) |
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] … 摘要加醒目徽标 |
Tools & surfaces
| Surface | Kind | Notes |
|---|---|---|
ArrowUp |
keybinding | 边缘优先的 ↑/↓ 召回 —— 暂存 {draft, caret},回到底部或按 Esc 时两者精确还原 |
Ctrl+R |
keybinding | 在合并的历史、片段与模板上打开反向搜索覆盖层 |
/save |
command | 把当前草稿存为带名称与标签的片段 |
/load |
command | 在光标处插入已保存的片段 |
templates |
UI | 提示词模板以 JSON 文档导出/导入(仅显式点击触发) |
composer-history |
settings form | 该 profile 条目自身的活 Config 表单——把解析后的配置(cordis.yml 基线与 profile 覆盖)带进浏览器半边 |
Keybindings
| Key | State | Behavior |
|---|---|---|
| ↑ | IDLE,光标在首行 | 暂存 {draft, caret},填入最新条目,光标到末尾(无历史 → 放行) |
| ↑ | BROWSING,光标在首行 | 走向更早条目;在最旧一条按住不动(拦截,无任何变更) |
| ↑ | 光标不在首行 | 完全放行(浏览器移动光标) |
| ↓ | IDLE | 始终放行(普通光标移动) |
| ↓ | BROWSING,光标在末行 | 走向更新条目;到最新一条 → 还原 savedDraft + savedCaret → IDLE |
| ↓ | 光标不在末行 | 完全放行 |
| Esc | BROWSING(restoreOnEscape: true) |
还原 savedDraft + savedCaret → IDLE,拦截 |
| Esc | 其他情况 | 放行(菜单/弹窗的 Escape 语义不受影响) |
| Ctrl+↑/↓ | enableCtrlAlias: true |
与裸方向键一致 |
searchKeys chord |
作曲器聚焦、plain 阶段、无菜单/选区/IME |
打开反向搜索;浏览结束,当前显示的文本成为草稿 |
| Shift/Alt/Meta+方向键、IME、选区 | 任意 | 始终放行 |
upKey/downKey/escapeKey/searchKeys 可以重命名上表按键;修饰键策略(以及搜索组合键的精确修饰键匹配)不变。搜索覆盖层内:↑/↓ 移动匹配选择(选中行自动滚入可见区域)、Enter 填充、Esc 取消、点击选中、点击面板外取消;匹配到的子串在每行中高亮显示。
Reverse search
- 打开:作曲器聚焦且输入处于
plain阶段时按下searchKeys组合键(此时Ctrl+R也会拦截浏览器的页面刷新——按键只在作曲器内被消费)。 - 过滤:对合并历史(当前会话 + 持久化 + 工作区条目)做子串匹配;是否区分大小写由
searchCaseSensitive决定;匹配到的子串在每行中高亮。 - 选中:Enter 填充草稿并把光标移到末尾——与普通召回同一条
setDraft写路径。召回文本只有在你随后按 Enter 时才会到达模型。 - 取消:Esc 或点击面板外;草稿不被触碰。
Smart input layer
在终端式历史之上,三套浏览器本地库把作曲器变成可复用的输入面。下面的所有内容都存于 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 → "snippet saved: ship-check"
/load ship-check → 片段填入作曲器
Ctrl+R → 搜索面板在历史旁列出片段(绿色徽标 = 名称)
/save <名字>消费这次 Enter,把草稿(去掉命令那一行)以 kebab-case 名称(可带标签)存下,并清空作曲器。没有可保存的内容 → 弹出错误通知,命令绝不发送。/load <名字>在光标处插入片段(整段替换、光标到末尾)并计一次使用。- 作用域:带工作区 cwd 保存的片段是工作区作用域;不带的是全局。
maxSnippets限定库大小;同名保存会替换。 - 插件从不发送:每次填入都落在普通草稿里,Enter 永远属于你。
带变量的提示词模板
模板是带 {{variable}} 占位符的存储提示词文本。搜索面板以紫色徽标列出;选中一条会从实时会话填充变量并插入结果。内置变量:{{workspace}}(会话的 cwd)、{{session}}(会话 id)、{{draft}}(当前草稿)。引用未知变量的模板会响亮失败并列出缺失项 —— 半填充的提示词比报错更糟。
模板库通过面板的 Export templates / Import templates 按钮以 JSON 文档(composer-templates-v1)导出/导入 —— 是显式的用户操作;插件从不自行写文件。
复用洞察
每条新提交的用户消息(以及每次片段加载)都会以精确文本为键写入一条浏览器本地使用记录。当你输入时,一旦草稿匹配到至少在 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 }],
"insights": [{ "text": "…", "sessions": [], "uses": 0, "lastUsedAt": 0 }]
}
}
合并与冲突策略
- 历史条目是纯字符串,按精确文本去重;重复或空白条目被跳过,绝不覆盖。
- 片段与模板按
name为键;洞察按精确text为键。同键冲突时最新时间戳胜出(片段/模板看updatedAt,洞察看lastUsedAt);更旧或等时间戳的导入被跳过,新键追加。 - 导入遵守
maxPersisted与maxSnippets;模板与洞察止于固定协议上限(各500)。 - 结果通知会报告写入多少条、跳过多少条(更旧/重复)。
模式版本
schemaVersion 从 1 开始。导入按版本逐步迁移(一次一个版本),未来格式可就地升级旧文档。schemaVersion 高于当前构建理解的文档以错误拒绝——绝不静默丢弃或部分合并;过旧无法迁移的版本同样拒绝。
Sliding context
harness 核心给每个 dsh 会话提供滑动上下文窗口 —— 与 Claude Code 和 Codex 同款的工作流:当会话接近模型的上下文上限(或提供方回报溢出)时,harness 会自动压缩 —— 更早的轮次被总结为留在会话记录中的 compaction 检查点标记,模型只保留摘要加上最近的尾部,会话继续;/compact 可随时手动触发同样的压缩,标记在记录中渲染为可展开的"上下文已压缩"行。
dsh-composer-history 把作曲器接入这个工作流,让上下文窗口滑动时你的输入历史一条不丢:
- 召回跨压缩留存 —— 被遮蔽的轮次仍留在 Chat 视图发布的已结算会话里,↑ 依旧能走过检查点前后你发送过的每一条消息。
- 摘要加入历史 —— 每个检查点的摘要文本以
[compacted] …条目进入 ↑ 召回和Ctrl+R搜索(开关:includeCompactionSummaries),模型不再逐字看到的上下文仍然一键可达。 - 压缩通知 —— 页面打开期间有检查点落地时,底部弹出短暂通知(Claude Code 的"自动压缩会话…"时刻),附摘要片段和一键填入
/compact按钮(showCompactionNotice、compactCommandText);填入只进普通草稿,只有你按 Enter 才发送。 - 搜索计数 ——
Ctrl+R面板新增实时的N entries/N matches状态行,长条目限两行显示。
压缩本身(阈值、摘要模型、
/compact)由 harness 核心的 compaction 插件负责 —— 本插件只观察 Chat 视图的会话投影(uiConversation.binding(id).target('chat').legacy.nodes)已经发布的检查点标记,因此不需要任何 agent-loop 或模型请求改动。
Permissions & data
- 权限:插件在其 workshop manifest 中声明
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填入都只进普通作曲器草稿。在你按下 Enter 之前,任何内容都不会到达模型。
Security boundaries
- 仅 UI,从不执行强制。 插件只编辑作曲器草稿;沙箱、审批与会话系统仍是执行权威,绝不接管或绕过任何命令或工具。
- 内容不出浏览器。 历史、片段、模板与洞察都活在
localStorage里;什么都不上传,也不发模型请求或网络调用。 - 响亮失败。 非法枚举值中止整个 dsh 启动;非法搜索组合键使浏览器 fiber 失败 —— 错误配置绝不静默降级。
- 处处有界。
maxHistory、maxPersisted、maxSnippets限定保留条目;损坏或外来的载荷静默重置。 - 放行路径零副作用。 插件仅在
plain输入阶段拦截,对斜杠菜单、命令弹窗、IME 组合、文本选区与修饰键组合一律放行。
Known limitations
- 作曲器 DOM 面。 拦截锚定宿主私有 DOM:
[data-input-scroll]内的 contenteditablediv[data-composer-input](0.1.2-alpha.5 / 0.1.2-rc.1 及以后的宿主);[data-input-scroll]内的旧式 textarea 作曲器(0.1.1-rc.2 及以前)保持匹配。该形状并非公开 API(上游提案 C3 记载插件只能猜测宿主 DOM),未来宿主 DOM 变化可能让拦截静默失效 —— compat 工作流的 jsdom 冒烟针对打包产物重新断言该面。 - 逻辑行 vs 视觉行。 默认
logical按\n判定(一条自动折行的长消息算一行);visual通过复制 contenteditable 表面计算盒的隐藏 mirror(每次边缘检查 O(行数·log n) 二分,按草稿/宽度 memoize)测量真实折行。mirror 测量需要真实布局引擎 —— 纯 span 数学已单测覆盖;Lexical 作曲器上测得的 span 保持尽力而为(默认仍为logical)。 - 持久化历史按浏览器隔离。 存储位于某一 origin 的
localStorage,不在浏览器或机器间同步。损坏载荷静默重置。 - 撤销栈包含召回事务。 每次填充/还原都是输入机撤销日志里的一条
setDraft事务;Ctrl+Z 会一步步退回召回。精确化需要上游暴露 edit-range。 - 召回
/xxx条目后按 Enter 走正常的命令 claim/adjudication 路径(符合预期,且 Enter 从不被拦截)。 - 菜单/弹窗与非
plain阶段永远优先;提交发送与会话切换都会重置为 IDLE。 - 引用 chip(U+FFFC 占位符)随召回/还原的草稿文本一起保留。
historyScope: 'workspace'读取其他已列表会话的 Chat 目标;本页面尚未激活过 Chat 视图的会话暂时没有贡献。- 搜索覆盖层是纯 DOM(无 React 依赖);最多渲染
maxHistory条匹配。 - 压缩感知是观察性的。 安装前(或会话切换前)已落地的检查点绝不触发通知;摘要事件落在已加载窗口之外的检查点不产生
[compacted] …条目(summary: null)。 - 通知的"Compact now"按钮只把配置的命令文本填入草稿 —— 发送仍由你的 Enter 决定。
- 片段、模板与洞察是浏览器本地的。 名称用 kebab-case(1..64 字符);标签上限 8 × 32 字符。模板变量从实时会话解析;
{{draft}}是选取时刻的草稿。
Development
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
Topics
deepseek-harness · dsh · dsh-plugin · web-gui · input-history · keyboard-shortcuts · compaction · sliding-context · typescript
Contributors
- @PerryLink — 创建者与维护者:边缘优先的方向键召回、持久化历史、反向搜索、滑动上下文感知、片段库、提示词模板、复用洞察,以及
dsh.bundle/dshWorkshopmanifest。
PerryLink DSH Plugin Family
This project is one of the 45 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins |
| dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card |
| dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
License
Apache License 2.0 © 2026 dsh-composer-history contributors
从 DSH Desktop 市场安装
所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:市场 → 来源 → 添加来源 → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选中。安装仍需通过市场的 npm 身份校验与你的确认。
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8121
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8121
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 3868
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 3734
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 3369
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1665
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。