@szc-ft/mcp-szcd-client 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/agents/build.js +152 -130
  2. package/agents/opencode-extension/agents/szcd-component-expert.md +96 -12
  3. package/agents/platforms.json +17 -7
  4. package/agents/qwen-extension/agents/szcd-component-expert.md +95 -12
  5. package/agents/src/szcd-component-expert.md +169 -6
  6. package/agents/src/tools.json +10 -5
  7. package/agents/szcd-component-expert.md +97 -14
  8. package/agents/szcd-component-expert.qoder.md +185 -15
  9. package/agents/szcd-component-expert.trae.md +175 -13
  10. package/opencode-extension/agents/szcd-component-expert.md +96 -12
  11. package/opencode-extension/commands/szcd-mcp-api-config.md +48 -0
  12. package/opencode-extension/commands/szcd-mcp-auth.md +39 -0
  13. package/opencode-extension/commands/szcd-mcp-browser-test.md +57 -0
  14. package/opencode-extension/commands/szcd-mcp-coding-config.md +40 -0
  15. package/opencode-extension/commands/szcd-mcp-feedback.md +42 -0
  16. package/opencode-extension/commands/szcd-mcp-url.md +37 -0
  17. package/opencode-extension/opencode.json +15 -0
  18. package/opencode-extension/skills/local-api-tool/SKILL.md +246 -0
  19. package/opencode-extension/skills/local-browser-test/SKILL.md +249 -0
  20. package/opencode-extension/skills/szcd-component-helper/SKILL.md +523 -0
  21. package/opencode-extension/skills/szcd-design-to-code/SKILL.md +168 -0
  22. package/package.json +3 -2
  23. package/qwen-extension/QWEN.md +29 -8
  24. package/qwen-extension/agents/szcd-component-expert.md +95 -12
  25. package/qwen-extension/qwen-extension.json +6 -1
  26. package/qwen-extension/skills/szcd-component-helper/SKILL.md +81 -1
  27. package/qwen-extension/skills/szcd-design-to-code/SKILL.md +168 -0
  28. package/scripts/lib/claude-code.js +45 -1
  29. package/scripts/lib/common.js +17 -0
  30. package/scripts/lib/opencode.js +108 -12
  31. package/scripts/lib/qoder.js +42 -1
  32. package/scripts/lib/trae-cli.js +39 -1
  33. package/scripts/lib/trae-ide.js +40 -1
  34. package/scripts/postinstall.js +28 -0
  35. package/standard-skill/szcd-component-helper/SKILL.md +81 -1
  36. package/standard-skill/szcd-design-to-code/SKILL.md +168 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: 管理MCP服务器鉴权密钥(get/set/clear API Key)
