cotutor 0.2.0 → 0.4.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 (912) hide show
  1. package/LICENSE +249 -21
  2. package/NOTICE +42 -0
  3. package/README.md +115 -20
  4. package/avatars/chinese.webp +0 -0
  5. package/avatars/english.webp +0 -0
  6. package/avatars/math.webp +0 -0
  7. package/bin/cotutor.js +15 -5
  8. package/cards/canvas/card.css +8 -0
  9. package/cards/canvas/card.md +68 -0
  10. package/cards/choice/card.css +18 -0
  11. package/cards/choice/card.md +55 -0
  12. package/cards/code/card.css +5 -0
  13. package/cards/code/card.md +46 -0
  14. package/cards/dictation/card.css +10 -0
  15. package/cards/dictation/card.md +97 -0
  16. package/cards/image/card.css +10 -0
  17. package/cards/image/card.md +52 -0
  18. package/cards/lecture/card.css +9 -0
  19. package/cards/lecture/card.md +69 -0
  20. package/cards/paint/card.css +20 -0
  21. package/cards/paint/card.md +77 -0
  22. package/cards/photo/card.css +22 -0
  23. package/cards/photo/card.md +61 -0
  24. package/cards/read/card.css +6 -0
  25. package/cards/read/card.md +51 -0
  26. package/cards/text/card.css +3 -0
  27. package/cards/text/card.md +69 -0
  28. package/cards/tianzige/card.css +17 -0
  29. package/cards/tianzige/card.md +78 -0
  30. package/cards/tutor/card.css +79 -0
  31. package/cards/tutor/card.md +149 -0
  32. package/cards/word/card.css +24 -0
  33. package/cards/word/card.md +91 -0
  34. package/cards//346/235/277/344/271/246/346/200/216/344/271/210/345/206/231.md +159 -0
  35. package/dist/app/activity-eval-rules.d.ts +62 -0
  36. package/dist/app/activity-eval-rules.js +276 -0
  37. package/dist/app/activity-eval.d.ts +65 -0
  38. package/dist/app/activity-eval.js +159 -0
  39. package/dist/app/build.d.ts +11 -0
  40. package/dist/app/build.js +45 -0
  41. package/dist/app/cli/activities.d.ts +70 -0
  42. package/dist/app/cli/activities.js +196 -0
  43. package/dist/app/cli/cert.d.ts +12 -0
  44. package/dist/app/cli/cert.js +49 -0
  45. package/dist/app/cli/chalk/bake.d.ts +10 -0
  46. package/dist/app/cli/chalk/bake.js +58 -0
  47. package/dist/app/cli/chalk/browser.d.ts +16 -0
  48. package/dist/app/cli/chalk/browser.js +157 -0
  49. package/dist/app/cli/chalk/build.d.ts +14 -0
  50. package/dist/app/cli/chalk/build.js +100 -0
  51. package/dist/app/cli/chalk/dub.d.ts +51 -0
  52. package/dist/app/cli/chalk/dub.js +106 -0
  53. package/dist/app/cli/chalk/load-scene.d.ts +34 -0
  54. package/dist/app/cli/chalk/load-scene.js +117 -0
  55. package/dist/app/cli/chalk/main.d.ts +7 -0
  56. package/dist/app/cli/chalk/main.js +199 -0
  57. package/dist/app/cli/chalk/serve.d.ts +4 -0
  58. package/dist/app/cli/chalk/serve.js +28 -0
  59. package/dist/app/cli/chalk/snap.d.ts +65 -0
  60. package/dist/app/cli/chalk/snap.js +103 -0
  61. package/dist/app/cli/chalk/typecheck.d.ts +7 -0
  62. package/dist/app/cli/chalk/typecheck.js +51 -0
  63. package/dist/app/cli/doctor.d.ts +24 -0
  64. package/dist/app/cli/doctor.js +553 -0
  65. package/dist/app/cli/firewall.d.ts +24 -0
  66. package/dist/app/cli/firewall.js +79 -0
  67. package/dist/app/cli/grades.d.ts +14 -0
  68. package/dist/app/cli/grades.js +44 -0
  69. package/dist/{cli → app/cli}/init.d.ts +3 -1
  70. package/dist/app/cli/init.js +158 -0
  71. package/dist/app/cli/main.js +1038 -0
  72. package/dist/app/cli/migrate.d.ts +49 -0
  73. package/dist/app/cli/migrate.js +195 -0
  74. package/dist/app/cli/port-holder.d.ts +16 -0
  75. package/dist/app/cli/port-holder.js +34 -0
  76. package/dist/app/cli/port.d.ts +37 -0
  77. package/dist/app/cli/port.js +116 -0
  78. package/dist/app/cli/sandbox.d.ts +25 -0
  79. package/dist/app/cli/sandbox.js +166 -0
  80. package/dist/app/cli/serve-log.d.ts +13 -0
  81. package/dist/app/cli/serve-log.js +90 -0
  82. package/dist/app/cli/serve.d.ts +51 -0
  83. package/dist/app/cli/serve.js +168 -0
  84. package/dist/app/cli/service-windows.d.ts +50 -0
  85. package/dist/app/cli/service-windows.js +117 -0
  86. package/dist/app/cli/service.d.ts +138 -0
  87. package/dist/app/cli/service.js +429 -0
  88. package/dist/app/cli/shipped.d.ts +30 -0
  89. package/dist/app/cli/shipped.js +47 -0
  90. package/dist/app/cli/skeleton.d.ts +38 -0
  91. package/dist/app/cli/skeleton.js +161 -0
  92. package/dist/app/cli/skills.d.ts +59 -0
  93. package/dist/app/cli/skills.js +199 -0
  94. package/dist/app/cli/themes.d.ts +52 -0
  95. package/dist/app/cli/themes.js +148 -0
  96. package/dist/app/cli/tray-icons.d.ts +11 -0
  97. package/dist/app/cli/tray-icons.js +87 -0
  98. package/dist/app/cli/tray-ids.d.ts +6 -0
  99. package/dist/app/cli/tray-ids.js +6 -0
  100. package/dist/app/cli/tray-mac.d.ts +8 -0
  101. package/dist/app/cli/tray-mac.js +140 -0
  102. package/dist/app/cli/tray-run.d.ts +1 -0
  103. package/dist/app/cli/tray-run.js +33 -0
  104. package/dist/app/cli/tray-windows.d.ts +5 -0
  105. package/dist/app/cli/tray-windows.js +166 -0
  106. package/dist/app/cli/tray.d.ts +205 -0
  107. package/dist/app/cli/tray.js +618 -0
  108. package/dist/{cli → app/cli}/tutors.d.ts +15 -26
  109. package/dist/{cli → app/cli}/tutors.js +86 -110
  110. package/dist/app/cli/usage.d.ts +2 -0
  111. package/dist/app/cli/usage.js +35 -0
  112. package/dist/app/dictation/recognize.d.ts +18 -0
  113. package/dist/app/dictation/recognize.js +6 -0
  114. package/dist/app/dictation/route.d.ts +52 -0
  115. package/dist/app/dictation/route.js +511 -0
  116. package/dist/app/diff.d.ts +11 -0
  117. package/dist/app/diff.js +71 -0
  118. package/dist/app/http/access.d.ts +62 -0
  119. package/dist/app/http/access.js +180 -0
  120. package/dist/app/http/app.d.ts +241 -0
  121. package/dist/app/http/app.js +1159 -0
  122. package/dist/app/http/avatars.d.ts +17 -0
  123. package/dist/app/http/avatars.js +35 -0
  124. package/dist/app/http/dev-activities.d.ts +115 -0
  125. package/dist/app/http/dev-activities.js +193 -0
  126. package/dist/app/http/dev-overview.d.ts +108 -0
  127. package/dist/app/http/dev-overview.js +209 -0
  128. package/dist/app/http/dev-tutor-files.d.ts +80 -0
  129. package/dist/app/http/dev-tutor-files.js +151 -0
  130. package/dist/app/http/parent-home.d.ts +51 -0
  131. package/dist/app/http/parent-home.js +266 -0
  132. package/dist/app/http/parent-look.d.ts +2 -0
  133. package/dist/app/http/parent-look.js +151 -0
  134. package/dist/app/http/range.d.ts +9 -0
  135. package/dist/app/http/range.js +19 -0
  136. package/dist/app/http/raw-view.d.ts +117 -0
  137. package/dist/app/http/raw-view.js +149 -0
  138. package/dist/app/http/send-file.d.ts +7 -0
  139. package/dist/app/http/send-file.js +29 -0
  140. package/dist/{server → app/http}/stage.d.ts +9 -0
  141. package/dist/{server → app/http}/stage.js +34 -6
  142. package/dist/app/http/theme.d.ts +13 -0
  143. package/dist/app/http/theme.js +41 -0
  144. package/dist/app/http/voice-preview.d.ts +4 -0
  145. package/dist/app/http/voice-preview.js +34 -0
  146. package/dist/app/machine/bailian.d.ts +26 -0
  147. package/dist/app/machine/bailian.js +87 -0
  148. package/dist/app/mock/mock-live.d.ts +16 -0
  149. package/dist/app/mock/mock-live.js +140 -0
  150. package/dist/{server → app/mock}/mock.d.ts +38 -5
  151. package/dist/app/mock/mock.js +1125 -0
  152. package/dist/app/replay.d.ts +94 -0
  153. package/dist/app/replay.js +170 -0
  154. package/dist/app/skills/analyze-doc.d.ts +3 -0
  155. package/dist/app/skills/analyze-doc.js +47 -0
  156. package/dist/app/skills/home-doc.d.ts +5 -0
  157. package/dist/app/skills/home-doc.js +112 -0
  158. package/dist/app/skills/tune-doc.d.ts +3 -0
  159. package/dist/app/skills/tune-doc.js +80 -0
  160. package/dist/app/talk/list.d.ts +11 -0
  161. package/dist/app/talk/list.js +9 -0
  162. package/dist/app/talk/route.d.ts +16 -0
  163. package/dist/app/talk/route.js +142 -0
  164. package/dist/app/workspace.d.ts +63 -0
  165. package/dist/{cli → app}/workspace.js +100 -52
  166. package/dist/app/ws/route.d.ts +31 -0
  167. package/dist/app/ws/route.js +33 -0
  168. package/dist/app/ws/ws.d.ts +31 -0
  169. package/dist/app/ws/ws.js +169 -0
  170. package/dist/board/canvas-chat.d.ts +97 -0
  171. package/dist/board/canvas-chat.js +175 -0
  172. package/dist/board/card-guards.d.ts +15 -0
  173. package/dist/board/card-guards.js +38 -0
  174. package/dist/board/cards/canvas.d.ts +41 -0
  175. package/dist/board/cards/canvas.js +83 -0
  176. package/dist/{cards → board/cards}/choice.js +0 -12
  177. package/dist/{cards → board/cards}/code.js +0 -3
  178. package/dist/board/cards/dictation.d.ts +42 -0
  179. package/dist/board/cards/dictation.js +105 -0
  180. package/dist/board/cards/docs.d.ts +47 -0
  181. package/dist/board/cards/docs.js +152 -0
  182. package/dist/{cards → board/cards}/image.js +1 -10
  183. package/dist/board/cards/index.d.ts +62 -0
  184. package/dist/board/cards/index.js +144 -0
  185. package/dist/{cards → board/cards}/kind.d.ts +10 -4
  186. package/dist/board/cards/kind.js +9 -0
  187. package/dist/board/cards/lecture.d.ts +26 -0
  188. package/dist/board/cards/lecture.js +62 -0
  189. package/dist/board/cards/paint.d.ts +38 -0
  190. package/dist/board/cards/paint.js +85 -0
  191. package/dist/board/cards/photo.d.ts +15 -0
  192. package/dist/board/cards/photo.js +29 -0
  193. package/dist/{cards → board/cards}/read.js +1 -10
  194. package/dist/board/cards/text.d.ts +20 -0
  195. package/dist/board/cards/text.js +59 -0
  196. package/dist/board/cards/tianzige.d.ts +16 -0
  197. package/dist/board/cards/tianzige.js +64 -0
  198. package/dist/board/cards/tutor.d.ts +72 -0
  199. package/dist/board/cards/tutor.js +134 -0
  200. package/dist/board/cards/word.d.ts +20 -0
  201. package/dist/board/cards/word.js +76 -0
  202. package/dist/board/lecture.d.ts +100 -0
  203. package/dist/board/lecture.js +204 -0
  204. package/dist/board/paper.d.ts +20 -0
  205. package/dist/board/paper.js +76 -0
  206. package/dist/board/parse.d.ts +118 -0
  207. package/dist/board/parse.js +324 -0
  208. package/dist/board/presentation.d.ts +289 -0
  209. package/dist/board/presentation.js +613 -0
  210. package/dist/board/sections.d.ts +16 -0
  211. package/dist/board/sections.js +130 -0
  212. package/dist/brain/api-tools.d.ts +8 -0
  213. package/dist/brain/api-tools.js +191 -0
  214. package/dist/brain/api.d.ts +57 -0
  215. package/dist/brain/api.js +394 -0
  216. package/dist/brain/index.d.ts +97 -0
  217. package/dist/brain/index.js +11 -0
  218. package/dist/brain/log.d.ts +5 -0
  219. package/dist/brain/log.js +22 -0
  220. package/dist/brain/runtime.d.ts +30 -0
  221. package/dist/brain/runtime.js +23 -0
  222. package/dist/brain/stream-json.d.ts +16 -0
  223. package/dist/brain/stream-json.js +82 -0
  224. package/dist/brain/stream.d.ts +20 -0
  225. package/dist/brain/stream.js +70 -0
  226. package/dist/brain/transcript.d.ts +45 -0
  227. package/dist/brain/transcript.js +132 -0
  228. package/dist/brain/types.d.ts +99 -0
  229. package/dist/brain/types.js +14 -0
  230. package/dist/chalk/actions.d.ts +37 -0
  231. package/dist/chalk/actions.js +69 -0
  232. package/dist/chalk/bundle.d.ts +26 -0
  233. package/dist/chalk/bundle.js +69 -0
  234. package/dist/chalk/check.d.ts +28 -0
  235. package/dist/chalk/check.js +291 -0
  236. package/dist/chalk/circle.d.ts +64 -0
  237. package/dist/chalk/circle.js +193 -0
  238. package/dist/chalk/clock.d.ts +84 -0
  239. package/dist/chalk/clock.js +84 -0
  240. package/dist/chalk/geometry.d.ts +44 -0
  241. package/dist/chalk/geometry.js +139 -0
  242. package/dist/chalk/glyphs/capitals.d.ts +12 -0
  243. package/dist/chalk/glyphs/capitals.js +264 -0
  244. package/dist/chalk/glyphs/index.d.ts +21 -0
  245. package/dist/chalk/glyphs/index.js +18 -0
  246. package/dist/chalk/glyphs/letters.d.ts +13 -0
  247. package/dist/chalk/glyphs/letters.js +280 -0
  248. package/dist/chalk/glyphs/metrics.d.ts +33 -0
  249. package/dist/chalk/glyphs/metrics.js +28 -0
  250. package/dist/chalk/glyphs/registry.d.ts +7 -0
  251. package/dist/chalk/glyphs/registry.js +8 -0
  252. package/dist/chalk/glyphs/sample.d.ts +32 -0
  253. package/dist/chalk/glyphs/sample.js +102 -0
  254. package/dist/chalk/glyphs/skeleton.d.ts +64 -0
  255. package/dist/chalk/glyphs/skeleton.js +126 -0
  256. package/dist/chalk/glyphs/types.d.ts +58 -0
  257. package/dist/chalk/glyphs/types.js +17 -0
  258. package/dist/chalk/index.d.ts +23 -0
  259. package/dist/chalk/index.js +15 -0
  260. package/dist/chalk/manifest.d.ts +41 -0
  261. package/dist/chalk/manifest.js +6 -0
  262. package/dist/chalk/paint.d.ts +180 -0
  263. package/dist/chalk/paint.js +210 -0
  264. package/dist/chalk/pointer.d.ts +8 -0
  265. package/dist/chalk/pointer.js +21 -0
  266. package/dist/chalk/prepare.d.ts +11 -0
  267. package/dist/chalk/prepare.js +15 -0
  268. package/dist/chalk/scene-schema.d.ts +199 -0
  269. package/dist/chalk/scene-schema.js +91 -0
  270. package/dist/chalk/seed.d.ts +3 -0
  271. package/dist/chalk/seed.js +10 -0
  272. package/dist/chalk/text-metrics.d.ts +8 -0
  273. package/dist/chalk/text-metrics.js +156 -0
  274. package/dist/chalk/timeline.d.ts +47 -0
  275. package/dist/chalk/timeline.js +84 -0
  276. package/dist/chalk/types.d.ts +150 -0
  277. package/dist/chalk/types.js +8 -0
  278. package/dist/lib/index.d.ts +14 -12
  279. package/dist/lib/index.js +14 -12
  280. package/dist/media/draw.d.ts +23 -0
  281. package/dist/media/draw.js +44 -0
  282. package/dist/media/mp3.d.ts +6 -0
  283. package/dist/media/mp3.js +58 -0
  284. package/dist/media/mp4.d.ts +1 -0
  285. package/dist/media/mp4.js +58 -0
  286. package/dist/media/tts-voices.d.ts +18 -0
  287. package/dist/media/tts-voices.js +606 -0
  288. package/dist/media/tts.d.ts +56 -0
  289. package/dist/media/tts.js +174 -0
  290. package/dist/media/vision.d.ts +25 -0
  291. package/dist/media/vision.js +71 -0
  292. package/dist/memory/commit.d.ts +67 -0
  293. package/dist/memory/commit.js +130 -0
  294. package/dist/memory/context.d.ts +86 -0
  295. package/dist/memory/context.js +97 -0
  296. package/dist/memory/diary.d.ts +84 -0
  297. package/dist/memory/diary.js +183 -0
  298. package/dist/memory/grade.d.ts +2 -0
  299. package/dist/memory/grade.js +7 -0
  300. package/dist/{lib → memory}/plan.d.ts +1 -1
  301. package/dist/{lib → memory}/plan.js +1 -1
  302. package/dist/memory/proposals.d.ts +11 -0
  303. package/dist/memory/proposals.js +43 -0
  304. package/dist/memory/retrieval.d.ts +44 -0
  305. package/dist/memory/retrieval.js +157 -0
  306. package/dist/{lib → memory}/timetable.d.ts +0 -3
  307. package/dist/{lib → memory}/timetable.js +0 -11
  308. package/dist/memory/vault-notes.d.ts +165 -0
  309. package/dist/memory/vault-notes.js +359 -0
  310. package/dist/memory/vault.d.ts +70 -0
  311. package/dist/memory/vault.js +169 -0
  312. package/dist/realtime/bailian.d.ts +120 -0
  313. package/dist/realtime/bailian.js +289 -0
  314. package/dist/realtime/cues.d.ts +51 -0
  315. package/dist/realtime/cues.js +94 -0
  316. package/dist/realtime/listen.d.ts +32 -0
  317. package/dist/realtime/listen.js +53 -0
  318. package/dist/realtime/preview.d.ts +23 -0
  319. package/dist/realtime/preview.js +38 -0
  320. package/dist/realtime/prompt.d.ts +8 -0
  321. package/dist/realtime/prompt.js +13 -0
  322. package/dist/realtime/voices.d.ts +21 -0
  323. package/dist/realtime/voices.js +71 -0
  324. package/dist/runtime/activities.d.ts +29 -0
  325. package/dist/runtime/activities.js +72 -0
  326. package/dist/runtime/activity-state.d.ts +22 -0
  327. package/dist/runtime/activity-state.js +83 -0
  328. package/dist/runtime/activity.d.ts +63 -0
  329. package/dist/runtime/activity.js +428 -0
  330. package/dist/runtime/agent-file.d.ts +24 -0
  331. package/dist/runtime/agent-file.js +59 -0
  332. package/dist/runtime/auto-bookkeep.d.ts +30 -0
  333. package/dist/runtime/auto-bookkeep.js +84 -0
  334. package/dist/{lib → runtime/context}/context-pack.d.ts +3 -3
  335. package/dist/runtime/context/context-pack.js +182 -0
  336. package/dist/runtime/context/thread-digest.d.ts +4 -0
  337. package/dist/runtime/context/thread-digest.js +35 -0
  338. package/dist/runtime/context/tutor-rules.d.ts +25 -0
  339. package/dist/runtime/context/tutor-rules.js +47 -0
  340. package/dist/runtime/delivery/delivery.d.ts +94 -0
  341. package/dist/runtime/delivery/delivery.js +145 -0
  342. package/dist/runtime/delivery/playback.d.ts +25 -0
  343. package/dist/runtime/delivery/playback.js +29 -0
  344. package/dist/runtime/delivery/player.d.ts +145 -0
  345. package/dist/runtime/delivery/player.js +221 -0
  346. package/dist/runtime/delivery/queue.d.ts +89 -0
  347. package/dist/runtime/delivery/queue.js +59 -0
  348. package/dist/runtime/home/edit.d.ts +39 -0
  349. package/dist/runtime/home/edit.js +132 -0
  350. package/dist/runtime/home/home.d.ts +191 -0
  351. package/dist/runtime/home/home.js +318 -0
  352. package/dist/runtime/home/store.d.ts +142 -0
  353. package/dist/runtime/home/store.js +455 -0
  354. package/dist/runtime/journal/conversation.d.ts +46 -0
  355. package/dist/runtime/journal/conversation.js +89 -0
  356. package/dist/runtime/journal/events.d.ts +27 -0
  357. package/dist/runtime/journal/events.js +136 -0
  358. package/dist/runtime/journal/kid-log.d.ts +105 -0
  359. package/dist/runtime/journal/kid-log.js +133 -0
  360. package/dist/runtime/journal/ledger.d.ts +17 -0
  361. package/dist/{lib → runtime/journal}/ledger.js +7 -40
  362. package/dist/runtime/journal/mix.d.ts +42 -0
  363. package/dist/runtime/journal/mix.js +129 -0
  364. package/dist/runtime/journal/mouth-index.d.ts +26 -0
  365. package/dist/runtime/journal/mouth-index.js +34 -0
  366. package/dist/runtime/journal/mouth.d.ts +54 -0
  367. package/dist/runtime/journal/mouth.js +102 -0
  368. package/dist/runtime/journal/recorder.d.ts +91 -0
  369. package/dist/runtime/journal/recorder.js +148 -0
  370. package/dist/runtime/journal/store.d.ts +123 -0
  371. package/dist/runtime/journal/store.js +316 -0
  372. package/dist/runtime/kid-input.d.ts +16 -0
  373. package/dist/runtime/kid-input.js +194 -0
  374. package/dist/runtime/kid-view.d.ts +124 -0
  375. package/dist/runtime/kid-view.js +157 -0
  376. package/dist/runtime/lecture.d.ts +86 -0
  377. package/dist/runtime/lecture.js +237 -0
  378. package/dist/runtime/live/call.d.ts +231 -0
  379. package/dist/runtime/live/call.js +1244 -0
  380. package/dist/runtime/live/turns.d.ts +48 -0
  381. package/dist/runtime/live/turns.js +102 -0
  382. package/dist/runtime/runner.d.ts +243 -0
  383. package/dist/runtime/runner.js +777 -0
  384. package/dist/runtime/talk-run.d.ts +21 -0
  385. package/dist/runtime/talk-run.js +34 -0
  386. package/dist/scenes/dictation/match.d.ts +57 -0
  387. package/dist/scenes/dictation/match.js +255 -0
  388. package/dist/scenes/dictation/recognize.d.ts +86 -0
  389. package/dist/scenes/dictation/recognize.js +163 -0
  390. package/dist/scenes/dictation/store.d.ts +112 -0
  391. package/dist/scenes/dictation/store.js +99 -0
  392. package/dist/scenes/look.d.ts +26 -0
  393. package/dist/scenes/look.js +1 -0
  394. package/dist/scenes/paint/painter.d.ts +84 -0
  395. package/dist/scenes/paint/painter.js +171 -0
  396. package/dist/scenes/paint/prompt.d.ts +23 -0
  397. package/dist/scenes/paint/prompt.js +36 -0
  398. package/dist/scenes/talk/en-words.d.ts +8 -0
  399. package/dist/scenes/talk/en-words.js +44 -0
  400. package/dist/scenes/talk/list.d.ts +44 -0
  401. package/dist/scenes/talk/list.js +88 -0
  402. package/dist/scenes/talk/store.d.ts +27 -0
  403. package/dist/scenes/talk/store.js +61 -0
  404. package/dist/scenes/talk/warmup.d.ts +16 -0
  405. package/dist/scenes/talk/warmup.js +39 -0
  406. package/dist/schema/activity.d.ts +149 -0
  407. package/dist/schema/activity.js +113 -0
  408. package/dist/schema/board.d.ts +143 -2
  409. package/dist/schema/board.js +15 -3
  410. package/dist/schema/config.d.ts +339 -103
  411. package/dist/schema/config.js +269 -84
  412. package/dist/schema/context-pack.d.ts +76 -14
  413. package/dist/schema/context-pack.js +91 -10
  414. package/dist/{lib/conversation.d.ts → schema/conversation-files.d.ts} +11 -33
  415. package/dist/schema/conversation-files.js +26 -0
  416. package/dist/schema/conversation.d.ts +391 -49
  417. package/dist/schema/conversation.js +135 -19
  418. package/dist/schema/events.d.ts +138 -0
  419. package/dist/schema/events.js +1 -0
  420. package/dist/schema/home.d.ts +56 -0
  421. package/dist/schema/home.js +35 -0
  422. package/dist/schema/index.d.ts +14 -3
  423. package/dist/schema/index.js +14 -3
  424. package/dist/schema/kid-device.d.ts +20 -0
  425. package/dist/schema/kid-device.js +32 -0
  426. package/dist/schema/ledger.d.ts +8 -63
  427. package/dist/schema/ledger.js +7 -31
  428. package/dist/schema/memory.d.ts +73 -0
  429. package/dist/schema/memory.js +47 -0
  430. package/dist/schema/plan.d.ts +2 -2
  431. package/dist/schema/plan.js +2 -2
  432. package/dist/schema/sections.d.ts +32 -25
  433. package/dist/schema/sections.js +21 -22
  434. package/dist/schema/theme.d.ts +25 -0
  435. package/dist/schema/theme.js +26 -0
  436. package/dist/schema/timetable.d.ts +2 -2
  437. package/dist/schema/timetable.js +2 -2
  438. package/dist/schema/workspace.d.ts +68 -0
  439. package/dist/schema/workspace.js +37 -0
  440. package/dist/shared/default-port.d.ts +2 -0
  441. package/dist/shared/default-port.js +2 -0
  442. package/dist/shared/errors.d.ts +8 -0
  443. package/dist/shared/errors.js +13 -0
  444. package/dist/shared/home.d.ts +2 -0
  445. package/dist/shared/home.js +16 -0
  446. package/dist/shared/human-notes.d.ts +5 -0
  447. package/dist/shared/human-notes.js +7 -0
  448. package/dist/shared/qianwen.d.ts +54 -0
  449. package/dist/shared/qianwen.js +113 -0
  450. package/dist/shared/site-url.d.ts +2 -0
  451. package/dist/shared/site-url.js +5 -0
  452. package/dist/shared/time.d.ts +9 -0
  453. package/dist/shared/time.js +22 -0
  454. package/dist/shared/tokens.d.ts +18 -0
  455. package/dist/shared/tokens.js +11 -0
  456. package/dist/shared/wav.d.ts +10 -0
  457. package/dist/shared/wav.js +50 -0
  458. package/dist/stage/chunk-226TNLQA.js +129 -0
  459. package/dist/stage/chunk-24LGQEKE.js +1 -0
  460. package/dist/stage/chunk-25XV6UY3.js +10 -0
  461. package/dist/stage/chunk-2AZI3NHJ.js +1 -0
  462. package/dist/stage/chunk-2BQZTTBE.js +1 -0
  463. package/dist/stage/chunk-2M7CGY3Y.js +11 -0
  464. package/dist/stage/chunk-2VR4WFQ7.js +10 -0
  465. package/dist/stage/chunk-2ZYXBUWG.js +9 -0
  466. package/dist/stage/chunk-32LAWMGY.js +1 -0
  467. package/dist/stage/chunk-3LEMTSOO.js +11 -0
  468. package/dist/stage/chunk-3QCKGZYE.js +32 -0
  469. package/dist/stage/chunk-44P66WFA.js +1 -0
  470. package/dist/stage/chunk-4AM6FRR6.js +7 -0
  471. package/dist/stage/chunk-4QDE4SUK.js +1 -0
  472. package/dist/stage/chunk-4QESHV3U.js +1 -0
  473. package/dist/stage/chunk-4SG5QPHB.js +2 -0
  474. package/dist/stage/chunk-4T4UVCOC.js +1 -0
  475. package/dist/stage/chunk-4WUEPPG3.js +34 -0
  476. package/dist/stage/chunk-4YCN6UZ5.js +99 -0
  477. package/dist/stage/chunk-5V7ZY2AP.js +1 -0
  478. package/dist/stage/chunk-5VS5Y2VJ.js +6 -0
  479. package/dist/stage/chunk-5W4NO2ZD.js +62 -0
  480. package/dist/stage/chunk-65CRNICM.js +1 -0
  481. package/dist/stage/chunk-66MULO7F.js +5 -0
  482. package/dist/stage/chunk-6COFQTBS.js +162 -0
  483. package/dist/stage/chunk-6VZG3M3I.js +8 -0
  484. package/dist/stage/chunk-7HVDH43T.js +1 -0
  485. package/dist/stage/chunk-7JLJN4EZ.js +8 -0
  486. package/dist/stage/chunk-7QDSP4LN.js +1 -0
  487. package/dist/stage/chunk-7R6OQAO3.js +1 -0
  488. package/dist/stage/chunk-7VTTHZKW.js +7 -0
  489. package/dist/stage/chunk-ATHR5KEN.js +10 -0
  490. package/dist/stage/chunk-B6R5LTP2.js +36 -0
  491. package/dist/stage/chunk-BD4WE264.js +1 -0
  492. package/dist/stage/chunk-BONANU47.js +206 -0
  493. package/dist/stage/chunk-BTVW7OFK.js +89 -0
  494. package/dist/stage/chunk-BUTJIDHG.js +8 -0
  495. package/dist/stage/chunk-C2IPYMML.js +84 -0
  496. package/dist/stage/chunk-C54FTPPV.js +9 -0
  497. package/dist/stage/chunk-C6LOUF2Z.js +90 -0
  498. package/dist/stage/chunk-CFF3PILO.js +339 -0
  499. package/dist/stage/chunk-CI2FQ2JY.js +9 -0
  500. package/dist/stage/chunk-CW5O4RV7.js +12 -0
  501. package/dist/stage/chunk-CYABNQYD.js +1 -0
  502. package/dist/stage/chunk-D7FFA4NS.js +15 -0
  503. package/dist/stage/chunk-DUNNXU6Z.js +8 -0
  504. package/dist/stage/chunk-E3E4Q6JF.js +6 -0
  505. package/dist/stage/chunk-EB3U3LH7.js +9 -0
  506. package/dist/stage/chunk-EGSZ736B.js +8 -0
  507. package/dist/stage/chunk-EOBXW5VQ.js +2 -0
  508. package/dist/stage/chunk-ERZC3B7Y.js +11 -0
  509. package/dist/stage/chunk-ESDOOBIH.js +11 -0
  510. package/dist/stage/chunk-EVU4QAL4.js +178 -0
  511. package/dist/stage/chunk-EVVZI2NY.js +39 -0
  512. package/dist/stage/chunk-FBKAZUKD.js +39 -0
  513. package/dist/stage/chunk-FDVKYQJN.js +1 -0
  514. package/dist/stage/chunk-FGPVYHVR.js +5 -0
  515. package/dist/stage/chunk-FHUD4AZC.js +1 -0
  516. package/dist/stage/chunk-FKUJ2DMY.js +96 -0
  517. package/dist/stage/chunk-FNZGVIJV.js +1 -0
  518. package/dist/stage/chunk-GBYSEGYM.js +78 -0
  519. package/dist/stage/chunk-GCO4TDHX.js +1 -0
  520. package/dist/stage/chunk-GKTML2LG.js +10 -0
  521. package/dist/stage/chunk-GMDIHHXQ.js +11 -0
  522. package/dist/stage/chunk-GOUNACI3.js +10 -0
  523. package/dist/stage/chunk-GXAYATPF.js +3 -0
  524. package/dist/stage/chunk-H2K2DDXV.js +8 -0
  525. package/dist/stage/chunk-H3UJI6ZY.js +13 -0
  526. package/dist/stage/chunk-H6PUGCME.js +7 -0
  527. package/dist/stage/chunk-HNBUIMIG.js +1 -0
  528. package/dist/stage/chunk-HRZY2BJQ.js +10 -0
  529. package/dist/stage/chunk-HSPJGALW.js +30 -0
  530. package/dist/stage/chunk-IBYORHIP.js +25 -0
  531. package/dist/stage/chunk-IHF4EWTY.js +1 -0
  532. package/dist/stage/chunk-ISBRPNKI.js +1 -0
  533. package/dist/stage/chunk-IZ3OI3C2.js +2 -0
  534. package/dist/stage/chunk-JEFZAC2R.js +1 -0
  535. package/dist/stage/chunk-JFIGRDPO.js +1 -0
  536. package/dist/stage/chunk-JFVYBOOC.js +9 -0
  537. package/dist/stage/chunk-JGD4TUTQ.js +1 -0
  538. package/dist/stage/chunk-JO4BEHDH.js +4 -0
  539. package/dist/stage/chunk-JOWBS42C.js +1 -0
  540. package/dist/stage/chunk-JP3TM2TG.js +1 -0
  541. package/dist/stage/chunk-JVK2C52O.js +1 -0
  542. package/dist/stage/chunk-K4I76XBX.js +14 -0
  543. package/dist/stage/chunk-KA6CZZ4M.js +1 -0
  544. package/dist/stage/chunk-KESSJ36M.js +1 -0
  545. package/dist/stage/chunk-LKATEVRU.js +1 -0
  546. package/dist/stage/chunk-LS4EJ2EI.js +1 -0
  547. package/dist/stage/chunk-LUKJQC2X.js +70 -0
  548. package/dist/stage/chunk-LWULR3SM.js +1 -0
  549. package/dist/stage/chunk-LWVRFMKX.js +2 -0
  550. package/dist/stage/chunk-LXC4ZBPZ.js +1 -0
  551. package/dist/stage/chunk-M2UP255H.js +1 -0
  552. package/dist/stage/chunk-MAPPXUZQ.js +231 -0
  553. package/dist/stage/chunk-MBMPW7Z5.js +1 -0
  554. package/dist/stage/chunk-MD3HMMTK.js +1 -0
  555. package/dist/stage/chunk-MLPCUIKR.js +17 -0
  556. package/dist/stage/chunk-MNQIRPDQ.js +8 -0
  557. package/dist/stage/chunk-MRG7MJVS.js +1 -0
  558. package/dist/stage/chunk-MU6EXW72.js +10 -0
  559. package/dist/stage/chunk-MVU2X6LU.js +4 -0
  560. package/dist/stage/chunk-N6UA5CZV.js +36 -0
  561. package/dist/stage/chunk-NLZIT2TJ.js +7 -0
  562. package/dist/stage/chunk-NOJR3J7M.js +1 -0
  563. package/dist/stage/chunk-NT7ARDOL.js +1 -0
  564. package/dist/stage/chunk-NWOGMPZH.js +1 -0
  565. package/dist/stage/chunk-NXE4KMG3.js +40 -0
  566. package/dist/stage/chunk-O4YCZXD2.js +257 -0
  567. package/dist/stage/chunk-OAJZ7HLK.js +1 -0
  568. package/dist/stage/chunk-OCFCFASO.js +1 -0
  569. package/dist/stage/chunk-ODGPG5RY.js +7 -0
  570. package/dist/stage/chunk-ODUEA52Q.js +3 -0
  571. package/dist/stage/chunk-OGDJ3FCI.js +1 -0
  572. package/dist/stage/chunk-OLDJ55TT.js +1 -0
  573. package/dist/stage/chunk-OOCL4ATI.js +2 -0
  574. package/dist/stage/chunk-OQEFDUDV.js +1 -0
  575. package/dist/stage/chunk-OQWVEWG7.js +4 -0
  576. package/dist/stage/chunk-OUIX6BGK.js +1 -0
  577. package/dist/stage/chunk-OV7OZYUO.js +7 -0
  578. package/dist/stage/chunk-PFGDY33O.js +1 -0
  579. package/dist/stage/chunk-PFJDUJB3.js +139 -0
  580. package/dist/stage/chunk-PGEW76ER.js +1 -0
  581. package/dist/stage/chunk-PP76TAQX.js +32 -0
  582. package/dist/stage/chunk-PTBOP4OT.js +2 -0
  583. package/dist/stage/chunk-PX2RVHCK.js +1 -0
  584. package/dist/stage/chunk-Q7K3PNAD.js +1 -0
  585. package/dist/stage/chunk-QDDPLZDB.js +1 -0
  586. package/dist/stage/chunk-QLGLZ77F.js +1 -0
  587. package/dist/stage/chunk-QOPFDFHI.js +1 -0
  588. package/dist/stage/chunk-QXT4KAEJ.js +1 -0
  589. package/dist/stage/chunk-R4YVZCIT.js +1 -0
  590. package/dist/stage/chunk-R6P6EHWA.js +62 -0
  591. package/dist/stage/chunk-RCH3OXBI.js +9 -0
  592. package/dist/stage/chunk-RHPE44I2.js +1 -0
  593. package/dist/stage/chunk-RJ2R4FVC.js +1 -0
  594. package/dist/stage/chunk-RJH2YVTD.js +1 -0
  595. package/dist/stage/chunk-RLWWW5OB.js +6 -0
  596. package/dist/stage/chunk-S3WO35Z7.js +120 -0
  597. package/dist/stage/chunk-S7ZGX6MW.js +1 -0
  598. package/dist/stage/chunk-SIAWX27B.js +1 -0
  599. package/dist/stage/chunk-SLG4X622.js +1 -0
  600. package/dist/stage/chunk-SLJRBC77.js +168 -0
  601. package/dist/stage/chunk-SRORWQJZ.js +1 -0
  602. package/dist/stage/chunk-STZTUIIF.js +2 -0
  603. package/dist/stage/chunk-SVQ6MWNV.js +9 -0
  604. package/dist/stage/chunk-TL3HLL2S.js +132 -0
  605. package/dist/stage/chunk-U3DOE6SF.js +24 -0
  606. package/dist/stage/chunk-UABQIZKW.js +6 -0
  607. package/dist/stage/chunk-UDK3R764.js +1 -0
  608. package/dist/stage/chunk-UFF4E54B.js +41 -0
  609. package/dist/stage/chunk-UFP5Q4AY.js +1 -0
  610. package/dist/stage/chunk-UMH2TSW2.js +72 -0
  611. package/dist/stage/chunk-UTASVNF5.js +10 -0
  612. package/dist/stage/chunk-UW7ML5ML.js +88 -0
  613. package/dist/stage/chunk-V3J7F6OP.js +1 -0
  614. package/dist/stage/chunk-VEHP5B5Q.js +5 -0
  615. package/dist/stage/chunk-VRXWB733.js +9 -0
  616. package/dist/stage/chunk-VVDHBBS5.js +5 -0
  617. package/dist/stage/chunk-VYFOH6FU.js +106 -0
  618. package/dist/stage/chunk-W3VZTLQS.js +3 -0
  619. package/dist/stage/chunk-W7WNRWTZ.js +8 -0
  620. package/dist/stage/chunk-WHUCV53C.js +1 -0
  621. package/dist/stage/chunk-WULMYHIF.js +1 -0
  622. package/dist/stage/chunk-X54EX7AW.js +9 -0
  623. package/dist/stage/chunk-X565ISZM.js +1 -0
  624. package/dist/stage/chunk-XGZMDECB.js +1 -0
  625. package/dist/stage/chunk-XHONC4RF.js +172 -0
  626. package/dist/stage/chunk-XIK4XQ6E.js +24 -0
  627. package/dist/stage/chunk-XJQQWFTE.js +1 -0
  628. package/dist/stage/chunk-XM4WOU3I.js +13 -0
  629. package/dist/stage/chunk-XM7Y5HP5.js +38 -0
  630. package/dist/stage/chunk-XNYYRGD5.js +292 -0
  631. package/dist/stage/chunk-XOYVR3SV.js +1 -0
  632. package/dist/stage/chunk-XQIW5HCE.js +1 -0
  633. package/dist/stage/chunk-YEWL7FUW.js +8 -0
  634. package/dist/stage/chunk-YI55PY3V.js +1 -0
  635. package/dist/stage/chunk-YM63HI6W.js +1 -0
  636. package/dist/stage/chunk-YNLGLU4P.js +9 -0
  637. package/dist/stage/chunk-YTNMNOWP.js +1 -0
  638. package/dist/stage/chunk-YV62XKTC.js +1 -0
  639. package/dist/stage/chunk-YVBA3QW6.js +1 -0
  640. package/dist/stage/chunk-Z2SY2HOC.js +1 -0
  641. package/dist/stage/chunk-ZBTCQEBK.js +10 -0
  642. package/dist/stage/chunk-ZCUFN74D.js +1 -0
  643. package/dist/stage/chunk-ZHOULXEJ.js +11 -0
  644. package/dist/stage/chunk-ZTRZIET2.js +1 -0
  645. package/dist/stage/index.html +1 -0
  646. package/dist/stage/stage.css +1 -1
  647. package/dist/stage/stage.js +1 -4383
  648. package/dist/ui/dev/dev-page.d.ts +1 -0
  649. package/dist/ui/dev/dev-page.js +2021 -0
  650. package/dist/ui/dev/dev-theme.d.ts +6 -0
  651. package/dist/ui/dev/dev-theme.js +67 -0
  652. package/dist/ui/dev/voice-gallery-page.d.ts +1 -0
  653. package/dist/ui/dev/voice-gallery-page.js +121 -0
  654. package/dist/ui/dev/voice-scenes.d.ts +21 -0
  655. package/dist/ui/dev/voice-scenes.js +30 -0
  656. package/dist/ui/dictation/en-box.d.ts +2 -0
  657. package/dist/ui/dictation/en-box.js +86 -0
  658. package/dist/ui/dictation/en-page.d.ts +1 -0
  659. package/dist/ui/dictation/en-page.js +484 -0
  660. package/dist/ui/dictation/page.d.ts +1 -0
  661. package/dist/ui/dictation/page.js +1084 -0
  662. package/dist/ui/dictation/parent-page.d.ts +1 -0
  663. package/dist/ui/dictation/parent-page.js +234 -0
  664. package/dist/ui/dictation/reel-mode.d.ts +1 -0
  665. package/dist/ui/dictation/reel-mode.js +87 -0
  666. package/dist/ui/dictation/reel-page.d.ts +1 -0
  667. package/dist/ui/dictation/reel-page.js +62 -0
  668. package/dist/ui/dictation/reel.d.ts +163 -0
  669. package/dist/ui/dictation/reel.js +436 -0
  670. package/dist/ui/dictation/ui.d.ts +44 -0
  671. package/dist/ui/dictation/ui.js +80 -0
  672. package/dist/ui/dictation/unlock.d.ts +7 -0
  673. package/dist/ui/dictation/unlock.js +16 -0
  674. package/dist/ui/kid/audio-client.d.ts +11 -0
  675. package/dist/ui/kid/audio-client.js +74 -0
  676. package/dist/ui/kid/board-mark-art.d.ts +37 -0
  677. package/dist/ui/kid/board-mark-art.js +5 -0
  678. package/dist/ui/kid/board-mark.d.ts +24 -0
  679. package/dist/ui/kid/board-mark.js +58 -0
  680. package/dist/ui/kid/home-tiles.d.ts +14 -0
  681. package/dist/ui/kid/home-tiles.js +44 -0
  682. package/dist/ui/kid/kid-log.d.ts +15 -0
  683. package/dist/ui/kid/kid-log.js +87 -0
  684. package/dist/ui/kid/kid-nav.d.ts +11 -0
  685. package/dist/ui/kid/kid-nav.js +22 -0
  686. package/dist/ui/kid/kid-page.d.ts +9 -0
  687. package/dist/ui/kid/kid-page.js +3684 -0
  688. package/dist/ui/kid/letters.d.ts +26 -0
  689. package/dist/ui/kid/letters.js +51 -0
  690. package/dist/ui/kid/photo-edit.d.ts +83 -0
  691. package/dist/ui/kid/photo-edit.js +106 -0
  692. package/dist/ui/kid/photo-ui.d.ts +23 -0
  693. package/dist/ui/kid/photo-ui.js +60 -0
  694. package/dist/ui/kid/reel.d.ts +419 -0
  695. package/dist/ui/kid/reel.js +648 -0
  696. package/dist/ui/kid/tianzige.d.ts +8 -0
  697. package/dist/ui/kid/tianzige.js +45 -0
  698. package/dist/ui/kid/tutor-face.d.ts +35 -0
  699. package/dist/ui/kid/tutor-face.js +84 -0
  700. package/dist/ui/kid/voice-ui.d.ts +70 -0
  701. package/dist/ui/kid/voice-ui.js +316 -0
  702. package/dist/ui/kid/voice-view.d.ts +71 -0
  703. package/dist/ui/kid/voice-view.js +75 -0
  704. package/dist/ui/kid/word-draw.d.ts +2 -0
  705. package/dist/ui/kid/word-draw.js +107 -0
  706. package/dist/ui/kid/word-emoji.d.ts +10 -0
  707. package/dist/ui/kid/word-emoji.js +68 -0
  708. package/dist/ui/kid/word-layout.d.ts +25 -0
  709. package/dist/ui/kid/word-layout.js +29 -0
  710. package/dist/ui/parent/parent-home-page.d.ts +1 -0
  711. package/dist/ui/parent/parent-home-page.js +722 -0
  712. package/dist/ui/parent/parent-page.d.ts +2 -0
  713. package/dist/ui/parent/parent-page.js +511 -0
  714. package/dist/ui/parent/parent-settings-page.d.ts +1 -0
  715. package/dist/ui/parent/parent-settings-page.js +133 -0
  716. package/dist/ui/parent/qr-page.d.ts +8 -0
  717. package/dist/ui/parent/qr-page.js +66 -0
  718. package/dist/ui/shared/brand.d.ts +38 -0
  719. package/dist/ui/shared/brand.js +53 -0
  720. package/dist/ui/shared/favicon.d.ts +12 -0
  721. package/dist/ui/shared/favicon.js +96 -0
  722. package/dist/ui/shared/icon.d.ts +9 -0
  723. package/dist/ui/shared/icon.js +35 -0
  724. package/dist/ui/shared/inline-lib.d.ts +1 -0
  725. package/dist/ui/shared/inline-lib.js +28 -0
  726. package/dist/ui/shared/logo.d.ts +31 -0
  727. package/dist/ui/shared/logo.js +43 -0
  728. package/dist/ui/shared/page-dom.d.ts +12 -0
  729. package/dist/ui/shared/page-dom.js +36 -0
  730. package/dist/ui/shared/png.d.ts +1 -0
  731. package/dist/ui/shared/png.js +45 -0
  732. package/dist/ui/shared/qr-svg.d.ts +3 -0
  733. package/dist/ui/shared/qr-svg.js +32 -0
  734. package/dist/ui/shared/qr.d.ts +14 -0
  735. package/dist/ui/shared/qr.js +281 -0
  736. package/dist/ui/shared/reel-dock.d.ts +22 -0
  737. package/dist/ui/shared/reel-dock.js +365 -0
  738. package/dist/ui/shared/tutor-color.d.ts +15 -0
  739. package/dist/ui/shared/tutor-color.js +47 -0
  740. package/dist/ui/talk/page.d.ts +6 -0
  741. package/dist/ui/talk/page.js +294 -0
  742. package/grades/grade-2/README.md +11 -0
  743. package/grades/grade-2/VALIDATION.md +41 -0
  744. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273.md +157 -0
  745. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273./344/276/213/345/255/220.md +78 -0
  746. package/grades/grade-2/agents/chinese-tutor/activities//344/276/213/345/255/220/345/233/276//345/200/237/344/274/236.jpg +0 -0
  747. package/grades/grade-2/agents/chinese-tutor/activities//344/276/213/345/255/220/345/233/276//345/260/217/347/214/264/346/221/230/346/241/203.jpg +0 -0
  748. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235.md +64 -0
  749. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235./344/276/213/345/255/220.md +31 -0
  750. package/grades/grade-2/agents/chinese-tutor/activities//345/220/254/345/206/231.md +48 -0
  751. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +79 -0
  752. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  753. package/grades/grade-2/agents/chinese-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  754. package/grades/grade-2/agents/chinese-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232.md +81 -0
  755. package/grades/grade-2/agents/chinese-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232./344/276/213/345/255/220.md +35 -0
  756. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235.md +94 -0
  757. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235./344/276/213/345/255/220.md +63 -0
  758. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +82 -0
  759. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  760. package/grades/grade-2/agents/chinese-tutor.md +59 -0
  761. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276.md +149 -0
  762. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276./344/276/213/345/255/220.md +13 -0
  763. package/grades/grade-2/agents/english-tutor/activities//345/220/254/345/206/231.md +47 -0
  764. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +78 -0
  765. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  766. package/grades/grade-2/agents/english-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  767. package/grades/grade-2/agents/english-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232.md +80 -0
  768. package/grades/grade-2/agents/english-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232./344/276/213/345/255/220.md +35 -0
  769. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +86 -0
  770. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  771. package/grades/grade-2/agents/english-tutor.md +57 -0
  772. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +78 -0
  773. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  774. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202.md +56 -0
  775. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202./344/276/213/345/255/220.md +52 -0
  776. package/grades/grade-2/agents/math-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232.md +80 -0
  777. package/grades/grade-2/agents/math-tutor/activities//346/243/200/346/237/245/344/275/234/344/270/232./344/276/213/345/255/220.md +35 -0
  778. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +81 -0
  779. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  780. package/grades/grade-2/agents/math-tutor.md +51 -0
  781. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/index.json +44 -0
  782. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-1.mp3 +0 -0
  783. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-2.mp3 +0 -0
  784. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-3.mp3 +0 -0
  785. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-4.mp3 +0 -0
  786. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-5.mp3 +0 -0
  787. package/grades/grade-2/examples/2026-10-27-pingjunfen/bake.json +1 -0
  788. package/grades/grade-2/examples/2026-10-27-pingjunfen/manifest.json +63 -0
  789. package/grades/grade-2/examples/2026-10-27-pingjunfen/scene.json +247 -0
  790. package/grades/grade-2/examples/2026-10-27-pingjunfen.md +40 -0
  791. package/grades/grade-2/examples/2026-10-27-pingjunfen.ts +26 -0
  792. package/grades/grade-2/examples//345/271/263/345/235/207/345/210/206./344/276/213/345/255/220.md +24 -0
  793. package/grades/grade-2/examples//346/225/260/345/255/246/345/271/263/345/235/207/345/210/206.md +42 -0
  794. package/grades/grade-2/validation/2026-10-27.json +4410 -0
  795. package/package.json +27 -15
  796. package/skills/chalk-cli/SKILL.md +62 -0
  797. package/skills/chalk-scene/SKILL.md +91 -0
  798. package/skills/chalk-teaching/SKILL.md +82 -0
  799. package/skills/chalk-teaching/models//344/272/244/351/224/231/346/225/260/345/210/227/345/210/206/350/241/214.md +8 -0
  800. package/skills/chalk-teaching/models//345/207/221/345/215/201.md +7 -0
  801. package/skills/chalk-teaching/models//345/221/250/346/234/237/350/247/204/345/276/213.md +6 -0
  802. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/345/242/236/345/207/217.md +6 -0
  803. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/346/257/224/345/244/232/345/260/221-/346/261/202/345/244/247/346/225/260/346/261/202/345/260/217/346/225/260.md +7 -0
  804. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/346/257/224/345/244/232/345/260/221-/346/261/202/345/267/256.md +6 -0
  805. package/skills/chalk-teaching/models//345/260/217/346/243/222/350/277/233/344/275/215/345/212/240.md +7 -0
  806. package/skills/chalk-teaching/models//345/260/217/346/243/222/351/200/200/344/275/215/345/207/217.md +6 -0
  807. package/skills/chalk-teaching/models//346/216/222/351/230/237/347/202/271/351/230/265.md +7 -0
  808. package/skills/chalk-teaching/models//346/227/266/351/227/264/346/225/260/350/275/264.md +6 -0
  809. package/skills/chalk-teaching/models//346/245/274/345/261/202/351/227/264/351/232/224/345/233/276.md +7 -0
  810. package/skills/chalk-teaching/models//347/240/264/345/215/201.md +7 -0
  811. package/skills/chalk-teaching/models//347/253/226/345/274/217/351/200/200/344/275/215.md +6 -0
  812. package/skills/chalk-teaching/models//347/272/277/346/256/265/345/233/276.md +7 -0
  813. package/skills/chalk-teaching/models-index.md +24 -0
  814. package/skills/chalk-teaching/references//350/256/262/350/247/243/346/250/241/346/235/277/344/270/211/346/241/243.md +32 -0
  815. package/skills/chalk-teaching/references//350/257/264/346/230/216/346/226/207/344/273/266.md +102 -0
  816. package/skills/chalk-verify/SKILL.md +57 -0
  817. package/skills/chalk-verify/references//350/257/204/345/210/244/346/240/207/345/207/206.md +69 -0
  818. package/skills/cotutor-analyze/SKILL.md +106 -0
  819. package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +31 -0
  820. package/skills/cotutor-board/SKILL.md +373 -0
  821. package/skills/cotutor-board/references/README.md +38 -0
  822. package/skills/cotutor-board/references/canvas.md +68 -0
  823. package/skills/cotutor-board/references/choice.md +55 -0
  824. package/skills/cotutor-board/references/code.md +46 -0
  825. package/skills/cotutor-board/references/image.md +52 -0
  826. package/skills/cotutor-board/references/lecture.md +69 -0
  827. package/skills/cotutor-board/references/paint.md +77 -0
  828. package/skills/cotutor-board/references/photo.md +61 -0
  829. package/skills/cotutor-board/references/read.md +51 -0
  830. package/skills/cotutor-board/references/text.md +69 -0
  831. package/skills/cotutor-board/references/tianzige.md +78 -0
  832. package/skills/cotutor-board/references/word.md +91 -0
  833. package/skills/cotutor-home/SKILL.md +170 -0
  834. package/skills/cotutor-home/references/dictation.md +97 -0
  835. package/skills/cotutor-home/references/tutor.md +149 -0
  836. package/skills/cotutor-home/references//345/221/275/344/273/244.md +21 -0
  837. package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +143 -0
  838. package/skills/cotutor-tune/SKILL.md +147 -0
  839. package/skills/cotutor-tune/references//345/255/227/346/256/265.md +53 -0
  840. package/skills/cotutor-tutor/SKILL.md +253 -0
  841. package/skills/cotutor-tutor/references//344/270/212/344/270/213/346/226/207/345/214/205.md +78 -0
  842. package/themes/default/kid.css +86 -0
  843. package/themes/default/theme.json +26 -0
  844. package/agents/chinese-tutor.md +0 -67
  845. package/agents/homework-tutor.md +0 -17
  846. package/agents/math-tutor.md +0 -68
  847. package/agents/planner.md +0 -18
  848. package/agents/reading-tutor.md +0 -65
  849. package/agents/scene-maker.md +0 -41
  850. package/dist/cards/canvas.d.ts +0 -22
  851. package/dist/cards/canvas.js +0 -65
  852. package/dist/cards/fill.d.ts +0 -14
  853. package/dist/cards/fill.js +0 -64
  854. package/dist/cards/index.d.ts +0 -48
  855. package/dist/cards/index.js +0 -115
  856. package/dist/cards/kind.js +0 -7
  857. package/dist/cards/scene.d.ts +0 -24
  858. package/dist/cards/scene.js +0 -67
  859. package/dist/cards/text.d.ts +0 -18
  860. package/dist/cards/text.js +0 -41
  861. package/dist/cli/cert.d.ts +0 -7
  862. package/dist/cli/cert.js +0 -36
  863. package/dist/cli/doctor.d.ts +0 -22
  864. package/dist/cli/doctor.js +0 -355
  865. package/dist/cli/init.js +0 -116
  866. package/dist/cli/main.js +0 -243
  867. package/dist/cli/serve.d.ts +0 -30
  868. package/dist/cli/serve.js +0 -56
  869. package/dist/cli/skeleton.d.ts +0 -39
  870. package/dist/cli/skeleton.js +0 -184
  871. package/dist/cli/skills.d.ts +0 -40
  872. package/dist/cli/skills.js +0 -170
  873. package/dist/cli/workspace.d.ts +0 -69
  874. package/dist/lib/agent-file.d.ts +0 -10
  875. package/dist/lib/agent-file.js +0 -16
  876. package/dist/lib/board.d.ts +0 -15
  877. package/dist/lib/board.js +0 -107
  878. package/dist/lib/context-pack.js +0 -55
  879. package/dist/lib/conversation.js +0 -88
  880. package/dist/lib/kid-board.d.ts +0 -148
  881. package/dist/lib/kid-board.js +0 -294
  882. package/dist/lib/kid-view.d.ts +0 -63
  883. package/dist/lib/kid-view.js +0 -93
  884. package/dist/lib/ledger.d.ts +0 -29
  885. package/dist/lib/run-plan.d.ts +0 -30
  886. package/dist/lib/run-plan.js +0 -32
  887. package/dist/lib/sections.d.ts +0 -12
  888. package/dist/lib/sections.js +0 -151
  889. package/dist/lib/stream.d.ts +0 -15
  890. package/dist/lib/stream.js +0 -69
  891. package/dist/lib/transcript.d.ts +0 -36
  892. package/dist/lib/transcript.js +0 -95
  893. package/dist/server/app.d.ts +0 -74
  894. package/dist/server/app.js +0 -406
  895. package/dist/server/kid-page.d.ts +0 -1
  896. package/dist/server/kid-page.js +0 -768
  897. package/dist/server/mock.js +0 -403
  898. package/dist/server/parent-page.d.ts +0 -8
  899. package/dist/server/parent-page.js +0 -393
  900. package/dist/server/runner.d.ts +0 -64
  901. package/dist/server/runner.js +0 -277
  902. package/dist/server/scene-props.d.ts +0 -16
  903. package/dist/server/scene-props.js +0 -39
  904. package/dist/server/store.d.ts +0 -43
  905. package/dist/server/store.js +0 -210
  906. package/dist/server/tts.d.ts +0 -51
  907. package/dist/server/tts.js +0 -99
  908. /package/dist/{cli → app/cli}/main.d.ts +0 -0
  909. /package/dist/{cards → board/cards}/choice.d.ts +0 -0
  910. /package/dist/{cards → board/cards}/code.d.ts +0 -0
  911. /package/dist/{cards → board/cards}/image.d.ts +0 -0
  912. /package/dist/{cards → board/cards}/read.d.ts +0 -0
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: chalk-verify
3
+ description: 检验课包(逐笔画出的讲解动画)的质量:keyframe 截图逐张对照讲稿评审,输出通过结论或可执行的问题清单(步 / 元素 id / 期望 vs 实际 / 修复建议)。触发:生成后的独立把关、家长验收前的最后一道、改动后的回归检查、"检查这个场景"。不是:修改场景(评审与修改分离,问题清单交回生成方)、教学正确性裁量(那是家长验收)。
4
+ ---
5
+
6
+ # 检验动画质量
7
+
8
+ 输入:场景 TS 路径(`scenes/<id>.ts`)或已 build 的课包 id;同名说明文件 `scenes/<id>.md`(格式见 chalk-teaching)若在,
9
+ 它每步的「检验」行就是对照物。评审者应是**另一个上下文**(子 agent 或独立进程)——生成方自己加载本 skill 自评不算独立检验。工作区与命令见 chalk-cli。
10
+ 评判清单在本 skill `references/评判标准.md`。
11
+
12
+ ## 流程
13
+
14
+ 1. 输入是 `.ts` 时先 `cotutor chalk check <path> --json`;有 error 直接把 findings
15
+ 整理成问题清单返回,不必截图(层 2–3 的错误截图也救不了)。
16
+
17
+ 2. `cotutor chalk snap <目标> --no-cursor` → `snaps/<id>/`:`step-<n>.png` + `index.json`。
18
+ `--no-cursor` 不画笔尖,帧里只剩笔迹;不加也行,但要知道笔尖停在本步末笔处,不算画面元素。
19
+ index.json(v2)的 shots[] 已把每张图和该步讲稿配好对,**并列出该步新增元素**
20
+ (`added[]`:id / type / strokeColor / backgroundColor / text / bbox)与画板 `board.viewBox`——
21
+ 报问题按 id 说话,数数对着 added 数,越界对着 viewBox 判(bbox 是场景坐标,图像像素 =
22
+ (坐标 − viewBox 原点) × 图宽 / viewBox 宽)。评审按它走,不要自己翻场景源码猜。
23
+ 换过画板的课每张图带自己的 `viewBox`(按它换算);`added` 里的动作(type `erase` / `board`)没有 bbox,
24
+ `erases` 列出它擦掉的元素——这一步的图上它们应该已经不在了。
25
+
26
+ 3. **逐张评审**(step-0 是空板配题面,从它开始),参考 `references/评判标准.md` 的视角:
27
+ - **检验点**(有说明文件时先做):逐步核它的「检验」行——数量、位置、心算;讲稿行与 TS `line` 逐字一致,不一致直接列问题
28
+ - **对应**:画面是否就是该步讲稿所述,有没有多画、少画、提前画;讲稿里的动作词
29
+ (数、指、连、划、圈)画面有没有对应笔迹;口头计数"1、2……"不要求画面出数字
30
+ - **计数**:圈住的、划掉的、添画的对象逐个数,与讲稿和题目里的数字核对;还要核**位置**
31
+ (涂色的是第几个、圈的是不是第 1、3、5 位)——经验上计数与位置是最常见的错误来源。
32
+ 对象多(≥15)时把图局部放大再数,别凭感觉
33
+ - **布局**:文字重叠、越界截断(对着 viewBox)、疏密;圈两端是否擦到相邻对象、被圈对象是否完整在圈内;
34
+ 颜色是否用在讲稿强调处;衍生行(数列分行、竖式)与源行是否同列
35
+ - **板书感**:paper-strict 下效果是否纸上可复现;笔顺是否自然(先主体后标注);
36
+ 强调笔迹应保留到终帧(纸上画了不会消失)
37
+ - **跨帧一致**:同一场景里"捆/圈/框"只用一种画法、措辞一致;对象状态变了旧标签是留是改;
38
+ 分段标注是"每段"还是"累计"要与讲稿口径一致
39
+ - **段落**:作答段像书本答案(算式 / 答 / 结论),与前面草稿段的结论一致——判断项,不拦;草稿段自由,不按此挑毛病
40
+
41
+ 4. **输出报告**:
42
+ - 通过:说明"逐张核对通过",附每步一句话摘要(画了什么、对上哪句讲稿)
43
+ - 有问题:每条尽量给全——**步 n / 元素 id / 期望 vs 实际 / 修复建议**,
44
+ 让生成方(agent 或人)拿到就能改
45
+ 5. 修复后重跑本流程;之后进家长验收。
46
+
47
+ ## 评审经验
48
+
49
+ - 拿不准就列出来标"存疑",让人裁量,不拦流程
50
+ - 说明文件在时先对它的检验点,再看讲稿:它是生成方承诺的清单,比从讲稿反推省事也更准
51
+ - 不要只看终帧:中间步的"讲到哪画到哪"才是产品灵魂(图的价值在生成过程,不在成品)
52
+ - 教学正确性(这道题该不该这么讲)是家长验收的事;本 skill 聚焦"画得对不对";
53
+ 但讲稿或画面有明显数学错误、讲稿与画面口径不一(讲稿"又走了 1 层"画面标"2 层")要指出
54
+ - 默认分工是评审与修改分离(发现问题交回生成方);试跑期这个分工本身也可以调
55
+ - 定格帧不能看出批内笔顺方向(从右起划还是从左起划);要核对方向就看源码顺序或回放,标明是这样看的
56
+ - 第一批真题(2026-08-17,12 题)里检验方抓到生成方自检漏掉的:半截虚线没连到对象、最右侧文字被裁、
57
+ 两种"捆"画法并存、新添对象没区别色——这几类都是"逐帧看单张"看不出来、要跨帧/跨元素比对的
@@ -0,0 +1,69 @@
1
+ # 评判标准
2
+
3
+ chalk-verify 的参考清单(随试跑修订;第一批真题 2026-08-17 后补了不少条)。评审对象:`snaps/<id>/` 的
4
+ keyframe 序列 + index.json 的图↔讲稿对照与每步新增元素清单;同名说明文件 `scenes/<id>.md` 在时,它每步的「检验」行是首要对照物
5
+ (格式见 chalk-teaching `references/说明文件.md`)。一般先过 `cotutor chalk check`,层 2–3 的问题不必进视觉评审。
6
+
7
+ ## 不算问题(渲染事实,先排除)
8
+
9
+ - 每张图底部一行是当步讲稿字幕(左侧蓝点是气口提示,终帧有绿勾);字幕折行会让帧高不同
10
+ - 未加 `--no-cursor` 时,笔尖图标停在本步末笔处,不是画面元素
11
+ - 播放器按整场包围盒等比缩放,前几步画面偏空
12
+ - 行首标签、算式、"辅助标注"(如"爸爸吃了 4 个")讲稿未必逐句提到,不算多画;但**内容元素**(被数的对象、圈、划痕)必须与讲稿对应
13
+
14
+ ## 视角(1–4 拦,5 只判断)
15
+
16
+ ### 1. 对应(画面 ↔ 讲稿)
17
+
18
+ - [ ] 有说明文件:该步「检验」行说的数量 / 位置 / 心算逐条成立;讲稿与 TS `line` 逐字一致
19
+ - [ ] 该步新出现的元素(index.json 的 `added[]`),讲稿都提到了或属辅助标注;讲稿提到的动作,画面都发生了
20
+ - [ ] 讲稿含动作词(数、指、连、划、圈、搬)的步,画面有对应可见笔迹;口头计数"1、2……"不要求画面出数字记号
21
+ - [ ] 没有"提前画"(后面步骤的内容出现在当前帧)——对照上一帧核对新增量
22
+ - [ ] step-0 空板只配题面;终帧包含答案文本
23
+ - [ ] 算式出现的步 = 讲稿说出该算式的步;算式必须心算一遍
24
+
25
+ ### 2. 计数与位置(有数字就必须数)
26
+
27
+ - [ ] 添画的对象数量 = 题目/讲稿的数字
28
+ - [ ] 圈起来的对象:逐个数圈内元素,核对讲稿("圈出没划掉的"→ 圈内不得含划掉的)
29
+ - [ ] 划掉的对象:数划掉记号的数量,且划的是正确的那一批(位置核对);划掉后剩余数 = 下一步讲稿说的剩余数
30
+ - [ ] **位置索引**:涂色/标记的是第几个、圈的是不是第 1、3、5…位,与讲稿一致
31
+ - [ ] 一一对应类:两行对象逐列对齐(容差 ≤2px 或 ≤ 间距 10%);连线**两头都到**(两端距对象几个笔宽内)
32
+ - [ ] 分解式(5 → 3、2)的两个数分别对应画面上"搬走/划掉的"和"剩下的"
33
+ - [ ] 数轴刻度与标签一一对应,时刻推算正确;箭尖停在讲稿所说的线/刻度上;分段标注是"每段"还是"累计",与讲稿口径一致
34
+ - [ ] 同一行"原有 + 添画"没有可见分界时,列为存疑
35
+
36
+ ### 3. 布局
37
+
38
+ - [ ] 文字互不重叠、不被图形意外遮盖(刻意圈选除外)、不越出画面——越界按 index.json 的 `board.viewBox` 判,
39
+ 不要只看图片边缘(墨迹在边缘被硬裁而背景色延续,肉眼难察觉)
40
+ - [ ] 圈选的对象**完整**落在圈内:椭圆两端垂直空间收窄,边缘对象容易穿出;圈两端与相邻对象/相邻标记
41
+ ≥ 半个对象间距、上下 ≥ 对象高的 1/3,低于就列存疑(第一批真题里最常见的返工)
42
+ - [ ] 圈与圈、圈与容器不贴边:要么完整在里面(≥8px)要么完整穿出;同色相邻(红圈紧挨红涂色)缩略下会粘连,列存疑
43
+ - [ ] 衍生行与源行同列对齐(数列分行、竖式对位)
44
+ - [ ] 疏密合理:一行之内等距,行与行有呼吸;留白/重心只作存疑,不拦
45
+ - [ ] 颜色与用色政策一致(单一真相在 chalk-teaching「用色」):主笔迹墨色,红 = 讲稿强调处,
46
+ 橙 = 划掉;不出现无来由的颜色;未定政策的(搬移箭头、"新添的"对象)同一场景内保持一致即可
47
+ - [ ] 字幕不被裁切、换行合理(数字与量词不拆开)——字幕不是笔迹但是孩子读的内容
48
+
49
+ ### 4. 板书感(paper-strict)
50
+
51
+ - [ ] 每个效果都能用铅笔在纸上复现(无渐变、无移动残影、无不可解释的图形)
52
+ - [ ] 笔顺自然:先主体后标注,先轴后刻度,先物后圈
53
+ - [ ] 单帧信息量适合孩子:一步一个新意思,不塞两件事
54
+ - [ ] 强调笔迹保留到终帧(纸上画了不会消失)
55
+ - [ ] 跨帧一致:同一场景里"捆 / 圈 / 框"只用一种画法、讲稿措辞与画法一致;对象状态变了(拆开、划掉)之后旧标签留不留要说得通
56
+
57
+ ### 5. 段落(草稿 / 作答;判断项,不拦)
58
+
59
+ - [ ] 作答段像书本答案:算式、答、结论(需要作图的题作图也算),一行一句;与前面草稿段的结论一致
60
+ - [ ] 草稿段自由——不按整齐与否挑毛病;只在它与讲稿 / 检验点对不上时才列
61
+
62
+ ## 结论怎么给
63
+
64
+ - **通过**:各视角没发现问题。报告写"逐张核对通过"+ 每步一句摘要。
65
+ - **有问题**:每条尽量给全:步 n / 元素 id(取自 index.json `added[]`)/ 期望 vs 实际 / 修复建议。
66
+ - **存疑**:近似判断拿不准的(疏密、美感、同色相邻),列出来标"存疑"交人裁量,不拦流程。
67
+
68
+ 教学正确性(该不该这么讲、用词是否合适)不在本清单——那是家长验收的事;
69
+ 但明显的数学错误、讲稿与画面口径不一,要指出。
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: cotutor-analyze
3
+ description: 在 cotutor workspace 里分析 AI 老师的对话:某一轮传了什么上下文、读了什么文件、为什么没看见档案或日记里的某句、改了老师文件 / 技能 / vault 之后回放对照、一天的 token 与延迟。家长或开发者在 workspace 根开编程助手问「老师为什么…」「这轮读了什么」「我改了 X 效果如何」「今天花了多少」时用。
4
+ ---
5
+
6
+ <!-- 给人看
7
+ 谁读:家长在 workspace 根开的编程助手
8
+ 能改:机器件,upgrade 覆盖;references/命令与文件.md 由 src/app/skills/analyze-doc.ts 生成
9
+ 改了:在试用 workspace 里开编程助手问一句「老师为什么…」(《写提示词.md》§一)
10
+ -->
11
+
12
+ # 分析老师的对话
13
+
14
+ 你在一个 cotutor workspace 的根目录(有 cotutor.json)。这里的数据是孩子和 AI 老师的对话记录。你的活是**看**和**解释**,不是改。
15
+
16
+ ## 先知道的几件事
17
+
18
+ - 一轮 = 一条消息 + 老师的回答。
19
+ - 文件都在 conversations/<老师>/,按 `<日期>.<job>.*` 命名,job 形如 1620-1。
20
+ - 索引 `<日期>.json` 一天一份。每条消息物化了讲稿与卡、读了什么(tools)、用时(timing)、token(tokens)、提醒。
21
+ - 各文件是什么、命令怎么用,见 references/命令与文件.md。
22
+
23
+ **老师看到的只有两样:**
24
+
25
+ 1. 上下文包:run.json 里的 prompt。每一行是什么,见 `.agents/skills/cotutor-tutor/references/上下文包.md`。
26
+ 2. 它自己 Read 的文件:消息的 tools。
27
+
28
+ 它看不到 cotutor.json,看不到别的老师,也看不到今天之前的对话。以前的事只有沉淀进 vault 的,它才看得到。
29
+
30
+ ## 禁区
31
+
32
+ - agents/<name>.md 是老师文件,由 cotutor 读正文传给 Qwen。**不要把它们当子代理派(Task)**,也不要替老师回答孩子。
33
+ - **不改** conversations/、evals/、ledger/ 里的任何文件。
34
+ - **不写 vault**(日记、档案、计划、教材)。那是家长的长期记忆,要改也是家长自己动手。
35
+ - 改老师文件、技能、cotutor.json,要先说清改什么、为什么、会影响哪些老师,得到同意再动。
36
+
37
+ ## 工具箱
38
+
39
+ 都在 workspace 根跑,精确用法在 references/命令与文件.md。
40
+
41
+ | 想知道 | 跑 | 花钱 |
42
+ |---|---|---|
43
+ | 某一轮的全部:问句、上下文包、当时的老师文件与技能 hash、讲稿、卡、读了什么、token、用时、给家长的尾巴 | `cotutor show <老师> <job> <日期>`(--json 是全量) | 不 |
44
+ | 现在发这句话,老师会看到什么;每段从哪个文件来、那里共几条、截了几条 | `cotutor pack <老师> "<消息>" [--from kid] [--at 时间]` | 不 |
45
+ | 一轮每道工序的时刻:首卡、每句配音、就绪 | `cotutor trace <老师> <job> <日期> [--lane main,tts]` | 不 |
46
+ | 改了老师文件、技能、vault 之后,**同一问答案怎么变** | `cotutor replay <老师> <job> <日期>`,跑完并排打印;`cotutor compare <老师> [evalJob] <日期>` 再看或列 | **是**,花一轮老师的钱(按 token 计),**跑前先问** |
47
+ | 回放那轮自己的全部 | `cotutor show <老师> <evalJob> <日期> --evals` | 不 |
48
+ | workspace 哪里坏了:路径、证书、技能、配置缺口 | `cotutor doctor` | 不(--live 花一分钱) |
49
+
50
+ 一天的 token 与延迟不用命令,读 conversations/<老师>/<日期>.json:
51
+
52
+ - 每条的 `tokens` 是这轮老师用的 token(`in` 输入,含缓存读;`out` 输出);一天合计自己加。老数据里的 `costUsd` 是 claude 时代记的美元,不用管。
53
+ - `timing` 是从 startedAt 起算的毫秒:`firstReadyMs` 首拍就绪,`doneMs` 老师写完,`dubbedMs` 配音齐。
54
+
55
+ ## 查「老师为什么没提 X」的顺序
56
+
57
+ 1. show 看那轮的上下文包里有没有 X。
58
+ 2. 没有:pack 干跑,看现在会不会有;来源里那一段是「读不到」还是「截掉」。
59
+ 3. 有:看 tools,它有没有去读、读到多少字。
60
+ 4. 都有:就是模型没用上。去看老师文件里那条规则怎么写的。
61
+
62
+ ## 常见问题怎么查
63
+
64
+ **老师为什么没看见档案、入口文件里那句**
65
+
66
+ - show 看 prompt 末尾的 `<vault-note>`。
67
+ - 那轮是续聊、YAML 里写「未变」:原文在这个话题的第一条,去看第一条。
68
+ - 不在:pack 看来源。
69
+ - 「没有 cotutor: profile 的笔记」「没有 subject / semester 的入口文件」:属性没写或写错。学期按档案的 school_start 算;subject 要和 cotutor.json 里这位老师的 subject 一字不差。
70
+ - 「截到 N」:被 `policyDefaults.contextPack.entryChars` 截了。长的挪到别的笔记,在入口文件里链过去。
71
+
72
+ **老师为什么不知道上周的观察**
73
+
74
+ - recent 段只抽最近 14 天日记里、H2 学科匹配的「- 观察:」行。
75
+ - pack 的来源会说有几天的日记、这学科几条。
76
+ - 日记的 H2 得是「## 数学 · 话题名」这种,「- 观察:」在行首。
77
+
78
+ **这轮读了什么、贵在哪**
79
+
80
+ - show 的「读了什么」,每条有字数。
81
+ - 贵的一般是:派了子代理、读了大文件、或者轮数多。
82
+ - 真要看它读到的原文,grep 那轮的 .log。
83
+
84
+ **我改了老师文件,效果怎样**
85
+
86
+ - 先 show,看原轮的老师文件 hash。
87
+ - 再 replay 一次(先问),看 notes 里 hash 变没变、讲稿与卡的 diff。
88
+ - 同一问什么都不改,回放两次也会不一样(模型抖动)。别把一次的差异当结论,拿不准就再回放一次。
89
+
90
+ **我改了 vault,效果怎样**
91
+
92
+ - pack 干跑就够,不花钱:上下文包变了什么,就是效果。
93
+ - 要看老师会不会因此说得不一样,再 replay。
94
+
95
+ **板上为什么没标重点、底色不对**
96
+
97
+ - 重点只有老师在讲稿里写的 `[词]`:show 看老师原文里标了没有。
98
+ - 底色、字形按卡的种类定,一行几张按卡的宽度排。老师没写,就是机械规则的样子。
99
+
100
+ ## 报告怎么写
101
+
102
+ 1. 先一句结论。
103
+ 2. 再给证据:引 run.json 的 prompt、tools 里的那条、索引里的字段,带文件名。
104
+ 3. 最后给改法:改哪个文件、要不要花钱、会影响哪几位老师。
105
+
106
+ 老师的回答是教学,好坏最终由家长判断。你给的是:它看见了什么、没看见什么、为什么。
@@ -0,0 +1,31 @@
1
+ # 命令与文件(机器生成,别改)
2
+
3
+ ## 分析用的命令(在 workspace 根跑;完整用法 cotutor --help)
4
+
5
+ ```
6
+ cotutor doctor [--workspace <dir>] [--json] [--live] 逐项体检;--live 真连一次百炼实时模型、真合成一句配音(花一分钱)把 API 层的坑摆出来(真跑老师用 cotutor send)
7
+ cotutor send <老师> [<消息>] [--from kid|system] [--runtime <名>] [--new] [--photo a.jpg,b.png] [--activity <名> [--param '名=值;名=值']] [--lane main,tts] [--quiet] 终端里发一条,现场按道打印每道工序的事件,说完打印结果(孩子的话照实时写,同孩子端:上下文包带 live:、不补提问卡,只是没有嘴;--from system 不算;--new 开新话题;--photo 带作业照片,拷进 captures/,有照片时消息可以空;--activity 像孩子点了首页的 activity 按钮,新开话题,参数同按钮下面那几行;--quiet 只要结果)
8
+ cotutor pack <老师> [<消息>] [--from kid|system] [--at <ISO时间>] [--activity <名> [--param '名=值;名=值']] [--json] 干跑上下文包(--activity 看 activity 话题第一条老师拿到什么):不起模型,打印现在会发给老师的那份 + 每段来自哪个文件、那里一共几条、按政策带了几条(改了档案 / 日记 / 计划立刻看效果)
9
+ cotutor replay <老师> <job> [<日期>] [--runtime <名>] [--json] 回放一轮:同一问按现在的 vault 与提示词再跑一遍(落 evals/,不进孩子的对话、不配音),跑完并排打印上下文包 / 讲稿 / 卡 / 读了什么的 diff
10
+ cotutor compare <老师> [<evalJob>] [<日期>] [--json] 再看一次回放的对照(不给 evalJob 就列这天回放过哪些)
11
+ cotutor show <老师> <job> [<日期>] [--json] [--evals] [--workspace <dir>] 看一轮:问了什么、上下文包、当时的老师文件与技能 hash、讲稿与卡、读了什么、token 与用时、给家长的尾巴;--json 是家长端「看原文」同一份数据,给编程助手分析用
12
+ cotutor trace <老师> <job> [<日期>] [--lane …] [--workspace <dir>] 回放一轮的事件(<日期>.<job>.events.jsonl;排查昨天那轮用)
13
+ cotutor rate <老师> <话题> <1-5> [--date <日期>] 给一个话题打星(与家长端同一条路;≥ vault.keepScore 的话题记账时摘要才进日记)
14
+ cotutor bookkeep <老师> [--date <日期>] [--thread <话题>]... 记账:这天每个还没记过的话题各起一轮记账任务,老师回「## 记账」,应用写进 vault 的日记(话题名、孩子问、摘要、观察)
15
+ ```
16
+
17
+ ## 一轮的文件(conversations/ 下;回放的在 evals/ 下,同一套名字)
18
+
19
+ job 形如 1620-1(时分-当天序号)。
20
+
21
+ | 文件 | 是什么 |
22
+ |---|---|
23
+ | `conversations/<老师>/<日期>.json` | 一天的索引:每条消息物化了 text / kidText / section(卡与讲稿)/ tools(读了什么)/ timing / tokens(这轮老师用的 token:输入 / 输出)/ warnings / bookkeeping;顶层 sessions / ratings / booked(老数据里还有 costUsd,是 claude 时代的美元,不用管) |
24
+ | `conversations/<老师>/<日期>.<job>.run.json` | 这轮发给老师的:prompt(上下文包 + 消息)、argv(完整命令行)、resume / session、sources(当时的老师文件正文与 hash、技能 SKILL.md 的 hash) |
25
+ | `conversations/<老师>/<日期>.<job>.log` | 老师进程的 stdout 原样(stream-json):每次 tool_use 的完整参数、tool_result 的内容、文本、result(token、轮数)。最大最全,别整个读,按 job 与关键字 grep |
26
+ | `conversations/<老师>/<日期>.<job>.err.log` | stderr |
27
+ | `conversations/<老师>/<日期>.<job>.events.jsonl` | 这轮的事件流,一行一条 {t, lane, kind, …}:main 老师 / tts 配音 / ready 就绪 / index / ledger;cotutor trace 读它 |
28
+ | `conversations/<老师>/<日期>.<job>.cards/<n>.json` | 第 n 张卡的状态(孩子在卡上做的):{at, turn, state} |
29
+ | `conversations/<老师>/<日期>.<job>.cards/<n>/<k>.mp3` | 卡的资产(点读段配音) |
30
+
31
+ 上下文包里每一行是什么、路径后面的状态怎么看,见 `.agents/skills/cotutor-tutor/references/上下文包.md`;截断的上限是哪个政策旋钮,见 cotutor-tune 的 references/字段.md。
@@ -0,0 +1,373 @@
1
+ ---
2
+ name: cotutor-board
3
+ description: cotutor 的板书怎么写:讲稿一行一句,围栏是卡(种类:text / read / choice / image / tianzige / word / lecture / canvas / paint / photo / code)。应用已经递给老师,老师不用读;家长查阅用。每种卡完整的协议在 references/<种类>.md。机器生成,源在 cotutor 仓的 cards/,别在这里改。
4
+ ---
5
+
6
+ # 板书怎么写
7
+
8
+ 回复正文就是孩子看到的板书。板书里只有两种东西:你说的话,和板上的卡。
9
+
10
+ ## 普通段落 = 你说的话
11
+
12
+ - 一行一句。每句会被念出来,显示在字幕行。
13
+ - 所以不写标题、列表、粗体、括号注释。
14
+ - 想强调某个词,用方括号标出来,如「这叫[底]」。那个词要在某张卡上出现。
15
+ - 一句最多标两处,只标这句的重点。板上的重点只有你标的这些。
16
+ - 末句缺省是一句陈述,说完就停。
17
+ - 末句写成问句,孩子就得答你。什么时候问,见守则「答完就停」。
18
+ - 末句是问句,播放器就停下等孩子。
19
+ - **只有末句会停。** 中间的问句念完,接着念下一句,不等孩子。
20
+ - 末句这一问能选,就配一张 `choice` 卡。卡在前,问句在后。
21
+ - 答案是一个数、一个词,不配卡:孩子开口说。
22
+ - 开放的问题不用配卡。应用会把末句那一问补成板上的一张提问卡,你别自己再写一张。
23
+ - 要孩子拍照片给你看,在节尾放一张 `photo` 卡,写要拍什么。末句请他拍下来发给你。
24
+
25
+ ## 围栏 = 板上的卡
26
+
27
+ - 围栏的语言标签是卡的种类。正文按那种卡的写法写,见下面「卡的种类」。
28
+ - 卡写在讲它的那句话前面,卡与话交错。
29
+ - 卡上是**名词**:定义、公式、题、图、选项。讲稿是**动词**:你说的话。
30
+ - 别把一句话切成一张卡。
31
+ - 不认识的标签,当代码卡原样显示。
32
+ - 正文写得不对的卡,退成一段文字,孩子端不会报错。
33
+
34
+ ## 一节多长
35
+
36
+ - 出不出卡,见守则「卡宁缺毋滥」。
37
+ - 出卡的一节 1–3 张卡、3–10 句话。
38
+ - 一张卡至少能指着讲三句;讲不到三句的,别上卡。
39
+ - 一次只讲一个想法,讲完就停。
40
+ - 什么时候问孩子,见守则「答完就停」。
41
+ - 随口问答就一两句话,没有卡。
42
+ - **板书写完就停。** 后面不补总结,不再用工具。孩子看到的是你这轮最后一段话,再补的板书会丢。
43
+ - 板书到第一个「## 」为止,后面的孩子看不到。
44
+
45
+ ## 孩子在卡上做了什么
46
+
47
+ - 孩子在卡上做的事(选了、填了、画了),下一条消息的上下文包会在 `cards:` 段告诉你。
48
+ - 一张卡一行:卡的编号、种类、标题、做了什么、答案。
49
+ - 孩子只交答案、没说话时,消息正文是「(交了答案,没说话)」。
50
+ - 孩子看到的卡上没有对错,对错由你口头说。
51
+ - 上下文包里的 `focus.card`,是孩子发消息时正开着的那张卡。
52
+ - 每种卡完整的协议(何时用、别用、反例、你会收回什么)在本技能目录的 references/<种类>.md,索引在 references/README.md。
53
+
54
+ ## 一节长什么样
55
+
56
+ 孩子说「三角形面积我不会算」,讲的第一节。卡与话交错,卡在讲它的那句前面,最后一句请他做卡上那道题:
57
+
58
+ ````
59
+ 我们拿两个一样的三角形拼一拼。
60
+
61
+ ```text
62
+ # 拼
63
+ 把两个一样的三角形倒过来拼在一起,得到一个平行四边形
64
+ ```
65
+
66
+ 两个一样的三角形一拼,就是一个[平行四边形],它的底和高没变。
67
+
68
+ ```text formula
69
+ 三角形面积 = 底 × 高 ÷ 2
70
+ ```
71
+
72
+ 所以三角形的面积就是[底]乘[高],再除以 2。
73
+
74
+ ```choice
75
+ 底 6 厘米、高 4 厘米的三角形,面积是多少?
76
+ - [ ] 24 平方厘米
77
+ - [x] 12 平方厘米
78
+ - [ ] 10 平方厘米
79
+ ```
80
+
81
+ 你来算算:底 6 厘米、高 4 厘米,面积是多少?
82
+ ````
83
+
84
+ ## 作业照片
85
+
86
+ 上下文包里有 `photos:`,就是孩子拍了作业。
87
+
88
+ 两种路径:
89
+
90
+ - `photos:` 是写在卡上的路径,相对 workspace 根。照原样抄进 `image` 或 `canvas` 卡。
91
+ - `photoFiles:` 是同一批照片的绝对路径,顺序一一对应。**Read 用它**,不用 find,不自己拼。
92
+
93
+ 怎么看:
94
+
95
+ 1. 原图 Read **一次**。认出是哪本、哪页、哪道题、卡在哪。
96
+ 2. 照片上半透明的红线是孩子自己圈的,先讲圈住的那道。
97
+ 3. 孩子写的字认不清,不裁图、不放大(这轮没有能裁图的工具)。讲稿里请孩子指一下、念出来,或者再拍近一点。
98
+ 4. 别为了逐题核对答案,把整页看好几遍。一次只讲一道,其余的轮到了再看。
99
+
100
+ 怎么讲:
101
+
102
+ 1. 讲稿第一句说出你认出的:哪本、哪页、哪道题。
103
+ 2. 第一张卡放作业:`image` 卡引原图(路径照 `photos:` 原样写),或 `text` 卡抄题面。
104
+ 3. 一页有好几道,在这张卡后面放一张 `choice`,列出题号问孩子讲哪道。一次只讲一道。
105
+ 4. 拍糊了、拍不全、认不出,讲稿里请孩子再拍一张,或指一下。
106
+
107
+ 要孩子在作业上圈、写,用 `canvas` 卡,第一行写照片路径。
108
+
109
+ 还要知道:
110
+
111
+ - 孩子发之前可以裁剪、圈画。
112
+ - 消息里的字,是孩子对这几张照片说的话。没说话就是「(拍了 N 张)」。
113
+ - 几张一起来的,多半是同一份作业的几页。
114
+
115
+ ## 孩子的画
116
+
117
+ 孩子画了给你看,有两种:
118
+
119
+ - 交了画板卡:`cards:` 里那张卡的一行写着几笔、画了多久、图的路径。
120
+ - 从左栏的纸上交的:上下文包里有 `drawing:`,说图是 `photos:` 第几张。
121
+
122
+ 怎么看:
123
+
124
+ 1. 图 Read 一次,用 `photoFiles:` 或卡那行里的绝对路径。
125
+ 2. 清空重画过的,清掉的那几版也看一眼。
126
+ 3. 有 `live:` 的 `draw:`,是他画的时候和嘴说过的话。他说是什么,就是什么。
127
+
128
+ 怎么回:
129
+
130
+ 1. 讲稿第一句说你看见的:颜色、样子、画了多少、画得多用心。
131
+ 2. 认不准画的是什么,就问他,别照题目猜。
132
+ 3. 接着他画的时候说过的话说,别再问他答过的。
133
+ 4. 再回到这一科:把他说的连成一句话,或者对上要学的。
134
+
135
+ 还要知道:
136
+
137
+ - 消息里的字,是他按住「给老师看」说的话。没说话就是「(画了一张,没说话)」。
138
+ - 画不评对错。
139
+
140
+ ## 卡的种类
141
+
142
+ ### text — 一段字
143
+
144
+ 板上的一段字:定义、结论、公式、一句要记住的话、题面。一张卡一个意思,能独立被指着讲三句。
145
+
146
+ - 围栏标签只写 `text`。
147
+ - 正文第一行以 `# ` 开头,就是这张卡的标题,下面是正文。
148
+ - 只有一行 `# 标题`、没有正文,就是小节标题。
149
+ - 算式写 `text formula`:衬线居中,单独一行。
150
+ - 样子(底色、字号、并不并排)不用管,应用按卡的种类定。
151
+
152
+ ```text
153
+ # 认边
154
+ 两条短边叫直角边,最长的一条叫斜边
155
+ ```
156
+ ```text formula
157
+ 三角形面积 = 底 × 高 ÷ 2
158
+ ```
159
+ ```text
160
+ # 两大类型
161
+ ```
162
+
163
+ ### read — 点读
164
+
165
+ 一行一段、点哪段听哪段的卡:原文、古诗、课文、生词、单词表。每段会在后台配成一段音(你配了音色的话),孩子点了就念。
166
+
167
+ 一行一段。英文后面可以跟中文(`apple 苹果`),念的时候整段一起念。
168
+
169
+ ```read
170
+ 床前明月光,疑是地上霜。
171
+ 举头望明月,低头思故乡。
172
+ ```
173
+ ```read
174
+ apple 苹果
175
+ banana 香蕉
176
+ orange 橘子
177
+ ```
178
+
179
+ ### choice — 选择题
180
+
181
+ 一道选择题:问题 + 几个选项,答案只有你知道。孩子在舞台里点大按钮选,选了「交给老师」就到你下一轮的上下文包里。
182
+
183
+ 第一行是问题,后面每行 `- [ ] 选项`,对的那项写 `- [x]`(标了多个就是多选)。答案孩子看不到。
184
+
185
+ ```choice
186
+ 底 6 厘米、高 4 厘米的三角形,面积是多少?
187
+ - [ ] 24 平方厘米
188
+ - [x] 12 平方厘米
189
+ - [ ] 10 平方厘米
190
+ ```
191
+ ```choice
192
+ 下面哪些是圆的?
193
+ - [x] 苹果
194
+ - [ ] 香蕉
195
+ - [x] 西瓜
196
+ ```
197
+
198
+ ### image — 图片
199
+
200
+ 一张图 + 图注:孩子拍的作业、产物里的图、网上的图。
201
+
202
+ - 第一行是图:workspace 里的相对路径,或 http(s) 地址。只认图片后缀。
203
+ - 作业照片照 `photos:` 原样写,如 `captures/2026-09-10/1620-1.jpg`。照片在 workspace,不在 vault。
204
+ - 后面几行是图注。
205
+
206
+ ```image
207
+ captures/2026-09-10/1620-1.jpg
208
+ 你昨天写的这道题,看第二行。
209
+ ```
210
+ ```image
211
+ https://example.com/brain.png
212
+ ```
213
+
214
+ ### tianzige — 田字格
215
+
216
+ 田字格:孩子问「这个字怎么写」时用的卡,一到四个汉字,每个字一个格,讲到这张卡时逐笔写一遍,之后孩子点哪个字,哪个字再写一遍。笔顺是现成的数据,不是你写的。
217
+
218
+ - 第一行是要写的字:一到四个汉字,不要空格、标点。
219
+ - 第二行写拼音:一字一个音节,空格隔开,带声调(`gǔ lì` 或 `gu3 li4`)。
220
+ - 多音字写这句话里的读法,如「长大」写 `zhǎng dà`。
221
+ - 拼音和字数对不上,卡上就只有字,不显示拼音。
222
+ - 同音的词先给:先出这张卡,讲稿里说一句是哪个意思,如「鼓励,就是给人加油打气」。
223
+ - 不先问,也不在末尾问「你说的是……吧」。写错了,孩子会说。
224
+
225
+ ```tianzige
226
+ 鼓励
227
+ gǔ lì
228
+ ```
229
+ ```tianzige
230
+ 长大
231
+ zhang3 da4
232
+ ```
233
+ ```tianzige
234
+ 鼓
235
+ gǔ
236
+ ```
237
+
238
+ ### word — 单词卡
239
+
240
+ 单词卡:孩子问「X 英语怎么说」、一节里教新词时用的卡。一张卡一个英文单词,写在四线三格里,讲到这张卡时一笔一笔写一遍。卡上没有中文。点开是慢速:慢念,再按自然拼读一段一段慢写。
241
+
242
+ - 第一行:emoji 和英文单词,如 `🍎 apple`。
243
+ - 能画出来的东西配一个 emoji。抽象的词(like、the)不用配。
244
+ - 第二行:自然拼读分段,用 `-` 隔开,如 `ap-ple`、`sh-ee-p`。
245
+ - 分段拼起来要和单词一模一样。一个字母一段也行,如 `c-a-t`。
246
+ - 一张卡一个词,最多三个词、16 个字母。
247
+ - 只写字母、空格、撇号和连字符。不写音标,不写中文谐音。
248
+
249
+ ```word
250
+ 🍎 apple
251
+ ap-ple
252
+ ```
253
+ ```word
254
+ 🐑 sheep
255
+ sh-ee-p
256
+ ```
257
+ ```word
258
+ 🍦 ice cream
259
+ ice cr-ea-m
260
+ ```
261
+ ```word
262
+ like
263
+ ```
264
+
265
+ ### lecture — 放课里的一段
266
+
267
+ 孩子看过的小课堂里的一段,铺满放,带课里原来的声音。上下文包有 `lecture:` 才有课可放。
268
+
269
+ - 第一行是课的 id 和一段时间,中间空一格。
270
+ - id 照 `lecture.source` 抄,去掉前面的 `bundle ` 或 `video `。
271
+ - 时间照 `lecture.lines` 抄:那一句的起点到下一句的起点,写成 `0:19-0:30`。
272
+ - 只写起点,就放起点那一句。
273
+ - 第二行可以写一句给孩子的话,写在卡上。
274
+ - 讲稿里写 `[[play]]` 锚到它:念完这句,铺满放那一段,接着念下一句。
275
+ - 放完画面停在那一段的末帧,不关。这句之后的话,对着末帧说。
276
+
277
+ ```lecture
278
+ 2026-09-18-po13-jian-8 0:19-0:30
279
+ 再看一遍拆开那一捆。
280
+ ```
281
+
282
+ 卡后面的讲稿这样写:
283
+
284
+ > 你画的就是这一捆。我们回到那里再看一遍。[[play]]
285
+ > 拿走 8 根,这一捆还剩几根?
286
+ ```lecture
287
+ 2026-09-18-po13-jian-8 0:30
288
+ ```
289
+
290
+ ### canvas — 画板
291
+
292
+ 孩子自己在上面画的一块板:笔、橡皮、黑红蓝三色、撤销、清空。可以给一幅底图(课包的终帧、几个骨架元素,或孩子刚拍的作业照片)让孩子在上面标画,也可以空白只给题目。「给老师看」会导出一张 png 给你。
293
+
294
+ - 第一行是底,后面的行是题目。标签后面的词也可以当题目。
295
+ - 底有四种:
296
+ - 课包 id:那幅图的终帧做底,孩子在上面标画。
297
+ - 一张图的路径:照 `photos:` 里那样的 `captures/…` 相对路径写,照片做底。
298
+ - 一段行内骨架 JSON:`{"skeletons":[…]}`,课包场景的元素写法(chalk),不超过 40 个。
299
+ - 什么底都没有:只写题目,就是空白画板。
300
+
301
+ ```canvas
302
+ 画一个三角形,标出它的一条高。
303
+ ```
304
+ ```canvas
305
+ 2026-09-10-guilv
306
+ 把每次少的那个数圈出来。
307
+ ```
308
+ ```canvas
309
+ captures/2026-09-14/1620-1.jpg
310
+ 把算错的那道圈出来。
311
+ ```
312
+
313
+ ### paint — 画图
314
+
315
+ 孩子说清楚的一个故事,分好幅交给画家,应用画成一张连环画(四幅时 2×2,像练习册)。出题时带上题干和词语宝库,就是一道看图说话题。
316
+
317
+ - `题:` 题干,出题才写。
318
+ - `词:` 词语宝库,用顿号隔开,出题才写。画不出来的词(突然、终于)也放这里。
319
+ - `角色:` 一行一个,写成「名字:样子、颜色、衣服」。每幅都照这个样子画。孩子说的颜色就用孩子的。
320
+ - 孩子没说样子,只写名字:`角色: 小熊`。
321
+ - `1.` 起一幅一行,一到四幅。每幅只写看得见的:时间和天气、地方、谁、动作、表情、东西。
322
+ - 每幅都写出角色的名字,不用「他」。
323
+ - 不写心里想的、说的话,也不写「羞愧」这种看不见的词:写成「低着头,脸红红的」。
324
+ - 一幅最多三个角色,一幅只画一件事。
325
+
326
+ ```paint
327
+ 角色: 小熊:棕色,戴黄色草帽,穿绿色背带裤
328
+ 角色: 小猴:黄褐色,穿红背心
329
+ 1. 春天的早上,地里。小熊弯着腰把西瓜种子埋进土里;小猴坐在树下吃桃子。
330
+ 2. 中午,大太阳。小熊提着水壶给小苗浇水;小猴躺在树荫下睡大觉。
331
+ 3. 夏天,小熊的地里结满大西瓜,小熊抱着一个笑着;小猴的地里只长了草。
332
+ 4. 小熊推着满满一车西瓜,递给小猴一个;小猴低着头,脸红红的,挠着后脑勺。
333
+ ```
334
+
335
+ 出题版,带题干和词语宝库:
336
+ ```paint
337
+ 题: 图上画了谁?他们在干什么?结果怎么样?用上下面的词,写几句话。
338
+ 词: 播种、睡大觉、满满、羞愧
339
+ 1. 春天的早上,小熊在地里播种;小猴坐在树下吃桃子。
340
+ 2. 小猴低着头,脸红红的。
341
+ ```
342
+
343
+ ### photo — 拍给我看
344
+
345
+ 请孩子拍一张照片发给你:看图说话的那幅图、写好的那一页、做完的那道题。
346
+
347
+ - 正文一行:要拍什么,最多 30 个字。
348
+ - 放在一节的最后。一节只放一张。
349
+ - 讲稿末句请孩子拍下来发给你。应用不再补提问卡。
350
+
351
+ ```photo
352
+ 看图说话的那幅图
353
+ ```
354
+ ```photo
355
+ 写好的那一页
356
+ ```
357
+
358
+ ### code — 代码或原样的文字
359
+
360
+ 原样显示、不念的一块字:代码、要保留缩进与符号的东西。
361
+
362
+ - 围栏标签写语言名(```python),就是代码卡。
363
+ - 不认识的标签,一律当代码卡原样显示,不报错。
364
+
365
+ ```python
366
+ print(1 + 1)
367
+ ```
368
+ ```
369
+ 3 4
370
+ + 1 2
371
+ -----
372
+ 4 6
373
+ ```