@sokeai/cli 1.0.76 → 1.0.78

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 (314) hide show
  1. package/README.md +7 -7
  2. package/package.json +1 -1
  3. package/scripts/build-binaries.sh +1 -1
  4. package/scripts/e2e-test.sh +75 -3
  5. package/scripts/install.js +2 -2
  6. package/scripts/local-test.js +1 -1
  7. package/scripts/test-auto-detect.js +20 -3
  8. package/skills/README.md +25 -174
  9. package/skills/SKILL.md +17 -222
  10. package/skills/mono/README.md +10 -0
  11. package/skills/mono/SKILL.md +223 -0
  12. package/skills/{soke-course/soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md → mono/references/installation.md} +0 -3
  13. package/skills/mono/references/modules/soke-ai-coach-director/CHANGELOG.md +203 -0
  14. package/skills/mono/references/modules/soke-ai-coach-director/MODULE.md +221 -0
  15. package/skills/mono/references/modules/soke-ai-coach-director/README.md +121 -0
  16. package/skills/mono/references/modules/soke-ai-coach-director/coaching/knowledge-packager/knowledge-packager.md +91 -0
  17. package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +97 -0
  18. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/prompt-engineer/parts/part3-flow.md +3 -3
  19. package/skills/mono/references/modules/soke-ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +76 -0
  20. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/prompt-optimizer/prompt-optimizer.md +77 -58
  21. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/adapters/workbuddy.md +2 -3
  22. package/skills/mono/references/modules/soke-ai-coach-director/platform/interaction.md +103 -0
  23. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/publish-gate.md +3 -3
  24. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/resource-finalizer.md +10 -35
  25. package/skills/mono/references/modules/soke-ai-coach-director/platform/soke-ai-training/soke-ai-training.md +123 -0
  26. package/skills/mono/references/modules/soke-ai-coach-director/platform/sync-engine.md +39 -0
  27. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/references/change-log-partwise-refactor.md +1 -1
  28. package/skills/mono/references/modules/soke-ai-coach-director/references/env-check.md +146 -0
  29. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-common.md +126 -0
  30. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-handbook.md +621 -0
  31. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part1.md +86 -0
  32. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part2.md +145 -0
  33. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part3.md +91 -0
  34. package/skills/mono/references/modules/soke-ai-coach-director/references/exec-part4.md +187 -0
  35. package/skills/mono/references/modules/soke-ai-coach-director/references/gate-check-matrix.md +46 -0
  36. package/skills/mono/references/modules/soke-ai-coach-director/references/micro-tune-labels.md +30 -0
  37. package/skills/mono/references/modules/soke-ai-coach-director/references/platform-api-pitfalls.md +49 -0
  38. package/skills/mono/references/modules/soke-ai-coach-director/references/role-resource-matching.md +45 -0
  39. package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/references/self-improvement-examples.md +2 -0
  40. package/skills/mono/references/modules/soke-ai-coach-director/references/self-learning-engine.md +485 -0
  41. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part1/SOP.md +17 -0
  42. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part2/SOP.md +34 -0
  43. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part3/SOP.md +27 -0
  44. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/part4/SOP.md +31 -0
  45. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/publish/SOP.md +81 -0
  46. package/skills/mono/references/modules/soke-ai-coach-director/references/subs/tune/SOP.md +92 -0
  47. package/skills/mono/references/modules/soke-ai-coach-director/references/verified-cli-cheatsheet.md +56 -0
  48. package/skills/mono/references/modules/soke-ai-coach-director/scripts/gate_check.py +112 -0
  49. package/skills/mono/references/modules/soke-ai-coach-director/scripts/validate_operations.py +403 -0
  50. package/skills/{soke-ai-training/SKILL.md → mono/references/modules/soke-ai-training/MODULE.md} +1 -1
  51. package/skills/mono/references/modules/soke-assign/README.md +308 -0
  52. package/skills/mono/references/modules/soke-certificate/MODULE.md +717 -0
  53. package/skills/mono/references/modules/soke-course/MODULE.md +402 -0
  54. package/skills/mono/references/modules/soke-course/README.md +291 -0
  55. package/skills/{soke-course → mono/references/modules/soke-course}/references/course-list-courses.md +49 -84
  56. package/skills/{soke-course → mono/references/modules/soke-course}/references/examples.md +3 -3
  57. package/skills/{soke-course → mono/references/modules/soke-course}/references/intent-cases.md +2 -2
  58. package/skills/{soke-course → mono/references/modules/soke-course}/references/sop-full-workflow.md +4 -2
  59. package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/publish/SOP.md +21 -3
  60. package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/query/SOP.md +9 -7
  61. package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/settings/SOP.md +2 -1
  62. package/skills/{soke-exam/SKILL.md → mono/references/modules/soke-exam/MODULE.md} +1 -1
  63. package/skills/mono/references/modules/soke-exam-question-pool/MODULE.md +123 -0
  64. package/skills/{soke-learning-map/SKILL.md → mono/references/modules/soke-learning-map/MODULE.md} +5 -6
  65. package/skills/{soke-learning-profile/SKILL.md → mono/references/modules/soke-learning-profile/MODULE.md} +2 -2
  66. package/skills/mono/references/modules/soke-lesson/README.md +53 -0
  67. package/skills/mono/references/modules/soke-material/README.md +49 -0
  68. package/skills/{soke-photo-gallery/SKILL.md → mono/references/modules/soke-photo-gallery/MODULE.md} +2 -3
  69. package/skills/mono/references/modules/soke-supervisor/MODULE.md +186 -0
  70. package/skills/mono/references/modules/soke-task/MODULE.md +146 -0
  71. package/skills/mono/references/modules/soke-training-demand/MODULE.md +221 -0
  72. package/skills/mono/references/shared/cli-basics.md +185 -0
  73. package/skills/mono/scripts/check_readiness.py +28 -0
  74. package/skills/mono/scripts/gate_check.py +112 -0
  75. package/skills/mono/scripts/validate_operations.py +403 -0
  76. package/skills/multi/README.md +18 -0
  77. package/skills/multi/soke-ai-coach-director/CHANGELOG.md +203 -0
  78. package/skills/multi/soke-ai-coach-director/README.md +121 -0
  79. package/skills/multi/soke-ai-coach-director/SKILL.md +220 -0
  80. package/skills/multi/soke-ai-coach-director/assets/ERRORS-TEMPLATE.md +5 -0
  81. package/skills/multi/soke-ai-coach-director/assets/FEATURE_REQUESTS-TEMPLATE.md +5 -0
  82. package/skills/multi/soke-ai-coach-director/assets/LEARNINGS-TEMPLATE.md +44 -0
  83. package/skills/multi/soke-ai-coach-director/assets/SKILL-TEMPLATE.md +177 -0
  84. package/skills/multi/soke-ai-coach-director/coaching/knowledge-packager/knowledge-packager.md +91 -0
  85. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part1-basic.md +59 -0
  86. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +97 -0
  87. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part3-flow.md +72 -0
  88. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part4-scoring.md +87 -0
  89. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/parts/part5-constraints.md +48 -0
  90. package/skills/multi/soke-ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +76 -0
  91. package/skills/multi/soke-ai-coach-director/coaching/prompt-optimizer/prompt-optimizer.md +381 -0
  92. package/skills/multi/soke-ai-coach-director/coaching/role-profiler/role-profiler.md +87 -0
  93. package/skills/multi/soke-ai-coach-director/platform/adapters/README.md +68 -0
  94. package/skills/multi/soke-ai-coach-director/platform/adapters/qclaw.md +67 -0
  95. package/skills/multi/soke-ai-coach-director/platform/adapters/workbuddy.md +44 -0
  96. package/skills/multi/soke-ai-coach-director/platform/adapters/wukong.md +70 -0
  97. package/skills/multi/soke-ai-coach-director/platform/adapters/zework.md +89 -0
  98. package/skills/multi/soke-ai-coach-director/platform/api-fallback.md +262 -0
  99. package/skills/multi/soke-ai-coach-director/platform/interaction.md +103 -0
  100. package/skills/multi/soke-ai-coach-director/platform/publish-gate.md +44 -0
  101. package/skills/multi/soke-ai-coach-director/platform/resource-finalizer.md +103 -0
  102. package/skills/{ai-coach-director → multi/soke-ai-coach-director}/platform/soke-ai-training/soke-ai-training.md +34 -4
  103. package/skills/multi/soke-ai-coach-director/platform/sync-engine.md +39 -0
  104. package/skills/multi/soke-ai-coach-director/references/cases/AI/345/256/242/346/210/267/350/247/222/350/211/262/346/250/241/346/235/277/345/272/223.md +265 -0
  105. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203Bad Case/346/240/267/346/234/254/345/272/223.md" +206 -0
  106. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/345/210/233/345/273/272/351/227/256/351/242/230/345/272/223.md +666 -0
  107. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/345/234/272/346/231/257/345/210/206/347/261/273/345/272/223.md +213 -0
  108. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/345/256/242/346/210/267/346/235/220/346/226/231/346/270/205/345/215/225/344/270/216/350/256/277/350/260/210/351/242/230/345/272/223.md +229 -0
  109. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/345/276/256/350/260/203/351/227/256/351/242/230/345/272/223.md +833 -0
  110. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/346/212/200/346/234/257/350/276/271/347/225/214/344/270/216/346/216/222/351/232/234/345/272/223.md +239 -0
  111. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/346/250/241/345/235/227/345/272/223.md +249 -0
  112. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/346/225/260/346/215/256/346/214/207/346/240/207/344/270/216/347/234/213/346/235/277/345/217/243/345/276/204/345/272/223.md +282 -0
  113. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/346/265/213/350/257/225/347/224/250/344/276/213/345/272/223.md +254 -0
  114. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/350/257/204/345/210/206/346/240/207/345/207/206/347/273/204/344/273/266/345/272/223.md +264 -0
  115. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/231/252/347/273/203/351/241/271/347/233/256/346/241/210/344/276/213/345/244/215/347/233/230/345/272/223.md +223 -0
  116. package/skills/multi/soke-ai-coach-director/references/cases/AI/351/241/276/345/256/242/350/247/222/350/211/262/346/250/241/346/213/237_GoodCase_BadCase_20260701.md +304 -0
  117. package/skills/multi/soke-ai-coach-director/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/345/256/242/346/210/267/346/235/220/346/226/231/346/261/207/346/200/273_2026-05-19_1341.md +42 -0
  118. package/skills/multi/soke-ai-coach-director/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/347/237/245/350/257/206/345/272/223/347/224/237/346/210/220_20260615.md +23 -0
  119. package/skills/multi/soke-ai-coach-director/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/347/224/237/346/210/220_20260615.md +34 -0
  120. package/skills/multi/soke-ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/351/231/252/347/273/203/346/211/247/350/241/214/346/226/271/346/241/210/344/272/244/344/273/230/350/256/260/345/275/225_20260610.md +26 -0
  121. package/skills/multi/soke-ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/346/217/220/347/244/272/350/257/215/346/220/255/345/273/272_20260622.md +30 -0
  122. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_V1.2_20260616.md +254 -0
  123. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/345/216/213/347/274/251/347/211/210_V2.0_20260616.md +96 -0
  124. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_20260616.md +20 -0
  125. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277AI/351/231/252/347/273/203/347/263/273/347/273/237_/346/265/213/350/257/225/345/217/215/351/246/210/346/261/207/346/200/273_2026-06-01.md +434 -0
  126. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/344/277/241/344/273/273/345/200/274/347/246/201/344/273/244_2026-06-09_0932.md +22 -0
  127. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v2_20260608.md +261 -0
  128. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v1.2.md +354 -0
  129. package/skills/multi/soke-ai-coach-director/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_V2_/350/257/212/346/226/255/344/272/244/344/273/230_20260609.md +26 -0
  130. package/skills/multi/soke-ai-coach-director/references/cases//345/233/233/345/244/247/345/234/272/346/231/257_GoodCase_BadCase_20260701.md +194 -0
  131. package/skills/multi/soke-ai-coach-director/references/cases//346/241/210/344/276/213/345/272/223/350/241/245/345/205/205_2026-06-24.md +41 -0
  132. package/skills/multi/soke-ai-coach-director/references/change-log-partwise-refactor.md +74 -0
  133. package/skills/multi/soke-ai-coach-director/references/env-check.md +146 -0
  134. package/skills/multi/soke-ai-coach-director/references/exec-common.md +126 -0
  135. package/skills/multi/soke-ai-coach-director/references/exec-handbook.md +621 -0
  136. package/skills/multi/soke-ai-coach-director/references/exec-part1.md +86 -0
  137. package/skills/multi/soke-ai-coach-director/references/exec-part2.md +145 -0
  138. package/skills/multi/soke-ai-coach-director/references/exec-part3.md +91 -0
  139. package/skills/multi/soke-ai-coach-director/references/exec-part4.md +187 -0
  140. package/skills/multi/soke-ai-coach-director/references/gate-check-matrix.md +46 -0
  141. package/skills/{soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md → multi/soke-ai-coach-director/references/installation.md} +0 -3
  142. package/skills/multi/soke-ai-coach-director/references/micro-tune-labels.md +30 -0
  143. package/skills/multi/soke-ai-coach-director/references/platform-api-pitfalls.md +49 -0
  144. package/skills/multi/soke-ai-coach-director/references/role-resource-matching.md +45 -0
  145. package/skills/multi/soke-ai-coach-director/references/self-improvement-examples.md +373 -0
  146. package/skills/multi/soke-ai-coach-director/references/self-learning-engine.md +485 -0
  147. package/skills/multi/soke-ai-coach-director/references/shared.md +185 -0
  148. package/skills/multi/soke-ai-coach-director/references/subs/part1/SOP.md +17 -0
  149. package/skills/multi/soke-ai-coach-director/references/subs/part2/SOP.md +34 -0
  150. package/skills/multi/soke-ai-coach-director/references/subs/part3/SOP.md +27 -0
  151. package/skills/multi/soke-ai-coach-director/references/subs/part4/SOP.md +31 -0
  152. package/skills/multi/soke-ai-coach-director/references/subs/publish/SOP.md +81 -0
  153. package/skills/multi/soke-ai-coach-director/references/subs/tune/SOP.md +92 -0
  154. package/skills/multi/soke-ai-coach-director/references/verified-cli-cheatsheet.md +56 -0
  155. package/skills/multi/soke-ai-coach-director/scripts/gate_check.py +112 -0
  156. package/skills/multi/soke-ai-coach-director/scripts/validate_operations.py +403 -0
  157. package/skills/multi/soke-ai-training/SKILL.md +247 -0
  158. package/skills/{soke-learning-map/soke-cli/345/256/211/350/243/205/346/214/207/345/215/227.md → multi/soke-ai-training/references/installation.md} +0 -3
  159. package/skills/multi/soke-ai-training/references/shared.md +185 -0
  160. package/skills/{soke-assign → multi/soke-assign}/README.md +3 -5
  161. package/skills/multi/soke-assign/SKILL.md +101 -0
  162. package/skills/{soke-course/SKILL.md → multi/soke-assign/references/dependencies/soke-course.md} +4 -4
  163. package/skills/multi/soke-assign/references/dependencies/soke-exam.md +600 -0
  164. package/skills/multi/soke-assign/references/installation.md +451 -0
  165. package/skills/multi/soke-assign/references/shared.md +185 -0
  166. package/skills/multi/soke-certificate/SKILL.md +715 -0
  167. package/skills/multi/soke-certificate/references/installation.md +451 -0
  168. package/skills/multi/soke-certificate/references/shared.md +185 -0
  169. package/skills/{soke-course → multi/soke-course}/README.md +11 -9
  170. package/skills/multi/soke-course/SKILL.md +399 -0
  171. package/skills/multi/soke-course/agents/openai.yaml +7 -0
  172. package/skills/multi/soke-course/examples/create-basic.md +70 -0
  173. package/skills/multi/soke-course/references/course-list-courses.md +216 -0
  174. package/skills/multi/soke-course/references/dependencies/soke-assign.md +103 -0
  175. package/skills/multi/soke-course/references/dependencies/soke-lesson.md +119 -0
  176. package/skills/multi/soke-course/references/dependencies/soke-material.md +105 -0
  177. package/skills/multi/soke-course/references/examples.md +480 -0
  178. package/skills/multi/soke-course/references/installation.md +451 -0
  179. package/skills/multi/soke-course/references/intent-cases.md +99 -0
  180. package/skills/multi/soke-course/references/shared.md +185 -0
  181. package/skills/multi/soke-course/references/sop-full-workflow.md +177 -0
  182. package/skills/multi/soke-course/references/sop-lesson-types.md +66 -0
  183. package/skills/multi/soke-course/references/sop-publish-check.md +76 -0
  184. package/skills/multi/soke-course/references/subs/ai/SOP.md +153 -0
  185. package/skills/multi/soke-course/references/subs/category/SOP.md +112 -0
  186. package/skills/multi/soke-course/references/subs/charge/SOP.md +107 -0
  187. package/skills/multi/soke-course/references/subs/copy/SOP.md +80 -0
  188. package/skills/multi/soke-course/references/subs/publish/SOP.md +168 -0
  189. package/skills/multi/soke-course/references/subs/query/SOP.md +165 -0
  190. package/skills/multi/soke-course/references/subs/settings/SOP.md +136 -0
  191. package/skills/multi/soke-course/references/subs/template/SOP.md +223 -0
  192. package/skills/multi/soke-course/references/troubleshoot.md +68 -0
  193. package/skills/multi/soke-course/scripts/check_readiness.py +87 -0
  194. package/skills/multi/soke-exam/SKILL.md +598 -0
  195. package/skills/multi/soke-exam/references/exam-get-exam-user.md +212 -0
  196. package/skills/multi/soke-exam/references/installation.md +451 -0
  197. package/skills/multi/soke-exam/references/shared.md +185 -0
  198. package/skills/{soke-exam-question-pool → multi/soke-exam-question-pool}/SKILL.md +2 -4
  199. package/skills/multi/soke-exam-question-pool/references/installation.md +451 -0
  200. package/skills/multi/soke-exam-question-pool/references/shared.md +185 -0
  201. package/skills/multi/soke-learning-map/SKILL.md +553 -0
  202. package/skills/multi/soke-learning-map/references/dependencies/soke-assign.md +103 -0
  203. package/skills/multi/soke-learning-map/references/dependencies/soke-task.md +146 -0
  204. package/skills/multi/soke-learning-map/references/installation.md +451 -0
  205. package/skills/multi/soke-learning-map/references/shared.md +185 -0
  206. package/skills/multi/soke-learning-profile/SKILL.md +221 -0
  207. package/skills/multi/soke-learning-profile/references/installation.md +451 -0
  208. package/skills/multi/soke-learning-profile/references/shared.md +185 -0
  209. package/skills/multi/soke-lesson/SKILL.md +117 -0
  210. package/skills/multi/soke-lesson/references/installation.md +451 -0
  211. package/skills/multi/soke-lesson/references/shared.md +185 -0
  212. package/skills/multi/soke-material/SKILL.md +103 -0
  213. package/skills/multi/soke-material/references/installation.md +451 -0
  214. package/skills/multi/soke-material/references/shared.md +185 -0
  215. package/skills/multi/soke-photo-gallery/SKILL.md +284 -0
  216. package/skills/multi/soke-photo-gallery/references/installation.md +451 -0
  217. package/skills/multi/soke-photo-gallery/references/shared.md +185 -0
  218. package/skills/multi/soke-shared/SKILL.md +183 -0
  219. package/skills/multi/soke-supervisor/SKILL.md +184 -0
  220. package/skills/multi/soke-supervisor/references/installation.md +451 -0
  221. package/skills/multi/soke-supervisor/references/shared.md +185 -0
  222. package/skills/{soke-task → multi/soke-task}/SKILL.md +31 -11
  223. package/skills/multi/soke-task/references/installation.md +451 -0
  224. package/skills/multi/soke-task/references/shared.md +185 -0
  225. package/skills/{soke-training-demand → multi/soke-training-demand}/SKILL.md +2 -4
  226. package/skills/multi/soke-training-demand/references/installation.md +451 -0
  227. package/skills/multi/soke-training-demand/references/shared.md +185 -0
  228. package/skills/ai-coach-director/SKILL.md +0 -1563
  229. package/skills/ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +0 -317
  230. package/skills/ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +0 -244
  231. package/skills/ai-coach-director/platform/interaction.md +0 -315
  232. package/skills/ai-coach-director/platform/sync-engine.md +0 -1101
  233. package/skills/ai-coach-director/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277_/346/240/207/345/207/206/347/237/245/350/257/206/345/272/223.md +0 -199
  234. package/skills/ai-coach-director/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277/347/237/245/350/257/206/345/272/223.md +0 -388
  235. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/tuv-knowledge-base.md +0 -125
  236. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/tuv-p03-first-call-scenario-prompt.md +0 -428
  237. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204P03/351/231/252/347/273/203/346/211/247/350/241/214/346/226/271/346/241/210_20260610.md +0 -225
  238. package/skills/ai-coach-director/references/cases/create//346/237/220/345/234/260/346/226/271/351/223/266/350/241/214//346/237/220/345/234/260/346/226/271/351/223/266/350/241/214/345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277AI/351/231/252/347/273/203/346/265/213/350/257/225/347/224/250/344/276/213/345/220/210/351/233/206.md +0 -525
  239. package/skills/ai-coach-director/references/cases/create//347/211/251/346/265/201/350/241/214/344/270/232//347/211/251/346/265/201/350/241/214/344/270/232-/345/210/235/346/254/241/346/213/234/350/256/277/351/246/231/347/262/276/351/246/231/346/226/231/345/256/242/346/210/267.md +0 -146
  240. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2061_/346/226/260/345/223/201/346/216/250/351/224/200_20260701.md +0 -230
  241. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2062_/345/202/254/350/217/234/345/256/211/346/212/232_20260701.md +0 -257
  242. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2063_/345/267/256/350/257/204/345/233/236/350/256/277_20260701.md +0 -259
  243. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203/345/234/272/346/231/257/346/226/271/346/241/210_20260701.md +0 -452
  244. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/345/256/242/346/210/267/347/241/256/350/256/244/345/217/215/351/246/210/350/241/250.md +0 -133
  245. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215_v1.md +0 -333
  246. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215_v2_Part1-Part5.md +0 -649
  247. package/skills/ai-coach-director/references/env-check.md +0 -167
  248. package/skills/ai-coach-director/references/platform-api-pitfalls.md +0 -232
  249. package/skills/ai-coach-director/references/role-resource-matching.md +0 -349
  250. package/skills/ai-coach-director/references/verified-cli-cheatsheet.md +0 -203
  251. package/skills/ai-coach-director/scripts/activator.sh +0 -4
  252. package/skills/ai-coach-director/scripts/error-detector.sh +0 -4
  253. package/skills/ai-coach-director/scripts/extract-skill.sh +0 -7
  254. package/skills/soke-course/scripts/check_readiness.sh +0 -82
  255. /package/skills/{ai-coach-director → mono}/references/cases/AI/345/256/242/346/210/267/350/247/222/350/211/262/346/250/241/346/235/277/345/272/223.md" +0 -0
  256. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203Bad Case/346/240/267/346/234/254/345/272/223.md" +0 -0
  257. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/345/210/233/345/273/272/351/227/256/351/242/230/345/272/223.md" +0 -0
  258. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/345/234/272/346/231/257/345/210/206/347/261/273/345/272/223.md" +0 -0
  259. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/345/256/242/346/210/267/346/235/220/346/226/231/346/270/205/345/215/225/344/270/216/350/256/277/350/260/210/351/242/230/345/272/223.md" +0 -0
  260. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/345/276/256/350/260/203/351/227/256/351/242/230/345/272/223.md" +0 -0
  261. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/346/212/200/346/234/257/350/276/271/347/225/214/344/270/216/346/216/222/351/232/234/345/272/223.md" +0 -0
  262. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/346/250/241/345/235/227/345/272/223.md" +0 -0
  263. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/346/225/260/346/215/256/346/214/207/346/240/207/344/270/216/347/234/213/346/235/277/345/217/243/345/276/204/345/272/223.md" +0 -0
  264. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/346/265/213/350/257/225/347/224/250/344/276/213/345/272/223.md" +0 -0
  265. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/350/257/204/345/210/206/346/240/207/345/207/206/347/273/204/344/273/266/345/272/223.md" +0 -0
  266. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/231/252/347/273/203/351/241/271/347/233/256/346/241/210/344/276/213/345/244/215/347/233/230/345/272/223.md" +0 -0
  267. /package/skills/{ai-coach-director → mono}/references/cases/AI/351/241/276/345/256/242/350/247/222/350/211/262/346/250/241/346/213/237_GoodCase_BadCase_20260701.md" +0 -0
  268. /package/skills/{ai-coach-director → mono}/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/345/256/242/346/210/267/346/235/220/346/226/231/346/261/207/346/200/273_2026-05-19_1341.md" +0 -0
  269. /package/skills/{ai-coach-director → mono}/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/347/237/245/350/257/206/345/272/223/347/224/237/346/210/220_20260615.md" +0 -0
  270. /package/skills/{ai-coach-director → mono}/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/347/224/237/346/210/220_20260615.md" +0 -0
  271. /package/skills/{ai-coach-director → mono}/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/351/231/252/347/273/203/346/211/247/350/241/214/346/226/271/346/241/210/344/272/244/344/273/230/350/256/260/345/275/225_20260610.md" +0 -0
  272. /package/skills/{ai-coach-director → mono}/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/346/217/220/347/244/272/350/257/215/346/220/255/345/273/272_20260622.md" +0 -0
  273. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_V1.2_20260616.md" +0 -0
  274. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/345/216/213/347/274/251/347/211/210_V2.0_20260616.md" +0 -0
  275. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_20260616.md" +0 -0
  276. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277AI/351/231/252/347/273/203/347/263/273/347/273/237_/346/265/213/350/257/225/345/217/215/351/246/210/346/261/207/346/200/273_2026-06-01.md" +0 -0
  277. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/344/277/241/344/273/273/345/200/274/347/246/201/344/273/244_2026-06-09_0932.md" +0 -0
  278. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v2_20260608.md" +0 -0
  279. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v1.2.md" +0 -0
  280. /package/skills/{ai-coach-director → mono}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_V2_/350/257/212/346/226/255/344/272/244/344/273/230_20260609.md" +0 -0
  281. /package/skills/{ai-coach-director → mono}/references/cases//345/233/233/345/244/247/345/234/272/346/231/257_GoodCase_BadCase_20260701.md" +0 -0
  282. /package/skills/{ai-coach-director → mono}/references/cases//346/241/210/344/276/213/345/272/223/350/241/245/345/205/205_2026-06-24.md" +0 -0
  283. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/assets/ERRORS-TEMPLATE.md +0 -0
  284. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/assets/FEATURE_REQUESTS-TEMPLATE.md +0 -0
  285. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/assets/LEARNINGS-TEMPLATE.md +0 -0
  286. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/assets/SKILL-TEMPLATE.md +0 -0
  287. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/prompt-engineer/parts/part1-basic.md +0 -0
  288. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/prompt-engineer/parts/part4-scoring.md +0 -0
  289. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/prompt-engineer/parts/part5-constraints.md +0 -0
  290. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/coaching/role-profiler/role-profiler.md +0 -0
  291. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/adapters/README.md +0 -0
  292. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/adapters/qclaw.md +0 -0
  293. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/adapters/wukong.md +0 -0
  294. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/adapters/zework.md +0 -0
  295. /package/skills/{ai-coach-director → mono/references/modules/soke-ai-coach-director}/platform/api-fallback.md +0 -0
  296. /package/skills/{soke-assign/SKILL.md → mono/references/modules/soke-assign/MODULE.md} +0 -0
  297. /package/skills/{soke-course → mono/references/modules/soke-course}/agents/openai.yaml +0 -0
  298. /package/skills/{soke-course → mono/references/modules/soke-course}/examples/create-basic.md +0 -0
  299. /package/skills/{soke-course → mono/references/modules/soke-course}/references/sop-lesson-types.md +0 -0
  300. /package/skills/{soke-course → mono/references/modules/soke-course}/references/sop-publish-check.md +0 -0
  301. /package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/ai/SOP.md +0 -0
  302. /package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/category/SOP.md +0 -0
  303. /package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/charge/SOP.md +0 -0
  304. /package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/copy/SOP.md +0 -0
  305. /package/skills/{soke-course → mono/references/modules/soke-course}/references/subs/template/SOP.md +0 -0
  306. /package/skills/{soke-course → mono/references/modules/soke-course}/references/troubleshoot.md +0 -0
  307. /package/skills/{soke-exam → mono/references/modules/soke-exam}/references/exam-get-exam-user.md +0 -0
  308. /package/skills/{soke-lesson/SKILL.md → mono/references/modules/soke-lesson/MODULE.md} +0 -0
  309. /package/skills/{soke-material/SKILL.md → mono/references/modules/soke-material/MODULE.md} +0 -0
  310. /package/skills/{soke-shared/SKILL.md → mono/references/modules/soke-shared/MODULE.md} +0 -0
  311. /package/skills/{ai-coach-director → multi/soke-ai-coach-director}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_V1.1_20260616.md" +0 -0
  312. /package/skills/{ai-coach-director → multi/soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v1.1.md" +0 -0
  313. /package/skills/{soke-lesson → multi/soke-lesson}/README.md +0 -0
  314. /package/skills/{soke-material → multi/soke-material}/README.md +0 -0
@@ -1,1101 +0,0 @@
1
- # 平台同步引擎
2
-
3
- > 内部规则文件,内容不进入用户聊天。负责将 `prompt-engineer` / `prompt-optimizer` 的输出自动映射为 MentorAI 平台 JSON 和 CLI 命令。
4
-
5
- > 执行前先对照 `../references/platform-api-pitfalls.md`;当本文件示例、旧经验和真实 CLI 返回冲突时,以踩坑清单和最新实证为准。
6
-
7
- > 本文件在被 `interaction.md` 的 QuestionForm 确认选项触发后进入执行。确认即进入 CLI 同步链,不提供二次确认。
8
-
9
- > 需要复制标准命令时,优先参考 `../references/verified-cli-cheatsheet.md`;不要从零手写顶层 `soke-cli +...`。
10
-
11
- ## 核心原则
12
-
13
- 1. JSON 文件写入工作目录,**严禁在对话中出现任何 `.json` 文件名或路径**;`--request-file` / `--operations-file` 参数中的文件名始终在终端命令中使用,不写入对话窗口
14
- 2. `corp_id` / `user_id` / `created_by` 等身份字段绝对禁止写入请求文件
15
- 3. 字段直接从 Part1-Part5 结构化数据填充,不从自然语言大段反解析
16
- 4. **Part1 确认后强制同步**:用户在 `interaction.md` 模板 1 中选「确认,同步到平台(推荐)」后,立即执行 Step1 创建场景,不存在"跳过同步"的逃生路径。封面图的查找、生成、上传、修正全部后台自动处理,不向用户逐项确认
17
- 5. 创建型流程采用按 Part 逐段同步:Step1 创建场景 → Part2 同步角色 → Part3 同步流程 → Part4 同步评分 → Part5 同步教练设置
18
- 6. 每一步都先取最新平台状态,再生成 `base_updated_at` / `updated_at`,禁止依赖用户手工回传
19
- 7. 平台真实 API 优先于历史文档示例;若文档与真实返回冲突,以已验证的 CLI / API 行为为准
20
- 8. **JSON 内容 = Part 原文,一字不改**:生成 JSON 后、preview 前,必须逐字段与已确认的 Part 原文做 diff——JSON 中的文案与原文必须逐字相同,发现任何差异(缩略、改写、编造编号、重新排序)必须修正后再 preview。"大意相同"即违规
21
- 9. **所有 soke-cli 命令必须绕过沙箱执行**:soke-cli 是 Go 编译二进制,在 WorkBuddy Bash 工具沙箱中会受限。调用 Bash 工具执行任何 soke-cli 命令时,必须设置 `dangerouslyDisableSandbox: true`。若命令返回 `permission denied` 或静默无输出,这是沙箱限制的预期表现,加 `dangerouslyDisableSandbox: true` 重试即可
22
- 10. **资源匹配双通道(avatar/voice)**:Part2 内容先完整展示并由用户确认;确认后,资源匹配在生成 JSON 前后台执行。先检测 soke-cli 可用性——可用走 CLI 路径(`role-resource-matching.md`),不可用走 REST API 路径(`api-fallback.md`「资源匹配完整流程」)。**禁止因 CLI 不可用直接跳过资源匹配**——这会导致角色无头像无声音。只有 API 查询本身失败才允许标注跳过。资源匹配、写入、回读校验均不向用户二次确认
23
- 11. **CLI 不可用时降级为 REST API**:当 soke-cli 在目标平台完全不可用(如悟空安全策略禁止、纯聊天环境),按 `api-fallback.md` 降级为 MentorAI REST API 直接调用。JSON 结构、字段映射、自查清单与 CLI 路径完全一致,差异仅在传输方式
24
- 12. **对照最新 CLI 指南(v2.7)**:除踩坑清单外,同步执行还必须对齐《比得_AI陪练CLI创建与更新场景使用指南 2.0》的最新约定:优先使用 `--request-file` 承载完整更新请求;排障时再改用 `--operations-file` + `--base-updated-at` 组合。`preview` 不传 `idempotency_key`,`apply` 才强制要求
25
- 13. **Part1 默认封面固定 + Part2 强制内联资源(v2.20.8)**:封面图 URL 必须在 `step1-create.json` 生成前确定,不允许先建空壳再补。**默认封面固定为** `https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`,无需前台展示处理过程。只有当用户明确指定其他封面、或 `resource-finalizer.md` 兜底替换时,才允许改为其他 URL。角色头像和声音必须在 `part2-operations.json` 生成前完成匹配并写入,不允许分两次操作。`resource-finalizer.md` 降级为最后兜底补救,仅在前序流程意外遗漏时触发
26
- 14. **Part1 创建成功硬闸门(v2.20.4)**:Part1 不是 preview/apply 更新链路,而是创建链路。用户确认后,必须立即生成 `part1-create.json` 或沿用 `step1-create.json`,并立即执行 `soke-cli ai-training +create-scenario --request-file ...`。**只有在创建返回成功、提取到非空 `scenario_id`、并完成创建后回读校验后,才允许进入 Part2。** 任一条件未满足 → 立即报错并停止,禁止静默续流。
27
- 15. **Part2-Part5 同步成功硬闸门(v2.20.5)**:Part2、Part3、Part4、Part5 都属于更新链路。用户确认后,后台**必须先生成对应 JSON,再真实执行 preview/apply,再完成对应验收**,之后才允许进入下一 Part。若任一 Part 未生成 JSON、未执行同步、preview/apply 失败、或验收失败,必须立即报错并停止,禁止静默续流到下一 Part。
28
-
29
- ---
30
-
31
- ## 文件产出规则
32
-
33
- | 模式 | 步骤 | 生成文件 | 在聊天中如何出现 |
34
- |---|---|---|---|
35
- | 创建型 | Step 1 | `part1-create.json` 或 `step1-create.json` | CLI 命令中 `--request-file ./part1-create.json` 或 `--request-file ./step1-create.json` |
36
- | 创建型 | Part2 | `part2-operations.json` + `part2-update.json` + `part2-role-01.json` + `part2-role-02.json` + `part2-role-03.json` + `part2-os.json` | 用户确认后后台自动拆分并逐个同步;默认不直接执行整包 Part2 |
37
- | 创建型 | Part3 | `part3-operations.json` + `part3-update.json` | 优先在 CLI 命令中用 `--request-file ./part3-update.json`;排障时可退回 `--operations-file ./part3-operations.json` |
38
- | 创建型 | Part4 | `part4-operations.json` + `part4-update.json` | 优先在 CLI 命令中用 `--request-file ./part4-update.json`;排障时可退回 `--operations-file ./part4-operations.json` |
39
- | 创建型 | Part5 | `part5-operations.json` + `part5-update.json` | 优先在 CLI 命令中用 `--request-file ./part5-update.json`;排障时可退回 `--operations-file ./part5-operations.json` |
40
- | 创建型 | 全流程 | `state-snapshot.json` | 完全不在聊天中出现 |
41
- | 微调 | 唯一 | `optimize-operations.json` + `optimize-update.json` | 优先 `--request-file ./optimize-update.json`;排障时再退回 operations 模式 |
42
-
43
- > 创建型默认优先直嵌知识库,不再默认生成 `knowledge-package.json`。只有知识库过大或用户明确要求知识包同步时,才进入 `soke-cli ai-training +sync` / `soke-cli ai-training +bind-scenario` 路径。
44
-
45
- ---
46
-
47
- ## 字段映射表
48
-
49
- ### 从 Part1 → `part1-create.json` / `step1-create.json`
50
-
51
- > ⚠️ **核心规则:`part1-create.json` 或 `step1-create.json` 的每个字段必须是已确认 Part1 的 1:1 忠实搬运,禁止在此阶段重新缩略、改写、扩写或重组内容。** 用户已确认的是哪个版本的 Part1,JSON 就用哪个版本。
52
-
53
- | 提示词取值来源 | JSON 字段 | 类型 | 搬运规则 |
54
- |---|---|---|---|
55
- | Part1 场景名称 | `name` | string | 原样照搬,1-100 字符 |
56
- | Part1 场景描述(全文) | `description` | string | **完整搬运,不缩略不改写**;Part1 \"场景描述\"下的全部正文就是 description 的值 |
57
- | Part1 标签 | `tags` | string[] | 逐项映射为数组元素,顺序保持一致 |
58
- | Part1 考核关键点 | `key_points` | string | **必填**,将考核关键点各条拼接为单字符串(分号或编号分隔),不能是数组 |
59
- | **固定值 `简体中文`** | `scene_lang` | string | **必填,写死 `"简体中文"`,永远不改为其他值**。scene_lang 的取值不随用户语言、场景语种变化,始终固定为简体中文;即使材料中写“中文”“普通话”“zh-CN”或其他表述,创建请求里也只能写 `简体中文` |
60
- | Part1 行业 | `industry` | string | 如平台字段存在则写入 |
61
- | Step1 已上传封面 | `scenario_cover` | string | **必填**,先上传封面再创建。封面来源见下方「封面生成与上传」规则 |
62
- | 已绑定企业 ID | `implementation_corp_id` | string | 若请求体存在该字段也不能依赖其选租户 |
63
-
64
- ### 从 Part2 → `replace_ai_roles`
65
-
66
- > ⚠️ **忠实搬运**:Part2 已确认的角色卡各字段原样映射,不在此阶段修改文案。
67
-
68
- > ⚠️ **默认策略变更(v2.8)**:Part2 首次写入默认不要整包 `replace_ai_roles`。应优先按“单角色 `add_ai_role` → 回读验证 → 继续追加下一个角色 → 全部角色完成后再单独 `update_basic` 写 OS”的顺序执行。只有目标平台已被实证验证对整包角色替换稳定时,才允许改回 `replace_ai_roles`。
69
-
70
- | 提示词取值来源 | JSON 字段 |
71
- |---|---|
72
- | 角色卡.名称 | `ai_roles[].role_data.name` |
73
- | 角色卡.描述(全文) | `ai_roles[].role_data.description` |
74
- | 角色卡.头像资源URL(⚠️ 是 `+list-role-avatars` 返回的 `url`,不是 `id`) | `ai_roles[].role_data.avatar` |
75
- | 角色卡.沟通风格(全文) | `ai_roles[].role_data.communication_style` |
76
- | 角色卡.背景(直接复制四段深度画像全文,不压缩) | `ai_roles[].role_data.background` |
77
- | 角色卡.MBTI | `ai_roles[].role_data.personality_type` |
78
- | 角色卡.性格 | `ai_roles[].role_data.personality` |
79
- | 角色卡.语音资源ID | `ai_roles[].role_data.voice_id` |
80
- | 角色卡.标签 | `ai_roles[].role_data.tags` |
81
- | 角色卡.来源 | `ai_roles[].role_data.source_type` |
82
- | 角色卡.知识水平 | `ai_roles[].role_data.knowledge_level` |
83
- | 角色卡.禁忌 | `ai_roles[].role_data.taboos_objections` |
84
- | Part2 整体设定全文 | `update_basic.ai_roles_overall_description` |
85
-
86
- #### ⚠️ 平台外壳字段(外层,与 `role_data` / `scenario_role_id` 同级)
87
-
88
- 以下字段**不可**写入 `role_data` 内部,否则触发"角色数据异常":
89
-
90
- | 字段 | JSON 路径 | 取值 |
91
- |------|----------|------|
92
- | 自定义等级 | `ai_roles[].customization_level` | 固定 `"full"` |
93
- | 是否自定义角色 | `ai_roles[].is_custom_role` | 固定 `true` |
94
- | 自定义字段列表 | `ai_roles[].customized_fields` | 与 `role_data` 实际写入字段对应 |
95
- | 来源类型 | `ai_roles[].source_type` | `"custom"` |
96
- | 创建时间 | `ai_roles[].created_at` | ISO 8601,建议当前时间 |
97
- | 更新时间 | `ai_roles[].updated_at` | ISO 8601,与 created_at 相同 |
98
-
99
- > 判断规则:描述"角色业务属性"的字段(名称/头像/声音/性格…)→ `role_data` 内;描述"这个角色数据本身的元信息"(自定义等级/来源/时间戳)→ 外层。
100
-
101
- > 已实证的 Part2 最小稳定结构:
102
- > 1. `replace_ai_roles` 可用,但必须使用完整 custom role 外壳,且数据键为 `data.roles`(非 `data.ai_roles`)
103
- > 2. `ai_roles[].role_data.avatar` 输入必须使用头像资源 **URL**(来自 `+list-role-avatars` 的 `url` 字段,如 `https://newsokeeditorcdn.soke.cn/public/ai/roles_avatars/lnf2.png`),**严禁**使用资源 `id`
104
- > 3. `ai_roles[].role_data.voice_id` 输入必须使用声音资源 **ID**(来自 `+list-role-voices` 的 `id` 字段)
105
- > 4. `ai_roles[].role_data.knowledge_level` 必须是 **string[]**,不能写成单个字符串
106
- > 5. 必须提供 `scenario_role_id`(如 `role_kong_dajie`),便于后续 `patch_ai_role` / `remove_ai_role` 定位——此字段在**外层**,不在 `role_data` 内
107
- > 6. `customization_level`、`is_custom_role`、`customized_fields`、`source_type`、`created_at`、`updated_at` 在**外层**(与 `role_data` 同级),不可写入 `role_data` 内部,否则角色回读显示"角色数据异常"
108
- > 7. 若平台对整卡 `replace_ai_roles` 结构仍不稳定,再降级到 `add_ai_role` / `patch_ai_role` 细粒度写入
109
-
110
- ### 从 Part3 → `conversation_steps` / `update_basic`
111
-
112
- > ⚠️ **忠实搬运**:Part3 已确认的每个环节字段原样映射,不在此阶段修改文案。
113
-
114
- | 提示词取值来源 | JSON 字段 | 备注 |
115
- |---|---|---|
116
- | 开场语(全文) | `update_basic.opening_dialogue` | 原样搬运,不缩略 |
117
- | 开场语类型 | `update_basic.opening_dialogue_type` | |
118
- | 环节.环节名 | `add_conversation_step.data.step_name` | 不是 `name` |
119
- | 环节.学员目标(全文) | `add_conversation_step.data.student_objective` | 原样搬运 |
120
- | 环节.AI任务(全文) | `add_conversation_step.data.ai_task` | 原样搬运,必须包含环节进入条件 + AI角色行为指令 + 环节退出条件三段 |
121
- | 环节.最大轮次 | `add_conversation_step.data.max_rounds` | 整数 |
122
-
123
- > 已验证:平台不接受 `replace_conversation_steps`,应改用 `add_conversation_step` / `patch_conversation_step` / `remove_conversation_step` / `reorder_conversation_steps`。
124
-
125
- ### 从 Part4 → `replace_scoring_criteria_config`
126
-
127
- > ⚠️ **忠实搬运**:Part4 已确认的评分标准名称、描述、评分维度和一票否决原样映射,不在此阶段改权重、改措辞、改维度数量。
128
-
129
- **`config` 层级字段(必填):**
130
-
131
- | 提示词取值来源 | JSON 字段 | 说明 |
132
- |---|---|---|
133
- | 评分标准 ID(固定生成) | `data.config.scenario_criteria_id` | 场景内评分标准唯一标识,格式 `criteria_{场景短码}` |
134
- | **固定值 `"full"`** | `data.config.customization_level` | 纯自定义评分标准固定为 `"full"` |
135
- | **固定值 `true`** | `data.config.is_custom_criteria` | 纯自定义评分标准固定为 `true` |
136
- | **固定值 `["criteria_data"]`** | `data.config.customized_fields` | 固定为 `["criteria_data"]` |
137
-
138
- **`criteria_data` 层级字段(必填):**
139
-
140
- | 提示词取值来源 | JSON 字段 | 说明 |
141
- |---|---|---|
142
- | 评分标准名称 | `data.config.criteria_data.name` | 8-20 字 |
143
- | 评分标准描述(全文) | `data.config.criteria_data.description` | 完整原文 |
144
- | **固定值 `"enterprise"`** | `data.config.criteria_data.source_type` | 固定为 `"enterprise"` |
145
- | **固定值 `100`** | `data.config.criteria_data.total_weight` | 总权重固定为 100 |
146
- | Part1 标签(取前 4 个) | `data.config.criteria_data.tags` | 数组,关联场景标签 |
147
-
148
- **维度层级字段(必填):**
149
-
150
- | 提示词取值来源 | JSON 字段 | 说明 |
151
- |---|---|---|
152
- | 维度 ID(固定生成) | `data.config.criteria_data.dimensions[].id` | 格式 `dim_{code}`,用于定位/更新 |
153
- | 维度.code | `data.config.criteria_data.dimensions[].code` | 英文语义编码 |
154
- | 维度.名称 | `data.config.criteria_data.dimensions[].name` | 原样 |
155
- | 维度.描述(全文) | `data.config.criteria_data.dimensions[].description` | 完整原文 |
156
- | 维度.权重 | `data.config.criteria_data.dimensions[].weight` | 整数 |
157
- | 维度.评分规则(全文) | `data.config.criteria_data.dimensions[].scoring_rule` | 完整原文,含分档标准和红线 |
158
- | 维度.评分点列表 | `data.config.criteria_data.dimensions[].criteria[]` | 每条一个元素 |
159
- | 维度.排序号 | `data.config.criteria_data.dimensions[].sort_order` | 从 1 开始递增 |
160
-
161
- > ⚠️ **一票否决已嵌入评分维度**:不再保留全局 `one_vote_veto` 字段。每个维度的一票否决条件直接写入该维度的 `scoring_rule` 字段中(如"以下任一行为触犯即该维度直接0分且总分不合格:…"),由维度自身携带否决规则。
162
-
163
- > 已验证:`replace_scoring_criteria_config` 请求要求 `data.config` 包裹,且必须包含 `scenario_criteria_id`、`customization_level`、`is_custom_criteria`、`customized_fields` 四个外壳字段。`criteria_data` 内部需含 `source_type`、`total_weight`、`tags`。每个维度须有 `id` 和 `sort_order`。`criteria_data` 必须被 `config` 直接包裹(`data.config.criteria_data`),不可省略中间层级。缺少任一字段可能导致平台 UI 无法渲染评分配置。
164
-
165
- ### 从 Part5 → `update_basic`
166
-
167
- > ⚠️ **Part5 练习配置已写死**:所有场景统一使用以下固定值,不按场景调整。
168
-
169
- | 提示词取值来源 | JSON 字段 | 固定值 | 说明 |
170
- |---|---|---|---|
171
- | Part5 练习时间 | `min_practice_duration` / `max_practice_duration` | `0` / `0` | 默认关闭,写死 |
172
- | Part5 最大练习次数 | `max_practice_attempts` | `10` | 写死 |
173
- | Part5 通关分数 | `passing_score` | `60` | 写死 |
174
- | Part5 完成规则 | `completion_rule` | `"all_steps"` | 全环节完成,写死 |
175
- | Part5 AI助答开关 | `ai_assistance_enabled` | `true` | 开启,写死 |
176
- | Part5 通关难度 | `pass_difficulty` | `2` | 中,写死 |
177
-
178
- > ⚠️ Part5 不再同步收尾话术(`closing_dialogue`)、SOP 流程摘要(`golden_dialogue_description`)、考核关键点摘要(`key_points`)。这些字段已在创建场景(step1-create.json)或其他 Part 中设置,Part5 仅负责练习配置。
179
-
180
- ---
181
-
182
- ## CLI 命令模板
183
-
184
- ### Step 1:创建场景
185
-
186
- `part1-create.json` 或 `step1-create.json` 必须包含以下字段(全部必填):
187
- `name`, `description`, `tags`, `key_points`, `scene_lang`, `scenario_cover`。
188
-
189
- 示例(完整六字段):
190
-
191
- ```json
192
- {
193
- "name": "大自然-展会现场极限沟通",
194
- "description": "训练对象:大自然外贸业务员/展会销售代表。业务情境:在国际户外用品展(如ISPO、Outdoor Retailer)的嘈杂展会现场,学员在展位前面对络绎不绝的人流,需要在极致压缩的时间窗口内(通常30秒-3分钟)完成从\"吸引路过客户驻足\"到\"锁定展后跟进\"的全链路沟通。环境噪音大、客户注意力分散、竞争展位环绕,对学员的快速判断力和精准表达能力提出极高要求。训练目标:解决业务员在展会上\"只会发画册、不敢问身份、讲不清核心优势、留不住有效线索\"的通病,训练其在极限条件下完成快速吸引→身份识别→USP推介→留资锁定的完整动作。必须遵守的边界:• 不得泄露其他大客户(特别是国际品牌)的定制新品信息 • 不得在现场贬低同行或隔壁展位 • 不得单向灌输式推销而不了解客户背景 • 留资必须是\"有温度的约定\"而非\"强塞名片\"",
195
- "tags": ["展会拓客", "B2B销售", "快速识别", "户外用品", "外贸", "留资转化"],
196
- "key_points": "1) 快速吸引与身份识别:能否在3句话内用核心新品/技术让客户驻足,并通过自然提问快速探明对方的品牌背景、采购角色与真实意向,区分水客与大客户;2) 核心卖点精准推介:能否脱口而出硬核差异化数据,用FAB逻辑建立专业信任,而非只塞给客户一本画册;3) 展后跟进锁定:是否准确记录了客户的痛点需求(至少1项),并约定了具体的展后动作——寄样、报价、打样或明确的联系时间;4) 合规红线:全程不泄露其他大客户定制信息、不贬低同行竞品、不做出未经技术评估的产能/交期承诺",
197
- "scene_lang": "简体中文",
198
- "scenario_cover": "https://newsokeeditorcdn.soke.cn/public/ai/scenario-covers/2026/07/cover_xxx.png"
199
- }
200
- ```
201
-
202
- ```bash
203
- soke-cli ai-training +create-scenario \
204
- --request-file ./part1-create.json \
205
- --pretty
206
- ```
207
-
208
- 若当前实现仍沿用旧文件名,也允许:
209
-
210
- ```bash
211
- soke-cli ai-training +create-scenario \
212
- --request-file ./step1-create.json \
213
- --pretty
214
- ```
215
-
216
- 等价的单独参数模式(排障时可用):
217
-
218
- ```bash
219
- soke-cli ai-training +create-scenario \
220
- --name "<场景名称>" \
221
- --description "<场景描述>" \
222
- --tags "<标签1>,<标签2>" \
223
- --key-points "<考核关键点>" \
224
- --scene-lang 简体中文 \
225
- --scenario-cover "<封面CDN URL>" \
226
- --pretty
227
- ```
228
-
229
- 执行要求:
230
- - **封面确定规则**:用户确认 Part1 后,在生成 `part1-create.json` 或 `step1-create.json` 前,默认直接写入固定封面 URL:`https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`。仅当用户明确指定其他封面、或发布前资源补救流程主动替换时,才允许改用其他 URL。
231
- - **`key_points` 必须是字符串**,不能是数组;多条用分号或编号拼接
232
- - **`scene_lang` 固定为 `"简体中文"`**,永远不改为其他值;生成请求时如果出现“中文”“zh-CN”“普通话”等值,必须在写文件前纠正为 `简体中文`
233
- - **`tags` 必须是数组**,不能是逗号分隔字符串
234
- - 自动从返回结果提取 `scenario_id`
235
- - **`scenario_id` 必须非空**:若创建命令返回成功但未提取到 `scenario_id`,按创建失败处理,立即报错并停止
236
- - 将 `scenario_id` 写入 `state-snapshot.json`
237
- - **创建后验证**:执行 `soke-cli ai-training +get-scenario --scenario-id <id> --pretty`,确认返回中 `key_points`、`description`、`name`、`tags` 字段非空且内容与 `part1-create.json` 或 `step1-create.json` 一致。若 `key_points` 为空或缺失,检查创建请求文件中 `key_points` 字段是否为字符串格式
238
- - **只有创建命令成功 + `scenario_id` 非空 + 创建后验证通过,才允许进入 Part2**
239
- - 若任一步失败:立即向用户报错,停止流程,严禁静默进入 Part2
240
-
241
- ### part1-create.json / step1-create.json 自查清单
242
-
243
- > ⚠️ 生成 `part1-create.json` 或 `step1-create.json` 后、创建场景前,**必须逐项核对**。
244
-
245
- | # | 检查项 | 正确 | 错误示例 |
246
- |---|---|---|---|
247
- | 1 | `name` | 场景名称,1-100 字符,非空 | 空字符串 |
248
- | 2 | `description` | 完整原文,不缩略不改写 | 只写首句或摘要 |
249
- | 3 | `tags` | **数组** `["标签1", "标签2"]` | 逗号分隔字符串 `"标签1,标签2"` |
250
- | 4 | `key_points` | **字符串**,分号或编号拼接 | 数组 `["点1", "点2"]` |
251
- | 5 | `scene_lang` | 固定 `"简体中文"` | 写成 `"zh-CN"` |
252
- | 6 | `scenario_cover` | 真实的 CDN URL | 占位 URL 或本地路径 |
253
- | 7 | JSON 写入方式 | Python `json.dump` | shell heredoc / echo |
254
-
255
- > 🔴 **#4 是最高频错误**:`key_points` 写成数组而非字符串,导致创建成功但字段为空。
256
- > 🔴 **#5 scene_lang 写死**:永远不随场景语言变化,始终 `"简体中文"`。
257
- > 🔴 **#6 默认封面固定**:若无特别指定,`scenario_cover` 直接写固定平台图 `https://newsokeeditorcdn.soke.cn/public/ai/cover/lingshou_daogou.png`。
258
- > 🔴 **创建成功闸门**:没有 `scenario_id`,或 `get-scenario` 校验不通过,均视为 Part1 未完成,绝不进入 Part2。
259
-
260
- ### Part2:AI角色设定
261
-
262
- 优先生成两个文件:
263
- - `part2-operations.json`:完整 Part2 operations 裸数组(总定义)
264
- - `part2-update.json`:完整更新请求(仅供总调试,不作为默认执行入口)
265
-
266
- 然后后台自动拆分为角色级同步单元:
267
- - `part2-role-01.json`
268
- - `part2-role-02.json`
269
- - `part2-role-03.json`
270
- - `part2-os.json`
271
-
272
- 默认后台执行顺序:
273
- 1. Part2 已按「OS → 角色1 → 角色2 → 角色3...」完整展示并通过用户确认
274
- 2. 自动查询头像库与语音库
275
- 3. 为第1个角色匹配 avatar 与 voice_id
276
- 4. 生成 `part2-role-01.json` → preview + apply → `get-scenario` 回读验证
277
- 5. 为第2个角色匹配 avatar 与 voice_id
278
- 6. 生成 `part2-role-02.json` → preview + apply → 回读验证
279
- 7. 为第3个角色匹配 avatar 与 voice_id
280
- 8. 生成 `part2-role-03.json` → preview + apply → 回读验证
281
- 9. 生成 `part2-os.json` → preview + apply → 回读验证
282
- 10. 全部同步成功后更新 state-snapshot,并把控制权交回 prompt-engineer **立即自动输出 Part3**
283
- 11. 如平台已实证稳定,才允许整包 `replace_ai_roles` 作为特殊模式
284
-
285
- 除非失败,以上过程不向用户展示细节,也不向用户请求任何中间确认。用户只确认完整 Part2 内容;角色资源匹配、角色1/角色2/角色3写入、OS写入和回读验证全部自动执行。**同步成功后不得停在中间态等待用户再次输入,必须自动续流输出 Part3。**
286
-
287
- > ⚠️ **禁止中间态阻塞(v2.20.1)**:如前台已输出“Part2 已确认,正在后台同步角色设定”或等价提示,后台同步成功后必须在同一轮中继续输出 Part3,禁止把这条提示当成需要用户再次回复“继续”的断点。只有在 apply/回读失败或出现必须人工介入的异常时,才允许停下并提示用户。
288
-
289
- 先获取最新场景状态:
290
-
291
- ```bash
292
- soke-cli ai-training +get-scenario \
293
- --scenario-id <scenario_id> \
294
- --pretty
295
- ```
296
-
297
- 再预览(默认 request-file 模式):
298
-
299
- ```bash
300
- soke-cli ai-training +preview-scenario-update \
301
- --scenario-id <scenario_id> \
302
- --request-file ./part2-update.json \
303
- --pretty
304
- ```
305
-
306
- 预览通过后立即应用(默认 request-file 模式):
307
-
308
- ```bash
309
- soke-cli ai-training +apply-scenario-update \
310
- --scenario-id <scenario_id> \
311
- --request-file ./part2-update.json \
312
- --pretty
313
- ```
314
-
315
- 如需排障,再退回 operations 模式:
316
-
317
- ```bash
318
- soke-cli ai-training +preview-scenario-update \
319
- --scenario-id <scenario_id> \
320
- --operations-file ./part2-operations.json \
321
- --base-updated-at <updated_at> \
322
- --reason "Part2: AI角色设定" \
323
- --pretty
324
-
325
- soke-cli ai-training +apply-scenario-update \
326
- --scenario-id <scenario_id> \
327
- --operations-file ./part2-operations.json \
328
- --base-updated-at <updated_at> \
329
- --idempotency-key "cli-<scenario_short>-part2-apply" \
330
- --reason "Part2: AI角色设定" \
331
- --pretty
332
- ```
333
-
334
- 执行要求:
335
- - 使用 `soke-cli ai-training +get-scenario` 返回的最新 `updated_at` 作为 `base_updated_at`
336
- - 应用成功后刷新并更新 `state-snapshot.json`
337
- - **apply 后验证**:执行 `soke-cli ai-training +get-scenario --scenario-id <id> --pretty`,逐字段对比验收:
338
- 1. `ai_roles` 数组长度与 `part2-operations.json` 角色数一致
339
- 2. 每个角色逐字段内容对比(name/description/communication_style/background/personality_type/personality/tags/knowledge_level/taboos_objections)——与 `part2-operations.json` 对应字段逐字一致。**任一字��不一致 → 判定同步失败,回退检查 JSON 结构后重试。**
340
- 3. `ai_roles_overall_description` 非空,且前 100 字符与 Part2 OS 原文前 100 字符一致——确保 OS 整体设定完整写入而非丢失
341
- 4. `role_data.name` ≠ `"角色数据异常"`——若出现此值,检查外壳字段是否误放入 `role_data` 内部
342
- 5. 每个角色的 `role_data.background` 包含四段深度画像(我是谁/我的困扰/我的过往经历/我今天的心态),四段全部非空
343
- 6. **⚠️ avatar/voice_id 验收**:随着 v2.11 资源前置,角色首次 apply 时 `avatar`/`voice_id` 应为真实值。验收时必须确认 avatar 为非空 URL、voice_id 为非空 ID。若个别角色资源匹配失败保留空值,不阻断流程但需在摘要中标注。
344
- 7. **已知回读异常白名单(v2.20.6)**:若 `preview`/`apply` 已成功,但 `get-scenario` 仍表现为 `ai_roles: []`、`ai_roles_overall_description: null`,且平台实际已展示角色与 OS,则按已知平台回读口径异常记账通过,不再判定失败。
345
-
346
- - **只有以下全部满足,才允许进入 Part3**:
347
- 1. 已生成 `part2-operations.json` 与 `part2-update.json`
348
- 2. 已执行真实 preview/apply
349
- 3. 角色逐字段回读验收通过,**或**命中已知回读异常白名单且平台实际已展示
350
- 4. OS 回读验收通过,**或**命中已知回读异常白名单且平台实际已展示
351
- - 若任一步失败:立即向用户报错,停止流程,严禁静默进入 Part3
352
-
353
- - **头像和语音资源匹配前置(v2.11)**:生成 `part2-operations.json` 之前已完成匹配并写入 avatar/voice_id。若因角色信息不足导致匹配失败,允许该角色保留空值并标注;若 CLI/API 查询失败且是临时性错误,可在 apply 后按 `role-resource-matching.md` 修复流程单独 patch 该角色的 avatar/voice_id
354
-
355
- ### Part3:流程设置
356
-
357
- 优先生成两个文件:
358
- - `part3-operations.json`:operations 裸数组
359
- - `part3-update.json`:完整更新请求
360
-
361
- 先再次获取最新状态:
362
-
363
- ```bash
364
- soke-cli ai-training +get-scenario \
365
- --scenario-id <scenario_id> \
366
- --pretty
367
- ```
368
-
369
- 再预览(默认 request-file 模式):
370
-
371
- ```bash
372
- soke-cli ai-training +preview-scenario-update \
373
- --scenario-id <scenario_id> \
374
- --request-file ./part3-update.json \
375
- --pretty
376
- ```
377
-
378
- 预览通过后立即应用(默认 request-file 模式):
379
-
380
- ```bash
381
- soke-cli ai-training +apply-scenario-update \
382
- --scenario-id <scenario_id> \
383
- --request-file ./part3-update.json \
384
- --pretty
385
- ```
386
-
387
- 如需排障,再退回 operations 模式:
388
-
389
- ```bash
390
- soke-cli ai-training +preview-scenario-update \
391
- --scenario-id <scenario_id> \
392
- --operations-file ./part3-operations.json \
393
- --base-updated-at <updated_at> \
394
- --reason "Part3: 流程设置" \
395
- --pretty
396
-
397
- soke-cli ai-training +apply-scenario-update \
398
- --scenario-id <scenario_id> \
399
- --operations-file ./part3-operations.json \
400
- --base-updated-at <updated_at> \
401
- --idempotency-key "cli-<scenario_short>-part3-apply" \
402
- --reason "Part3: 流程设置" \
403
- --pretty
404
- ```
405
-
406
- 执行要求:
407
- - 使用最新 `updated_at`
408
- - 应用成功后更新状态并进入 Part4
409
- - **apply 后验证(v2.20.3)**:执行 `soke-cli ai-training +get-scenario --scenario-id <id> --pretty`。
410
- - ✅ `conversation_steps` 非空、`opening_dialogue` 非空 → 直接通过,进入 Part4。
411
- - ⚠️ `conversation_steps` 为空,或 `conversation_steps` / `opening_dialogue` 在回读中均未反映,但 `preview` 与 `apply` 已成功 → 视为已知平台回读口径异常,记录到 `state-snapshot.json`,**直接继续 Part4**。
412
- - 🔴 仅当 `preview`/`apply` 本身失败,或后续 Part4/Part5 因读取 Part3 平台字段出现明确阻塞证据时,才判定同步失败并回退排查。
413
- - **若未生成 `part3-operations.json` / `part3-update.json`,或 `preview`/`apply` 根本未成功执行**:立即向用户报错,停止流程,严禁静默进入 Part4
414
-
415
- ### Part4:评分标准
416
-
417
- 优先生成两个文件:
418
- - `part4-operations.json`:operations 裸数组
419
- - `part4-update.json`:完整更新请求
420
-
421
- 先再次获取最新状态:
422
-
423
- ```bash
424
- soke-cli ai-training +get-scenario \
425
- --scenario-id <scenario_id> \
426
- --pretty
427
- ```
428
-
429
- 再预览(默认 request-file 模式):
430
-
431
- ```bash
432
- soke-cli ai-training +preview-scenario-update \
433
- --scenario-id <scenario_id> \
434
- --request-file ./part4-update.json \
435
- --pretty
436
- ```
437
-
438
- 预览通过后立即应用(默认 request-file 模式):
439
-
440
- ```bash
441
- soke-cli ai-training +apply-scenario-update \
442
- --scenario-id <scenario_id> \
443
- --request-file ./part4-update.json \
444
- --pretty
445
- ```
446
-
447
- 如需排障,再退回 operations 模式:
448
-
449
- ```bash
450
- soke-cli ai-training +preview-scenario-update \
451
- --scenario-id <scenario_id> \
452
- --operations-file ./part4-operations.json \
453
- --base-updated-at <updated_at> \
454
- --reason "Part4: 评分标准" \
455
- --pretty
456
-
457
- soke-cli ai-training +apply-scenario-update \
458
- --scenario-id <scenario_id> \
459
- --operations-file ./part4-operations.json \
460
- --base-updated-at <updated_at> \
461
- --idempotency-key "cli-<scenario_short>-part4-apply" \
462
- --reason "Part4: 评分标准" \
463
- --pretty
464
- ```
465
-
466
- 执行要求:
467
- - 使用最新 `updated_at`
468
- - apply 成功后**立即验收**:执行 `soke-cli ai-training +get-scenario --scenario-id <id> --raw --pretty`
469
- - 优先验证返回结果中评分配置非空(确认 `scoring_criteria` 或等效字段存在且内容完整)
470
- - **已知回读异常白名单(v2.20.7)**:若 `preview`/`apply` 已成功,但 `get-scenario` 仍表现为 `scoring_criteria_config: null`,且平台实际已展示评分标准,则按已知平台回读口径异常记账通过,不再判定失败。
471
- - 验收通过后更新状态并进入 Part5
472
- - 若验收失败(评分字段缺失或为空,且平台侧也未展示),标记为同步异常,排查 `part4-operations.json` 的 `data.config` 结构是否正确
473
- - **只有以下全部满足,才允许进入 Part5**:
474
- 1. 已生成 `part4-operations.json` 与 `part4-update.json`
475
- 2. 已执行真实 preview/apply
476
- 3. 评分配置回读验收通过,**或**命中已知回读异常白名单且平台实际已展示
477
- - 若任一步失败:立即向用户报错,停止流程,严禁静默进入 Part5
478
-
479
- ### 发布前资源闸门
480
-
481
- 在 Part5 完成后,执行 `publish-gate.md` 做验收。正常流程下封面/头像/声音已在前序 Part 中写入,应直接通过。
482
-
483
- 若发现资源缺口,按优先级处理:
484
- 1. 能自动补齐的 → 后台自动补齐
485
- 2. 需兜底修复的 → 调用 `resource-finalizer.md`
486
- 3. 无法补齐的 → 停止发布,输出缺口清单
487
-
488
- 除非失败,不向用户展示补齐细节。
489
-
490
- ### Part5:教练设置
491
-
492
- 优先生成两个文件:
493
- - `part5-operations.json`:operations 裸数组
494
- - `part5-update.json`:完整更新请求
495
-
496
- 先再次获取最新状态:
497
-
498
- ```bash
499
- soke-cli ai-training +get-scenario \
500
- --scenario-id <scenario_id> \
501
- --pretty
502
- ```
503
-
504
- 再预览(默认 request-file 模式):
505
-
506
- ```bash
507
- soke-cli ai-training +preview-scenario-update \
508
- --scenario-id <scenario_id> \
509
- --request-file ./part5-update.json \
510
- --pretty
511
- ```
512
-
513
- 预览通过后立即应用(默认 request-file 模式):
514
-
515
- ```bash
516
- soke-cli ai-training +apply-scenario-update \
517
- --scenario-id <scenario_id> \
518
- --request-file ./part5-update.json \
519
- --pretty
520
- ```
521
-
522
- 如需排障,再退回 operations 模式:
523
-
524
- ```bash
525
- soke-cli ai-training +preview-scenario-update \
526
- --scenario-id <scenario_id> \
527
- --operations-file ./part5-operations.json \
528
- --base-updated-at <updated_at> \
529
- --reason "Part5: 教练设置" \
530
- --pretty
531
-
532
- soke-cli ai-training +apply-scenario-update \
533
- --scenario-id <scenario_id> \
534
- --operations-file ./part5-operations.json \
535
- --base-updated-at <updated_at> \
536
- --idempotency-key "cli-<scenario_short>-part5-apply" \
537
- --reason "Part5: 教练设置" \
538
- --pretty
539
- ```
540
-
541
- 执行要求:
542
- - 使用最新 `updated_at`
543
- - 应用成功后输出完成摘要
544
- - **apply 后验证**:执行 `soke-cli ai-training +get-scenario --scenario-id <id> --pretty`,确认练习配置字段(`passing_score`、`pass_difficulty`、`max_practice_attempts`、`completion_rule`、`ai_assistance_enabled` 等)已全部同步
545
- - 仅在知识库超长或用户明确要求知识包绑定时,追加 `soke-cli ai-training +sync` / `soke-cli ai-training +bind-scenario`
546
- - **只有以下全部满足,才允许输出完成摘要/进入发布闸门**:
547
- 1. 已生成 `part5-operations.json` 与 `part5-update.json`
548
- 2. 已执行真实 preview/apply
549
- 3. 练习配置字段回读验收通过
550
- - 若任一步失败:立即向用户报错,停止流程,严禁静默输出“完成创建”或继续发布
551
-
552
- ### 微调(optimizer)确认后
553
-
554
- ```bash
555
- soke-cli ai-training +get-scenario \
556
- --scenario-id <scenario_id> \
557
- --pretty
558
-
559
- soke-cli ai-training +preview-scenario-update \
560
- --scenario-id <scenario_id> \
561
- --request-file ./optimize-update.json \
562
- --pretty
563
-
564
- soke-cli ai-training +apply-scenario-update \
565
- --scenario-id <scenario_id> \
566
- --request-file ./optimize-update.json \
567
- --pretty
568
-
569
- # 排障时再退回 operations 模式
570
- soke-cli ai-training +preview-scenario-update \
571
- --scenario-id <scenario_id> \
572
- --operations-file ./optimize-operations.json \
573
- --base-updated-at <updated_at> \
574
- --reason "优化提示词" \
575
- --pretty
576
-
577
- soke-cli ai-training +apply-scenario-update \
578
- --scenario-id <scenario_id> \
579
- --operations-file ./optimize-operations.json \
580
- --base-updated-at <updated_at> \
581
- --idempotency-key "cli-<scenario_short>-opt-apply" \
582
- --reason "优化提示词" \
583
- --pretty
584
- ```
585
-
586
- ---
587
-
588
- ## Part2 operations 结构(默认推荐:逐个 add_ai_role)
589
-
590
- ```json
591
- [
592
- {
593
- "type": "replace_ai_roles",
594
- "data": {
595
- "roles": [
596
- {
597
- "scenario_role_id": "role_doctor_li",
598
- "template_id": null,
599
- "template_version": null,
600
- "template_name": null,
601
- "customization_level": "full",
602
- "is_custom_role": true,
603
- "role_data": {
604
- "name": "李振国",
605
- "description": "三甲医院骨科主治医师,兼科室合理用药小组成员。",
606
- "avatar": "https://newsokeeditorcdn.soke.cn/public/ai/roles_avatars/doctor_male.png",
607
- "communication_style": "理性直接,重证据,善用追问。",
608
- "background": "长期参与院内药品准入评审,对说明书与循证边界高度敏感。",
609
- "personality_type": "ISTJ",
610
- "personality": "谨慎、理性、重证据、重流程。",
611
- "voice_id": "zh_male_calm_01",
612
- "tags": ["骨科", "合理用药", "高合规敏感"],
613
- "source_type": "custom",
614
- "knowledge_level": ["专家级"],
615
- "taboos_objections": [
616
- "严禁夸大疗效",
617
- "严禁超适应症暗示",
618
- "必须完整覆盖禁忌与注意事项"
619
- ]
620
- },
621
- "customized_fields": [
622
- "name",
623
- "description",
624
- "avatar",
625
- "communication_style",
626
- "background",
627
- "personality_type",
628
- "personality",
629
- "voice_id",
630
- "tags",
631
- "source_type",
632
- "knowledge_level",
633
- "taboos_objections"
634
- ],
635
- "created_at": "2026-07-10T07:40:28Z",
636
- "updated_at": "2026-07-10T07:40:28Z"
637
- }
638
- ]
639
- }
640
- },
641
- {
642
- "type": "update_basic",
643
- "data": {
644
- "ai_roles_overall_description": "..."
645
- }
646
- }
647
- ]
648
- ```
649
-
650
- 补充约束:
651
- - **⚠️ 不要把 `avatar` 写成资源 ID**;必须写头像资源 URL(来自 `+list-role-avatars` 的 `url` 字段)
652
- - **⚠️ `voice_id` 必须写声音资源 ID**(来自 `+list-role-voices` 的 `id` 字段),不是 `sample_url`
653
- - **⚠️ `replace_ai_roles` 的数据键是 `data.roles`(非 `data.ai_roles`)**
654
- - **⚠️ 必须为每个角色提供稳定的 `scenario_role_id`**(如 `role_kong_dajie`),便于后续 `patch_ai_role` / `remove_ai_role`
655
- - 不要把 `knowledge_level` 写成字符串;必须是数组
656
- - `customized_fields` 应与 `role_data` 中真实写入的自定义字段逐项对齐
657
- - `created_at` / `updated_at` 建议使用 UTC ISO8601 时间字符串
658
- - **`avatar` / `voice_id` 在 Part2 阶段必须写入真实值**:生成 `part2-operations.json` 前先执行 `+list-role-avatars` 和 `+list-role-voices` 完成资源匹配。头像和声音不允许在 JSON 中留空 `""`。若某个角色资源匹配失败,允许该角色留空并标注待补,但不能三个角色都留空
659
-
660
- ### Part2 replace_ai_roles 自查清单
661
-
662
- > ⚠️ 生成 `part2-operations.json` 后、preview 前,**必须逐项核对**。任一项不通过,禁止 preview,必须修正后重检。
663
-
664
- | # | 检查项 | 正确 | 错误示例 |
665
- |---|---|---|---|
666
- | 1 | `data` 键名 | `"roles"` | `"ai_roles"` |
667
- | 2 | `scenario_role_id` 存在且在外层 | 与 `role_data` 同级 | 缺失或写入 `role_data` 内 |
668
- | 3 | `customization_level` | `"full"`,外层 | 写入 `role_data` 内 |
669
- | 4 | `is_custom_role` | `true`,外层 | 写入 `role_data` 内 |
670
- | 5 | `customized_fields` | 外层数组,与 `role_data` 字段逐项对齐 | 写入 `role_data` 内 |
671
- | 6 | `avatar` | 头像 URL 或「匹配失败暂时为空」| 多个角色全部为空 |
672
- | 7 | `voice_id` | 声音 ID 或「匹配失败暂时为空」| 多个角色全部为空 |
673
- | 8 | `knowledge_level` | 数组 `["专家级"]` | 字符串 `"专家级"` |
674
- | 9 | `taboos_objections` | 数组 `["禁止A", "禁止B"]` | 单个长字符串 |
675
- | 10 | `background` | 四段深度画像全文,非空 | `null` 或只写一句话 |
676
- | 11 | `template_id/version/name` | `null`,外层 | 非 `null`(自定义角色) |
677
- | 12 | `created_at` / `updated_at` | UTC ISO8601,外层 | 缺失或格式错误 |
678
- | 13 | operations 文件格式 | 裸数组 `[{...}]` | 套一层 `{"operations": [...]}` |
679
- | 14 | JSON 写入方式 | Python `json.dump` | shell heredoc / echo |
680
-
681
- > 🔴 **自查不过绝不 preview**。最常见的写入失败根因是 #1(`data.roles` 错写成 `data.ai_roles`),占 80%+ 的 replace_ai_roles 同步失败。
682
- > 🔴 **外壳字段层级错误**(#2-#5)会导致回读 `name: "角色数据异常"`,全部字段 null。
683
-
684
- ## Part3 operations 结构
685
-
686
- ```json
687
- [
688
- {
689
- "type": "update_basic",
690
- "data": {
691
- "opening_dialogue": "...",
692
- "opening_dialogue_type": 1
693
- }
694
- },
695
- {
696
- "type": "add_conversation_step",
697
- "data": {
698
- "step_name": "需求摸排",
699
- "student_objective": "...",
700
- "ai_task": "...",
701
- "max_rounds": 5
702
- }
703
- }
704
- ]
705
- ```
706
-
707
- > ⚠️ **已知平台限制(v2.20.3 修订)**:最新官方指南仍推荐用 `add_conversation_step` / `patch_conversation_step` / `remove_conversation_step` / `reorder_conversation_steps` 维护流程步骤;但当前部分 CLI 版本实测仍可能出现 apply 成功而 `get-scenario` 回读 `conversation_steps` 为空,甚至 `opening_dialogue` 也不及时反映。执行策略应为:先按标准语义操作生成并执行 Part3;若 `get-scenario` 回读异常,**默认按平台回读问题处理并直接续流 Part4**,不再要求用户先去 Web 后台确认。仅当 preview/apply 本身失败,或后续步骤出现明确阻塞证据时才回退排查。严禁因 CLI 回读异常直接阻断流程。
708
-
709
- ### Part3 operations 自查清单
710
-
711
- > ⚠️ 生成 `part3-operations.json` 后、preview 前,**必须逐项核对**。
712
-
713
- | # | 检查项 | 正确 | 错误示例 |
714
- |---|---|---|---|
715
- | 1 | 开场语 | `update_basic.opening_dialogue`,完整原文 | 只写首句 |
716
- | 2 | 开场语类型 | `update_basic.opening_dialogue_type`,整数 1 或 2 | 字符串 `"1"` |
717
- | 3 | 环节字段名 | `step_name`(非 `name`) | `"name": "需求摸排"` |
718
- | 4 | 学员目标 | `student_objective`,完整原文 | 只写标题 |
719
- | 5 | AI 任务 | `ai_task`,完整原文含进入/退出条件 | 只写概括 |
720
- | 6 | 最大轮次 | `max_rounds`,整数 1-50 | 字符串 `"5"` |
721
- | 7 | 环节数量 | `add_conversation_step` 操作数 = Part3 环节数 | 漏掉某个环节 |
722
- | 8 | operations 文件格式 | 裸数组 `[{...}]` | 套一层 `{"operations": [...]}` |
723
-
724
- > 🔴 **#2 类型错误**:`opening_dialogue_type` 必须是整数,不能是字符串 `"1"` 或 `"customer_first"`。
725
- > 🔴 **#5 内容截断**:`ai_task` 被缩略后平台环节信息不完整,学员端看不到完整 AI 行为指令。
726
-
727
- ## Part4 operations 结构
728
-
729
- ```json
730
- [
731
- {
732
- "type": "replace_scoring_criteria_config",
733
- "data": {
734
- "config": {
735
- "scenario_criteria_id": "criteria_phone_appointment",
736
- "customization_level": "full",
737
- "is_custom_criteria": true,
738
- "criteria_data": {
739
- "name": "电话约访能力评分标准",
740
- "description": "本评分标准用于评估学员在电话约访场景中的综合表现……",
741
- "source_type": "enterprise",
742
- "dimensions": [
743
- {
744
- "id": "dim_ice_breaking",
745
- "code": "ice_breaking",
746
- "name": "破冰与信任建立",
747
- "description": "评估学员在通话开场能否快速建立信任……",
748
- "weight": 25,
749
- "scoring_rule": "满分25分。1-3分:开场生硬…… 4-6分:有基本自我介绍…… 7-10分:自然破冰……",
750
- "criteria": ["评分点1", "评分点2"],
751
- "sort_order": 1
752
- }
753
- ],
754
- "tags": ["电话约访", "银行", "客户经理"],
755
- "total_weight": 100
756
- },
757
- "customized_fields": ["criteria_data"]
758
- }
759
- }
760
- }
761
- ]
762
- ```
763
- 补充约束:
764
- - **⚠️ `data.config` 三层嵌套**:`data.config.criteria_data`,不可跳过 `config` 层
765
- - **⚠️ config 外壳字段必填**:`scenario_criteria_id`、`customization_level`(`"full"`)、`is_custom_criteria`(`true`)、`customized_fields`(`["criteria_data"]`)缺少任一 → API apply 成功但 UI 不显示
766
- - **⚠️ criteria_data 元数据字段必填**:`source_type`(`"enterprise"`)、`total_weight`(`100`)、`tags`(数组,取 Part1 标签前 4 个)缺少任一 → 数据存储但 UI 不完整
767
- - **⚠️ 维度必填字段**:`id`(格式 `dim_{code}`)、`sort_order`(从 1 递增);所有权重之和 = 100
768
- - **⚠️ 一票否决嵌入维度**:不再使用全局 `one_vote_veto`,改为写入每个维度的 `scoring_rule` 中
769
-
770
- ### Part4 replace_scoring_criteria_config 自查清单
771
-
772
- > ⚠️ 生成 `part4-operations.json` 后、preview 前,**必须逐项核对**。任一项不通过,禁止 preview,必须修正后重检。
773
-
774
- | # | 检查项 | 正确 | 错误示例 |
775
- |---|---|---|---|
776
- | 1 | 层级嵌套 | `data.config.criteria_data` | `data.criteria_data`(少了 config 层) |
777
- | 2 | `scenario_criteria_id` | `config` 下,格式 `criteria_{场景短码}` | 缺失或放错层级 |
778
- | 3 | `customization_level` | `"full"`,`config` 下 | 缺失或放 `criteria_data` 内 |
779
- | 4 | `is_custom_criteria` | `true`,`config` 下 | 缺失或放 `criteria_data` 内 |
780
- | 5 | `customized_fields` | `["criteria_data"]`,`config` 下 | 缺失或写成空数组 |
781
- | 6 | `criteria_data.source_type` | `"enterprise"` | 缺失 |
782
- | 7 | `criteria_data.total_weight` | `100` | 缺失或与实际维度权重和不一致 |
783
- | 8 | `criteria_data.tags` | 数组,取 Part1 标签前 4 个 | 缺失或写成字符串 |
784
- | 9 | 每个维度有 `id` | `dim_{code}` 格式 | 缺失 |
785
- | 10 | 每个维度有 `sort_order` | 从 1 递增 | 缺失或重复 |
786
- | 11 | 权重之和 | 所有维度 `weight` 相加 = 100 | 不等于 100 |
787
- | 12 | 一票否决 | 嵌入各维度 `scoring_rule` 末尾 | 使用全局 `one_vote_veto` 字段 |
788
- | 13 | operations 文件格式 | 裸数组 `[{...}]` | 套一层 `{"operations": [...]}` |
789
-
790
- > 🔴 **#1 是最高频错误**:`criteria_data` 直接放 `data` 下,漏掉 `config` 包裹层,导致 `必须提供 config` 校验失败。
791
- > 🔴 **#2-#5 外壳字段缺失**:API apply 返回成功但平台 UI 不渲染,静默失败。
792
-
793
- ## Part5 operations 结构
794
-
795
- > ⚠️ **全部写死**:以下固定值适用于所有场景,生成 `part5-operations.json` 时直接复制此结构,不做任何修改。
796
-
797
- ```json
798
- [
799
- {
800
- "type": "update_basic",
801
- "data": {
802
- "min_practice_duration": 0,
803
- "max_practice_duration": 0,
804
- "max_practice_attempts": 10,
805
- "passing_score": 60,
806
- "pass_difficulty": 2,
807
- "completion_rule": "all_steps",
808
- "ai_assistance_enabled": true
809
- }
810
- }
811
- ]
812
- ```
813
-
814
- > `min_practice_duration` / `max_practice_duration` 为 0 表示练习时间默认关闭。
815
-
816
- ### Part5 operations 自查清单
817
-
818
- > ⚠️ 生成 `part5-operations.json` 后、preview 前,**必须逐项核对**。Part5 全部写死,任何值与固定模板不一致必须驳回。
819
-
820
- | # | 检查项 | 固定值 | 错误示例 |
821
- |---|---|---|---|
822
- | 1 | `min_practice_duration` | `0` | `null` 或不传 |
823
- | 2 | `max_practice_duration` | `0` | `null` 或不传 |
824
- | 3 | `max_practice_attempts` | `10` | `5`(被调整) |
825
- | 4 | `passing_score` | `60` | `80`(被调整) |
826
- | 5 | `pass_difficulty` | `2` | `1` 或 `3`(被调整) |
827
- | 6 | `completion_rule` | `"all_steps"` | `"score_based"` |
828
- | 7 | `ai_assistance_enabled` | `true` | `false` |
829
- | 8 | 不含额外字段 | 仅含上述 7 项 | 混入 `closing_dialogue`/`key_points`/`golden_dialogue_description` |
830
- | 9 | operations 文件格式 | 裸数组 `[{...}]` | 套一层 `{"operations": [...]}` |
831
-
832
- > 🔴 **#8 字段污染**:Part5 混入收尾话术、SOP 摘要或考核关键点(这些已在 Part1/Part3 同步),重复写入可能导致覆盖或冲突。
833
-
834
- ---
835
-
836
- ## 状态快照
837
-
838
- 创建型内部使用,不在聊天中输出。每个 Part 成功后更新。
839
-
840
- ```json
841
- {
842
- "mode": "partwise",
843
- "scenario_id": "scn_xxx",
844
- "scenario_short": "b7730195",
845
- "updated_at": "2026-07-10T01:40:58.216028Z",
846
- "current_part": "part3",
847
- "confirmed_data": {
848
- "part1": {},
849
- "part2": {},
850
- "part3": {},
851
- "part4": {},
852
- "part5": {}
853
- },
854
- "applied": {
855
- "part1": true,
856
- "part2": true,
857
- "part3": false,
858
- "part4": false,
859
- "part5": false
860
- },
861
- "cached": {
862
- "role_profile": {},
863
- "scenario_type": ""
864
- }
865
- }
866
- ```
867
-
868
- ### 缓存规则
869
-
870
- | 缓存项 | 生成时机 | 重跑条件 |
871
- |---|---|---|
872
- | role-profiler 按需画像(仅按需) | Part2 | 已启用按需画像模式,且 Part1 行业/场景描述/角色背景被修改 |
873
- | 场景类型判定 | Part1 | Part1 标签/行业被修改 |
874
- | Part2 预览基线 | Part2 前 | 仅在 `scenario_id` 已成功写入 state-snapshot 后,才允许进入并重新 GET |
875
- | Part3 预览基线 | Part3 前 | 每次进入 Part3 都重新 GET |
876
- | Part4 预览基线 | Part4 前 | 每次进入 Part4 都重新 GET |
877
- | Part5 预览基线 | Part5 前 | 每次进入 Part5 都重新 GET |
878
-
879
- ### 依赖与回滚规则
880
-
881
- - Part1 修改后,默认视为 Part2-Part5 全部待复核
882
- - Part2 修改后,至少重检 Part3 与 Part5
883
- - Part3 修改后,至少重检 Part4 与 Part5
884
- - Part4 修改后,重检 Part5
885
- - Part5 修改通常不反推前序 Part,但若改动通关分数/难度,需检查是否与 Part4 评分体系一致
886
-
887
- ---
888
-
889
- ## 一致性扫描
890
-
891
- 每个 Part 确认后自动执行。无告警不在聊天中输出;有告警才提示。
892
-
893
- ### Part2 扫描项
894
-
895
- - 若启用了 `role-profiler`,检查按需画像是否与 Part1 行业、场景类型一致;未启用则直接检查角色卡与 Part1 是否一致
896
- - 每个 AI 角色的 `taboos_objections` 是否完整、可执行、非空话
897
- - 角色整体设定是否与信息释放规则、口语化要求一致
898
- - **⚠️ background 四维完整性**:每个角色的 background 是否复制了四段深度画像的全部完整原文(我是谁/我的困扰/我的过往经历/我今天的心态)。缺少任一段 → 告警「⚠️ {角色名} background 维度缺失:缺少[维度名]」,驳回重新补充
899
- - **⚠️ background 展示对齐**:JSON 中的 `role_data.background` 是否与 Part2 确认弹窗中展示的「角色背景」文本逐字一致。不一致 → 告警「⚠️ {角色名} background 与展示文本不一致」,驳回重新对齐
900
-
901
- ### Part3 扫描项
902
-
903
- - Part1 key_points 是否全部在 Part3 学员目标中有对应环节
904
- - 每个 AI 角色的 `taboos_objections` 是否在 Part3 AI 任务中有触发逻辑
905
- - `opening_dialogue` 是否与 Part2 的信息释放规则一致
906
- - 所有环节是否都包含 `step_name` / `student_objective` / `ai_task` / `max_rounds`
907
-
908
- ### Part4 扫描项
909
-
910
- - 评分标准名称是否已输出(非空,8-20 字)
911
- - 评分标准描述是否已输出(完整原文,非空)
912
- - Part4 评分维度是否与 Part1 key_points 一一对应
913
- - Part4 总权重是否等于 100
914
- - 每个维度 `scoring_rule` 中是否包含一票否决条件(如"以下行为触犯即该维度0分且总分不合格")
915
- - 评分描述是否能映射到 Part3 的可观察行为
916
- - `criteria_data` 是否直接位于 `config` 下(`data.config.criteria_data`),中间无缺失层级
917
-
918
- ### Part5 扫描项
919
-
920
- - Part5 operations 是否仅包含练习配置(不含收尾话术、SOP 摘要、考核关键点摘要)
921
- - 所有练习配置值是否与固定模板完全一致:练习时间默认关闭(`min_practice_duration`=0, `max_practice_duration`=0)、`max_practice_attempts`=10、`passing_score`=60、`completion_rule`="all_steps"、`ai_assistance_enabled`=true、`pass_difficulty`=2
922
- - 若任何值与固定模板不一致 → 告警「⚠️ Part5 配置值与固定模板不一致」,驳回修正
923
-
924
- ---
925
-
926
- ## 逐 Part 内容搬运检查清单
927
-
928
- > ⚠️ **强制使用**:每次生成 Part JSON 后、preview 前,必须逐段对照此清单,确认每个内容块都已 1:1 复制到对应 JSON 字段。禁止摘要化、禁止改写、禁止遗漏任何一段。
929
-
930
- ### Part1 → `part1-create.json` / `step1-create.json` 搬运清单
931
-
932
- Part1 输出包含以下内容块,每块都必须映射到 JSON:
933
-
934
- | # | Part1 内容块 | 检查项 | JSON 字段 | 搬运要求 |
935
- |---|------------|--------|-----------|---------|
936
- | 1 | 场景名称 | ☐ | `name` | 原样搬运,一字不改 |
937
- | 2 | 标签列表 | ☐ | `tags` | 逐项转为数组元素,顺序一致 |
938
- | 3 | 场景描述(全文) | ☐ | `description` | 完整搬运,包括训练对象/业务情境/训练目标/边界条件,不缩略一字 |
939
- | 4 | 考核关键点(全文) | ☐ | `key_points` | 拼接为单字符串,分号或编号分隔,不能是数组 |
940
- | 5 | 场景语言 | ☐ | `scene_lang` | 固定写死 `"简体中文"` |
941
- | 6 | 封面图 CDN URL | ☐ | `scenario_cover` | 已上传封面的 CDN URL |
942
-
943
- > **生成后自检命令**:逐条打开 `part1-create.json` 或 `step1-create.json`,对照 Part1 确认输出,确保 description 长度与 Part1 场景描述正文长度一致;随后必须执行 `+create-scenario` 并确认拿到 `scenario_id`,否则不得进入 Part2。
944
-
945
- ---
946
-
947
- ### Part2 → `part2-operations.json` 搬运清单
948
-
949
- Part2 由两大部分组成:**AI角色整体设定(OS)** 和 **具体角色卡**。两部分都必须 1:1 复制。
950
-
951
- #### A 部分:AI角色整体设定(OS)→ `update_basic`
952
-
953
- | # | Part2 OS 内容块 | 检查项 | JSON 字段 | 搬运要求 |
954
- |---|---------------|--------|-----------|---------|
955
- | A1 | 核心输出协议(全文) | ☐ | `update_basic.ai_roles_overall_description` | 全文包含:禁止括号动作、纯净口语输出、舌象格式、信息挤牙膏原则——四段全部搬运,一字不减 |
956
- | A2 | 核心身份定义 | ☐ | `update_basic.ai_roles_overall_description`(追加) | 完整 System Role 描述 |
957
- | A3 | 核心铁律 | ☐ | `update_basic.ai_roles_overall_description`(追加) | 全局规则全文 |
958
- | A4 | 内核运行机制(全文) | ☐ | `update_basic.ai_roles_overall_description`(追加) | 含:动态状态机(Trust_Level/Patience_Gauge/Fact_Anchoring)、双层逻辑处理、行为模拟规范(语言熵增/心理防御/环境干扰)、信息过载与回旋机制 |
959
- | A5 | 知识库与合规约束(全文) | ☐ | `update_basic.ai_roles_overall_description`(追加) | 含:禁语与红线、行业常识 |
960
- | A6 | 业务场景专属规则模板库(全文) | ☐ | `update_basic.ai_roles_overall_description`(追加) | 含:生理反应静默原则、术语屏蔽原则、口感中立原则……等全部已选用的规则 |
961
- | A7 | 关键结束规则 | ☐ | `update_basic.ai_roles_overall_description`(追加) | Meta-Rule for Ending 全文 |
962
-
963
- > ⚠️ **OS 搬运关键**:`ai_roles_overall_description` 是一个字符串字段。必须将 A1-A7 全部内容拼接为**完整长文本**写入,严禁只写"参见 Part2 整体设定"或做任何形式的摘要。**目标:这份 JSON 能在平台重建完整的 OS。**
964
-
965
- #### B 部分:具体角色卡 → `replace_ai_roles`
966
-
967
- | # | 角色卡字段 | 检查项 | JSON 字段 | 搬运要求 |
968
- |---|-----------|--------|-----------|---------|
969
- | B1 | 角色名称 | ☐ | `role_data.name` | 原样 |
970
- | B2 | 角色描述 | ☐ | `role_data.description` | 原样全文(年龄、职业、外貌、生活状态) |
971
- | B3 | 沟通风格 | ☐ | `role_data.communication_style` | 原样全文 |
972
- | B4 | 角色背景(直接复制四段全文) | ☐ | `role_data.background` | **⚠️ 强制逐字对齐**:JSON 中的 background 文本必须与 Part2 确认弹窗中展示的「角色背景」文本逐字一致(含标点、措辞、空格)。不得在 JSON 生成阶段重新缩略、改写、或替换措辞。违反此项 → 驳回,必须在修正后重新预览。 |
973
- | B4.1 | 背景四维完整性验证 | ☐ | — | 每个角色的 background 必须包含「我是谁/我的困扰/我的过往经历/我今天的心态」全部四段的完整原文。任一段缺失 → 判定为「维度缺失」,驳回。此检查须在 B4 逐字对齐之前完成。 |
974
- | B5 | MBTI | ☐ | `role_data.personality_type` | 代码+名称,如 "ISTJ" |
975
- | B6 | 性格 | ☐ | `role_data.personality` | 原样 |
976
- | B7 | 头像 | ☐ | `role_data.avatar` | 必须在生成 JSON 前查询 `+list-role-avatars` 完成匹配,写真实 URL |
977
- | B8 | 语音 | ☐ | `role_data.voice_id` | 必须在生成 JSON 前查询 `+list-role-voices` 完成匹配,写真实 ID |
978
- | B9 | 角色标签 | ☐ | `role_data.tags` | 转为数组 |
979
- | B10 | 来源类型 | ☐ | `role_data.source_type` | 固定 "custom" |
980
- | B11 | 知识水平 | ☐ | `role_data.knowledge_level` | 数组,如 ["专家级"] |
981
- | B12 | 角色禁忌 | ☐ | `role_data.taboos_objections` | 转为数组,每条一个元素 |
982
- | B13 | 完整 custom role 外壳 | ☐ | `scenario_role_id` / `customization_level` / `is_custom_role` / `customized_fields` / `created_at` / `updated_at` | 按已验证结构完整写入 |
983
-
984
- > **生成后自检命令**:读完 part2-operations.json,确认 `ai_roles_overall_description` 字符串包含 Part2 OS 全部 A1-A7 内容(通过字数比对:OS 原文约 X 字,JSON 中该字段字数也应接近 X);确认每个角色卡 B1-B13 全部有值(B7/B8 除外);**⚠️ 逐字比对每个角色的 `role_data.background` 与 Part2 展示文本是否完全一致**,同时执行 B4.1 四维完整性检查(我是谁/我的困扰/我的过往经历/我今天的心态)。
985
-
986
- ---
987
-
988
- ### Part3 → `part3-operations.json` 搬运清单
989
-
990
- | # | Part3 内容块 | 检查项 | JSON 字段 | 搬运要求 |
991
- |---|------------|--------|-----------|---------|
992
- | 1 | 开场引导语(全文) | ☐ | `update_basic.opening_dialogue` | 完整原文,一字不改 |
993
- | 2 | 开场语类型 | ☐ | `update_basic.opening_dialogue_type` | 数字 1 或 2 |
994
- | 3 | 环节1: 环节名 | ☐ | `add_conversation_step.data.step_name` | 原样,注意字段名是 `step_name` |
995
- | 4 | 环节1: 学员目标(全文) | ☐ | `add_conversation_step.data.student_objective` | 完整原文,一字不改 |
996
- | 5 | 环节1: AI任务(全文) | ☐ | `add_conversation_step.data.ai_task` | 完整原文,含环节进入条件 + IF-THEN 逻辑 + 环节退出条件,一字不改 |
997
- | 6 | 环节1: 最大轮次 | ☐ | `add_conversation_step.data.max_rounds` | 整数 |
998
- | 7-N | 环节2-N: 同上 4 项 | ☐ | 同环节1结构 | 每环节一个 `add_conversation_step` 操作 |
999
-
1000
- > **生成后自检命令**:JSON 中 `add_conversation_step` 操作数量 = Part3 环节数;每个环节的 `student_objective` 和 `ai_task` 长度与 Part3 原文一致;`opening_dialogue` 长度与 Part3 开场语一致。
1001
-
1002
- ---
1003
-
1004
- ### Part4 → `part4-operations.json` 搬运清单
1005
-
1006
- > **生成顺序**:评分标准名称 → 评分标准描述 → 然后才是各评分维度。
1007
-
1008
- | # | Part4 内容块 | 检查项 | JSON 字段 | 搬运要求 |
1009
- |---|------------|--------|-----------|---------|
1010
- | 0a | **评分标准 ID** | ☐ | `config.scenario_criteria_id` | 固定生成,格式 `criteria_{场景短码}` |
1011
- | 0b | **customization_level** | ☐ | `config.customization_level` | 固定写死 `"full"` |
1012
- | 0c | **is_custom_criteria** | ☐ | `config.is_custom_criteria` | 固定写死 `true` |
1013
- | 0d | **评分标准名称** | ☐ | `config.criteria_data.name` | 原样,8-20 字 |
1014
- | 0e | **评分标准描述(全文)** | ☐ | `config.criteria_data.description` | 完整原文,一字不改 |
1015
- | 0f | **source_type** | ☐ | `config.criteria_data.source_type` | 固定写死 `"enterprise"` |
1016
- | 0g | **total_weight** | ☐ | `config.criteria_data.total_weight` | 固定写死 `100` |
1017
- | 0h | **tags** | ☐ | `config.criteria_data.tags` | 取 Part1 标签前 4 个 |
1018
- | 0i | **customized_fields** | ☐ | `config.customized_fields` | 固定写死 `["criteria_data"]` |
1019
- | 1 | 维度1: ID | ☐ | `config.criteria_data.dimensions[0].id` | 格式 `dim_{code}` |
1020
- | 2 | 维度1: 名称 | ☐ | `config.criteria_data.dimensions[0].name` | 原样 |
1021
- | 3 | 维度1: code | ☐ | `config.criteria_data.dimensions[0].code` | 英文 code |
1022
- | 4 | 维度1: 描述(全文) | ☐ | `config.criteria_data.dimensions[0].description` | 完整原文,一字不改 |
1023
- | 5 | 维度1: 权重 | ☐ | `config.criteria_data.dimensions[0].weight` | 整数 |
1024
- | 6 | 维度1: 评分规则(全文) | ☐ | `config.criteria_data.dimensions[0].scoring_rule` | 完整原文,含分档标准和红线描述 |
1025
- | 7 | 维度1: 评分点列表 | ☐ | `config.criteria_data.dimensions[0].criteria[]` | 每条一个元素 |
1026
- | 8 | 维度1: 排序号 | ☐ | `config.criteria_data.dimensions[0].sort_order` | 从 1 开始递增 |
1027
- | 9-N | 维度2-N: 同上 8 项 | ☐ | 同维度1结构 | 每维度独立 |
1028
- | 10 | 权重之和 | ☐ | — | 所有维度 weight 求和 = 100 |
1029
-
1030
- > **生成后自检命令**:JSON 中维度数 = Part4 维度数;检查 `scenario_criteria_id`、`customization_level`、`is_custom_criteria`、`customized_fields`、`source_type`、`total_weight`、`tags` 是否齐全;随机抽查 1-2 个维度的 `id` 和 `sort_order` 是否存在;确认 `data.config.criteria_data` 层级完整无缺失;确认不再包含全局 `one_vote_veto` 字段(一票否决规则已嵌入各维度 `scoring_rule`)。
1031
-
1032
- ---
1033
-
1034
- ### Part5 → `part5-operations.json` 搬运清单
1035
-
1036
- > ⚠️ **全部写死**:以下 7 项均为固定值,生成 JSON 时直接使用,不做任何调整。
1037
-
1038
- | # | Part5 内容块 | 固定值 | JSON 字段 | 搬运要求 |
1039
- |---|------------|--------|-----------|---------|
1040
- | 1 | 练习时间 | **默认关闭** | `update_basic.min_practice_duration` / `update_basic.max_practice_duration` | 写死 0 / 0 |
1041
- | 2 | 最大练习次数 | **10** | `update_basic.max_practice_attempts` | 写死 10 |
1042
- | 3 | 通关分数 | **60** | `update_basic.passing_score` | 写死 60 |
1043
- | 4 | 完成规则 | **all_steps** | `update_basic.completion_rule` | 写死 "all_steps" |
1044
- | 5 | AI助答开关 | **true** | `update_basic.ai_assistance_enabled` | 开启,写死 true |
1045
- | 6 | 通关难度 | **2** | `update_basic.pass_difficulty` | 中,写死 2 |
1046
-
1047
- > **生成后自检命令**:逐项核对 `part5-operations.json` 中每个字段值是否与上表固定值完全一致(特别是 `min_practice_duration`/`max_practice_duration` 必须为 0 表示默认关闭、`passing_score` 必须为 60)。确认不含收尾话术、SOP 摘要或考核关键点摘要。
1048
-
1049
- ---
1050
-
1051
- ## 跨 Part 内容交接规则
1052
-
1053
- ### Part2 行为模式 → Part3 参考(不写入 JSON)
1054
-
1055
- Part2 角色卡中的「我的行为模式」(共鸣触发/关键台词/防御机制/决策逻辑)标记为 "Part3 素材,不写入 Part2 JSON"。这部分内容在 Part3 生成 AI 任务时作为参考输入,但不需逐字写入 part3-operations.json。
1056
-
1057
- ---
1058
-
1059
- ## JSON 生成硬约束
1060
-
1061
- 所有 JSON 文件(`step1-create.json`、`part2-operations.json` 等)必须通过以下方式生成:
1062
-
1063
- ```python
1064
- python3 -c "
1065
- import json
1066
- data = ... # 构建数据结构
1067
- with open('file.json', 'w', encoding='utf-8') as f:
1068
- json.dump(data, f, ensure_ascii=False, indent=2)
1069
- "
1070
- ```
1071
-
1072
- **禁止的方式:**
1073
- - ❌ shell heredoc(`cat > file.json << 'EOF'`)——含中文引号 `""` 时会触发 `invalid character` 错误
1074
- - ❌ shell echo 拼接——引号逃逸不可控
1075
- - ❌ 手工粘贴到编辑器——空格/换行不一致
1076
-
1077
- **原因:** 中文双引号 `""`(U+201C/U+201D)在 shell 中被误解析为语法结构,唯一可靠的方式是 Python `json.dump` 单步写入。
1078
-
1079
- ## 编码与错误处理
1080
-
1081
- | 问题 | 原因 | 解决方法 |
1082
- |---|---|---|
1083
- | JSON 解析失败 | 手工拼接中文引号/换行 | 用 Python `json.dump(..., ensure_ascii=False, indent=2)` 生成,**禁止 heredoc / echo / cat << 直接写含中文引号(``)的 JSON** |
1084
- | operation type 422 | type 拼错或使用过时 type | 严格使用平台已验证的 type 名 |
1085
- | `replace_conversation_steps` 422 | 平台不接受整包替换流程 | 改用 `add_conversation_step` / `patch_conversation_step` / `remove_conversation_step` / `reorder_conversation_steps` |
1086
- | `add_conversation_step` apply 成功但回读为空 | 当前 CLI 版本存在回读口径差异,实际可能已写入 | 若 preview/apply 成功,则记录回读异常并直接继续 Part4;仅在后续出现明确阻塞证据时才回退排查 |
1087
- | `replace_scoring_criteria_config` 校验失败 | 少了 `data.config` 外层或 `criteria_data` 层级缺失 | 使用 `data.config.criteria_data`,确保 `criteria_data` 直接在 `config` 下且不缺失中间层级 |
1088
- | `step_name` 字段报错 | 写成 `name` | 对话环节字段固定使用 `step_name` |
1089
- | `base_updated_at` 过期 | 并发修改 | 每次 preview/apply 前先 `soke-cli ai-training +get-scenario` |
1090
- | 学员端看不到步骤 | 仅更新 `conversation_steps` 不够 | 将 SOP 摘要同步写入 `golden_dialogue_description` 和 `key_points` |
1091
- | 角色数据异常 | `replace_ai_roles` 缺少完整 custom role 外壳,或 `data` 键用了 `ai_roles` 而非 `roles`,或 `avatar`/`knowledge_level`/`customized_fields` 结构不符 | 优先改成已验证结构:`data.roles` 键、`avatar` 用头像资源 URL(`+list-role-avatars` 的 `url` 字段)、`knowledge_level` 用数组、补齐 `scenario_role_id`/`customization_level`/`is_custom_role`/`customized_fields`/时间戳;仍失败再拆成 `add_ai_role`/`patch_ai_role` |
1092
- | 评分标准 UI 不渲染 | `criteria_data` 内缺少 `source_type`/`total_weight`/`tags`,或维度缺少 `id`/`sort_order` | 补齐 criteria_data 内部元数据字段和维度 ID/排序号 |
1093
- | 头像回填后平台不显示 | `patch_ai_role` 中缺少 `customized_fields`,或 `avatar` 用了资源 ID 而非 URL | 确认 patch 中包含 `"customized_fields": ["avatar"]`;确认 avatar 值为 `+list-role-avatars` 返回的 `url` 字段 |
1094
-
1095
- ---
1096
-
1097
- ## 与 interaction.md 的边界
1098
-
1099
- - `interaction.md` 负责:弹窗确认、按钮分支、回退链路
1100
- - `sync-engine.md` 负责:确认后的 JSON 生成、CLI 执行、状态快照更新
1101
- - interaction 确认后调用 sync-engine 对应模板,sync-engine 执行完成后回到 interaction 继续下一 Part