3
+ argument-hint: <get|set|clear> [--apiKey=xxx]
4
+ ---
5
+
6
+ 请帮我管理 szcd MCP 的鉴权配置。
7
+
8
+ **交互流程**:
9
+
10
+ 1. **向用户询问要执行的操作**,提供以下选项:
11
+ - "查看鉴权配置" -> 执行 get
12
+ - "设置 API Key" -> 执行 set(需进一步追问参数)
13
+ - "清除 API Key" -> 执行 clear
14
+
15
+ 2. **根据用户选择执行**:
16
+
17
+ - **查看鉴权配置**:直接执行 `npx szcd-mcp-auth get`
18
+
19
+ - **设置 API Key**:向用户询问 API Key(由 MCP 服务端管理员提供),收集后执行:
20
+ ```bash
21
+ npx szcd-mcp-auth set --apiKey="<apiKey>"
22
+ ```
23
+
24
+ - **清除 API Key**:确认后执行 `npx szcd-mcp-auth clear`
25
+
26
+ 3. **命令回退**:如果 npx 不可用,依次尝试:
27
+ - `node $(npm root -g)/@szc-ft/mcp-szcd-client/scripts/update-auth.js <args>`
28
+ - `node /scity/zengzhijie/mcp/szcd-mcp-client/scripts/update-auth.js <args>`
29
+
30
+ **配置字段说明**:
31
+ - `MCP_API_KEY` — MCP 服务器鉴权密钥(敏感)
32
+ - 设置后,客户端连接时自动通过 `X-API-Key` 请求头传递
33
+ - 服务端需配置相同的 `MCP_API_KEY` 环境变量才会校验
34
+ - 未设置时,若服务端也未开启鉴权,客户端可正常连接
35
+
36
+ 配置保存在 `~/.szcd-mcp-config.json` 中,设置后重启 IDE/CLI 生效。
37
+
38
+ 当前配置:
39
+ !`cat ~/.szcd-mcp-config.json 2>/dev/null | grep -E "MCP_API_KEY|MCP_SERVER" || echo "配置文件不存在"`
@@ -0,0 +1,57 @@
1
+ ---
2
+ description: 在本地浏览器中执行自动化测试(设计稿还原度对比/功能验证/页面检查)
3
+ argument-hint: <目标页面URL> [可选:设计稿图片路径]
4
+ ---
5
+
6
+ 请帮我在本地浏览器中执行测试。
7
+
8
+ **执行流程**:
9
+
10
+ 1. **收集测试信息**:
11
+
12
+ - **目标页面 URL**(必需):如果用户在命令参数中已提供,直接使用;否则向用户询问要测试的页面地址
13
+ - **设计稿图片**(可选):如果用户在命令参数中提供了图片路径,用于还原度对比;否则跳过视觉对比
14
+ - **测试范围**:向用户提供选项:
15
+ - "设计稿还原度对比"(需提供设计稿)
16
+ - "功能验证"(点击/输入/导航等交互测试)
17
+ - "页面检查"(JS 错误检测 + 页面截图)
18
+ - "全部测试"(以上全部)
19
+
20
+ 2. **读取 `local-browser-test` skill 文档**,了解 Plan Schema 和执行命令格式:
21
+ - 按 skill 中定义的步骤类型构造测试计划 JSON
22
+ - selector 从用户项目代码中读取(`id`/`className`/`data-testid`),不要猜测
23
+ - 根据用户选择的测试范围选择对应场景(A/B/C/D)
24
+
25
+ 3. **构造测试计划 JSON** 并写入临时文件(避免命令行参数过长):
26
+ ```bash
27
+ cat > /tmp/browser-test-plan.json << 'EOF'
28
+ {测试计划 JSON}
29
+ EOF
30
+ ```
31
+
32
+ 4. **执行测试**:
33
+ ```bash
34
+ node {client_install_path}/local-browser-executor.js \
35
+ --plan-file /tmp/browser-test-plan.json \
36
+ --output /tmp/browser-test-result.json
37
+ ```
38
+
39
+ 命令回退(如果上面的路径不可用):
40
+ - `npx szcd-mcp-browser-test --plan-file /tmp/browser-test-plan.json --output /tmp/browser-test-result.json`
41
+ - `node $(npm root -g)/@szc-ft/mcp-szcd-client/local-browser-executor.js --plan-file /tmp/browser-test-plan.json --output /tmp/browser-test-result.json`
42
+ - `node /scity/zengzhijie/mcp/szcd-mcp-client/local-browser-executor.js --plan-file /tmp/browser-test-plan.json --output /tmp/browser-test-result.json`
43
+
44
+ 5. **读取并解读结果**:
45
+ 读取 `/tmp/browser-test-result.json`,按以下标准解读:
46
+ - **还原度**:fidelity >= 95% 优秀 / 90-95% 良好 / < 90% 不足
47
+ - **功能测试**:passed = total 全部通过,否则列出失败步骤及原因
48
+ - **diff 图**:如有 diffImagePath,展示 diff 图路径供用户查看
49
+
50
+ 6. **闭环建议**:
51
+ - 如有问题,给出具体的修复建议
52
+ - 询问用户是否需要重新测试
53
+
54
+ **注意事项**:
55
+ - 首次使用需确保 Chrome 以调试模式启动:`google-chrome --remote-debugging-port=9222`
56
+ - 如执行器报错依赖缺失,引导用户安装:`npm install puppeteer-core pixelmatch pngjs sharp`
57
+ - connect 模式下天然继承用户浏览器的登录态和微前端环境
@@ -0,0 +1,40 @@
1
+ ---
2
+ description: 管理CODING Issue工具的默认配置(baseUrl/account)
3
+ argument-hint: <get|set|clear> [--baseUrl=xxx] [--account=yyy]
4
+ ---
5
+
6
+ 请帮我管理 szcd MCP 的 CODING 默认配置。
7
+
8
+ **交互流程**:
9
+
10
+ 1. **向用户询问要执行的操作**,提供以下选项:
11
+ - "查看配置" → 执行 get
12
+ - "设置配置" → 执行 set(需进一步追问参数)
13
+ - "清除配置" → 执行 clear
14
+
15
+ 2. **根据用户选择执行**:
16
+
17
+ - **查看配置**:直接执行 `npx szcd-mcp-coding-config get`
18
+
19
+ - **设置配置**:逐项向用户询问以下参数,选项中提供当前值作为默认,用户也可自由输入新值:
20
+ - CODING_BASE_URL — CODING 基础地址,如 `http://e-kjr1wok.coding.smartcitysz.work`
21
+ - CODING_ACCOUNT — 默认账号(邮箱)
22
+ 收集完参数后执行:
23
+ ```bash
24
+ npx szcd-mcp-coding-config set --baseUrl="<baseUrl>" --account="<account>"
25
+ ```
26
+
27
+ - **清除配置**:确认后执行 `npx szcd-mcp-coding-config clear`
28
+
29
+ 3. **命令回退**:如果 npx 不可用,依次尝试:
30
+ - `node $(npm root -g)/@szc-ft/mcp-szcd-client/scripts/update-coding-config.js <args>`
31
+ - `node /scity/zengzhijie/mcp/szcd-mcp-client/scripts/update-coding-config.js <args>`
32
+
33
+ **配置字段说明**:
34
+ - `CODING_BASE_URL` — CODING 基础地址
35
+ - `CODING_ACCOUNT` — 默认账号(邮箱)
36
+
37
+ 配置保存在 `~/.szcd-mcp-config.json` 中,设置后 `coding_fetch_issue` 工具可省略 `baseUrl` 参数。
38
+
39
+ 当前配置:
40
+ !`cat ~/.szcd-mcp-config.json 2>/dev/null | grep -E "CODING|MCP_SERVER" || echo "配置文件不存在或无 CODING 配置"`
@@ -0,0 +1,42 @@
1
+ ---
2
+ description: 提交本次会话的代码生成反馈,用于优化 szcd MCP 服务质量
3
+ argument-hint: [可选:评分1-5] [可选:采纳/不采纳]
4
+ ---
5
+
6
+ 请帮我提交本次会话的反馈。
7
+
8
+ **执行流程**:
9
+
10
+ 1. **自动收集上下文**:从当前会话历史中提取以下信息,**不要重复询问用户已经说过的内容**:
11
+ - `userQuery`:用户最初的原始需求描述(从会话开头的消息中提取)
12
+ - `toolsUsed`:本次会话中实际调用过的 MCP 工具名称列表(从工具调用记录中提取)
13
+ - `generatedCodeSummary`:最近一次生成的代码摘要或关键组件列表(从生成的代码中提取前几行或核心结构,不超过 500 字)
14
+ - `toolType`:当前使用的 IDE 类型(根据运行环境判断:Qoder → "qoder",Trae → "trae",Claude → "claude",Qwen → "qwen",Cursor → "cursor",VS Code → "vscode",其他 → "generic")
15
+
16
+ 2. **向用户确认或补充**(仅询问缺失的信息):
17
+ - **准确性评分**:请用户评分 1-5 分(5 分最准确)。如果用户在命令参数中已提供,直接使用
18
+ - **是否采纳**:用户是否计划采纳生成的代码。如果用户在命令参数中已提供("采纳"/"不采纳"),直接使用
19
+ - **如不采纳**:询问具体原因(组件不匹配、API 错误、缺少功能、不符合设计稿等)
20
+
21
+ 3. **调用 MCP 工具提交反馈**:
22
+ 调用 `submit_feedback` 工具,参数如下:
23
+ ```
24
+ sessionId: "<当前会话 ID 或时间戳>"
25
+ toolsUsed: [自动提取的工具列表]
26
+ userQuery: "<自动提取的用户需求>"
27
+ generatedCodeSummary: "<自动提取的代码摘要>"
28
+ accuracyRating: <用户评分 1-5>
29
+ adopted: <true/false>
30
+ rejectionReason: "<不采纳原因,采纳则为空>"
31
+ contextSnapshot: {
32
+ 可选:从会话中提取的组件方案信息
33
+ }
34
+ toolType: "<自动判断的 IDE 类型>"
35
+ ```
36
+
37
+ 4. **输出结果**:告知用户反馈是否提交成功,显示 feedbackId
38
+
39
+ **注意事项**:
40
+ - 如果当前会话中没有代码生成记录,提示用户"当前会话中没有代码生成记录,反馈提交需要有生成代码的上下文"
41
+ - 尽可能从会话历史自动提取信息,减少用户手动输入
42
+ - 反馈提交失败不影响已生成的代码
@@ -0,0 +1,37 @@
1
+ ---
2
+ description: 更新szcd MCP服务器地址并同步Trae/Claude配置
3
+ argument-hint: <new-mcp-server-url>
4
+ ---
5
+
6
+ 请帮我更新 szcd MCP 服务器地址。
7
+
8
+ **交互流程**:
9
+
10
+ 1. **向用户询问要执行的操作**,提供以下选项:
11
+ - "更新服务器地址" → 输入新 URL 并同步所有 IDE 配置
12
+ - "同步现有配置" → 用 `~/.szcd-mcp-config.json` 中已有的 MCP_SERVER_URL 重新同步 IDE 配置
13
+ - "查看当前配置" → 显示当前 MCP 服务器地址
14
+
15
+ 2. **根据用户选择执行**:
16
+
17
+ - **更新服务器地址**:向用户询问新的 MCP 服务器 URL,可提供常用地址选项,用户也可自由输入。收集到 URL 后执行:
18
+ ```bash
19
+ npx szcd-mcp-update-url "<newUrl>"
20
+ ```
21
+
22
+ - **同步现有配置**:直接执行(不带参数):
23
+ ```bash
24
+ npx szcd-mcp-update-url
25
+ ```
26
+
27
+ - **查看当前配置**:显示 `~/.szcd-mcp-config.json` 中的 MCP_SERVER_URL
28
+
29
+ 3. **命令回退**:如果 npx 不可用,依次尝试:
30
+ - `node $(npm root -g)/@szc-ft/mcp-szcd-client/scripts/update-mcp-url.js "<newUrl>"`
31
+ - `node /scity/zengzhijie/mcp/szcd-mcp-client/scripts/update-mcp-url.js "<newUrl>"`
32
+ - 手动步骤:编辑 `~/.szcd-mcp-config.json`,再逐个 IDE 同步:
33
+ - trae-cli: `trae-cli mcp remove szcd-component-helper && trae-cli mcp add-json szcd-component-helper '{"type":"http","url":"<URL>/mcp"}'`
34
+ - claude: `claude mcp remove --scope user szcd-component-helper && claude mcp add --transport http --scope user szcd-component-helper <URL>/mcp`
35
+
36
+ 当前配置:
37
+ !`cat ~/.szcd-mcp-config.json 2>/dev/null || echo "配置文件不存在"`
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://opencode.ai/config.json",
3
+ "mcp": {
4
+ "szcd-component-helper": {
5
+ "type": "remote",
6
+ "url": "http://localhost:3456/mcp"
7
+ },
8
+ "sketch-mcp-server": {
9
+ "type": "local",
10
+ "command": [
11
+ "sketch-mcp-server"
12
+ ]
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,246 @@
1
+ ---
2
+ name: local-api-tool
3
+ description: 本地网络 API 工具,专门处理 10.x.x.x 网段的 Swagger/YApi 文档拉取和联调测试。当服务端 api_tool 因 LOCAL_NETWORK_UNREACHABLE 无法访问时,此技能在用户本地环境执行 curl,再将结果交给服务端解析。适用于内网开发环境、VPN 场景。**仅限 10.x.x.x 网段**,172.16-31.x.x 和 192.168.x.x 服务端可直连,不要使用本技能。
4
+ compatibility:
5
+ tools:
6
+ - run_command
7
+ - web_search
8
+ - web_fetch
9
+ ---
10
+
11
+ # 本地网络 API 工具(local-api-tool)
12
+
13
+ ## 概述
14
+
15
+ 当 MCP 服务端 `api_tool` 遇到 `10.x.x.x` 网段地址时,因服务器无法直连用户内网,会返回 `reason: "LOCAL_NETWORK_UNREACHABLE"` 及 `action` 字段指引。此技能指导 AI 自动在用户本地终端通过 `run_command` 执行 curl 命令获取数据,再调用服务端的 `parse_swagger_json` 进行解析,全程无需用户手动操作。
16
+
17
+ ## 适用场景
18
+
19
+ - Swagger URL 主机为 `10.x.x.x` 网段(如 `http://10.2.7.60:30194/ikmp-knowledge/swagger-ui/index.html`)
20
+ - API 联调测试目标为 `10.x.x.x` 网段
21
+ - 用户在 VPN 或内网开发环境中,本地可访问但远程服务器不可达
22
+
23
+ ## ⚠️ 网段区分(重要)
24
+
25
+ **仅 `10.x.x.x` 网段需要走本地解析,其他私有网段服务端均可直连,切勿误用本技能:**
26
+
27
+ | 网段 | 是否需要本地解析 | 原因 | 处理方式 |
28
+ |------|:---:|------|------|
29
+ | `10.x.x.x` | **是** | 用户本地可达,服务端不可达 | 使用本技能在本地 curl |
30
+ | `172.16-31.x.x` | **否** | 服务端可直接访问 | 直接调用 api_tool,无需本技能 |
31
+ | `192.168.x.x` | **否** | 服务端通过弹性 IP 映射访问 | 直接调用 api_tool,无需本技能 |
32
+ | 公网 IP | **否** | 服务端可直接访问 | 直接调用 api_tool,无需本技能 |
33
+
34
+ **禁止对 172.16-31.x.x 和 192.168.x.x 使用本技能!** 这些地址虽然也是 RFC 1918 私有地址,但服务端网络环境可以直达,不需要在用户本地执行 curl。
35
+
36
+ ## 工作流
37
+
38
+ ### 流程 A:拉取 Swagger API 文档(fetch)
39
+
40
+ ```
41
+ 用户请求 fetch Swagger URL (10.x.x.x)
42
+
43
+
44
+ 调用 api_tool(action="fetch", url=...)
45
+
46
+
47
+ 服务端返回 { reason: "LOCAL_NETWORK_UNREACHABLE", action: "请使用 local-api-tool ...", swaggerEndpoints: {...} }
48
+
49
+
50
+ AI 识别 LOCAL_NETWORK_UNREACHABLE,读取 swaggerEndpoints 和 authInfo
51
+
52
+
53
+ AI 通过 run_command 在本地执行 curl:
54
+ 步骤1: 鉴权获取 Cookie(如 authInfo.hasPassword 为 true)
55
+ 步骤2: 获取完整 API 文档 JSON
56
+
57
+
58
+ AI 调用 api_tool(action="parse_swagger_json", swaggerJson=..., swaggerSourceUrl=...)
59
+
60
+
61
+ 返回解析后的 API 文档给用户
62
+ ```
63
+
64
+ ### 流程 B:联调测试(test)
65
+
66
+ ```
67
+ 用户请求 test API (10.x.x.x)
68
+
69
+
70
+ 调用 api_tool(action="test", url=..., method=..., data=..., headers=...)
71
+
72
+
73
+ 服务端返回 { reason: "LOCAL_NETWORK_UNREACHABLE", action: "请使用 local-api-tool ...", method, data, headers }
74
+
75
+
76
+ AI 识别 LOCAL_NETWORK_UNREACHABLE,读取 method/data/headers
77
+
78
+
79
+ AI 通过 run_command 在本地执行对应 curl 命令
80
+
81
+
82
+ 将响应结果返回给用户
83
+ ```
84
+
85
+ ## 详细执行步骤
86
+
87
+ ### 一、拉取 Swagger 文档(action=fetch)
88
+
89
+ **步骤 1:调用服务端 api_tool**
90
+
91
+ ```
92
+ api_tool(action="fetch", url="http://10.2.7.60:30194/ikmp-knowledge/swagger-ui/index.html", username="admin", password="xxx")
93
+ ```
94
+
95
+ **步骤 2:检测 LOCAL_NETWORK_UNREACHABLE**
96
+
97
+ 如果返回结果中包含 `reason: "LOCAL_NETWORK_UNREACHABLE"`,则自动进入本地执行流程。
98
+
99
+ 返回结构示例:
100
+ ```json
101
+ {
102
+ "reason": "LOCAL_NETWORK_UNREACHABLE",
103
+ "hostname": "10.2.7.60",
104
+ "swaggerUrl": "http://10.2.7.60:30194/ikmp-knowledge/swagger-ui/index.html",
105
+ "authInfo": { "username": "admin", "hasPassword": true },
106
+ "swaggerEndpoints": {
107
+ "basePath": "http://10.2.7.60:30194/ikmp-knowledge",
108
+ "apiDocsUrl": "http://10.2.7.60:30194/ikmp-knowledge/v2/api-docs"
109
+ },
110
+ "action": "请使用 local-api-tool 技能处理此请求..."
111
+ }
112
+ ```
113
+
114
+ **步骤 3:AI 通过 run_command 在本地执行 curl**
115
+
116
+ 根据返回数据中的 `authInfo` 和 `swaggerEndpoints`,AI 自行构造 curl 命令并通过 `run_command` 在本地执行:
117
+
118
+ 3a. **鉴权(如 authInfo.hasPassword 为 true)**:
119
+
120
+ ```bash
121
+ curl -s -D - -X GET 'http://10.2.7.60:30194/ikmp-knowledge/swagger-resources/configuration/ui' \
122
+ -H 'Authorization: Basic <base64(username:password)>' \
123
+ -H 'Accept: application/json'
124
+ ```
125
+
126
+ 从输出的 `Set-Cookie:` 行提取 Cookie 值(分号前的部分)。
127
+
128
+ 3b. **获取 API 文档 JSON**:直接使用 `swaggerEndpoints.apiDocsUrl`:
129
+
130
+ ```bash
131
+ curl -s -X GET 'http://10.2.7.60:30194/ikmp-knowledge/v2/api-docs' \
132
+ -H 'Accept: application/json' \
133
+ -H 'Cookie: <步骤3a获取的Cookie>'
134
+ ```
135
+
136
+ 如果 authInfo.hasPassword 为 false,省略 Cookie 头。
137
+
138
+ **步骤 4:调用服务端解析**
139
+
140
+ ```
141
+ api_tool(action="parse_swagger_json", swaggerJson="<步骤3b获取的JSON字符串>", swaggerSourceUrl="http://10.2.7.60:30194/ikmp-knowledge/swagger-ui/index.html")
142
+ ```
143
+
144
+ **步骤 5:返回解析结果**
145
+
146
+ 将 `parse_swagger_json` 返回的解析结果直接返回给用户,格式与正常 fetch 完全一致。
147
+
148
+ ### 二、联调测试(action=test)
149
+
150
+ **步骤 1:调用服务端 api_tool**
151
+
152
+ ```
153
+ api_tool(action="test", url="http://10.2.7.60:30194/ikmp-knowledge/api/xxx", method="POST", data={...}, headers={...})
154
+ ```
155
+
156
+ **步骤 2:检测 LOCAL_NETWORK_UNREACHABLE**
157
+
158
+ 如果返回结果中包含 `reason: "LOCAL_NETWORK_UNREACHABLE"`,则自动进入本地执行流程。
159
+
160
+ 返回结构示例:
161
+ ```json
162
+ {
163
+ "success": false,
164
+ "reason": "LOCAL_NETWORK_UNREACHABLE",
165
+ "hostname": "10.2.7.60",
166
+ "targetUrl": "http://10.2.7.60:30194/ikmp-knowledge/api/xxx",
167
+ "method": "POST",
168
+ "data": { "key": "value" },
169
+ "headers": {},
170
+ "action": "请使用 local-api-tool 技能处理此请求...",
171
+ "timestamp": "..."
172
+ }
173
+ ```
174
+
175
+ **步骤 3:AI 通过 run_command 在本地执行 curl**
176
+
177
+ AI 根据返回数据中的 `method`、`data`、`headers`、`targetUrl` 自行构造 curl 命令:
178
+
179
+ GET 请求示例:
180
+ ```bash
181
+ curl -s -X GET 'http://10.2.7.60:30194/ikmp-knowledge/api/xxx?key=value' \
182
+ -H 'Accept: application/json'
183
+ ```
184
+
185
+ POST 请求示例:
186
+ ```bash
187
+ curl -s -X POST 'http://10.2.7.60:30194/ikmp-knowledge/api/xxx' \
188
+ -H 'Accept: application/json' \
189
+ -H 'Content-Type: application/json' \
190
+ -d '{"key":"value"}'
191
+ ```
192
+
193
+ 如有自定义 headers,添加对应的 `-H` 参数。
194
+
195
+ **步骤 4:返回测试结果**
196
+
197
+ 将 curl 的响应内容返回给用户。如果是 JSON 格式,尽量格式化输出。
198
+
199
+ ## 快捷方式:AI 直接识别 10 段地址
200
+
201
+ 如果 AI 能识别出用户请求的 URL 中包含 `10.x.x.x` 主机地址,可以**直接跳过首次 api_tool 调用**,在本地执行 curl,再调用 `parse_swagger_json`,减少一次无用的服务端请求:
202
+
203
+ 1. 从 Swagger URL 推导鉴权地址、文档地址
204
+ 2. 通过 `run_command` 在本地依次 curl
205
+ 3. 调用 `api_tool(action="parse_swagger_json")` 解析
206
+
207
+ ### URL 推导规则
208
+
209
+ 对于 Swagger URL 如 `http://10.2.7.60:30194/ikmp-knowledge/swagger-ui/index.html`:
210
+
211
+ | 推导项 | 规则 | 示例 |
212
+ |--------|------|------|
213
+ | basePath | `protocol + host + 第一个路径段` | `http://10.2.7.60:30194/ikmp-knowledge` |
214
+ | authUrl | `basePath + /swagger-resources/configuration/ui` | `http://10.2.7.60:30194/ikmp-knowledge/swagger-resources/configuration/ui` |
215
+ | apiDocsUrl | `basePath + /v2/api-docs` | `http://10.2.7.60:30194/ikmp-knowledge/v2/api-docs` |
216
+
217
+ ### curl 执行模板
218
+
219
+ **鉴权(带密码时):**
220
+ ```bash
221
+ curl -s -D - -X GET '<authUrl>' \
222
+ -H 'Authorization: Basic <base64(username:password)>' \
223
+ -H 'Accept: application/json'
224
+ ```
225
+
226
+ **获取文档(带 Cookie 时):**
227
+ ```bash
228
+ curl -s -X GET '<apiDocsUrl>' \
229
+ -H 'Accept: application/json' \
230
+ -H 'Cookie: <鉴权获取的Cookie>'
231
+ ```
232
+
233
+ **获取文档(无密码时):**
234
+ ```bash
235
+ curl -s -X GET '<apiDocsUrl>' \
236
+ -H 'Accept: application/json'
237
+ ```
238
+
239
+ ## 注意事项
240
+
241
+ 1. **Cookie 传递**:鉴权步骤获取的 Cookie 需要在后续步骤中通过 `-H 'Cookie: xxx'` 传递
242
+ 2. **无密码场景**:如果用户未提供密码,跳过鉴权步骤,直接获取文档
243
+ 3. **JSON 格式**:curl 获取的 API 文档必须是有效的 Swagger JSON,否则 `parse_swagger_json` 会报错
244
+ 4. **超时处理**:本地 curl 可能因网络原因超时,建议添加 `--connect-timeout 10 --max-time 30` 参数
245
+ 5. **错误处理**:如果某步骤 curl 失败,将错误信息返回给用户,不要继续后续步骤
246
+ 6. **自动执行**:AI 识别 `reason: "LOCAL_NETWORK_UNREACHABLE"` 后应**自动**通过 `run_command` 执行 curl,无需让用户手动复制粘贴命令