@tencent-rtc/trtc-agent-skills 0.1.3 → 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 (360) hide show
  1. package/.cursor/rules/main.mdc +12 -0
  2. package/AGENTS.md +14 -104
  3. package/CLAUDE.md +15 -127
  4. package/CODEBUDDY.md +32 -118
  5. package/README.md +7 -5
  6. package/README.zh.md +7 -5
  7. package/bin/cli.js +133 -41
  8. package/hooks/__pycache__/cursor-adapter.cpython-313.pyc +0 -0
  9. package/hooks/cursor-adapter.py +45 -18
  10. package/hooks/hooks-cursor.json +5 -18
  11. package/hooks/hooks.json +6 -31
  12. package/knowledge-base/conference/web/index.yaml +143 -0
  13. package/knowledge-base/platform-slice-template.md +1041 -133
  14. package/knowledge-base/products.yaml +76 -0
  15. package/knowledge-base/scenario-spec.md +1316 -115
  16. package/knowledge-base/scenarios/conference/base/general-conference.md +22 -2
  17. package/knowledge-base/scenarios/conference/base/webinar-conference.md +14 -0
  18. package/knowledge-base/scenarios/conference/medical/1v1-video-consultation.md +19 -0
  19. package/knowledge-base/scenarios/conference/medical/medical-multidoctor-consultation.md +13 -0
  20. package/knowledge-base/scenarios/live/entertainment-live-room.md +12 -0
  21. package/knowledge-base/slice-spec.md +2377 -299
  22. package/knowledge-base/slices/conference/web/integration-audit.md +1 -1
  23. package/knowledge-base/slices/conference/web/login-auth.md +14 -1
  24. package/knowledge-base/tooling/aliases.yaml +92 -0
  25. package/knowledge-base/tooling/intent-signals.yaml +181 -0
  26. package/knowledge-base/tooling/symptom-keywords.yaml +21 -0
  27. package/package.json +1 -1
  28. package/skills/trtc/SKILL.md +202 -245
  29. package/skills/trtc/hooks/__pycache__/report_prompt.cpython-313.pyc +0 -0
  30. package/skills/{trtc-topic/guardrails → trtc/hooks}/gate_slice_read.py +12 -8
  31. package/skills/{trtc-topic/guardrails → trtc/hooks}/gate_slice_write.py +16 -12
  32. package/skills/{trtc-topic/guardrails → trtc/hooks}/stop_require_apply_evidence.py +22 -14
  33. package/skills/trtc/hooks/topic_phase_gate.py +161 -0
  34. package/skills/{trtc-topic → trtc}/runtime/README.md +2 -2
  35. package/skills/{trtc-onboarding/reference/reporting-protocol.md → trtc/runtime/REPORTING.md} +5 -5
  36. package/skills/{trtc-topic → trtc}/runtime/RUNTIME.md +5 -5
  37. package/skills/trtc/runtime/lib/__init__.py +0 -0
  38. package/skills/{trtc-topic → trtc}/runtime/package-lock.json +2 -2
  39. package/skills/{trtc-topic → trtc}/runtime/package.json +2 -2
  40. package/skills/{trtc-topic → trtc}/runtime/telemetry-bridge.mjs +1 -1
  41. package/skills/{trtc-topic/scripts → trtc/tools}/STATE-MACHINE-GUIDE.md +23 -23
  42. package/skills/trtc/tools/__init__.py +2 -0
  43. package/skills/trtc/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  44. package/skills/trtc/tools/__pycache__/query_classifier.cpython-313.pyc +0 -0
  45. package/skills/trtc/tools/__pycache__/reporting.cpython-313.pyc +0 -0
  46. package/skills/trtc/tools/__pycache__/search.cpython-313.pyc +0 -0
  47. package/skills/trtc/tools/__pycache__/session.cpython-313.pyc +0 -0
  48. package/skills/trtc/tools/apply.py +540 -0
  49. package/skills/trtc/tools/docs.py +712 -0
  50. package/skills/trtc/tools/docsbot.py +182 -0
  51. package/skills/trtc/tools/entry/render_ai_instructions.py +92 -0
  52. package/skills/trtc/tools/flow.py +1089 -0
  53. package/skills/{trtc-topic/scripts → trtc/tools}/init_slice_queue.py +5 -4
  54. package/skills/{trtc-topic/scripts → trtc/tools}/next_slice.py +5 -4
  55. package/skills/trtc/tools/query_classifier.py +301 -0
  56. package/skills/trtc/tools/reporting.py +447 -0
  57. package/skills/trtc/tools/search.py +817 -0
  58. package/skills/trtc/tools/session.py +1261 -0
  59. package/skills/trtc/tools/state_machine.py +690 -0
  60. package/skills/trtc-ai-service/README.md +195 -0
  61. package/skills/trtc-ai-service/README.zh-CN.md +193 -0
  62. package/skills/trtc-ai-service/SKILL.md +945 -0
  63. package/skills/trtc-ai-service/auto_adapters/README.md +40 -0
  64. package/skills/trtc-ai-service/auto_adapters/frontend-spa/README.md +27 -0
  65. package/skills/trtc-ai-service/auto_adapters/frontend-spa/angular/voice-agent.component.ts.tpl +131 -0
  66. package/skills/trtc-ai-service/auto_adapters/frontend-spa/manifest.yaml +57 -0
  67. package/skills/trtc-ai-service/auto_adapters/frontend-spa/react/VoiceAgent.tsx.tpl +142 -0
  68. package/skills/trtc-ai-service/auto_adapters/frontend-spa/vue/VoiceAgent.vue.tpl +121 -0
  69. package/skills/trtc-ai-service/auto_adapters/integration_templates/generic-backend.md +45 -0
  70. package/skills/trtc-ai-service/auto_adapters/integration_templates/generic-frontend.md +51 -0
  71. package/skills/trtc-ai-service/auto_adapters/integration_templates/generic-rest-api.md +93 -0
  72. package/skills/trtc-ai-service/auto_adapters/java-backend/README.md +25 -0
  73. package/skills/trtc-ai-service/auto_adapters/java-backend/manifest.yaml +30 -0
  74. package/skills/trtc-ai-service/auto_adapters/java-backend/quarkus/VoiceAgentFilter.java.tpl +64 -0
  75. package/skills/trtc-ai-service/auto_adapters/java-backend/springboot/VoiceAgentFilter.java.tpl +91 -0
  76. package/skills/trtc-ai-service/auto_adapters/manifest.yaml +43 -0
  77. package/skills/trtc-ai-service/auto_adapters/node-backend/README.md +25 -0
  78. package/skills/trtc-ai-service/auto_adapters/node-backend/express.js.tpl +40 -0
  79. package/skills/trtc-ai-service/auto_adapters/node-backend/fastify.js.tpl +27 -0
  80. package/skills/trtc-ai-service/auto_adapters/node-backend/koa.js.tpl +31 -0
  81. package/skills/trtc-ai-service/auto_adapters/node-backend/manifest.yaml +47 -0
  82. package/skills/trtc-ai-service/auto_adapters/python-backend/README.md +22 -0
  83. package/skills/trtc-ai-service/auto_adapters/python-backend/django.py.tpl +32 -0
  84. package/skills/trtc-ai-service/auto_adapters/python-backend/fastapi.py.tpl +35 -0
  85. package/skills/trtc-ai-service/auto_adapters/python-backend/flask.py.tpl +31 -0
  86. package/skills/trtc-ai-service/auto_adapters/python-backend/manifest.yaml +45 -0
  87. package/skills/trtc-ai-service/capabilities/__init__.py +43 -0
  88. package/skills/trtc-ai-service/capabilities/conversation-core/.env.example +29 -0
  89. package/skills/trtc-ai-service/capabilities/conversation-core/INTEGRATION.md +134 -0
  90. package/skills/trtc-ai-service/capabilities/conversation-core/INTERFACE_ADAPT.md +111 -0
  91. package/skills/trtc-ai-service/capabilities/conversation-core/QUICK_START.md +62 -0
  92. package/skills/trtc-ai-service/capabilities/conversation-core/manifest.yaml +250 -0
  93. package/skills/trtc-ai-service/capabilities/conversation-core/requirements.txt +6 -0
  94. package/skills/trtc-ai-service/capabilities/conversation-core/src/__init__.py +10 -0
  95. package/skills/trtc-ai-service/capabilities/conversation-core/src/_capability_loader.py +218 -0
  96. package/skills/trtc-ai-service/capabilities/conversation-core/src/agent.py +231 -0
  97. package/skills/trtc-ai-service/capabilities/conversation-core/src/credentials.py +132 -0
  98. package/skills/trtc-ai-service/capabilities/conversation-core/src/health.py +355 -0
  99. package/skills/trtc-ai-service/capabilities/conversation-core/src/log_filter.py +76 -0
  100. package/skills/trtc-ai-service/capabilities/conversation-core/src/modality.py +109 -0
  101. package/skills/trtc-ai-service/capabilities/conversation-core/src/server.py +312 -0
  102. package/skills/trtc-ai-service/capabilities/conversation-core/src/trtc_client.py +315 -0
  103. package/skills/trtc-ai-service/capabilities/conversation-core/src/usersig.py +90 -0
  104. package/skills/trtc-ai-service/capabilities/conversation-core/tests/test_skeleton.py +216 -0
  105. package/skills/trtc-ai-service/capabilities/conversation-core/web-demo/README.md +48 -0
  106. package/skills/trtc-ai-service/capabilities/conversation-core/web-demo/app.js +415 -0
  107. package/skills/trtc-ai-service/capabilities/conversation-core/web-demo/index.html +68 -0
  108. package/skills/trtc-ai-service/capabilities/conversation-core/web-demo/styles.css +136 -0
  109. package/skills/trtc-ai-service/capabilities/digital-human/README.md +31 -0
  110. package/skills/trtc-ai-service/capabilities/digital-human/manifest.yaml +64 -0
  111. package/skills/trtc-ai-service/capabilities/digital-human/src/__init__.py +2 -0
  112. package/skills/trtc-ai-service/capabilities/digital-human/src/router.py +43 -0
  113. package/skills/trtc-ai-service/capabilities/human-handoff/INTERFACE_ADAPT.md +353 -0
  114. package/skills/trtc-ai-service/capabilities/human-handoff/README.md +44 -0
  115. package/skills/trtc-ai-service/capabilities/human-handoff/manifest.yaml +227 -0
  116. package/skills/trtc-ai-service/capabilities/human-handoff/src/__init__.py +2 -0
  117. package/skills/trtc-ai-service/capabilities/human-handoff/src/adapters/__init__.py +9 -0
  118. package/skills/trtc-ai-service/capabilities/human-handoff/src/adapters/default_rest.py +242 -0
  119. package/skills/trtc-ai-service/capabilities/human-handoff/src/adapters/factory.py +89 -0
  120. package/skills/trtc-ai-service/capabilities/human-handoff/src/adapters/local_queue.py +258 -0
  121. package/skills/trtc-ai-service/capabilities/human-handoff/src/adapters/mock.py +132 -0
  122. package/skills/trtc-ai-service/capabilities/human-handoff/src/core/__init__.py +25 -0
  123. package/skills/trtc-ai-service/capabilities/human-handoff/src/core/intent_detector.py +75 -0
  124. package/skills/trtc-ai-service/capabilities/human-handoff/src/core/models.py +163 -0
  125. package/skills/trtc-ai-service/capabilities/human-handoff/src/core/service.py +192 -0
  126. package/skills/trtc-ai-service/capabilities/human-handoff/src/feedback_store.py +54 -0
  127. package/skills/trtc-ai-service/capabilities/human-handoff/src/ports/__init__.py +4 -0
  128. package/skills/trtc-ai-service/capabilities/human-handoff/src/ports/handoff_client.py +86 -0
  129. package/skills/trtc-ai-service/capabilities/human-handoff/src/queue.py +62 -0
  130. package/skills/trtc-ai-service/capabilities/human-handoff/src/router.py +201 -0
  131. package/skills/trtc-ai-service/capabilities/human-handoff/src/summary_link.py +77 -0
  132. package/skills/trtc-ai-service/capabilities/human-handoff/src/trigger.py +25 -0
  133. package/skills/trtc-ai-service/capabilities/knowledge-base/INTERFACE_ADAPT.md +297 -0
  134. package/skills/trtc-ai-service/capabilities/knowledge-base/README.md +51 -0
  135. package/skills/trtc-ai-service/capabilities/knowledge-base/data/faq.json +20 -0
  136. package/skills/trtc-ai-service/capabilities/knowledge-base/manifest.yaml +211 -0
  137. package/skills/trtc-ai-service/capabilities/knowledge-base/src/__init__.py +8 -0
  138. package/skills/trtc-ai-service/capabilities/knowledge-base/src/adapters/__init__.py +9 -0
  139. package/skills/trtc-ai-service/capabilities/knowledge-base/src/adapters/default_rest.py +209 -0
  140. package/skills/trtc-ai-service/capabilities/knowledge-base/src/adapters/factory.py +86 -0
  141. package/skills/trtc-ai-service/capabilities/knowledge-base/src/adapters/local_json.py +172 -0
  142. package/skills/trtc-ai-service/capabilities/knowledge-base/src/adapters/mock.py +91 -0
  143. package/skills/trtc-ai-service/capabilities/knowledge-base/src/core/__init__.py +12 -0
  144. package/skills/trtc-ai-service/capabilities/knowledge-base/src/core/models.py +77 -0
  145. package/skills/trtc-ai-service/capabilities/knowledge-base/src/core/scoring.py +73 -0
  146. package/skills/trtc-ai-service/capabilities/knowledge-base/src/core/service.py +78 -0
  147. package/skills/trtc-ai-service/capabilities/knowledge-base/src/ports/__init__.py +4 -0
  148. package/skills/trtc-ai-service/capabilities/knowledge-base/src/ports/kb_client.py +61 -0
  149. package/skills/trtc-ai-service/capabilities/knowledge-base/src/retriever.py +56 -0
  150. package/skills/trtc-ai-service/capabilities/knowledge-base/src/router.py +85 -0
  151. package/skills/trtc-ai-service/capabilities/session-summary/INTERFACE_ADAPT.md +99 -0
  152. package/skills/trtc-ai-service/capabilities/session-summary/README.md +47 -0
  153. package/skills/trtc-ai-service/capabilities/session-summary/data/test_session.json +18 -0
  154. package/skills/trtc-ai-service/capabilities/session-summary/manifest.yaml +165 -0
  155. package/skills/trtc-ai-service/capabilities/session-summary/src/__init__.py +2 -0
  156. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/__init__.py +5 -0
  157. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/base.py +31 -0
  158. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/default_rest.py +67 -0
  159. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/factory.py +51 -0
  160. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/local_json.py +42 -0
  161. package/skills/trtc-ai-service/capabilities/session-summary/src/adapters/mock.py +22 -0
  162. package/skills/trtc-ai-service/capabilities/session-summary/src/recorder.py +210 -0
  163. package/skills/trtc-ai-service/capabilities/session-summary/src/router.py +93 -0
  164. package/skills/trtc-ai-service/capabilities/session-summary/src/summarizer.py +163 -0
  165. package/skills/trtc-ai-service/capabilities/tool-calling/INTERFACE_ADAPT.md +158 -0
  166. package/skills/trtc-ai-service/capabilities/tool-calling/README.md +50 -0
  167. package/skills/trtc-ai-service/capabilities/tool-calling/data/tools.yaml +58 -0
  168. package/skills/trtc-ai-service/capabilities/tool-calling/examples/__init__.py +1 -0
  169. package/skills/trtc-ai-service/capabilities/tool-calling/examples/local_tools.py +101 -0
  170. package/skills/trtc-ai-service/capabilities/tool-calling/manifest.yaml +146 -0
  171. package/skills/trtc-ai-service/capabilities/tool-calling/src/__init__.py +8 -0
  172. package/skills/trtc-ai-service/capabilities/tool-calling/src/dispatcher.py +54 -0
  173. package/skills/trtc-ai-service/capabilities/tool-calling/src/registry.py +219 -0
  174. package/skills/trtc-ai-service/capabilities/tool-calling/src/router.py +50 -0
  175. package/skills/trtc-ai-service/references/business-contract-spec.md +263 -0
  176. package/skills/trtc-ai-service/scenarios/custom-builder/README.md +86 -0
  177. package/skills/trtc-ai-service/scenarios/custom-builder/output-templates/recipe.yaml.j2 +194 -0
  178. package/skills/trtc-ai-service/scenarios/custom-builder/prompts/q1-business-scenario.md +43 -0
  179. package/skills/trtc-ai-service/scenarios/custom-builder/prompts/q2-io-modality.md +57 -0
  180. package/skills/trtc-ai-service/scenarios/custom-builder/prompts/q3-ui-form.md +55 -0
  181. package/skills/trtc-ai-service/scenarios/custom-builder/prompts/q4-capabilities.md +78 -0
  182. package/skills/trtc-ai-service/scenarios/customer-service/README.md +114 -0
  183. package/skills/trtc-ai-service/scenarios/customer-service/recipe.yaml +154 -0
  184. package/skills/trtc-ai-service/scenarios/customer-service/sample-data/README.md +32 -0
  185. package/skills/trtc-ai-service/scenarios/customer-service/sample-data/faq-sample.json +37 -0
  186. package/skills/trtc-ai-service/scenarios/customer-service/system-prompt.template.md +94 -0
  187. package/skills/trtc-ai-service/scenarios/customer-service/ui/admin-board/app.js +347 -0
  188. package/skills/trtc-ai-service/scenarios/customer-service/ui/admin-board/index.html +125 -0
  189. package/skills/trtc-ai-service/scenarios/customer-service/ui/admin-board/styles.css +487 -0
  190. package/skills/trtc-ai-service/scenarios/customer-service/ui/admin-board/tokens.css +71 -0
  191. package/skills/trtc-ai-service/scenarios/customer-service/ui/design-system/DESIGN_GUIDELINES.md +370 -0
  192. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/README.md +68 -0
  193. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/app.js +1307 -0
  194. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/data.js +40 -0
  195. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/index.html +233 -0
  196. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/mock-shop.json +21 -0
  197. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/styles.css +603 -0
  198. package/skills/trtc-ai-service/scenarios/customer-service/ui/voice-customer-service/tokens.css +71 -0
  199. package/skills/trtc-ai-service/scenarios/customer-service/ui/widget-floating/agent-link.js +323 -0
  200. package/skills/trtc-ai-service/scenarios/customer-service/ui/widget-floating/app.js +458 -0
  201. package/skills/trtc-ai-service/scenarios/customer-service/ui/widget-floating/index.html +109 -0
  202. package/skills/trtc-ai-service/scenarios/customer-service/ui/widget-floating/styles.css +489 -0
  203. package/skills/trtc-ai-service/scenarios/customer-service/ui/widget-floating/tokens.css +59 -0
  204. package/skills/trtc-ai-service/scripts/add-capability.py +364 -0
  205. package/skills/trtc-ai-service/scripts/contract-adapt.py +334 -0
  206. package/skills/trtc-ai-service/scripts/detect-stack.py +40 -0
  207. package/skills/trtc-ai-service/scripts/lib/__init__.py +20 -0
  208. package/skills/trtc-ai-service/scripts/lib/adapter_codegen.py +509 -0
  209. package/skills/trtc-ai-service/scripts/lib/arbitrator.py +152 -0
  210. package/skills/trtc-ai-service/scripts/lib/contract_resolver.py +519 -0
  211. package/skills/trtc-ai-service/scripts/lib/credential_validators.py +253 -0
  212. package/skills/trtc-ai-service/scripts/lib/curl_parser.py +303 -0
  213. package/skills/trtc-ai-service/scripts/lib/degrader.py +140 -0
  214. package/skills/trtc-ai-service/scripts/lib/injector.py +347 -0
  215. package/skills/trtc-ai-service/scripts/lib/manifest_resolver.py +288 -0
  216. package/skills/trtc-ai-service/scripts/lib/openapi_parser.py +289 -0
  217. package/skills/trtc-ai-service/scripts/lib/stack_detector.py +159 -0
  218. package/skills/trtc-ai-service/scripts/lib/tokens_compile.py +204 -0
  219. package/skills/trtc-ai-service/scripts/post-install-patch.py +225 -0
  220. package/skills/trtc-ai-service/scripts/setup-credentials.py +393 -0
  221. package/skills/trtc-ai-service/scripts/verify-credentials.py +108 -0
  222. package/skills/trtc-ai-service/start.sh +111 -0
  223. package/skills/trtc-ai-service/tests/__init__.py +1 -0
  224. package/skills/trtc-ai-service/tests/test_arbitrator.py +64 -0
  225. package/skills/trtc-ai-service/tests/test_capability_overlay.py +85 -0
  226. package/skills/trtc-ai-service/tests/test_contract_resolver.py +190 -0
  227. package/skills/trtc-ai-service/tests/test_handoff_ports.py +195 -0
  228. package/skills/trtc-ai-service/tests/test_kb_ports.py +195 -0
  229. package/skills/trtc-ai-service/tests/test_manifest_resolver.py +95 -0
  230. package/skills/trtc-ai-service/tests/test_recipe_assembly.py +175 -0
  231. package/skills/trtc-ai-service/tests/test_stack_and_degrader.py +101 -0
  232. package/skills/trtc-ai-service/tests/test_verify_credentials.py +285 -0
  233. package/skills/trtc-ai-service/triggers.yaml +29 -0
  234. package/skills/trtc-conference/SKILL.md +324 -0
  235. package/skills/trtc-conference/flows/onboarding.md +205 -0
  236. package/skills/trtc-conference/flows/topic.md +474 -0
  237. package/skills/trtc-conference/flows/troubleshoot.md +85 -0
  238. package/skills/trtc-conference/hooks/pretooluse_require_business_decisions.py +213 -0
  239. package/skills/trtc-conference/playbooks/medical-quickstart.md +84 -0
  240. package/skills/trtc-conference/playbooks/official-roomkit.md +97 -0
  241. package/skills/trtc-conference/references/local-usersig/basic-info-config.ts +39 -0
  242. package/skills/trtc-conference/references/usersig-handling.md +134 -0
  243. package/skills/trtc-conference/templates/medical-consultation/src/config/lib-generate-test-usersig-es.min.d.ts +4 -0
  244. package/skills/trtc-conference/templates/medical-consultation/src/config/lib-generate-test-usersig-es.min.js +2 -0
  245. package/skills/trtc-conference/tests/__pycache__/test_conference_onboarding_contract.cpython-313-pytest-9.0.2.pyc +0 -0
  246. package/skills/trtc-conference/tests/__pycache__/test_conference_topic_flow_contract.cpython-313-pytest-9.0.2.pyc +0 -0
  247. package/skills/trtc-conference/tests/test_conference_index_contract.py +43 -0
  248. package/skills/trtc-conference/tests/test_conference_onboarding_contract.py +103 -0
  249. package/skills/trtc-conference/tests/test_conference_template_contract.py +25 -0
  250. package/skills/trtc-conference/tests/test_conference_topic_flow_contract.py +132 -0
  251. package/skills/trtc-conference/tools/apply_checks.py +328 -0
  252. package/skills/trtc-conference/verify_lib/__init__.py +0 -0
  253. package/skills/{trtc-apply/guardrails/apply_lib → trtc-conference/verify_lib}/rule_parser.py +1 -1
  254. package/skills/trtc-docs/SKILL.md +91 -119
  255. package/.cursor/rules/ui-mode.mdc +0 -99
  256. package/ai-instructions/base.md +0 -13
  257. package/ai-instructions/ui-mode.md +0 -93
  258. package/knowledge-base/index.yaml +0 -462
  259. package/skills/trtc/room-builder/SKILL.md +0 -133
  260. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/README.md +0 -108
  261. package/skills/trtc/room-builder/tools/render_ai_instructions.py +0 -226
  262. package/skills/trtc-apply/SKILL.md +0 -97
  263. package/skills/trtc-onboarding/SKILL.md +0 -841
  264. package/skills/trtc-onboarding/reference/path-a1-demo.md +0 -103
  265. package/skills/trtc-onboarding/reference/path-a2-integrate.md +0 -737
  266. package/skills/trtc-onboarding/reference/path-b-troubleshoot.md +0 -186
  267. package/skills/trtc-onboarding/reference/path-c-expand.md +0 -43
  268. package/skills/trtc-onboarding/reference/supported-matrix.md +0 -100
  269. package/skills/trtc-search/SKILL.md +0 -228
  270. package/skills/trtc-topic/SKILL.md +0 -622
  271. package/skills/trtc-topic/scripts/apply.py +0 -581
  272. package/skills/trtc-topic/scripts/lib/state_machine.py +0 -328
  273. package/skills/trtc-topic/tests/README.md +0 -70
  274. package/skills/trtc-topic/tests/conftest.py +0 -72
  275. package/skills/trtc-topic/tests/test_apply_cli.py +0 -480
  276. package/skills/trtc-topic/tests/test_end_to_end.py +0 -305
  277. package/skills/trtc-topic/tests/test_finalize_session.py +0 -51
  278. package/skills/trtc-topic/tests/test_gates.py +0 -316
  279. package/skills/trtc-topic/tests/test_session_resolver.py +0 -260
  280. package/skills/trtc-topic/tests/test_state_machine.py +0 -414
  281. package/skills/trtc-topic/tests/test_stop_require_apply.py +0 -99
  282. package/skills/trtc-topic/tests/test_topic_skill_invariants.py +0 -130
  283. /package/skills/{trtc-topic → trtc}/runtime/lib/platforms.py +0 -0
  284. /package/skills/{trtc-topic → trtc}/runtime/telemetry_collector.py +0 -0
  285. /package/skills/{trtc-onboarding/reference → trtc/runtime}/usersig-handling.md +0 -0
  286. /package/skills/{trtc-topic/scripts → trtc/tools}/finalize_session.py +0 -0
  287. /package/skills/{trtc-apply/guardrails/apply_lib → trtc-ai-service/capabilities/conversation-core/tests}/__init__.py +0 -0
  288. /package/skills/{trtc-topic → trtc-conference}/references/execution-units.yaml +0 -0
  289. /package/skills/{trtc/room-builder/templates/scenarios/medical-consultation/src/config → trtc-conference/references/local-usersig}/lib-generate-test-usersig-es.min.d.ts +0 -0
  290. /package/skills/{trtc/room-builder/templates/scenarios/medical-consultation/src/config → trtc-conference/references/local-usersig}/lib-generate-test-usersig-es.min.js +0 -0
  291. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/docs/backend-contract.zh-CN.md +0 -0
  292. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/docs/integration.zh-CN.md +0 -0
  293. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/docs/theme.zh-CN.md +0 -0
  294. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/index.html +0 -0
  295. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/package.json +0 -0
  296. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/postcss.config.js +0 -0
  297. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/App.vue +0 -0
  298. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/ConsultationManagePanel.vue +0 -0
  299. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/LanguageSwitch.vue +0 -0
  300. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/LoadingSpinner.vue +0 -0
  301. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalAlert.vue +0 -0
  302. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalBusinessPanel.vue +0 -0
  303. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalButton.vue +0 -0
  304. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalConfirmDialog.vue +0 -0
  305. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalDataPanel.vue +0 -0
  306. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/MedicalRecordPanel.vue +0 -0
  307. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/components/PrescriptionPanel.vue +0 -0
  308. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/config/basic-info-config.ts +0 -0
  309. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/config/runtime-config.ts +0 -0
  310. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/env.d.ts +0 -0
  311. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/ConsultationChatPanel.vue +0 -0
  312. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/ConsultationMembersPanel.vue +0 -0
  313. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/ConsultationTranscriptionPanel.vue +0 -0
  314. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/ConsultationVideoStage.vue +0 -0
  315. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/InviteDoctorDialog.vue +0 -0
  316. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/components/KickMemberConfirmDialog.vue +0 -0
  317. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/types.ts +0 -0
  318. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/useConsultationChat.ts +0 -0
  319. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/useConsultationDevices.ts +0 -0
  320. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/useConsultationParticipants.ts +0 -0
  321. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/useConsultationPermissions.ts +0 -0
  322. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/features/consultation/utils.ts +0 -0
  323. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/i18n/en-US/index.ts +0 -0
  324. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/i18n/index.ts +0 -0
  325. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/i18n/medicalTranslate.ts +0 -0
  326. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/i18n/state.ts +0 -0
  327. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/i18n/zh-CN/index.ts +0 -0
  328. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/main.ts +0 -0
  329. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/mock/appointments.ts +0 -0
  330. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/mock/users.ts +0 -0
  331. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/router/index.ts +0 -0
  332. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/index.ts +0 -0
  333. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/integration/appointmentService.ts +0 -0
  334. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/integration/authService.ts +0 -0
  335. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/integration/launchContext.ts +0 -0
  336. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/integration/userService.ts +0 -0
  337. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/mock/appointmentService.ts +0 -0
  338. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/mock/authService.ts +0 -0
  339. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/mock/userService.ts +0 -0
  340. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/services/adapters/types.ts +0 -0
  341. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/shared/icons.ts +0 -0
  342. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/styles/index.css +0 -0
  343. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/styles/tailwind.css +0 -0
  344. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/styles/theme.css +0 -0
  345. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/utils/auth.ts +0 -0
  346. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/utils/format.ts +0 -0
  347. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/utils/navigation.ts +0 -0
  348. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/utils/session.ts +0 -0
  349. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/DoctorConsultationView.vue +0 -0
  350. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/DoctorDashboardView.vue +0 -0
  351. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/LoginView.vue +0 -0
  352. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/PatientConsultationFinishedView.vue +0 -0
  353. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/PatientConsultationView.vue +0 -0
  354. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/PatientSelectDoctorView.vue +0 -0
  355. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/src/views/PatientWaitingView.vue +0 -0
  356. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/tsconfig.json +0 -0
  357. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/tsconfig.node.json +0 -0
  358. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation/vite.config.ts +0 -0
  359. /package/skills/{trtc/room-builder/templates/scenarios → trtc-conference/templates}/medical-consultation//346/216/245/345/205/245/350/257/264/346/230/216.md" +0 -0
  360. /package/skills/{trtc-topic/runtime/lib → trtc-conference/tools}/__init__.py +0 -0
