dsh-mcp-connector 0.2.80 → 0.2.82
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 +36 -1
- package/README.en.md +9 -3
- package/README.md +9 -3
- package/docs/DATA-MCP-CONTRIBUTION-REVIEW.md +60 -0
- package/docs/SHAREABLE-CONNECTION-TEMPLATES.md +92 -0
- package/docs/tutorials/ONE-SUCCESS-CASE.md +51 -0
- package/docs/tutorials/README.md +2 -0
- package/docs/tutorials/SHARING-AUTHOR-ASSETS.md +32 -0
- package/docs/tutorials/SHARING-KIT.md +45 -0
- package/docs/tutorials/SHARING-UI-INTEGRATION.md +63 -0
- package/lib/catalog.js +13 -0
- package/lib/index.js +9 -1
- package/lib/shareable-connection-template.js +389 -0
- package/lib/web.js +1 -0
- package/package.json +5 -3
- package/scripts/ui-harness.mjs +12 -1
- package/ui/connection-template-sharing.js +382 -0
- package/ui/index.html +155 -0
- package/ui/sharing-experience.js +438 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
本项目遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/);首个公开版本从 `0.1.0` 开始。
|
|
4
4
|
|
|
5
|
+
## [0.2.82] - 2026-10-26
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- 新增首次使用只读引导,将安装、授权、工具发现/缓存和真实业务调用拆成独立阶段;只读取当前作用域内的状态和缓存,不把“已安装”“有缓存”或“已复制草稿”误判为业务成功。
|
|
10
|
+
- 新增“分享使用体验”草稿编辑器。用户选择公开教程模板、按实际情况填写版本与步骤状态后,只有明确点击才会把脱敏文本带入会话草稿;Host 返回成功前不宣称已带入,失败时保留预览供修正重试。
|
|
11
|
+
- 新增确定性安全连接模板分享。输出只包含白名单允许的固定结构和审核过的公开目录引用;自定义 URL、连接名称、凭据、Header、OAuth Grant、stdio 命令与环境变量不会进入分享结果。
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- 增强外部分发源审计:以 npm `latest` 为规范版本,严格检查 awesome-dsh-plugin/DSH Market、dshopen 及受监控目录的版本与 npm 安装元数据;`stale`、`invalid`、`missing`、`unavailable` 均不能通过同步门禁。
|
|
16
|
+
- 分发漂移继续由单一自动跟踪项维护;已有目录等待同步或元数据修正时,不重复提交外部上架 PR/Issue。
|
|
17
|
+
|
|
18
|
+
### Security and privacy
|
|
19
|
+
|
|
20
|
+
- 所有分享行为均需用户明确操作;插件不会自动发送消息、调用业务工具、公开发帖或上传业务数据。本版本不新增遥测,也不读取完整对话、真实工具返回、账号、凭据或现有连接配置来推断分享状态。
|
|
21
|
+
- 非法版本或模板输入失败时保持选择器、内容和预览一致,并给出可纠正提示,不以半更新界面继续生成草稿。
|
|
22
|
+
|
|
23
|
+
### Verification scope and known limitations
|
|
24
|
+
|
|
25
|
+
- 完整 `npm run check`:502 项测试,494 通过、8 项按环境条件跳过、0 失败;99 个发布文件通过白名单以及凭据/本机路径扫描。跳过项不计作通过。
|
|
26
|
+
- 自动化、无凭据 UI harness 与缓存/localhost 合成测试只证明代码路径和安全边界,不替代真实 DSH Host、真实 OAuth、真实连接、付费业务调用或搜索排名验收。
|
|
27
|
+
- 2026-10-16 的企业简介证据只证明当时已有连接完成过一次获准的真实只读调用,不能外推为 v0.2.82 首次安装、首次授权、JSON 迁移、连接恢复或所有业务工具成功。
|
|
28
|
+
- 仓库截图和 GIF 是标注版本的无凭据 Mock 素材;分发版本/安装元数据同步也不等于搜索排名、曝光、安装转化或业务成功。
|
|
29
|
+
|
|
30
|
+
## [0.2.81] - 2026-10-25
|
|
31
|
+
|
|
32
|
+
### Documentation
|
|
33
|
+
|
|
34
|
+
- 明确默认 Desktop/Web 安装 profile 与各自重启方式,移除未经验证的“30 秒”安装承诺。
|
|
35
|
+
- 修正中英文 README 的截图版本说明,区分历史 Mock 演示与真实业务验收。
|
|
36
|
+
- 新增企业简介首次只读调用教程和社区分享素材包,提供复现步骤、文章提纲、素材来源及脱敏反馈模板。
|
|
37
|
+
- 新增教程随 npm 包分发,并纳入首次使用文档、打包白名单和本地链接校验。本版本不修改运行时功能,不新增遥测或真实业务调用。
|
|
38
|
+
|
|
5
39
|
## [0.2.80] - 2026-10-25
|
|
6
40
|
|
|
7
41
|
### Fixed
|
|
@@ -1063,7 +1097,8 @@
|
|
|
1063
1097
|
- 外部 URL 与导入 Header 执行安全校验。
|
|
1064
1098
|
- iframe 消息校验同源和消息来源。
|
|
1065
1099
|
|
|
1066
|
-
[Unreleased]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.
|
|
1100
|
+
[Unreleased]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.82...HEAD
|
|
1101
|
+
[0.2.82]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.81...v0.2.82
|
|
1067
1102
|
[0.2.48]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.47...v0.2.48
|
|
1068
1103
|
[0.2.47]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.46...v0.2.47
|
|
1069
1104
|
[0.2.46]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.45...v0.2.46
|
package/README.en.md
CHANGED
|
@@ -30,7 +30,9 @@ Tool browsing does not execute target tools. Parameter summaries may omit comple
|
|
|
30
30
|
[](https://github.com/duhu2000/dsh-mcp-connector-registry/blob/main/catalog-stats.json)
|
|
31
31
|
[](https://github.com/duhu2000/dsh-mcp-connector-registry/blob/main/catalog-stats.json)
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## Get started
|
|
34
|
+
|
|
35
|
+
Search for **`dsh-mcp-connector`** in your plugin marketplace, or run the command below. Default Desktop and Web installations both use the `web` profile; custom deployments should use the profile actually loaded by their host.
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
38
|
dsh plugin --profile web add dsh-mcp-connector
|
|
@@ -38,6 +40,10 @@ dsh plugin --profile web add dsh-mcp-connector
|
|
|
38
40
|
|
|
39
41
|
Fully restart DeepSeek Harness Desktop or `dsh web` after installation or upgrade, then open **MCP Connector** in the primary sidebar, or open it directly from **Settings → Plugins → Plugin Configuration → MCP Connector**.
|
|
40
42
|
|
|
43
|
+
For Desktop, fully quit and relaunch the application. For Web, stop the existing `dsh web` process and start it again; refreshing the browser does not reload backend plugins.
|
|
44
|
+
|
|
45
|
+
**Complete one task first:** [look up one company's profile](docs/tutorials/ONE-SUCCESS-CASE.md) (Chinese), checking authorization, tool source, and the actual result. For an independent review, use the [community sharing kit](docs/tutorials/SHARING-KIT.md) (Chinese): demo assets, an article outline, and a redacted evidence template.
|
|
46
|
+
|
|
41
47
|
For a first successful use, confirm the connection and scope in Installed, find the expected tool and source in Tools, then complete one provider-permitted read-only call through the normal DSH Host approval flow. Cached visibility alone does not prove that a service is currently callable.
|
|
42
48
|
|
|
43
49
|
First-success guide (Chinese): [install → connect → find a tool → make the first read-only call](docs/tutorials/README.md). Task details: [three acceptance-ready scenarios](docs/tutorials/FIRST-SUCCESS-SCENARIOS.md) · [migrate `mcpServers` JSON](docs/tutorials/JSON-MIGRATION.md) · [diagnose OAuth](docs/tutorials/OAUTH-DIAGNOSTICS.md) · [find and recover tools](docs/tutorials/TOOL-SEARCH-RECOVERY.md) · [trusted status copy](docs/tutorials/TRUSTED-STATUS-COPY.md).
|
|
@@ -100,7 +106,7 @@ As of 2026-10-24, the public Registry publishes 112 connector descriptors. After
|
|
|
100
106
|
| Connection diagnostics and last-success cache | |
|
|
101
107
|
|  | |
|
|
102
108
|
|
|
103
|
-
Assets `01
|
|
109
|
+
Assets `01`, `02`, `04`, and `07` are `v0.2.73` demos captured on 2026-10-16; `03` retains a historical `v0.2.37` snapshot; `05`, `06`, and the 43-second GIF retain `v0.2.46` demos. All are credential-free Mock UI harness assets, not evidence of real business acceptance on the current version. They contain no credentials, local paths, or query results. See [`docs/screenshots/README.md`](docs/screenshots/README.md) for provenance.
|
|
104
110
|
|
|
105
111
|
## Installation
|
|
106
112
|
|
|
@@ -225,7 +231,7 @@ npm run dev:ui
|
|
|
225
231
|
|
|
226
232
|
Every Registry merge regenerates `catalog-stats.json`; an hourly workflow in this repository synchronizes the Chinese and English product copy plus a local stats snapshot. The static npm README updates with package releases, while the live badges above read the Registry directly and therefore stay current without another npm release.
|
|
227
233
|
|
|
228
|
-
The current public version is [`dsh-mcp-connector@0.2.
|
|
234
|
+
The current public version is [`dsh-mcp-connector@0.2.82`](https://www.npmjs.com/package/dsh-mcp-connector), with [GitHub Release v0.2.82](https://github.com/duhu2000/dsh-mcp-connector/releases/tag/v0.2.82).
|
|
229
235
|
|
|
230
236
|
See [CHANGELOG.md](CHANGELOG.md) for version history and [docs/DESKTOP-E2E.md](docs/DESKTOP-E2E.md) for the Desktop release checklist.
|
|
231
237
|
|
package/README.md
CHANGED
|
@@ -30,7 +30,9 @@ OAuth 是否可用取决于服务商的客户端注册、账号权限与授权
|
|
|
30
30
|
[](https://github.com/duhu2000/dsh-mcp-connector-registry/blob/main/catalog-stats.json)
|
|
31
31
|
[](https://github.com/duhu2000/dsh-mcp-connector-registry/blob/main/catalog-stats.json)
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## 开始使用
|
|
34
|
+
|
|
35
|
+
在插件市场搜索完整包名 **`dsh-mcp-connector`**,或在本机终端运行下方命令。当前默认 Desktop 和 Web 都使用 `web` profile;自定义部署请以宿主实际加载的 profile 为准。
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
38
|
dsh plugin --profile web add dsh-mcp-connector
|
|
@@ -38,6 +40,10 @@ dsh plugin --profile web add dsh-mcp-connector
|
|
|
38
40
|
|
|
39
41
|
安装或升级后完全重启 DeepSeek Harness Desktop 或 `dsh web`,然后打开左侧「MCP连接器」;也可从“设置 → 插件 → 插件配置 → MCP连接器”直接打开。
|
|
40
42
|
|
|
43
|
+
Desktop 需要完全退出并重新启动应用;Web 需要停止原 `dsh web` 进程再启动,只刷新网页不会重新加载后端插件。
|
|
44
|
+
|
|
45
|
+
**先完成一件事:**[查询一家企业的简介](docs/tutorials/ONE-SUCCESS-CASE.md),按步骤核对授权、工具来源和真实返回。想写体验文章?使用[社区分享素材包](docs/tutorials/SHARING-KIT.md),包含演示素材、文章提纲和脱敏记录模板。
|
|
46
|
+
|
|
41
47
|
首次使用建议依次确认:连接已保存且范围正确 → “工具”页能找到预期工具与来源 → 在正常 DSH 会话中通过 Host 审批链完成一次服务商许可的只读调用。缓存可见不等于当前服务可调用。
|
|
42
48
|
|
|
43
49
|
[首次成功入口:安装 → 连接 → 找到工具 → 首次只读调用](docs/tutorials/README.md)。按任务深入:[三个可验收场景包](docs/tutorials/FIRST-SUCCESS-SCENARIOS.md) · [迁移现有 `mcpServers` JSON](docs/tutorials/JSON-MIGRATION.md) · [OAuth 授权诊断](docs/tutorials/OAUTH-DIAGNOSTICS.md) · [跨连接找工具与恢复](docs/tutorials/TOOL-SEARCH-RECOVERY.md) · [可信状态文案](docs/tutorials/TRUSTED-STATUS-COPY.md)。
|
|
@@ -102,7 +108,7 @@ dsh plugin --profile web add dsh-mcp-connector
|
|
|
102
108
|
| 连接诊断与最后成功缓存 | |
|
|
103
109
|
|  | |
|
|
104
110
|
|
|
105
|
-
`01
|
|
111
|
+
`01`、`02`、`04`、`07` 为 2026-10-16 的 `v0.2.73` 演示;`03` 保留 `v0.2.37` 历史快照;`05`、`06` 与 43 秒 GIF 保留 `v0.2.46` 演示。全部来自无凭据 Mock UI harness,不是当前版本的真实业务验收证据,不包含凭据、本机路径或查询结果。详见 [`docs/screenshots/README.md`](docs/screenshots/README.md)。
|
|
106
112
|
|
|
107
113
|
## 安装
|
|
108
114
|
|
|
@@ -220,7 +226,7 @@ npm run dev:ui
|
|
|
220
226
|
|
|
221
227
|
公共 Registry 每次合并后会生成 `catalog-stats.json`;本仓库的定时工作流每小时同步中英文介绍和统计快照。npm 页面中的静态正文随版本发布更新,上方动态统计徽标则直接读取 Registry,可在不发布新 npm 版本时保持实时数量一致。
|
|
222
228
|
|
|
223
|
-
当前公开版本为 [`dsh-mcp-connector@0.2.
|
|
229
|
+
当前公开版本为 [`dsh-mcp-connector@0.2.82`](https://www.npmjs.com/package/dsh-mcp-connector),对应 [GitHub Release v0.2.82](https://github.com/duhu2000/dsh-mcp-connector/releases/tag/v0.2.82)。
|
|
224
230
|
|
|
225
231
|
版本能力与变更记录见 [CHANGELOG.md](CHANGELOG.md)。
|
|
226
232
|
Desktop 发版回归见 [docs/DESKTOP-E2E.md](docs/DESKTOP-E2E.md)。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 数据 MCP 贡献与验收模板
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
自动发现分数、`initialize`、`tools/list` 或元数据工具成功,都不等于业务数据验收通过。新卡片只能在官方证据、条款、去重、限定范围真实只读调用与具名人工批准都完成后进入 Registry PR。
|
|
6
|
+
|
|
7
|
+
## 禁止推荐清单
|
|
8
|
+
|
|
9
|
+
以 Registry `docs/DEFERRED-CONNECTORS.md` 为当前人工决策依据,本轮继续保留全部 5 项,不因自动发现命中而重新推荐:
|
|
10
|
+
|
|
11
|
+
- `dsh-qixin-insight-mcp-oauth`
|
|
12
|
+
- `dsh-plugin-xparse`
|
|
13
|
+
- `shuididata/mcp-server`(机器规则中的稳定身份为 `shuidi-enterprise-data`)
|
|
14
|
+
- `mcp-cnbs`
|
|
15
|
+
- `chinese-law-mcp`
|
|
16
|
+
|
|
17
|
+
注:`discovery-sources/exclusions.json` 当前只稳定阻断后 3 类身份;启信慧眼与 TextIn xParse 仍需在 Registry 的独立变更中补齐机器规则和回归测试。本工作线不修改 Registry。
|
|
18
|
+
|
|
19
|
+
## 候选提交字段
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
候选名称:
|
|
23
|
+
提供方与国内/海外属性:
|
|
24
|
+
用途与数据范围:
|
|
25
|
+
官方页面 / 官方仓库 / Official Registry / 包或端点:
|
|
26
|
+
鉴权、付费与额度:
|
|
27
|
+
代码许可证、数据许可与服务条款:
|
|
28
|
+
维护状态(是否归档、最近更新、版本):
|
|
29
|
+
重复关系(稳定身份、端点、上游数据、已上架卡片):
|
|
30
|
+
协议验收(initialize / tools/list / 只读注解):
|
|
31
|
+
业务验收(指定工具、最小参数、返回字段、来源、单位、时间范围、缺失值):
|
|
32
|
+
状态:PASS / SKIP / FAIL / DEFERRED
|
|
33
|
+
失败或延期原因:
|
|
34
|
+
评分与下一步:
|
|
35
|
+
审核人与日期:
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
不记录凭据、完整业务响应、客户数据、个人数据或本机路径。运行证据只保留时间、版本、工具名、状态、字段摘要与脱敏哈希。
|
|
39
|
+
|
|
40
|
+
## 验收门槛
|
|
41
|
+
|
|
42
|
+
| 层级 | 通过条件 | 未通过时状态 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| 身份与条款 | 提供方、代码/数据许可、服务条款、鉴权与费用可核对 | `DEFERRED` 或 `SKIP` |
|
|
45
|
+
| 去重与排除 | 与现有卡片、稳定身份及禁止清单完成对照 | `SKIP` |
|
|
46
|
+
| 协议 | `initialize`、`tools/list` 成功,工具的读写/破坏性边界明确 | `DEFERRED` 或 `FAIL` |
|
|
47
|
+
| 业务数据 | 至少一次限定范围的真实只读调用,并核对字段、来源、时间、单位与缺失值 | `DEFERRED` |
|
|
48
|
+
| 人工决策 | 具名批准且范围与已验收能力一致 | 不得创建正式卡片 |
|
|
49
|
+
|
|
50
|
+
## 2026-10-25 候选证据清单
|
|
51
|
+
|
|
52
|
+
最新 [Issue #17](https://github.com/duhu2000/dsh-mcp-connector-registry/issues/17) 报告扫描 3,187 条、识别 606 个数据候选,自动 `selected` 仍为 0。[Issue #19](https://github.com/duhu2000/dsh-mcp-connector-registry/issues/19) 的自动排序不替代许可、条款与真实调用验收。本轮没有可直接上架的新候选:
|
|
53
|
+
|
|
54
|
+
| 候选 | 已有证据 | 未完成 | 状态 |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| HKEX 上市公司公告检索(社区) | 协议可达,4 个工具,`get_server_info` 元数据调用成功 | 未执行公告检索/读取,未核对来源、字段与时间范围 | `DEFERRED` |
|
|
57
|
+
| UNESCO UIS 全球教育统计(社区) | 协议可达,5 个工具,`uis_list_geo_units` 元数据调用成功 | 未查询统计值,未核对单位、版本、来源与缺失值 | `DEFERRED` |
|
|
58
|
+
| Shumi 加密市场研究 | 协议可达,33 个工具有 `readOnlyHint` | 无授权测试 Key,业务调用、额度与条款边界未验收 | `DEFERRED` |
|
|
59
|
+
|
|
60
|
+
结论:三者都不得因协议或元数据成功而标为业务 `PASS`,不创建新卡片、不批量上架。
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# 安全可分享连接模板
|
|
2
|
+
|
|
3
|
+
## 定位
|
|
4
|
+
|
|
5
|
+
可分享模板不是完整配置备份,也不是可自动执行的安装脚本。它只保留让另一位用户理解“连什么”所必需的最小字段;凭据必须在目标本机重新填写,OAuth 和 stdio 目录项必须回到市场重新授权或确认。
|
|
6
|
+
|
|
7
|
+
## 核心契约
|
|
8
|
+
|
|
9
|
+
`lib/shareable-connection-template.js` 导出:
|
|
10
|
+
|
|
11
|
+
- `createShareableTemplateFromConnection(record, options)`:仅用于用户明确选择的连接;复用已有脱敏导出后再按白名单重建。
|
|
12
|
+
- `createShareableTemplateFromCatalog({connectorId, serverKey})`:只按 ID 从包内已审计、已发布目录解析;不接受用户粘贴的 descriptor。
|
|
13
|
+
- `assertShareableConnectionTemplate(input)`:严格白名单校验,未知字段直接拒绝,不静默过滤。
|
|
14
|
+
- `previewShareableConnectionTemplate(input)`:返回预览、待补字段、后续动作和 `requiresExplicitConfirmation=true`;不连接、不写入。
|
|
15
|
+
- `stringifyShareableConnectionTemplate(input)`:只序列化已通过上述严格校验的文档。
|
|
16
|
+
|
|
17
|
+
导入仍使用现有 `normalizeJsonImport()` 与 Host 显式确认链。凭据占位符 `<REDACTED:REENTER>` 未替换时,现有导入器会整体拒绝。本模块不提供绕过确认的执行 API。
|
|
18
|
+
|
|
19
|
+
## 允许与拒绝
|
|
20
|
+
|
|
21
|
+
| 输入 | 结果 | 原因 |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 无额外 Header 的用户自定义 HTTP | 允许,但 URL、显示名和 serverName 都改为固定重填/公开值 | host、路径、子域名与自定义名称都可能携带租户或凭据 |
|
|
24
|
+
| Bearer/API Key HTTP | 允许,凭据改为占位符 | 目标用户必须在本机重填;API Key Header 只允许四个通用名称 |
|
|
25
|
+
| 用户自定义 URL(包括 userinfo、子域、路径、查询串、fragment、IP) | 不输出原值 | 整个 URL 改为重填占位符,不分享端点、租户或内网拓扑 |
|
|
26
|
+
| 自定义 Headers | 拒绝 | 不用 Header 名黑名单猜测值是否敏感 |
|
|
27
|
+
| 自定义 stdio | 拒绝 | 命令、参数、env、cwd 可能含凭据、本机路径或任意执行 |
|
|
28
|
+
| 包内已审计公开目录连接(HTTP / OAuth / stdio) | 仅输出 `connectorId/serverKey` 及 `connect-from-catalog` 引用 | 目标端从当前已审计目录重新解析;不复制 URL、Header、Grant、CLI、args 或 env |
|
|
29
|
+
| 用户粘贴或伪造的“公开 descriptor” | 拒绝 | `redacted=true` 不能证明 ID、名称或子域是公开信息 |
|
|
30
|
+
| 含未知字段的“模板” | 拒绝 | fail closed,不做过滤后继续 |
|
|
31
|
+
|
|
32
|
+
### 允许样例(节选)
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"format": "dsh-mcp-connector.share-template",
|
|
37
|
+
"version": 1,
|
|
38
|
+
"redacted": true,
|
|
39
|
+
"source": { "kind": "user-provided" },
|
|
40
|
+
"connections": [{
|
|
41
|
+
"name": "自定义 MCP 连接",
|
|
42
|
+
"serverName": "custom-mcp",
|
|
43
|
+
"transport": "streamable-http",
|
|
44
|
+
"url": "<REDACTED:REENTER>",
|
|
45
|
+
"headers": {},
|
|
46
|
+
"authMode": "api-key",
|
|
47
|
+
"apiKeyHeader": "X-Api-Key",
|
|
48
|
+
"apiKeyValue": "<REDACTED:REENTER>",
|
|
49
|
+
"redactedFields": ["url", "apiKeyValue"]
|
|
50
|
+
}]
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 拒绝样例
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"transport": "stdio",
|
|
59
|
+
"command": "<LOCAL_PATH>/private-mcp",
|
|
60
|
+
"args": ["--token", "secret"],
|
|
61
|
+
"env": { "VENDOR_TOKEN": "secret" }
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
拒绝结果不回显上述值,只说明应改用经审计的公开目录模板。
|
|
66
|
+
|
|
67
|
+
## P0 前端接入
|
|
68
|
+
|
|
69
|
+
`ui/connection-template-sharing.js` 是无数据权限的纯前端 ES module。它不将安全性交给 LLM,而是在浏览器内执行确定性的白名单转换,然后由用户显式选择复制、下载或带入新会话草稿。
|
|
70
|
+
|
|
71
|
+
宿主必须把当前已审计且 `published !== false` 的目录转换为仅含 `connectorId/serverKey/name/serverName` 的 `catalogReferences`;不能将用户 JSON 当成白名单。
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
import { mount } from '/mcp-connector/ui/connection-template-sharing.js';
|
|
75
|
+
|
|
76
|
+
const dispose = mount(container, {
|
|
77
|
+
catalogReferences: publishedCatalog.flatMap((connector) =>
|
|
78
|
+
connector.servers.map((server) => ({
|
|
79
|
+
connectorId: connector.id,
|
|
80
|
+
serverKey: server.serverKey,
|
|
81
|
+
name: connector.name,
|
|
82
|
+
serverName: server.serverName,
|
|
83
|
+
}))),
|
|
84
|
+
openDraft: async (text) => { /* start-session → Host setDraft,不发送 */ },
|
|
85
|
+
showMessage: (message, type) => { /* type 为 'success' 或 'error' */ },
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// 卸载面板时
|
|
89
|
+
dispose();
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
模块不读取 API、storage、真实连接、凭据或业务结果,也不提供粘贴 URL/Token/Header 值的输入框。预览本身不产生外部写入;复制、下载和 `openDraft(text)` 都要求独立点击。`openDraft` 只接收已生成的安全 JSON,文本只进入新会话草稿,不自动发送。样式在模块内按 `.mcp-safe-template-share` 作用域注入,无第三方依赖。
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 首次成功案例:查询一家企业的简介
|
|
2
|
+
|
|
3
|
+
目标:在正常 DSH 会话中完成一次有来源、可核对的只读调用。插件支持通用 MCP 服务;这里用企查查作为具体示例,不要求每位用户都使用该服务。
|
|
4
|
+
|
|
5
|
+
## 准备与连接
|
|
6
|
+
|
|
7
|
+
1. 按[安装入口](README.md)安装并重启对应宿主,记录页面显示的插件版本。
|
|
8
|
+
2. 在市场找到“企查查·企业工商”,连接到你希望使用的项目范围,按页面完成服务商授权。
|
|
9
|
+
3. 确认账号具备企业简介接口权限与额度。插件开源不等于服务商数据免费,费用和可用范围以服务商账号为准。
|
|
10
|
+
4. 在“工具”页定位 `qcc-company` 的 `get_company_profile`,查看当前参数和来源。没有该工具时先检查授权及工具发现状态,不要凭名称猜测或改用其他工具。
|
|
11
|
+
|
|
12
|
+
已授权账号可以复用有效授权;是否出现授权页面不能单独证明账号或权限正确。缓存中的工具列表也不证明当前能调用。
|
|
13
|
+
|
|
14
|
+
## 可复制的任务
|
|
15
|
+
|
|
16
|
+
在正常 DSH 会话中发送以下内容,通过 Host 的工具权限与审批链执行:
|
|
17
|
+
|
|
18
|
+
> 使用 qcc-company 的 get_company_profile,只查询“企查查科技股份有限公司”的企业简介(searchKey 为完整企业名称)。仅调用一次;不要查询联系人、司法、财务或其他主体,不要写入任何数据。成功后列出实际返回的企业名称、简介摘要、数据来源和调用时间;缺失字段标为未返回。失败则报告错误,不自动扩大查询或连续重试。
|
|
19
|
+
|
|
20
|
+
## 怎样判定完成
|
|
21
|
+
|
|
22
|
+
| 检查层级 | 通过条件 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 连接 | 正确范围内存在连接,授权状态可用 |
|
|
25
|
+
| 工具 | 发现预期工具,来源和参数可核对 |
|
|
26
|
+
| 业务 | 本次调用成功,返回企业名称与目标一致;有真实来源与时间 |
|
|
27
|
+
|
|
28
|
+
只有第三层通过才记为本次首次成功。授权失败看[OAuth 诊断](OAUTH-DIAGNOSTICS.md);工具缺失看[查找与恢复](TOOL-SEARCH-RECOVERY.md);额度或业务权限不足应按服务商提示处理。
|
|
29
|
+
|
|
30
|
+
## 已有证据与复验边界
|
|
31
|
+
|
|
32
|
+
2026-10-16 10:23:07(Asia/Shanghai)已有内部记录:使用已有 `qcc-company` 连接调用 `get_company_profile`,参数为上述企业完整名称,返回企业名称一致。此处只摘录验收结论,不公开原始业务数据或凭据。
|
|
33
|
+
|
|
34
|
+
该历史记录只证明当时已有连接的一次只读调用成功,**不证明首次 OAuth、全新安装、JSON 迁移或当前版本全流程已经验收**。本文是复现步骤,本次文档更新没有新增真实调用。
|
|
35
|
+
|
|
36
|
+
## 自愿分享你的结果
|
|
37
|
+
|
|
38
|
+
复制下面模板,删除不希望公开的内容;不需要上传完整日志或查询结果:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
日期与时区:
|
|
42
|
+
DSH / 插件版本:
|
|
43
|
+
宿主:Desktop / Web(自定义 profile 请注明)
|
|
44
|
+
任务:一次企业简介只读查询
|
|
45
|
+
安装 / 授权 / 工具发现 / 业务调用:分别填写成功、失败或未测试
|
|
46
|
+
耗时:实测填写,未计时则留空
|
|
47
|
+
实际解决的问题:
|
|
48
|
+
遇到的限制或错误码(脱敏):
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
请勿分享 Token、API Key、授权回调 URL、账号标识、本机路径或未经许可的业务数据。写文章可参考[社区分享素材包](SHARING-KIT.md)。
|
package/docs/tutorials/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 从安装到首次成功调用
|
|
2
2
|
|
|
3
|
+
从一个具体任务开始:[查询一家企业的简介](ONE-SUCCESS-CASE.md)。完成后可用[社区分享素材包](SHARING-KIT.md)记录真实体验与限制。
|
|
4
|
+
|
|
3
5
|
这是一条统一的最短路径。它把已有教程串成“安装 → 连接 → 找到工具 → 首次只读调用”,不替代各服务商文档。首次调用只选你已获准使用、费用与权限边界明确的只读任务;截图、GIF、连接成功或工具缓存都不等于真实业务调用通过。
|
|
4
6
|
|
|
5
7
|
需要可直接执行的验收任务时,选择[企业信息只读查询、本地智能文档解析、授权办公文档或日程查询](FIRST-SUCCESS-SCENARIOS.md)中的一个场景;记录状态时使用[可信状态文案规范](TRUSTED-STATUS-COPY.md),缺少账号、组织、费用或调用证据就明确写“未知/待验收”。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 分享体验作者素材索引
|
|
2
|
+
|
|
3
|
+
本索引帮助作者区分真实业务证据、真实界面观察、Mock 界面和仅有流程/测试的材料。素材可引用不等于流程已经验收;每次分享仍应由用户主动编辑,并按实际状态填写“成功 / 失败 / 未测试”。
|
|
4
|
+
|
|
5
|
+
## 案例与教程
|
|
6
|
+
|
|
7
|
+
| 素材 | 证据类别 | 已证明 | 未证明 | 公开使用边界 |
|
|
8
|
+
|---|---|---|---|---|
|
|
9
|
+
| [企业简介首次成功案例](ONE-SUCCESS-CASE.md) | 历史真实只读调用的脱敏摘要 | 2026-10-16 已有 `qcc-company` 连接完成一次 `get_company_profile` 只读调用,返回主体名称一致 | v0.2.81 当前流程、首次安装、首次 OAuth、JSON 迁移、连接恢复 | 可引用文档中的脱敏结论;不得复制原始业务正文、账号或凭据 |
|
|
10
|
+
| [JSON 迁移教程](JSON-MIGRATION.md) | 流程文档 + localhost/合成测试 | 导入标准化、连接记录、Host 透传等代码路径有自动化覆盖 | 获授权真实 Server 的导入、发现和业务调用端到端成功 | 必须写“自动测试通过;真实 E2E 未测试/待验收” |
|
|
11
|
+
| [工具查找与恢复教程](TOOL-SEARCH-RECOVERY.md) | 流程文档 + localhost/合成测试 | 失败保留最后成功缓存、重新发现恢复、筛选/分页/限流等代码路径有自动化覆盖 | 真实连接从故障到恢复,以及恢复后的真实业务调用 | 缓存、健康检查和重新发现都不能写成业务调用成功 |
|
|
12
|
+
| [社区分享素材包](SHARING-KIT.md) | 作者指引 | 提供可复现提纲、披露和人工记录方法 | 尚未发生的发帖、转化或业务成功 | 不要求好评、Star 或转发;当前没有自动公开发布 |
|
|
13
|
+
|
|
14
|
+
## 截图与视频
|
|
15
|
+
|
|
16
|
+
仓库公开截图和 GIF 的尺寸、SHA-256、采集日期与来源版本见[截图来源说明](../screenshots/README.md)和 [`assets.json`](../screenshots/assets.json)。它们全部是无凭据 Mock 界面素材:
|
|
17
|
+
|
|
18
|
+
| 资产 | 来源版本 | 可以说明 | 不能说明 | 建议图注 |
|
|
19
|
+
|---|---|---|---|---|
|
|
20
|
+
| `01`、`02`、`04`、`07` | v0.2.73 | 市场、OAuth 详情、JSON 导入、连接诊断的界面结构 | 真实授权、真实连接或业务调用成功 | “MCP连接器界面演示,v0.2.73 无凭据 Mock;实际界面以安装版本为准。” |
|
|
21
|
+
| `03` | v0.2.37 | 历史工具发现界面 | 当前版本行为或业务可用性 | “历史界面演示,v0.2.37 无凭据 Mock。” |
|
|
22
|
+
| `05`、`06`、`demo.gif` | v0.2.46 | 历史统一搜索、参数和演示流程 | 当前版本行为、真实恢复或业务成功 | “历史界面演示,v0.2.46 无凭据 Mock。” |
|
|
23
|
+
|
|
24
|
+
`workspace/p0-evidence-2026-10-16/` 中的图片是本机真实 DSH Market 搜索页面,但仅用于搜索排名复核,未上传公共仓库且仍需隐私审查;它们不能证明连接、恢复或业务调用成功。
|
|
25
|
+
|
|
26
|
+
## 不作为公开素材的证据
|
|
27
|
+
|
|
28
|
+
- `workspace/MCP-CONNECTOR-P1-QCC-READONLY-EVIDENCE-2026-10-16.md` 保存内部真实调用证据,可能包含不应扩散的原始业务内容。公开分享只引用 `ONE-SUCCESS-CASE.md` 中的脱敏结论。
|
|
29
|
+
- Token、API Key、OAuth 回调参数、账号/组织标识、本机绝对路径、完整对话和完整工具返回均不得进入体验草稿。
|
|
30
|
+
- npm 下载量、连接数量、工具缓存、草稿预览或“复制到会话草稿”成功均不是业务调用证据。
|
|
31
|
+
|
|
32
|
+
应用内接入契约与样式类见[分享体验模块接入说明](SHARING-UI-INTEGRATION.md)。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 社区分享素材包
|
|
2
|
+
|
|
3
|
+
帮助使用者写出可复现、有个人判断的体验分享。无需统一口径、无需好评,也不要求 Star 或转发才能使用。此文档不代表已公开发帖。
|
|
4
|
+
|
|
5
|
+
## 先选择你真正完成的任务
|
|
6
|
+
|
|
7
|
+
- [一次企业简介只读查询](ONE-SUCCESS-CASE.md):包含历史证据边界和复验模板。
|
|
8
|
+
- [迁移已有 mcpServers 配置](JSON-MIGRATION.md):只展示脱敏模板,不分享真实配置。
|
|
9
|
+
- [跨连接查找工具与恢复](TOOL-SEARCH-RECOVERY.md):区分缓存、工具发现与业务调用。
|
|
10
|
+
|
|
11
|
+
没有完成的流程请标为未测试。优先分享“遇到什么问题、怎样解决、还有什么限制”,不要把目录数量写成全部服务都实测可用。
|
|
12
|
+
|
|
13
|
+
## 可引用的简短介绍
|
|
14
|
+
|
|
15
|
+
> dsh-mcp-connector 是 DeepSeek Harness 的开源 MCP 接入与管理插件。通过连接器目录或已有配置接入 MCP Server,管理授权、跨连接查找工具并排查连接问题。由企查查/QCC 团队维护,支持通用 MCP 服务;具体数据权限、额度与费用由各服务商决定。
|
|
16
|
+
|
|
17
|
+
安装命令、Desktop/Web 重启说明见[统一入口](README.md)。项目地址:[GitHub](https://github.com/duhu2000/dsh-mcp-connector),安装包:[npm](https://www.npmjs.com/package/dsh-mcp-connector)。
|
|
18
|
+
|
|
19
|
+
## 图片与视频素材
|
|
20
|
+
|
|
21
|
+
使用[截图目录及来源说明](../screenshots/README.md),不要重制或抹掉 Mock 标记。`01`、`02`、`04`、`07` 为 `v0.2.73`,`03` 为 `v0.2.37`,`05`、`06` 与 GIF 为 `v0.2.46`;它们用于解释界面,不是最新版本的真实调用截图。
|
|
22
|
+
|
|
23
|
+
可用图注:“MCP连接器界面演示,Mock 数据;素材版本见来源说明,实际界面以安装版本为准。”
|
|
24
|
+
|
|
25
|
+
仓库代码遵循 [MIT 许可证](../../LICENSE);第三方商标、图标及数据的权利不因仓库开源而转让。文章应链接来源,真实账号截图需脱敏并确认数据可公开。
|
|
26
|
+
|
|
27
|
+
## 文章提纲与标题方向
|
|
28
|
+
|
|
29
|
+
可选标题:“我如何在 DSH 中找到并调用一个 MCP 工具”;只有实测后才使用“成功”“节省了多久”等结论。
|
|
30
|
+
|
|
31
|
+
1. 原先卡在哪里:配置分散、找不到工具或连接失败。
|
|
32
|
+
2. 你的环境与步骤:版本、宿主、安装、授权、选定任务。
|
|
33
|
+
3. 你的证据:实际调用结果摘要、来源、时间;不要只截图“已连接”。
|
|
34
|
+
4. 你的判断:有效之处、失败之处、费用与权限门槛。
|
|
35
|
+
5. 给读者一个下一步:安装入口与同一任务的复现链接。
|
|
36
|
+
|
|
37
|
+
如受邀测试、获得试用额度或与项目有关系,应主动说明;欢迎独立评价,不要求正面结论。不要宣传保证排名第一、所有服务免费、一键免权限或未经测量的效率提升。
|
|
38
|
+
|
|
39
|
+
## 分享后怎样改进
|
|
40
|
+
|
|
41
|
+
自愿提交脱敏案例或问题到 [Issues](https://github.com/duhu2000/dsh-mcp-connector/issues)。希望参与开发可看[贡献指南](../../CONTRIBUTING.md)。Star 表达认可,Fork 用于实际修改与贡献,都不是使用条件。
|
|
42
|
+
|
|
43
|
+
首轮邀请 5–10 位自愿体验者,手工记录安装、授权、工具发现、首次调用各阶段的成功/失败/未测试、实际耗时和阻塞原因。未计时不补估值,不新增遥测;样本仅用于改进体验,不外推整体转化率。npm 下载量也不等于独立用户或成功调用人数。
|
|
44
|
+
|
|
45
|
+
作者在引用案例、教程、截图或 GIF 前,应先查看[分享体验作者素材索引](SHARING-AUTHOR-ASSETS.md),区分历史真实只读摘要、流程/合成测试和 Mock 界面素材。应用内草稿模块的 P0 接入契约见[分享体验模块接入说明](SHARING-UI-INTEGRATION.md)。
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# 分享体验模块接入说明
|
|
2
|
+
|
|
3
|
+
独立模块位于 [`ui/sharing-experience.js`](../../ui/sharing-experience.js)。本文件只描述 P0 集成契约;当前模块不会自行出现在 `ui/index.html`,也不会自动读取或发布任何内容。
|
|
4
|
+
|
|
5
|
+
## 挂载接口
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
import { mount } from './sharing-experience.js';
|
|
9
|
+
|
|
10
|
+
const dispose = mount(container, {
|
|
11
|
+
openDraft: async (text) => {
|
|
12
|
+
const session = await startSession();
|
|
13
|
+
await host.setDraft(session, text);
|
|
14
|
+
},
|
|
15
|
+
showMessage: (text, type) => showMessage(text, type),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// 面板卸载时调用
|
|
19
|
+
dispose();
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
接口约束:
|
|
23
|
+
|
|
24
|
+
- `mount(container, { openDraft, showMessage })` 返回一个 `dispose()` 函数。
|
|
25
|
+
- `openDraft(text)` **只在用户点击“复制到会话草稿”后调用**。P0 负责复用现有 `start-session → Host setDraft` 流程;只写入输入草稿,不发送消息。
|
|
26
|
+
- `showMessage(text, type)` 是可选宿主提示;调用失败不会改变或发送草稿。
|
|
27
|
+
- 未提供 `openDraft` 时按钮禁用,预览与编辑仍可使用。
|
|
28
|
+
- 模块不接收会话、连接、工具缓存、工具返回、凭据或账号对象,不访问网络、storage、剪贴板或遥测接口。
|
|
29
|
+
|
|
30
|
+
## 纯函数接口
|
|
31
|
+
|
|
32
|
+
- `createSharingExperience(input)`:只接受 `task`、`versions`、`steps`、`limitations`(及固定 `schemaVersion`)。未知字段拒绝。
|
|
33
|
+
- `createSharingExperienceFromTemplate(templateId, versions)`:加载 `companyProfile`、`jsonMigration`、`toolRecovery` 三个公开教程模板;所有步骤默认“未测试”。
|
|
34
|
+
- `editSharingExperience(current, patch)`:显式编辑白名单字段,不修改原对象。
|
|
35
|
+
- `renderSharingExperiencePreview(draft)`:生成纯 Markdown 预览,转义用户文本。
|
|
36
|
+
- `createSharingCopyPayload(draft)`:返回纯文本载荷,固定 `copied: false`、`businessOutcome: unchanged`,不执行复制。
|
|
37
|
+
- `SHARING_AUTHOR_ASSETS`:提供案例、教程和 Mock 截图的来源/边界索引。
|
|
38
|
+
|
|
39
|
+
疑似 Bearer、API Key、Token/Secret、OAuth `code/state/token` 回调、`file:` URL,以及 macOS/Linux/Windows 用户绝对路径会被拒绝并要求先脱敏。版本字段为空时显示“未填写”;填写时必须是语义版本。
|
|
40
|
+
|
|
41
|
+
## 样式与依赖
|
|
42
|
+
|
|
43
|
+
模块无第三方依赖,不注入样式。P0 可在共享 UI 中按现有设计系统样式化以下类:
|
|
44
|
+
|
|
45
|
+
- `.sharing-experience`
|
|
46
|
+
- `.sharing-experience-form`
|
|
47
|
+
- `.sharing-experience-field`
|
|
48
|
+
- `.sharing-experience-steps`
|
|
49
|
+
- `.sharing-experience-step`
|
|
50
|
+
- `.sharing-experience-actions`
|
|
51
|
+
- `.sharing-experience-message`
|
|
52
|
+
- `.sharing-experience-preview`
|
|
53
|
+
|
|
54
|
+
预览节点使用 `<pre>.textContent`,不得改为把 Markdown 作为 HTML 注入。
|
|
55
|
+
|
|
56
|
+
## 测试
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node --test test/sharing-experience.test.mjs
|
|
60
|
+
npm run check
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
专门测试覆盖模板默认状态、显式编辑、未知信号拒绝、凭据/回调/路径拒绝、Markdown 转义、素材证据分类、用户点击前不调用 `openDraft`、复制后业务状态不变、销毁监听器,以及源码无网络/storage/剪贴板/连接访问。
|
package/lib/catalog.js
CHANGED
|
@@ -42,6 +42,19 @@ export function loadBundledCatalog() {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/** Sharing trust root: fixed package catalog only, never merged/config/remote sources. */
|
|
46
|
+
export function bundledTemplateReferences() {
|
|
47
|
+
return loadBundledCatalog().filter((item) => item.published !== false).flatMap((item) => {
|
|
48
|
+
const descriptor = auditDescriptor(item);
|
|
49
|
+
return descriptor.servers.map((server) => ({
|
|
50
|
+
connectorId: descriptor.id,
|
|
51
|
+
serverKey: server.serverKey,
|
|
52
|
+
name: descriptor.name,
|
|
53
|
+
serverName: server.serverName,
|
|
54
|
+
}));
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
45
58
|
/** 安全审计:目录禁止携带密钥、URL 协议白名单、header 名白名单。 */
|
|
46
59
|
export function auditDescriptor(descriptor) {
|
|
47
60
|
const oauthHttpResources = new Set(
|
package/lib/index.js
CHANGED
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
} from './constants.js';
|
|
27
27
|
import { defineConnectorDomain, ConnectionStore, GrantStore, CatalogStore, SnapshotStore, GovernanceStore, ConnectionScopeStore, ToolCatalogStore } from './stores.js';
|
|
28
28
|
import { normalizeConnectorDescriptor, normalizeConnectionRecord } from './schema.js';
|
|
29
|
-
import { loadBundledCatalog, fetchRemoteCatalogWithFallback, visibleDynamicDescriptors, mergeCatalog, listCatalog, auditDescriptor, auditRawDescriptor, readLimitedJson } from './catalog.js';
|
|
29
|
+
import { bundledTemplateReferences, loadBundledCatalog, fetchRemoteCatalogWithFallback, visibleDynamicDescriptors, mergeCatalog, listCatalog, auditDescriptor, auditRawDescriptor, readLimitedJson } from './catalog.js';
|
|
30
30
|
import { describeOAuthAuthorizationError, oauthAuthorize } from './connectors/oauth-connector.js';
|
|
31
31
|
import { buildManualRecord } from './connectors/manual-connector.js';
|
|
32
32
|
import { normalizeJsonImport } from './connectors/json-connector.js';
|
|
@@ -1897,6 +1897,14 @@ export async function apply(ctx, config) {
|
|
|
1897
1897
|
}
|
|
1898
1898
|
},
|
|
1899
1899
|
|
|
1900
|
+
async templateCatalogReferences() {
|
|
1901
|
+
try {
|
|
1902
|
+
return { ok: true, detail: { items: bundledTemplateReferences() } };
|
|
1903
|
+
} catch {
|
|
1904
|
+
return { ok: false, message: '随包公开目录不可用,未读取任何本机连接。' };
|
|
1905
|
+
}
|
|
1906
|
+
},
|
|
1907
|
+
|
|
1900
1908
|
async catalog({ category, keyword, workspaceId } = {}) {
|
|
1901
1909
|
const items = listCatalog(state.merged, { category, keyword, publishedOnly: true }).map((d) => {
|
|
1902
1910
|
const health = connectorHealth(d.id);
|