dsh-mcp-panel 0.4.0 → 0.4.2
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 +17 -0
- package/README.es.md +179 -48
- package/README.hi.md +178 -47
- package/README.md +128 -69
- package/README.pt.md +181 -50
- package/README.zh.md +134 -74
- package/lib/index.js +53 -44
- package/lib/types/aggregate.d.ts +3 -3
- package/lib/types/client/McpPanelTab.d.ts +1 -1
- package/lib/types/client/ServerEditor.d.ts +1 -1
- package/lib/types/client/TrialConsole.d.ts +1 -1
- package/lib/types/client/index.d.ts +5 -5
- package/lib/types/client/present.d.ts +1 -1
- package/lib/types/client/remote.d.ts +1 -1
- package/lib/types/command.d.ts +2 -2
- package/lib/types/diagnostics.d.ts +1 -1
- package/lib/types/grouping.d.ts +1 -1
- package/lib/types/index.d.ts +14 -14
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/patch.d.ts +1 -1
- package/lib/types/probe.d.ts +1 -1
- package/lib/types/service.d.ts +4 -2
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/trial.d.ts +16 -9
- package/lib/types/trial.d.ts.map +1 -1
- package/package.json +28 -19
- package/src/index.ts +1 -1
- package/src/probe.ts +1 -1
- package/src/service.ts +5 -2
- package/src/trial.ts +52 -45
package/README.zh.md
CHANGED
|
@@ -1,26 +1,56 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# dsh-mcp-panel
|
|
2
4
|
|
|
3
5
|
**官方 DeepSeek Harness MCP client 的 MCP 管理控制台 —— 在设置页可视化增删改 MCP 服务器、试用工具调用,配以诚实的连接状态、健康诊断与安全可逆的 profile 写入。**
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
*官方 client = 桥接,本插件 = 控制台:经 `mcp/status` seam 读取状态,只写入只追加、走审批的 profile patch。*
|
|
6
8
|
|
|
7
9
|
[](LICENSE)
|
|
8
|
-
[](https://github.com/topics/dsh-plugin)
|
|
11
|
+
[](#)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-mcp-panel/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-mcp-panel/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
[English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
</div>
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
| 维度 | 状态 |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.8`–`0.2.0` |
|
|
28
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
29
|
+
| 平台 | Web GUI(双面:Host + 浏览器) |
|
|
30
|
+
| 模型 | 任意(面板只读;仅 `/mcp` 输出对模型可见) |
|
|
31
|
+
|
|
32
|
+
## What you get
|
|
33
|
+
|
|
34
|
+
`dsh-mcp-panel` 是官方 MCP client 之上的体验层:只读运行时视图加上安全可逆的 profile 写入。
|
|
35
|
+
|
|
36
|
+
- **`/mcp` 命令** —— 每 server 一行:transport、目标、工具数、连接状态(来自上游 seam;未观测时如实显示 `unknown`)、最近错误、重连计数——模型可读、会话日志可重建、五种输出语言。
|
|
37
|
+
- **`/mcp <server> tools`** —— 模型可见的 `mcp__*` 工具名与描述。
|
|
38
|
+
- **`/mcp <server> health`** —— 派生自愈建议(ENOENT → 依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽…);退出码 / stderr 尾部如实标注*待官方支持*。
|
|
39
|
+
- **`/mcp <server> call <tool> [json]`** —— 经**官方工具管线**(`ctx.tools.execute()`)试用调用;pre-execute 权限策略、审批、guard、post-execute 全部生效。
|
|
40
|
+
- **设置 → 插件 → MCP 页** —— 状态卡片(徽章、诊断、探测),加 server CRUD 与工具试用台。
|
|
41
|
+
- **Server CRUD** —— 增删改表单 → `insert`/`set`/`set disabled` 片段 → 剪贴板复制或审批写入,自动备份。
|
|
42
|
+
- **工具试用台** —— 选 server → 选 `mcp__*` 工具 → JSON 填参 → 规范 JSON 结果 + render 内容;按 `trialMaxResultChars` 截断;仅面板可见、永不进入模型上下文。
|
|
43
|
+
|
|
44
|
+
## Architecture: official client = bridge, this plugin = console
|
|
45
|
+
|
|
46
|
+
[`@deepseek-ai/dsh-mcp-client`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/mcp/mcp-client) 是**唯一的桥接层**:每个 MCP server 一个插件实例,以手写 `cordis.yml` 行的形式配置,负责连接传输、同步工具并注册 `mcp__<server>__<tool>` 工具名。本插件从不取代它——而是构建其上的**体验层**:
|
|
47
|
+
|
|
48
|
+
```text
|
|
19
49
|
┌────────────────────────────────────────────┐
|
|
20
50
|
profile │ cordis.yml / cordis.patch.yml │
|
|
21
51
|
组合(每个 │ - id: mcp-github │
|
|
22
|
-
|
|
23
|
-
|
|
52
|
+
server 一行, │ name: '@deepseek-ai/dsh-mcp-client' │
|
|
53
|
+
手写) │ config: { serverName, transport, … } │
|
|
24
54
|
│ - id: mcp-panel │
|
|
25
55
|
│ name: dsh-mcp-panel ◄── 本插件 │
|
|
26
56
|
└───────────────┬────────────────────────────┘
|
|
@@ -33,13 +63,14 @@
|
|
|
33
63
|
│ • 传输连接 │ │ • /mcp 命令 │ │
|
|
34
64
|
│ • 工具同步 │ │ • 设置 → 插件 → MCP 页: │ │
|
|
35
65
|
│ • mcp__* 工具 │◄──────►│ CRUD、工具试用台 │ │
|
|
36
|
-
│ • mcp/status seam │ 状态 │ •
|
|
37
|
-
└───────────────────┘
|
|
66
|
+
│ • mcp/status seam │ 状态 │ • 健康诊断 │ │
|
|
67
|
+
└───────────────────┘ │ • 探测、能力一览 │ │
|
|
68
|
+
└───────────────────────────┘ │
|
|
38
69
|
```
|
|
39
70
|
|
|
40
|
-
控制台通过官方 client 已落地的 `mcp/status` 可观测 seam(事件 + `mcpStatus` 查询服务)、工具注册表与 loader **读取**事实;**写入**只发生在 profile 的 patch
|
|
71
|
+
控制台通过官方 client 已落地的 `mcp/status` 可观测 seam(事件 + `mcpStatus` 查询服务)、工具注册表与 loader **读取**事实;**写入**只发生在 profile 的 patch 层——只追加、走审批、自动备份。传输、OAuth 与协议完全不动。
|
|
41
72
|
|
|
42
|
-
##
|
|
73
|
+
## Console vs. hand-written cordis.yml
|
|
43
74
|
|
|
44
75
|
| | 手写 cordis.yml | dsh-mcp-panel 控制台 |
|
|
45
76
|
|---|---|---|
|
|
@@ -51,33 +82,22 @@
|
|
|
51
82
|
| 排查故障 | grep 日志 | `/mcp <server> health` 派生自愈建议 |
|
|
52
83
|
| 误操作 | 手动回滚 | 每次写入只追加、留时间戳备份 |
|
|
53
84
|
|
|
54
|
-
控制台的输出就是 `cordis.patch.yml`
|
|
85
|
+
控制台的输出就是 `cordis.patch.yml` 的词汇表——你手写的那几行,由它生成、预览并安全落地。
|
|
55
86
|
|
|
56
|
-
##
|
|
57
|
-
|
|
58
|
-
| 界面 | 功能 |
|
|
59
|
-
|---|---|
|
|
60
|
-
| **`/mcp` 命令** | 每 server 一行:transport、目标、工具数、连接状态(来自上游 seam;未观测时如实显示 `unknown`)、最近错误、重连计数——模型可读、会话日志可重建、五种输出语言 |
|
|
61
|
-
| **`/mcp <server> tools`** | 模型可见的 `mcp__*` 工具名与描述 |
|
|
62
|
-
| **`/mcp <server> health`** | 派生自愈建议(ENOENT → 依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽…);退出码 / stderr 尾部如实标注"待官方支持" |
|
|
63
|
-
| **`/mcp <server> call <tool> [json]`** | 经**官方工具管线**试用调用——pre-execute 权限策略、审批(经命令所属 agent 路由)、guard、post-execute 全部生效 |
|
|
64
|
-
| **`/mcp <server> disable\|enable`** | 精确的 `set` patch 行(同旧版) |
|
|
65
|
-
| **设置 → 插件 → MCP 页** | 状态卡片(徽章、诊断、探测),加以下三块控制台 |
|
|
66
|
-
| **Server CRUD** | 增删改表单 → `insert`/`set`/`set disabled` 片段 → 剪贴板复制或审批写入,自动备份(`cordis.patch.yml.bak-<ts>`,保留最新 `backupCount` 份) |
|
|
67
|
-
| **工具试用台** | 选 server → 选 `mcp__*` 工具 → JSON 填参 → 规范 JSON 结果 + render 内容;按 `trialMaxResultChars` 截断;仅面板可见、永不进入模型上下文 |
|
|
68
|
-
| **能力一览** | Resources / Prompts 可用性(特征探测);目前二者均如实标注"待官方支持"(官方 client 仅桥接工具) |
|
|
69
|
-
| **探测** | 一键 / 被动 Streamable HTTP 连通性探测(结果仅面板可见) |
|
|
70
|
-
|
|
71
|
-
## 快速开始
|
|
87
|
+
## Quick start
|
|
72
88
|
|
|
73
89
|
```sh
|
|
74
|
-
#
|
|
75
|
-
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#
|
|
76
|
-
|
|
77
|
-
|
|
90
|
+
# 1. 把 bundle 安装进 profile
|
|
91
|
+
dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"
|
|
92
|
+
|
|
93
|
+
# 或从 npm(发布版本)
|
|
94
|
+
dsh plugin --profile web add dsh-mcp-panel
|
|
95
|
+
|
|
96
|
+
# 2. 重启并校验该行
|
|
97
|
+
dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
78
98
|
```
|
|
79
99
|
|
|
80
|
-
|
|
100
|
+
随后打开 **设置 → 插件 → MCP**,或运行:
|
|
81
101
|
|
|
82
102
|
```text
|
|
83
103
|
/mcp
|
|
@@ -86,66 +106,106 @@ dsh plugin --profile web add dsh-mcp-panel@0.4.0
|
|
|
86
106
|
/mcp everything call echo '{"message": "hi"}'
|
|
87
107
|
```
|
|
88
108
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
```yaml
|
|
92
|
-
- insert:
|
|
93
|
-
- id: mcp-panel
|
|
94
|
-
name: dsh-mcp-panel
|
|
95
|
-
config:
|
|
96
|
-
probeEnabled: true
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 卸载
|
|
109
|
+
## Install & uninstall
|
|
100
110
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
- **git 通道**(最新 `main`):`dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"` —— `prepare` 脚本只用生产依赖构建。
|
|
112
|
+
- **npm 通道**(发布版本):`dsh plugin --profile web add dsh-mcp-panel`。
|
|
113
|
+
- **tarball 通道**:在本仓库 `pnpm pack`,再 `dsh plugin --profile web add ./dsh-mcp-panel-<version>.tgz`。
|
|
114
|
+
- **卸载**:从 `cordis.patch.yml` 移除 `mcp-panel` 行(web 面板热重载),从 profile 的 `node_modules` 删除本包,并用 `dsh web --dump-config` 确认没有残留的 `mcp-panel` 行。
|
|
104
115
|
|
|
105
|
-
##
|
|
116
|
+
## Configuration
|
|
106
117
|
|
|
107
|
-
|
|
108
|
-
- **不伪造状态。** 无上游观测时连接字段显示 `unknown` / `—`,并标注 `statusSource: 'derived'`;退出码与 stderr 尾部绝不臆造。
|
|
109
|
-
- **展示全程脱敏。** URL 查询凭据、userinfo 密码、header 值、Bearer token、JWT 在渲染前一律打码;配置的 `headers` 从不进入任何快照;env/header 的**值**绝不出 host(编辑器只见 key)。
|
|
110
|
-
- **写入只追加、走审批、先备份。** 控制台从不改写 `cordis.patch.yml`:只追加生成的操作。存在审批服务且调用方会话的 agent 处于开启轮次时,写入走 `ctx.approval`(仅 `allowed-once` 放行);否则以界面显式确认为审批通道。`writeEnabled: false` 是硬性总开关。
|
|
111
|
-
- **零提示词注入。** 本插件不注册任何提示词段落;对模型可见的文本只有两个工具/命令描述,沿用官方 client 的 Minimal 风格。
|
|
118
|
+
所有可调项都是 Schemastery `Config` 字段(可从 cordis.yml 覆盖)。`cordis.patch.yml` 逐键内联注释。
|
|
112
119
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
| 键 | 默认值 | 说明 |
|
|
120
|
+
| 键 | 默认值 | 含义 |
|
|
116
121
|
|---|---|---|
|
|
117
122
|
| `probeEnabled` | `true` | 注册 `mcp_probe` 后台任务工具(结果仅面板可见) |
|
|
118
123
|
| `probeTimeoutMs` | `10000` | 单次探测超时(ms) |
|
|
119
124
|
| `maxProbes` | `10` | 面板展示的探测记录数 |
|
|
120
125
|
| `refreshIntervalMs` | `0` | 建议的面板刷新间隔(ms);`0` = 按需 |
|
|
121
|
-
| `outputLanguage` | `en` | `/mcp` 输出语言:`en\|zh\|es\|pt\|hi` |
|
|
126
|
+
| `outputLanguage` | `en` | `/mcp` 输出语言:`en \| zh \| es \| pt \| hi` |
|
|
122
127
|
| `passiveProbeEnabled` | `false` | 周期性探测 streamable-http 服务器 |
|
|
123
128
|
| `passiveProbeIntervalMs` | `60000` | 被动探测间隔(ms) |
|
|
124
129
|
| `trialEnabled` | `true` | 工具试用台(设置页 + `/mcp call`) |
|
|
125
|
-
| `trialTimeoutMs` | `120000` |
|
|
130
|
+
| `trialTimeoutMs` | `120000` | 每次试用调用的面板侧截止时间(ms) |
|
|
126
131
|
| `trialMaxResultChars` | `60000` | 试用结果载荷上限(字符) |
|
|
127
132
|
| `writeEnabled` | `true` | 总开关:`false` 拒绝一切 profile 写入(仍可复制片段) |
|
|
128
133
|
| `backupCount` | `5` | 每次写入保留的 `cordis.patch.yml` 备份数 |
|
|
129
134
|
|
|
130
|
-
##
|
|
135
|
+
## Tools & surfaces
|
|
136
|
+
|
|
137
|
+
| 表面 | 类型 | 说明 |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| `/mcp` | command | 每 server 状态行;模型可读、日志可重建 |
|
|
140
|
+
| `/mcp <server> tools` | command | 模型可见的 `mcp__*` 工具名与描述 |
|
|
141
|
+
| `/mcp <server> health` | command | 由脱敏错误文本派生的自愈建议 |
|
|
142
|
+
| `/mcp <server> call <tool> [json]` | command | 经官方工具管线试用调用 |
|
|
143
|
+
| `mcp_probe` | tool | 可选 Streamable HTTP 连通性探测(后台任务) |
|
|
144
|
+
| 设置 → 插件 → MCP 页 | UI 槽位 | 状态卡片、server CRUD 与工具试用台 |
|
|
145
|
+
| `mcpPanel` Typert Remote | service | 只读快照通道(Host → client) |
|
|
146
|
+
|
|
147
|
+
## Resources & Prompts
|
|
148
|
+
|
|
149
|
+
官方 client 明确记载 *"Tools 是当前唯一桥接的 MCP 能力"*——Resources 与 Prompts 处于 deferred 状态。控制台特征探测了上游提案中的 catalog seam,一旦落地即可只读展示列表;在此之前,能力一览中二者均标注**待官方支持**。
|
|
131
150
|
|
|
132
|
-
|
|
151
|
+
## Permissions & data
|
|
133
152
|
|
|
134
|
-
|
|
153
|
+
- **权限**:`dshWorkshop` manifest 声明 `network:outbound` 与 `native-code:none`。
|
|
154
|
+
- **数据**:面板只读;只写入只追加的 `cordis.patch.yml` 片段(走审批、先备份)。URL 查询凭据、userinfo 密码、header 值、Bearer token、JWT 在渲染前一律打码;配置的 `headers` 从不进入任何快照,env/header 的**值**绝不出 Host(编辑器只见 key)。
|
|
155
|
+
|
|
156
|
+
## Security boundaries
|
|
157
|
+
|
|
158
|
+
- **桥接层仍是桥接层。** 不改传输、OAuth、协议;每个 server 一行 mcp-client,与你手写完全一致。
|
|
159
|
+
- **不伪造状态。** 无上游观测时连接字段显示 `unknown` / `—` 并标注 `statusSource: 'derived'`;退出码与 stderr 尾部绝不臆造。
|
|
160
|
+
- **写入只追加、走审批、先备份。** 控制台从不改写 `cordis.patch.yml`:只追加生成的操作,并保留最新 `backupCount` 份备份。
|
|
161
|
+
- **零提示词注入。** 本插件不注册任何提示词段落;对模型可见的文本只有两个工具/命令描述。
|
|
162
|
+
|
|
163
|
+
## Known limitations
|
|
164
|
+
|
|
165
|
+
- **Resources 与 Prompts** 待官方支持——官方 client 仅桥接工具。
|
|
166
|
+
- **退出码 / stderr 尾部** 在 client 暴露前如实标注*待官方支持*。
|
|
167
|
+
- **只读面板** —— 控制台从不伪造连接状态;不可观测字段显示 `unknown` / `-1` / `—`。
|
|
168
|
+
|
|
169
|
+
## Development
|
|
135
170
|
|
|
136
171
|
```sh
|
|
137
172
|
pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
|
|
138
173
|
```
|
|
139
174
|
|
|
140
|
-
- `
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- `src/diagnostics.ts` — 错误模式 → 建议映射(纯函数)。
|
|
144
|
-
- `src/client/` — 设置页控制台(服务器编辑器、试用台、诊断)。
|
|
145
|
-
- `scripts/verify-headless.mjs` 启动真实 web profile 并打印 `/mcp` 实际输出。
|
|
175
|
+
`scripts/verify-headless.mjs` 启动真实 web profile 并打印 `/mcp` 实际输出。发布:`node scripts/release.mjs <x.y.z>` 跑全量门禁、提交并本地打 `v<x.y.z>` 标签(绝不推送)。
|
|
176
|
+
|
|
177
|
+
## Topics
|
|
146
178
|
|
|
147
|
-
|
|
179
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `mcp`, `mcp-client`, `observability`, `panel`
|
|
148
180
|
|
|
149
|
-
##
|
|
181
|
+
## Contributors
|
|
150
182
|
|
|
151
|
-
|
|
183
|
+
- [@PerryLink](https://github.com/PerryLink) —— 创建者与维护者。
|
|
184
|
+
- [@xiaoyuyu6420](https://github.com/xiaoyuyu6420) —— 诊断出干净 checkout 构建失败背后缺失的 client devDependencies(PR #5)。
|
|
185
|
+
|
|
186
|
+
## PerryLink DSH Plugin Family
|
|
187
|
+
|
|
188
|
+
本项目是 [PerryLink](https://github.com/PerryLink) 维护的 [DeepSeek Harness 插件](https://github.com/PerryLink)之一。如果你觉得这个插件有用,其余的很可能同样有用:
|
|
189
|
+
|
|
190
|
+
| 插件 | 一句话说明 |
|
|
191
|
+
|---|---|
|
|
192
|
+
| [dsh-mask](https://github.com/PerryLink/dsh-mask) | PII 脱敏中间件:模型边界匿名化、展示层还原 |
|
|
193
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | 只读 MCP 运行时面板:/mcp 命令 + 设置页,状态/工具/错误一览 |
|
|
194
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | 工程纪律守门:需求审讯、测试证据门、对抗评审 |
|
|
195
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | 持久化后台子代理:Web 侧边栏进度、随时留言与打断 |
|
|
196
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | 基于语言服务器的诊断/格式化/补全/代码动作/重命名 |
|
|
197
|
+
| [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | 对标 Claude Code outputStyles 的运行时风格切换 |
|
|
198
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | 对标 Claude Code /rewind:快照、会话 fork、一键回退 |
|
|
199
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code 风格声明式 allow/deny/ask 权限规则,带审计 |
|
|
200
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | 审批链上的第二模型自动审查,默认 fail-closed |
|
|
201
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | 带审批门的跨会话记忆:ctx.memory + SQLite + memory 工具 |
|
|
202
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | 安全审计技能包:密钥扫描、依赖与供应链审查 |
|
|
203
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | 在 Web 侧边栏置顶会话,持久排序 |
|
|
204
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Web 作曲器终端式输入历史:方向键、Ctrl+R 搜索 |
|
|
205
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | DSH 的 GitHub PR/issue 集成,所有写操作经审批门 |
|
|
206
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | 插件开发知识库,随 bundle 安装的按需 agent 技能 |
|
|
207
|
+
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | 把 Claude Code 会话、记忆、技能和 CLAUDE.md 迁入 DSH |
|
|
208
|
+
|
|
209
|
+
## License
|
|
210
|
+
|
|
211
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-mcp-panel contributors
|
package/lib/index.js
CHANGED
|
@@ -600,7 +600,7 @@ const INITIALIZE_PROTOCOL_VERSION = "2024-11-05";
|
|
|
600
600
|
* advertised version tracks the package version. */
|
|
601
601
|
const PROBE_CLIENT_INFO = {
|
|
602
602
|
name: "dsh-mcp-panel",
|
|
603
|
-
version: "0.4.
|
|
603
|
+
version: "0.4.2"
|
|
604
604
|
};
|
|
605
605
|
/** Display cap for server-reported name/version fields in probe details. */
|
|
606
606
|
const DISPLAY_LIMIT = 80;
|
|
@@ -1664,8 +1664,6 @@ async function pruneBackups(filePath, keep) {
|
|
|
1664
1664
|
//#region src/trial.ts
|
|
1665
1665
|
/** Panel-owned marker prefix so trial callIds can never collide with model calls. */
|
|
1666
1666
|
const TRIAL_CALL_PREFIX = "mcp-panel-trial";
|
|
1667
|
-
/** Trial callId counter per service instance. */
|
|
1668
|
-
let trialCounter = 0;
|
|
1669
1667
|
/**
|
|
1670
1668
|
* Validate one trial request structurally; returns an English error string
|
|
1671
1669
|
* or null. Never throws on untrusted input.
|
|
@@ -1684,46 +1682,55 @@ function validateTrialRequest(request) {
|
|
|
1684
1682
|
return null;
|
|
1685
1683
|
}
|
|
1686
1684
|
/**
|
|
1687
|
-
*
|
|
1688
|
-
*
|
|
1689
|
-
* @
|
|
1690
|
-
* @param agents - optional live agent registry for approval routing.
|
|
1691
|
-
* @param sessionId - optional current session id from the client.
|
|
1692
|
-
* @param request - the validated trial request.
|
|
1693
|
-
* @param limits - panel-side deadline and result cap.
|
|
1694
|
-
* @returns the wire result.
|
|
1685
|
+
* Create the trial caller: one callId sequence per service instance, so a
|
|
1686
|
+
* plugin reload never carries counter state across mounts.
|
|
1687
|
+
* @returns the trial caller bound to its own sequence.
|
|
1695
1688
|
*/
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
callId
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1689
|
+
function createTrialCaller() {
|
|
1690
|
+
let trialCounter = 0;
|
|
1691
|
+
return {
|
|
1692
|
+
/**
|
|
1693
|
+
* Run one trial call through the official tool pipeline.
|
|
1694
|
+
*
|
|
1695
|
+
* @param tools - the registry the call executes through.
|
|
1696
|
+
* @param agents - optional live agent registry for approval routing.
|
|
1697
|
+
* @param sessionId - optional current session id from the client.
|
|
1698
|
+
* @param request - the validated trial request.
|
|
1699
|
+
* @param limits - panel-side deadline and result cap.
|
|
1700
|
+
* @returns the wire result.
|
|
1701
|
+
*/
|
|
1702
|
+
async runTrialCall(tools, agents, sessionId, request, limits) {
|
|
1703
|
+
const { serverName, toolName } = request;
|
|
1704
|
+
const prefix = `mcp__${serverName}__`;
|
|
1705
|
+
if (!toolName.startsWith(prefix)) throw new Error(`tool "${toolName}" does not belong to server "${serverName}" (expected the ${prefix}… namespace)`);
|
|
1706
|
+
if (tools.get(toolName) === void 0) throw new Error(`tool "${toolName}" is not registered — the server may be down or its sync failed`);
|
|
1707
|
+
let argumentsValue;
|
|
1708
|
+
try {
|
|
1709
|
+
argumentsValue = JSON.parse(request.argsJson);
|
|
1710
|
+
} catch {
|
|
1711
|
+
throw new Error("argsJson is not valid JSON");
|
|
1712
|
+
}
|
|
1713
|
+
const agent = sessionId === void 0 || sessionId === "" ? void 0 : agents?.get(sessionId);
|
|
1714
|
+
const callId = `${TRIAL_CALL_PREFIX}-${++trialCounter}`;
|
|
1715
|
+
const started = Date.now();
|
|
1716
|
+
const execution = {
|
|
1717
|
+
callId,
|
|
1718
|
+
name: toolName,
|
|
1719
|
+
arguments: argumentsValue,
|
|
1720
|
+
...agent === void 0 ? {} : { agent },
|
|
1721
|
+
signal: AbortSignal.timeout(limits.timeoutMs)
|
|
1722
|
+
};
|
|
1723
|
+
const result = await tools.execute(execution);
|
|
1724
|
+
const durationMs = Date.now() - started;
|
|
1725
|
+
const { json, truncated } = projectTrialResult(result, limits.maxResultChars);
|
|
1726
|
+
return {
|
|
1727
|
+
callId: String(callId),
|
|
1728
|
+
isError: result.isError,
|
|
1729
|
+
truncated,
|
|
1730
|
+
durationMs,
|
|
1731
|
+
resultJson: json
|
|
1732
|
+
};
|
|
1733
|
+
} };
|
|
1727
1734
|
}
|
|
1728
1735
|
/** Project the registry outcome onto the lossless JSON the client renders. */
|
|
1729
1736
|
function projectTrialResult(result, budget) {
|
|
@@ -1919,6 +1926,8 @@ var McpPanelService = class extends TypertRemoteService {
|
|
|
1919
1926
|
observedAt = /* @__PURE__ */ new Map();
|
|
1920
1927
|
/** Latest passive-probe reachability per server namespace. */
|
|
1921
1928
|
probeStates = /* @__PURE__ */ new Map();
|
|
1929
|
+
/** The trial caller with this instance's own callId sequence. */
|
|
1930
|
+
trialCaller = createTrialCaller();
|
|
1922
1931
|
/** Passive-probe loop guard: one sweep at a time. */
|
|
1923
1932
|
passiveRunning = false;
|
|
1924
1933
|
/**
|
|
@@ -2137,7 +2146,7 @@ var McpPanelService = class extends TypertRemoteService {
|
|
|
2137
2146
|
}
|
|
2138
2147
|
const problem = validateTrialRequest(request);
|
|
2139
2148
|
if (problem !== null) throw new Error(`dsh-mcp-panel: ${problem}`);
|
|
2140
|
-
return runTrialCall(this.ctx.tools, agentsOf(this.ctx), sessionId, request, {
|
|
2149
|
+
return this.trialCaller.runTrialCall(this.ctx.tools, agentsOf(this.ctx), sessionId, request, {
|
|
2141
2150
|
timeoutMs: this.config.trialTimeoutMs,
|
|
2142
2151
|
maxResultChars: this.config.trialMaxResultChars
|
|
2143
2152
|
});
|
|
@@ -2289,4 +2298,4 @@ async function apply(ctx, config) {
|
|
|
2289
2298
|
});
|
|
2290
2299
|
}
|
|
2291
2300
|
//#endregion
|
|
2292
|
-
export { Config, MCP_STATUS_EVENT, McpPanelService, aggregateServerView, aggregateSnapshot, appendPatchFragment, apply, configViewOf, countServerTools, defaultEntryId, deriveTarget, diagnoseServer, groupMcpTools, inject, mcpCommand, mcpProbeTool, mergeServerConfig, name, nextEntryId, parseMcpArgs, probeEndpoint, probeJob, renderHealth, renderList, renderPatchFragment, renderPatchSuggestion, renderServer, renderTools, renderTrialCall, resolveConfig, resolvePatchOp,
|
|
2301
|
+
export { Config, MCP_STATUS_EVENT, McpPanelService, aggregateServerView, aggregateSnapshot, appendPatchFragment, apply, configViewOf, countServerTools, createTrialCaller, defaultEntryId, deriveTarget, diagnoseServer, groupMcpTools, inject, mcpCommand, mcpProbeTool, mergeServerConfig, name, nextEntryId, parseMcpArgs, probeEndpoint, probeJob, renderHealth, renderList, renderPatchFragment, renderPatchSuggestion, renderServer, renderTools, renderTrialCall, resolveConfig, resolvePatchOp, sanitizeError, sanitizeText, sanitizeUrl, serverNameOf, validateServerConfig, validateTrialRequest, yamlScalar };
|
package/lib/types/aggregate.d.ts
CHANGED
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module dsh-mcp-panel/aggregate
|
|
16
16
|
*/
|
|
17
|
-
import { type McpToolGroup } from './grouping.
|
|
18
|
-
import type { McpServerStatus } from './upstream.
|
|
19
|
-
import type { McpFiberPhase, McpPanelSnapshot, McpServerConfigView, McpServerView, McpTransport } from './wire.
|
|
17
|
+
import { type McpToolGroup } from './grouping.js';
|
|
18
|
+
import type { McpServerStatus } from './upstream.js';
|
|
19
|
+
import type { McpFiberPhase, McpPanelSnapshot, McpServerConfigView, McpServerView, McpTransport } from './wire.js';
|
|
20
20
|
/** One loader-derived mcp-client row (config is raw serialized data). */
|
|
21
21
|
export interface McpLoaderRow {
|
|
22
22
|
/** Loader entry id (the patch row id). */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** The MCP management console tab: server cards, CRUD editor, trial console, capabilities, probes. */
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
3
|
import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
4
|
-
import type { McpPanelSnapshot, McpTrialResultWire, PatchPreview, PatchWriteResult, ProbeStarted } from '../wire.
|
|
4
|
+
import type { McpPanelSnapshot, McpTrialResultWire, PatchPreview, PatchWriteResult, ProbeStarted } from '../wire.js';
|
|
5
5
|
/** Registration-side injected face: the console RPCs (RemoteResult already unwrapped). */
|
|
6
6
|
export interface McpPanelTabInjected {
|
|
7
7
|
/** Read the current Host snapshot. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Server CRUD editor: form → patch fragment → copy or approval-gated write. */
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
3
|
import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
|
|
4
|
-
import type { McpServerConfigView, PatchPreview, PatchWriteResult } from '../wire.
|
|
4
|
+
import type { McpServerConfigView, PatchPreview, PatchWriteResult } from '../wire.js';
|
|
5
5
|
/** Editor callbacks supplied by the tab. */
|
|
6
6
|
export interface ServerEditorActions {
|
|
7
7
|
previewPatch: (opJson: string) => Promise<PatchPreview>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Tool trial console: server → registered mcp__* tool → JSON args → official pipeline. */
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
3
|
import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
|
|
4
|
-
import type { McpServerView, McpTrialResultWire } from '../wire.
|
|
4
|
+
import type { McpServerView, McpTrialResultWire } from '../wire.js';
|
|
5
5
|
/** Trial console props supplied by the tab. */
|
|
6
6
|
export interface TrialConsoleProps {
|
|
7
7
|
t: PropsLocale<'settings.mcpPanel'>['t'];
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
* @module dsh-mcp-panel/client
|
|
11
11
|
*/
|
|
12
12
|
import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
|
|
13
|
-
import { type McpPanelLocaleKey } from './locales.
|
|
14
|
-
export type { McpPanelTabInjected, McpPanelTabProps } from './McpPanelTab.
|
|
15
|
-
export type { McpPanelLocaleKey } from './locales.
|
|
16
|
-
export { presentMcpPanel, connectionBadge, probeBadge } from './present.
|
|
17
|
-
export type { PresentedMcpPanel, PresentedProbeRow, PresentedServerRow, BadgeTone } from './present.
|
|
13
|
+
import { type McpPanelLocaleKey } from './locales.js';
|
|
14
|
+
export type { McpPanelTabInjected, McpPanelTabProps } from './McpPanelTab.js';
|
|
15
|
+
export type { McpPanelLocaleKey } from './locales.js';
|
|
16
|
+
export { presentMcpPanel, connectionBadge, probeBadge } from './present.js';
|
|
17
|
+
export type { PresentedMcpPanel, PresentedProbeRow, PresentedServerRow, BadgeTone } from './present.js';
|
|
18
18
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
19
19
|
interface LocaleNamespaceMap {
|
|
20
20
|
/** MCP management console copy. */
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module dsh-mcp-panel/client/present
|
|
9
9
|
*/
|
|
10
|
-
import type { McpPanelSnapshot, McpServerView, McpProbeView } from '../wire.
|
|
10
|
+
import type { McpPanelSnapshot, McpServerView, McpProbeView } from '../wire.js';
|
|
11
11
|
/** Badge tones the stylesheet understands. */
|
|
12
12
|
export type BadgeTone = 'ok' | 'warn' | 'error' | 'muted';
|
|
13
13
|
/** Render-ready server row plus derived badge facts. */
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module dsh-mcp-panel/client/remote
|
|
9
9
|
*/
|
|
10
10
|
import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
|
|
11
|
-
import type { McpPanelSnapshot, McpTrialResultWire, PatchPreview, PatchWriteResult, ProbeStarted } from '../wire.
|
|
11
|
+
import type { McpPanelSnapshot, McpTrialResultWire, PatchPreview, PatchWriteResult, ProbeStarted } from '../wire.js';
|
|
12
12
|
declare module '@deepseek-ai/dsh-typert-protocol' {
|
|
13
13
|
interface TypertRemoteNamespace$mcpPanel {
|
|
14
14
|
/** Read the current console snapshot. */
|
package/lib/types/command.d.ts
CHANGED
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* @module dsh-mcp-panel/command
|
|
21
21
|
*/
|
|
22
22
|
import type { CommandDefinition } from '@deepseek-ai/dsh-commands';
|
|
23
|
-
import type { McpPanelService } from './service.
|
|
24
|
-
import type { McpPanelSnapshot, McpServerView } from './wire.
|
|
23
|
+
import type { McpPanelService } from './service.js';
|
|
24
|
+
import type { McpPanelSnapshot, McpServerView } from './wire.js';
|
|
25
25
|
/** Display language for the `/mcp` output. */
|
|
26
26
|
export type CommandLanguage = 'en' | 'zh' | 'es' | 'pt' | 'hi';
|
|
27
27
|
/** Every display string the renderers emit, per language. */
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module dsh-mcp-panel/diagnostics
|
|
16
16
|
*/
|
|
17
|
-
import type { McpFiberPhase, McpTransport } from './wire.
|
|
17
|
+
import type { McpFiberPhase, McpTransport } from './wire.js';
|
|
18
18
|
/** Stable suggestion codes; every surface localizes them by key. */
|
|
19
19
|
export type McpSuggestionCode = 'command-not-found' | 'command-spawn-failed' | 'connection-refused' | 'connection-dropped' | 'timeout' | 'dns' | 'auth-401' | 'auth-403' | 'path-404' | 'rate-limit' | 'permission' | 'reconnect-exhausted' | 'reconnect-waiting' | 'entry-failed';
|
|
20
20
|
/** One derived health suggestion. */
|
package/lib/types/grouping.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module dsh-mcp-panel/grouping
|
|
12
12
|
*/
|
|
13
|
-
import type { McpToolView } from './wire.
|
|
13
|
+
import type { McpToolView } from './wire.js';
|
|
14
14
|
/** The `mcp__` namespace prefix every bridged MCP tool name starts with. */
|
|
15
15
|
export declare const MCP_TOOL_PREFIX = "mcp__";
|
|
16
16
|
/** One tool group: a server namespace with its model-visible tools. */
|
package/lib/types/index.d.ts
CHANGED
|
@@ -29,23 +29,23 @@
|
|
|
29
29
|
* @module dsh-mcp-panel
|
|
30
30
|
*/
|
|
31
31
|
import type { Context } from '@deepseek-ai/cordis';
|
|
32
|
-
import { Config } from './config.
|
|
32
|
+
import { Config } from './config.js';
|
|
33
33
|
export declare const name = "mcp-panel";
|
|
34
34
|
/** Hard services: the facts the console reads. `commands`/`jobs` are optional children. */
|
|
35
35
|
export declare const inject: string[];
|
|
36
|
-
export { Config, resolveConfig } from './config.
|
|
37
|
-
export { McpPanelService } from './service.
|
|
38
|
-
export { mcpCommand, parseMcpArgs, renderList, renderPatchSuggestion, renderServer, renderTools, renderTrialCall, renderHealth } from './command.
|
|
39
|
-
export { groupMcpTools, countServerTools } from './grouping.
|
|
40
|
-
export { aggregateServerView, aggregateSnapshot, configViewOf, deriveTarget, serverNameOf } from './aggregate.
|
|
41
|
-
export { sanitizeError, sanitizeText, sanitizeUrl } from './sanitize.
|
|
42
|
-
export { diagnoseServer, type McpDiagnostic, type McpSuggestionCode, type McpHealthFacts } from './diagnostics.
|
|
43
|
-
export { probeEndpoint, probeJob, mcpProbeTool } from './probe.
|
|
44
|
-
export { validateServerConfig, mergeServerConfig, renderPatchFragment, resolvePatchOp, nextEntryId, defaultEntryId, yamlScalar, type McpServerConfigInput, type McpPatchOp, type McpPatchResolution, } from './patch.
|
|
45
|
-
export { appendPatchFragment } from './write.
|
|
46
|
-
export {
|
|
47
|
-
export { MCP_STATUS_EVENT, type McpStatusPayload, type McpStatusQuery, type McpServerStatus } from './upstream.
|
|
48
|
-
export type * from './wire.
|
|
36
|
+
export { Config, resolveConfig } from './config.js';
|
|
37
|
+
export { McpPanelService } from './service.js';
|
|
38
|
+
export { mcpCommand, parseMcpArgs, renderList, renderPatchSuggestion, renderServer, renderTools, renderTrialCall, renderHealth } from './command.js';
|
|
39
|
+
export { groupMcpTools, countServerTools } from './grouping.js';
|
|
40
|
+
export { aggregateServerView, aggregateSnapshot, configViewOf, deriveTarget, serverNameOf } from './aggregate.js';
|
|
41
|
+
export { sanitizeError, sanitizeText, sanitizeUrl } from './sanitize.js';
|
|
42
|
+
export { diagnoseServer, type McpDiagnostic, type McpSuggestionCode, type McpHealthFacts } from './diagnostics.js';
|
|
43
|
+
export { probeEndpoint, probeJob, mcpProbeTool } from './probe.js';
|
|
44
|
+
export { validateServerConfig, mergeServerConfig, renderPatchFragment, resolvePatchOp, nextEntryId, defaultEntryId, yamlScalar, type McpServerConfigInput, type McpPatchOp, type McpPatchResolution, } from './patch.js';
|
|
45
|
+
export { appendPatchFragment } from './write.js';
|
|
46
|
+
export { createTrialCaller, validateTrialRequest, type McpTrialRequest, type McpTrialResult } from './trial.js';
|
|
47
|
+
export { MCP_STATUS_EVENT, type McpStatusPayload, type McpStatusQuery, type McpServerStatus } from './upstream.js';
|
|
48
|
+
export type * from './wire.js';
|
|
49
49
|
/**
|
|
50
50
|
* Mount the console: the snapshot/action service, the upstream status seam
|
|
51
51
|
* consumer, the `/mcp` command (when commands exist), and the probe tool
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAMnD,eAAO,MAAM,IAAI,cAAc,CAAA;AAE/B,2FAA2F;AAC3F,eAAO,MAAM,MAAM,UAAsB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACpJ,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACjH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAMnD,eAAO,MAAM,IAAI,cAAc,CAAA;AAE/B,2FAA2F;AAC3F,eAAO,MAAM,MAAM,UAAsB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACpJ,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACjH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAA;AAC/G,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAClH,mBAAmB,WAAW,CAAA;AAE9B;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCvE"}
|
package/lib/types/patch.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* @module dsh-mcp-panel/patch
|
|
24
24
|
*/
|
|
25
25
|
import { z } from 'zod';
|
|
26
|
-
import type { McpServerConfigView } from './wire.
|
|
26
|
+
import type { McpServerConfigView } from './wire.js';
|
|
27
27
|
/** The official bridge module every generated row names. */
|
|
28
28
|
export declare const MCP_CLIENT_MODULE = "@deepseek-ai/dsh-mcp-client";
|
|
29
29
|
/** Wire-shaped complete server config the editor submits (JSON only). */
|
package/lib/types/probe.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { JobHooks, JobRegistry } from '@deepseek-ai/dsh-jobs';
|
|
12
12
|
import type { ToolDefinition } from '@deepseek-ai/dsh-tools';
|
|
13
|
-
import type { McpPanelService } from './service.
|
|
13
|
+
import type { McpPanelService } from './service.js';
|
|
14
14
|
/** Producer kind; also the job-id prefix. */
|
|
15
15
|
export declare const PROBE_KIND = "mcp-probe";
|
|
16
16
|
declare module '@deepseek-ai/dsh-jobs' {
|