@shulex/cxclawctl 0.1.2 → 0.1.3
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 +25 -22
- package/dist/cli.js +2202 -127
- package/dist/cli.js.map +1 -1
- package/package.json +19 -6
- package/capabilities.lock.json +0 -898
- package/requirements-cli.txt +0 -2
- package/skills/__lib__/__init__.py +0 -0
- package/skills/__lib__/skill-runtime/bootstrap.py +0 -134
- package/skills/__lib__/solvea-api/__init__.py +0 -0
- package/skills/__lib__/solvea-api/client.py +0 -1944
- package/skills/__lib__/solvea-api/dashboard.py +0 -100
- package/skills/__lib__/solvea-api/solvea_api.py +0 -1341
- package/skills/agent-analytics/SKILL.md +0 -74
- package/skills/agent-analytics/references/chat-report-fields.md +0 -36
- package/skills/agent-analytics/references/report-fields.md +0 -130
- package/skills/agent-analytics/references/transcript.md +0 -110
- package/skills/agent-builder/SKILL.md +0 -42
- package/skills/agent-builder/interfaces/fallback-chatflow.md +0 -47
- package/skills/agent-builder/references/chatflow/graph-spec.md +0 -259
- package/skills/agent-builder/references/chatflow/node-selection.md +0 -89
- package/skills/agent-builder/references/chatflow/nodes/agent.md +0 -350
- package/skills/agent-builder/references/chatflow/nodes/business-track.md +0 -43
- package/skills/agent-builder/references/chatflow/nodes/code.md +0 -157
- package/skills/agent-builder/references/chatflow/nodes/collect-order.md +0 -47
- package/skills/agent-builder/references/chatflow/nodes/finish.md +0 -34
- package/skills/agent-builder/references/chatflow/nodes/human-review.md +0 -60
- package/skills/agent-builder/references/chatflow/nodes/if-else.md +0 -100
- package/skills/agent-builder/references/chatflow/nodes/intent.md +0 -79
- package/skills/agent-builder/references/chatflow/nodes/knowledge-reply.md +0 -43
- package/skills/agent-builder/references/chatflow/nodes/llm.md +0 -117
- package/skills/agent-builder/references/chatflow/nodes/note.md +0 -38
- package/skills/agent-builder/references/chatflow/nodes/question.md +0 -97
- package/skills/agent-builder/references/chatflow/nodes/rag-reply.md +0 -68
- package/skills/agent-builder/references/chatflow/nodes/reply.md +0 -97
- package/skills/agent-builder/references/chatflow/nodes/start.md +0 -35
- package/skills/agent-builder/references/chatflow/nodes/sub-graph.md +0 -48
- package/skills/agent-builder/references/chatflow/nodes/tool.md +0 -138
- package/skills/agent-builder/references/chatflow/nodes/transfer-to-human.md +0 -63
- package/skills/agent-builder/references/chatflow/nodes/variable-assignment.md +0 -52
- package/skills/agent-builder/references/chatflow/nodes/variable-extract.md +0 -50
- package/skills/agent-builder/references/chatflow/nodes/variable-process.md +0 -70
- package/skills/agent-builder/references/chatflow/overview.md +0 -53
- package/skills/agent-builder/references/chatflow/visual-translation.md +0 -64
- package/skills/agent-builder/references/chatflow/workflow.md +0 -134
- package/skills/agent-builder/references/multi-agent/create-update.md +0 -185
- package/skills/agent-builder/references/multi-agent/graph-spec.md +0 -246
- package/skills/agent-builder/references/multi-agent/graph-structure.md +0 -12
- package/skills/agent-builder/references/multi-agent/migrate-to-chatflow.md +0 -13
- package/skills/agent-builder/references/multi-agent/migration/large.md +0 -554
- package/skills/agent-builder/references/multi-agent/migration/principles.md +0 -446
- package/skills/agent-builder/references/multi-agent/migration/small.md +0 -225
- package/skills/agent-builder/references/multi-agent/orchestration.md +0 -11
- package/skills/agent-builder/references/multi-agent/overview.md +0 -48
- package/skills/agent-builder/references/multi-agent/update.md +0 -128
- package/skills/agent-builder/references/multi-agent/workflow.md +0 -87
- package/skills/agent-builder/references/single-agent/overview.md +0 -48
- package/skills/agent-builder/references/single-agent/prompt.md +0 -16
- package/skills/agent-builder/references/single-agent/tools.md +0 -36
- package/skills/agent-builder/references/single-agent/voice.md +0 -46
- package/skills/agent-builder/references/tools/http-tool.md +0 -315
- package/skills/agent-builder/references/tools/mock-tool.md +0 -279
- package/skills/agent-builder/references/tools/overview.md +0 -46
- package/skills/agent-builder/references/tools/tool-config.md +0 -43
- package/skills/agent-builder/references/tools/x-token.md +0 -34
- package/skills/agent-builder/scripts/chatflow/chatflow_builder.py +0 -3458
- package/skills/agent-builder/scripts/chatflow/validate_graph.py +0 -1697
- package/skills/agent-builder/scripts/copy_marketplace_agent.py +0 -61
- package/skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py +0 -5974
- package/skills/agent-builder/scripts/multi-agent/replay_compare.py +0 -679
- package/skills/agent-builder/scripts/patch_agent_tools.py +0 -135
- package/skills/agent-builder/scripts/tools/validate_tool_config.py +0 -384
- package/skills/agent-tester/SKILL.md +0 -35
- package/skills/agent-tester/batch-test/overview.md +0 -86
- package/skills/agent-tester/scripts/batch_test_sheet.py +0 -213
- package/skills/agent-tester/single-test/badcase-retest.md +0 -85
- package/skills/agent-tester/single-test/direct-test.md +0 -24
- package/skills/agent-tester/single-test/overview.md +0 -142
- package/skills/delivery/SKILL.md +0 -112
- package/skills/delivery/interfaces/classify.md +0 -38
- package/skills/delivery/interfaces/create-agents.md +0 -89
- package/skills/delivery/interfaces/delivery-test.md +0 -67
- package/skills/delivery/references/flow.md +0 -40
- package/skills/delivery/references/validation.md +0 -15
- package/skills/delivery/scripts/batch_test.py +0 -704
- package/skills/delivery/scripts/classify.py +0 -22
- package/skills/delivery/scripts/create_agents.py +0 -695
- package/skills/delivery/scripts/gen_delivery_report.py +0 -335
- package/skills/delivery/scripts/gen_excel.py +0 -234
- package/skills/delivery/scripts/gen_report.py +0 -208
- package/skills/delivery/scripts/plan.py +0 -163
- package/skills/delivery/scripts/render.py +0 -713
- package/skills/delivery/scripts/render_summary.py +0 -38
- package/skills/delivery/scripts/sample_history_cases.py +0 -109
- package/skills/kb-builder/SKILL.md +0 -80
- package/skills/kb-builder/interfaces/qa-upload.md +0 -55
- package/skills/kb-builder/interfaces/web-kb.md +0 -84
- package/skills/kb-builder/references/directory.md +0 -373
- package/skills/kb-builder/references/export.md +0 -282
- package/skills/kb-builder/references/isolation-keywords.md +0 -113
- package/skills/kb-builder/references/knowledge.md +0 -153
- package/skills/kb-builder/references/product.md +0 -52
- package/skills/kb-builder/references/qa-from-help-center.md +0 -58
- package/skills/kb-builder/references/qa-from-pdf.md +0 -94
- package/skills/kb-builder/references/qa-from-tickets.md +0 -168
- package/skills/kb-builder/references/qa-from-web.md +0 -98
- package/skills/kb-builder/references/qa-quality.md +0 -73
- package/skills/kb-builder/references/reply-template.md +0 -237
- package/skills/kb-builder/references/tag-isolation-migration.md +0 -61
- package/skills/kb-builder/references/tags.md +0 -45
- package/skills/kb-builder/references/upload.md +0 -130
- package/skills/kb-builder/scripts/batch_extract_ticket_qa.py +0 -333
- package/skills/kb-builder/scripts/build_directory_plan.py +0 -144
- package/skills/kb-builder/scripts/crawl_site.py +0 -433
- package/skills/kb-builder/scripts/create_dirs.py +0 -146
- package/skills/kb-builder/scripts/export_knowledge.py +0 -454
- package/skills/kb-builder/scripts/extract_ticket_qa.py +0 -441
- package/skills/kb-builder/scripts/extract_web_qa.py +0 -118
- package/skills/kb-builder/scripts/import_qa.py +0 -219
- package/skills/kb-builder/scripts/import_source_documents.py +0 -143
- package/skills/kb-builder/scripts/import_templates.py +0 -409
- package/skills/poc/SKILL.md +0 -125
- package/skills/poc/assets/default_manual.css +0 -279
- package/skills/poc/assets/notice_escalate.png +0 -0
- package/skills/poc/assets/notice_escalate2.png +0 -0
- package/skills/poc/assets/notice_new_chat.png +0 -0
- package/skills/poc/assets/poc_test_template.html +0 -645
- package/skills/poc/assets/poc_test_template.md +0 -104
- package/skills/poc/assets/step3_preview.png +0 -0
- package/skills/poc/assets/step4_order_note.png +0 -0
- package/skills/poc/interfaces/classify.md +0 -38
- package/skills/poc/interfaces/create-agents.md +0 -108
- package/skills/poc/interfaces/poc-test.md +0 -94
- package/skills/poc/references/flow.md +0 -47
- package/skills/poc/references/kb-directory.md +0 -22
- package/skills/poc/references/validation.md +0 -17
- package/skills/poc/scripts/classify.py +0 -22
- package/skills/poc/scripts/create_agents.py +0 -818
- package/skills/poc/scripts/gen_excel.py +0 -234
- package/skills/poc/scripts/gen_poc_manual.py +0 -249
- package/skills/poc/scripts/gen_report.py +0 -208
- package/skills/poc/scripts/inspect_chatflow.py +0 -209
- package/skills/poc/scripts/plan.py +0 -178
- package/skills/poc/scripts/poc_test.py +0 -495
- package/skills/poc/scripts/render.py +0 -713
- package/skills/poc/scripts/render_summary.py +0 -41
- package/skills/runtime-inspector/SKILL.md +0 -51
- package/skills/runtime-inspector/references/frontend-rendering.md +0 -126
- package/skills/runtime-inspector/references/model.md +0 -59
- package/skills/runtime-inspector/references/sandbox.md +0 -131
- package/skills/runtime-inspector/scripts/model_inspect.py +0 -68
- package/skills/runtime-inspector/scripts/prepare.py +0 -98
- package/skills/runtime-inspector/scripts/process.py +0 -84
- package/skills/runtime-inspector/scripts/read_state.py +0 -32
- package/skills/runtime-inspector/scripts/sandbox_inspect.py +0 -463
- package/skills/runtime-inspector/scripts/test_claude_proxy.py +0 -49
- package/skills/runtime-inspector/scripts/test_openai_proxy.py +0 -41
- package/skills/runtime-inspector/scripts/verify_persistence.py +0 -101
- package/skills/runtime-inspector/scripts/write_test.py +0 -41
- package/skills/setup/SKILL.md +0 -17
- package/skills/shulex-support/SKILL.md +0 -39
- package/skills/shulex-support/references/badcase-analysis/overview.md +0 -34
- package/skills/shulex-support/references/badcase-analysis/text/conversation-record.md +0 -105
- package/skills/shulex-support/references/badcase-analysis/text/core-flow.md +0 -89
- package/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md +0 -36
- package/skills/shulex-support/references/badcase-analysis/text/m1-entry.md +0 -53
- package/skills/shulex-support/references/badcase-analysis/text/m10-chatflow-service.md +0 -259
- package/skills/shulex-support/references/badcase-analysis/text/m11-algorithm-service.md +0 -148
- package/skills/shulex-support/references/badcase-analysis/text/m12-quality-inspection.md +0 -57
- package/skills/shulex-support/references/badcase-analysis/text/m2-intent.md +0 -120
- package/skills/shulex-support/references/badcase-analysis/text/m3-strategy.md +0 -126
- package/skills/shulex-support/references/badcase-analysis/text/m4-aifield.md +0 -121
- package/skills/shulex-support/references/badcase-analysis/text/m5-agent.md +0 -208
- package/skills/shulex-support/references/badcase-analysis/text/m6-tool.md +0 -115
- package/skills/shulex-support/references/badcase-analysis/text/m7-reply.md +0 -72
- package/skills/shulex-support/references/badcase-analysis/text/m8-error.md +0 -92
- package/skills/shulex-support/references/badcase-analysis/text/m9-knowledge-search.md +0 -147
- package/skills/shulex-support/references/badcase-analysis/text/sls-query.md +0 -283
- package/skills/shulex-support/references/badcase-analysis/voice/core-flow.md +0 -77
- package/skills/shulex-support/references/badcase-analysis/voice/dependencies.md +0 -19
- package/skills/shulex-support/references/badcase-analysis/voice/platform-api.md +0 -23
- package/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md +0 -31
- package/skills/shulex-support/references/product-docs.md +0 -70
- package/skills/shulex-support/references/tickets.md +0 -184
- package/skills/shulex-support/scripts/support.py +0 -427
- package/skills/solvea-desk/SKILL.md +0 -39
- package/skills/solvea-desk/references/report/fields.md +0 -82
- package/skills/solvea-desk/references/report/report-design.md +0 -200
- package/skills/solvea-desk/references/report/report-template.html +0 -44
- package/skills/solvea-desk/references/report/report.css +0 -517
- package/skills/solvea-desk/references/report/workflow.md +0 -464
- package/skills/solvea-desk/references/tickets/query.md +0 -103
- package/skills/solvea-desk/references/tickets/tags.md +0 -83
- package/skills/solvea-desk/scripts/report/fetch_sources.py +0 -580
- package/skills/solvea-desk/scripts/report/render_report.py +0 -763
- package/skills/solvea-desk/scripts/tickets/desk_api.py +0 -73
- package/skills/solvea-desk/scripts/tickets/fetch_tickets.py +0 -403
- package/skills/solvea-desk/scripts/tickets/ticket_tags.py +0 -305
- package/skills/solvea-kit/SKILL.md +0 -84
- package/skills/solvea-kit/references/agent.md +0 -145
- package/skills/solvea-kit/references/chat.md +0 -244
- package/skills/solvea-kit/references/intent.md +0 -69
- package/skills/solvea-kit/references/plugin.md +0 -53
- package/skills/solvea-kit/references/quality-inspection.md +0 -75
- package/skills/solvea-kit/references/strategy.md +0 -62
- package/skills/solvea-kit/references/tagging.md +0 -231
- package/skills/solvea-kit/references/variables.md +0 -53
- package/skills/solvea-kit/scripts/generate_label_import_file.py +0 -151
- package/skills/solvea-kit/scripts/intent_classify.py +0 -843
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
# HTTP 工具
|
|
2
|
-
|
|
3
|
-
本文描述 `EXTERNAL_HTTP_CALL` 工具的真实保存结构。底层接口和字段仍使用 `plugin` / `pluginId` / `queryPlugin` 命名。
|
|
4
|
-
|
|
5
|
-
## API 与 CLI
|
|
6
|
-
|
|
7
|
-
| 操作 | 方法 | 路径 |
|
|
8
|
-
|---|---|---|
|
|
9
|
-
| 列表 | POST | `/api_v2/gpt/ap/queryPlugin` |
|
|
10
|
-
| 详情 | POST | `/api_v2/gpt/ap/queryPlugin`,body 带 `pluginId`、`convertStrategyV5=true` |
|
|
11
|
-
| 创建 | POST | `/api_v2/gpt/ap/createPlugin` |
|
|
12
|
-
| 更新 | POST | `/api_v2/gpt/ap/updatePlugin` |
|
|
13
|
-
| 删除 | POST | `/api_v2/gpt/ap/deletePlugin` |
|
|
14
|
-
| 调试(不保存) | POST | `/api_v2/gpt/ap/runHttpPlugin` |
|
|
15
|
-
| 根据真实响应构建输出 | POST | `/api_v2/gpt/ap/{projectId}/build/plugin` |
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npx --yes @shulex/cxclawctl@latest api list-plugins --pretty
|
|
19
|
-
npx --yes @shulex/cxclawctl@latest api get-plugin --id <tool_id> --pretty
|
|
20
|
-
npx --yes @shulex/cxclawctl@latest api create-plugin \
|
|
21
|
-
--data-file /workspace/state/agent-builder/tool_<name>.json --pretty
|
|
22
|
-
npx --yes @shulex/cxclawctl@latest api update-plugin \
|
|
23
|
-
--data-file /workspace/state/agent-builder/tool_<name>.json --pretty
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
大 JSON 不要内联到 `--data`。创建前必须先查重、静态验证并确认写入;创建后用返回的 ID 执行 `get-plugin` 回查。
|
|
27
|
-
|
|
28
|
-
`update-plugin` 是完整对象更新,payload 需要带 `pluginId`;可基于 `get-plugin` 返回的完整定义修改目标字段。
|
|
29
|
-
|
|
30
|
-
## 完整外层结构
|
|
31
|
-
|
|
32
|
-
```json
|
|
33
|
-
{
|
|
34
|
-
"name": "lookup_order",
|
|
35
|
-
"description": "按订单号查询订单是否存在",
|
|
36
|
-
"type": "EXTERNAL_HTTP_CALL",
|
|
37
|
-
"source": "MANUAL",
|
|
38
|
-
"visible": true,
|
|
39
|
-
"meta": {
|
|
40
|
-
"category": "MANUAL",
|
|
41
|
-
"externalHttpCallConfig": {
|
|
42
|
-
"url": "https://example.com/api/order",
|
|
43
|
-
"method": "POST",
|
|
44
|
-
"headerParams": [
|
|
45
|
-
{
|
|
46
|
-
"name": "Content-Type",
|
|
47
|
-
"description": "JSON request",
|
|
48
|
-
"value": "application/json"
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
"requestParam": {
|
|
52
|
-
"items": []
|
|
53
|
-
},
|
|
54
|
-
"responseParam": {
|
|
55
|
-
"items": []
|
|
56
|
-
},
|
|
57
|
-
"actionStatuses": []
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
- 普通接口使用 `meta.category: "MANUAL"`,并提供非空 `url`。`method` 使用接口真实方法。
|
|
64
|
-
- Header 结构为 `name`、`value`、`description`。Authorization、X-Token 等鉴权值和普通 Header 一样写入 `value`。
|
|
65
|
-
- 工具只能放到 AGENT 节点的 `usedPlugins`,或由 TOOL 节点引用;不要放进 Output 区域。
|
|
66
|
-
|
|
67
|
-
## 参数 schema
|
|
68
|
-
|
|
69
|
-
`requestParam.items` 和 `responseParam.items` 的每个元素都是 `HttpParamDTO.Item`:
|
|
70
|
-
|
|
71
|
-
| 字段 | 类型 | 说明 |
|
|
72
|
-
|---|---|---|
|
|
73
|
-
| `name` | string | 必须非空、不能包含 `.`,同一层级必须唯一 |
|
|
74
|
-
| `description` | string | 参数说明;建议始终提供 |
|
|
75
|
-
| `required` | boolean | 是否必填,主要用于请求参数 |
|
|
76
|
-
| `type` | string | `string` / `integer` / `number` / `date` / `boolean` / `array` / `object` |
|
|
77
|
-
| `effect` | boolean | 是否对模型/返回结果生效,通常为 `true` |
|
|
78
|
-
| `source` | string | 请求值来源,缺省语义为 `LLM` |
|
|
79
|
-
| `ref` | object | 可选字段映射,服务端 Pair 结构通常是 `{"key":"...","value":"..."}` |
|
|
80
|
-
| `value` | any | `source: "CUSTOMIZE"` 时的固定值 |
|
|
81
|
-
| `listSubItem` | Item | `type: "array"` 时必填,描述唯一的元素类型 |
|
|
82
|
-
| `objectItems` | Item[] | `type: "object"` 时必填且非空,描述对象字段 |
|
|
83
|
-
|
|
84
|
-
`source` 常见取值:`LLM`、`CONVERSATION`、`ORDER`、`LOGISTIC`、`TICKET`、`AGENT_OUTPUT`、`CUSTOMIZE`、`METADATA`。使用非 `LLM` 来源前,应确认对应运行时确实提供该数据。
|
|
85
|
-
|
|
86
|
-
复杂类型示例:
|
|
87
|
-
|
|
88
|
-
```json
|
|
89
|
-
{
|
|
90
|
-
"name": "data",
|
|
91
|
-
"description": "response body",
|
|
92
|
-
"type": "object",
|
|
93
|
-
"effect": true,
|
|
94
|
-
"objectItems": [
|
|
95
|
-
{
|
|
96
|
-
"name": "items",
|
|
97
|
-
"description": "order lines",
|
|
98
|
-
"type": "array",
|
|
99
|
-
"effect": true,
|
|
100
|
-
"listSubItem": {
|
|
101
|
-
"name": "item",
|
|
102
|
-
"description": "one line",
|
|
103
|
-
"type": "object",
|
|
104
|
-
"effect": true,
|
|
105
|
-
"objectItems": [
|
|
106
|
-
{
|
|
107
|
-
"name": "quantity",
|
|
108
|
-
"description": "quantity",
|
|
109
|
-
"type": "integer",
|
|
110
|
-
"effect": true
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
]
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
`array` 的 `listSubItem.name` 是元素描述名,不进入状态映射路径;上例数量字段的精确 `apiName` 是 `data.items.quantity`。
|
|
120
|
-
|
|
121
|
-
## actionStatuses
|
|
122
|
-
|
|
123
|
-
`actionStatuses` 用于 TOOL 节点启用 `enableActionStatus=true` 后的分支。每项结构是:
|
|
124
|
-
|
|
125
|
-
```json
|
|
126
|
-
{
|
|
127
|
-
"name": "found",
|
|
128
|
-
"condition": {
|
|
129
|
-
"or": [
|
|
130
|
-
{
|
|
131
|
-
"rules": [
|
|
132
|
-
{
|
|
133
|
-
"type": "GENERIC",
|
|
134
|
-
"apiName": "data.exists",
|
|
135
|
-
"apiType": "BOOLEAN",
|
|
136
|
-
"relation": "EQUAL",
|
|
137
|
-
"values": [true]
|
|
138
|
-
}
|
|
139
|
-
]
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
- `condition.or` 中的组彼此是 OR;同一组的 `rules` 彼此是 AND。
|
|
147
|
-
- 每条规则必须完整提供 `type`、`apiName`、`apiType`、`relation`、`values`。当前普通 HTTP 状态规则使用 `type: "GENERIC"`。
|
|
148
|
-
- `apiName` 必须是 `responseParam.items` 中字段的完整精确路径。对象层级以 `.` 连接;数组元素描述名不计入路径。不能只写叶子名,也不能用参数 `name` 自带点号来伪造路径。
|
|
149
|
-
- `object` 本身不能作为状态条件;应选择其可比较的后代字段。
|
|
150
|
-
- 最后一项必须是默认状态,后端与 UI 兼容两种空条件:`"condition": {}` 或 `"condition": {"or": []}`。新建配置推荐 canonical `"condition": {}`;`{"or": []}` 同样合法,不能判为非法。默认状态只能放最后。
|
|
151
|
-
|
|
152
|
-
### 参数类型到 apiType
|
|
153
|
-
|
|
154
|
-
| response `type` | 可用 `apiType` |
|
|
155
|
-
|---|---|
|
|
156
|
-
| `string` | `TEXT` |
|
|
157
|
-
| `integer` / `number` | `NUMBER` |
|
|
158
|
-
| `date` | `DATE_TO_NOW` 或 `NOW_TO_DATE` |
|
|
159
|
-
| `boolean` | `BOOLEAN` |
|
|
160
|
-
| `array` | `ARRAY_SIZE` |
|
|
161
|
-
| `object` | 不支持作为条件 |
|
|
162
|
-
|
|
163
|
-
### apiType 到 relation
|
|
164
|
-
|
|
165
|
-
| `apiType` | 可用 `relation` | `values` 规则 |
|
|
166
|
-
|---|---|---|
|
|
167
|
-
| `TEXT` | `CONTAIN`, `NOT_CONTAIN`, `IS_EMPTY`, `NOT_EMPTY`, `EQUAL`, `NOT_EQUAL` | `CONTAIN` / `NOT_CONTAIN` 可有一个或多个字符串;`EQUAL` / `NOT_EQUAL` 一个字符串 |
|
|
168
|
-
| `NUMBER` | `GREATER_THAN`, `GREATER_THAN_OR_EQUAL`, `LESS_THAN`, `LESS_THAN_OR_EQUAL`, `BETWEEN`, `EQUAL`, `NOT_EQUAL`, `IS_EMPTY`, `NOT_EMPTY` | JSON 数值或前端保存的数值字符串;`BETWEEN` 恰好两个,其余比较恰好一个 |
|
|
169
|
-
| `DATE_TO_NOW` / `NOW_TO_DATE` | 同 `NUMBER` | JSON 数值或数值字符串;`BETWEEN` 恰好两个 |
|
|
170
|
-
| `ARRAY_SIZE` | 同 `NUMBER` | JSON 数值或数值字符串;`BETWEEN` 恰好两个 |
|
|
171
|
-
| `BOOLEAN` | `EQUAL`, `NOT_EQUAL`, `IS_EMPTY`, `NOT_EMPTY` | 后端同时接受 JSON boolean `true` / `false` 和前端保存的字符串 `"true"` / `"false"`;手写 JSON 推荐 boolean |
|
|
172
|
-
|
|
173
|
-
`IS_EMPTY` / `NOT_EMPTY` 的 `values` 必须是空数组 `[]`。虽然底层 `LogicalRelationEnum` 还包含 `IN`、`NOT_IN`、`EXACT_CONTAINS`、`NOT_EXACT_CONTAINS`,当前工具详情页和静态 validator 不接受它们用于上述 HTTP 状态映射;不要在新配置中使用。
|
|
174
|
-
|
|
175
|
-
## 合法完整示例:`data.exists` boolean
|
|
176
|
-
|
|
177
|
-
```json
|
|
178
|
-
{
|
|
179
|
-
"name": "lookup_order",
|
|
180
|
-
"description": "按订单号查询订单是否存在",
|
|
181
|
-
"type": "EXTERNAL_HTTP_CALL",
|
|
182
|
-
"source": "MANUAL",
|
|
183
|
-
"visible": true,
|
|
184
|
-
"meta": {
|
|
185
|
-
"category": "MANUAL",
|
|
186
|
-
"externalHttpCallConfig": {
|
|
187
|
-
"url": "https://example.com/api/order",
|
|
188
|
-
"method": "POST",
|
|
189
|
-
"headerParams": [
|
|
190
|
-
{
|
|
191
|
-
"name": "Content-Type",
|
|
192
|
-
"description": "JSON request",
|
|
193
|
-
"value": "application/json"
|
|
194
|
-
}
|
|
195
|
-
],
|
|
196
|
-
"requestParam": {
|
|
197
|
-
"items": [
|
|
198
|
-
{
|
|
199
|
-
"name": "order_id",
|
|
200
|
-
"description": "订单号",
|
|
201
|
-
"required": true,
|
|
202
|
-
"type": "string",
|
|
203
|
-
"effect": true,
|
|
204
|
-
"source": "LLM"
|
|
205
|
-
}
|
|
206
|
-
]
|
|
207
|
-
},
|
|
208
|
-
"responseParam": {
|
|
209
|
-
"items": [
|
|
210
|
-
{
|
|
211
|
-
"name": "data",
|
|
212
|
-
"description": "查询结果",
|
|
213
|
-
"type": "object",
|
|
214
|
-
"effect": true,
|
|
215
|
-
"objectItems": [
|
|
216
|
-
{
|
|
217
|
-
"name": "exists",
|
|
218
|
-
"description": "订单是否存在",
|
|
219
|
-
"type": "boolean",
|
|
220
|
-
"effect": true
|
|
221
|
-
}
|
|
222
|
-
]
|
|
223
|
-
}
|
|
224
|
-
]
|
|
225
|
-
},
|
|
226
|
-
"actionStatuses": [
|
|
227
|
-
{
|
|
228
|
-
"name": "found",
|
|
229
|
-
"condition": {
|
|
230
|
-
"or": [
|
|
231
|
-
{
|
|
232
|
-
"rules": [
|
|
233
|
-
{
|
|
234
|
-
"type": "GENERIC",
|
|
235
|
-
"apiName": "data.exists",
|
|
236
|
-
"apiType": "BOOLEAN",
|
|
237
|
-
"relation": "EQUAL",
|
|
238
|
-
"values": [true]
|
|
239
|
-
}
|
|
240
|
-
]
|
|
241
|
-
}
|
|
242
|
-
]
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
"name": "not_found_or_error",
|
|
247
|
-
"condition": {}
|
|
248
|
-
}
|
|
249
|
-
]
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
旧错误 case 常把它写成 `apiName: "exists"`、`apiType: "TEXT"`、`relation: "eq"`、`values: ["true"]`。真正的错误有三处:路径缺少父级 `data`;boolean 必须映射到 `BOOLEAN`;关系必须是大写枚举 `EQUAL`。`values: ["true"]` 是前端可能保存的兼容格式,后端可接受;手写 JSON 时仍推荐更明确的 `values: [true]`。
|
|
256
|
-
|
|
257
|
-
## 静态验证与写入
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/tools/validate_tool_config.py \
|
|
261
|
-
--data-file /workspace/state/agent-builder/tool_lookup_order.json \
|
|
262
|
-
--pretty
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
只有输出 `"valid": true` 才继续请求用户确认并创建。该命令取代“只确认 JSON 能解析”的弱校验:它还会拒绝非法类型、同层重名、缺失复杂类型子项、错误字段路径、类型/关系/值不匹配,以及默认状态位置错误。
|
|
266
|
-
|
|
267
|
-
创建完成后:
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
npx --yes @shulex/cxclawctl@latest api get-plugin --id <tool_id> --pretty
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
以回查结果确认名称、URL、方法、参数树和 `actionStatuses` 已按预期保存。
|
|
274
|
-
|
|
275
|
-
## 调试安全边界
|
|
276
|
-
|
|
277
|
-
`run-plugin` / `runHttpPlugin` 会真实访问目标 URL,不是纯校验:
|
|
278
|
-
|
|
279
|
-
`run-plugin --data-file` 接收 envelope,而不是裸 `externalHttpCallConfig`。例如:
|
|
280
|
-
|
|
281
|
-
```json
|
|
282
|
-
{
|
|
283
|
-
"externalHttpCallConfig": {
|
|
284
|
-
"url": "https://example.com/api/order",
|
|
285
|
-
"method": "POST",
|
|
286
|
-
"headerParams": [
|
|
287
|
-
{
|
|
288
|
-
"name": "Content-Type",
|
|
289
|
-
"value": "application/json"
|
|
290
|
-
}
|
|
291
|
-
],
|
|
292
|
-
"requestParam": {
|
|
293
|
-
"items": []
|
|
294
|
-
},
|
|
295
|
-
"responseParam": {
|
|
296
|
-
"items": []
|
|
297
|
-
},
|
|
298
|
-
"actionStatuses": []
|
|
299
|
-
},
|
|
300
|
-
"externalHttpCallRequestBody": {
|
|
301
|
-
"order_id": "ORDER-DEMO-001"
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
```bash
|
|
307
|
-
npx --yes @shulex/cxclawctl@latest api run-plugin \
|
|
308
|
-
--data-file /workspace/state/agent-builder/run_tool_config.json \
|
|
309
|
-
--pretty
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
- 仅当用户明确要求或明确授权实际调试时执行。
|
|
313
|
-
- GET 等只读接口也不能因“创建工具”而默认调用。
|
|
314
|
-
- POST / PUT / PATCH / DELETE 等可能写数据的接口,执行前额外确认本次请求体和影响范围。
|
|
315
|
-
- 不得将“上线前必须运行”作为强制步骤;未授权时只做静态验证和保存结果回查。
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
# Mock / Excel / CSV 工具
|
|
2
|
-
|
|
3
|
-
Mock 工具不是新的 plugin 类型。保存到工具库时仍然是:
|
|
4
|
-
|
|
5
|
-
```json
|
|
6
|
-
{
|
|
7
|
-
"type": "EXTERNAL_HTTP_CALL",
|
|
8
|
-
"source": "MANUAL",
|
|
9
|
-
"meta": {
|
|
10
|
-
"category": "EXCEL",
|
|
11
|
-
"fileName": "logistics.xlsx"
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
`EXCEL` 表示构建来源和 UI 展示方式;真正的数据保存在 MockData 表中,工具的 HTTP 配置指向同一环境的 MockData 搜索接口。
|
|
17
|
-
|
|
18
|
-
## UI 与高级 CLI 的边界
|
|
19
|
-
|
|
20
|
-
详情页上传 Excel / CSV 时,浏览器只读取第一个 sheet,转换成 JSON 数组,并将日期格式化、其他单元格调用 `toString()`。入参与出参也按首行列名生成顶层 `string` 字段。因此 UI 路径适合偏扁平的字符串记录。
|
|
21
|
-
|
|
22
|
-
高级 CLI 可以直接向 MockData 写 JSON 数组,不是详情页的上传入口。它可以保留 number、boolean、object、array 等嵌套 JSON 类型;但是详情页的表格编辑器只按首条记录的顶层列展示。以后在 UI 打开、编辑并保存,数据会被 UI 当前表格状态全量重传,嵌套值可能被覆盖、字符串化或降级。需要保留嵌套类型时,后续仍使用 CLI 管理,并避免从 UI 重存数据。
|
|
23
|
-
|
|
24
|
-
`get-plugin` 只读取保存的工具定义,不会调用工具原来的 URL,也不会查询 MockData 内容。数据回查要单独用 `query-mock-data`。
|
|
25
|
-
|
|
26
|
-
## 标准创建流程
|
|
27
|
-
|
|
28
|
-
MockData 的 `mock_type` 必须包含工具 ID,所以创建顺序和普通 HTTP 工具有所不同:
|
|
29
|
-
|
|
30
|
-
1. `list-plugins --pretty` 查重,向用户说明将进行三类写操作:创建占位、全量替换 MockData、更新工具;取得确认。
|
|
31
|
-
2. 创建最小占位工具,取得服务端返回的 `id`。
|
|
32
|
-
3. 从 `fileName` 去掉最后一个扩展名得到 stem,再生成 `mock_type = <stem>_<id>`。例如 `logistics.mock.xlsx`、ID `321` 对应 `logistics.mock_321`。
|
|
33
|
-
4. 按该 ID 准备最终工具配置,先运行 `validate_tool_config.py` 静态验证。
|
|
34
|
-
5. 执行 `replace-mock-data --name <mock_type>` 全量替换数据。
|
|
35
|
-
6. 在最终 payload 的普通 `headerParams` 中配置 `X-Token`,再执行 `update-plugin --data-file ... --pretty`。配置中 `method=POST`,URL 指向 `/api_v2/gpt/mockdata/searchMockData/<mock_type>`。
|
|
36
|
-
7. 分别运行 `query-mock-data --name <mock_type>` 与 `get-plugin --id <id> --pretty` 回查数据和定义。
|
|
37
|
-
|
|
38
|
-
占位配置示例:
|
|
39
|
-
|
|
40
|
-
```json
|
|
41
|
-
{
|
|
42
|
-
"name": "lookup_logistics_mock",
|
|
43
|
-
"description": "按物流单号查询测试物流记录",
|
|
44
|
-
"type": "EXTERNAL_HTTP_CALL",
|
|
45
|
-
"source": "MANUAL"
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
npx --yes @shulex/cxclawctl@latest api create-plugin \
|
|
51
|
-
--data-file /workspace/state/agent-builder/mock_placeholder.json \
|
|
52
|
-
--pretty
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
创建结果中的 ID 是后续所有步骤的同一个 `<tool_id>`。不要猜 ID,也不要在不同工具之间复用 `mock_type`。
|
|
56
|
-
|
|
57
|
-
## 数据文件与替换命令
|
|
58
|
-
|
|
59
|
-
`/workspace/state/agent-builder/logistics_mock_records.json`:
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
[
|
|
63
|
-
{
|
|
64
|
-
"tracking_number": "TRACK-DEMO-001",
|
|
65
|
-
"carrier": "DemoCarrier",
|
|
66
|
-
"delivered": false,
|
|
67
|
-
"latest_status": {
|
|
68
|
-
"status": "InTransit",
|
|
69
|
-
"description": "Package left the sorting center"
|
|
70
|
-
},
|
|
71
|
-
"events": [
|
|
72
|
-
{
|
|
73
|
-
"time": "2026-07-16T09:30:00+08:00",
|
|
74
|
-
"location": "Shanghai",
|
|
75
|
-
"description": "Departed facility"
|
|
76
|
-
}
|
|
77
|
-
],
|
|
78
|
-
"days_after_last_update": 1
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"tracking_number": "TRACK-DEMO-002",
|
|
82
|
-
"carrier": "DemoCarrier",
|
|
83
|
-
"delivered": true,
|
|
84
|
-
"latest_status": {
|
|
85
|
-
"status": "Delivered",
|
|
86
|
-
"description": "Delivered to recipient"
|
|
87
|
-
},
|
|
88
|
-
"events": [],
|
|
89
|
-
"days_after_last_update": 0
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
为匹配字段设置稳定的顶层查询键;上例只使用 `tracking_number`。同一 `mock_type` 中,不同记录的查询键值组合不得重复;如果用 `tracking_number` 和 `carrier` 联合查询,则二者的组合必须唯一。组合重复时搜索只返回数据库结果中的第一条,结果不确定。
|
|
95
|
-
|
|
96
|
-
确认写操作后执行:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npx --yes @shulex/cxclawctl@latest api replace-mock-data \
|
|
100
|
-
--name logistics_mock_<tool_id> \
|
|
101
|
-
--data-file /workspace/state/agent-builder/logistics_mock_records.json \
|
|
102
|
-
--pretty
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
`--name` 在这两个命令中就是 `mock_type`。`replace-mock-data` 会先删除当前租户下相同 `mock_type` 的全部旧记录,再写入新数组;不是追加或局部更新。数组最多 10,000 条,空数组会清空该类型。每次执行都属于写操作,必须在执行前确认本次全量替换的类型、条数和影响环境。
|
|
106
|
-
|
|
107
|
-
## 最终工具配置
|
|
108
|
-
|
|
109
|
-
最终配置仍使用 HTTP 工具参数 schema。`X-Token` 与其他 Header 一样配置在 `headerParams` 中。
|
|
110
|
-
|
|
111
|
-
```json
|
|
112
|
-
{
|
|
113
|
-
"pluginId": 321,
|
|
114
|
-
"name": "lookup_logistics_mock",
|
|
115
|
-
"description": "按物流单号查询测试物流记录",
|
|
116
|
-
"type": "EXTERNAL_HTTP_CALL",
|
|
117
|
-
"source": "MANUAL",
|
|
118
|
-
"visible": true,
|
|
119
|
-
"meta": {
|
|
120
|
-
"category": "EXCEL",
|
|
121
|
-
"fileName": "logistics_mock.json",
|
|
122
|
-
"externalHttpCallConfig": {
|
|
123
|
-
"url": "https://<current-host>/api_v2/gpt/mockdata/searchMockData/logistics_mock_321",
|
|
124
|
-
"method": "POST",
|
|
125
|
-
"headerParams": [
|
|
126
|
-
{
|
|
127
|
-
"name": "X-Token",
|
|
128
|
-
"description": "MockData API token",
|
|
129
|
-
"value": "<X_TOKEN>"
|
|
130
|
-
}
|
|
131
|
-
],
|
|
132
|
-
"requestParam": {
|
|
133
|
-
"items": [
|
|
134
|
-
{
|
|
135
|
-
"name": "tracking_number",
|
|
136
|
-
"description": "物流单号,MockData 顶层查询键",
|
|
137
|
-
"required": true,
|
|
138
|
-
"type": "string",
|
|
139
|
-
"effect": true,
|
|
140
|
-
"source": "LLM"
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
},
|
|
144
|
-
"responseParam": {
|
|
145
|
-
"items": [
|
|
146
|
-
{
|
|
147
|
-
"name": "tracking_number",
|
|
148
|
-
"description": "物流单号",
|
|
149
|
-
"type": "string",
|
|
150
|
-
"effect": true
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"name": "carrier",
|
|
154
|
-
"description": "物流商",
|
|
155
|
-
"type": "string",
|
|
156
|
-
"effect": true
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
"name": "delivered",
|
|
160
|
-
"description": "是否签收",
|
|
161
|
-
"type": "boolean",
|
|
162
|
-
"effect": true
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"name": "latest_status",
|
|
166
|
-
"description": "最新状态",
|
|
167
|
-
"type": "object",
|
|
168
|
-
"effect": true,
|
|
169
|
-
"objectItems": [
|
|
170
|
-
{
|
|
171
|
-
"name": "status",
|
|
172
|
-
"description": "状态码",
|
|
173
|
-
"type": "string",
|
|
174
|
-
"effect": true
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"name": "description",
|
|
178
|
-
"description": "状态描述",
|
|
179
|
-
"type": "string",
|
|
180
|
-
"effect": true
|
|
181
|
-
}
|
|
182
|
-
]
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
"name": "events",
|
|
186
|
-
"description": "物流事件",
|
|
187
|
-
"type": "array",
|
|
188
|
-
"effect": true,
|
|
189
|
-
"listSubItem": {
|
|
190
|
-
"name": "event",
|
|
191
|
-
"description": "单条事件",
|
|
192
|
-
"type": "object",
|
|
193
|
-
"effect": true,
|
|
194
|
-
"objectItems": [
|
|
195
|
-
{
|
|
196
|
-
"name": "time",
|
|
197
|
-
"description": "发生时间",
|
|
198
|
-
"type": "string",
|
|
199
|
-
"effect": true
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
"name": "location",
|
|
203
|
-
"description": "发生地点",
|
|
204
|
-
"type": "string",
|
|
205
|
-
"effect": true
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"name": "description",
|
|
209
|
-
"description": "事件描述",
|
|
210
|
-
"type": "string",
|
|
211
|
-
"effect": true
|
|
212
|
-
}
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
"name": "days_after_last_update",
|
|
218
|
-
"description": "距上次更新天数",
|
|
219
|
-
"type": "integer",
|
|
220
|
-
"effect": true
|
|
221
|
-
}
|
|
222
|
-
]
|
|
223
|
-
},
|
|
224
|
-
"actionStatuses": []
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
不要从被替代的原工具复制 URL 或 Header。Mock 工具必须使用当前环境 MockData URL 和当前环境凭据;原接口的域名、认证信息和业务 Header 都不应残留。
|
|
231
|
-
|
|
232
|
-
用实际 `<tool_id>`、host 和安全注入后的本地 state 文件做静态验证,再更新:
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/tools/validate_tool_config.py \
|
|
236
|
-
--data-file /workspace/state/agent-builder/tool_lookup_logistics_mock.json \
|
|
237
|
-
--pretty
|
|
238
|
-
|
|
239
|
-
npx --yes @shulex/cxclawctl@latest api update-plugin \
|
|
240
|
-
--data-file /workspace/state/agent-builder/tool_lookup_logistics_mock.json \
|
|
241
|
-
--pretty
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
## 搜索语义
|
|
245
|
-
|
|
246
|
-
MockData 搜索接口只保留请求 JSON 中的顶层 primitive/wrapper 值和 string;object、array 等复杂值不会进入查询条件。所有保留下来的顶层条件按 AND 精确匹配:
|
|
247
|
-
|
|
248
|
-
```json
|
|
249
|
-
{
|
|
250
|
-
"tracking_number": "TRACK-DEMO-001",
|
|
251
|
-
"carrier": "DemoCarrier",
|
|
252
|
-
"ignored_nested_filter": {
|
|
253
|
-
"status": "InTransit"
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
实际匹配条件只有 `tracking_number` AND `carrier`。接口返回第一条命中记录;没有命中时返回:
|
|
259
|
-
|
|
260
|
-
```json
|
|
261
|
-
{"message":"no result"}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
因此请求参数应优先只暴露必要的顶层查询键,保证不同记录的查询键值组合不重复;不要设计依赖嵌套字段过滤的 Mock 工具。
|
|
265
|
-
|
|
266
|
-
## 回查与调试边界
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
npx --yes @shulex/cxclawctl@latest api query-mock-data \
|
|
270
|
-
--name logistics_mock_<tool_id> --pretty
|
|
271
|
-
|
|
272
|
-
npx --yes @shulex/cxclawctl@latest api get-plugin --id <tool_id> --pretty
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
回查时确认:数据条数和嵌套类型正确;工具仍是 `EXTERNAL_HTTP_CALL`;`meta.category=EXCEL`;`fileName`、URL 中的 `mock_type` 与 ID 一致;方法为 POST;Header 为 `X-Token`。
|
|
276
|
-
|
|
277
|
-
`run-plugin` 会真实调用 MockData 搜索接口。只有用户明确要求或授权时才运行,不能因为它通常是只读查询就自动执行。若今后工具 URL 被改成任何写接口,运行前还必须对具体请求和影响范围做额外确认。
|
|
278
|
-
|
|
279
|
-
若 Mock 工具配置 `actionStatuses`,默认分支可使用 `"condition": {}` 或 UI 兼容形态 `"condition": {"or": []}`;两者都表示空条件且都合法。新建配置推荐前者。
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# 工具 Overview
|
|
2
|
-
|
|
3
|
-
工具是 Agent 可调用的外部能力,常见类型是 `EXTERNAL_HTTP_CALL`。底层 API 和字段名仍使用 `plugin` / `pluginId` / `queryPlugin`。
|
|
4
|
-
|
|
5
|
-
## 常用命令
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx --yes @shulex/cxclawctl@latest api list-plugins --pretty
|
|
9
|
-
npx --yes @shulex/cxclawctl@latest api get-plugin --id <tool_id> --pretty
|
|
10
|
-
npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/tools/validate_tool_config.py \
|
|
11
|
-
--data-file /workspace/state/agent-builder/tool_<name>.json --pretty
|
|
12
|
-
npx --yes @shulex/cxclawctl@latest api create-plugin \
|
|
13
|
-
--data-file /workspace/state/agent-builder/tool_<name>.json --pretty
|
|
14
|
-
npx --yes @shulex/cxclawctl@latest api update-plugin \
|
|
15
|
-
--data-file /workspace/state/agent-builder/tool_<name>.json --pretty
|
|
16
|
-
npx --yes @shulex/cxclawctl@latest api run-plugin \
|
|
17
|
-
--data-file /workspace/state/agent-builder/run_tool_config.json --pretty
|
|
18
|
-
npx --yes @shulex/cxclawctl@latest api replace-mock-data \
|
|
19
|
-
--name <mock_type> --data-file /workspace/state/agent-builder/mock_records.json --pretty
|
|
20
|
-
npx --yes @shulex/cxclawctl@latest api query-mock-data \
|
|
21
|
-
--name <mock_type> --pretty
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
`list-plugins` 只返回精简列表。排查或配置入参、出参、`actionStatuses` 时用 `get-plugin` 查看完整定义。Header 与其他工具字段一样通过 `headerParams` 配置。MockData 命令复用 `--name` 表示 `mock_type`,不是工具名。
|
|
25
|
-
|
|
26
|
-
## 创建流程
|
|
27
|
-
|
|
28
|
-
普通 HTTP 工具按以下顺序处理:
|
|
29
|
-
|
|
30
|
-
1. `list-plugins --pretty` 查重。
|
|
31
|
-
2. 将配置写入 `/workspace/state/agent-builder/tool_<name>.json`;跨轮配置不能写 `/workspace/tmp/`。
|
|
32
|
-
3. 运行 `validate_tool_config.py` 做静态验证。它不只检查 JSON 语法,还检查参数树、状态映射的精确字段路径、类型和关系。
|
|
33
|
-
4. 展示和配置摘要,请用户确认。
|
|
34
|
-
5. 执行 `create-plugin --data-file ...`。
|
|
35
|
-
6. 从创建结果取得 ID,再执行 `get-plugin --id <tool_id> --pretty`,确认服务端保存后的完整定义与预期一致。
|
|
36
|
-
|
|
37
|
-
Mock 工具必须先创建占位工具取得 ID,才能生成唯一的 `mock_type`;其完整顺序、安全确认和回查方式见 `mock-tool.md`。
|
|
38
|
-
|
|
39
|
-
`run-plugin` 会实际请求工具配置中的目标接口。其 data file 必须使用 `{"externalHttpCallConfig": {...}, "externalHttpCallRequestBody": {...}}` envelope,完整示例见 `http-tool.md`。只有用户明确要求或授权调试时才能运行;若目标是写接口,还要在执行前单独确认。它不是创建工具的默认步骤,也不能表述为“上线前必须运行”。
|
|
40
|
-
|
|
41
|
-
## 详细文档
|
|
42
|
-
|
|
43
|
-
- HTTP 工具结构:`http-tool.md`
|
|
44
|
-
- Mock / Excel / CSV 工具:`mock-tool.md`
|
|
45
|
-
- Agent 工具配置:`tool-config.md`
|
|
46
|
-
- X-Token / header patch:`x-token.md`
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Agent 工具配置
|
|
2
|
-
|
|
3
|
-
## SINGLE_AGENT
|
|
4
|
-
|
|
5
|
-
SINGLE_AGENT 通过 `usedPlugins` 绑定工具。优先使用工具 id 数组:
|
|
6
|
-
|
|
7
|
-
```json
|
|
8
|
-
{
|
|
9
|
-
"usedPlugins": [2019, 2020]
|
|
10
|
-
}
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
配置前必须确认:
|
|
14
|
-
|
|
15
|
-
- 工具 id 存在。
|
|
16
|
-
- requestParam 必填项能由 LLM、metadata、固定值或上下文提供。
|
|
17
|
-
- prompt 里提到的工具都在 `usedPlugins` 中。
|
|
18
|
-
|
|
19
|
-
## CHAT_FLOW
|
|
20
|
-
|
|
21
|
-
CHAT_FLOW 有两种用法:
|
|
22
|
-
|
|
23
|
-
- `TOOL` 节点:直接调用单个工具,适合结构化结果和 actionStatus 分支。
|
|
24
|
-
- `AGENT` 节点 `usedPlugins`:让 LLM 调工具并解释结果,适合非结构化判断。
|
|
25
|
-
|
|
26
|
-
构图细节读:
|
|
27
|
-
|
|
28
|
-
- `../chatflow/nodes/tool.md`
|
|
29
|
-
- `../chatflow/nodes/agent.md`
|
|
30
|
-
- `../chatflow/node-selection.md`
|
|
31
|
-
|
|
32
|
-
## 查看详情
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx --yes @shulex/cxclawctl@latest api get-plugin --id <tool_id> --pretty
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
重点看:
|
|
39
|
-
|
|
40
|
-
- `meta.externalHttpCallConfig.requestParam.items`
|
|
41
|
-
- `meta.externalHttpCallConfig.responseParam.items`
|
|
42
|
-
- `meta.externalHttpCallConfig.actionStatuses`
|
|
43
|
-
- `headerParams`
|