@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,38 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Render a concise Delivery progress / deliverables summary."""
3
- import os, sys
4
- sys.path.insert(0, os.path.join(os.environ.get("SOLVEA_LIB_DIR", os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "__lib__"))), "skill-runtime"))
5
- from bootstrap import * # noqa: F401,F403
6
-
7
- import json
8
-
9
-
10
- STATE_FILE = STATE_DIR / "progress.json"
11
-
12
-
13
- def main() -> None:
14
- if not STATE_FILE.exists():
15
- print("Delivery progress not found. Run `python3 /skills/delivery/scripts/plan.py --init` first.")
16
- return
17
- state = json.loads(STATE_FILE.read_text(encoding="utf-8"))
18
- print("# Delivery Progress Summary")
19
- print(f"- status: `{state.get('status', 'empty')}`")
20
- print(f"- tenant: `{state.get('tenant') or '-'}`")
21
- print(f"- brand: `{state.get('brand_name') or '-'}`")
22
- intent = state.get("intent") or {}
23
- kb = state.get("kb") or {}
24
- regression = state.get("regression") or {}
25
- if intent.get("classification_report_path"):
26
- print(f"- classification report: `{intent['classification_report_path']}`")
27
- if intent.get("created_log_path"):
28
- print(f"- created log: `{intent['created_log_path']}`")
29
- if kb.get("qa_plan_path"):
30
- print(f"- kb qa plan: `{kb['qa_plan_path']}`")
31
- if regression.get("report_html"):
32
- print(f"- regression HTML: `{regression['report_html']}`")
33
- if regression.get("report_md"):
34
- print(f"- regression MD: `{regression['report_md']}`")
35
-
36
-
37
- if __name__ == "__main__":
38
- main()
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env python3
2
- """按意图配额从历史会话抽样 → 标准 cases.json(喂给 batch_test.py)。
3
-
4
- CLI:
5
- --total 100 整批配额(按意图分配,floor + 余数 +1)
6
- --intents A --intents B 指定意图(可重复);不传则 list_intents() 全量
7
- --mode single|multi single=只取首条 USER;multi=取所有 USER(默认 single)
8
- --with-metadata 抽样时把会话首轮 metadata 带进 case;默认不带
9
- --max-conversations 50 每个意图 limit
10
- --output cases.json 输出 cases.json 路径
11
-
12
- stdout:完成 `Wrote {N} cases → {output}`;意图列表为空 → exit 2。
13
- """
14
-
15
- import argparse
16
- import json
17
- import os
18
- import sys
19
-
20
- sys.path.insert(0, os.path.join(os.environ.get("SOLVEA_LIB_DIR", os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "__lib__"))), "skill-runtime"))
21
- from bootstrap import * # noqa: F401,F403
22
- from client import SolveaClient
23
-
24
-
25
- def allocate_quota(total: int, intents: list[str]) -> dict[str, int]:
26
- """按意图均匀分配总配额:floor 分配 + 余数从前往后各 +1。"""
27
- n = len(intents)
28
- if n == 0 or total <= 0:
29
- return {it: 0 for it in intents}
30
- base = total // n
31
- extra = total - base * n
32
- quota = {}
33
- for i, it in enumerate(intents):
34
- quota[it] = base + (1 if i < extra else 0)
35
- return quota
36
-
37
-
38
- def _slim_messages(messages: list[str], mode: str) -> list[str]:
39
- if mode == "single":
40
- return messages[:1]
41
- return messages
42
-
43
-
44
- def main():
45
- parser = argparse.ArgumentParser(description="按意图配额抽历史会话 → cases.json")
46
- parser.add_argument("--total", type=int, default=100, help="整批配额")
47
- parser.add_argument("--intents", action="append", default=None,
48
- help="指定意图名(可重复传);不传则 list_intents 全量")
49
- parser.add_argument("--mode", choices=["single", "multi"], default="single",
50
- help="single=只取首条 USER;multi=取所有 USER")
51
- parser.add_argument("--with-metadata", action="store_true",
52
- help="把会话首轮 metadata 带进 case")
53
- parser.add_argument("--max-conversations", type=int, default=50,
54
- help="每个意图最多拉多少 chat(API limit)")
55
- parser.add_argument("--output", required=True, help="输出 cases.json 路径")
56
- args = parser.parse_args()
57
-
58
- client = SolveaClient()
59
-
60
- intents = args.intents
61
- if not intents:
62
- all_resp = client.list_intents(category=None)
63
- all_list = all_resp if isinstance(all_resp, list) else \
64
- all_resp.get("data", all_resp.get("list", []))
65
- intents = [it.get("name") for it in all_list
66
- if isinstance(it, dict) and it.get("name")]
67
-
68
- if not intents:
69
- print("意图列表为空:list-intents 返回空,且 --intents 也未指定", file=sys.stderr)
70
- sys.exit(2)
71
-
72
- quota = allocate_quota(args.total, intents)
73
-
74
- cases = []
75
- for intent in intents:
76
- want = quota.get(intent, 0)
77
- if want <= 0:
78
- continue
79
- try:
80
- convs = client.get_conversations_by_intent(intent, limit=args.max_conversations)
81
- except Exception as e:
82
- print(f" WARN: get_conversations_by_intent({intent}) failed: {e}",
83
- file=sys.stderr)
84
- convs = []
85
- print(f" Loaded {len(convs)} conversations for intent '{intent}'",
86
- file=sys.stderr)
87
- # 取前 want 条(API 已经做了排序,这里不再重排)
88
- for c in convs[:want]:
89
- messages = _slim_messages(c.get("messages") or [], args.mode)
90
- if not messages:
91
- continue
92
- case = {
93
- "name": c.get("source_chat_id") or "",
94
- "messages": messages,
95
- "intent": intent,
96
- "source_chat_id": c.get("source_chat_id", ""),
97
- }
98
- if args.with_metadata and c.get("metadata"):
99
- case["metadata"] = c["metadata"]
100
- cases.append(case)
101
-
102
- os.makedirs(os.path.dirname(os.path.abspath(args.output)) or ".", exist_ok=True)
103
- with open(args.output, "w", encoding="utf-8") as f:
104
- json.dump(cases, f, ensure_ascii=False, indent=2)
105
- print(f"Wrote {len(cases)} cases → {args.output}")
106
-
107
-
108
- if __name__ == "__main__":
109
- main()
@@ -1,80 +0,0 @@
1
- ---
2
- name: kb-builder
3
- description: Shulex 知识库搭建与原子管理能力。用于目录管理,问答、文档、网页和产品知识的导入、查询、更新、状态管理与导出,以及标签、隔离关键词和回复模板管理。
4
- requires:
5
- libs: [solvea-api]
6
- ---
7
-
8
- # Shulex KB Builder
9
-
10
- 本 skill 提供知识库的原子管理能力、场景 reference 路由和通用执行规范。
11
-
12
- 详细格式、字段、确认步骤和异常处理都以对应 reference 为准;只在命中具体场景时读取相关 reference。
13
-
14
- ## 能力路由
15
-
16
- | 用户意图 | 读取的 interface / reference | 主要执行入口 |
17
- |---|---|---|
18
- | 网页建知识库、探查网站、设计目录 | [`interfaces/web-kb.md`](interfaces/web-kb.md)、[`references/directory.md`](references/directory.md) | `crawl_site.py`、`build_directory_plan.py`、`create_dirs.py` |
19
- | 网页/Word/PDF 保留原文 | 本文件“来源模式” | `import_source_documents.py` |
20
- | 网页/文件/工单整理成问答 | [`qa-quality.md`](references/qa-quality.md)、[`qa-from-web.md`](references/qa-from-web.md)、[`qa-from-help-center.md`](references/qa-from-help-center.md)、[`qa-from-pdf.md`](references/qa-from-pdf.md)、[`qa-from-tickets.md`](references/qa-from-tickets.md) | `extract_web_qa.py`、`batch_extract_ticket_qa.py`、`import_qa.py` |
21
- | 上传已有 QA 计划 | [`references/upload.md`](references/upload.md) | `import_qa.py` |
22
- | 回复模板库导入 | [`references/reply-template.md`](references/reply-template.md) | `import_templates.py` |
23
- | 查看、更新、移动、删除或改变知识状态 | [`references/knowledge.md`](references/knowledge.md) | 按 reference 提供的固定入口 |
24
- | 创建或更新产品知识 | [`references/product.md`](references/product.md) | `create-product-knowledge`、`update-product-knowledge` |
25
- | 导出知识 | [`references/export.md`](references/export.md) | `export_knowledge.py` |
26
- | 知识库目录管理 | [`references/directory.md`](references/directory.md) | 按 reference 提供的操作入口 |
27
- | 标签管理 | [`references/tags.md`](references/tags.md) | 按 reference 提供的操作入口 |
28
- | 隔离关键词及绑定 | [`references/isolation-keywords.md`](references/isolation-keywords.md)、[`references/tag-isolation-migration.md`](references/tag-isolation-migration.md) | 按 reference 提供的操作入口 |
29
-
30
- ## 来源模式
31
-
32
- - 网页可保存为“网页”,也可整理成“问答”;Word/PDF 可保存为“文档”,也可整理成“问答”。
33
- - 用户只提供网址或文件时,默认准备保留原文,但提交前询问:直接保存原始资料,还是整理成问答?用户已明确要求 FAQ/问答时不重复确认。
34
- - 保留原文计划格式:`{"source": "URL 或本地文件路径", "dir_path": ["一级", "二级", "三级"]}`。多条记录组成 JSON 数组;Word/PDF 先通过 `read_file` 物化。
35
- - 先运行 `import_source_documents.py --plan-file <plan>` 预览,用户明确确认后再加 `--execute`。脚本对本次计划内 URL 去重;历史重复由后端处理,执行结果保留后端响应。
36
-
37
- ## 基础查询入口
38
-
39
- 以下是本 skill 约定的只读查询入口,按需直接使用;涉及写入、查重、迁移、导出或结果校验时,再读取对应 reference。不要自行猜测其他 CLI 命令。
40
-
41
- | 查询内容 | 固定命令 |
42
- |---|---|
43
- | 目录树 | `npx --yes @shulex/cxclawctl@latest api list-directories --pretty` |
44
- | 知识列表 | `npx --yes @shulex/cxclawctl@latest api list-knowledge --type ALL --page-size 50 --page 1 --pretty` |
45
- | 按关键词查知识 | `npx --yes @shulex/cxclawctl@latest api list-knowledge --keyword "关键词" --page-size 50 --pretty` |
46
- | 单条知识 | `npx --yes @shulex/cxclawctl@latest api get-knowledge --id <knowledge_id> --type {QA,LEARN_SELF,FILE,WEBSITE,PRODUCT} --pretty` |
47
- | 知识标签定义 | `npx --yes @shulex/cxclawctl@latest api list-knowledge-tags --pretty` |
48
- | 隔离关键词 | `npx --yes @shulex/cxclawctl@latest api list-isolation-keywords --page-size 50 --page 1 --pretty` |
49
- | 单条知识已绑定的隔离关键词 | `npx --yes @shulex/cxclawctl@latest api get-knowledge-isolation-keywords --id <knowledge_id> --type {QA,LEARN_SELF,FILE,WEBSITE,PRODUCT} --pretty` |
50
- | 回复模板 | `npx --yes @shulex/cxclawctl@latest api list-templates --page-size 50 --pretty` |
51
-
52
- `list-knowledge` 分页时先看返回的 `total`,再按需增加 `--page`;接口最大 `--page-size` 为 1000,不要用不断增大页大小的方式探测总量。
53
-
54
- ## 写入入口索引
55
-
56
- 以下能力仍由本 skill 提供,但必须先读对应 reference、展示变更计划并取得明确确认,再使用其中规定的参数:
57
-
58
- | 写入能力 | 固定入口 | 必读 reference |
59
- |---|---|---|
60
- | 更新问答 / AI自学习 / 文档 / 网页 | `update-knowledge` / `batch-update-knowledge` / `update-document-content` | [`knowledge.md`](references/knowledge.md) |
61
- | 创建或更新产品知识 | `create-product-knowledge` / `update-product-knowledge` / `batch-update-products` | [`product.md`](references/product.md) |
62
- | 删除、移动、发布/下架、显示/隐藏各类知识 | `operate-knowledge` | [`knowledge.md`](references/knowledge.md) |
63
- | 创建、重命名、移动或删除目录 | `create-folder` / `create_dirs.py` / `update-directory` / `move-directory` / `delete-directory` | [`directory.md`](references/directory.md) |
64
- | 导入问答 | `import_qa.py` | [`upload.md`](references/upload.md) |
65
- | 导入文档或网页 | `import_source_documents.py` | 本文件“来源模式” |
66
- | 修改知识标签 | `edit-knowledge-tags` | [`tags.md`](references/tags.md) |
67
- | 创建、修改、删除或绑定隔离关键词 | `create-isolation-keyword` / `update-isolation-keyword` / `delete-isolation-keyword` / `batch-update-isolation-keyword-bindings` | [`isolation-keywords.md`](references/isolation-keywords.md) |
68
- | 创建、修改或删除回复模板 | `create-template` / `update-template` / `delete-templates` | [`reply-template.md`](references/reply-template.md) |
69
-
70
- ## 统一规则
71
-
72
- - 客户侧始终使用产品界面术语,并跟随用户的界面语言:中文使用“AI自学习 / 问答 / 文档 / 网页 / 产品”,英文使用“AI Self-learning / Q&A / Documents / Websites / Products”;不要向客户暴露 `QA`、`KU`、`FILE`、`DOCUMENT`、`WEBSITE` 等内部字段。
73
- - 网页和 Word/PDF 在执行前确认“保留原文”还是“整理成问答”;用户明确要求 FAQ/问答时才直接走 QA 流程。
74
- - 未明确指定时,目录默认最多三级;超过三级只能在用户明确要求后通过 `--max-depth` 覆盖。
75
- - 业务产物语言遵循:用户明确指定的产物语言 > 会话上下文中的用户界面语言偏好 > 用户当前消息语言。
76
- - 所有线上写入(创建目录、上传知识、修改知识、关键词变更)都必须先展示计划并等待明确确认。
77
- - 删除前必须展示影响范围,并获得同时表达“已知晓影响”和“确认删除”的强确认;简单的“确认 / OK / 可以”不足以授权删除。
78
- - 具体格式、目录规则、查重、结果校验和 API 参数以对应 reference 为准;不要把这些细节复制到本文件。
79
-
80
- 根据用户明确意图读取上表对应 reference,再执行相应的原子能力。
@@ -1,55 +0,0 @@
1
- # QA Upload Interface
2
-
3
- 公开能力:合并 QA parts 或现成 qa_plan,并上传到 Shulex 知识库。
4
-
5
- ## Stable commands
6
-
7
- ```bash
8
- # QA parts 合并 + dry-run
9
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
10
- --from-dir /workspace/tmp/kb-builder/qa_parts/ \
11
- --dry-run
12
-
13
- # 使用 dry-run 已落盘的 qa_plan 正式上传
14
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
15
- --qa-file /workspace/outputs/kb-builder/qa_plan_<ts>.json
16
-
17
- # 或直接从 parts 合并并上传
18
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
19
- --from-dir /workspace/tmp/kb-builder/qa_parts/
20
- ```
21
-
22
- ## Input qa item
23
-
24
- ```json
25
- {
26
- "dir_path": ["Product Introduction", "Smart Plugs", "Kasa EP25"],
27
- "question": "Kasa EP25 — What is the product overview?",
28
- "answer": "Markdown answer"
29
- }
30
- ```
31
-
32
- `dir_path` 必须是目录名数组,每一段都是一个实际文件夹名称。禁止写成字符串路径,例如
33
- `"/kb/B0117-03018-BK"` 或 `"Product Introduction/Speakers/B0117-03018-BK"`;这类输入会在
34
- dry-run 阶段失败。上传到已有目录前先用 `list-directories` 确认真实目录层级,并按该层级写数组。
35
-
36
- 如果 `answer` 包含图片,必须保留 markdown 图片语法:
37
-
38
- ```markdown
39
- ![](https://example.com/image.png)
40
- ```
41
-
42
- 处理 DOCX / PDF / 网页来源时,优先使用能保留 markdown 图片的读取结果。不要把含图文档重新降级为
43
- 纯段落文本后再生成 QA,否则会丢失图片但上传仍可能成功。
44
-
45
- ## Guarantees
46
-
47
- - `--from-dir` 会合并多个 QA part 并输出 `qa_plan_<ts>.json`。
48
- - 正式上传前必须先 dry-run 并获得用户明确确认。
49
- - `dir_path` schema 错误会在 dry-run 和正式上传前失败,不会创建目录。
50
- - `answer` 使用 markdown;上传脚本透传 answer 内容,不会替调用方补图片。
51
-
52
- ## Non-guarantees
53
-
54
- - 上传 API payload 结构不对调用方暴露。
55
- - 去重和目录匹配细节归 kb-builder 内部维护。
@@ -1,84 +0,0 @@
1
- # Web KB Interface
2
-
3
- 公开能力:从网站、产品站、帮助中心或文档站构建知识库目录与 QA,也支持在确认“保留网页原文”后创建网页资料。
4
-
5
- 网页地址先做模式确认:保留原始网页时使用
6
- `../scripts/import_source_documents.py --plan-file <plan> --execute`;选择整理问答时才进入下面的 crawl → extract → import_qa 流程。
7
-
8
- ## Modes
9
-
10
- ```text
11
- auto # 默认;适合网页整理的任务使用 crawl pipeline,其他任务走 legacy
12
- crawl # 新脚本化网页 pipeline,可使用 Crawl4AI
13
- legacy # 旧 reference + Tavily 工具路径,兼容历史行为
14
- ```
15
-
16
- ## Provider
17
-
18
- ```text
19
- auto | crawl4ai | tavily
20
- ```
21
-
22
- 原则:
23
-
24
- - Crawl4AI 只用于适合网页抓取/整理的任务。
25
- - PDF / xlsx / qa_plan.json / 回复模板 / 导出 / 单条知识更新不使用 Crawl4AI。
26
- - Crawl4AI 作为 Python 依赖运行在 sandbox 内的 skill 脚本中,不接入主服务全局工具。
27
- - 默认 `provider=auto` 保持轻量兼容路径;需要 JS/动态页面抓取时显式使用 `provider=crawl4ai`。
28
-
29
- ## Stable commands
30
-
31
- 首版脚本化 pipeline 目标入口:
32
-
33
- ```bash
34
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/crawl_site.py \
35
- --url <source_url> \
36
- --mode auto \
37
- --provider auto \
38
- --max-depth 3 \
39
- --max-pages 100 \
40
- --output /workspace/outputs/kb-builder/crawl_result_<ts>.json
41
-
42
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/build_directory_plan.py \
43
- --crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
44
- --output /workspace/outputs/kb-builder/directory_plan_<ts>.json
45
-
46
- # 展示 directory_plan_<ts>.json,等待用户明确确认后写入 confirmed_tree
47
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/build_directory_plan.py \
48
- --crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
49
- --output /workspace/outputs/kb-builder/directory_plan_<ts>.json \
50
- --write-confirmed-tree
51
-
52
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/create_dirs.py
53
-
54
- npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/extract_web_qa.py \
55
- --crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
56
- --output-dir /workspace/tmp/kb-builder/qa_parts
57
- ```
58
-
59
- 兼容路径:
60
-
61
- - `mode=legacy` 或 `provider=tavily` 时,按 `kb-builder/SKILL.md` 和对应 reference 走 legacy。
62
- - `provider=crawl4ai` 只在 sandbox 依赖可用时执行;失败时输出显式错误,不把调用方切到其他 skill 内部实现。
63
-
64
- ## Outputs
65
-
66
- - `crawl_result_<ts>.json`
67
- - `directory_plan_<ts>.json`
68
- - `/workspace/state/kb-builder/confirmed_tree.json`
69
- - `/workspace/tmp/kb-builder/qa_parts/*.json`
70
-
71
- ## Guarantees
72
-
73
- - 用户或上游 SOP 明确给出目录 schema 时,按输入 schema 生成目录树,不额外增加 Product Introduction 等默认根目录。
74
- - 未给出目录 schema 时,使用 kb-builder 默认标准模板:Product Introduction / Brand Policy / Help Center / Pending Assignment。
75
- - `Help Center` 仅在发现帮助中心/FAQ/文档站时创建。
76
- - QA parts 兼容 `import_qa.py --from-dir`。
77
- - `create_dirs.py` 前必须已经存在 `/workspace/state/kb-builder/confirmed_tree.json`;没有用户确认时不得写入或创建目录。
78
- - 调用方不需要知道 crawl provider 内部策略。
79
-
80
- ## Non-guarantees
81
-
82
- - 页面顺序不保证稳定。
83
- - Markdown 具体格式不保证完全一致。
84
- - Crawl provider 的具体实现不对调用方暴露。