@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.
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/README.zh.md +173 -0
- package/bin/cli.js +434 -0
- package/knowledge-base/index.yaml +454 -0
- package/knowledge-base/platform-slice-template.md +233 -0
- package/knowledge-base/scenario-spec.md +350 -0
- package/knowledge-base/scenarios/conference/base/general-conference.md +365 -0
- package/knowledge-base/scenarios/conference/base/webinar-conference.md +130 -0
- package/knowledge-base/scenarios/conference/medical/1v1-video-consultation.md +145 -0
- package/knowledge-base/scenarios/conference/medical/medical-multidoctor-consultation.md +113 -0
- package/knowledge-base/scenarios/live/entertainment-live-room.md +118 -0
- package/knowledge-base/slice-spec.md +546 -0
- package/knowledge-base/slices/conference/web/ai-tools.md +225 -0
- package/knowledge-base/slices/conference/web/beauty-effects.md +188 -0
- package/knowledge-base/slices/conference/web/device-control.md +338 -0
- package/knowledge-base/slices/conference/web/login-auth.md +261 -0
- package/knowledge-base/slices/conference/web/network-quality.md +190 -0
- package/knowledge-base/slices/conference/web/official-roomkit-api.md +298 -0
- package/knowledge-base/slices/conference/web/official-roomkit-login-ui.md +246 -0
- package/knowledge-base/slices/conference/web/participant-list.md +238 -0
- package/knowledge-base/slices/conference/web/participant-management.md +718 -0
- package/knowledge-base/slices/conference/web/prejoin-check.md +293 -0
- package/knowledge-base/slices/conference/web/room-call.md +213 -0
- package/knowledge-base/slices/conference/web/room-chat.md +426 -0
- package/knowledge-base/slices/conference/web/room-lifecycle.md +534 -0
- package/knowledge-base/slices/conference/web/room-schedule.md +281 -0
- package/knowledge-base/slices/conference/web/screen-share.md +211 -0
- package/knowledge-base/slices/conference/web/video-layout.md +675 -0
- package/knowledge-base/slices/conference/web/virtual-background.md +197 -0
- package/knowledge-base/slices/conference/web/webinar-interaction.md +206 -0
- package/knowledge-base/slices/live/anchor-lifecycle.md +122 -0
- package/knowledge-base/slices/live/anchor-preview.md +90 -0
- package/knowledge-base/slices/live/anchor-room-config.md +104 -0
- package/knowledge-base/slices/live/audience-list.md +86 -0
- package/knowledge-base/slices/live/audience-manage.md +92 -0
- package/knowledge-base/slices/live/audience-watch.md +85 -0
- package/knowledge-base/slices/live/audio.md +116 -0
- package/knowledge-base/slices/live/barrage.md +88 -0
- package/knowledge-base/slices/live/beauty.md +99 -0
- package/knowledge-base/slices/live/coguest-apply.md +105 -0
- package/knowledge-base/slices/live/device-control.md +91 -0
- package/knowledge-base/slices/live/error-codes.md +167 -0
- package/knowledge-base/slices/live/gift.md +84 -0
- package/knowledge-base/slices/live/ios/.gitkeep +0 -0
- package/knowledge-base/slices/live/ios/anchor-lifecycle.md +313 -0
- package/knowledge-base/slices/live/ios/anchor-preview.md +228 -0
- package/knowledge-base/slices/live/ios/anchor-room-config.md +257 -0
- package/knowledge-base/slices/live/ios/audience-list.md +353 -0
- package/knowledge-base/slices/live/ios/audience-manage.md +381 -0
- package/knowledge-base/slices/live/ios/audience-watch.md +286 -0
- package/knowledge-base/slices/live/ios/audio.md +373 -0
- package/knowledge-base/slices/live/ios/barrage.md +285 -0
- package/knowledge-base/slices/live/ios/beauty.md +323 -0
- package/knowledge-base/slices/live/ios/coguest-apply.md +506 -0
- package/knowledge-base/slices/live/ios/device-control.md +286 -0
- package/knowledge-base/slices/live/ios/error-codes.md +270 -0
- package/knowledge-base/slices/live/ios/gift.md +315 -0
- package/knowledge-base/slices/live/ios/live-list.md +269 -0
- package/knowledge-base/slices/live/ios/login-auth.md +247 -0
- package/knowledge-base/slices/live/live-list.md +82 -0
- package/knowledge-base/slices/live/login-auth.md +78 -0
- package/package.json +34 -0
- package/skills/trtc/SKILL.md +326 -0
- package/skills/trtc/room-builder/SKILL.md +138 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/README.md +108 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/backend-contract.zh-CN.md +162 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/integration.zh-CN.md +154 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/docs/theme.zh-CN.md +78 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/index.html +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/package.json +28 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/postcss.config.js +5 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/App.vue +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/ConsultationManagePanel.vue +838 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LanguageSwitch.vue +102 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/LoadingSpinner.vue +6 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalAlert.vue +34 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalBusinessPanel.vue +148 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalButton.vue +49 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalConfirmDialog.vue +68 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalDataPanel.vue +196 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/MedicalRecordPanel.vue +270 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/components/PrescriptionPanel.vue +363 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/basic-info-config.ts +29 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.d.ts +4 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/lib-generate-test-usersig-es.min.js +2 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/config/runtime-config.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/env.d.ts +32 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationChatPanel.vue +123 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationMembersPanel.vue +230 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationTranscriptionPanel.vue +135 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/ConsultationVideoStage.vue +113 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/InviteDoctorDialog.vue +132 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/components/KickMemberConfirmDialog.vue +50 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/types.ts +77 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationChat.ts +97 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationDevices.ts +48 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationParticipants.ts +121 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/useConsultationPermissions.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/features/consultation/utils.ts +70 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/en-US/index.ts +553 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/index.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/medicalTranslate.ts +85 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/state.ts +49 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/i18n/zh-CN/index.ts +463 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/main.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/appointments.ts +96 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/mock/users.ts +79 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/router/index.ts +63 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/index.ts +25 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/appointmentService.ts +77 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/authService.ts +38 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/launchContext.ts +31 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/integration/userService.ts +35 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/appointmentService.ts +43 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/authService.ts +33 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/mock/userService.ts +43 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/services/adapters/types.ts +135 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/shared/icons.ts +53 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/index.css +106 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/tailwind.css +3 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/styles/theme.css +209 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/auth.ts +50 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/format.ts +24 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/navigation.ts +12 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/utils/session.ts +28 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorConsultationView.vue +777 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/DoctorDashboardView.vue +678 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/LoginView.vue +441 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationFinishedView.vue +185 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientConsultationView.vue +1003 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientSelectDoctorView.vue +317 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/src/views/PatientWaitingView.vue +454 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.json +21 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/tsconfig.node.json +8 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation/vite.config.ts +17 -0
- package/skills/trtc/room-builder/templates/scenarios/medical-consultation//346/216/245/345/205/245/350/257/264/346/230/216.md +6 -0
- package/skills/trtc/room-builder/tools/render_ai_instructions.py +226 -0
- package/skills/trtc-apply/SKILL.md +97 -0
- package/skills/trtc-apply/guardrails/apply_lib/__init__.py +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/rule_parser.cpython-313.pyc +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/rule_parser.py +268 -0
- package/skills/trtc-docs/SKILL.md +207 -0
- package/skills/trtc-onboarding/SKILL.md +839 -0
- package/skills/trtc-onboarding/reference/path-a1-demo.md +103 -0
- package/skills/trtc-onboarding/reference/path-a2-integrate.md +693 -0
- package/skills/trtc-onboarding/reference/path-b-troubleshoot.md +115 -0
- package/skills/trtc-onboarding/reference/path-c-expand.md +43 -0
- package/skills/trtc-onboarding/reference/reporting-protocol.md +174 -0
- package/skills/trtc-onboarding/reference/supported-matrix.md +100 -0
- package/skills/trtc-onboarding/reference/usersig-handling.md +140 -0
- package/skills/trtc-search/SKILL.md +221 -0
- package/skills/trtc-topic/SKILL.md +638 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_read.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_write.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/stop_require_apply_evidence.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/gate_slice_read.py +133 -0
- package/skills/trtc-topic/guardrails/gate_slice_write.py +169 -0
- package/skills/trtc-topic/guardrails/stop_require_apply_evidence.py +97 -0
- package/skills/trtc-topic/references/execution-units.yaml +58 -0
- package/skills/trtc-topic/runtime/README.md +50 -0
- package/skills/trtc-topic/runtime/RUNTIME.md +128 -0
- package/skills/trtc-topic/runtime/lib/__init__.py +0 -0
- package/skills/trtc-topic/runtime/lib/platforms.py +194 -0
- package/skills/trtc-topic/runtime/package-lock.json +1211 -0
- package/skills/trtc-topic/runtime/package.json +13 -0
- package/skills/trtc-topic/runtime/telemetry-bridge.mjs +339 -0
- package/skills/trtc-topic/runtime/telemetry_collector.py +293 -0
- package/skills/trtc-topic/scripts/STATE-MACHINE-GUIDE.md +186 -0
- package/skills/trtc-topic/scripts/__pycache__/apply.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/apply.py +581 -0
- package/skills/trtc-topic/scripts/finalize_session.py +113 -0
- package/skills/trtc-topic/scripts/init_slice_queue.py +96 -0
- package/skills/trtc-topic/scripts/lib/__pycache__/state_machine.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/lib/state_machine.py +328 -0
- package/skills/trtc-topic/scripts/next_slice.py +137 -0
- package/skills/trtc-topic/tests/README.md +70 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/conftest.py +72 -0
- package/skills/trtc-topic/tests/test_apply_cli.py +480 -0
- package/skills/trtc-topic/tests/test_end_to_end.py +305 -0
- package/skills/trtc-topic/tests/test_finalize_session.py +51 -0
- package/skills/trtc-topic/tests/test_gates.py +316 -0
- package/skills/trtc-topic/tests/test_session_resolver.py +260 -0
- package/skills/trtc-topic/tests/test_state_machine.py +414 -0
- package/skills/trtc-topic/tests/test_stop_require_apply.py +99 -0
- 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`
|
|
Binary file
|