@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.
Files changed (208) hide show
  1. package/README.md +25 -22
  2. package/dist/cli.js +2202 -127
  3. package/dist/cli.js.map +1 -1
  4. package/package.json +19 -6
  5. package/capabilities.lock.json +0 -898
  6. package/requirements-cli.txt +0 -2
  7. package/skills/__lib__/__init__.py +0 -0
  8. package/skills/__lib__/skill-runtime/bootstrap.py +0 -134
  9. package/skills/__lib__/solvea-api/__init__.py +0 -0
  10. package/skills/__lib__/solvea-api/client.py +0 -1944
  11. package/skills/__lib__/solvea-api/dashboard.py +0 -100
  12. package/skills/__lib__/solvea-api/solvea_api.py +0 -1341
  13. package/skills/agent-analytics/SKILL.md +0 -74
  14. package/skills/agent-analytics/references/chat-report-fields.md +0 -36
  15. package/skills/agent-analytics/references/report-fields.md +0 -130
  16. package/skills/agent-analytics/references/transcript.md +0 -110
  17. package/skills/agent-builder/SKILL.md +0 -42
  18. package/skills/agent-builder/interfaces/fallback-chatflow.md +0 -47
  19. package/skills/agent-builder/references/chatflow/graph-spec.md +0 -259
  20. package/skills/agent-builder/references/chatflow/node-selection.md +0 -89
  21. package/skills/agent-builder/references/chatflow/nodes/agent.md +0 -350
  22. package/skills/agent-builder/references/chatflow/nodes/business-track.md +0 -43
  23. package/skills/agent-builder/references/chatflow/nodes/code.md +0 -157
  24. package/skills/agent-builder/references/chatflow/nodes/collect-order.md +0 -47
  25. package/skills/agent-builder/references/chatflow/nodes/finish.md +0 -34
  26. package/skills/agent-builder/references/chatflow/nodes/human-review.md +0 -60
  27. package/skills/agent-builder/references/chatflow/nodes/if-else.md +0 -100
  28. package/skills/agent-builder/references/chatflow/nodes/intent.md +0 -79
  29. package/skills/agent-builder/references/chatflow/nodes/knowledge-reply.md +0 -43
  30. package/skills/agent-builder/references/chatflow/nodes/llm.md +0 -117
  31. package/skills/agent-builder/references/chatflow/nodes/note.md +0 -38
  32. package/skills/agent-builder/references/chatflow/nodes/question.md +0 -97
  33. package/skills/agent-builder/references/chatflow/nodes/rag-reply.md +0 -68
  34. package/skills/agent-builder/references/chatflow/nodes/reply.md +0 -97
  35. package/skills/agent-builder/references/chatflow/nodes/start.md +0 -35
  36. package/skills/agent-builder/references/chatflow/nodes/sub-graph.md +0 -48
  37. package/skills/agent-builder/references/chatflow/nodes/tool.md +0 -138
  38. package/skills/agent-builder/references/chatflow/nodes/transfer-to-human.md +0 -63
  39. package/skills/agent-builder/references/chatflow/nodes/variable-assignment.md +0 -52
  40. package/skills/agent-builder/references/chatflow/nodes/variable-extract.md +0 -50
  41. package/skills/agent-builder/references/chatflow/nodes/variable-process.md +0 -70
  42. package/skills/agent-builder/references/chatflow/overview.md +0 -53
  43. package/skills/agent-builder/references/chatflow/visual-translation.md +0 -64
  44. package/skills/agent-builder/references/chatflow/workflow.md +0 -134
  45. package/skills/agent-builder/references/multi-agent/create-update.md +0 -185
  46. package/skills/agent-builder/references/multi-agent/graph-spec.md +0 -246
  47. package/skills/agent-builder/references/multi-agent/graph-structure.md +0 -12
  48. package/skills/agent-builder/references/multi-agent/migrate-to-chatflow.md +0 -13
  49. package/skills/agent-builder/references/multi-agent/migration/large.md +0 -554
  50. package/skills/agent-builder/references/multi-agent/migration/principles.md +0 -446
  51. package/skills/agent-builder/references/multi-agent/migration/small.md +0 -225
  52. package/skills/agent-builder/references/multi-agent/orchestration.md +0 -11
  53. package/skills/agent-builder/references/multi-agent/overview.md +0 -48
  54. package/skills/agent-builder/references/multi-agent/update.md +0 -128
  55. package/skills/agent-builder/references/multi-agent/workflow.md +0 -87
  56. package/skills/agent-builder/references/single-agent/overview.md +0 -48
  57. package/skills/agent-builder/references/single-agent/prompt.md +0 -16
  58. package/skills/agent-builder/references/single-agent/tools.md +0 -36
  59. package/skills/agent-builder/references/single-agent/voice.md +0 -46
  60. package/skills/agent-builder/references/tools/http-tool.md +0 -315
  61. package/skills/agent-builder/references/tools/mock-tool.md +0 -279
  62. package/skills/agent-builder/references/tools/overview.md +0 -46
  63. package/skills/agent-builder/references/tools/tool-config.md +0 -43
  64. package/skills/agent-builder/references/tools/x-token.md +0 -34
  65. package/skills/agent-builder/scripts/chatflow/chatflow_builder.py +0 -3458
  66. package/skills/agent-builder/scripts/chatflow/validate_graph.py +0 -1697
  67. package/skills/agent-builder/scripts/copy_marketplace_agent.py +0 -61
  68. package/skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py +0 -5974
  69. package/skills/agent-builder/scripts/multi-agent/replay_compare.py +0 -679
  70. package/skills/agent-builder/scripts/patch_agent_tools.py +0 -135
  71. package/skills/agent-builder/scripts/tools/validate_tool_config.py +0 -384
  72. package/skills/agent-tester/SKILL.md +0 -35
  73. package/skills/agent-tester/batch-test/overview.md +0 -86
  74. package/skills/agent-tester/scripts/batch_test_sheet.py +0 -213
  75. package/skills/agent-tester/single-test/badcase-retest.md +0 -85
  76. package/skills/agent-tester/single-test/direct-test.md +0 -24
  77. package/skills/agent-tester/single-test/overview.md +0 -142
  78. package/skills/delivery/SKILL.md +0 -112
  79. package/skills/delivery/interfaces/classify.md +0 -38
  80. package/skills/delivery/interfaces/create-agents.md +0 -89
  81. package/skills/delivery/interfaces/delivery-test.md +0 -67
  82. package/skills/delivery/references/flow.md +0 -40
  83. package/skills/delivery/references/validation.md +0 -15
  84. package/skills/delivery/scripts/batch_test.py +0 -704
  85. package/skills/delivery/scripts/classify.py +0 -22
  86. package/skills/delivery/scripts/create_agents.py +0 -695
  87. package/skills/delivery/scripts/gen_delivery_report.py +0 -335
  88. package/skills/delivery/scripts/gen_excel.py +0 -234
  89. package/skills/delivery/scripts/gen_report.py +0 -208
  90. package/skills/delivery/scripts/plan.py +0 -163
  91. package/skills/delivery/scripts/render.py +0 -713
  92. package/skills/delivery/scripts/render_summary.py +0 -38
  93. package/skills/delivery/scripts/sample_history_cases.py +0 -109
  94. package/skills/kb-builder/SKILL.md +0 -80
  95. package/skills/kb-builder/interfaces/qa-upload.md +0 -55
  96. package/skills/kb-builder/interfaces/web-kb.md +0 -84
  97. package/skills/kb-builder/references/directory.md +0 -373
  98. package/skills/kb-builder/references/export.md +0 -282
  99. package/skills/kb-builder/references/isolation-keywords.md +0 -113
  100. package/skills/kb-builder/references/knowledge.md +0 -153
  101. package/skills/kb-builder/references/product.md +0 -52
  102. package/skills/kb-builder/references/qa-from-help-center.md +0 -58
  103. package/skills/kb-builder/references/qa-from-pdf.md +0 -94
  104. package/skills/kb-builder/references/qa-from-tickets.md +0 -168
  105. package/skills/kb-builder/references/qa-from-web.md +0 -98
  106. package/skills/kb-builder/references/qa-quality.md +0 -73
  107. package/skills/kb-builder/references/reply-template.md +0 -237
  108. package/skills/kb-builder/references/tag-isolation-migration.md +0 -61
  109. package/skills/kb-builder/references/tags.md +0 -45
  110. package/skills/kb-builder/references/upload.md +0 -130
  111. package/skills/kb-builder/scripts/batch_extract_ticket_qa.py +0 -333
  112. package/skills/kb-builder/scripts/build_directory_plan.py +0 -144
  113. package/skills/kb-builder/scripts/crawl_site.py +0 -433
  114. package/skills/kb-builder/scripts/create_dirs.py +0 -146
  115. package/skills/kb-builder/scripts/export_knowledge.py +0 -454
  116. package/skills/kb-builder/scripts/extract_ticket_qa.py +0 -441
  117. package/skills/kb-builder/scripts/extract_web_qa.py +0 -118
  118. package/skills/kb-builder/scripts/import_qa.py +0 -219
  119. package/skills/kb-builder/scripts/import_source_documents.py +0 -143
  120. package/skills/kb-builder/scripts/import_templates.py +0 -409
  121. package/skills/poc/SKILL.md +0 -125
  122. package/skills/poc/assets/default_manual.css +0 -279
  123. package/skills/poc/assets/notice_escalate.png +0 -0
  124. package/skills/poc/assets/notice_escalate2.png +0 -0
  125. package/skills/poc/assets/notice_new_chat.png +0 -0
  126. package/skills/poc/assets/poc_test_template.html +0 -645
  127. package/skills/poc/assets/poc_test_template.md +0 -104
  128. package/skills/poc/assets/step3_preview.png +0 -0
  129. package/skills/poc/assets/step4_order_note.png +0 -0
  130. package/skills/poc/interfaces/classify.md +0 -38
  131. package/skills/poc/interfaces/create-agents.md +0 -108
  132. package/skills/poc/interfaces/poc-test.md +0 -94
  133. package/skills/poc/references/flow.md +0 -47
  134. package/skills/poc/references/kb-directory.md +0 -22
  135. package/skills/poc/references/validation.md +0 -17
  136. package/skills/poc/scripts/classify.py +0 -22
  137. package/skills/poc/scripts/create_agents.py +0 -818
  138. package/skills/poc/scripts/gen_excel.py +0 -234
  139. package/skills/poc/scripts/gen_poc_manual.py +0 -249
  140. package/skills/poc/scripts/gen_report.py +0 -208
  141. package/skills/poc/scripts/inspect_chatflow.py +0 -209
  142. package/skills/poc/scripts/plan.py +0 -178
  143. package/skills/poc/scripts/poc_test.py +0 -495
  144. package/skills/poc/scripts/render.py +0 -713
  145. package/skills/poc/scripts/render_summary.py +0 -41
  146. package/skills/runtime-inspector/SKILL.md +0 -51
  147. package/skills/runtime-inspector/references/frontend-rendering.md +0 -126
  148. package/skills/runtime-inspector/references/model.md +0 -59
  149. package/skills/runtime-inspector/references/sandbox.md +0 -131
  150. package/skills/runtime-inspector/scripts/model_inspect.py +0 -68
  151. package/skills/runtime-inspector/scripts/prepare.py +0 -98
  152. package/skills/runtime-inspector/scripts/process.py +0 -84
  153. package/skills/runtime-inspector/scripts/read_state.py +0 -32
  154. package/skills/runtime-inspector/scripts/sandbox_inspect.py +0 -463
  155. package/skills/runtime-inspector/scripts/test_claude_proxy.py +0 -49
  156. package/skills/runtime-inspector/scripts/test_openai_proxy.py +0 -41
  157. package/skills/runtime-inspector/scripts/verify_persistence.py +0 -101
  158. package/skills/runtime-inspector/scripts/write_test.py +0 -41
  159. package/skills/setup/SKILL.md +0 -17
  160. package/skills/shulex-support/SKILL.md +0 -39
  161. package/skills/shulex-support/references/badcase-analysis/overview.md +0 -34
  162. package/skills/shulex-support/references/badcase-analysis/text/conversation-record.md +0 -105
  163. package/skills/shulex-support/references/badcase-analysis/text/core-flow.md +0 -89
  164. package/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md +0 -36
  165. package/skills/shulex-support/references/badcase-analysis/text/m1-entry.md +0 -53
  166. package/skills/shulex-support/references/badcase-analysis/text/m10-chatflow-service.md +0 -259
  167. package/skills/shulex-support/references/badcase-analysis/text/m11-algorithm-service.md +0 -148
  168. package/skills/shulex-support/references/badcase-analysis/text/m12-quality-inspection.md +0 -57
  169. package/skills/shulex-support/references/badcase-analysis/text/m2-intent.md +0 -120
  170. package/skills/shulex-support/references/badcase-analysis/text/m3-strategy.md +0 -126
  171. package/skills/shulex-support/references/badcase-analysis/text/m4-aifield.md +0 -121
  172. package/skills/shulex-support/references/badcase-analysis/text/m5-agent.md +0 -208
  173. package/skills/shulex-support/references/badcase-analysis/text/m6-tool.md +0 -115
  174. package/skills/shulex-support/references/badcase-analysis/text/m7-reply.md +0 -72
  175. package/skills/shulex-support/references/badcase-analysis/text/m8-error.md +0 -92
  176. package/skills/shulex-support/references/badcase-analysis/text/m9-knowledge-search.md +0 -147
  177. package/skills/shulex-support/references/badcase-analysis/text/sls-query.md +0 -283
  178. package/skills/shulex-support/references/badcase-analysis/voice/core-flow.md +0 -77
  179. package/skills/shulex-support/references/badcase-analysis/voice/dependencies.md +0 -19
  180. package/skills/shulex-support/references/badcase-analysis/voice/platform-api.md +0 -23
  181. package/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md +0 -31
  182. package/skills/shulex-support/references/product-docs.md +0 -70
  183. package/skills/shulex-support/references/tickets.md +0 -184
  184. package/skills/shulex-support/scripts/support.py +0 -427
  185. package/skills/solvea-desk/SKILL.md +0 -39
  186. package/skills/solvea-desk/references/report/fields.md +0 -82
  187. package/skills/solvea-desk/references/report/report-design.md +0 -200
  188. package/skills/solvea-desk/references/report/report-template.html +0 -44
  189. package/skills/solvea-desk/references/report/report.css +0 -517
  190. package/skills/solvea-desk/references/report/workflow.md +0 -464
  191. package/skills/solvea-desk/references/tickets/query.md +0 -103
  192. package/skills/solvea-desk/references/tickets/tags.md +0 -83
  193. package/skills/solvea-desk/scripts/report/fetch_sources.py +0 -580
  194. package/skills/solvea-desk/scripts/report/render_report.py +0 -763
  195. package/skills/solvea-desk/scripts/tickets/desk_api.py +0 -73
  196. package/skills/solvea-desk/scripts/tickets/fetch_tickets.py +0 -403
  197. package/skills/solvea-desk/scripts/tickets/ticket_tags.py +0 -305
  198. package/skills/solvea-kit/SKILL.md +0 -84
  199. package/skills/solvea-kit/references/agent.md +0 -145
  200. package/skills/solvea-kit/references/chat.md +0 -244
  201. package/skills/solvea-kit/references/intent.md +0 -69
  202. package/skills/solvea-kit/references/plugin.md +0 -53
  203. package/skills/solvea-kit/references/quality-inspection.md +0 -75
  204. package/skills/solvea-kit/references/strategy.md +0 -62
  205. package/skills/solvea-kit/references/tagging.md +0 -231
  206. package/skills/solvea-kit/references/variables.md +0 -53
  207. package/skills/solvea-kit/scripts/generate_label_import_file.py +0 -151
  208. package/skills/solvea-kit/scripts/intent_classify.py +0 -843
