@shulex/cxclawctl 0.1.2 → 0.1.4

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/capabilities.lock.json +535 -131
  3. package/dist/cli.js +2203 -127
  4. package/dist/cli.js.map +1 -1
  5. package/package.json +20 -6
  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,645 +0,0 @@
1
- <!doctype html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>{{title}}</title>
7
- <style>
8
- /* ===== Reset & Base ===== */
9
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
- html { font-size: 16px; }
11
- body {
12
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
13
- "Microsoft YaHei", Helvetica, Arial, sans-serif;
14
- line-height: 1.7;
15
- color: #1a1a2e;
16
- background: #f0f4f8;
17
- }
18
- a { color: #4f46e5; text-decoration: none; }
19
- a:hover { text-decoration: underline; }
20
-
21
- /* ===== Header ===== */
22
- .page-header {
23
- background: linear-gradient(135deg, #1a1a2e 0%, #16213e 40%, #0f3460 100%);
24
- color: white;
25
- padding: 40px 0 36px;
26
- }
27
- .header-inner {
28
- max-width: 960px;
29
- margin: 0 auto;
30
- padding: 0 40px;
31
- display: flex;
32
- justify-content: space-between;
33
- align-items: flex-end;
34
- gap: 24px;
35
- }
36
- .header-brand {
37
- font-size: 28px;
38
- font-weight: 700;
39
- letter-spacing: -0.5px;
40
- line-height: 1.2;
41
- }
42
- .header-subtitle {
43
- font-size: 14px;
44
- color: rgba(255,255,255,0.55);
45
- margin-top: 5px;
46
- }
47
- .header-right { text-align: right; flex-shrink: 0; }
48
- .header-date {
49
- font-size: 13px;
50
- color: rgba(255,255,255,0.5);
51
- }
52
- .solvea-badge {
53
- display: inline-block;
54
- background: rgba(79,70,229,0.3);
55
- border: 1px solid rgba(79,70,229,0.5);
56
- color: #a5b4fc;
57
- padding: 3px 10px;
58
- border-radius: 20px;
59
- font-size: 12px;
60
- margin-top: 8px;
61
- }
62
-
63
- /* ===== Container ===== */
64
- .container {
65
- max-width: 960px;
66
- margin: 0 auto;
67
- padding: 40px 40px 80px;
68
- }
69
-
70
- /* ===== KPI Cards ===== */
71
- .kpi-row {
72
- display: grid;
73
- grid-template-columns: repeat(2, 1fr);
74
- gap: 20px;
75
- margin-bottom: 32px;
76
- margin-top: -20px;
77
- }
78
- .kpi-card {
79
- background: white;
80
- border-radius: 12px;
81
- padding: 24px 20px;
82
- box-shadow: 0 4px 20px rgba(0,0,0,0.08);
83
- text-align: center;
84
- border-top: 4px solid transparent;
85
- }
86
- .kpi-card:nth-child(1) { border-top-color: #4f46e5; }
87
- .kpi-card:nth-child(2) { border-top-color: #0891b2; }
88
- .kpi-card:nth-child(3) { border-top-color: #059669; }
89
- .kpi-value {
90
- font-size: 38px;
91
- font-weight: 800;
92
- line-height: 1;
93
- margin-bottom: 6px;
94
- }
95
- .kpi-card:nth-child(1) .kpi-value { color: #4f46e5; }
96
- .kpi-card:nth-child(2) .kpi-value { color: #0891b2; }
97
- .kpi-card:nth-child(3) .kpi-value { color: #059669; }
98
- .kpi-label {
99
- font-size: 13px;
100
- color: #64748b;
101
- font-weight: 500;
102
- }
103
-
104
- /* ===== Section ===== */
105
- .section {
106
- background: white;
107
- border-radius: 12px;
108
- padding: 28px 32px;
109
- margin-bottom: 24px;
110
- box-shadow: 0 2px 12px rgba(0,0,0,0.05);
111
- }
112
- .section-title {
113
- font-size: 18px;
114
- font-weight: 700;
115
- color: #0f172a;
116
- margin-bottom: 20px;
117
- padding-bottom: 14px;
118
- border-bottom: 2px solid #f1f5f9;
119
- display: flex;
120
- align-items: center;
121
- gap: 10px;
122
- }
123
- .section-icon {
124
- width: 30px;
125
- height: 30px;
126
- border-radius: 8px;
127
- display: inline-flex;
128
- align-items: center;
129
- justify-content: center;
130
- font-size: 16px;
131
- flex-shrink: 0;
132
- }
133
-
134
- /* ===== Account Table ===== */
135
- .account-table {
136
- width: 100%;
137
- border-collapse: collapse;
138
- font-size: 14px;
139
- }
140
- .account-table tr { border-bottom: 1px solid #f1f5f9; }
141
- .account-table tr:last-child { border-bottom: none; }
142
- .account-table td { padding: 10px 12px; vertical-align: middle; }
143
- .account-table td:first-child {
144
- color: #64748b;
145
- font-weight: 500;
146
- width: 130px;
147
- white-space: nowrap;
148
- }
149
- .credential-badge {
150
- display: inline-block;
151
- background: #f1f5f9;
152
- border: 1px solid #e2e8f0;
153
- border-radius: 6px;
154
- padding: 3px 10px;
155
- font-family: ui-monospace, "SF Mono", Consolas, monospace;
156
- font-size: 13px;
157
- color: #1e293b;
158
- }
159
- .account-note {
160
- font-size: 12px;
161
- color: #94a3b8;
162
- margin-top: 12px;
163
- }
164
-
165
- /* ===== Scenario Cards ===== */
166
- .scenario-grid {
167
- display: grid;
168
- grid-template-columns: repeat(auto-fit, minmax(255px, 1fr));
169
- gap: 16px;
170
- margin-bottom: 16px;
171
- }
172
- .scenario-card {
173
- border: 1px solid #e2e8f0;
174
- border-radius: 10px;
175
- padding: 16px 18px;
176
- background: #fafafa;
177
- }
178
- .scenario-name {
179
- font-weight: 700;
180
- font-size: 14px;
181
- color: #1e293b;
182
- margin-bottom: 6px;
183
- }
184
- .scenario-desc {
185
- font-size: 13px;
186
- color: #475569;
187
- line-height: 1.65;
188
- margin-bottom: 8px;
189
- }
190
- .scenario-tip {
191
- font-size: 12px;
192
- color: #64748b;
193
- background: #f8fafc;
194
- border-left: 3px solid #94a3b8;
195
- padding: 6px 10px;
196
- border-radius: 0 4px 4px 0;
197
- line-height: 1.6;
198
- }
199
- .scene-tags {
200
- margin-top: 8px;
201
- display: flex;
202
- flex-wrap: wrap;
203
- gap: 6px;
204
- }
205
- .scene-tag {
206
- display: inline-flex;
207
- align-items: center;
208
- background: #ede9fe;
209
- color: #4f46e5;
210
- padding: 4px 12px;
211
- border-radius: 20px;
212
- font-size: 12px;
213
- font-weight: 500;
214
- }
215
-
216
- /* ===== Steps ===== */
217
- .steps-list {
218
- list-style: none;
219
- counter-reset: step-counter;
220
- }
221
- .steps-list li {
222
- counter-increment: step-counter;
223
- padding: 0 0 22px 52px;
224
- position: relative;
225
- }
226
- .steps-list li:last-child { padding-bottom: 0; }
227
- .steps-list li::before {
228
- content: counter(step-counter);
229
- position: absolute;
230
- left: 0;
231
- top: 2px;
232
- width: 32px;
233
- height: 32px;
234
- background: #4f46e5;
235
- color: white;
236
- border-radius: 50%;
237
- display: flex;
238
- align-items: center;
239
- justify-content: center;
240
- font-size: 14px;
241
- font-weight: 700;
242
- }
243
- .step-connector {
244
- position: absolute;
245
- left: 15px;
246
- top: 38px;
247
- bottom: 0;
248
- width: 2px;
249
- background: #e2e8f0;
250
- }
251
- .steps-list li:last-child .step-connector { display: none; }
252
- .step-title {
253
- font-weight: 600;
254
- color: #1e293b;
255
- font-size: 14px;
256
- margin-bottom: 4px;
257
- padding-top: 5px;
258
- }
259
- .step-body {
260
- font-size: 13px;
261
- color: #64748b;
262
- line-height: 1.65;
263
- }
264
- .step-img {
265
- max-width: 480px;
266
- display: block;
267
- margin: 12px 0 4px;
268
- border-radius: 8px;
269
- border: 1px solid #e2e8f0;
270
- box-shadow: 0 2px 8px rgba(0,0,0,0.06);
271
- }
272
-
273
- /* ===== Results ===== */
274
- .results-intro {
275
- font-size: 14px;
276
- color: #64748b;
277
- margin-bottom: 24px;
278
- }
279
- .agent-section { margin-bottom: 28px; }
280
- .agent-section h2 {
281
- font-size: 15px;
282
- font-weight: 700;
283
- color: #1e293b;
284
- padding: 12px 16px;
285
- background: linear-gradient(90deg, #ede9fe 0%, #f0f9ff 100%);
286
- border-radius: 10px 10px 0 0;
287
- border: 1px solid #e2e8f0;
288
- border-bottom: none;
289
- display: flex;
290
- align-items: center;
291
- gap: 8px;
292
- margin: 0;
293
- }
294
- .agent-meta {
295
- font-size: 12px;
296
- color: #94a3b8;
297
- font-weight: 400;
298
- margin-left: auto;
299
- }
300
-
301
- /* ===== Case Card ===== */
302
- .case-card {
303
- background: white;
304
- border: 1px solid #e2e8f0;
305
- overflow: hidden;
306
- }
307
- .agent-section .case-card:first-of-type {
308
- border-top: none;
309
- border-radius: 0;
310
- }
311
- .agent-section .case-card:last-of-type {
312
- border-radius: 0 0 10px 10px;
313
- }
314
- .agent-section .case-card:not(:first-of-type) {
315
- border-top: 1px solid #f1f5f9;
316
- }
317
- .case-header {
318
- background: #f8fafc;
319
- padding: 9px 16px;
320
- border-bottom: 1px solid #f1f5f9;
321
- display: flex;
322
- align-items: center;
323
- gap: 12px;
324
- flex-wrap: wrap;
325
- }
326
- .case-id {
327
- font-weight: 700;
328
- color: #4f46e5;
329
- font-size: 13px;
330
- }
331
- .case-scenario {
332
- color: #334155;
333
- flex: 1;
334
- font-size: 13px;
335
- }
336
- .chat-id-badge {
337
- font-size: 11px;
338
- color: #94a3b8;
339
- }
340
- .chat-id-badge code {
341
- background: #f1f5f9;
342
- padding: 1px 6px;
343
- border-radius: 4px;
344
- font-family: ui-monospace, "SF Mono", Consolas, monospace;
345
- color: #64748b;
346
- font-size: 11px;
347
- }
348
-
349
- /* ===== Dialogue ===== */
350
- .dialogue {
351
- padding: 16px 20px;
352
- background: #fdfdfe;
353
- }
354
- .msg {
355
- display: flex;
356
- gap: 12px;
357
- margin-bottom: 12px;
358
- align-items: flex-start;
359
- }
360
- .msg:last-child { margin-bottom: 0; }
361
- .msg .label {
362
- font-size: 12px;
363
- color: #94a3b8;
364
- min-width: 60px;
365
- padding-top: 9px;
366
- user-select: none;
367
- text-align: right;
368
- flex-shrink: 0;
369
- }
370
- .bubble {
371
- max-width: 680px;
372
- padding: 10px 14px;
373
- border-radius: 12px;
374
- font-size: 14px;
375
- line-height: 1.65;
376
- word-wrap: break-word;
377
- }
378
- .user-bubble {
379
- background: #4f46e5;
380
- color: white;
381
- border-bottom-left-radius: 4px;
382
- }
383
- .bot-bubble {
384
- background: white;
385
- color: #1e293b;
386
- border: 1px solid #e2e8f0;
387
- border-bottom-left-radius: 4px;
388
- box-shadow: 0 1px 4px rgba(0,0,0,0.04);
389
- }
390
-
391
- /* ===== Notes ===== */
392
- .notes-block {
393
- margin-bottom: 20px;
394
- padding: 16px 20px;
395
- border-radius: 8px;
396
- background: #f8fafc;
397
- border: 1px solid #e2e8f0;
398
- }
399
- .notes-block:last-child { margin-bottom: 0; }
400
- .notes-block h3 {
401
- font-size: 14px;
402
- font-weight: 700;
403
- color: #1e293b;
404
- margin-bottom: 8px;
405
- }
406
- .notes-block p, .notes-block ul {
407
- font-size: 13px;
408
- color: #475569;
409
- line-height: 1.7;
410
- }
411
- .notes-block ul { padding-left: 18px; }
412
- .notes-block li { margin: 3px 0; }
413
- .callout {
414
- background: #fef9c3;
415
- border: 1px solid #fde68a;
416
- border-left: 4px solid #f59e0b;
417
- padding: 10px 14px;
418
- border-radius: 0 8px 8px 0;
419
- font-size: 13px;
420
- color: #78350f;
421
- margin: 10px 0;
422
- font-style: italic;
423
- }
424
-
425
- /* ===== Footer ===== */
426
- .footer {
427
- text-align: center;
428
- padding: 24px 0 8px;
429
- font-size: 12px;
430
- color: #94a3b8;
431
- border-top: 1px solid #e2e8f0;
432
- margin-top: 8px;
433
- line-height: 1.8;
434
- }
435
-
436
- /* ===== Print ===== */
437
- @media print {
438
- body { background: white; }
439
- .page-header {
440
- background: #1a1a2e !important;
441
- -webkit-print-color-adjust: exact;
442
- print-color-adjust: exact;
443
- }
444
- .kpi-row { margin-top: 0; }
445
- .case-card, .section { box-shadow: none; }
446
- .agent-section h2 { page-break-after: avoid; }
447
- .case-card { page-break-inside: avoid; }
448
- img { page-break-inside: avoid; }
449
- }
450
- </style>
451
- </head>
452
- <body>
453
-
454
- <!-- ===== Page Header ===== -->
455
- <div class="page-header">
456
- <div class="header-inner">
457
- <div>
458
- <div class="header-brand">{{brand_name}}</div>
459
- <div class="header-subtitle">Solvea AI 客服 · POC 测试报告</div>
460
- </div>
461
- <div class="header-right">
462
- <div class="header-date">生成时间:{{generated_at}}</div>
463
- <div><span class="solvea-badge">Powered by Solvea</span></div>
464
- </div>
465
- </div>
466
- </div>
467
-
468
- <!-- ===== Main Container ===== -->
469
- <div class="container">
470
-
471
- <!-- KPI 数据卡片 -->
472
- <div class="kpi-row">
473
- <div class="kpi-card">
474
- <div class="kpi-value">{{total_cases}}</div>
475
- <div class="kpi-label">测试用例</div>
476
- </div>
477
- <div class="kpi-card">
478
- <div class="kpi-value">{{scene_count}}</div>
479
- <div class="kpi-label">覆盖场景</div>
480
- </div>
481
- </div>
482
-
483
- <!-- 测试账号 -->
484
- <div class="section">
485
- <div class="section-title">
486
- <span class="section-icon">🔑</span> 测试账号
487
- </div>
488
- <table class="account-table">
489
- <tr>
490
- <td>控制台地址</td>
491
- <td><a href="{{console_url}}" target="_blank">{{console_url}}</a></td>
492
- </tr>
493
- <tr>
494
- <td>测试账号</td>
495
- <td><span class="credential-badge">{{account_email}}</span></td>
496
- </tr>
497
- <tr>
498
- <td>登录密码</td>
499
- <td><span class="credential-badge">{{account_password}}</span></td>
500
- </tr>
501
- <tr>
502
- <td>客户官网</td>
503
- <td><a href="{{brand_website}}" target="_blank">{{brand_website}}</a></td>
504
- </tr>
505
- </table>
506
- <p class="account-note">请妥善保管账号信息,仅限本次测试用途。</p>
507
- </div>
508
-
509
- <!-- 测试场景覆盖 -->
510
- <div class="section">
511
- <div class="section-title">
512
- <span class="section-icon">🎯</span> 测试场景覆盖
513
- </div>
514
- <div class="scenario-grid">
515
- <div class="scenario-card">
516
- <div class="scenario-name">📦 包裹与物流问题</div>
517
- <div class="scenario-desc">涵盖包裹漏发、错发、破损,以及物流进度查询、物流异常处理等场景。</div>
518
- <div class="scenario-tip">建议:提供真实或模拟订单号,验证 AI 能否调取物流信息并给出准确处理建议。</div>
519
- </div>
520
- <div class="scenario-card">
521
- <div class="scenario-name">💬 售前咨询</div>
522
- <div class="scenario-desc">涵盖产品推荐、折扣与价格咨询、库存确认、支付问题等购买前常见疑问。</div>
523
- <div class="scenario-tip">建议:模拟消费者购买决策场景,验证 AI 从知识库检索并回答产品相关问题的准确性。</div>
524
- </div>
525
- <div class="scenario-card">
526
- <div class="scenario-name">🔧 产品问题</div>
527
- <div class="scenario-desc">涵盖产品使用指导、物理损坏(破损/故障)及非物理问题(功能异常、系统设置等)。</div>
528
- <div class="scenario-tip">建议:描述具体产品问题,验证 AI 结合知识库给出的解答是否准确完整。</div>
529
- </div>
530
- </div>
531
- <div class="scene-tags">
532
- {% for name in by_agent %}<span class="scene-tag">{{ name | e }}</span>{% endfor %}
533
- </div>
534
- </div>
535
-
536
- <!-- 操作步骤 -->
537
- <div class="section">
538
- <div class="section-title">
539
- <span class="section-icon">📋</span> 操作步骤
540
- </div>
541
- <ol class="steps-list">
542
- <li>
543
- <div class="step-connector"></div>
544
- <div class="step-title">登录控制台</div>
545
- <div class="step-body">使用上方测试账号登录 <a href="{{console_url}}" target="_blank">Shulex 控制台</a>。</div>
546
- </li>
547
- <li>
548
- <div class="step-connector"></div>
549
- <div class="step-title">进入 Agents 模块</div>
550
- <div class="step-body">选择想测试的场景,点击对应 Agent 进入画布。</div>
551
- </li>
552
- <li>
553
- <div class="step-connector"></div>
554
- <div class="step-title">点击 Preview 打开测试窗口</div>
555
- <div class="step-body">
556
- <img class="step-img" src="step3_preview.png" alt="Preview 入口">
557
- </div>
558
- </li>
559
- <li>
560
- <div class="step-connector"></div>
561
- <div class="step-title">使用节点备注里的订单号</div>
562
- <div class="step-body">
563
- 模拟测试时,需要订单号的环节,可以使用节点备注里的不同类型订单号。
564
- <img class="step-img" src="step4_order_note.png" alt="订单号备注示例">
565
- </div>
566
- </li>
567
- </ol>
568
- </div>
569
-
570
- <!-- 测试结果回放 -->
571
- <div class="section">
572
- <div class="section-title">
573
- <span class="section-icon">💬</span> 测试结果回放
574
- </div>
575
- <p class="results-intro">下面按 Agent 分组展示本次测试覆盖的所有用例及对话回放:</p>
576
- {% for agent_name, cases in by_agent.items() %}
577
- <section class="agent-section">
578
- <h2>🤖 {{ agent_name | e }} <span class="agent-meta">Agent ID: {{ cases[0].agent_id if cases else '' }}</span></h2>
579
- {% for c in cases %}
580
- {% set chat_id = c.results[-1].chatId if c.results else '—' %}
581
- <div class="case-card">
582
- <div class="case-header">
583
- <span class="case-id">{{ c.name | e }}</span>
584
- <span class="case-scenario">{{ c.scenario | e }}</span>
585
- <span class="chat-id-badge">Chat ID: <code>{{ chat_id or '—' }}</code></span>
586
- </div>
587
- <div class="dialogue">
588
- {% for t in c.results %}
589
- <div class="msg">
590
- <span class="label">👤 User</span>
591
- <div class="bubble user-bubble">{{ t.input | e }}</div>
592
- </div>
593
- <div class="msg">
594
- <span class="label">🤖 AI</span>
595
- <div class="bubble bot-bubble">{{ (t.content or '') | e | replace('\n', '<br>') }}</div>
596
- </div>
597
- {% endfor %}
598
- </div>
599
- </div>
600
- {% endfor %}
601
- </section>
602
- {% endfor %}
603
- </div>
604
-
605
- <!-- 测试注意事项 -->
606
- <div class="section">
607
- <div class="section-title">
608
- <span class="section-icon">⚠️</span> 测试注意事项
609
- </div>
610
- <div class="notes-block">
611
- <h3>关于新对话</h3>
612
- <p>每次开始新对话前,请点击 <strong>NewChat</strong> 按钮,否则 AI 会参考上文聊天记录回答,影响准确性。</p>
613
- <img class="step-img" src="notice_new_chat.png" alt="NewChat 入口">
614
- </div>
615
- <div class="notes-block">
616
- <h3>关于知识范围</h3>
617
- <p>提问时请注意查看机器人是否学习了对应知识。未学习的知识会按转人工流程处理。</p>
618
- </div>
619
- <div class="notes-block">
620
- <h3>关于转人工</h3>
621
- <p>默认转人工话术:</p>
622
- <div class="callout">Please wait for our team and we'll get back to you as soon as possible.</div>
623
- <p>出现该话术时,说明 AI 由于以下原因转入人工:</p>
624
- <ul>
625
- <li>缺乏对应知识</li>
626
- <li>识别到转人工意图</li>
627
- <li>命中红线问题</li>
628
- </ul>
629
- <p style="margin-top:8px;">具体原因可查看对话下方的小字或点击<strong>生成过程</strong>查看。</p>
630
- <img class="step-img" src="notice_escalate.png" alt="转人工通知话术">
631
- <p style="margin-top:12px;">转人工后 AI 不再回复,避免与人工客服抢答。如需继续向 AI 提问,请开启新对话。</p>
632
- <img class="step-img" src="notice_escalate2.png" alt="转人工后开新对话">
633
- </div>
634
- </div>
635
-
636
- <!-- 页脚 -->
637
- <div class="footer">
638
- <p>当前测试环境为专为 <strong>{{brand_name}}</strong> 搭建,功能仅供演示和体验。正式环境下可根据具体业务需求部署多功能 AI Agent。</p>
639
- <p>如有问题,欢迎随时联系 Shulex 技术支持团队。</p>
640
- <p style="margin-top:8px; color:#cbd5e1;">Powered by Solvea · {{generated_at}}</p>
641
- </div>
642
-
643
- </div>
644
- </body>
645
- </html>