@tencent-rtc/trtc-agent-skills 0.1.0

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 (205) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/README.zh.md +173 -0
  4. package/bin/cli.js +434 -0
  5. package/knowledge-base/index.yaml +454 -0
  6. package/knowledge-base/platform-slice-template.md +233 -0
  7. package/knowledge-base/scenario-spec.md +350 -0
  8. package/knowledge-base/scenarios/conference/base/general-conference.md +365 -0
  9. package/knowledge-base/scenarios/conference/base/webinar-conference.md +130 -0
  10. package/knowledge-base/scenarios/conference/medical/1v1-video-consultation.md +145 -0
  11. package/knowledge-base/scenarios/conference/medical/medical-multidoctor-consultation.md +113 -0
  12. package/knowledge-base/scenarios/live/entertainment-live-room.md +118 -0
  13. package/knowledge-base/slice-spec.md +546 -0
  14. package/knowledge-base/slices/conference/web/ai-tools.md +225 -0
  15. package/knowledge-base/slices/conference/web/beauty-effects.md +188 -0
  16. package/knowledge-base/slices/conference/web/device-control.md +338 -0
  17. package/knowledge-base/slices/conference/web/login-auth.md +261 -0
  18. package/knowledge-base/slices/conference/web/network-quality.md +190 -0
  19. package/knowledge-base/slices/conference/web/official-roomkit-api.md +298 -0
  20. package/knowledge-base/slices/conference/web/official-roomkit-login-ui.md +246 -0
  21. package/knowledge-base/slices/conference/web/participant-list.md +238 -0
  22. package/knowledge-base/slices/conference/web/participant-management.md +718 -0
  23. package/knowledge-base/slices/conference/web/prejoin-check.md +293 -0
  24. package/knowledge-base/slices/conference/web/room-call.md +213 -0
  25. package/knowledge-base/slices/conference/web/room-chat.md +426 -0
  26. package/knowledge-base/slices/conference/web/room-lifecycle.md +534 -0
  27. package/knowledge-base/slices/conference/web/room-schedule.md +281 -0
  28. package/knowledge-base/slices/conference/web/screen-share.md +211 -0
  29. package/knowledge-base/slices/conference/web/video-layout.md +675 -0
  30. package/knowledge-base/slices/conference/web/virtual-background.md +197 -0
  31. package/knowledge-base/slices/conference/web/webinar-interaction.md +206 -0
  32. package/knowledge-base/slices/live/anchor-lifecycle.md +122 -0
  33. package/knowledge-base/slices/live/anchor-preview.md +90 -0
  34. package/knowledge-base/slices/live/anchor-room-config.md +104 -0
  35. package/knowledge-base/slices/live/audience-list.md +86 -0
  36. package/knowledge-base/slices/live/audience-manage.md +92 -0
  37. package/knowledge-base/slices/live/audience-watch.md +85 -0
  38. package/knowledge-base/slices/live/audio.md +116 -0
  39. package/knowledge-base/slices/live/barrage.md +88 -0
  40. package/knowledge-base/slices/live/beauty.md +99 -0
  41. package/knowledge-base/slices/live/coguest-apply.md +105 -0
  42. package/knowledge-base/slices/live/device-control.md +91 -0
  43. package/knowledge-base/slices/live/error-codes.md +167 -0
  44. package/knowledge-base/slices/live/gift.md +84 -0
  45. package/knowledge-base/slices/live/ios/.gitkeep +0 -0
  46. package/knowledge-base/slices/live/ios/anchor-lifecycle.md +313 -0
  47. package/knowledge-base/slices/live/ios/anchor-preview.md +228 -0
  48. package/knowledge-base/slices/live/ios/anchor-room-config.md +257 -0
  49. package/knowledge-base/slices/live/ios/audience-list.md +353 -0
  50. package/knowledge-base/slices/live/ios/audience-manage.md +381 -0
  51. package/knowledge-base/slices/live/ios/audience-watch.md +286 -0
  52. package/knowledge-base/slices/live/ios/audio.md +373 -0
  53. package/knowledge-base/slices/live/ios/barrage.md +285 -0
  54. package/knowledge-base/slices/live/ios/beauty.md +323 -0
  55. package/knowledge-base/slices/live/ios/coguest-apply.md +506 -0
  56. package/knowledge-base/slices/live/ios/device-control.md +286 -0
  57. package/knowledge-base/slices/live/ios/error-codes.md +270 -0
  58. package/knowledge-base/slices/live/ios/gift.md +315 -0
  59. package/knowledge-base/slices/live/ios/live-list.md +269 -0
  60. package/knowledge-base/slices/live/ios/login-auth.md +247 -0
  61. package/knowledge-base/slices/live/live-list.md +82 -0
  62. package/knowledge-base/slices/live/login-auth.md +78 -0
  63. package/package.json +34 -0
  64. package/skills/trtc/SKILL.md +326 -0
  65. package/skills/trtc/room-builder/SKILL.md +138 -0
  66. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/README.md +108 -0
  67. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/backend-contract.zh-CN.md +162 -0
  68. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/integration.zh-CN.md +154 -0
  69. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/theme.zh-CN.md +78 -0
  70. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/index.html +12 -0
  71. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/package.json +28 -0
  72. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/postcss.config.js +5 -0
  73. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/App.vue +25 -0
  74. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/ConsultationManagePanel.vue +838 -0
  75. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LanguageSwitch.vue +102 -0
  76. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LoadingSpinner.vue +6 -0
  77. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalAlert.vue +34 -0
  78. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalBusinessPanel.vue +148 -0
  79. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalButton.vue +49 -0
  80. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalConfirmDialog.vue +68 -0
  81. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalDataPanel.vue +196 -0
  82. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalRecordPanel.vue +270 -0
  83. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/PrescriptionPanel.vue +363 -0
  84. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/basic-info-config.ts +29 -0
  85. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.d.ts +4 -0
  86. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.js +2 -0
  87. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/runtime-config.ts +12 -0
  88. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/env.d.ts +32 -0
  89. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationChatPanel.vue +123 -0
  90. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationMembersPanel.vue +230 -0
  91. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationTranscriptionPanel.vue +135 -0
  92. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationVideoStage.vue +113 -0
  93. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/InviteDoctorDialog.vue +132 -0
  94. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/KickMemberConfirmDialog.vue +50 -0
  95. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/types.ts +77 -0
  96. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationChat.ts +97 -0
  97. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationDevices.ts +48 -0
  98. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationParticipants.ts +121 -0
  99. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationPermissions.ts +25 -0
  100. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/utils.ts +70 -0
  101. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/en-US/index.ts +553 -0
  102. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/index.ts +25 -0
  103. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/medicalTranslate.ts +85 -0
  104. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/state.ts +49 -0
  105. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/zh-CN/index.ts +463 -0
  106. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/main.ts +12 -0
  107. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/appointments.ts +96 -0
  108. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/users.ts +79 -0
  109. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/router/index.ts +63 -0
  110. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/index.ts +25 -0
  111. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/appointmentService.ts +77 -0
  112. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/authService.ts +38 -0
  113. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/launchContext.ts +31 -0
  114. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/userService.ts +35 -0
  115. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/appointmentService.ts +43 -0
  116. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/authService.ts +33 -0
  117. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/userService.ts +43 -0
  118. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/types.ts +135 -0
  119. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/shared/icons.ts +53 -0
  120. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/index.css +106 -0
  121. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/tailwind.css +3 -0
  122. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/theme.css +209 -0
  123. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/auth.ts +50 -0
  124. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/format.ts +24 -0
  125. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/navigation.ts +12 -0
  126. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/session.ts +28 -0
  127. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorConsultationView.vue +777 -0
  128. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorDashboardView.vue +678 -0
  129. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/LoginView.vue +441 -0
  130. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationFinishedView.vue +185 -0
  131. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationView.vue +1003 -0
  132. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientSelectDoctorView.vue +317 -0
  133. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientWaitingView.vue +454 -0
  134. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.json +21 -0
  135. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.node.json +8 -0
  136. package/skills/trtc/room-builder/templates/scenarios/medical-consultation/vite.config.ts +17 -0
  137. package/skills/trtc/room-builder/templates/scenarios/medical-consultation//346/216/245/345/205/245/350/257/264/346/230/216.md +6 -0
  138. package/skills/trtc/room-builder/tools/render_ai_instructions.py +226 -0
  139. package/skills/trtc-apply/SKILL.md +97 -0
  140. package/skills/trtc-apply/guardrails/apply_lib/__init__.py +0 -0
  141. package/skills/trtc-apply/guardrails/apply_lib/__pycache__/__init__.cpython-313.pyc +0 -0
  142. package/skills/trtc-apply/guardrails/apply_lib/__pycache__/rule_parser.cpython-313.pyc +0 -0
  143. package/skills/trtc-apply/guardrails/apply_lib/rule_parser.py +268 -0
  144. package/skills/trtc-docs/SKILL.md +207 -0
  145. package/skills/trtc-onboarding/SKILL.md +839 -0
  146. package/skills/trtc-onboarding/reference/path-a1-demo.md +103 -0
  147. package/skills/trtc-onboarding/reference/path-a2-integrate.md +693 -0
  148. package/skills/trtc-onboarding/reference/path-b-troubleshoot.md +115 -0
  149. package/skills/trtc-onboarding/reference/path-c-expand.md +43 -0
  150. package/skills/trtc-onboarding/reference/reporting-protocol.md +174 -0
  151. package/skills/trtc-onboarding/reference/supported-matrix.md +100 -0
  152. package/skills/trtc-onboarding/reference/usersig-handling.md +140 -0
  153. package/skills/trtc-search/SKILL.md +221 -0
  154. package/skills/trtc-topic/SKILL.md +638 -0
  155. package/skills/trtc-topic/guardrails/__pycache__/gate_slice_read.cpython-313.pyc +0 -0
  156. package/skills/trtc-topic/guardrails/__pycache__/gate_slice_write.cpython-313.pyc +0 -0
  157. package/skills/trtc-topic/guardrails/__pycache__/stop_require_apply_evidence.cpython-313.pyc +0 -0
  158. package/skills/trtc-topic/guardrails/gate_slice_read.py +133 -0
  159. package/skills/trtc-topic/guardrails/gate_slice_write.py +169 -0
  160. package/skills/trtc-topic/guardrails/stop_require_apply_evidence.py +97 -0
  161. package/skills/trtc-topic/references/execution-units.yaml +58 -0
  162. package/skills/trtc-topic/runtime/README.md +50 -0
  163. package/skills/trtc-topic/runtime/RUNTIME.md +128 -0
  164. package/skills/trtc-topic/runtime/lib/__init__.py +0 -0
  165. package/skills/trtc-topic/runtime/lib/platforms.py +194 -0
  166. package/skills/trtc-topic/runtime/package-lock.json +1211 -0
  167. package/skills/trtc-topic/runtime/package.json +13 -0
  168. package/skills/trtc-topic/runtime/telemetry-bridge.mjs +339 -0
  169. package/skills/trtc-topic/runtime/telemetry_collector.py +293 -0
  170. package/skills/trtc-topic/scripts/STATE-MACHINE-GUIDE.md +186 -0
  171. package/skills/trtc-topic/scripts/__pycache__/apply.cpython-313.pyc +0 -0
  172. package/skills/trtc-topic/scripts/apply.py +581 -0
  173. package/skills/trtc-topic/scripts/finalize_session.py +113 -0
  174. package/skills/trtc-topic/scripts/init_slice_queue.py +96 -0
  175. package/skills/trtc-topic/scripts/lib/__pycache__/state_machine.cpython-313.pyc +0 -0
  176. package/skills/trtc-topic/scripts/lib/state_machine.py +328 -0
  177. package/skills/trtc-topic/scripts/next_slice.py +137 -0
  178. package/skills/trtc-topic/tests/README.md +70 -0
  179. package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
  180. package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.3.pyc +0 -0
  181. package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.2.pyc +0 -0
  182. package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.3.pyc +0 -0
  183. package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.2.pyc +0 -0
  184. package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.3.pyc +0 -0
  185. package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.2.pyc +0 -0
  186. package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.3.pyc +0 -0
  187. package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.2.pyc +0 -0
  188. package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.3.pyc +0 -0
  189. package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.2.pyc +0 -0
  190. package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.3.pyc +0 -0
  191. package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.2.pyc +0 -0
  192. package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.3.pyc +0 -0
  193. package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.2.pyc +0 -0
  194. package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.3.pyc +0 -0
  195. package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.2.pyc +0 -0
  196. package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.3.pyc +0 -0
  197. package/skills/trtc-topic/tests/conftest.py +72 -0
  198. package/skills/trtc-topic/tests/test_apply_cli.py +480 -0
  199. package/skills/trtc-topic/tests/test_end_to_end.py +305 -0
  200. package/skills/trtc-topic/tests/test_finalize_session.py +51 -0
  201. package/skills/trtc-topic/tests/test_gates.py +316 -0
  202. package/skills/trtc-topic/tests/test_session_resolver.py +260 -0
  203. package/skills/trtc-topic/tests/test_state_machine.py +414 -0
  204. package/skills/trtc-topic/tests/test_stop_require_apply.py +99 -0
  205. package/skills/trtc-topic/tests/test_topic_skill_invariants.py +130 -0
