dsh-paoding 0.2.2 → 0.3.1
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/README.md +27 -32
- package/README_en.md +27 -32
- package/bin/dsh-paoding.mjs +73 -11
- package/docs/architecture.md +41 -34
- package/docs/architecture_en.md +65 -42
- package/docs/configuration.md +159 -65
- package/docs/configuration_en.md +161 -66
- package/docs/images/1.png +0 -0
- package/docs/installation.md +100 -237
- package/docs/installation_en.md +112 -252
- package/docs/orchestration.md +34 -38
- package/docs/orchestration_en.md +34 -38
- package/package.json +8 -5
- package/plugins/paoding-config-ui/api-core.mjs +215 -18
- package/plugins/paoding-config-ui/index.mjs +414 -154
- package/plugins/paoding-config-ui/lib/base.css +1083 -42
- package/plugins/paoding-config-ui/lib/client.js +2266 -252
- package/plugins/paoding-config-ui/package.json +2 -2
- package/plugins/paoding-config-ui/runtime-inventory.mjs +27 -26
- package/presets/orchestrator/agent.cordis.yml +19 -9
- package/presets/orchestrator/preset.yml +3 -2
- package/presets/orchestrator/restrict.mjs +2 -1
- package/tools/install.mjs +9 -4
- package/tools/lib/alloc.mjs +60 -29
- package/tools/lib/cli.mjs +127 -278
- package/tools/lib/compose.mjs +261 -95
- package/tools/lib/config.mjs +266 -86
- package/tools/lib/host.mjs +55 -24
- package/tools/lib/skills.mjs +72 -45
- package/tools/lib/state.mjs +172 -40
- package/tools/lib/upgrade.mjs +170 -0
- package/tools/lib/util.mjs +7 -0
- package/tools/lib/version.mjs +233 -0
- package/tools/lib/workspaces.mjs +74 -0
- package/tools/lib/yaml.mjs +92 -15
- package/docs/images/2.png +0 -0
- package/docs/images/3.png +0 -0
- package/docs/images/4.png +0 -0
- package/docs/images/5.png +0 -0
- package/docs/images/6.png +0 -0
- package/install.sh +0 -31
- package/tools/lib/wizard.mjs +0 -516
package/docs/installation.md
CHANGED
|
@@ -4,361 +4,224 @@
|
|
|
4
4
|
|
|
5
5
|
# 安装
|
|
6
6
|
|
|
7
|
-
本文面向要安装、升级或卸载 dsh-paoding「编排模式 (Orchestrator)」预设的用户:第 1 节前置要求,第 2
|
|
7
|
+
本文面向要安装、升级或卸载 dsh-paoding「编排模式 (Orchestrator)」预设的用户:第 1 节前置要求,第 2 节唯一官方安装通道(`dsh plugin add`)与首装自动化,第 3 节升级,第 4 节开发检出自装,第 5 节生成时的 host patch 检测机制,第 6 节「庖丁配置」面板,第 7 节卸载,第 8 节常见问题。
|
|
8
8
|
|
|
9
9
|
## 1. 前置要求
|
|
10
10
|
|
|
11
11
|
安装前请确认以下各项:
|
|
12
12
|
|
|
13
|
-
- **Node.js ≥ 18
|
|
14
|
-
-
|
|
15
|
-
-
|
|
13
|
+
- **Node.js ≥ 18**。DSH host 与插件链路都跑在 Node 上;版本过低时 `dsh` 本身就起不来。可用 `node --version` 自查。
|
|
14
|
+
- **pnpm 可用**。`dsh plugin` 是 pnpm 的透明转发器:插件包装进 profile 时由 pnpm 完成。缺失时安装命令会报 pnpm 相关错误,装好 pnpm(`npm i -g pnpm` 或 `corepack enable`)后重试。
|
|
15
|
+
- **已安装 DSH host**(`dsh` 可用,含其 Web/agent 运行时;**@deepseek-ai/dsh ≥ 0.1.5**,最低支持版本)。本插件不改 DSH 源码,只往 DSH 的 preset roster 写入编排预设、并把「庖丁配置」面板挂进 Web 左侧栏,因此先要有可用的 DSH 家目录。
|
|
16
|
+
- **路径事实**(生成管线内建常量,写死前先了解它们):
|
|
16
17
|
|
|
17
18
|
| 项 | 默认值 | 说明 |
|
|
18
19
|
|---|---|---|
|
|
19
|
-
| `$DSH_HOME` | `~/.dsh` | DSH
|
|
20
|
+
| `$DSH_HOME` | `~/.dsh` | DSH 家目录(认环境变量 `DSH_HOME`,缺省 `$HOME/.dsh`)。host 层配置 `cordis.patch.yml`、`node_modules`、`profiles/<name>/cordis.patch.yml`、插件 profile 目录都在其下 |
|
|
20
21
|
| preset roster 根目录 | `$DSH_HOME/.agent-presets/` | `dsh-agent-presets` 扫描本地 authored presets 的目录 |
|
|
21
|
-
| 本预设安装目标 | `$DSH_HOME/.agent-presets/orchestrator` |
|
|
22
|
-
| 配置文件 | `$DSH_HOME/dsh-paoding.config.yml` |
|
|
23
|
-
| 本包副本(npx/npm 安装) | `$DSH_HOME/dsh-paoding` | npx/npm 入口安装时,安装器把整包复制到这个稳定位置,配置 UI 从这里挂载(见第 2 节) |
|
|
22
|
+
| 本预设安装目标 | `$DSH_HOME/.agent-presets/orchestrator` | 生成产物:`agent.cordis.yml`(重写后的角色配置)、`preset.yml`、`restrict.mjs`、`.generator-version` 版本标记,是一个静态目录 |
|
|
23
|
+
| 配置文件 | `$DSH_HOME/dsh-paoding.config.yml` | 「庖丁配置」面板「保存并应用」写入的角色与工具分配(`0o600`,可手编);首装自动化同样读写它 |
|
|
24
24
|
|
|
25
|
-
-
|
|
25
|
+
- **环境变量**:`DSH_HOME` 覆盖 DSH 家目录(默认 `~/.dsh`);`DSH_PAODING_CONFIG` 覆盖配置文件路径(面板认它;仓库内兜底 CLI 则用 `--config <file>` 指定)。
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
git clone https://github.com/lifangjin/dsh-paoding.git dsh-paoding
|
|
29
|
-
cd dsh-paoding
|
|
30
|
-
```
|
|
27
|
+
仓库内 `presets/orchestrator/` 是静态预设源(生成管线读取并重写 `agent.cordis.yml`;`preset.yml`、`restrict.mjs` 原样复制——唯一例外是配置了 `main_agent_display_name`(或工作区派生显示名)时会改写 `preset.yml` 的 `name:` 行),`tools/` 是生成器本体(面板与兜底 CLI 共用),`plugins/paoding-config-ui/` 是「庖丁配置」面板插件本体。只想正常使用的话,这些都不用碰——见下一节。
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
## 2. 安装:唯一官方通道
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
最省事的入口:不用克隆仓库,一条命令装完(npm 发布后可用):
|
|
31
|
+
不用克隆仓库,一条命令 + 一次重启:
|
|
37
32
|
|
|
38
33
|
```bash
|
|
39
|
-
|
|
34
|
+
dsh plugin --profile web add dsh-paoding
|
|
40
35
|
```
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npx github:lifangjin/dsh-paoding
|
|
46
|
-
```
|
|
37
|
+
等价捷径:`npx dsh-paoding@latest`(内部转成上面这条命令,默认 profile web,需本机已装 dsh)。
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
装完**重启 DSH(`dsh web`)**即可用——不需要再跑任何安装命令、点任何按钮。
|
|
49
40
|
|
|
50
|
-
|
|
51
|
-
2. 写基础配置模板(`$DSH_HOME/dsh-paoding.config.yml`);
|
|
52
|
-
3. 把 Web 配置 UI 挂进 DSH 设置页(设置 → 庖丁配置)。
|
|
41
|
+
这条命令背后是两步:
|
|
53
42
|
|
|
54
|
-
|
|
43
|
+
1. `dsh plugin` 作为 pnpm 透明转发器,把 npm 包 `dsh-paoding` 用 pnpm 装进指定 profile 的 `node_modules`;
|
|
44
|
+
2. 包根声明的 `dsh.bundle.patch`(一份 `cordis.patch.yml`,一行 insert:`id: paoding-config-ui` / `name: dsh-paoding`)由 `reconcilePlugins` 并入该 profile 的启动层,boot 时把「庖丁配置」面板挂进 Web 左侧栏底部动作条(设置行上方)。
|
|
55
45
|
|
|
56
|
-
|
|
46
|
+
编排预设不用单独装——插件启动时会自动补上,见下面的首装自动化。
|
|
57
47
|
|
|
58
|
-
|
|
59
|
-
|---|---|
|
|
60
|
-
| `--suggest` | fresh 安装改用智能默认:按检测结果自动把 MCP/host 工具分进角色与主 agent(即旧行为) |
|
|
61
|
-
| `--no-ui` | 跳过配置 UI 挂载 |
|
|
62
|
-
| `--wizard` | 强制进交互向导 |
|
|
48
|
+
### profile 语义
|
|
63
49
|
|
|
64
|
-
|
|
50
|
+
`--profile web` 决定插件装进哪个 profile:「庖丁配置」面板只在以该 profile 启动的 DSH Web 里出现。`web` 是 `dsh web` 的默认 profile,多数机器无需改动;多 profile 用户对每个需要的 profile 各执行一次 `dsh plugin add`。编排预设本体落在 `$DSH_HOME/.agent-presets/`,全机共享、不随 profile 走——在任何 profile 的面板里「保存并应用」,写的都是同一份预设。
|
|
65
51
|
|
|
66
|
-
|
|
52
|
+
### 首装自动化:重启即完整安装
|
|
67
53
|
|
|
68
|
-
|
|
54
|
+
插件启动时自动检测编排预设是否就位:`$DSH_HOME/.agent-presets/orchestrator` 目录缺失,或其中的 `.generator-version` 标记与插件包版本不符时,自动执行一次等价 `--auto` 的安装——`~/.dsh/dsh-paoding.config.yml` 已存在就按配置应用;没有就写基础模板(只含 DSH 自带的基础工具,见下)。它走的是与面板「保存并应用」同一条检测/生成管线(`collectState` / `generateAndInstall`)——同一管线,但启动自愈的检测是纯文件扫描、不带运行时检测事实,面板则带;host 上装有 bundle 形态插件时,两者的检测库存可能不同,产物随之略有差异。
|
|
69
55
|
|
|
70
|
-
|
|
56
|
+
所以 **`dsh plugin add` + 重启 = 完整安装**:预设生成、配置模板落盘、面板可点,一步到位。自动生成失败不会拖垮插件启动——只在 DSH 日志里记一条告警,可到面板手动「保存并应用」补上。
|
|
71
57
|
|
|
72
|
-
|
|
58
|
+
### 版本标记与自动重生成
|
|
73
59
|
|
|
74
|
-
|
|
75
|
-
dsh plugin --profile web add dsh-paoding@latest
|
|
76
|
-
```
|
|
60
|
+
`.generator-version` 标记(内容 = 生成器版本)由插件启动自愈在生成 preset 后写入。面板「保存并应用」与兜底 CLI 的生成走整目录重建、不写回标记——重建即移除旧标记,下次 DSH 启动自愈发现标记缺失会多补跑一次生成并重写标记(产物相同,只是多跑一轮)。版本不符触发重生成的语义不变:插件升级后标记与包版本不符,下次 DSH 启动自动按新版重生成,「升级后 preset 还是旧版产物」的漂移就此消除。标记只在缺失或版本不符时触发重生成,面板不监视配置文件改动;想立刻按当前配置重新生成,点面板「保存并应用」。
|
|
77
61
|
|
|
78
|
-
|
|
62
|
+
### 基础模板与工具勾选
|
|
79
63
|
|
|
80
|
-
|
|
64
|
+
全新安装(无配置文件)生成的基础模板只含 DSH 自带的基础工具——主 agent 21 项核心工具,加各委派角色的基础工具集;检测到的 host/MCP 工具**默认不写入**。检测管线照常运行:点开左侧栏「庖丁配置」,候选清单列出全部已识别工具,按需勾选后点「保存并应用」即可。
|
|
81
65
|
|
|
82
|
-
|
|
83
|
-
dsh plugin --profile web add dsh-paoding@latest # 配置 UI,只在指定 profile 生效
|
|
84
|
-
npx dsh-paoding@latest --no-ui # 编排 preset + 配置模板,--no-ui 防止 UI 重复挂载
|
|
85
|
-
```
|
|
66
|
+
### 应用与生效
|
|
86
67
|
|
|
87
|
-
|
|
68
|
+
安装完成后:
|
|
88
69
|
|
|
89
|
-
|
|
70
|
+
1. **重启 host,或新建一个会话**(预设在新会话创建时装载;预设选择器按新会话刷新)。
|
|
71
|
+
2. 在**新会话的预设选择器**里选「**编排模式 (Orchestrator)**」。
|
|
72
|
+
3. 想让它成为每次新会话的默认预设:**Settings → Agent Presets** 里设置默认。
|
|
90
73
|
|
|
91
|
-
|
|
74
|
+
**手编配置后怎么应用**:打开左侧栏底部动作条(设置行上方)的「庖丁配置」入口——面板会把手编后的配置文件加载为当前值——然后点「**保存并应用**」。这是纯插件用户唯一的应用触发;版本标记只在新版时自动重生成,面板不会盯着配置文件的变化。
|
|
92
75
|
|
|
93
|
-
## 3.
|
|
76
|
+
## 3. 升级
|
|
94
77
|
|
|
95
|
-
|
|
78
|
+
**面板一键升级(推荐)**:面板自动对比 npm registry 上的最新版本(GitHub release 兜底),发现新版就地提示并附上发布页链接。点「升级」按钮,面板就地执行:
|
|
96
79
|
|
|
97
80
|
```bash
|
|
98
|
-
|
|
99
|
-
./install.sh
|
|
81
|
+
dsh plugin --profile <name> update dsh-paoding
|
|
100
82
|
```
|
|
101
83
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
向导在提问前会先做一次完整检测(与 `--auto`/`--dry-run` 共用同一条检测管线),并把结果打印成**检测报告**;若已有配置文件,其内容会作为各项初值(未配置项回落到智能默认或静态基础)。
|
|
105
|
-
|
|
106
|
-
### 六个阶段
|
|
107
|
-
|
|
108
|
-
**① 检测报告**:列出本次检测到的工具,报告内容与第 5 节的检测管线一致:
|
|
109
|
-
|
|
110
|
-
- **MCP 服务器**:每个已启用服务器一行,含名称、transport 与解析出的**精确工具名**(`mcp__<server>__<tool>` 形态,如 `mcp__codegraph__codegraph_explore`、`mcp__tavily__tavily_search`)。已知服务器(tavily、codegraph)走静态表直接解析;未知服务器用实时 JSON-RPC 握手(stdio / streamable-http)解析;握手失败或 transport 不受支持(sse)的服务器显示为无工具可解析(不影响安装)。
|
|
111
|
-
- **本地工具插件**:如 `magic-memory` → 工具 `memory_search`。
|
|
112
|
-
- **已安装 skill**:扫描四个根——`$DSH_HOME/skills`、`~/.agents/skills`(`$DSH_AGENTS_HOME` 可覆盖 `~/.agents`)、运行安装器的工作目录下的 `.dsh/skills` 与 `.agents/skills`(每个根里一个目录或一个 `.md` 文件算一个 skill,以 basename 命名)。
|
|
113
|
-
|
|
114
|
-
**② 工具分配**:对每个解析出工具的 MCP 服务器,向导列出其工具与**当前归属**(已有配置或智能默认预填),然后询问把整组工具分到哪里:`search_external` / `design` / `implement` 三个默认角色之一、`主 agent`、`不分配`、某个已有自定义角色,或 `[0] 新建角色`(回车保持当前归属)。选 `主 agent` 会把该服务器工具从所有角色移除并加入主 agent 追加工具(`main_agent_extra`);选 `不分配` 则从角色与主 agent 两处都移除。
|
|
84
|
+
(profile 自动探测,通常无需手填。)升级只换 profile 里的插件包本体,当前进程的代码不变;成功后提示**重启 DSH**,重启时 preset 按 `.generator-version` 标记自动按新版重生成。
|
|
115
85
|
|
|
116
|
-
|
|
86
|
+
手动升级等价:直接在终端跑上面这条 `dsh plugin update` 命令,同样重启生效。
|
|
117
87
|
|
|
118
|
-
|
|
119
|
-
2. **工具池多选**:工具池 = 三个默认角色静态 allow ∪ 全部检测到的 host 工具,按编号列出。输入逗号分隔的编号(如 `1,3,5`),`all` 全选,`none` 清空。
|
|
120
|
-
3. **persona 一句话**:输入一行描述,自动展开为 `You are the <name> agent. <描述>`;留空则生成时使用同句式的默认描述(`You are the <name> agent. Handle tasks delegated to this role.`)。
|
|
88
|
+
**开发 link 形态**(见第 4 节)版本比较照常(更新卡有新版照常提示),但无法就地升级——升级器要求包真实装在某个 profile 的 node_modules 下,link 直连仓库匹配不到;点「升级」会如实报这一点,并提示手动跑 `dsh plugin add dsh-paoding@latest` 切回 registry 版。
|
|
121
89
|
|
|
122
|
-
|
|
90
|
+
检测失败(断网、限流)时静默跳过,不影响任何使用。
|
|
123
91
|
|
|
124
|
-
|
|
125
|
-
工具按需加载技能正文)及 `read` / `write` / `edit` / `bash` 等,persona 写一句,如「You are the ppt agent. Turn
|
|
126
|
-
outlines into HTML slides: load the html-ppt skill, plan the deck, write the HTML files, then report the output
|
|
127
|
-
path.」;到⑤把 `html-ppt` 技能分给 `ppt` 角色(persona 尾部会带 Available skills 引导行)。装好后主 agent 一句
|
|
128
|
-
「把这份大纲做成 PPT」就委派给会做幻灯片的专属子 agent;任意已装技能同理都能做成专属角色。
|
|
92
|
+
## 4. 开发自装(link: 形态)
|
|
129
93
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**⑤ skill 分配**:分三段提问:
|
|
133
|
-
|
|
134
|
-
- **角色技能分配**:对每个检测到的 skill,选择把它「软引导」到哪些角色(可分配列表 = allow 含 `skill` 的角色;`[0]` 不分配,回车保持)。分给某角色的 skill 会在安装时写进该角色 persona 尾部的 `Available skills: …` 引导行。skill 目录对角色全量可见是 DSH 机制,因此这是**软约束(引导)而非硬隔离**。
|
|
135
|
-
- **主 agent 技能 `main_agent_skills`(软引导)**:勾选后,安装时在**主 agent** persona 末尾为每个技能写一行紧凑技能行(`# skill: <name> — <描述>` + `Read full rules: <SKILL.md 绝对路径>`)。主 agent 不加载 skill 工具/技能目录(目录注入归零),任务匹配到该技能时用自带的 `read` 按需加载正文并遵循——每技能只付一行 persona 的开销,未用到零花费。
|
|
136
|
-
- **`main_agent_skills_inline`(可选,硬内联)**:紧接着询问其中哪些技能需要**全文内联硬生效**——被选中的技能 SKILL.md(去掉 YAML frontmatter)全文内联进主 agent persona,每轮固定生效,适合 `caveman` 等必须无条件生效的风格技能;同一技能若两处都勾选,只按内联处理、不再写软行。
|
|
137
|
-
|
|
138
|
-
找不到对应 SKILL.md 的技能会被**警告并跳过**(不中断安装)。
|
|
139
|
-
|
|
140
|
-
**⑥ 确认摘要 → 安装 → 写入配置**:向导打印确认摘要——每个角色(含自定义)的工具数与 persona 首行、主 agent 追加/移除/技能(软行与内联)、每个 skill 分配给哪些角色,另按需附三样:各角色的专用模型后缀(`| 模型: provider/model`,配了才带)、「内置角色已删除」行(删了内置角色才出现)与「主 agent 名称」行(改过名才出现)——然后问「确认安装并写入配置?[Y/n]」(默认 Y;回答 n 则提示「已取消,未写入任何文件」并退出)。确认后:
|
|
141
|
-
|
|
142
|
-
- 重建目标目录 `$DSH_HOME/.agent-presets/orchestrator`:`agent.cordis.yml` 按上面的分配重写(角色 allow 与 persona、自定义角色块、主 agent restrict `config.allow` 注入;写盘前先做 YAML 结构校验),`preset.yml` 与 `restrict.mjs` 原样复制;
|
|
143
|
-
- 打印安装报告(扫描的 patch 层、检测到的工具、每个角色 allow 的 intent → kept → removed 及剔除原因、下一步提示);
|
|
144
|
-
- 把全部选择序列化写入配置文件(见下)。
|
|
145
|
-
|
|
146
|
-
### 配置持久化
|
|
147
|
-
|
|
148
|
-
向导(以及配置 UI 的「保存并应用」)会把全部选择持久化到 **`$DSH_HOME/dsh-paoding.config.yml`**(文件头部注释标明它由交互向导生成、可手编、改后重跑 `./install.sh --auto` 应用)。之后修改配置(手编或重跑向导)再执行:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
./install.sh --auto
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
即可**幂等**地把新分配应用到 preset(有配置就应用配置;无配置时写基础模板,`--suggest` 改用智能默认——见第 4 节)。配置文件的键位结构说明见 [配置](configuration.md)。
|
|
155
|
-
|
|
156
|
-
## 4. 非交互 / 配置驱动
|
|
157
|
-
|
|
158
|
-
不带终端跑安装(脚本、CI、定时重跑)时,用下列非交互参数。典型用法:
|
|
94
|
+
要改插件或预设源码时,把插件以 link 形态指向仓库(pnpm link 语义):
|
|
159
95
|
|
|
160
96
|
```bash
|
|
97
|
+
git clone https://github.com/lifangjin/dsh-paoding.git
|
|
161
98
|
cd dsh-paoding
|
|
162
|
-
|
|
163
|
-
./install.sh --auto --dry-run # 只打印检测报告与将生成的 allow,不写任何文件
|
|
164
|
-
./install.sh --auto --config /path/to/dsh-paoding.config.yml
|
|
165
|
-
./install.sh --auto --config-ui # 应用 preset 并挂载可视化配置器(见第 7 节)
|
|
166
|
-
./install.sh --wizard < answers.txt # 非 TTY 也强制向导,从 stdin 读答案
|
|
99
|
+
dsh plugin --profile web add link:"$PWD"
|
|
167
100
|
```
|
|
168
101
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| 参数 | 说明 | 默认 |
|
|
172
|
-
|---|---|---|
|
|
173
|
-
| `--auto` | 非交互:有配置文件则应用配置;否则写**基础模板**(只含 DSH 自带基础工具;加 `--suggest` 则改用智能默认,无 host 工具时输出与静态 preset 完全一致,零回归) | 关 |
|
|
174
|
-
| `--config <file>` | 配置文件路径(也接受 `--config=<file>`) | `$DSH_HOME/dsh-paoding.config.yml` |
|
|
175
|
-
| `--wizard` | 强制交互向导;stdin 非 TTY 时也逐行读 stdin,便于脚本/CI 喂答案(npx 入口进向导也用它) | 关 |
|
|
176
|
-
| `--suggest` | fresh 安装改用智能默认:按检测结果自动把 MCP/host 工具分进角色与主 agent(旧行为) | 关 |
|
|
177
|
-
| `--no-ui` | 跳过配置 UI 挂载(npx 一键安装默认挂载,用它关掉) | 关 |
|
|
178
|
-
| `--profile <name>` | 检测时纳入哪个 profile 的 patch 层 | `web` |
|
|
179
|
-
| `--patch <file>` | 额外的 patch 覆盖文件,可重复(详见第 5 节) | 无 |
|
|
180
|
-
| `--dry-run` | 只打印检测报告与将生成的 allow 列表,不写任何文件 | 关 |
|
|
181
|
-
| `--config-ui` | 应用 preset 的同时把配置 UI 挂进 DSH 设置页(见第 7 节) | 关 |
|
|
182
|
-
| `--help` / `-h` | 打印用法说明并退出 | — |
|
|
183
|
-
|
|
184
|
-
环境变量:`DSH_HOME` 覆盖家目录(默认 `~/.dsh`)。
|
|
185
|
-
|
|
186
|
-
**基础模板**(fresh 安装的新默认,`--auto` 且无配置文件时):只写 DSH 自带的基础工具——主 agent 21 项核心工具加各委派角色基础集;检测到的 host/MCP 工具不写入,检测报告照常打印,配置 UI 的候选清单也照常列出全部已识别工具,装完按需勾选即可。
|
|
187
|
-
|
|
188
|
-
**智能默认**(仅 `--auto --suggest` 且无配置文件时,即旧行为):`codegraph` MCP 工具与 `memory_search` 归主 agent;其它 MCP 服务器按其工具名关键字分到三个默认角色(含 `search|research|crawl|extract|map|web` → `search_external`,含 `code|fs|file|write|edit|bash|exec|run` → `implement`,含 `design|render|image|screenshot|paint` → `design`,都不含则归 `search_external`);每个角色最终 allow 为空会**拒绝安装**。
|
|
189
|
-
|
|
190
|
-
配置里显式写 `main_agent_extra: []` 视为明确留空,重跑不会被智能默认回填;老配置缺该键时才回填。
|
|
102
|
+
包直接落在仓库目录上,改动经 HMR 或重启生效,无需反复重装。此形态无法就地升级(见第 3 节);想切回 registry 版,`dsh plugin --profile web add dsh-paoding@latest` 即可。
|
|
191
103
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
安装完成后的输出会打印后续步骤提示:重启 host 或新建会话、在预设选择器里选「编排模式 (Orchestrator)」(见第 6 节)。
|
|
104
|
+
**仓库内兜底 CLI**(不宣传,仅限克隆了仓库的开发者):`node tools/install.mjs --auto`(有配置应用配置,没有写基础模板)、`--dry-run`(只打印检测报告与将生成的 allow,不写盘)、`--config <file>`(指定配置文件)、`--suggest`(fresh 安装无配置时按智能默认分配 host 工具;默认基础模板不写 host 工具)、`--profile <name>`(指定扫描哪个 profile 的 patch 层,默认 `web`)。不带 `--auto`(且非只读的 `--dry-run`)会被拒绝并提示——交互式安装已移除,可视化配置一律走插件通道自带的 Web 面板。
|
|
195
105
|
|
|
196
106
|
## 5. host patch 检测机制
|
|
197
107
|
|
|
198
|
-
|
|
108
|
+
生成管线做检测的根本原因:DSH 在子 agent 创建时执行 `tools.restrict()`,**allow 名单里的名字必须存在于子 agent 可见的注册面内**,否则创建被拒(unknown tools)。注册面里唯一随机器变化的部分就是 host patch 层,因此生成器不写死 allow,而是在生成时读取 patch 层、检测**实际启用**的工具,用「配置/静态意图 ∩ 实际检测到的工具」重写三个默认角色(`search_external` / `design` / `implement`)以及你新建的自定义角色的 `toolFilter.allow`——这样生成的 preset 永不因 host 工具停用而过期。
|
|
199
109
|
|
|
200
110
|
### 读取的 patch 层
|
|
201
111
|
|
|
202
|
-
|
|
112
|
+
按序**全部纳入**(检测把各层里已启用的条目做并集):
|
|
203
113
|
|
|
204
114
|
| # | 层 | 路径 | 缺失时 |
|
|
205
115
|
|---|---|---|---|
|
|
206
116
|
| 1 | home 层 | `$DSH_HOME/cordis.patch.yml` | 不存在则跳过 |
|
|
207
|
-
| 2 | profile 层 | `$DSH_HOME/profiles/<profile>/cordis.patch.yml` | 不存在则跳过(默认 profile = `web
|
|
208
|
-
| 3 | 额外覆盖 | `--patch <file
|
|
117
|
+
| 2 | profile 层 | `$DSH_HOME/profiles/<profile>/cordis.patch.yml` | 不存在则跳过(默认 profile = `web`) |
|
|
118
|
+
| 3 | 额外覆盖 | `--patch <file>`(可重复;兜底 CLI 参数) | 报 warning 并跳过 |
|
|
209
119
|
|
|
210
120
|
### MCP 与本地插件的检测
|
|
211
121
|
|
|
212
122
|
- **启用判定**:patch 条目未被禁用(`enabled !== false` 且无 `disabled`)即视为启用;插件另查 `config.enabled`。
|
|
213
|
-
- **MCP
|
|
214
|
-
- **精确工具名解析**(`toolFilter.allow` 是精确名匹配、不支持 glob
|
|
215
|
-
- **本地工具插件**:按白名单匹配 patch 条目名并登记其工具,如 `magic-memory` → `memory_search`(新增插件需扩展白名单,见 `tools/
|
|
216
|
-
-
|
|
123
|
+
- **MCP 服务器识别**:条目名的包名段**精确等于** `dsh-mcp-client`(scoped/子路径形式按 `/` 取末段比对,`not-dsh-mcp-client-foo` 这类不会误判),或配置含 `serverName` 且 transport 为 `stdio` / `streamable-http` / `sse`(或有 `command`)。
|
|
124
|
+
- **精确工具名解析**(`toolFilter.allow` 是精确名匹配、不支持 glob,名字必须拼全):检测顺序是**所有 `stdio` / `streamable-http` 服务器一律先实时 JSON-RPC 握手**(stdio 拉起进程发 `initialize` + `tools/list`;streamable-http 走 POST;**15 秒超时**),把返回的工具名解析成 `mcp__<server>__<tool>`;静态已知表(`tavily` → 5 个工具 `tavily_search` / `tavily_crawl` / `tavily_extract` / `tavily_map` / `tavily_research`,`codegraph` → `codegraph_explore`)只是已知服务器**握手失败时的降级兜底**——工具按表保留,报告标注 static table,不丢工具;未知服务器握手失败才整服务器跳过。
|
|
125
|
+
- **本地工具插件**:按白名单匹配 patch 条目名并登记其工具,如 `magic-memory` → `memory_search`(新增插件需扩展白名单,见 `tools/lib/host.mjs` 的 `KNOWN_HOST_PLUGINS`)。
|
|
126
|
+
- **跳过不报错**:「握手失败、超时、`sse` 等不支持实时发现的服务器被跳过」只适用于**未知服务器**——整服务器跳过,对应角色只是缺这些工具,生成不报错(报告里会标注 `handshake failed` 及原因,URL/密钥会被打码);已知服务器握手失败回落静态表、工具保留,不在此列。
|
|
217
127
|
|
|
218
128
|
### allow 重写规则
|
|
219
129
|
|
|
220
|
-
对每个被重写的角色:allow
|
|
130
|
+
对每个被重写的角色:allow 里的名字按**白名单**对账,必须落在 **preset 自带工具面**(`restrict.mjs` 主 agent 白名单 ∪ 源 preset 各角色静态 allow)或**检测库存**之一,两头都不占的名字(插件停用后残留的 `mnemon_*`、拼写错误等)一律剔除,「预览生成」/兜底 CLI 报告的 removed 列表会给出原因。其中 **host 依赖名**(`mcp__*` 与已知插件工具)即便写在源 preset 里,也必须真实检测到才保留;`mnemon_*` 这类插件直注册、无 `mcp__` 前缀的工具同样按检测库存对账;standard 组合保证的核心工具(read/write/edit/glob/grep/bash/skill/web_search 等)本就在 preset 自带面内,不依赖检测直接保留。结果 = 配置意图 ∩ 实际启用工具:停用的 host 工具名自动剔除,保证 `tools.restrict()` 永不报 unknown tools。主 agent 侧同理:`restrict.mjs` 的 base allow 里 host 依赖名按检测结果过滤,`main_agent_extra` 追加的 host 工具与自定义角色 toolName 注入 `config.allow`,`main_agent_remove` 剔除(移除结果为空列表会**拒绝安装**,防止运行时空 allow 拒载)。静态 preset 中不由生成器重写的其它委派行(如 `search_internal_deep`)原样保留。
|
|
221
131
|
|
|
222
|
-
|
|
132
|
+
**重新应用的时机**:改动了 patch 配置(启用/停用 MCP 服务器或插件、增删额外 patch 文件)后,到「庖丁配置」点一次「保存并应用」同步 allow——想先看将发生的剔除清单,点「预览生成」,或用兜底 CLI 的 `--dry-run`。兜底 CLI 还会比较 patch 文件与上次生成结果的时间戳,发现 patch 更新过会打印提醒。
|
|
223
133
|
|
|
224
134
|
### 解析与校验
|
|
225
135
|
|
|
226
|
-
patch 与配置文件用 **`yaml` 包**解析——通过 `createRequire` 从 `$DSH_HOME/node_modules`
|
|
136
|
+
patch 与配置文件用 **`yaml` 包**解析——通过 `createRequire` 从 `$DSH_HOME/node_modules` 惰性加载(该目录由 dsh host 管理、含 profile 安装,自带 yaml v2);不可用时回退到**内置的极简 YAML 子集解析器**(要求顶层为列表/映射,支持常见标量与 `- insert:` 包裹)。解析前会先中和真实 patch 文件里的 cordis `!!js` 表达式(`process.platform` / `process.cwd()` 换成求值结果)。源 `agent.cordis.yml` 里角色 allow/persona 块的定位优先用 yaml AST 的字节范围(保缩进、精确替换),失败则回退结构化正则;生成结果写盘前先做一次 YAML 结构校验(`!!js` 占位后解析),结构错误直接拦下、不写盘。
|
|
227
137
|
|
|
228
138
|
### 典型示例
|
|
229
139
|
|
|
230
|
-
例 1——停用 tavily:在 `$DSH_HOME/cordis.patch.yml` 注释掉 tavily
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
./install.sh --auto --dry-run # 预览:search_external 的 allow 会剔除 5 个 mcp__tavily__*,
|
|
234
|
-
# 报告列出 removed 与原因(如 "tavily MCP 未启用")
|
|
235
|
-
./install.sh --auto # 应用
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
例 2——插件停用:停用 magic-memory 后重跑 `--auto`,各角色 allow 中的 `memory_search` 自动剔除;此后想恢复就重新启用插件并重跑。
|
|
239
|
-
|
|
240
|
-
例 3——新增 `--patch`:把额外的 MCP/插件配置放独立文件,检测时用 `--patch <file>` 一并纳入(不必动 home/profile 层文件)。
|
|
241
|
-
|
|
242
|
-
## 6. 应用与生效
|
|
243
|
-
|
|
244
|
-
安装完成(向导或 `--auto`)后,产物是 `$DSH_HOME/.agent-presets/orchestrator/` 下的静态目录——**不重启也安全**,改配置重跑安装器只是重写这个目录:
|
|
245
|
-
|
|
246
|
-
1. **重启 host,或新建一个会话**(预设在新会话创建时装载;预设选择器按新会话刷新)。
|
|
247
|
-
2. 在**新会话的预设选择器**里选「**编排模式 (Orchestrator)**」。
|
|
248
|
-
3. 想让它成为每次新会话的默认预设:**Settings → Agent Presets** 里设置默认。
|
|
249
|
-
|
|
250
|
-
**升级**:仓库更新后重新生成即可——`git pull` 拉取新源码,然后:
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
cd dsh-paoding
|
|
254
|
-
./install.sh --auto # 有配置则幂等应用(推荐先 --auto --dry-run 预览)
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
走 npx/npm 入口的更省事:重跑 `npx dsh-paoding@latest`(发布前用 `npx github:lifangjin/dsh-paoding`),同样有配置应用配置。
|
|
140
|
+
例 1——停用 tavily:在 `$DSH_HOME/cordis.patch.yml` 注释掉 tavily 的挂载行后,到「庖丁配置」先点「预览生成」——`search_external` 的 allow 会剔除 5 个 `mcp__tavily__*`,报告列出 removed 与原因(如 "tavily MCP 未启用");确认后点「保存并应用」(开发者也可用兜底 CLI:`node tools/install.mjs --dry-run` 预览、`--auto` 应用)。
|
|
258
141
|
|
|
259
|
-
|
|
142
|
+
例 2——插件停用:停用 magic-memory 后重新应用一次,各角色 allow 中的 `memory_search` 自动剔除;此后想恢复就重新启用插件再应用。
|
|
260
143
|
|
|
261
|
-
|
|
144
|
+
例 3——额外的 patch 文件(仅限兜底 CLI,克隆仓库的开发者):把额外的 MCP/插件配置放独立文件,检测时用 `--patch <file>` 一并纳入(不必动 home/profile 层文件);面板检测只读 home/profile 两层,无对应入口。
|
|
262
145
|
|
|
263
|
-
|
|
264
|
-
rm -rf "$DSH_HOME/.agent-presets/orchestrator"
|
|
265
|
-
rm -rf "$DSH_HOME/dsh-paoding" # 仅 npx/npm 安装需要:删掉安装器复制的整包目录
|
|
266
|
-
```
|
|
146
|
+
## 6. 庖丁配置面板
|
|
267
147
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
## 7. 可视化配置器(可选)
|
|
271
|
-
|
|
272
|
-
不想手编 `dsh-paoding.config.yml`、也不想走终端向导时,可以把可视化配置器作为插件挂进 DSH Web 的**设置 → 庖丁配置**分区。它与 CLI 共用同一条检测/生成管线(`collectState` / `generateAndInstall`),所见即所得。
|
|
273
|
-
|
|
274
|
-
### 挂载
|
|
275
|
-
|
|
276
|
-
```bash
|
|
277
|
-
cd dsh-paoding
|
|
278
|
-
./install.sh --auto --config-ui
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
`--config-ui` 在应用 preset 之后**幂等**地做两件事:把本仓库的 `plugins/paoding-config-ui` 符号链接进 `$DSH_HOME/node_modules/paoding-config-ui`(已存在且指向本仓库则跳过;指向其它来源会报错,提示先删掉旧链接),并确保 `$DSH_HOME/cordis.patch.yml` 里有启用状态的挂载行(缺失则追加、被注释则自动取消注释):
|
|
282
|
-
|
|
283
|
-
```yaml
|
|
284
|
-
- insert:
|
|
285
|
-
- id: paoding-config-ui
|
|
286
|
-
name: paoding-config-ui
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
然后**重启 DSH(`dsh web`)**,设置页出现「庖丁配置」分区。
|
|
290
|
-
|
|
291
|
-
从 npx/npm 入口安装时没有仓库目录可链:安装器改为把整包复制到 `$DSH_HOME/dsh-paoding`(见第 2 节),再从那里挂载;只有克隆仓库跑 `./install.sh` 才走上面的符号链接直连。两种形态对 DSH 都是同一个 `paoding-config-ui` 包,下一节的加载机制完全一致。
|
|
292
|
-
|
|
293
|
-
除了 `--config-ui`,还有一条路通向同一个分区:DSH 官方插件通道 `dsh plugin --profile web add dsh-paoding@latest`,只装 UI、按 profile 生效(详见第 2 节)。它与这里的全局挂载勿并存,否则设置页会出现重复的「庖丁配置」。
|
|
148
|
+
不想手编 `dsh-paoding.config.yml` 的话,点开左侧栏底部动作条(设置行上方)的**「庖丁配置」**入口进入整页配置。它与首装自动化、兜底 CLI 共用同一条检测/生成管线(`collectState` / `generateAndInstall`),所见即所得;面板随插件通道自带,装好插件就有,无需另外挂载。
|
|
294
149
|
|
|
295
150
|
### 加载机制
|
|
296
151
|
|
|
297
|
-
- cordis 经
|
|
152
|
+
- cordis 经 profile 目录的 `node_modules` 解析 patch 行里的包名 `dsh-paoding`;
|
|
298
153
|
- DSH 的 client-modules 节点半扫描该包 `package.json` 的 `dsh.client` 声明与 `exports["./client"]`,把 `lib/client.js` 编入浏览器的 `__DSH_BOOT__`(以 `/plugins/paoding-config-ui/client.js` 下发);
|
|
299
|
-
- 浏览器内核为清单里的每个插件创建 loader 条目并激活(bundle 以 `window.__ModuleLoader__.load({ id: "paoding-config-ui", factory })` 注册,id
|
|
300
|
-
- 客户端 `apply()`
|
|
154
|
+
- 浏览器内核为清单里的每个插件创建 loader 条目并激活(bundle 以 `window.__ModuleLoader__.load({ id: "paoding-config-ui", factory })` 注册,id 等于 patch 行的 id);
|
|
155
|
+
- 客户端 `apply()` 把「庖丁配置」入口经宿主 `sidebar.footer.action` 键控槽注册(`slots.register`,与插件广场 cordis 徽章同槽位,渲染在设置行上方的动作条里),不自行 DOM 注入侧栏;MutationObserver 仅用于工作区「…」菜单桥接(认出菜单 DOM、注入「庖丁配置」深链入口)。点击后容器(`data-dsh-paoding-view`)挂进会话中栏、`createRoot` 渲染整页配置页,打开态由 `html[data-dsh-paoding-active]` 驱动,与记忆系统 / taskboard / ssh 等全页面板互斥。
|
|
301
156
|
|
|
302
157
|
### 数据接口与安全
|
|
303
158
|
|
|
304
|
-
面板数据走**同源 `/api/paoding/*`**:Node 侧注册前缀路由——`GET /api/paoding/state`(带缓存的检测状态)、`POST /api/paoding/rescan`(强制重检测,含 MCP 握手)、`POST /api/paoding/preview`(不写盘生成)、`POST /api/paoding/apply
|
|
159
|
+
面板数据走**同源 `/api/paoding/*`**:Node 侧注册前缀路由——`GET /api/paoding/state`(带缓存的检测状态)、`GET /api/paoding/version`(最新版检测,版本/更新卡的数据源)、`GET /api/paoding/models`(宿主模型运行时的模型清单)、`GET` + `POST /api/paoding/workspaces`(工作区列表 / 添加工作区)、`POST /api/paoding/rescan`(强制重检测,含 MCP 握手)、`POST /api/paoding/preview`(不写盘生成)、`POST /api/paoding/apply`(安装并保存配置)、`POST /api/paoding/upgrade`(就地 `dsh plugin update`)、`GET /api/paoding/client.css`(面板样式静态下发)——复用 `tools/` 的检测与生成管线(`plugins/paoding-config-ui/api-core.mjs`)。路由自带**浏览器信任围栏**:Host 必须回环或落在 `webRuntime.trustedHosts`,并拒绝 cross-site 请求(复刻 DSH `/api` 网关围栏语义,因为 `/api/paoding` 前缀更长会命中本插件而绕开网关)。面板**没有独立服务端/端口**:DSH Web 端口只监听 `127.0.0.1`,不对外网暴露。
|
|
305
160
|
|
|
306
161
|
### 面板能力
|
|
307
162
|
|
|
308
|
-
-
|
|
309
|
-
- **Agent 工具分配卡片**:主 agent 一张固定卡(基础工具取消勾选 = 加入 `main_agent_remove` 从主 agent 剔除;
|
|
163
|
+
- **状态与操作**:页头是标题 + 版本/更新卡(新版就地提示与一键升级)+ 副标题,正文直接就是工作区与角色卡,没有单独的检测摘要与 chips 区;操作按钮「**保存并应用**」「预览生成」「重新检测」固定在面板底部悬浮操作坞(sticky bottom),滚动任意位置都可直接点击。
|
|
164
|
+
- **Agent 工具分配卡片**:主 agent 一张固定卡(基础工具取消勾选 = 加入 `main_agent_remove` 从主 agent 剔除;MCP / 插件工具勾选 = 加入 `main_agent_extra`;技能「read 按需」与「内联全文」两组勾选;另有「人设追加」编辑区,可改、清空、恢复默认)+ `search_external` / `design` / `implement` 三张内置角色卡 + 任意自定义角色卡(带删除按钮);每张角色卡把工具按「基础工具 / MCP 工具 / 插件工具」三组呈现、可逐项勾选,并可编辑 persona。底部「新建自定义 agent 角色」。
|
|
310
165
|
- **技能分配**:每个 skill 一行,勾选分配给哪些 agent(写入对应 persona 的 `Available skills` 软引导;角色技能软引导,主 agent 技能另有 read 按需/内联两组)。
|
|
311
166
|
- **预览生成**:不写盘生成 `agent.cordis.yml`,显示每个角色 allow 的 intent → kept 计数与生成全文。
|
|
312
|
-
- **保存并应用**:确认后写入 preset(覆盖 `$DSH_HOME/.agent-presets/orchestrator`)并把当前分配保存到 `$DSH_HOME/dsh-paoding.config.yml
|
|
167
|
+
- **保存并应用**:确认后写入 preset(覆盖 `$DSH_HOME/.agent-presets/orchestrator`)并把当前分配保存到 `$DSH_HOME/dsh-paoding.config.yml`;应用成功后提示重启 DSH 或新建会话生效(检测到 patch 比生成结果新时提示重启后生效)。打开面板时会加载既有配置文件作为当前值——手编过的选择直接可见、可改。
|
|
313
168
|
|
|
314
|
-
|
|
169
|
+
## 7. 卸载
|
|
170
|
+
|
|
171
|
+
三条命令,删得干干净净:
|
|
315
172
|
|
|
316
173
|
```bash
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
174
|
+
dsh plugin --profile web remove dsh-paoding
|
|
175
|
+
rm -rf "${DSH_HOME:-$HOME/.dsh}/.agent-presets/orchestrator"
|
|
176
|
+
rm -rf "${DSH_HOME:-$HOME/.dsh}/.agent-presets"/orchestrator-*
|
|
320
177
|
```
|
|
321
178
|
|
|
322
|
-
|
|
179
|
+
第一条摘掉插件与侧栏面板(只影响指定 profile),第二条删掉编排预设目录,第三条清掉按工作区配置时生成的各工作区预设目录(`orchestrator-<目录名>`;没用过按工作区配置就没有这类目录,通配不命中、无害)——基础 `orchestrator` 目录已由上一条命令删掉,不含在这个通配里。配置文件 `~/.dsh/dsh-paoding.config.yml` 不随之上删——留着或删掉都不影响 DSH 其它配置,重装时首装自动化会再次按它应用。
|
|
180
|
+
|
|
181
|
+
卸载不影响 host 的其它内容(MCP、插件、会话等),与 DSH 源码零耦合;之后新建会话时「编排模式 (Orchestrator)」不再出现在预设选择器里。
|
|
323
182
|
|
|
324
183
|
## 8. 常见问题与排查
|
|
325
184
|
|
|
326
|
-
**
|
|
185
|
+
**pnpm 缺失**
|
|
327
186
|
|
|
328
|
-
|
|
187
|
+
`dsh plugin add` 报 pnpm 相关错误:`dsh plugin` 依赖 pnpm 装包。`npm i -g pnpm`(或 `corepack enable`)装好后重试。
|
|
329
188
|
|
|
330
|
-
|
|
189
|
+
**装了插件,预设列表里却没有「编排模式 (Orchestrator)」**
|
|
331
190
|
|
|
332
|
-
|
|
191
|
+
预设由插件启动时自动生成:先确认装完后**重启过 DSH**;预设在新会话创建时装载,重启后还要新建一个会话才会出现在选择器里。仍没有就查 DSH 日志里 `paoding-config-ui` 的告警(自动生成失败会记日志,可到面板手动「保存并应用」补上),再检查 `ls "${DSH_HOME:-$HOME/.dsh}/.agent-presets/orchestrator"`——目录为空多半是插件运行时的 `$DSH_HOME` 与你以为的家目录不一致(启动 DSH 前显式 `export DSH_HOME=…`)。
|
|
333
192
|
|
|
334
193
|
**`tools.restrict()` 报 unknown tools / 子 agent 创建被拒**
|
|
335
194
|
|
|
336
|
-
allow 名单里出现了子 agent 注册面上不存在的名字——最常见原因是启用/停用了 MCP
|
|
195
|
+
allow 名单里出现了子 agent 注册面上不存在的名字——最常见原因是启用/停用了 MCP 服务器或插件之后**没有重新应用**。到「庖丁配置」点「保存并应用」同步(想先看剔除清单就点「预览生成」);手写进 allow 的未安装工具名同样会触发。
|
|
337
196
|
|
|
338
|
-
|
|
197
|
+
**侧栏没有「庖丁配置」入口**
|
|
339
198
|
|
|
340
|
-
|
|
199
|
+
先确认插件装在当前 DSH 实际使用的 profile 里(`dsh plugin add` 时的 `--profile` 值),且装完重启过 DSH——面板按 profile 生效,装在 `web` 以外的 profile 时,要用那个 profile 启动 DSH 才能看到。都正常仍没有,查启动日志里插件是否加载成功。
|
|
341
200
|
|
|
342
201
|
**角色里少了某个 MCP 工具**
|
|
343
202
|
|
|
344
|
-
|
|
203
|
+
检测时所有 stdio / streamable-http 服务器都先实时握手:未知服务器握手失败会被整服务器跳过(报告标注 `handshake failed`),对应角色只是缺这些工具,生成不报错;已知服务器(tavily、codegraph)握手失败会回落静态表、工具保留,报告标注 static table——看到该标注说明检测时连不上该服务器、表里的工具面可能过时。检查该服务器能否独立启动/连通后重新应用。
|
|
345
204
|
|
|
346
205
|
**技能没写进 persona**
|
|
347
206
|
|
|
348
|
-
|
|
207
|
+
技能可以分给任意角色——生成层会为每个被分配的角色在 persona 里追加 `Available skills:` 软引导行;但角色要真正加载技能,得自备 `skill` / `read` 工具(没带 `skill` 工具的角色分了技能,也只是一行引导,不会实际装载)。主 agent 技能走 `main_agent_skills`(软行)或 `main_agent_skills_inline`(内联)。找不到 SKILL.md(按配置对象对应口径查找:全局只查用户级两根,工作区另查该工作区目录的项目级根,见配置指南第 9 节)会被警告并跳过——确认 skill 已装在对应根目录之一。
|
|
349
208
|
|
|
350
|
-
|
|
209
|
+
**手编了配置文件,怎么让它生效**
|
|
351
210
|
|
|
352
|
-
|
|
211
|
+
打开左侧栏底部动作条(设置行上方)的「庖丁配置」入口(面板会把手编后的配置文件作为当前值加载),点「保存并应用」。面板不监视配置文件改动,手编不会自动生效;版本标记也只在新版时才触发自动重生成。
|
|
353
212
|
|
|
354
|
-
|
|
213
|
+
**配置文件在哪里**
|
|
355
214
|
|
|
356
|
-
|
|
215
|
+
面板「保存并应用」写到 `$DSH_HOME/dsh-paoding.config.yml`(默认 `~/.dsh/dsh-paoding.config.yml`,可用环境变量 `DSH_PAODING_CONFIG` 改到别处;兜底 CLI 用 `--config <file>`)。想重置全部选择:删除该文件后重启 DSH,首装自动化按无配置处理、写回基础模板。
|
|
357
216
|
|
|
358
|
-
|
|
217
|
+
**旧版 npx/npm 安装的残留怎么清理**
|
|
359
218
|
|
|
360
|
-
|
|
219
|
+
已发布的 0.2.x 及更早版本支持 `npx dsh-paoding` 直装:整包复制到 `~/.dsh/dsh-paoding`,并往全局 `~/.dsh/cordis.patch.yml` 写 `paoding-config-ui` 挂载行(npx/npm 形态)或建立 `~/.dsh/node_modules/paoding-config-ui` 符号链接(克隆形态)。新版的挂载统一走 plugin 通道,不再使用这些位置(如今的 `npx dsh-paoding@latest` 只是转成 `dsh plugin add` 的捷径,也不写这些位置)。清理:
|
|
361
220
|
|
|
362
|
-
|
|
221
|
+
```bash
|
|
222
|
+
rm -rf ~/.dsh/dsh-paoding # 旧 npx/npm 形态复制的整包目录
|
|
223
|
+
rm -f ~/.dsh/node_modules/paoding-config-ui # 旧克隆形态的符号链接
|
|
224
|
+
# 再删掉 ~/.dsh/cordis.patch.yml 里 id: paoding-config-ui 的挂载段(三行)
|
|
225
|
+
```
|
|
363
226
|
|
|
364
|
-
|
|
227
|
+
改完重启 DSH。若侧栏因此出现重复入口,也按此清理即可——现在只有 plugin 通道一种挂载来源。
|