@@ -1,186 +0,0 @@
1
- # Path B — Troubleshooting
2
-
3
- > Loaded by `../../trtc-onboarding/SKILL.md` when `intent = troubleshoot` in `${CLAUDE_PROJECT_DIR}/.trtc-session.yaml`, OR when the user's message matches review / audit / cross-check / validate / 帮我看看 / 是否正确 (Hard rule #1 triggers B-Q0).
4
- > Before reading this file, SKILL.md must have populated `${CLAUDE_PROJECT_DIR}/.trtc-session.yaml` and passed Stage 1 calibration.
5
-
6
- **Your role: Debugger or integration auditor** — depending on B-Q0 classification. Walk the right tree; do not default to code-style review.
7
-
8
- Recap examples (translate to user's language):
9
- - Runtime: *Got it — something's broken in your Conference Web / RoomKit integration. Let me narrow down the symptom.*
10
- - Audit: *You want to check whether your meeting flow matches the official integration path — I'll walk the audit checklist.*
11
-
12
- ---
13
-
14
- ## B-Q0 — Intent triage (BEFORE B-Q1)
15
-
16
- **Trigger**: ANY of:
17
- - `intent = troubleshoot` in session
18
- - review / audit / cross-check / validate / 审查 / 帮我看看 / 是否正确 / check my X
19
- - 检查遗漏 / 业务流程 / 对照官方 / FAQ / 排障
20
-
21
- **Core idea**: triage to the **underlying intent**. Do NOT refuse; do NOT produce code-style review.
22
-
23
- ### Step 1 — Self-classify (6 intents)
24
-
25
- | Intent | Signal | Route |
26
- |--------|--------|-------|
27
- | **A. Runtime symptom** | 报错 / 崩溃 / 黑屏 / 无声音 / 进房失败 / doesn't work / login fails / 不工作 + concrete failure | **B-Q1** symptom tree (product-aware) |
28
- | **B. Error code** | Numeric error code (6206, 100211, 100006, 70001, …) | `docs` skill (`intent=slice-lookup`, search `intent=error-code`) |
29
- | **C. Official pattern** | 官方推荐 / 标准接入 / 应该怎么接 / correct pattern / host create-join-leave sequence | `docs` skill (`intent=slice-lookup`, search `intent=pattern`) |
30
- | **D. API comparison** | X vs Y / X 还是 Y / 两套检测怎么选 / 预制 UI vs State API | `docs` skill (`intent=slice-lookup`, search `intent=pattern`) |
31
- | **F. Integration audit** | 检查遗漏 / 业务流程是否正常 / 对照官方流程 / 有没有漏 / integration checklist / 在线课堂流程 / audit 项目 | **B-Audit** (read `conference/integration-audit` slice — no B-Q1) |
32
- | **E. Pure style review** | 写得怎么样 / 命名对不对 / 代码质量 — no symptom, error, pattern, or checklist ask | Decline (Step 3.E) |
33
-
34
- **F vs C disambiguation**:
35
- - **F** = user wants a **checklist against their project or scenario** ("我的流程完整吗").
36
- - **C** = user wants **how to implement** one official pattern ("标准 login/join 顺序是什么") with no project audit ask.
37
-
38
- If **F** and **A** both appear ("检查进房失败流程有没有遗漏"), prefer **A** when a concrete failure is described; prefer **F** when the ask is purely completeness.
39
-
40
- If high confidence → skip Step 2.
41
-
42
- ### Step 2 — If ambiguous, ask ONE triage question
43
-
44
- > Which is closest?
45
- >
46
- > 1. Something is broken right now — I want to fix a runtime issue
47
- > 2. I have an error code to look up
48
- > 3. I want the official recommended integration pattern for X
49
- > 4. I want to compare two APIs or approaches (X vs Y)
50
- > 5. I want to audit my meeting / classroom flow against the official checklist
51
- > 6. I just want code style feedback
52
- > 7. Type something
53
-
54
- (`AskUserQuestion`: max 4 explicit options — split into two questions if needed: first "runtime vs audit vs docs", then sub-choice.)
55
-
56
- ### Step 3 — Route
57
-
58
- - **A** → B-Q1
59
- - **B, C, D** → hand off to `../../trtc-docs/SKILL.md` with appropriate `intent`
60
- - **F** → B-Audit below
61
- - **E** → decline:
62
- > Code-style review isn't a standalone service here. If you have a concrete problem (options 1–5), I can help directly.
63
-
64
- ### Step 4 — Answer-shape constraints
65
-
66
- See **Hard rule #1** in `SKILL.md`. Forbidden: Critical Review Checklist, ✅ vs ❌ main structure, "改进建议" lists, "Fixed version of your code" as the deliverable.
67
-
68
- **Allowed for F (audit)**: checklist with ✅/⚠️ per **integration item** (not per code line), slice citations, "可能遗漏" prioritized list.
69
-
70
- ### Step 5 — Relapse guard
71
-
72
- If user says "帮我诊断 / go ahead", stay in the branch B-Q0 assigned — do not revert to review shape.
73
-
74
- ---
75
-
76
- ## B-Audit — Integration audit (intent F)
77
-
78
- **Slice**: Read `${CLAUDE_PLUGIN_ROOT}/knowledge-base/slices/conference/web/integration-audit.md` (`conference/integration-audit`) and follow its §7 output template.
79
-
80
- **Workflow**:
81
- 1. Read session: `product`, `platform`, `ui_mode`, `scenario`.
82
- 2. If user project is available, scan for TRTC entry points (`conference.login`, `joinRoom`, `PreConferenceView`, `useDeviceState`, etc.) — **only to tick checklist items**, not to critique style.
83
- 3. Present audit using slice §7 template. Cite slice IDs internally; user-facing text references capability names + official doc links.
84
- 4. **Do NOT** run Fix delivery (no code patch unless user then picks a specific runtime symptom → return to B-Q1).
85
-
86
- **Direct triggers** (skip B-Q1 even without "review" wording):
87
- - 检查…遗漏 / 业务流程 / 对照官方 / 在线课堂流程 / RoomKit 接入要点 / integration checklist
88
-
89
- ---
90
-
91
- ## B-Q1 — Symptom tree (product-aware)
92
-
93
- After intent **A**, pick the menu from session `(product, platform)`. Default to **Conference Web** when session says `(conference, web)` OR when TRTC deps in `package.json` include `@tencentcloud/roomkit-web-vue3` / `tuikit-atomicx-vue3`.
94
-
95
- ### B-Q1a — Conference Web (default for v1)
96
-
97
- Question: *Which best matches what you're seeing?*
98
-
99
- | # | Option | Loaded trees | Context to request inline |
100
- |---|--------|--------------|---------------------------|
101
- | 1 | Can't enter room / room not found / dismissed / wrong password | `conference/login-auth` + `conference/room-lifecycle` | login done? roomId source? join vs createAndJoin? |
102
- | 2 | No video / no audio / permission denied / device busy | `conference/prejoin-check` + `conference/device-control` | HTTPS? iframe? prejoin vs in-meeting API mix? |
103
- | 3 | Login / UserSig / 6206 / kicked offline / session expired | `conference/login-auth` | userSig source? onLoginExpired handler? |
104
- | 4 | Pre-join device check conflicts with in-meeting state (dual getUserMedia / DeviceDetector) | `conference/prejoin-check` + `conference/device-control` | which APIs used for prejoin vs in-room? |
105
- | 5 | Screen share fails / iframe blocked / display-capture | `conference/screen-share` + `conference/device-control` | browser? iframe allow attr? |
106
- | 6 | Room type / capability mismatch (100211, 100006, live tools in standard room) | `conference/integration-audit` §6 + `conference/room-lifecycle`; then `docs` if code unknown | roomType? Live APIs called? |
107
- | 7 | Layout / remote video not updating / grid issues | `conference/video-layout` + `conference/participant-list` | official-roomkit vs custom useRoomView? |
108
- | 8 | Specific error code (paste it) | search `intent=error-code` | wait for code |
109
- | 9 | Type something | search `intent=troubleshoot` | free-text |
110
-
111
- **Conference Web quick fixes reference** (when no dedicated error-codes slice match):
112
-
113
- | Code | Verdict | Action |
114
- |------|---------|--------|
115
- | 6206 | UserSig invalid/expired | Re-issue userSig; listen `USER_SIG_EXPIRED` |
116
- | 100211 | take-seat not enabled | Standard room: usually **safe to ignore** if not using seat/co-guest APIs |
117
- | 100006 | live-only API on standard room | Remove Live/PK/co-host calls; hide Live widgets via `setWidgetVisible` |
118
-
119
- ### B-Q1b — Live iOS (legacy menu)
120
-
121
- Use when `(product, platform) == (live, ios)`:
122
-
123
- | # | Option | Loaded tree |
124
- |---|--------|-------------|
125
- | 1 | Black screen / video not rendering | anchor-preview + audience-watch |
126
- | 2 | Crash / app freezes | anchor-lifecycle cleanup |
127
- | 3 | Specific error code | search `intent=error-code` |
128
- | 4 | Audio but no video (or vice versa) | device-control |
129
- | 5 | Connection fails / can't enter room | login-auth + anchor-lifecycle |
130
- | 6 | UI layout broken | coguest-apply layout |
131
- | 7 | Type something | search `intent=troubleshoot` |
132
-
133
- ### B-Q1c — Other (product, platform)
134
-
135
- Question text: describe the symptom in free text → always call `../../trtc-search/SKILL.md` with `intent=troubleshoot`, `product`, `platform` from session.
136
-
137
- ### Free-text / option "Type something" handling
138
-
139
- Call `../../trtc-search/SKILL.md` with `intent=troubleshoot`. Read `response` per Response Contract:
140
-
141
- - `matched` → walk `matches[].file_paths_read` troubleshooting sections
142
- - `status_planned` → index description + fall back to `docs`
143
- - `no_match` / `no_slice` → `docs`
144
- - `ambiguous_product` → ask user, re-call search
145
-
146
- ### Code access (all B-Q1 variants)
147
-
148
- After symptom pick:
149
- - If `project_state` scanned → diagnose against code; no extra "how to share" question.
150
- - Else → inline one context request in the first diagnostic message (e.g. paste `joinRoom` call site).
151
-
152
- ---
153
-
154
- ## B-Q2 — (merged into B-Q1)
155
-
156
- *Intentionally absent.*
157
-
158
- ---
159
-
160
- ## Fix-write support gate
161
-
162
- Diagnosis runs for **any** (product, platform). Fix **code** only when:
163
-
164
- - `(product, platform) == (conference, web)` → full Fix delivery steps 1–4
165
- - Otherwise → steps 1–3 only + official docs link from llms.txt
166
-
167
- **B-Audit (intent F)** never auto-writes fix code unless user escalates to a specific runtime symptom.
168
-
169
- Source: `reference/supported-matrix.md` → Troubleshoot path.
170
-
171
- ---
172
-
173
- ## Fix delivery
174
-
175
- When root cause identified (intent A path):
176
-
177
- 1. Explain **why** (one sentence).
178
- 2. Show **fix** (diff or corrected snippet).
179
- 3. Cite slice ALWAYS/NEVER violated.
180
- 4. Apply change if file access, else paste-ready block.
181
-
182
- ---
183
-
184
- ## No verification question
185
-
186
- Do not ask "did it work?" after fix. User returns with new symptom → B-Q1 again.
@@ -1,43 +0,0 @@
1
- # Path C — Feature Expansion
2
-
3
- > Loaded by `../../trtc-onboarding/SKILL.md` when `intent = expand` in `${CLAUDE_PROJECT_DIR}/.trtc-session.yaml` (user explicitly said "my existing project already has X, now add Y / 已经接了 X,现在想加 Y").
4
- > Before reading this file, SKILL.md must have populated `${CLAUDE_PROJECT_DIR}/.trtc-session.yaml` and passed Stage 1 calibration.
5
-
6
- **Your role: Advisor + Implementer.**
7
-
8
- ## C.1 — Auto-detect existing setup
9
-
10
- If file scanning is available, identify which TRTC features are integrated by scanning for Store class usage (`LoginStore`, `DeviceStore`, `LiveListStore`, `BarrageStore`, `GiftStore`, etc.) and populate `project_state.existing_features`.
11
-
12
- Present findings as a recap:
13
-
14
- > I can see you already have:
15
- > - Login (LoginStore)
16
- > - Live streaming (LiveCoreView + LiveListStore)
17
- > - Device control (DeviceStore)
18
- >
19
- > Not yet integrated: Barrage, Gift, Co-guest, Beauty, Audio effects.
20
-
21
- ## C-Q1 — Which feature to add
22
-
23
- Question text: "Which feature do you want to add next?"
24
-
25
- Show only the unintegrated features for the identified product, plus `Type something`. Layout and slice resolution match A2-Q1 (see `reference/path-a2-integrate.md`) but as single-select.
26
-
27
- ## C.2 — Implementation
28
-
29
- After the user picks a feature, delegate to Path A2's step-by-step implementation flow (A2-Q3 per-step confirmation, including the internal apply quality gate). See `reference/path-a2-integrate.md` for the full contract.
30
-
31
- ## C-Q2 — Suggest related
32
-
33
- After the feature is integrated (and has silently passed the internal compile gate), based on `cross_product_relations` and scenario co-occurrence:
34
-
35
- Question text: "Related features that often pair well with this one:"
36
-
37
- | # | Option |
38
- |---|--------|
39
- | 1-3 | Context-specific suggestions (e.g., after barrage → gift / audience-manage / co-guest) |
40
- | 4 | I'm good for now |
41
- | 5 | Type something |
42
-
43
- Picking 1-3 loops back to C.2 implementation. Picking 4 ends onboarding cleanly.
@@ -1,100 +0,0 @@
1
- # TRTC Skill — Supported Matrix (一期)
2
-
3
- > Single source of truth for which (product × platform × scenario)
4
- > combinations the skill currently covers, broken down by path. Update
5
- > this file when adding new platforms, products, or scenarios; no other
6
- > file should encode per-pair support state.
7
-
8
- ## Integration path — write code into user project
9
-
10
- > Used by onboarding Path A2 (intent = integrate-scenario / integrate-feature)
11
- > and Path C (expand). Onboarding hard-blocks combinations marked ⏳; topic
12
- > assumes any session reaching it has already passed all three gates
13
- > (product, platform, scenario).
14
-
15
- ### Product × Platform
16
-
17
- | Product | Web | iOS | Android | Flutter | Electron |
18
- |------------|:---:|:---:|:-------:|:-------:|:--------:|
19
- | Conference | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
20
- | Live | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ |
21
- | Call | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ |
22
- | Chat | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ |
23
- | RTC Engine | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ |
24
-
25
- ✅ supported · ⏳ coming soon
26
-
27
- ### Conference Web — Scenarios
28
-
29
- Within (Conference, Web), only these scenarios are integration-supported in v1:
30
-
31
- | Scenario id | Display name | Support |
32
- |------------------------------------|------------------------|:-------:|
33
- | `general-conference` | 通用会议 | ✅ |
34
- | `1v1-video-consultation` | 1v1 视频问诊(医疗) | ✅ |
35
- | `webinar-conference` | 研讨会 / 宣讲会 | ⏳ |
36
- | `medical-multidoctor-consultation` | 医疗会诊(多医生) | ⏳ |
37
-
38
- A2-Q0's conference scenario menu MUST list only the ✅ rows above. Other
39
- `status: active` scenarios in `index.yaml` are hidden from the user-facing
40
- menu in v1 — they remain in the index as content, but onboarding does not
41
- expose them as integration entry points.
42
-
43
- ## Demo path — clone & run official demo
44
-
45
- All combinations supported. Demo source is the official open-source repo;
46
- no skill-side code generation, so platform / product / scenario matrix
47
- does not apply.
48
-
49
- ## Docs path — fact / decision / error-code lookups
50
-
51
- All combinations supported. Backed by remote llms.txt
52
- (`https://trtc.io/llms/{product}/{platform}.txt` — resolve platform via
53
- § "llms.txt platform identifiers" below) and slice files where available;
54
- falls back to official trtc.io docs when slice is missing.
55
-
56
- ## Troubleshoot path — error diagnosis
57
-
58
- - **Diagnose** (B-Q0 / B-Q1, root cause analysis): all combinations.
59
- - **Write fix code** (Path B Step 4 — apply diff or full corrected code):
60
- ✅ Conference Web only (any scenario). Other combinations get root cause +
61
- slice rule citation + official docs link; no Edit/Write to user files.
62
-
63
- Note: scenario gating does not apply here — fix-write is gated on
64
- (product, platform) only. Fixes are slice/error-level edits, not
65
- scenario-level scaffolding.
66
-
67
- ## llms.txt platform identifiers
68
-
69
- > Maps onboarding's canonical platform name → trtc.io/llms/ URL path segment.
70
- > Used by Path A1 (demo) and trtc-docs when constructing llms.txt fetch URLs.
71
- > When a cell shows multiple values, the skill MUST ask the user to choose
72
- > before fetching.
73
-
74
- | Product | `web` | `ios` | `android` | `flutter` | `electron` |
75
- |------------|:----------------------------:|:-------:|:---------:|:---------:|:----------:|
76
- | Conference | `web` | `ios` | `android` | `flutter` | `electron` |
77
- | Chat | **`react`** ★, `vue` (国内站UI) | `ios` | `android` | `flutter` | — |
78
- | Call | `web` | `ios` | `android` | `flutter` | `electron` |
79
- | Live | `web` | `ios` | `android` | `flutter` | `electron` |
80
- | RTC Engine | `web` | `ios` | `android` | `flutter` | `electron` |
81
-
82
- ★ = recommended default (国际站 UI, Tencent-RTC org repo)
83
-
84
- **Rules:**
85
- - If the cell is a single value identical to the column header → no transform needed.
86
- - If the cell shows multiple values → present a framework selection question to the user before proceeding. Put the ★ option first and mark it "(Recommended)".
87
- - If the cell is `—` → that (product, platform) combo has no llms.txt entry; fall back to the product-level `{product}.txt`.
88
-
89
- **Chat Web note:** The React demo (`github.com/Tencent-RTC/TUIKit_React`) produces the international UI ("Tencent Cloud | Chat"). The Vue demo (`github.com/TencentCloud/chat-uikit-vue`) produces the domestic Chinese UI ("腾讯云即时通信IM"). When intent=demo, default to React unless the user explicitly asks for Vue.
90
-
91
- ## When to update this file
92
-
93
- - A new platform's Conference slice content lands → flip the platform cell
94
- to ✅ and remove the integration-intent narrowing in Stage 1B Q3 for that
95
- platform.
96
- - A new conference scenario gets full coverage → add a ✅ row to the
97
- Scenarios table and add it to A2-Q0's conference menu in
98
- `path-a2-integrate.md`.
99
- - A new product launches with full slice content for some platform → flip
100
- that cell.
@@ -1,228 +0,0 @@
1
- ---
2
- name: trtc-search
3
- description: >
4
- Discovers matching slices from the TRTC knowledge base given a natural-language
5
- query. Use when onboarding or docs needs to find slice IDs for a feature
6
- description, symptom, error code, or pattern query. Accepts (product, platform,
7
- query, intent) and returns matched slices with confidence and source attribution.
8
- Not user-facing — callers compose the final answer from returned results.
9
- ---
10
-
11
- # TRTC Knowledge Base Search
12
-
13
- You search the TRTC knowledge base to find relevant atomic capabilities (slices) and integration scenarios. You handle multi-product, cross-platform searches with a structured strategy chain and return a machine-readable response.
14
-
15
- ---
16
-
17
- ## Response Contract (read this first)
18
-
19
- Every call returns exactly this shape. The calling skill (`docs` / `onboarding`) reads fields by name — do NOT improvise the format, do NOT collapse fields into prose.
20
-
21
- ```yaml
22
- response:
23
- status: matched | no_match | no_slice | ambiguous_product | status_planned
24
- matches: # populated when status ∈ {matched, status_planned}; empty otherwise
25
- - slice_id: <product/ability> # e.g. live/barrage
26
- confidence: high | medium | low
27
- match_strategy: exact | tag | product-keyword | cross-related | fuzzy
28
- content_loaded: full | summary | index-only
29
- file_paths_read: [...] # actual file paths opened this turn (relative to repo root)
30
- related: [...] # one-hop related slice_ids NOT already in matches
31
- ambiguous_candidates: [...] # populated ONLY when status = ambiguous_product, e.g. [live, chat]
32
- reason: "..." # populated ONLY when status ≠ matched; one-sentence cause
33
- ```
34
-
35
- ### status semantics
36
-
37
- | status | Meaning | matches | ambiguous_candidates | reason |
38
- |--------|---------|---------|----------------------|--------|
39
- | `matched` | ≥ 1 slice found with usable content | non-empty | — | — |
40
- | `status_planned` | slice exists in index but content not yet written | non-empty, `content_loaded: index-only` | — | "slice `<id>` is status: planned" |
41
- | `no_slice` | product exists but has zero slices in KB (e.g., Call, Conference at early stage) | empty | — | "product `<id>` has no slices in KB" |
42
- | `no_match` | search ran to exhaustion without finding relevant slices | empty | — | one-line cause (e.g., "error code 99999 not in any slice.error_codes or body text") |
43
- | `ambiguous_product` | product was null AND fuzzy-only hits span multiple products | empty | non-empty (e.g., `[live, chat]`) | "query plausibly matches multiple products; ask user" |
44
-
45
- ### confidence → match_strategy mapping
46
-
47
- Confidence is derived from match_strategy, not judged separately:
48
-
49
- - `high` ← `exact` or `tag`
50
- - `medium` ← `product-keyword` or `cross-related`
51
- - `low` ← `fuzzy`
52
-
53
- Callers should use `confidence` for quick guards (e.g., `if response.matches[0].confidence == 'high': answer from slice, skip llms.txt`) and `match_strategy` for traceability when debugging.
54
-
55
- ### What callers do with each status
56
-
57
- - `matched` → read `matches[].file_paths_read`, compose answer from slice contents.
58
- - `status_planned` → show the slice's index-level description; fall through to caller's fallback (docs → llms.txt).
59
- - `no_slice` / `no_match` → caller falls back to its own escape route (docs: llms.txt lookup; onboarding: ask user / degrade).
60
- - `ambiguous_product` → caller asks the user which of `ambiguous_candidates` they mean, then re-calls search with the confirmed product.
61
-
62
- ---
63
-
64
- ## Inputs (from calling skill: `docs` or `onboarding`)
65
-
66
- - **product**: Identified product (chat/call/rtc-engine/live/conference), or `null` if ambiguous
67
- - **platform**: Identified platform (web/android/ios/flutter/electron), or `null`
68
- - **query**: The user's original question / keywords
69
- - **intent**: one of the values listed below.
70
-
71
- > **Authoritative enum**: this file is the canonical source for the set of `intent` values search accepts. Callers (`docs`, `onboarding`) MUST only pass a value from this list and MUST map their own domain intent (e.g. docs' `slice-lookup`, onboarding's Path B free-text symptom) to one of these four. When this list changes, callers update their mapping tables. The list:
72
-
73
- - `error-code` — from `docs`: query contains a numeric error code. Prioritize `exact`; on miss, run full-text digit search before other strategies.
74
- - `pattern` — from `docs`: user asks for the official pattern of X, or compares X vs Y. Prioritize `tag`.
75
- - `feature` — from `docs` (implementation method lookup) or `onboarding` (user described a feature in natural language): need to find the corresponding slice ID. Prioritize `tag` / `product-keyword`. When multiple slices match, return summaries (`content_loaded: summary`) for the caller to present as a selection list.
76
- - `troubleshoot` — from `onboarding` Path B: user described a symptom in free text, need to find the slice(s) with relevant troubleshooting content. Match against slice troubleshooting sections and in-file `error_codes` sections.
77
-
78
- ---
79
-
80
- ## Search Workflow
81
-
82
- ### Step 1: Read the index
83
-
84
- Read `${CLAUDE_PLUGIN_ROOT}/knowledge-base/index.yaml` to get the catalog. Fields present at the index level:
85
-
86
- - **products**: `id`, `name`, `description`, `llms_file` (`llms_file` is used by the `docs` skill, not by search)
87
- - **cross_product_relations**: `id`, `products`, `slices`, `description`
88
- - **slices**: `id`, `name`, `tags`, `platforms`, `file`, `description`, `status`
89
- - **scenarios**: `id`, `name`, `slices`, `file`, `description`, `status`
90
-
91
- > **Fields NOT in index.yaml** (common misconception — don't assume them on the index):
92
- > - `error_codes` — lives inside the slice file body as an `## 错误码` / `## error_codes` section. To check it, the `file` path must be read.
93
- > - `related` — same: lives inside slice file frontmatter/body, not in index.
94
- > - `platform_files[platform]` — there is no such index field. Platform-specific content lives at `slices/{product}/{platform}/{ability}.md` on disk. To check availability, try reading that path; if it doesn't exist, there is no platform-specific slice for that pairing.
95
-
96
- > **Out of scope**: do NOT read llms files, do NOT fetch official doc URLs. If the caller needs a doc URL (e.g., fallback when no slice matches an error code), return `status: no_match` and let the calling skill (`docs`) do the llms.txt lookup.
97
-
98
- ### Step 2: Five-Strategy Matching (by priority)
99
-
100
- Try strategies in order; collect matches. Earlier strategies have higher priority. Higher priority wins on rank; ties broken by tag-intersection count.
101
-
102
- | # | match_strategy | Triggers on | How to match |
103
- |---|---------------|-------------|--------------|
104
- | 1 | `exact` | query contains a numeric error code, a known slice_id like `chat/multi-instance`, or a scenario_id | (a) If an error code: look inside each slice's `file` for its `## 错误码` / `## error_codes` section and match the code. On `intent=error-code` miss, additionally grep all slice file bodies for the digit sequence (covers codes mentioned in troubleshooting prose). (b) If a slice_id or scenario_id: direct lookup in index arrays. |
105
- | 2 | `tag` | after exact (or alongside when no error code) | Extract keywords from the query (LLM does Chinese↔English bidirectionally on its own; consult the "Keyword Hints" table below only for non-intuitive SDK naming). Intersect with each slice's `tags`. Rank by intersection count. |
106
- | 3 | `product-keyword` | `product` is set AND tag didn't produce a high-confidence hit | Within that product's slices, fuzzy-match against `name` (higher weight) and `description`. Both Chinese and English terms. |
107
- | 4 | `cross-related` | `tag` or `product-keyword` produced a partial hit AND either (a) query contains signals of a second product, or (b) the initial hit set feels incomplete | Expand via `cross_product_relations` entries whose `products` overlap, OR follow the already-matched slice's `related` list (read from slice file) for one hop. Fold those into matches at medium confidence. |
108
- | 5 | `fuzzy` | no strategy 1-4 produced anything | Last-resort: use Keyword Hints for bidirectional expansion, match against scenario `name` + `description`, or match slice `description` without tag overlap. All hits are `confidence: low`. |
109
-
110
- #### Intent-driven priority adjustments
111
-
112
- | intent | Priority hint |
113
- |--------|---------------|
114
- | `error-code` | `exact` runs first; on miss AND `intent=error-code`, run full-text digit grep before strategy 2. Return immediately on strategy-1 hit. |
115
- | `pattern` | Run all strategies, but rank `tag` hits above `product-keyword`. |
116
- | `feature` | `tag` and `product-keyword` prioritized. If ≥ 4 matches total, downgrade all `content_loaded` to `summary` so the caller can present a selection. |
117
- | `troubleshoot` | Prefer slices whose body has a troubleshooting section relevant to the described symptom. Check in-file `error_codes` and 排障 sections when reading for rank. |
118
-
119
- #### product=null degradation
120
-
121
- When `product` is `null`:
122
-
123
- - Strategies `exact` and `tag` run normally (they don't need product). If either yields a `confidence: high` hit, return `status: matched` — do NOT trigger ambiguity.
124
- - `product-keyword` is skipped (it requires product).
125
- - `cross-related` and `fuzzy` run as full-catalog searches, capped at **5** matches, ranked by tag-intersection count (ties: `name` match > `description` match).
126
- - If all remaining results are `confidence: low` (fuzzy only) AND they span ≥ 2 products, return `status: ambiguous_product` with `ambiguous_candidates` listing the distinct products seen. DO NOT return low-confidence results — force the caller to disambiguate first.
127
- - If fuzzy hits stay within one product, return them normally as `matched`.
128
-
129
- ### Step 3: Platform Filtering
130
-
131
- If `platform` is specified:
132
-
133
- - Filter results to slices whose `platforms` array contains the requested platform.
134
- - Keep cross-platform overviews (slices present at `slices/{product}/{ability}.md` with no platform subpath) as secondary results — they're generally useful.
135
- - Framework-to-platform mapping (applied at the caller's layer but repeated here as reference):
136
- - React / Vue → Web
137
- - Kotlin → Android
138
- - Swift / Objective-C → iOS
139
- - Dart → Flutter
140
-
141
- If the user needs code but hasn't specified a platform, surface that fact via `reason` (`"platform required for code example"`) — the caller asks.
142
-
143
- ### Step 4: Progressive Content Loading
144
-
145
- Set `content_loaded` per match based on result-set size:
146
-
147
- - **Top 1-3 matches in `matches[]`** → read the full slice file at `${CLAUDE_PLUGIN_ROOT}/${CLAUDE_PLUGIN_ROOT}/knowledge-base/{slice.file}`; if a platform-specific file exists at `${CLAUDE_PLUGIN_ROOT}/knowledge-base/slices/{product}/{platform}/{ability}.md`, read that too. Set `content_loaded: full`.
148
- - **4+ matches** (typical on `intent=feature` ambiguity) → do NOT read each file; return index-level fields only (name, description, tags). Set `content_loaded: summary`. Let the caller present a selection.
149
- - **Slice with `status: planned`** → do NOT try to open its `file` (it likely doesn't exist yet). Use the index description. Set `content_loaded: index-only` and set top-level `status: status_planned` on the response.
150
-
151
- Record every file actually read in `matches[].file_paths_read`. This is the caller's canonical source for "which files grounded the answer".
152
-
153
- ### Step 5: Build the response
154
-
155
- Fill the Response Contract based on Step 2-4 results:
156
-
157
- | Situation | response.status | matches | extras |
158
- |-----------|----------------|---------|--------|
159
- | Strategies 1-5 produced content-loadable hits | `matched` | populated; confidence derived from match_strategy | — |
160
- | Hits all pointed at planned slices | `status_planned` | populated with `content_loaded: index-only` | `reason: "slice <id> is status: planned"` |
161
- | product exists in index but has zero slices | `no_slice` | empty | `reason: "product <id> has no slices in KB"` |
162
- | product=null AND only fuzzy hits spanning ≥ 2 products | `ambiguous_product` | empty | `ambiguous_candidates: [...]`, `reason: "..."` |
163
- | Strategies exhausted, nothing relevant at any confidence | `no_match` | empty | `reason: "..."` (be specific — error code not found / no tag overlap / etc.) |
164
-
165
- > **Display rules live with the caller**, not with search. search only reports `file_paths_read`; it does not dictate how the caller quotes code, when to include snippets, or how to render confidence. See `../trtc-docs/SKILL.md` Step 3 and `onboarding/reference/path-a2-integrate.md` slice-loading block for those rules.
166
-
167
- ---
168
-
169
- ## Keyword Hints (non-intuitive mappings only)
170
-
171
- Bidirectional Chinese↔English translation for common vocabulary is delegated to the LLM — it already understands that "弹幕" ≈ barrage/danmu, "美颜" ≈ beauty, "进房" ≈ enter-room. This table lists **only mappings that are NOT obvious from translation alone** — cases where the user's colloquial term differs from the SDK's internal naming.
172
-
173
- | User phrasing | SDK tag / keyword | Why it needs a hint |
174
- |---------------|--------------------|---------------------|
175
- | 互踢 | `kick-offline`, `multi-instance` | Not an SDK term; the root capability is multi-instance login conflict |
176
- | PK | `battle`, `BattleStore` | "PK" is colloquial; SDK names it battle |
177
- | 黑屏 | `setLiveID`, `black-screen` | The usual root cause is a missed `setLiveID` call, not obvious from "black screen" |
178
- | 跨房连线 | `co-host`, `CoHostStore` | SDK-proprietary term |
179
- | 连麦 | `co-guest`, `seat`, `CoGuestStore` | SDK uses `co-guest`, not the more literal `co-mic` |
180
- | 踢人 | `kick`, `kickUserOutOfRoom` | Exact method name is non-intuitive |
181
- | 音效 | `audio-effect`, `changer`, `reverb`, `ear-monitor` | Multiple sub-capabilities under one colloquial term |
182
- | 观众 | `audience`, `LiveAudienceStore` | Associated Store name is not what a user would guess |
183
- | 100211 / take-seat | `room-lifecycle`, standard room | Non-seat room internal sync; usually ignorable |
184
- | 100006 / live room only | `room-lifecycle`, `official-roomkit-api` | Live API called in standard conference room |
185
- | MediaPermissionCheck / getUserMedia 门禁 | `prejoin-check`, `device-control` | Lightweight browser gate vs Atomicx full prejoin test |
186
- | DeviceDetector / 两套设备检测 | `prejoin-check`, `device-control` | Dual detection paths need layered responsibilities |
187
- | 检查遗漏 / 业务流程 / 对照官方 | `conference/integration-audit` (meta slice) | Route to Path B intent F, not code review |
188
- | 进房失败 | `login-auth`, `room-lifecycle` | Conference Web join/create flow |
189
- | UserSig 过期 / 6206 | `login-auth` | IM auth layer; cross-product |
190
-
191
- For any phrasing NOT listed: let the LLM do its own Chinese↔English bridging, then match against `tags` / `name` / `description` directly. Do NOT expand this table defensively with obvious translations — it only pays for its maintenance cost on the non-obvious ones.
192
-
193
- ---
194
-
195
- ## Edge Cases
196
-
197
- ### Missing content
198
-
199
- | Scenario | status | Handling |
200
- |----------|--------|----------|
201
- | Product exists in index but has no slices (e.g., call, conference at early phase) | `no_slice` | `matches: []`, `reason: "product <id> has no slices in KB"` — caller (docs) falls back to llms.txt |
202
- | Matched slice has `status: planned` in index | `status_planned` | `matches[].content_loaded: index-only`, use index description; caller decides fallback |
203
- | Platform requested but no platform-specific file at `slices/{product}/{platform}/{ability}.md` | `matched` | Return product-level overview with `content_loaded: full`, `reason: "no platform-specific file for <platform>"` — caller tells the user in their own language that the platform-specific code example isn't yet in the KB; do NOT synthesize code |
204
-
205
- ### Cross-product questions
206
-
207
- | Scenario | Handling |
208
- |----------|---------|
209
- | "直播+弹幕" (Live+Chat) | `tag` hits live/* + query contains chat signal → `cross-related` expands via `cross_product_relations` → matches include slices from both products |
210
- | "视频通话+聊天" (Call+Chat) | Same pattern: `tag`/`product-keyword` initial hits + `cross-related` expansion |
211
- | "该用哪个产品?" | Out of scope — return `no_match` with `reason: "product-selection question, not a slice lookup"`; caller (root / onboarding) handles product identification |
212
-
213
- ### Search ambiguity
214
-
215
- | Scenario | Handling |
216
- |----------|---------|
217
- | Vague single-term query like "消息" with product=null | `tag` returns many chat/* hits → `matched` with `content_loaded: summary` for the top 3-5; caller presents selection |
218
- | Mixed Chinese-English "怎么 kick offline" | LLM bridges "kick offline" → Keyword Hints row for 互踢 → `tag` match |
219
- | Only an error code like "6208" | `exact` (strategy 1) → `matched`, confidence `high` |
220
- | Error code not in any slice | `no_match`, `reason: "error code <code> not in any slice.error_codes or body text"` — caller (docs) falls back to llms.txt |
221
-
222
- ### Platform edge cases
223
-
224
- | Scenario | Handling |
225
- |----------|---------|
226
- | Conceptual question, no platform needed | Return product-level overview only; `platform` argument can be null |
227
- | Needs code but no platform specified | Return `matched` with whatever was found; set `reason: "platform required for code example"` — caller asks |
228
- | React/Vue → Web, Kotlin → Android, Swift/ObjC → iOS, Dart → Flutter | Caller normalizes; search accepts the normalized platform |