@@ -1,64 +0,0 @@
1
- # 流程图读取规范
2
-
3
- 从流程图、白板草图、决策树或 SOP 大图生成 CHAT_FLOW 时,先把图片理解成结构化摘要,再按 `node-selection.md` 选节点、按 `graph-spec.md` 写 source JSON。
4
-
5
- ## 大图读取
6
-
7
- 先由主 agent 对用户上传图片调用一次 `read_file`,拿 overview 和 tile manifest。主 agent 负责全局调度:先从 overview 识别入口、主分支、终点、布局方向和明显缺口,再决定是否需要读取局部 tile。普通小图或 overview 已足够清楚时,不需要 subagent。
8
-
9
- 如果图片过大并返回 tile manifest(`/store/read_file_images/.../tile_r{row}_c{col}.jpg`),创建 chatflow 前必须先完成全图覆盖式理解:不能只根据 overview 或少量 tile 开始构图,也不要一次性读取全部 tile。
10
-
11
- 按迭代方式读图:
12
-
13
- 1. 主 agent 先读 overview 和 manifest,确认行列范围、流程方向、主要区域、入口/终点候选和明显缺口。
14
- 2. 主 agent 写出当前理解:`已识别区域`、`待确认区域`、`需要读取的 tile 范围`。
15
- 3. 每次只派 subagent 读取一个局部连续区域,例如入口区、某条主流程、某个下方分支或某组看不清的节点。
16
- 4. subagent 只读取主 agent 指定的少量 tile,输出局部摘要:`区域位置`、`入口/出口`、`节点文字`、`边/流转`、`条件分支`、`跨 tile 连接点`、`转人工/结束点`、`看不清的问题`。
17
- 5. 主 agent 合并局部摘要后更新全局结构和缺口列表;如果入口、主要分支、跨 tile 连接、结束节点或关键话术仍未覆盖,再派下一次 subagent 读必要 tile。
18
- 6. 只有主要流程、关键分支、跨 tile 连接点和结束节点均已覆盖后,才能开始落 chatflow。
19
- 7. 如果仍有看不清的区域,必须在摘要里显式标注不确定点;不能臆造节点、边或话术。
20
-
21
- 给 subagent 的 prompt 写清:
22
-
23
- - 原图虚拟路径、tile manifest、待读 tile 列表和本次局部目标;subagent 不会自动看到主 agent 已读过的内容。
24
- - 只读指定 tile;除非指定 tile 明显不够且会影响本次目标,才最多补读相邻 tile,并在摘要里说明原因。
25
- - 只输出结构化摘要,不生成 chatflow JSON,不调用 CLI,不写文件,不探索 `/skills/`、`/skill-lib/` 或凭证文件。
26
- - 每个 subagent 只负责一个局部区域,并输出压缩后的结构化摘要。
27
-
28
- ## 结构化摘要
29
-
30
- 读图完成后先写摘要,再建 source:
31
-
32
- ```text
33
- Direction: top-to-bottom / left-to-right / mixed
34
- Entry: <入口节点文字>
35
- Terminal nodes: <结束/转人工/子流程>
36
-
37
- Nodes:
38
- - <编号> <原图文字> | role=<业务作用> | outgoing=<出口>
39
-
40
- Edges:
41
- - <from> --<条件/按钮/状态>--> <to>
42
-
43
- Unclear:
44
- - <看不清或需要用户确认的点>
45
- ```
46
-
47
- ## 落图顺序
48
-
49
- 1. 识别入口、终点、转人工点。
50
- 2. 用 `node-selection.md` 为每个业务节点选择 CHAT_FLOW 节点类型。
51
- 3. 用 `graph-spec.md` 写 source JSON 和 edges。
52
- 4. 只读取实际用到的 `nodes/*.md` 补字段和资源依赖。
53
-
54
- ## 视觉到节点的快速提示
55
-
56
- - 矩形且由确定状态必然发送的固定回复:通常是 `REPLY(TEMPLATE)`,先查模板库。若图中表达的是某个
57
- 模型节点必须遵循的 PE/输出话术约束,则保留在该节点的实际文本字段,不因“固定话术”标签强制改成 REPLY。
58
- - 菱形简单条件:通常是 `IF_ELSE`。
59
- - 用户选项/按钮:通常是 `QUESTION(USER_REPLY)`。
60
- - 流程图中的 Y/N、True/False、满足/不满足:默认是条件分支,不是用户按钮;Y 表示条件满足,N 表示条件不满足,通常映射为 `IF_ELSE` 的 case/FALSE 或工具 `actionStatus`。只有明确写着“请用户选择是/否”时才映射为 `QUESTION(USER_REPLY)`。
61
- - 查询接口/调用系统:`TOOL -> IF_ELSE` 或 `AGENT(with tools, next_steps)`。
62
- - 知识库回答:默认 `RAG_REPLY`。
63
- - 红色转人工:`TRANSFER_TO_HUMAN`。
64
- - 结束:默认连共享 `$finish`。
@@ -1,134 +0,0 @@
1
- # Chatflow 工作流
2
-
3
- ## 大图的流程块实现
4
-
5
- 整体流程图已经确认且单次上下文不适合实现整张大图时,按确认图中的稳定流程块分别实现 source fragment,
6
- 不要把整份大图重新塞回一次模型上下文。流程块来自当前任务已经确认的设计,不依赖任何特定上游图格式或
7
- 迁移字段。每个 fragment 只包含该流程块的 `nodes` 和块内 `edges`,节点 `key` 必须全局唯一;fragment
8
- 不写 `entry`,也不能写到另一流程块的边。
9
-
10
- 最终 integration 文件只拥有全图 `entry` 和流程块之间的边,不定义节点。例如:
11
-
12
- ```json
13
- {
14
- "entry": "collect_order",
15
- "edges": [
16
- {"from": "collect_order", "to": "lookup_order"}
17
- ]
18
- }
19
- ```
20
-
21
- 所有 fragment 完成后,先合并 source,再只编译一次最终 source:
22
-
23
- ```bash
24
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py merge-source \
25
- --fragment-file /workspace/state/agent-builder/chatflow/<task>/blocks/collect_order.json \
26
- --fragment-file /workspace/state/agent-builder/chatflow/<task>/blocks/lookup_order.json \
27
- --integration-file /workspace/state/agent-builder/chatflow/<task>/blocks/integration.json \
28
- --out-file /workspace/state/agent-builder/chatflow/<task>_source.json \
29
- --pretty
30
- ```
31
-
32
- 随后对这份唯一 source 执行 `compile` 和 `validate`。不要分别编译流程块,也不要合并已编译的 graph JSON;
33
- 后者会重复生成入口、节点 id、布局和共享终端。
34
-
35
- ## 新建
36
-
37
- 1. 如果输入是截图或 PDF,先读 `visual-translation.md` 得到结构化摘要。
38
- 2. 读 `node-selection.md` 形成候选节点组合。
39
- 3. 在写 source 前,必须先向用户展示拟构建 Mermaid、节点职责、边条件(默认将 Y 解释为“条件满足”、N 解释为“条件不满足”,并说明是否存在用户确认语义)、等待/收集点和不确定点;结构性流程未经用户确认不得 compile 或 deploy。若当前任务已经有确认过的整体流程图,直接复用该确认,不重复增加确认轮次。
40
- 4. 在最终选择节点前,必须读取每个候选节点对应的 `nodes/*.md` 定义,确认 role、edges、
41
- prompt/字段约束和常见误用;不要只凭节点名理解用途。
42
- 5. 普通小图按 `graph-spec.md` 写 source JSON 到 `/workspace/state/agent-builder/chatflow/<task>_source.json`;
43
- 大图按上一节写流程块 fragment,再合并为这份 source。
44
- 6. 再次按已选节点的 `nodes/*.md` 补齐字段和资源 id。
45
- AGENT 内需要模型自主决定是否执行的模板、普通工具和转人工动作使用 `nodes/agent.md` 定义的标准
46
- LibraryBlock;确定性动作仍使用对应独立节点,不能只写普通文字描述。
47
- 7. 检查变量来源:CHAT_FLOW 不感知 `metadata` 路径,所有节点都禁止写 `metadata.xxx`。AGENT / `REPLY(PROMPT)` 如需稳定使用上游输出,先用 `VARIABLE_PROCESS` 桥接到变量系统字段;`REPLY(DYNAMIC_TEMPLATE)`、LLM 和 HUMAN_REVIEW 的模板可直接使用其支持的上游 selector。
48
- 8. 编译同一份 source:
49
-
50
- ```bash
51
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py compile \
52
- --source-file /workspace/state/agent-builder/chatflow/<task>_source.json \
53
- --graph-file /workspace/state/agent-builder/chatflow/<task>_graph.json \
54
- --pretty
55
- ```
56
-
57
- 9. 校验同一份 graph:
58
-
59
- ```bash
60
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py validate \
61
- --graph-file /workspace/state/agent-builder/chatflow/<task>_graph.json \
62
- --pretty
63
- ```
64
-
65
- 10. 失败就改同一个 source 后重新 compile + validate。若只出现 `queryAiFields` / `field/internal/list` / `tars: Name does not resolve` 相关 warning,说明变量字段服务不可用;没有字段 id 依赖的图可继续后续确认,不要改图结构绕开。
66
- 含 LibraryBlock 的 AGENT 还要核对:模板块使用具体模板内容 ID、模板状态为 `ENABLED`、`usedPlugins`
67
- 已包含普通工具 ID,并从 Chatflow 专用插件目录按类型绑定当前项目真实的 `TEMPLATE_REPLY` /
68
- `TRANSFER_TO_HUMAN` 系统插件 ID;同时确认 `transferToHumans=[]`、runtime `prompt` 与 `displayPrompt`
69
- 同步、nextStep 没有被误当成人工接管。
70
- 11. 校验通过后确认是否写入当前环境和 agent 名称;若当前任务先前的整体确认已经明确包含目标环境、名称和
71
- 保存草稿授权,直接复用,不重复询问。
72
- 12. 用户确认后 deploy 同一份 graph。一次创建多个 CHAT_FLOW agent 时,顺序执行每个 `deploy`;不要用 shell `&` 并发部署多个 agent。
73
- 13. deploy 或现有图 update 后执行一次 `inspect` 回读;逐个检查 LibraryBlock 仍为标准格式。默认只保存草稿,
74
- 除非用户明确要求发布,不执行 `publish`。
75
-
76
- 本地无网络或尚未准备登录态时,可在 compile 和 validate 后加 `--offline` 做结构预检。离线模式跳过远端 AI 字段、插件存在性和插件参数合同检查;上传前必须联网复核。
77
-
78
- ## 增量修改
79
-
80
- 1. 先 inspect 拉当前图,并写入本次 patch graph:
81
-
82
- ```bash
83
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py inspect \
84
- --agent-id <agent_id> \
85
- --out /workspace/state/agent-builder/chatflow/patch_<agent_id>_graph.json \
86
- --pretty
87
- ```
88
-
89
- 2. inspect 得到的完整 graph 是已有流程的编辑基线。已有 ChatFlow 的维护沿用 inspect 得到的 patch graph,可在这份 patch graph 上修改节点字段、增删节点、修改边、拆分条件分支或调整路由等,保持未涉及节点及其原始配置不变。
90
- 3. validate patch graph 通过后默认 update 保存草稿,不发布:
91
-
92
- ```bash
93
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py update \
94
- --agent-id <agent_id> \
95
- --graph-file /workspace/state/agent-builder/chatflow/patch_<agent_id>_graph.json \
96
- --pretty
97
- ```
98
-
99
- 4. 用户明确确认发布后,对同一份 graph 执行 publish:
100
-
101
- ```bash
102
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py publish \
103
- --agent-id <agent_id> \
104
- --graph-file /workspace/state/agent-builder/chatflow/patch_<agent_id>_graph.json \
105
- --pretty
106
- ```
107
-
108
- ## 变更方案说明
109
-
110
- - 新建图方案,或增量任务涉及新增 / 删除节点、修改边、调整条件分支、改变入口出口或路由关系等结构性修改时,面向用户的说明里应附一段 Mermaid,概括修改后的流程结构,帮助用户确认理解是否一致。
111
- - 大图不要完整铺开,优先展示受影响子图,并保留这段子图与上游入口、下游出口的连接关系;必要时再补一句未展示区域保持不变。
112
- - Mermaid 必须根据 inspect 得到的现有图、待写入的 source / graph 以及 validate 结果生成。条件边使用真实出边语义或 handle;代码节点必须明确标成代码节点,并展示它实际连接的上下游,不能因为代码内容复杂就从图中省略。
113
- - 只修改 prompt、话术、模型参数、工具入参映射或单个节点内部字段,且不改变节点和边时,不强制输出 Mermaid。
114
- - 对已有图、节点配置或提示词提出修改方案时,用户确认前按整体输出规则用 `diff` 展示受影响片段的前后差异;结构性修改可同时提供 Mermaid 和 diff,分别说明流程关系与具体配置变化。
115
- - 用户确认前展示的是“拟修改结构”;update / deploy 后展示的是实际校验通过的结构。不要把尚未写入的方案描述成已经生效。
116
- - Mermaid 只用于解释,不能替代 source JSON、graph JSON 或 validate。图示与实际 graph 不一致时,以校验通过的 graph 为准,并立即修正图示。
117
-
118
- ## 状态和留档
119
-
120
- - 工作中的 source / graph 放 `/workspace/state/agent-builder/chatflow/`。
121
- - 大图的 fragment 与 integration 放 `/workspace/state/agent-builder/chatflow/<task>/blocks/`;合并后的唯一 source
122
- 仍放 `/workspace/state/agent-builder/chatflow/<task>_source.json`。
123
- - 文件名稳定,跨轮覆盖,便于继续。
124
- - 等用户确认后继续执行的配置文件也放 `/workspace/state/agent-builder/chatflow/`,不要放 `/workspace/tmp/`。
125
- - 只有用户明确要求下载或留档,才复制到 `/workspace/outputs/agent-builder/chatflow/`。
126
-
127
- ## 禁止
128
-
129
- - 不写临时 Python 脚本承载构图、校验、部署。
130
- - 不 import `chatflow_builder.py`。
131
- - 不用 `update-agent --id ... --data-file graph.json` 写回纯 graph。
132
- - 不在用户确认前新建或发布。
133
- - 不在任何节点 prompt、selector、条件、工具入参或代码输入里写 `metadata.xxx`;变量系统字段通过 ai-fields
134
- 暴露,需要变量时按节点契约使用 `SYSTEM` selector、`ai_field_ids` 或支持的上游变量模板。
@@ -1,185 +0,0 @@
1
- # MULTI_AGENT Create / Update
2
-
3
- Deprecated:本文件是旧版 create/update 说明,保留用于历史引用。当前规则以 `overview.md` 和
4
- `workflow.md` 为准:不支持新建 `MULTI_AGENT`;用户要求新建多节点流程时切到 `../chatflow/overview.md`。
5
- 只有用户明确要求维护已有 `MULTI_AGENT` 时,读取 `workflow.md`、`graph-spec.md` 和 `update.md`。
6
-
7
- ## 触发条件
8
-
9
- 符合任一条件才进入本文件:
10
-
11
- - 用户要求更新一个已有 `MULTI_AGENT`,且提供 agent_id 或完整旧 JSON
12
- - 用户明确不要 CHAT_FLOW,而要旧 multi-agent 形态
13
-
14
- 如果用户只是说“多节点、多分支、流程图、工具状态分支”,但没有明确指定 MULTI_AGENT,回到 `../chatflow/overview.md`。
15
-
16
- ## 用户需求理解
17
-
18
- 创建或更新前,先把需求整理成结构化设计,不直接写 payload。
19
-
20
- 必须确认:
21
-
22
- - 业务目标:这个 agent 解决什么问题
23
- - 入口 agent:用户第一句话进入哪个 agent
24
- - 子 agent 职责:每个 agent 的名称、角色、prompt 目标
25
- - 工具:每个 agent 绑定哪些真实 `usedPlugins`,工具 id 是否已存在
26
- - 工具状态分支:`actionStatuses` 和每个 status 后的 action
27
- - 显式边:是否需要 `agentEdges`
28
- - 模板回复:template id / template content 来源
29
- - 转人工:哪些场景转人工,是否先回复
30
- - 结束:哪些场景 finish,是否先回复
31
- - KB:是否启用、目录 id、标签 id;只有已启用或启用状态未知且目录缺失时才提 `open_questions`,明确未启用只保留审计
32
- - 兜底:未知意图、工具异常、用户信息不足时怎么处理
33
-
34
- 输出给用户确认时必须包含 Mermaid:
35
-
36
- ```mermaid
37
- flowchart TD
38
- A["entry old agent: collect_order"]
39
- B["old agent: lookup_order<br/>tool: get_order"]
40
- C["old agent: reply_shipping"]
41
- H["transfer"]
42
- A --> B
43
- B -->|"found"| C
44
- B -->|"not found"| H
45
- ```
46
-
47
- 用户未确认 Mermaid、agent 清单、工具清单和 action 清单前,不调用 create / update。
48
-
49
- ## 存量更新流程
50
-
51
- 1. 读 `overview.md`、`workflow.md`、`graph-spec.md` 和 `update.md`。
52
- 2. 若涉及工具,按 `../tools/overview.md` 查工具 id 和完整配置。
53
- 3. 写 payload 到:
54
-
55
- ```text
56
- /workspace/state/agent-builder/multi-agent/create_<name>_payload.json
57
- ```
58
-
59
- 4. 向用户展示摘要和 Mermaid,请用户确认。
60
- 5. 用户确认后执行:
61
-
62
- ```bash
63
- npx --yes @shulex/cxclawctl@latest api create-agent \
64
- --data-file /workspace/state/agent-builder/multi-agent/create_<name>_payload.json \
65
- --pretty
66
- ```
67
-
68
- ## 最小 Payload
69
-
70
- ```json
71
- {
72
- "name": "Shipping_Inquiry_Multi",
73
- "type": "MULTI_AGENT",
74
- "category": "TEXT",
75
- "source": "MANUAL",
76
- "prompt": "",
77
- "displayPrompt": "",
78
- "usedPlugins": [],
79
- "meta": {
80
- "multiAgentGraph": {
81
- "entryAgentId": "agent_collect_order",
82
- "agents": [
83
- {
84
- "id": "agent_collect_order",
85
- "name": "collect_order",
86
- "type": "AGENT",
87
- "prompt": "Collect the order number from the customer.",
88
- "displayPrompt": "Collect the order number from the customer.",
89
- "usedPlugins": [],
90
- "meta": {}
91
- }
92
- ],
93
- "agentEdges": [],
94
- "displayData": {}
95
- }
96
- }
97
- }
98
- ```
99
-
100
- 实际创建时必须用服务端接受的 id 格式。若没有可复用旧 id,先用稳定字符串 id 生成草稿并请用户确认;如果环境要求数字 id,则在 create 前改为符合旧引擎约束的 id。
101
-
102
- ## Tool Action 示例
103
-
104
- 外部工具分支必须放在工具配置的 `toolAfterExecuteActions`,不要只写进 prompt:
105
-
106
- ```json
107
- {
108
- "id": 8299,
109
- "name": "get_order_info",
110
- "type": "EXTERNAL_HTTP_CALL",
111
- "meta": {
112
- "externalHttpCallConfig": {
113
- "requestParam": {"items": []},
114
- "responseParam": {"items": []},
115
- "actionStatuses": [
116
- {"name": "ORDER_FOUND", "condition": {"and": []}},
117
- {"name": "ORDER_NOT_FOUND", "condition": {"or": []}}
118
- ]
119
- },
120
- "toolAfterExecuteActions": [
121
- {
122
- "matchStatus": "ORDER_FOUND",
123
- "actions": [{"type": "SWITCH_AGENT", "value": "agent_reply_order"}]
124
- },
125
- {
126
- "matchStatus": "ORDER_NOT_FOUND",
127
- "actions": [{"type": "TRANSFER_TO_HUMAN"}]
128
- }
129
- ]
130
- }
131
- }
132
- ```
133
-
134
- ## 更新流程
135
-
136
- 更新已有 MULTI_AGENT 必须先取完整对象,不允许只提交局部 patch:
137
-
138
- ```bash
139
- npx --yes @shulex/cxclawctl@latest api get-agent --id <agent_id> --pretty
140
- ```
141
-
142
- 将完整对象保存到:
143
-
144
- ```text
145
- /workspace/state/agent-builder/multi-agent/update_<agent_id>_payload.json
146
- ```
147
-
148
- 修改后展示 diff 摘要和 Mermaid,请用户确认。确认后执行:
149
-
150
- ```bash
151
- npx --yes @shulex/cxclawctl@latest api update-agent \
152
- --data-file /workspace/state/agent-builder/multi-agent/update_<agent_id>_payload.json \
153
- --pretty
154
- ```
155
-
156
- 约束:
157
-
158
- - `agentId` 必须等于 `id`
159
- - `type` 必须保持 `MULTI_AGENT`
160
- - 不删除未知字段;完整对象更新时保留服务端已有字段
161
- - 修改 prompt 时同步 `prompt` 和 `displayPrompt`,但不要插入 `{{Template_Reply}}` 这类旧编辑器占位符
162
- - 工具 id 必须真实存在;先 `get-plugin`
163
- - action 目标 agent 必须存在于 `multiAgentGraph.agents[]`
164
- - 新增 template / KB / transfer 行为必须写出 open question 和用户确认
165
-
166
- ## 创建 / 更新结果
167
-
168
- 执行成功后必须告诉用户:
169
-
170
- ```text
171
- === MULTI_AGENT Result ===
172
- Action: create/update
173
- Agent: <id> "<name>"
174
- Agents: N
175
- Tools: N
176
- Explicit agentEdges: N
177
- Tool action edges: N
178
- Template replies: N
179
- Transfer actions: N
180
- Finish actions: N
181
- Open questions resolved: N
182
- ```
183
-
184
- 如果用户后续要迁到 CHAT_FLOW,再切到 `workflow.md` 的“迁移到 CHAT_FLOW”,并按 `migration/principles.md`
185
- 与 `migration/large.md` / `migration/small.md` 执行。
@@ -1,246 +0,0 @@
1
- # MULTI_AGENT Graph Spec
2
-
3
- 本文件只解释 legacy MULTI_AGENT 的旧 JSON 结构、证据优先级和清洗规则,不包含目标图映射。
4
-
5
- ## 输入形态
6
-
7
- analyzer 和人工阅读都应支持三种输入:
8
-
9
- ```json
10
- {"id": 123, "type": "MULTI_AGENT", "meta": {"multiAgentGraph": {"agents": [], "agentEdges": []}}}
11
- ```
12
-
13
- ```json
14
- [{"category": "TEXT", "meta": {"multiAgentGraph": {"agents": [], "agentEdges": []}}}]
15
- ```
16
-
17
- ```json
18
- {"entryAgentId": "agent_a", "agents": [], "agentEdges": []}
19
- ```
20
-
21
- ## 核心字段
22
-
23
- | 字段 | 说明 |
24
- |------|------|
25
- | `entryAgentId` | 旧图入口 agent id;没有时用入边推断 |
26
- | `agents[]` | 子 agent 列表 |
27
- | `agents[].id/name/type` | 子 agent 标识、名称、类型 |
28
- | `agents[].prompt` | 旧 PE,保留业务语义,但不能覆盖结构化 action/tool 证据 |
29
- | `agents[].displayPrompt` | 前端展示内容,常含 HTML 和占位符;默认不作为模型输入 |
30
- | `agents[].usedPlugins[]` | 真实绑定工具 |
31
- | `agentEdges[]` | 显式 old agent 跳转 |
32
- | `meta.classifierPlugin` | 旧分类器及其 action |
33
- | `meta.templateReplyPlugin` | 模板回复结构能力 |
34
- | `meta.transferToHumanPlugin` / `transferToHumans[]` | 转人工结构能力 |
35
- | `meta.finishAgentPlugin` | 结束结构能力 |
36
- | `meta.knowledgeAiReplyPlugin` | 旧知识回复配置 |
37
-
38
- ## 工具字段
39
-
40
- | 字段 | 说明 |
41
- |------|------|
42
- | `usedPlugins[].id/name/type` | 工具 id、名称、类型 |
43
- | `usedPlugins[].meta.externalHttpCallConfig.requestParam` | 外部工具入参 |
44
- | `usedPlugins[].meta.externalHttpCallConfig.responseParam` | 外部工具出参 |
45
- | `usedPlugins[].meta.externalHttpCallConfig.actionStatuses[]` | 工具状态分支 |
46
- | `usedPlugins[].meta.toolAfterExecuteActions[]` | 工具执行后的结构化 action |
47
-
48
- `toolAfterExecuteActions[].actions[]` 常见 action:
49
-
50
- | type | 旧图控制语义 |
51
- |------|----------|
52
- | `SWITCH_AGENT` | 跳到另一个 old agent |
53
- | `TEMPLATE_REPLY` | 执行模板回复动作 |
54
- | `TRANSFER_TO_HUMAN` | 发起人工接管动作 |
55
- | `FINISH_AGENT` | 结束当前处理 |
56
-
57
- ### 运行时控制语义
58
-
59
- Java `MultiAgentService.getLangGraphStructure` 会把 legacy multi 转成 agent_graph 结构:
60
-
61
- - `entryAgentId` 作为唯一入口。
62
- - `agentEdges[]` 会转成 `agent_edges[fromAgentId] = [toAgentId...]`。
63
- - 每个 agent 的内置 meta plugin 和 `usedPlugins[]` 都会变成 agent 可调用工具。
64
- - 每个工具保留自己的 `toolAfterExecuteActions`;外部工具的 action 配置保存在 multi graph 里,刷新工具定义时会补回。
65
-
66
- Python agent_graph 运行时会把 `agentEdges[]` 变成 `transfer_to_<agent_name>` 的 `SWITCH_AGENT`
67
- 工具,只暴露给对应上游 agent;工具 action 中的 `SWITCH_AGENT.value` 是目标 agent id,运行时再
68
- 查成目标 agent name 并跳转。读取旧图时应按以下方式理解:
69
-
70
- - `SWITCH_AGENT` 是控制流,不是外部 HTTP 工具。
71
- - `agentEdges[]` 表示模型可主动选择的相邻 agent;`toolAfterExecuteActions[].actions[].type=SWITCH_AGENT`
72
- 表示某个工具状态或分类结果命中后自动进入目标 agent。
73
- - 目标 agent 是否承载独立 SOP 职责、工具、用户轮次、回复或判断,应作为后续迁移的语义证据;纯跳转壳必须被明确标记,不能与独立职责混淆。
74
-
75
- `toolAfterExecuteActions` 的匹配规则:
76
-
77
- - 外部 HTTP / 订单 / 物流工具按返回的 `__status` 匹配 `matchStatus`。
78
- - classifier 按分类返回的 `category` 匹配 `matchStatus`。
79
- - `matchStatus == null` 是兜底 action,运行时按列表顺序取第一条匹配项。
80
- - 同一个匹配项里的 `actions[]` 是动作序列;可能先有 `TEMPLATE_REPLY` 或
81
- `user_input_template_*`,再 `SWITCH_AGENT` / `TRANSFER_TO_HUMAN` / `FINISH_AGENT`。
82
- 因此迁移时不能只看最终动作,必须保留“先回复/模板,再跳转/转人工/结束”的组合语义。
83
-
84
- ## 证据优先级
85
-
86
- 1. `entryAgentId` 定入口。
87
- 2. `usedPlugins[]` 定真实工具。
88
- 3. `externalHttpCallConfig.actionStatuses[]` 定工具状态分支。
89
- 4. `toolAfterExecuteActions[]` 和 `classifierPlugin.meta.toolAfterExecuteActions[]` 定隐式动作边。
90
- 5. `agentEdges[]` 定显式 old agent 跳转。
91
- 6. template / transfer / finish / KB meta tools 定结构能力。
92
- 7. `prompt` 只补业务语义和话术边界。
93
- 8. `displayPrompt` 只做前端噪音检测、占位符审计和人工核对。
94
-
95
- 证据冲突时,以 action/tool/plugin 结构优先;prompt 冲突进入 `open_questions`。
96
-
97
- ## 前端噪音清洗
98
-
99
- ### 工具渲染壳与真实工具语义必须分开
100
-
101
- 旧 multi 的 `displayPrompt` 不是纯展示文本。编辑器会把工具插入渲染成类似:
102
-
103
- ```html
104
- <span style="color: #00CDAC">{{Obtain_Package_OrderDetails}}</span>
105
- ```
106
-
107
- 这里的 `<span>`、`style` 和嵌套标签是展示壳;`Obtain_Package_OrderDetails` 是工具引用,
108
- 不能因为清洗 HTML 而丢失。解析时必须同时保留三类证据:
109
-
110
- | 证据 | 作用 | 处理方式 |
111
- |------|------|----------|
112
- | `displayPrompt` 中的 `{{ToolName}}` | 编辑器插入的工具 chip | 去掉标签和样式,提取为 `tool_references` |
113
- | `agents[].usedPlugins[]` | 当前 old agent 真正绑定的外部工具 | 保留 id/name/type、请求/响应参数和状态 |
114
- | `meta.*Plugin` / `classifierPlugin` | 系统工具、分类器和模板/转人工能力 | 保留工具类型、配置和 action |
115
-
116
- `tool_references` 必须与结构化工具证据做对账:
117
-
118
- - 引用与 `usedPlugins` 或系统 plugin 匹配:视为已绑定可执行资源,保留其 id/type/action 证据;
119
- 后续映射由迁移文档决定。
120
- - 引用只出现在 `displayPrompt`,但结构化 plugin 存在:保留 plugin 证据,记录为渲染引用。
121
- - 引用只出现在 `displayPrompt`,找不到结构化 plugin:不得静默删除,但只写入 audit warning,
122
- 不生成用户问题。PE 中是否存在可执行引用,由 batch worker 结合完整 PE、结构化资源和流程上下文做
123
- 语义判断;analyzer 不用 `call/use <name> tool` 等短语正则生成 blocking 结论。worker 确认存在动作但仍
124
- 无法确定绑定时,才写入 `open_questions`。
125
- - `Template_Reply`、`Transfer_To_Agent`、`Finish_Agent` 不是普通文案,分别按旧系统动作/终端
126
- 语义记录;其中 template id、transfer reason 和 action status 优先从结构化字段取值。
127
-
128
- 系统知识占位符 `{{KB_Reply}}` 可按 `name=KB_Reply`、`source=SYSTEM`、
129
- `type=KNOWLEDGE_AI_REPLY` 识别。知识配置既可能直接位于 `knowledgeAiReplyPlugin.directoryIds`,也可能
130
- 位于 `knowledgeAiReplyPlugin.meta.knowledgeAiReplyConfig.directoryIds`;后者的启用状态优先。明确
131
- `enable=false` 的 KB 只保留 audit。已启用或启用状态未知的 KB 目录为空才是
132
- blocking 风险:提供可用 directory id 或明确移除该能力。没有插件的 display-only `KB_Reply` 同样只是
133
- audit;只有结构化 SYSTEM 能力或明确可执行 prompt 调用缺失时才进入 blocking open question。
134
-
135
- 必须清掉或降权:
136
-
137
- - `createdAt`、`updatedAt`、`createdBy`、`updatedBy`、`createAtLong`、`updateAtLong`
138
- - `displayData`、`positions`、`viewport`、前端画布样式
139
- - 完整 `displayPrompt` HTML 文本
140
- - `<span style=...>`、嵌套标签和孤立 `style="...">` 这类展示壳
141
- - 已经提取为 `tool_references` 的原始占位符文本
142
-
143
- 清洗后保留:
144
-
145
- - `prompt` 的业务语义片段。
146
- - `prompt_review.prompt` 中经可恢复编码修复后的完整 PE、SHA-256 和字符数;它不受 evidence 预算截断。
147
- - `prompt_review.protected_refs` 中已经由 PE runtime 语法明确表达的模板、转人工和已绑定业务工具引用;
148
- 每项保留稳定 ID、精确 span/quote 和原始绑定,供合并校验防漏防篡改。自然语言中的固定话术、等待点和
149
- 其他动作不由该字段推断,仍交给全文语义审阅。
150
- - `displayPrompt` 的纯文本摘要、长度、占位符名、是否含 HTML。
151
- - 从渲染 chip 提取的 `tool_references` 及其结构化绑定状态。
152
- - 结构化 action/tool/template/transfer/finish/KB 证据。
153
-
154
- ## Analyzer 产物
155
-
156
- ```bash
157
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py inspect \
158
- --input /workspace/state/agent-builder/multi-agent/read_<agent_id>_raw.json \
159
- --out-dir /workspace/state/agent-builder/multi-agent \
160
- --pretty
161
- ```
162
-
163
- 输出目录:
164
-
165
- ```text
166
- /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/
167
- index.full.json
168
- index.ai.json
169
- overview.mmd
170
- chunks.json
171
- progress.json
172
- batches/worker_manifest.json
173
- batches/<batch>.context.json
174
- batches/<batch>.plan.json
175
- ```
176
-
177
- | 文件 | 用途 |
178
- |------|------|
179
- | `index.full.json` | 完整语义索引,供人工审计 |
180
- | `index.ai.json` | 已裁剪、可给模型读取的语义输入 |
181
- | `overview.mmd` | 旧图 Mermaid 总览 |
182
- | `chunks.json` | chunk 清单 |
183
- | `progress.json` | batch 可恢复进度;并发状态以 `active_batch_ids[]` 为准,`current_batch_id` 只兼容单 worker 旧目录 |
184
- | `batches/worker_manifest.json` | 一个并发 wave 的隔离输入/输出路径和 worker 合同 |
185
- | `batches/<batch>.context.json` | worker 只读的有界输入 |
186
- | `batches/<batch>.plan.json` | worker 独立写入的语义计划;不写共享 progress 或局部 Mermaid |
187
-
188
- `index.full.json` / `index.ai.json` 还包含统一 `resources[]`:外部 plugin、SYSTEM chip、知识能力和
189
- 未识别引用都必须在其中有 `resource_kind`、证据来源和目标映射。迁移 coverage 应引用这份清单,
190
- 不要分别从 prompt、usedPlugins 和 meta 再次猜测同一资源。
191
-
192
- 图结构事实位于 `topology`:`control_edges` 只包含结构化 `SWITCH_AGENT` 的确定性控制流;
193
- `model_selectable_edges` 单列 `agentEdges[]` 的模型可选跳转。`reachable_agent_ids` 表示旧运行时可达性,
194
- `deterministically_reachable_agent_ids` 只按确定性控制流计算。AI 建立 SOP 时必须区分二者,不能把
195
- `model_selectable_edges` 自动变成目标图边;`overview.mmd` 用虚线展示它们。`unreachable_agent_ids` 非空时
196
- 仍是阻塞风险,不能静默补边或丢弃。
197
-
198
- `index.ai.json` 中每个 agent 都带精简 `action_edges`,保留来源、工具、`match_status`、动作类型、
199
- 目标和模板状态,但不带前端 raw 字段。这样 AI 可以按 agent 读取完整分支合同,又不会把整份 legacy
200
- JSON 或 HTML 噪音重复塞入上下文。
201
-
202
- PE 还带 `prompt_review`、`prompt_quality` / `prompt_evidence.encoding_quality`:
203
-
204
- - `clean`:未发现明显编码异常;
205
- - `mojibake_suspected`:疑似 UTF-8/Latin-1 错解码;
206
- - `replacement_character`:出现 Unicode replacement character `�`。
207
-
208
- 分析器会把经可恢复编码修复后的完整 PE 写入 `prompt_review.prompt`,并记录 `prompt_sha256` /
209
- `prompt_char_count`;这是 worker 的强制全文审阅合同。另将 HTML 噪音和 legacy 工具指令清洗到
210
- `agent.prompt` / `prompt_evidence.evidence`,仅用于紧凑的流程摘要。`prompt_evidence.encoding_quality`
211
- 记录清洗前质量,`prompt_evidence.cleaned_encoding_quality` 记录清洗后质量;编码问题本身不是迁移阻塞项。
212
-
213
- `coverage_required.prompt_reviews` 会把完整 PE 原样带进对应 batch,即使 `prompt_evidence` 因预算被截断也不
214
- 截断。worker 输出 `discovered_blocks` 和 `control_semantics`;`merge-batch-plans` 再根据结构化 kind、具体
215
- 模板/工具 id、精确转人工 reason 和完整固定话术派生 LibraryBlock、plugin 绑定与内容 hash。自然语言识别和
216
- 协议渲染因此分层:前者由模型理解流程,后者由脚本确定性生成。固定话术使用通用
217
- `NODE_PROMPT_FIELD`,最终按已选节点合同填写 `render_path`;analyzer 不把它预设成 REPLY。
218
-
219
- 索引还包含 `coverage_manifest`,为 agents、tools、resources、explicit edges、action edges 和
220
- `prompt_reviews` 提供稳定 ID。最终 migration plan 必须按 ID 对账;只按节点数量相等不能证明迁移完整。
221
-
222
- 并发生成/恢复 batch context(每批默认 4 个 chunk、12 条 action edge、20000 evidence 字符):
223
-
224
- ```bash
225
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py prepare-batches \
226
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.ai.json \
227
- --chunks-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/chunks.json \
228
- --progress-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/progress.json \
229
- --out-dir /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/batches \
230
- --parallelism 4 \
231
- --pretty
232
- ```
233
-
234
- 协调器读取 manifest 后并发运行 worker;每个 worker 只读取自己的 context、写自己的 plan,不向用户提问、
235
- 不生成 Mermaid,也不修改 `progress.json`。worker 全部结束后由 `merge-batch-plans` 串行合并和更新共享进度。
236
-
237
- 生成 migration plan 后,先用脚本检查流程骨架、节点决策和 coverage:
238
-
239
- ```bash
240
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py validate-migration-plan \
241
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
242
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
243
- --pretty
244
- ```
245
-
246
- 该检查未通过时只能继续补迁移 plan,不能进入完整的迁移产物生成阶段。
@@ -1,12 +0,0 @@
1
- # Deprecated: graph-structure
2
-
3
- 本文件只保留历史引用兼容,不再承载旧图读取规则。
4
-
5
- 读取、解释或迁移 MULTI_AGENT 时,必须改读:
6
-
7
- 1. `overview.md`
8
- 2. `workflow.md`
9
- 3. `graph-spec.md`
10
-
11
- 迁移到 CHAT_FLOW 时继续读取 `migration/principles.md`,再按大小读取 `migration/small.md` 或
12
- `migration/large.md`。
@@ -1,13 +0,0 @@
1
- # Deprecated: migrate-to-chatflow
2
-
3
- 本文件只保留历史引用兼容,不再承载迁移规则。
4
-
5
- 旧 MULTI_AGENT 迁移到 CHAT_FLOW 时,必须按以下顺序读取:
6
-
7
- 1. `overview.md`
8
- 2. `workflow.md`
9
- 3. `graph-spec.md`
10
- 4. `migration/principles.md`
11
- 5. `migration/small.md` 或 `migration/large.md`
12
-
13
- 不要继续按旧版 `migrate-to-chatflow.md` 生成迁移计划。