@@ -0,0 +1,186 @@
1
+ # State Machine Guide (topic skill internal)
2
+
3
+ > 这个文档由 `topic/SKILL.md` Step 3 引用。`topic/SKILL.md` 只在 Step 3 给一个简短的指针,
4
+ > 真正的状态机操作手册(Bash 命令、状态图、harness 强制规则、per-slice 节奏等)都在这里。
5
+ >
6
+ > AI 在执行 topic 的 Step 3 时,**MUST 先读这个文件再开始 slice 循环**。slice loop 由
7
+ > on-disk 状态机加 PreToolUse / Stop hooks 物理强制——下面的规则不是建议,违反会被 hook
8
+ > 物理拒绝,用户能直接看到拒绝消息。**驱动状态机;不要绕开它。**
9
+
10
+ ---
11
+
12
+ ## The five commands (run via Bash)
13
+
14
+ ```bash
15
+ # 1. Materialise the execution queue from confirmed_plan (ONCE per scenario).
16
+ # Default: one execution step per slice. If session.execution_granularity=unit:
17
+ # execution_queue contains delivery-unit steps with multiple slices.
18
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/init_slice_queue.py
19
+
20
+ # 2. Inspect the cursor at any time.
21
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/next_slice.py status
22
+
23
+ # 3. Advance the cursor as you progress through the current execution step.
24
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/next_slice.py advance mark_slice_read
25
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/next_slice.py advance mark_code_written
26
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/next_slice.py advance mark_user_confirmed
27
+
28
+ # 4. Run apply (it advances mark_apply_passed / mark_apply_failed itself).
29
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/apply.py --slice <slice_id>
30
+ # In delivery-unit mode:
31
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/apply.py --unit <unit_id>
32
+ ```
33
+
34
+ ---
35
+
36
+ ## State diagram (one execution step)
37
+
38
+ ```
39
+ not_started ─Read slice file─▶ mark_slice_read ─▶ slice_read
40
+
41
+ Write code
42
+
43
+ mark_code_written
44
+
45
+ code_written ──apply.py──▶ apply_passed
46
+ │ │
47
+ │ └──fail──▶ apply_failed ──Edit code──▶ mark_code_written ──▶ code_written
48
+
49
+ (you're stuck — Stop hook blocks turn end)
50
+
51
+ apply_passed ─Pause for user "继续"─▶ mark_user_confirmed ─▶ next slice
52
+ ```
53
+
54
+ ---
55
+
56
+ ## What the harness physically enforces
57
+
58
+ | Rule | Enforced by | What you'll see if you violate |
59
+ |---|---|---|
60
+ | You can only Read the **current execution step's** slice `.md` files | `gate_slice_read.py` PreToolUse | "Read blocked: '<other-slice>' is not in the current execution step" + exit 2 |
61
+ | You cannot Write project source files in `not_started` | `gate_slice_write.py` PreToolUse | "Write blocked: state is 'not_started'" + exit 2 |
62
+ | You cannot Write project source files in `apply_passed` | `gate_slice_write.py` PreToolUse | "Write blocked: state is 'apply_passed'... ask the user to confirm" + exit 2 |
63
+ | You cannot end the turn with `code_written` or `apply_failed` | `stop_require_apply_evidence.py` Stop | "Cannot end turn: execution step [N] '<id>' is in 'code_written'" + exit 2 |
64
+ | apply.py refuses unless state == `code_written` and the requested slice/unit matches the cursor | `apply.py` itself | exit 2 with explanation |
65
+
66
+ ---
67
+
68
+ ## Auto-advance policy
69
+
70
+ `auto_advance_policy` (root-level field in `${CLAUDE_PROJECT_DIR}/.trtc-session.yaml`) decides whether
71
+ `apply.py` pauses for the user after a clean pass:
72
+
73
+ | policy | After apply pass | After apply fail/partial |
74
+ |---|---|---|
75
+ | `pause_each` | stays at `apply_passed`; AI must wait for user "继续" then call `mark_user_confirmed` | stays at `apply_failed`; regenerate, re-apply |
76
+ | `pause_on_failure` (recommended default) | apply.py auto-calls `mark_user_confirmed`; cursor lands on the next execution step's `not_started` | stays at `apply_failed`; regenerate, re-apply |
77
+ | `pause_at_end` | same as `pause_on_failure` (reserved for future per-batch summary) | stays at `apply_failed` |
78
+
79
+ Unset / unknown values are treated as `pause_each` — fail closed. The policy
80
+ is set by onboarding when the user picks scope; **do not change it mid-flight**.
81
+
82
+ ---
83
+
84
+ ## Execution granularity
85
+
86
+ By default the topic loop runs one slice at a time. When the session has:
87
+
88
+ ```yaml
89
+ execution_granularity: unit
90
+ ```
91
+
92
+ the state machine runs delivery units instead. A delivery unit is an execution
93
+ batch containing multiple existing `confirmed_plan` slices. It never adds a
94
+ slice that is not already in `confirmed_plan`; it only reduces how many
95
+ read/write/apply loops the agent runs.
96
+
97
+ Automatic grouping is scenario-scoped and declared in:
98
+
99
+ ```bash
100
+ skills/trtc-topic/references/execution-units.yaml
101
+ ```
102
+
103
+ If the current scenario is absent from that file, unit mode uses single-slice
104
+ execution steps. Session-level `delivery_units` may override the scenario
105
+ config, but the same rule applies: only slices already in `confirmed_plan` may
106
+ be grouped.
107
+
108
+ Example:
109
+
110
+ ```yaml
111
+ execution_queue:
112
+ - id: foundation
113
+ type: unit
114
+ status: pending
115
+ slices:
116
+ - conference/login-auth
117
+ - conference/room-lifecycle
118
+ ```
119
+
120
+ In unit mode the slice-read gate allows every slice inside the current unit and
121
+ blocks slices outside it. The write and Stop gates use the current unit state.
122
+ `apply.py --unit <id>` runs the entry-symbol check for every slice in the unit
123
+ and writes one evidence JSON grouped by slice.
124
+
125
+ ## Per-slice / per-unit rhythm (the tool-using turns, in order)
126
+
127
+ 1. `Bash`: run `next_slice.py status` to confirm the cursor.
128
+ 2. `Read`: open the current slice's product overview + platform file. In unit
129
+ mode, read every slice listed in the current unit.
130
+ 3. `Bash`: `next_slice.py advance mark_slice_read`.
131
+ 4. `Write` / `Edit`: generate code into the user project for the current slice
132
+ or current unit. Then `Bash`: `next_slice.py advance mark_code_written`.
133
+ 5. `Bash`: `apply.py --slice <id>` or, in unit mode, `apply.py --unit <id>`.
134
+ - **policy = pause_each + pass** → ask user "继续?", wait, then `next_slice.py advance mark_user_confirmed`.
135
+ - **policy = pause_on_failure + pass** → apply.py auto-advances; loop straight back to (1) for the next execution step.
136
+ - **fail (any policy)** → Edit code based on the issue text in `.trtc-apply-evidence/{slug}.json`, `mark_code_written` again, re-run apply.py. (Re-reading the slice file is permitted — gate allows it — but not enforced.)
137
+
138
+ ---
139
+
140
+ ## Hard rules (review before every execution step)
141
+
142
+ - Do **not** combine code from multiple execution steps into one Write. Unit mode may combine the slices inside the current unit only.
143
+ - Do **not** Read slices outside the current execution step before the cursor advances (whether by manual confirm or by apply.py auto-advance) — the Read gate will reject it.
144
+ - The evidence shown to the user must come from the JSON `apply.py` writes to `.trtc-apply-evidence/{slice_slug}.json` — **quote it, don't compose it from memory**.
145
+ - After `apply_failed`, fix the code based on the issue text in the evidence JSON. Re-reading the slice file is allowed and often useful, but the harness no longer forces it — the Stop hook keeps you in the loop until apply passes.
146
+
147
+ ---
148
+
149
+ ## Post-loop: `all_done` is NOT the end
150
+
151
+ **CRITICAL**: When `apply.py` prints `next state: all_done`, the slice loop is
152
+ finished — but the **topic flow is not done**. `all_done` means "all code steps
153
+ passed", not "task complete, output summary and stop".
154
+
155
+ After `all_done` you MUST continue to:
156
+
157
+ 1. **Step 4 (Verification Checklist)** — present the scenario's verification
158
+ items to the user and ask them to confirm each one works.
159
+ 2. **Step 4.5 (Runtime Verification & Telemetry)** — offer to run the app and
160
+ automatically verify SDK events fire correctly (opt-in consent required if
161
+ `telemetry.opted_in` is null in the session).
162
+ 3. **Finalize the session** — after Step 4 / Step 4.5 are genuinely complete,
163
+ run:
164
+
165
+ ```bash
166
+ python3 ${CLAUDE_PLUGIN_ROOT}/skills/trtc-topic/scripts/finalize_session.py
167
+ ```
168
+
169
+ This normalizes `status`, `current_step`, `completed_steps`, and the slice
170
+ cursor so the next turn reloads as a completed integration rather than a
171
+ mid-topic handoff.
172
+
173
+ `apply.py` prints a `POST-LOOP CHECKLIST` block when it reaches `all_done` as
174
+ a physical reminder. **Do not ignore that block.**
175
+
176
+ **Self-check signal**: If your next action after seeing `all_done` is to write
177
+ a "project complete" summary without first executing Step 4 — STOP, you are
178
+ skipping mandatory steps. Go back to `topic/SKILL.md` §Step 4.
179
+
180
+ ---
181
+
182
+ ## Related documents
183
+
184
+ - `topic/SKILL.md` — high-level scenario walkthrough flow, references this guide
185
+ - `apply/SKILL.md` — apply skill input/output contract
186
+ - Source: `topic/scripts/state_machine.py`, `topic/scripts/next_slice.py`, `topic/scripts/apply.py`, `topic/guardrails/{gate_slice_read,gate_slice_write,stop_require_apply_evidence}.py`