dsh-plugin-tool-management 0.9.1 → 0.10.0
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 +48 -0
- package/README.md +212 -201
- package/README_EN.md +206 -199
- package/docs/images/1-EN.png +0 -0
- package/docs/images/1.png +0 -0
- package/docs/images/2-EN.png +0 -0
- package/docs/images/2.png +0 -0
- package/docs/images/3-EN.png +0 -0
- package/docs/images/3.png +0 -0
- package/docs/images/4-EN.png +0 -0
- package/docs/images/4.png +0 -0
- package/docs/images/5-EN.png +0 -0
- package/docs/images/5.png +0 -0
- package/docs/images/6-EN.png +0 -0
- package/docs/images/6.png +0 -0
- package/docs/images/7-EN.png +0 -0
- package/docs/images/7.png +0 -0
- package/docs/images/8-EN.png +0 -0
- package/docs/images/8.png +0 -0
- package/docs/update.md +40 -1
- package/lib/client.js +6220 -5929
- package/lib/compat/probe.js +0 -5
- package/lib/context-inject.js +385 -53
- package/lib/history/bridge.js +7 -0
- package/lib/history/tombstone.js +1 -2
- package/lib/hub.js +3 -1
- package/lib/index.js +306 -48
- package/lib/mcp/override-blocks.js +10 -6
- package/lib/mcp/state-section.js +64 -21
- package/lib/rules/archive-engine.js +64 -9
- package/lib/rules/archive.js +5 -6
- package/lib/rules/service.js +147 -40
- package/lib/skills/catalog.js +6 -9
- package/lib/skills/core.js +5 -4
- package/lib/subagents/catalog.js +31 -15
- package/lib/subagents/service.js +307 -34
- package/lib/subagents/tools.js +29 -4
- package/package.json +105 -102
- package/lib/history/projcache.js +0 -335
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,54 @@
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## [0.10.0] - 2026-09-18
|
|
14
|
+
|
|
15
|
+
### 新增
|
|
16
|
+
|
|
17
|
+
- **「注入实况」显示每个域的采纳统计**:「注入 N 次 · 调用 M 次 · 采纳 K 次」,勾了开关但模型从没伸手一眼可见;节头并标注本进程观测到的工具调用数,区分「模型没用」与「统计没接上」。
|
|
18
|
+
- **人设可配「目录注入」(`catalogDepth`)**:控制常驻人设目录注入到哪一层会话(默认只在顶层),不限制子代理继续嵌套。
|
|
19
|
+
- **人设子代理支持 `inherit`**:继承本次会话**已完成**的轮次(本轮内委派仍要写全任务);贴合人设的任务从此一律走 `subagent_manager_run`,官方 `subagent` / `subagent_fork` 只在没人设贴合或需要后台任务时用。
|
|
20
|
+
- **人设新增「输出要求」字段(`output:`)**:一行一条硬要求,单独成节写进子代理系统提示词,并约束父代理的 `task` 只给目标与上下文、不规定做法。
|
|
21
|
+
|
|
22
|
+
### 变更
|
|
23
|
+
|
|
24
|
+
- **注入框架重排为 markdown 四级结构**:`##` 标题 + 加粗动作句前置 + 补充动作行 + 取代声明,五域同一副骨架;场景记忆与子智能体引导语同步重写(给判据、给优先级、补触发条件),正文重复标题与「已清空」通知的插件前缀一并去掉。
|
|
25
|
+
- **提示词注入不再「裸送」**:与其余四域同款框架且整条包进 `<system-reminder>`(正文里的闭合标记会转义),界面显示来源文件与载入状态,模型侧正文带「来源:」行。
|
|
26
|
+
- **关掉「技能」或「提示词」的勾选,官方那条注入一起停**(此前只停本插件自己);其余三域勾选完全生效。
|
|
27
|
+
- **子代理会话不再注入场景记忆**(只在顶层注入),子代理上下文收敛为「角色 + 任务」,需要时用 `memory_manager_*` 自取。
|
|
28
|
+
- **人设进子代理系统提示词时带角色框**:`# 角色:名` 标题 + 授权/边界一行 + `## 角色定义` 围栏,不含 `description`,人设文件本身不用改。
|
|
29
|
+
- **MCP 列表改为全局在前、同级按名排序**,页面、场景档案勾选器与模型侧清单三处同序。
|
|
30
|
+
- **人设目录的注入判据定为「深度 < `catalogDepth`」**;「注入实况」两档状态改称「已注入 / 不在本会话注入」,无正文行不再画展开箭头。
|
|
31
|
+
- **五个管理工具的描述回指上下文里的注入块**,目录与工具互相指路。
|
|
32
|
+
- **全部服务端错误码补齐双语词条**(此前 15 码无词条,英文界面回退中文原文);目录选择器与技能详情 frontmatter 标签同样改走词典。
|
|
33
|
+
- **README 安全段补充**:栅栏降级面、`dir-list` 暴露面、HTTP 状态码以 `body.ok` 为准、裸 API 退出场景不清启用集。
|
|
34
|
+
- **文档更正**:人设「默认停用」(此前写成自动启用)、场景接管期间「应用 = 改绑该场景」(此前写会被拒绝)、「四域开关同步档案」更正为三域(并更正 0.9.1 条目同句)、密钥打码字形改为与实现一致。
|
|
35
|
+
- **六个管理页的启用项排到列表前面**:MCP / 技能 / 子智能体 / 提示词 / 记忆 / 场景,开着的浮在上面、停用后落回原位(两半内部保持原顺序,不是按名重排;提示词页没有开关,按「生效中」排)。拨开关引起的换位有 180ms 过渡,搜索 / 筛选 / 折叠与轮询刷新引起的位移不做动画,「减少动态效果」下直接落位。
|
|
36
|
+
|
|
37
|
+
### 修复
|
|
38
|
+
|
|
39
|
+
- **场景锁定补齐模型侧**:`mcp_manager_add` / `skill_manager_create` / `memory_manager_write` / `prompt_manager_apply` 四个工具此前绕过守卫,锁定期间仍可调用。
|
|
40
|
+
- **记忆怎么删都进回收站**:形态转换与改名此前直接删旧文件(bundle 连附件一起),现在先入回收站再删。
|
|
41
|
+
- **`mcpm-tools-refresh` 要求令牌**:它会临时启停服务器并写两次补丁,此前漏在写操作门清单外。
|
|
42
|
+
- **子代理结果不再混入思考块**;「没有正文」按收尾原因分档说明,不再一律报「无输出」。
|
|
43
|
+
- **人设正文与名字里的 `{{…}}` 不再让子代理启动失败**。
|
|
44
|
+
- **子会话里调委派工具不再被本插件拦下**(不再向官方传 `maxDepth`,人设列表也不再按深度过滤)。
|
|
45
|
+
- **MCP 状态不再把「连不上」报成「可用」**:可用性只认当前真实注册的工具数;曾连上、当前不可用的如实标注。
|
|
46
|
+
- **场景里手动关掉的技能目录 / MCP 服务器,退出场景后正常还原**(快照全量记录进场景前状态)。
|
|
47
|
+
- **覆盖导入失败自动回滚**;编辑 MCP 服务器保留手写的 `toolCallTimeoutMs`;整台停用时「上次运行时」工具行不再标「已启用」。
|
|
48
|
+
- **场景进行中改 MCP serverName 或人设名,退出场景恢复正常还原**;重启等待窗口内的并发启用不再被快照覆盖。
|
|
49
|
+
- **记忆描述含独立 `---` 行不再截断**(此类多行描述改用引号标量序列化)。
|
|
50
|
+
- **提示词页「应用」失败现在会显示错误**;手工编辑 memories-index.json 的场景描述会触发注入重算。
|
|
51
|
+
- **兼容页「注入实况」的说明不再截断、节头不再错位**;技能页页头按钮窄栏自动收档,「全选」不再折行。
|
|
52
|
+
- **访问令牌比较改为常量时间**(双侧 sha256 + timingSafeEqual)。
|
|
53
|
+
- **测试与开发工具**:补 parseModeState 透传契约断言;client-render 夹具对齐现行响应形状;check-i18n 修复行首键漏对账;`preview-memory-note` / `preview-compat` 修到可跑。
|
|
54
|
+
|
|
55
|
+
### 移除
|
|
56
|
+
|
|
57
|
+
- `./projcache` 子路径导出与 `lib/history/projcache.js`(archive-manager 时代的投影缓存替换实现,与现行「不插入竞争 provider」的架构冲突,仓库与文档均无引用)。若某个 profile 曾用 `dsh-plugin-tool-management/projcache` 挂载过它,删掉那一行。
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
13
61
|
## [0.9.1] - 2026-09-17
|
|
14
62
|
|
|
15
63
|
### 新增
|
package/README.md
CHANGED
|
@@ -1,201 +1,212 @@
|
|
|
1
|
-
# dsh-plugin-tool-management
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/dsh-plugin-tool-management)
|
|
4
|
-
[](LICENSE)
|
|
5
|
-
[](package.json)
|
|
6
|
-
[](https://github.com/ouli-1242/dsh-plugin-tool-management)
|
|
7
|
-
|
|
8
|
-
[](https://dsh.market/)
|
|
9
|
-
[](https://awesome-dsh-plugin.com)
|
|
10
|
-
[](https://dshfind.com/zh/plugins/ouli-1242/dsh-plugin-tool-management)
|
|
11
|
-
|
|
12
|
-
**简体中文** · [English](README_EN.md) · [Changelog](CHANGELOG.md) · [版本更新概要](docs/update.md)
|
|
13
|
-
|
|
14
|
-
- DeepSeek Harness 的 **MCP、技能、场景、记忆、子智能体、提示词与归档会话**管理插件。
|
|
15
|
-
- 八个页签:**场景**、**MCP**、**技能**、**子智能体**、**提示词**、**记忆**、**会话**、**兼容**。
|
|
16
|
-
|
|
17
|
-
```sh
|
|
18
|
-
dsh plugin --profile web add dsh-plugin-tool-management@latest
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
装完硬刷新浏览器(Cmd/Ctrl+Shift-R),设置 → **工具** 即安装成功。不手改 `cordis.patch.yml`,不碰技能源文件,重启与升级后配置依旧。
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 截图
|
|
26
|
-
|
|
27
|
-
| | |
|
|
28
|
-
|:----------------------------:|:------------------------------:|
|
|
29
|
-
|  |  |
|
|
30
|
-
| **场景** | **MCP** |
|
|
31
|
-
|  |  |
|
|
32
|
-
| **技能** | **子智能体** |
|
|
33
|
-
|  |  |
|
|
34
|
-
| **提示词** | **记忆** |
|
|
35
|
-
|  |  |
|
|
36
|
-
| **会话** | **兼容** |
|
|
37
|
-
|
|
38
|
-
## 核心亮点
|
|
39
|
-
|
|
40
|
-
一句话:**把「工作 / 写作 / 编程」各配成一套场景,点一下整套切换;插件管的东西,模型都看得见。**
|
|
41
|
-
|
|
42
|
-
| 亮点 | 说明 |
|
|
43
|
-
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
44
|
-
| 一键换场景 | 每个场景各配一套:用哪些 MCP 服务器、哪些技能、哪些人设、哪些记忆;点一下整套切换,关掉自动还原 |
|
|
45
|
-
| 记忆自动送到模型眼前 | 每个场景下写几段 `.md` 就是它的资料库,正文自动进上下文,不用每次复制粘贴 |
|
|
46
|
-
| 给 MCP 服务器写备注 | 像「A 不可用时改用 B 兜底」这种话写进备注,模型看得到,会照做 |
|
|
47
|
-
| 单个工具也能关 | 一台服务器里只停掉某个工具,模型看不见也调不到;「重启」只重连,不会偷偷改变开关 |
|
|
48
|
-
| 技能状况一眼看穿 | 哪些在生效、哪些被同名技能覆盖、哪一份是首选,都标得清清楚楚 |
|
|
49
|
-
| 子智能体 = 一个文件一个角色 | 写一份角色说明就能派活;跑完只回结果、不占你的会话记录;哪些角色能用还能按场景定 |
|
|
50
|
-
| 提示词备好几套 | AGENTS.md 可以存多份(简洁模式 / 教学口吻……),一键切换;场景可以各自绑一份 |
|
|
51
|
-
| 会话不再丢 | 归档按项目分组、能搜、能批量恢复;Claude Code / Cursor / Codex 的聊天记录都能导进来 |
|
|
52
|
-
| 模型一定看得见 | 插件管的内容(记忆 / MCP / 技能 / 子智能体 / 提示词)会主动告诉模型,每个域各发一条、内容没变不重复;极简模式下默认不注入(跟随预设),可在「兼容」页逐项打开 |
|
|
53
|
-
| 锁住就不怕手滑 | 场景可以上锁:五个域整体只读,先解锁才能改 |
|
|
54
|
-
| 删了能找回,配好能带走 | 删除都进回收站,随时恢复;技能 / 记忆 / 人设 / 提示词都能勾选打包成 zip,也能再导回来 |
|
|
55
|
-
| 安全、不添乱 | 密钥默认打码、看明文要令牌;只写自己的文件,技能源文件一个不动,升级重启配置都在 |
|
|
56
|
-
|
|
57
|
-
## 快速开始
|
|
58
|
-
|
|
59
|
-
前置:DSH 已安装(`dsh web` 可运行),Node.js ≥ 18。
|
|
60
|
-
|
|
61
|
-
```sh
|
|
62
|
-
dsh plugin --profile web add dsh-plugin-tool-management@latest # 安装 / 更新
|
|
63
|
-
dsh plugin --profile web remove dsh-plugin-tool-management # 卸载
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
装完硬刷新浏览器,设置 → **工具** 出现八栏即成功。客户端改动热加载,宿主侧改动需重启 `dsh web`。
|
|
67
|
-
|
|
68
|
-
也可以让模型代劳:
|
|
69
|
-
|
|
70
|
-
```text
|
|
71
|
-
安装 dsh-plugin-tool-management 插件:
|
|
72
|
-
dsh plugin --profile web add dsh-plugin-tool-management@latest
|
|
73
|
-
装完提醒我硬刷新浏览器。
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
模型可用 14 个工具管理上述功能(`mcp_manager_*` / `skill_manager_*` / `prompt_manager_*` / `memory_manager_*` / `subagent_manager_*`);脚本走 `POST /dsh-plugin-tool-management/api`(`{op, args}` 协议)。
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 功能
|
|
81
|
-
|
|
82
|
-
### 场景与记忆
|
|
83
|
-
|
|
84
|
-
- **场景 = 分组,记忆 = `.md` 文件**。`memories/<场景>/<名>.md`,整篇正文自动注入上下文,文件名支持中文。
|
|
85
|
-
- **单选启用**:同时只启用一个场景(其余置灰),关掉全部 = 只注入「全局」与 `_shared`。新场景默认不启动。
|
|
86
|
-
- **场景绑提示词**:切换场景直接改写 `~/.dsh/AGENTS.md`(覆盖前 5 代备份,关掉自动恢复基线);预设挂不到官方 AGENTS.md 通道时(极简),改为把这份正文直接注入上下文。
|
|
87
|
-
- **场景档案**:每个场景搭配 MCP 工具集 / 技能集 / 子智能体 / 记忆(任意组合);打开场景即应用并收窄注入,关闭按快照原文恢复(开关是唯一入口)。勾选集语义:**勾的启用、没勾的停用,整段没建 = 一个都没勾 = 该域全部停用**(所以「没配 MCP 工具集」的场景进去就是全部 MCP
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
|
|
135
|
-
###
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
1
|
+
# dsh-plugin-tool-management
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-plugin-tool-management)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](package.json)
|
|
6
|
+
[](https://github.com/ouli-1242/dsh-plugin-tool-management)
|
|
7
|
+
|
|
8
|
+
[](https://dsh.market/)
|
|
9
|
+
[](https://awesome-dsh-plugin.com)
|
|
10
|
+
[](https://dshfind.com/zh/plugins/ouli-1242/dsh-plugin-tool-management)
|
|
11
|
+
|
|
12
|
+
**简体中文** · [English](README_EN.md) · [Changelog](CHANGELOG.md) · [版本更新概要](docs/update.md)
|
|
13
|
+
|
|
14
|
+
- DeepSeek Harness 的 **MCP、技能、场景、记忆、子智能体、提示词与归档会话**管理插件。
|
|
15
|
+
- 八个页签:**场景**、**MCP**、**技能**、**子智能体**、**提示词**、**记忆**、**会话**、**兼容**。
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
dsh plugin --profile web add dsh-plugin-tool-management@latest
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
装完硬刷新浏览器(Cmd/Ctrl+Shift-R),设置 → **工具** 即安装成功。不手改 `cordis.patch.yml`,不碰技能源文件,重启与升级后配置依旧。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 截图
|
|
26
|
+
|
|
27
|
+
| | |
|
|
28
|
+
|:----------------------------:|:------------------------------:|
|
|
29
|
+
|  |  |
|
|
30
|
+
| **场景** | **MCP** |
|
|
31
|
+
|  |  |
|
|
32
|
+
| **技能** | **子智能体** |
|
|
33
|
+
|  |  |
|
|
34
|
+
| **提示词** | **记忆** |
|
|
35
|
+
|  |  |
|
|
36
|
+
| **会话** | **兼容** |
|
|
37
|
+
|
|
38
|
+
## 核心亮点
|
|
39
|
+
|
|
40
|
+
一句话:**把「工作 / 写作 / 编程」各配成一套场景,点一下整套切换;插件管的东西,模型都看得见。**
|
|
41
|
+
|
|
42
|
+
| 亮点 | 说明 |
|
|
43
|
+
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
44
|
+
| 一键换场景 | 每个场景各配一套:用哪些 MCP 服务器、哪些技能、哪些人设、哪些记忆;点一下整套切换,关掉自动还原 |
|
|
45
|
+
| 记忆自动送到模型眼前 | 每个场景下写几段 `.md` 就是它的资料库,正文自动进上下文,不用每次复制粘贴 |
|
|
46
|
+
| 给 MCP 服务器写备注 | 像「A 不可用时改用 B 兜底」这种话写进备注,模型看得到,会照做 |
|
|
47
|
+
| 单个工具也能关 | 一台服务器里只停掉某个工具,模型看不见也调不到;「重启」只重连,不会偷偷改变开关 |
|
|
48
|
+
| 技能状况一眼看穿 | 哪些在生效、哪些被同名技能覆盖、哪一份是首选,都标得清清楚楚 |
|
|
49
|
+
| 子智能体 = 一个文件一个角色 | 写一份角色说明就能派活;跑完只回结果、不占你的会话记录;哪些角色能用还能按场景定 |
|
|
50
|
+
| 提示词备好几套 | AGENTS.md 可以存多份(简洁模式 / 教学口吻……),一键切换;场景可以各自绑一份 |
|
|
51
|
+
| 会话不再丢 | 归档按项目分组、能搜、能批量恢复;Claude Code / Cursor / Codex 的聊天记录都能导进来 |
|
|
52
|
+
| 模型一定看得见 | 插件管的内容(记忆 / MCP / 技能 / 子智能体 / 提示词)会主动告诉模型,每个域各发一条、内容没变不重复;极简模式下默认不注入(跟随预设),可在「兼容」页逐项打开 |
|
|
53
|
+
| 锁住就不怕手滑 | 场景可以上锁:五个域整体只读,先解锁才能改 |
|
|
54
|
+
| 删了能找回,配好能带走 | 删除都进回收站,随时恢复;技能 / 记忆 / 人设 / 提示词都能勾选打包成 zip,也能再导回来 |
|
|
55
|
+
| 安全、不添乱 | 密钥默认打码、看明文要令牌;只写自己的文件,技能源文件一个不动,升级重启配置都在 |
|
|
56
|
+
|
|
57
|
+
## 快速开始
|
|
58
|
+
|
|
59
|
+
前置:DSH 已安装(`dsh web` 可运行),Node.js ≥ 18。
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
dsh plugin --profile web add dsh-plugin-tool-management@latest # 安装 / 更新
|
|
63
|
+
dsh plugin --profile web remove dsh-plugin-tool-management # 卸载
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
装完硬刷新浏览器,设置 → **工具** 出现八栏即成功。客户端改动热加载,宿主侧改动需重启 `dsh web`。
|
|
67
|
+
|
|
68
|
+
也可以让模型代劳:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
安装 dsh-plugin-tool-management 插件:
|
|
72
|
+
dsh plugin --profile web add dsh-plugin-tool-management@latest
|
|
73
|
+
装完提醒我硬刷新浏览器。
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
模型可用 14 个工具管理上述功能(`mcp_manager_*` / `skill_manager_*` / `prompt_manager_*` / `memory_manager_*` / `subagent_manager_*`);脚本走 `POST /dsh-plugin-tool-management/api`(`{op, args}` 协议)。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 功能
|
|
81
|
+
|
|
82
|
+
### 场景与记忆
|
|
83
|
+
|
|
84
|
+
- **场景 = 分组,记忆 = `.md` 文件**。`memories/<场景>/<名>.md`,整篇正文自动注入上下文,文件名支持中文。
|
|
85
|
+
- **单选启用**:同时只启用一个场景(其余置灰),关掉全部 = 只注入「全局」与 `_shared`。新场景默认不启动。
|
|
86
|
+
- **场景绑提示词**:切换场景直接改写 `~/.dsh/AGENTS.md`(覆盖前 5 代备份,关掉自动恢复基线);预设挂不到官方 AGENTS.md 通道时(极简),改为把这份正文直接注入上下文。
|
|
87
|
+
- **场景档案**:每个场景搭配 MCP 工具集 / 技能集 / 子智能体 / 记忆(任意组合);打开场景即应用并收窄注入,关闭按快照原文恢复(开关是唯一入口)。勾选集语义:**勾的启用、没勾的停用,整段没建 = 一个都没勾 = 该域全部停用**(所以「没配 MCP 工具集」的场景进去就是全部 MCP 停用,退出再开回来)。**场景内 MCP / 技能 / 子智能体这三个域的开关照常可用**——这里的改动会同步写进该场景的档案(当下生效、下次进这个场景照旧生效),只有**锁定**才冻结;记忆域的开关本来就是单一真相源,不经过档案。
|
|
88
|
+
- **「进/出模式」与「启用场景」是两个独立状态轴**:界面开关是唯一入口(两轴齐动)。绕过界面直接调 HTTP API 时要注意:`scene-mode-set{scene:null}` 只退运行时快照,**不清空启用集** —— 记忆与提示词仍按该场景注入;要彻底退出还需 `rules-set-active{scenes:[]}`。
|
|
89
|
+
- **导入**:`.md` / `.zip`(目录名 = 场景,bundle 带附件),同名跳过绝不覆盖,超限逐条回报。
|
|
90
|
+
- **导出**:勾选记忆打包成 zip,保留「场景/名称」层级;bundle 型连目录里的附件一起打进去。只读源文件。
|
|
91
|
+
- **注入预算**:默认 64 KiB,放不下的跳过并列出清单。删除进回收站。
|
|
92
|
+
- **子代理会话不注入记忆**:记忆只在**顶层会话**注入 —— 它是"父会话的现场",不是子代理完成任务所需的事实;子代理的上下文只留「角色 + 任务」,要记忆可用 `memory_manager_list/read` 自己取,相关事实应由父代理写进 `task`。其余域不受影响(MCP / 技能 / 提示词照常注入,人设目录按各自的 `catalogDepth`)。
|
|
93
|
+
- **场景锁定**:锁定后 MCP / 技能 / 子智能体 / 记忆 / 提示词整体只读,界面禁用 + 服务端守卫双侧拦截;未启动不能上锁,锁定中不能关闭,先解锁再改。
|
|
94
|
+
- **删除场景 = 连记忆一起删**:场景记录、档案与全部记忆进同一条回收站条目,恢复按原路径整条放回;使用中的场景拒绝删除。场景名可改(连带目录与档案,记忆正文不动)。
|
|
95
|
+
|
|
96
|
+
### 子智能体
|
|
97
|
+
|
|
98
|
+
- **一个文件一个人设**:`agents/<人设>.md`,frontmatter 全可选。
|
|
99
|
+
- **人设进系统提示词时会带一层角色框**:正文照原样使用,外面加 `# 角色:名` 标题、一行授权(「由调用方指定;与你的默认倾向冲突时以它为准;任务说要什么,怎么做以它为准」)和一句边界(决定**怎么做**,不改变**能做什么**),正文用 `## 角色定义` 围起来;框的语言跟随正文。这是为了让模型把它读成"我被指定为一个角色",而不是身份句后面多跟的两句话——**人设文件一个字都不用改**。框里不列 `description`(那是给**调用方**选人设用的;要给人设子代理看的简介写进正文)。
|
|
100
|
+
- **工具限制按 Agent 预设**:每个预设一份白/黑名单(互相排斥),运行期按当前预设生效——堵掉旧「全体并集」名单换预设后子代理起不来的坑。
|
|
101
|
+
- **`output:` 输出要求(硬性契约)**:frontmatter 里可写多行 `output:`(**一行一条**),角色框会把它渲染成 `## 输出要求(硬性)` 单独一节(在角色定义之后)。提示词写「这个角色怎么想」(散文),`output:` 写「产出必须长什么样」(可检验:格式、分级、必标项、禁止项)—— 只有一句抽象要求的角色,产出无法判定"执行了没有";写成可检验的才会被真的遵守。编辑器里有「输出要求(硬性)」多行框,也可以直接写进文件。
|
|
102
|
+
- **即用即弃**:`subagent_manager_run` 带人设运行、只回传结果、不进 History。子代理的上下文只有**角色 + 任务**:场景记忆不注入(要记忆可用 `memory_manager_*` 自己取,相关事实应由父代理写进 `task`)。场景可绑定可用人设。
|
|
103
|
+
- **两种上下文模式**:默认新起独立会话(子代理看不到本次对话,任务要写全);把 `inherit` 打开则子代理**继承本次会话已完成的轮次**(与官方 `subagent_fork` 同一套机制),任务只需写新增部分。**只继承已完成的轮次**——在本轮内发起委派时这一轮的内容继承不到(实测:父代理边读边委派,子代理仍从零开始),此时 `task` 要按"写全"对待。与官方两个委派工具(`subagent` / `subagent_fork`)的分界由插件写进上下文:**贴合人设的任务一律走这里**,官方那两个只在没有人设贴合、或需要后台任务(job)时用。
|
|
104
|
+
- **启停开关**:停用的人设不注入上下文、模型不可见(文件不动);新建 / 导入 / 恢复**默认停用**(v0.8.5 起,与技能 / MCP 同口径),要委派先在这里打开。**进场景按档案勾选集全量对齐**(勾了的开、没勾的关,整段没建 = 全关),退出按进场景前的开关精确还原;场景内这个开关照常可用,改动会同步写进该场景的档案(只有**锁定**才冻结);退出场景时回到进场景前的状态。
|
|
105
|
+
- **人设目录自动注入**:只列名字 + 描述,模型知道有哪些人设可委派;人设名可改,场景绑定自动跟着改。
|
|
106
|
+
- **目录注入(`catalogDepth`)**:控制常驻的人设目录出现在哪些会话里 —— 默认 `1` = 只在顶层注入;写 `2` 让子会话也收到目录;`3` 到两层子会话;界面上的「不限制嵌套」写 `99`,任何深度的会话都注入。**它不限制嵌套**:子代理始终可以继续委派,那由官方决定(`dsh-tool-subagent` 默认 `maxDepth: 3`),本插件不再向官方传 `maxDepth`。子会话看不到常驻目录时,仍可用 `subagent_manager_list` 查询全部人设。三处口径同源(目录过滤、域声明、实况状态),所以"界面说没注入、实际又注入了"这类分叉不会出现。
|
|
107
|
+
|
|
108
|
+
### MCP 服务
|
|
109
|
+
|
|
110
|
+
- **增删改查 + 即改即生效**:写入 `cordis.patch.yml`,HMR 自动生效。
|
|
111
|
+
- **工具级开关**:单个工具可独立停用(模型看不见也调不到),整台支持批量。
|
|
112
|
+
- **停着也能看清单**:服务器没在跑时仍显示上次见过的工具名与描述(标「上次运行时」);从没跑过的可以一键「启动服务器读取工具」。
|
|
113
|
+
- **密钥打码**:默认保留前 4 个字符、其余打码成 `****`(值不超过 4 位时整串 `****`),「显示密钥」要令牌。
|
|
114
|
+
- **迁移与备份**:跨项目级/全局迁移失败自动回滚;JSON 导出导入。
|
|
115
|
+
- **状态与备注自动注入**:列出当前真正可用的 server;**曾经连上过、现在连不上的也会列出并标注**(`(当前未连上;上次连上时 N 个工具)`)—— 这样模型才会说"它没连上,检查一下",而不是把"配了但连不上"读成"本机没配"、建议你装一个。从未连上过的不列。你的备注作为决策提示带给模型;级别分「全局 / 应用级」,新增默认全局。注:极简这类压制型预设默认不注入(模型可用 `mcp_manager_list` 读取服务器名、启停、工具数与备注)——想让它也注入,到「兼容」页的「注入」块打开开关。
|
|
116
|
+
|
|
117
|
+
### 技能
|
|
118
|
+
|
|
119
|
+
- **来源一览**:项目级 / DSH / Agents / Codex / Claude / 自定义目录,按来源分组。
|
|
120
|
+
- **两组权限相反**:默认来源(DSH / 导入技能)必须读取但技能可删;外部目录可停用/移除但技能只读。
|
|
121
|
+
- **移除 ≠ 停用**:移除 = 连目录都不扫(文件零改动,可恢复);停用 = 仍列出但不可调用。
|
|
122
|
+
- **同名技能一眼看出谁在生效**:真实生效的那份标「首选」,被同名覆盖的标出来源;启用被覆盖的副本会明说「这样不会生效」。
|
|
123
|
+
- **自定义目录 / ZIP 导入导出 / 回收站**。
|
|
124
|
+
- **目录可注入**:预设没挂官方技能目录行(如极简)时,由本插件的注入域按「兼容」页的开关兜底送达(名字 + 简介;正文照旧读文件)。
|
|
125
|
+
|
|
126
|
+
### 提示词预设
|
|
127
|
+
|
|
128
|
+
- 多套 `~/.dsh/AGENTS.md` 基线,一键应用(宿主每轮重读该文件,下一轮对话生效),保留 5 代备份。
|
|
129
|
+
- **记得「最近一次应用的是哪份」**:就算你手改过 `AGENTS.md`,模型问「现在用的哪份预设」也答得出来源(会注明「此后文件有变」)。
|
|
130
|
+
- **描述**:每条预设可写一句「这份是干什么的」,只显示在插件界面里;它存在同目录的 `meta.json`,不进 AGENTS.md,也就不会被注入上下文。
|
|
131
|
+
- 新建即可写正文,编辑可改 id(= 目录改名,场景绑定自动跟着改)。**被引用的不能删**(场景绑定 / `AGENTS.md` 当前内容 / 退出场景要恢复的那一份),删除进回收站。
|
|
132
|
+
- **正文可注入**:预设没挂官方 AGENTS.md 行(如极简)时,`~/.dsh/AGENTS.md` 的正文由本插件的注入域兜底(64 KiB 上限;可在「兼容」页关掉)。
|
|
133
|
+
- **场景接管期间「应用」= 把该场景改绑到那一份**(同步写进场景档案,绑定改完立刻重新对齐;未锁定时可用 —— v0.9 已把「应用别的预设会被拒绝」反转为改绑);**锁定时才拒绝**。退出场景时全局基线按快照恢复。
|
|
134
|
+
|
|
135
|
+
### 历史会话
|
|
136
|
+
|
|
137
|
+
- 按项目分组、搜索、批量恢复 / 永久删除、保留期自动清理。
|
|
138
|
+
- 工作区登记被删后按会话目录重建分组,可一键重新登记。
|
|
139
|
+
- 导入 Claude Code / Cursor / Codex / 任意文本;导出 Markdown / JSONL。
|
|
140
|
+
|
|
141
|
+
### 宿主兼容
|
|
142
|
+
|
|
143
|
+
插件运行期用宿主同一批 `@deepseek-ai/*` 库——必须是同一份物理模块,否则判断退化成猜。
|
|
144
|
+
|
|
145
|
+
- **「兼容」页**:宿主版本、能力可用数、每个动作走原生/适配/不可用、降级项与原因。只读。
|
|
146
|
+
- **命令行**:`node scripts/doctor.mjs`(体检)、`node scripts/host-deps.mjs --fix`(依赖对齐)、`npm run sync:profile`(把构建产物镜像到 profile 里那份本地安装 —— `file:` 装的是硬链接拷贝,构建新增的文件不会自动过去)。
|
|
147
|
+
- `minimal` 这类**压制型预设**(persona `complete` / 关闭运行时上下文)下,本插件的注入**默认停用**(跟随预设的设计意图),提示词与技能也因官方那两行没挂而缺席 —— 兼容页逐列标出,同一页的「注入」块可以按域强制打开。
|
|
148
|
+
- **关掉「技能」「提示词」的勾选 = 真的不再注入**:这两项在标准类预设下由宿主自己送(插件让位),所以取消勾选会**连宿主那份一起停掉**(`skill-catalog` / `agent-instructions` 的消息在这一步不再放行)。其余三项(记忆 / MCP / 子智能体)宿主本来就不送,勾选完全生效。
|
|
149
|
+
- **注入长什么样**:每个域一条 `<system-reminder>`,开头是 `## 标题` + **加粗的一句动作**(在哪个决策点该想起它)+ 工具名 / 触发条件,之后才是正文;正文里的 `</system-reminder>` 会被转义(你写的内容不能把框架提前关掉)。每条末尾一句「本份…取代本次会话中更早注入的同类…」——注入只在内容变化时重发,旧那份还留在上下文里,所以要写明以哪份为准。写法逐条对照 Claude Code 与 Codex CLI 的官方注入。
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 数据落点
|
|
154
|
+
|
|
155
|
+
| 内容 | 位置 |
|
|
156
|
+
| ------------------------------------------- | ------------------------------------------------------------------------- |
|
|
157
|
+
| MCP 定义 | `~/.dsh/cordis.patch.yml`(插件只写它;改前自动备份到 hub 的 `backups/`) |
|
|
158
|
+
| 技能策略 / 自定义目录 | `~/.dsh/tool-management/skills-state.json` |
|
|
159
|
+
| 技能 / 记忆 / 人设 / 预设 | `~/.dsh/tool-management/{skills,memories,subagents,prompts}/` |
|
|
160
|
+
| 子智能体启停 | `~/.dsh/tool-management/subagents-index.json` |
|
|
161
|
+
| 回收站 | `~/.dsh/tool-management/trash/{skills,subagents,prompts,scenes}-trash/` |
|
|
162
|
+
| 归档账本 / 保留期 | `~/.dsh/tool-management/history-*.json` |
|
|
163
|
+
| 记忆索引 / 场景 / 档案 | `~/.dsh/tool-management/memories-index.json` |
|
|
164
|
+
| MCP 侧车(停用表 / 已知工具 / 备注 / 设置) | `~/.dsh/tool-management/mcp-*.json` |
|
|
165
|
+
| 注入设置(五个域开关 / 压制型预设口径) | `~/.dsh/tool-management/inject-settings.json` |
|
|
166
|
+
| 运行日志 / patch 备份 | `~/.dsh/tool-management/tool-management.log` · `backups/` |
|
|
167
|
+
|
|
168
|
+
**插件安装目录里不存用户数据**(`dsh plugin update` 会整体替换该目录)。
|
|
169
|
+
|
|
170
|
+
## 配置与安全
|
|
171
|
+
|
|
172
|
+
| 字段 | 说明 |
|
|
173
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
174
|
+
| `token` | 访问令牌。设了之后**所有写操作 + 明文密钥**都要求 `x-dsh-token`;**不设时明文接口一律关闭**。也是 curl / 局域网的逃生门。 |
|
|
175
|
+
| `maxBodyBytes` | 请求体上限,默认 88 MiB。 |
|
|
176
|
+
|
|
177
|
+
- **浏览器**:读写走 cookie,不需要 token;但**明文密钥**(显示密钥 / 导出)要令牌。
|
|
178
|
+
- **curl / 脚本**:带 `x-dsh-token`,或带浏览器 cookie。
|
|
179
|
+
- **HTTP 状态码口径**:除安全栅栏的 401/403 外,令牌缺失、业务失败等一律 HTTP 200 + `{ ok: false, error }` —— 脚本分流请以 `body.ok` 为准,不要按状态码。
|
|
180
|
+
- **栅栏的降级面**:宿主缺 `connection` 服务时,栅栏退到「Host 回环 + 同源」判定(没有浏览器 cookie 可验),本机任意进程伪造 `Host: localhost` 即可调用写 op —— 把端口转发到局域网/公网的场景**务必配令牌**,它是这条降级面上的最后一道门。
|
|
181
|
+
- **`dir-list` 的暴露面**:「选择文件夹」弹窗靠它逐级列目录,因此通过栅栏/令牌的调用方可列出**任意绝对路径**的目录(只读)。这是功能性设计,不是漏洞;但请勿把端口暴露给不可信网络。
|
|
182
|
+
- **端口转发到公网**:建议配 token——防陌生人注入 MCP 命令(等同远程执行)与窃取密钥。
|
|
183
|
+
|
|
184
|
+
## 常见问题
|
|
185
|
+
|
|
186
|
+
| 现象 | 解决 |
|
|
187
|
+
| ----------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
188
|
+
| 装完没有页面 | 硬刷新;不行重启 DSH。 |
|
|
189
|
+
| 重复 MCP 页签 | 删 `cordis.patch.yml` 里的旧 loader 行后重启。 |
|
|
190
|
+
| 改坏配置 DSH 起不来 | 取最近的 `.bak-<时间戳>` 恢复。 |
|
|
191
|
+
| 升级 DSH 后动作不可用 | 设置 → 工具 → **兼容** 看原因;`doctor.mjs` → `host-deps.mjs --fix`。 |
|
|
192
|
+
| `approval=never` 还要确认吗 | 不弹卡,直接放行并记日志;想问回来切回「工作区内修改」。 |
|
|
193
|
+
| `subagent_manager_run` 报 provider 不可用 | 对应 provider 没注册:`spawn`(默认)/ `fork`(`inherit`)分别挂 `@deepseek-ai/dsh-subagent-spawn-in-process` / `-fork-in-process` 后重启。 |
|
|
194
|
+
| 场景绑了 A 人设,官方 `subagent` 还跑别的 | 官方那两个是宿主的工具,本插件管不到它们的可见性;插件会把分界写进上下文(贴合人设的一律走 `subagent_manager_run`,官方只在没人设贴合或要后台跑时用),`inherit` 也已对齐 fork 的继承能力。 |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 开发
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
npm install
|
|
202
|
+
npm run build # tsc + 同步客户端
|
|
203
|
+
npm test # 构建 + i18n + 冒烟测试(装配与渲染不抛错)
|
|
204
|
+
npm run check:i18n # 词典自检
|
|
205
|
+
npm run doctor # 宿主兼容体检
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`lib/` 不入版本库,克隆后先 `npm run build`。改完重启 `dsh web` 才生效。运行时依赖仅 `fflate`;`@deepseek-ai/*` 一律用宿主那份。
|
|
209
|
+
|
|
210
|
+
## 许可证
|
|
211
|
+
|
|
212
|
+
MIT
|