@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,554 +0,0 @@
1
- # 迁移模式:large legacy MULTI_AGENT -> CHAT_FLOW
2
-
3
- 用于长旧版 `multiAgentGraph`、`displayPrompt` 很长、agent/action/tool 较多,或用户要求“先拆解、再分步迁移”的场景。脚本负责确定性解析、清洗、分块和进度;多个隔离 worker 可并发理解有预算的 batch,协调器负责合并、去重问题和最终确认。`prepare-batches` 只准备并发 wave,不启动 worker;只有协调器在同一轮并列发出多个 `task` tool call 时,运行时才会真正异步并发。
4
-
5
- 开始前先读 `../graph-spec.md` 和 `principles.md`。本文件只产出旧图证据、coverage、业务职责、候选节点类别和迁移决策。不要在这里填写目标节点字段、默认边,或重复目标图的构图、编译、校验、发布规则。
6
-
7
- ## 执行要求
8
-
9
- | 工作 | 执行者 | 结果 |
10
- |---|---|---|
11
- | 读取 raw JSON、裁剪前端噪音 | 脚本 | 可复用的语义索引 |
12
- | 抽取工具、动作、边、模板、知识能力并完整保留 PE | 脚本 | 结构化证据、`prompt_reviews` 和风险分级 |
13
- | 理解 PE 中的可执行语义、固定话术和等待点 | 无交互 worker | 基于全文与流程上下文的 `discovered_blocks`;不使用短语/正则分类 |
14
- | 拓扑、SOP、合并/拆分合同 | 模型 | 可合并的旧图理解 |
15
- | 每个 batch 的语义映射和 coverage | 无交互 worker | 独立 batch plan,不生成 Mermaid |
16
- | 进度、batch 选择、plan 合并和 checkpoint | 协调器 + 脚本 | 无共享写竞态的可恢复状态 |
17
- | 目标 source、资源绑定、边、编译、校验、发布 | CHAT_FLOW 阶段 | 按 `../../chatflow/` 文档执行 |
18
-
19
- 模型在本文件阶段只能把 `TOOL`、`QUESTION`、`REPLY`、`INTENT`、`IF_ELSE`、`LLM`、`AGENT`、`TRANSFER_TO_HUMAN`、`FINISH`、`VARIABLE_PROCESS` 等写成**候选类别**。完成一个确认过的迁移计划后,才进入 CHAT_FLOW 文档确定实现。
20
-
21
- ## 大图的有界执行
22
-
23
- 大图必须按“脚本确定结构,模型做局部语义决策”执行。不要让模型反复读取完整 legacy JSON 或在对话中累积全图状态。
24
-
25
- 1. `inspect`:脚本生成索引、chunk、流程理解 seed 和 `progress.json`。
26
- 2. `claim`:协调器用 `prepare-batches` 一次认领最多 N 个互不重叠的 batch,生成 worker manifest。
27
- 3. `workers`:协调器在同一轮为 manifest 中每个 batch 并列发出一个 `task` tool call;worker 各自只读一个 context、只写一个 plan,不询问用户、不修改共享 progress、不生成 Mermaid。
28
- 4. `merge`:协调器用 `merge-batch-plans` 串行合并所有已完成 plan、去重问题并更新 checkpoint;还有 pending chunk 时继续下一 wave。
29
- 5. `questions`:所有 batch 完成后,只向用户集中提出合并后的 blocking `open_questions`;worker 不自行确认。
30
- 6. `mapping`:问题解决后生成唯一一张全局 SOP → 节点映射 Mermaid,作为唯一结构确认门。
31
- 7. `handoff`:全局图确认后,转到 CHAT_FLOW 文档按确认的流程块实现目标图。
32
-
33
- 这里的并发分三层,不能混称:`prepare-batches --parallelism N` 只证明一次切出了 N 个互不重叠的 context;
34
- manifest 中有 N 个 batch 只证明它们可并发;同一 assistant turn 中出现 N 个 `task` tool call,且运行时等待
35
- 全部结果后再 merge,才是实际异步并发。若协调器逐个调用、等待、再调用,即使 `parallelism=4` 也只是串行批处理。
36
- 运行时不支持同轮多 tool call 时,显式退化为 `parallelism=1`,不要声称并发。
37
-
38
- 默认 batch 上限为 4 个 chunk、12 条 action edge、20,000 个 prompt evidence 字符。单个 SCC 超出预算时必须整体保留并在 `budget_exceptions` 中留痕;不能为了凑预算把环拆开。提高工具运行上限只能提供缓冲,不能替代 batch 边界。
39
-
40
- 会话中断或上下文压缩后,先读取 `progress.json`、worker manifest 和已完成 plan。恢复时以
41
- `active_batch_ids[]` 为准并重新发出同一批 context;不得重新挑选 chunk 或重新分析全图。`current_batch_id`
42
- 只兼容旧的单 worker 目录,多 batch 时应为空。
43
-
44
- ## 先理解旧流程,再映射候选
45
-
46
- 在处理任何 batch 前,先根据 `overview.mmd`、`index.ai.json` 和工具/action 索引输出 `flow_skeleton`。它至少包含:
47
-
48
- - 唯一入口、阶段、汇合点和终端;
49
- - 每个工具及其状态/结果分支;
50
- - 每个 classifier 的完整分类集合;
51
- - 用户补充信息、确认、模板回复、人工接管、固定完整话术、等待点和结束的顺序;
52
- - 不同地区、渠道、商品、客户类型或处理结果形成的独立业务主线;
53
- - 可达性事实和跨 batch anchor。
54
-
55
- 每个 chunk / 阶段必须写清输入、用户轮次、资源调用、分支集合、输出语义和下游职责。多个单元想合并时,`merge_groups` 必须证明输入、用户轮次、资源合同、分支集合和下游语义一致;仅名称或 prompt 相似不够。
56
-
57
- 以下默认是保护单元,除非结构化证据完全一致,不得合并:
58
-
59
- - 不同 action status、模板、人工接管原因、结束语义或用户轮次;
60
- - 不同外部工具、工具参数/结果合同或知识启用状态;
61
- - 不同业务主线、分类树或处理结果;
62
- - 同一个动作组中“先回复再跳转/人工接管/结束”的动作顺序;
63
- - `matchStatus == null` 的兜底出口。
64
-
65
- `SWITCH_AGENT` 是旧控制流,不是外部工具。仅承担跳转且没有独立 SOP 的 old agent 应标记为 `edge_only`;有独立用户交互、资源调用、判断或终端职责时才进入候选节点映射。
66
-
67
- `agentEdges[]` 与 `SWITCH_AGENT` 不可混写:前者只是模型可选择的相邻职责,不能进入 batch 的确定性
68
- control topology,也不能自动生成目标图边;后者才是结构化结果命中的确定性流转。batch context 会把
69
- `agentEdges[]` 单列为模型可选证据,模型根据 SOP 决定保留、吸收或在最终全局计划中结构化,不因旧边存在而
70
- 机械生成一对一连线。
71
-
72
- ## 固定脚本流程
73
-
74
- 先执行 inspect:
75
-
76
- ```bash
77
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py inspect \
78
- --input /workspace/state/agent-builder/multi-agent/read_<old_agent_id>_raw.json \
79
- --out-dir /workspace/state/agent-builder/multi-agent
80
- ```
81
-
82
- 它会生成稳定目录:
83
-
84
- ```text
85
- /workspace/state/agent-builder/multi-agent/migrate_<old_agent_id>_<agent_name>/
86
- index.full.json
87
- index.ai.json
88
- overview.mmd
89
- chunks.json
90
- flow_understanding.seed.json
91
- migration_plan.template.json
92
- coverage.template.json
93
- progress.json
94
- ```
95
-
96
- ## AI 输入裁剪
97
-
98
- AI 不直接读取完整 raw JSON。`index.ai.json` 只用于理解拓扑、角色、分支和风险;工具请求参数、模板正文或
99
- 某个 old agent 的完整业务 PE,只在处理对应 batch 时按需读取,不能把 `index.full.json` 整体塞进模型上下文。
100
-
101
- 检索这些 JSON 产物时,不要反复用内置 `grep` / `read_file` 搜索同一个大文件。跨多个工具 id、old agent id、
102
- action status、template id 或变量 selector 的核对,必须优先用一次 `execute` 批处理。JSON 的结构摘要、筛选、
103
- 字段投影和统计优先使用 `jq` 生成紧凑输出,不得把完整 JSON 回传模型;复杂跨文件关联、复杂转换或生成逻辑
104
- 才使用短 Python 脚本。例如,读取指定工具的摘要:
105
-
106
- ```bash
107
- jq -c --argjson wanted '["24655", "24992", "26918"]' '
108
- def compact_value:
109
- if . == null then null
110
- elif type == "object" then {kind: "object", key_count: length, keys: (keys | .[:20])}
111
- elif type == "array" then {kind: "array", count: length}
112
- else {kind: type, preview: (if type == "string" then .[0:160] else . end)}
113
- end;
114
- .tools[]
115
- | select((.id | tostring) as $id | $wanted | index($id))
116
- | {
117
- tool_key,
118
- agent_id,
119
- id,
120
- name,
121
- tool_type: .type,
122
- request_param_summary: (.request_param | compact_value),
123
- response_param_summary: (.response_param | compact_value),
124
- action_status_count: ((.action_statuses // []) | length),
125
- action_status_names: ([((.action_statuses // [])[]? | .name)] | .[:20])
126
- }
127
- ' /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json
128
- ```
129
-
130
- 命令输出只保留迁移需要的字段,并限制 key、状态名和字符串预览长度;如结果较长,写入
131
- `/workspace/tmp/agent-builder/*.json` 后再读摘要。只有要审计具体片段时,才读取相应 offset。
132
-
133
- `unreachable_agents_count > 0` 或 `risk_items.type=unreachable_agent` 是真正的 blocking 项。必须恢复来源 edge 或获得用户确认的删减决定,不能静默丢弃。
134
-
135
- 一次领取或恢复一个并发 wave:
136
-
137
- ```bash
138
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py prepare-batches \
139
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.ai.json \
140
- --chunks-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/chunks.json \
141
- --progress-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/progress.json \
142
- --out-dir /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/batches \
143
- --manifest-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/batches/worker_manifest.json \
144
- --parallelism 4 \
145
- --max-chunks 4 \
146
- --max-action-edges 12 \
147
- --max-evidence-chars 20000
148
- ```
149
-
150
- 该命令由协调器调用一次并原子替换共享 progress 文件;每个 batch 使用唯一的 `<batch>.context.json` 和
151
- `<batch>.plan.json`。已有 active batch 会原样恢复,context 误删时可用 `emit-batch-context --batch-id <id>`
152
- 重建。命令输出中的 `workers_started=false` 是刻意设计:协调器读取 manifest 后,必须在同一轮并列派发
153
- 全部 worker。worker 不写共享 progress,因此 worker 之间没有共享写竞态;`prepare-batches` 和
154
- `merge-batch-plans` 仍是单协调器串行 checkpoint,不能由两个协调器同时调用。`prepare-batch` 和单 chunk
155
- 命令只兼容已有迁移目录,新的大图流程不使用。
156
-
157
- 并发 worker 全部写完 plan 后,由协调器合并;worker 禁止直接调用 `update-batch-progress`:
158
-
159
- ```bash
160
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py merge-batch-plans \
161
- --base-plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.template.json \
162
- --manifest-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/batches/worker_manifest.json \
163
- --progress-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/progress.json \
164
- --out-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
165
- --open-questions-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/open_questions.json \
166
- --mermaid-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/sop_mapping.mmd \
167
- --pretty
168
- ```
169
-
170
- 合并器会读取 progress 中所有已完成 batch plan,而不只读取当前 wave;因此可重复执行多轮
171
- `prepare-batches → 并发 worker → merge-batch-plans`。只要仍有 pending chunk,或仍有未解决
172
- `open_questions`,就不会生成 `sop_mapping.mmd`。
173
-
174
- ## Step 1:建立全局骨架(内部)
175
-
176
- 读取 `index.ai.json` 后,把摘要、SOP 拆解、chunk 清单和风险分级写入 migration plan;不生成目标 source,
177
- 也不要求用户先确认骨架。可以发送一句简短进度更新,但不展示中间 Mermaid 或 coverage 表。
178
-
179
- ```text
180
- Source: <id> "<name>"
181
- Entry: <agent>
182
- Agents: N
183
- Tools: N
184
- Explicit edges: N
185
- Action edges: N
186
- Chunks: N
187
-
188
- ## 旧 Multi 流程理解
189
- | 阶段 | 输入/用户轮次 | 旧证据 | 分支/出口 | 风险 |
190
-
191
- ## SOP 拆解
192
- | SOP 步骤 | 触发条件 | 处理动作 | 用户可见回复/等待 | 下游 |
193
- ```
194
-
195
- 这一阶段不向用户提问。会改变可执行语义的缺口先记录为 batch `open_questions` 候选;未绑定 display chip、
196
- HTML 壳和泛化的 “use this/that tool” 只记 audit warning。协调器完成全部 batch 后再统一去重、集中询问。
197
-
198
- ## Step 2:按 batch 写迁移计划
199
-
200
- 每个 worker 只读取 manifest 指定的 `<batch>.context.json`。`coverage_required.prompt_reviews` 是必读合同;
201
- 其中 `prompt` 始终是完整 PE,不受 `prompt_evidence` 的字符预算和截断影响。worker 必须逐份阅读全文,并结合
202
- 同一 context 中的 tools、resources、action edges、cross-batch anchors 和上下游职责理解语义。不得用
203
- `template id`、`reason`、`following template`、`wait for reply` 等字面模式或语言专用正则代替语义判断。
204
- worker 直接写 `<batch>.plan.json`,不得在对话中展示或等待用户确认。
205
-
206
- worker plan 内部必须同时记录旧职责、结构化证据、保留语义、合并/改写理由,以及每个 Prompt 引用的
207
- 资源/动作证据、目标承载方式、清理项和缺口。模板、人工接管、普通工具、固定完整话术和等待点按 PE 中的
208
- 源顺序写入 `coverage_delta.prompt_reviews[].discovered_blocks`;内部跳转、finish 和 actionStatus 分支写入
209
- `control_semantics`。合同中的 `protected_refs` 只标记 PE 已渲染出的无歧义 runtime 工具语法;worker 必须
210
- 以相同 source span 和具体 ID/name/reason 覆盖它们(显式 resolved drop 除外),同时仍要阅读全文识别无法
211
- 由该确定性集合覆盖的固定话术、等待点和上下文动作。
212
-
213
- batch plan 是语义合同,不是目标图 schema。以下是单个 batch 的语义片段;它用于合并到 analyzer
214
- 生成的完整 `migration_plan.template.json`,不能单独作为 `validate-migration-plan` 的输入:
215
-
216
- ```json
217
- {
218
- "batch_id": "batch_001",
219
- "chunk_ids": ["chunk_00_entry", "chunk_01_lookup"],
220
- "skeleton_stage": "order_lookup",
221
- "flow_skeleton_delta": {
222
- "stages": ["order_lookup"],
223
- "protected_branches": ["ORDER_NOT_FOUND"]
224
- },
225
- "old_semantics": [
226
- {"source": "agent prompt", "summary": "collect order information"},
227
- {"source": "tool actionStatus", "summary": "route by lookup result"}
228
- ],
229
- "candidate_nodes": [
230
- {
231
- "mapping_key": "collect_order",
232
- "type": "QUESTION",
233
- "responsibility": "Collect the required order information."
234
- },
235
- {
236
- "mapping_key": "lookup_order",
237
- "type": "TOOL",
238
- "responsibility": "Call the structured order lookup capability."
239
- }
240
- ],
241
- "node_decision_delta": [
242
- {
243
- "old_id": "agent_collect_order",
244
- "candidate_nodes": ["QUESTION", "AGENT"],
245
- "reason": "The legacy prompt combines collection and contextual policy handling.",
246
- "evidence": ["agent prompt"]
247
- }
248
- ],
249
- "flow_relations": [
250
- {
251
- "from_responsibility": "order lookup",
252
- "condition": "ORDER_NOT_FOUND",
253
- "next_responsibility": "human handoff"
254
- }
255
- ],
256
- "sop_mapping": {
257
- "blocks": [
258
- {
259
- "id": "collect_order",
260
- "responsibility": "Collect the required order information.",
261
- "candidate_nodes": ["QUESTION"]
262
- },
263
- {
264
- "id": "lookup_order",
265
- "responsibility": "Call the structured order lookup capability.",
266
- "candidate_nodes": ["TOOL", "IF_ELSE"]
267
- }
268
- ],
269
- "relations": [
270
- {"from": "collect_order", "to": "lookup_order", "condition": "order information complete"}
271
- ]
272
- },
273
- "coverage_delta": {
274
- "agents": [
275
- {
276
- "old_id": "agent_collect_order",
277
- "mapped_to": ["collect_order"],
278
- "decision": "rewritten",
279
- "reason": "The legacy prompt mixed information collection with routing."
280
- }
281
- ],
282
- "tools": [
283
- {
284
- "old_tool_key": "<coverage_required.tools[].old_tool_key>",
285
- "old_tool_id": 8299,
286
- "mapped_to": ["lookup_order"],
287
- "decision": "preserved",
288
- "reason": "The structured lookup capability is retained."
289
- }
290
- ],
291
- "actions": [
292
- {
293
- "action_id": "<action_id>",
294
- "from_old_agent": "agent_lookup",
295
- "match_status": "ORDER_NOT_FOUND",
296
- "action_type": "TRANSFER_TO_HUMAN",
297
- "mapped_to": ["human_handoff"],
298
- "decision": "preserved",
299
- "reason": "The handoff branch remains explicit."
300
- }
301
- ],
302
- "prompt_reviews": [
303
- {
304
- "contract_id": "prompt_review_collect_order",
305
- "source_prompt_sha256": "<context prompt_sha256>",
306
- "reviewed_full_prompt": true,
307
- "decision": "preserved",
308
- "mapped_to": ["collect_order"],
309
- "reason": "The complete PE governs this multi-turn responsibility.",
310
- "control_semantics": [
311
- {
312
- "kind": "FLOW_INTERNAL_JUMP",
313
- "source_quote": "Continue with replacement handling",
314
- "mapped_to": ["replacement_flow"]
315
- }
316
- ],
317
- "discovered_blocks": [
318
- {
319
- "block_id": "refund_template",
320
- "kind": "TEMPLATE_REPLY",
321
- "sequence": 0,
322
- "source_span": {"start": 120, "end": 165},
323
- "source_quote": "Send the configured refund retention response.",
324
- "template_id": 1769,
325
- "decision": "preserved",
326
- "target_type": "AGENT_LIBRARY_BLOCK",
327
- "mapped_to": ["collect_order"],
328
- "reason": "Context determines whether the first response is needed."
329
- },
330
- {
331
- "block_id": "refund_policy_wording",
332
- "kind": "FIXED_WORDING",
333
- "sequence": 1,
334
- "source_span": {"start": 166, "end": 260},
335
- "source_quote": "<directive plus the exact customer-facing paragraphs>",
336
- "content": "<all customer-facing paragraphs copied verbatim>",
337
- "decision": "preserved",
338
- "target_type": "NODE_PROMPT_FIELD",
339
- "mapped_to": ["collect_order"],
340
- "reason": "The wording is part of the same multi-turn responsibility."
341
- },
342
- {
343
- "block_id": "wait_after_policy",
344
- "kind": "WAIT_FOR_USER",
345
- "sequence": 2,
346
- "source_span": {"start": 261, "end": 294},
347
- "source_quote": "Pause until the customer responds.",
348
- "rendered_instruction": "After sending the policy, wait for the customer's next reply before continuing.",
349
- "decision": "preserved",
350
- "target_type": "AGENT_WAIT",
351
- "mapped_to": ["collect_order"],
352
- "reason": "The next decision depends on a new customer turn."
353
- },
354
- {
355
- "block_id": "refund_handoff",
356
- "kind": "TRANSFER_TO_HUMAN",
357
- "sequence": 3,
358
- "source_span": {"start": 295, "end": 348},
359
- "source_quote": "Escalate with the exact reason want refund if they insist.",
360
- "transfer_reason": "want refund",
361
- "decision": "preserved",
362
- "target_type": "AGENT_LIBRARY_BLOCK",
363
- "mapped_to": ["collect_order"],
364
- "reason": "Escalation remains contextual after the waiting turn."
365
- }
366
- ]
367
- }
368
- ]
369
- },
370
- "prompt_cleanup": ["remove legacy structural instructions"],
371
- "open_questions": []
372
- }
373
- ```
374
-
375
- `coverage_delta` 必须逐项复制 `coverage_required` 中的稳定标识,不能重算或只写显示字段:agent 用
376
- `old_id`,tool 必须用 `old_tool_key`(`old_tool_id` 可能跨 agent 重复),action / explicit edge / resource
377
- 分别用 `action_id` / `edge_id` / `resource_id`,其余合同项用 `contract_id`。
378
-
379
- `coverage_required` 的每个 section 都是本 batch 的强制清单,包括 agents、tools、actions、explicit edges、
380
- resources 及适用的 classifier/template/interaction/branch/prompt 合同;`coverage_delta` 必须逐项回写决定。
381
- 共享资源或跨 batch edge 可在多个 batch 出现,各 worker 只写本 batch 有证据的目标,合并器会对
382
- `mapped_to` / `rendered_to` / `source_nodes` 做并集并保留逐 batch 理由。
383
-
384
- `coverage_delta.prompt_reviews` 必须覆盖 context 的每个 `coverage_required.prompt_reviews`,回写相同 PE hash,
385
- 并让每个 `discovered_blocks[].source_quote` 与完整 PE 的 `source_span` 精确对应。worker 输出的是结构化语义,
386
- 其中每个 `protected_refs[]` 都必须由同 span、同 kind、同具体绑定的 discovered block 覆盖;
387
- 不手写 LibraryBlock、`required_used_plugins`、`required_plugin_types`、`target_options` 或内容哈希;`merge-batch-plans` 根据 kind 和
388
- 具体 id/reason/content 动态派生这些协议字段。固定话术不因最终选择哪一种可承载 PE/文本指令的节点而省略;
389
- batch worker 将它映射为通用 `NODE_PROMPT_FIELD`,不预设成 REPLY。最终全局节点类别确认后,协调器按实际
390
- 节点合同填写 `render_path`,它可以指向 AGENT 或其他真实承载该 PE/文本指令的节点字段。
391
- `validate-migration-plan` 会先核对全文审阅、source span、内容哈希和映射决定;目标 source 写完后的
392
- `validate-prompt-block-rendering` 再核对 `render_path` 和逐字保留结果。
393
-
394
- 每个 old agent、真实 tool、explicit edge、action edge 都必须有 coverage。允许 `merged`、`split`、`rewritten` 或 `edge_only`,但每项都要有 evidence;`dropped` 必须有用户确认。
395
- 汇总 batch fragments 时,以 analyzer 生成的 `migration_plan.template.json` 为完整计划骨架,保留其
396
- 流程骨架、合并合同、节点选择和所有 coverage section;不要自行删字段或改造成目标图 schema。
397
-
398
- 禁止为单个 batch 生成或展示 Mermaid。局部 `sop_mapping` 只作为 JSON 片段参与确定性合并;跨 batch
399
- anchor 在最终全局图中统一呈现。
400
-
401
- ### 知识能力和 open questions
402
-
403
- 旧知识能力的目录既可能位于直接 `directoryIds`,也可能位于
404
- `meta.knowledgeAiReplyConfig.directoryIds`;后者的启用状态优先。
405
-
406
- - 明确 `enable=false` 且目录为空:保留 audit,不提问。
407
- - 已启用或启用状态未知且目录为空:blocking;要求提供目录或明确移除该能力。
408
- - 仅 display-only 的知识占位符:audit warning,不伪造缺失依赖。
409
- - worker 结合完整 PE 和流程上下文确认存在可执行工具/模板/终端语义,但具体绑定仍无法确定:blocking
410
- open question。不能仅因命中某个词语就提问。
411
-
412
- worker 为每个 open question 给出稳定 id、2–3 个可执行选项、推荐项、影响和 `blocking=true`,但不得直接
413
- 询问用户。协调器按 id/问题语义去重后一次性展示。例如空知识目录的推荐项可以是“提供可用目录”;其他选项
414
- 是“确认移除该能力”或“用户指定一个现有目录”。不要用目标节点的内部名替代业务决策。
415
-
416
- `merge-batch-plans` 把所有 fragments 汇总进完整 `migration_plan.json`,合并 `sop_mapping.blocks` / `relations`
417
- 并保留稳定 id 与跨 batch 关系。交互顺序固定:
418
-
419
- 1. 还有 pending chunk:继续下一并发 wave,不展示图或提问。
420
- 2. 所有 batch 完成但有 `open_questions`:只展示去重后的问题;把用户答案写回相关 plan,设置
421
- `resolved=true`、非空 `resolution` 和最终 coverage 决策后重新 merge。
422
- 3. 所有 batch 完成且问题为 0:合并器才写出 `sop_mapping.mmd`,直接展示这一张整体大图并请求最终确认。
423
-
424
- 全局 Mermaid 是唯一结构确认门:每个流程块必须显示节点类别,跨 batch 边必须显示业务条件。用户确认后,
425
- 把各块确认类别写入 `selected_nodes`;不再改用节点映射表,也不为 display/audit warning 额外提问。随后才用
426
- analyzer 检查 coverage 和计划结构:
427
-
428
- 若本次任务还要求创建目标草稿,最终全局图确认中同时写清目标环境、agent 名称和“仅保存草稿、不发布”;
429
- 上下文无法确定这些信息时,把它们并入前面的合并 `open_questions`,不要在进入 CHAT_FLOW 阶段后再增加一轮
430
- 确认。若用户只要求迁移方案,则最终确认后只保留 plan/source 产物,不写入环境。
431
-
432
- ```bash
433
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py validate-migration-plan \
434
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
435
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
436
- --pretty
437
- ```
438
-
439
- 未通过时只补旧图 evidence、coverage 或迁移决策;不要直接改写目标图来掩盖缺口。
440
-
441
- ## Step 3:切换到 CHAT_FLOW 实现
442
-
443
- 全局 SOP → 节点映射 Mermaid 确认后,开始实现目标图前必须依次读取:
444
-
445
- 1. `../../chatflow/overview.md`
446
- 2. `../../chatflow/workflow.md`
447
- 3. `../../chatflow/graph-spec.md`
448
- 4. `../../chatflow/node-selection.md`
449
- 5. 每个候选类别实际选中的 `../../chatflow/nodes/*.md`
450
-
451
- 目标图阶段才确定 source 字段、资源绑定、边、编译、校验和部署。按
452
- `coverage.prompt_reviews[].discovered_blocks[].target_type` 消费每一条 PE 可执行语义:选择
453
- `AGENT_LIBRARY_BLOCK` 时使用合并器派生的标准 `library_block`;固定话术按 `NODE_PROMPT_FIELD` 的
454
- `render_path` 写入已选节点的实际 PE/文本字段并保留完整 `content`,不预设节点类别;等待点使用明确
455
- `rendered_instruction`;选择独立节点时按对应节点文档实现。保留每个确认 SOP 流程块的稳定 id、块内语义和
456
- 块间关系,交由 CHAT_FLOW 工作流逐块实现并形成最终图;不要在本 plan 中填写目标实现细节。
457
- 若最终 source 节点 key 与 `mapped_to` 的流程块 id 不同,在对应 coverage 项补 `rendered_to: [<source key>]`。
458
- 一个 coverage 项同时映射多个流程块和多个 source 节点时,不能靠两个数组的位置或笛卡尔积猜对应关系;必须在
459
- 每个 `sop_mapping.blocks[]` 中显式填写 `source_nodes`。
460
- 写完 source 后、compile 前先执行迁移专用对账:
461
-
462
- ```bash
463
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py audit-migration-source \
464
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
465
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
466
- --source-file /workspace/state/agent-builder/chatflow/<task>_source.json \
467
- --out-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/source_audit.json \
468
- --pretty
469
-
470
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py validate-prompt-block-rendering \
471
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
472
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
473
- --source-file /workspace/state/agent-builder/chatflow/<task>_source.json \
474
- --pretty
475
- ```
476
-
477
- `audit-migration-source` 把损坏的 source 结构、重复 key、真实不存在的边端点,以及显式 `rendered_to` /
478
- `source_nodes` 指向不存在节点列为 blocking error;AGENT 是否应换成专用节点、泛化 next step、单 next step、
479
- SOP 类别差异、只有 `mapped_to` 的 coverage 去向疑点和关系不可达输出 warning,要求协调器展示并核对,但
480
- 不阻断 compile。不要为了消灭 warning 强行改节点;结合业务语义处理。
481
- `validate-prompt-block-rendering` 按 target type 检查具体 LibraryBlock、模板/工具 ID、完整固定话术和等待承载节点;通过后仍须按
482
- CHAT_FLOW 文档 compile / validate,以检查 `displayPrompt`、runtime `prompt`、插件绑定和在线模板状态。
483
-
484
- 同一轮由同一执行者紧邻完成 source → compile 时,不要求 handoff。只有任务需要跨轮恢复、多 worker / agent
485
- 交接,或 source 可能被人工编辑时,才建议记录交接快照:
486
-
487
- ```bash
488
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py emit-handoff \
489
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
490
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
491
- --source-file /workspace/state/agent-builder/chatflow/<task>_source.json \
492
- --out-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_handoff.json \
493
- --pretty
494
- ```
495
-
496
- `emit-handoff` 记录 index、plan、source 的规范化 JSON hash 和当时已有的 validation / warning。它始终产出
497
- 快照,不新增阻断,也不会把 warning 提升为 error;`validation_passed` 只描述记录时的校验状态。
498
-
499
- 发生上述交接时,由接手方在 CHAT_FLOW `compile` 前显式验证 handoff:
500
-
501
- ```bash
502
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py verify-handoff \
503
- --handoff-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_handoff.json \
504
- --plan-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/migration_plan.json \
505
- --index-file /workspace/state/agent-builder/multi-agent/migrate_<id>_<name>/index.full.json \
506
- --source-file /workspace/state/agent-builder/chatflow/<task>_source.json \
507
- --pretty
508
- ```
509
-
510
- 文件未变化即验证通过,即使快照记录了既有 validation finding;任一内容变化才返回
511
- `STALE_MIGRATION_PLAN` 并列出变化的 artifact。此时重新检查变化、按需执行 audit / prompt rendering 并生成
512
- 新 handoff。handoff 完全属于 MULTI_AGENT 迁移侧,通用 `chatflow_builder.py compile` 不读取 migration
513
- plan,也不承担 legacy 规则。
514
- 按已确认的全局 plan 分片实现,避免重新把完整旧图或完整目标图塞回同一个 agent run。若目标图阶段发现
515
- 缺少业务信息,回到本文件补充 evidence、coverage 或用户确认;不要自行猜测。
516
-
517
- ## 迁移验收与回放
518
-
519
- 迁移报告必须直接贴在对话中,至少包含:
520
-
521
- - 入口、阶段、分支、用户轮次、人工接管和终端的旧图理解;
522
- - 已确认的全局 SOP → 节点映射 Mermaid;
523
- - old agents、tools、explicit edges、action edges 的 coverage 数量和明细;
524
- - semantic prompt reviews / discovered blocks 的总数,以及模板、转人工、普通工具、固定话术、等待点分别映射到 AGENT LibraryBlock
525
- 还是独立节点;
526
- - 合并、拆分、改写、用户确认删减的原因和影响;
527
- - 已解决和仍阻塞的 open questions;
528
- - 从 CHAT_FLOW 阶段返回的实现、校验和发布状态(若已执行)。
529
-
530
- 编译通过只说明目标图结构可用,不等于迁移语义一致。若任务会替换生产流程,至少保留一个 synthetic smoke case;若有历史会话来源,再保留一个真实 transcript case。回放报告要比较:
531
-
532
- - 最终回复或用户可见结果;
533
- - 人工接管、结束和关键业务决策是否变化;
534
- - 工具/分支语义是否仍覆盖;
535
- - 是否残留旧编辑器占位符、HTML 噪音或不可调用的旧工具指令。
536
-
537
- 无法取得真实会话、登录态或目标运行结果时,明确写出缺口;不要把未回放说成已通过。
538
-
539
- ## 自检清单
540
-
541
- - 同一 wave 的 worker 可并发,但每个 worker 只处理一个有预算、可恢复的 batch;
542
- - worker 只写独立 plan,没有修改共享 progress、询问用户或生成局部 Mermaid;
543
- - SCC 未被拆开,恢复时未新开重复 batch;
544
- - 模型没有读取完整 raw JSON,也没有逐 chunk 发命令;
545
- - 每个非空 PE 都按完整文本和 hash 审阅,`prompt_evidence` 截断没有影响 `prompt_reviews`;
546
- - worker 基于流程语义输出 `discovered_blocks` / `control_semantics`,没有用话术短语或正则案例分类;
547
- - LibraryBlock、plugin 绑定和固定话术 hash 由合并器从结构化语义动态派生;
548
- - 所有旧图资源、动作、分支和终端都有证据及 coverage;
549
- - display-only 引用没有制造无意义的 open question;
550
- - 只有启用/未知启用且目录为空的知识能力才阻塞;
551
- - 每个合并都有输入、用户轮次、资源、分支和下游语义一致的证据;
552
- - 每个 SOP 流程块均出现在唯一的全局映射 Mermaid,且用户已确认全局图;
553
- - 迁移计划只包含候选/确认的节点类别,不包含目标字段、默认边或目标图命令;
554
- - 写目标图前已切换并遵守相应的 CHAT_FLOW 文档。