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
package/package.json CHANGED
@@ -1,33 +1,38 @@
1
1
  {
2
2
  "name": "cotutor",
3
- "version": "0.2.0",
4
- "description": "家里的 AI 老师团,和家长一起教:老师 = 可直接对话的 agent 文件 + 自己的会话;一孩一 workspace",
3
+ "version": "0.4.0",
4
+ "description": "AI tutors that co-teach with parents at home: real-time voice, an interactive whiteboard, and learning memory in your own Obsidian vault. Self-hosted; built for China's elementary curriculum.",
5
5
  "type": "module",
6
- "license": "MIT",
6
+ "license": "SEE LICENSE IN LICENSE",
7
7
  "repository": "github:TarsLab/cotutor",
8
8
  "homepage": "https://github.com/TarsLab/cotutor#readme",
9
9
  "bugs": "https://github.com/TarsLab/cotutor/issues",
10
10
  "keywords": [
11
11
  "ai",
12
12
  "agent",
13
- "claude-code",
14
13
  "qwen-code",
15
14
  "tutor",
16
15
  "education",
17
- "homeschool",
16
+ "elementary",
17
+ "realtime",
18
+ "voice",
19
+ "obsidian",
18
20
  "cli"
19
21
  ],
20
22
  "bin": {
21
23
  "cotutor": "bin/cotutor.js"
22
24
  },
25
+ "sideEffects": [
26
+ "*.css"
27
+ ],
23
28
  "exports": {
24
29
  "./schema": {
25
30
  "types": "./dist/schema/index.d.ts",
26
31
  "default": "./dist/schema/index.js"
27
32
  },
28
33
  "./workspace": {
29
- "types": "./dist/cli/workspace.d.ts",
30
- "default": "./dist/cli/workspace.js"
34
+ "types": "./dist/app/workspace.d.ts",
35
+ "default": "./dist/app/workspace.js"
31
36
  },
32
37
  "./lib": {
33
38
  "types": "./dist/lib/index.d.ts",
@@ -38,11 +43,17 @@
38
43
  "files": [
39
44
  "bin",
40
45
  "dist",
41
- "agents",
46
+ "grades",
47
+ "themes",
48
+ "avatars",
49
+ "cards",
50
+ "skills",
42
51
  "README.md",
43
- "LICENSE"
52
+ "LICENSE",
53
+ "NOTICE"
44
54
  ],
45
55
  "scripts": {
56
+ "gen:skills": "node --experimental-strip-types scripts/gen-skills.ts",
46
57
  "typecheck": "tsc --noEmit",
47
58
  "test": "node --experimental-strip-types scripts/test.ts",
48
59
  "build": "rm -rf dist && tsc -p tsconfig.build.json",
@@ -54,18 +65,19 @@
54
65
  "node": ">=22.18"
55
66
  },
56
67
  "dependencies": {
68
+ "@ai-sdk/alibaba": "2.0.78",
57
69
  "@excalidraw/excalidraw": "0.18.1",
58
- "drawtell": "^0.6.1",
59
- "drawtell-skills": "^0.1.0",
70
+ "ai": "7.0.155",
71
+ "hanzi-writer-data": "2.0.1",
72
+ "react": "^18.3.1",
73
+ "react-dom": "^18.3.1",
74
+ "typescript": "^5.6.0",
60
75
  "zod": "^4.4.3"
61
76
  },
62
77
  "devDependencies": {
63
78
  "@types/node": "^22.20.1",
64
79
  "@types/react": "^18.3.31",
65
80
  "@types/react-dom": "^18.3.7",
66
- "esbuild": "^0.28.2",
67
- "react": "^18.3.1",
68
- "react-dom": "^18.3.1",
69
- "typescript": "^5.6.0"
81
+ "esbuild": "^0.28.2"
70
82
  }
71
83
  }
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: chalk-cli
3
+ description: 做课包的命令 cotutor chalk 怎么用:反馈阶梯(check / snap)与 index.json 契约、build 出课包、烤画面 bake、配音 dub、在舞台上预览。跑工具、自检截图、配音、预览时读。不是:这道题怎么讲(→ chalk-teaching)、场景怎么写(→ chalk-scene)、截图怎么评(→ chalk-verify)。
4
+ ---
5
+
6
+ # 工具用法
7
+
8
+ ## 在哪儿跑
9
+
10
+ 在孩子的 workspace 里跑 `cotutor chalk …`(或任何目录下加 `--workspace <dir>`)。
11
+ 课包出到 workspace 的 `bundles/<id>/`(`--bundles <dir>` 换),孩子端的小课堂、lecture 卡就从这里放;
12
+ 截图出到 `bundles/` 旁边的 `snaps/<id>/`(`--out` 换)。`bundles/`、`snaps/` 是派生物,能随时重出,**别往里放手写文件**。
13
+ 场景源放哪都行(workspace 的 `scenes/`,或单独一个做课的目录),位置参数与 `--out` / `--bundles` 的相对路径按当前目录。
14
+ 每条命令都有 `--json`(路径里的家目录脱敏成 `$HOME`)。
15
+
16
+ ## 反馈阶梯(便宜层先消化)
17
+
18
+ 1. 类型层:`cotutor chalk check` 自带(内嵌 tsc,把场景里的 `import type … from 'cotutor/chalk'` 映射到包内类型;工作区不需要
19
+ tsconfig、不需要装 typescript),类型错误与结构错误一起出在 findings 里(rule `types`,带 文件:行:列 TS 号);
20
+ `--no-types` 可跳过
21
+ 2. `cotutor chalk check scenes/<id>.ts --json`——修到 0 错误;警告逐条判断。文字宽按字宽表算
22
+ (真播放器量的:汉字 1em,数字、字母各有各的宽;行高 1.25),和真实渲染差不到 2%,排版按同一把尺子算
23
+ 3. `cotutor chalk snap scenes/<id>.ts --no-cursor` → `snaps/<id>/step-*.png` + `index.json`(先 check + build;要本机的 Chrome)。
24
+ `--no-cursor` 不画笔尖,帧里只剩笔迹;不加也行,但要知道笔尖停在本步末笔处,不算画面元素。
25
+ index.json(v2)的 shots[] 把每张图和该步讲稿配好对,并列出该步新增元素
26
+ (`added[]`:id / type / strokeColor / backgroundColor / text / 近似 bbox)与画板 `board.viewBox`——
27
+ 数数对着 added 数,越界对着 viewBox 判(bbox 是场景坐标,图像像素 =
28
+ (坐标 − viewBox 原点) × 图宽 / viewBox 宽)。
29
+ 修单步后 `--step <n>` 只重截那一步(index.json 合并写入);若改动影响了整体包围盒
30
+ (播放器按整场等比缩放),其他帧比例会陈旧,最后再全量截一次
31
+
32
+ ## 出课包 build
33
+
34
+ `cotutor chalk build scenes/<id>.ts` → `bundles/<id>/`(scene.json + manifest.json;先 check,有错不出)。
35
+ 背景图拷进课包。已有的 `audio/` 不动:讲稿没改的步,build 照旧挂上那一步的配音;改了的步等重新 dub。
36
+
37
+ ## 烤画面 bake
38
+
39
+ `cotutor chalk bake <id>`(或 `scenes/<id>.ts`,先 check + build)→ `bundles/<id>/bake.json`:画面在本机 Chrome 里静态导出一次,
40
+ 存每一笔的路径与长度、笔尖轨迹、内嵌字体。孩子端照它现画,不再在孩子的设备上跑 excalidraw。
41
+
42
+ - **snap 会顺手烤**:没烤过或画面改过才烤。走完反馈阶梯,课包就是烤好的;截图用的就是孩子端那套渲染。
43
+ - **只改了讲稿、配音,不用重烤**;改了画面(元素、背景图)要重烤,不重烤应用会当它没烤过(服务端发现了会在后台补烤)。
44
+
45
+ ## 配音 dub
46
+
47
+ `cotutor chalk dub <id>`:音色用 `--voice <音色 id>`,或 `--tutor <老师>`(缺省 math-tutor)在 cotutor.json 里配的卡的音色;
48
+ 语气 `--instruction <一句话>` 可选。先 `--dry-run` 算账;讲稿与音色都没变的步不重配。
49
+ dub 会报每步"音 X s / 画 Y s → 拉伸 ×n":播放器把该步笔画拉伸到
50
+ 讲稿长度(只拉不缩,封顶 5 倍),"一边画一边数"就真的一个一个出来;超过 5 倍怎么办是讲法问题,
51
+ 口径在 chalk-teaching 讲稿套路。
52
+
53
+ ## 预览
54
+
55
+ `cotutor serve` 起着时,在电脑上打开 `/stage/?bundle=/api/bundles/<id>/&autoplay=1`,就是孩子看到的小课堂(从头放、能拖)。
56
+ 要孩子在首页看到它,挂到首页(cotutor-home 技能)。
57
+
58
+ ## 待引擎(写场景时按现状)
59
+
60
+ - 播放器按整场包围盒等比缩放,**不按宽缩放、不跟笔滚动**——试卷式布局(chalk-scene)先把高度控制在一屏内。
61
+ - `snap` 的 index.json `added[]` 不带 `customData`(role 看不到);verify 按位置与类型判段落。
62
+ - `check` 不核 `steps[].line` 与说明文件的讲稿是否一致——试跑期靠纪律。
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: chalk-scene
3
+ description: 课包场景的技术契约领域:场景怎么写才合法、画得下。ChalkScene 元素模型与纯数据模块写法、场景 id 约定、笔顺即步序、steps 覆盖约束、单笔时长经验、试卷式布局(页宽固定、草稿段 / 作答段自上而下、customData.role 可选)、布局经验、「数量与画面」几何、渲染事实、种子与真题参考。从说明文件写场景 TS 前读。不是:怎么讲(→ chalk-teaching)、工具怎么跑(→ chalk-cli)。不拥有交付物,由工作流按需加载。
4
+ ---
5
+
6
+ # 场景契约
7
+
8
+ 场景是纯数据 TS 模块:`import type { ChalkScene, ChalkSkeleton } from 'cotutor/chalk'`(运行时被擦除;
9
+ 并进 cotutor 之前写的 `from 'drawtell'` 照认)。确定性约束(append-only、笔顺即步序、
10
+ text-overlap 等)由 `cotutor chalk check` 强制——机制在 cotutor 的 src/chalk,本 skill 只写怎么写得对。
11
+
12
+ ## 结构契约
13
+
14
+ - 场景文件 `scenes/<id>.ts`,id:小写字母数字连字符。**工作区场景的 id 约定 `<YYYY-MM-DD>-<题眼>`**
15
+ (生成日 + 1–2 个拼音词,如 `2026-08-25-wazi`;同日同题眼加 `-2`,写前查一下文件是否已存在)——
16
+ id 是机器引用,人读的是 `title`,日期段管唯一性与排序。工具仓种子(dengche 等)是教学参考,不入此规
17
+ - 导出用 `export default`(或任一单个具名导出;loader 不要求导出名等于 id——日期开头的 id 不是合法标识符)
18
+ - skeletons 数组顺序 = 笔顺;steps 的 elementIds 按顺序连续覆盖全部元素(笔顺即步序);
19
+ 每步至少 1 个元素——"只说不画"的验证步(倒着数回来核对)要挂一条文字才成立
20
+ - `pauseAfter` 默认每步 `true`(气口:孩子点一下才继续)
21
+ - 单笔时长用 `animateDuration` 字段(毫秒),经验值:主笔画 600–1400,小元素 200–450
22
+ - 笔顺里还可以放两种**动作**(和画一笔一样进 steps、占时间,只是不画东西;不用写 x / y):
23
+ `{ type: 'erase', id, targets: [...] }` 擦掉前面画过的几样(经验 800–1400);
24
+ `{ type: 'board', id, background? }` 换一块画板(经验 1200–1800)。类型 `ChalkErase` / `ChalkBoard`,
25
+ check 查:只能擦前面画过、还在这块板上的;第一笔不能是 board(第一块画板的背景图写在场景的 background 上)
26
+ - 重复图形写辅助函数(小人、成排圆圈、划掉斜线),坐标尽量用算式不用魔数;辅助函数暂时写在各自文件里
27
+ - 场景 TS 从同名说明文件 `scenes/<id>.md` 来(格式在 chalk-teaching):`steps[].line` **逐字抄**它的讲稿;
28
+ 文件头注释写题面、表征、假设与参考的范例
29
+
30
+ ## 给画面上的东西起名字(groups、label)
31
+
32
+ 孩子看课时会停下来圈一处,应用要说出他圈的是什么。不起名字,只能说「第 1 步画的 3 条线」;起了名字,就能说「散的 3 根小棒」。
33
+
34
+ - 合起来是一样东西的几笔,写一个分组:`groups: [{ id: 'loose', label: '散的 3 根小棒', elementIds: ['s-1', 's-2', 's-3'] }]`
35
+ - label 用讲稿里的说法,孩子听到的和老师说的是一个词。
36
+ - 一个元素可以在几组里(「一捆 10 根」「13 根小棒」);圈住哪一组的大半,就说哪一组。
37
+ - 单独一笔有自己的意思(圈出答案的红圈、划掉的斜线),写在元素上:`label: '圈出剩下的 2 根'`。
38
+ - 文字不用起名字,应用说的就是字本身。
39
+ - 只是名字,不改画法、不改笔顺;`cotutor chalk check` 查分组的 id 不重、成员都在。
40
+
41
+ ## 试卷式布局(自上而下)
42
+
43
+ 像试卷:**页宽固定(~720),高度随内容长**,说明文件的段落自上而下一段接一段,段间留呼吸(≥24)。
44
+ 草稿段(图)排布自由;作答段像书写行——左对齐、一行一句、字号一致,放在它对应的草稿段下方。
45
+ 元素可选打 `customData: { role: 'draft' | 'answer' }`(协议只认领 `layer`,其余透传,零引擎改动)方便 verify 数;
46
+ 不打不算错,check 不管。
47
+ **引擎现状**:播放器按整场包围盒等比缩放、不跟笔滚动——所以高度先控制在一屏内(约 ≤350,两三段);
48
+ 更长的题拆成多个场景,或等 CLI 仓做完"按宽缩放 + 跟笔滚动"(camera-free 的收窄定义,见 teaching 讲解模板三档)。
49
+
50
+ ## 背景图(在原题照片上圈画)
51
+
52
+ 场景可选 `background: { src, width, height }`:一张图垫在笔迹底下(题目原图、课本照片)。
53
+ `src` 相对场景文件,`cotutor chalk build` 把图拷进课包(`background.<ext>`);`width` / `height` 是图片像素。
54
+ **有背景图时画板 = 图片**:场景坐标 (0,0)–(width,height) 就是图片像素,圈、下划线直接按像素量;
55
+ 画到图外的笔迹会被裁掉(check 报 `background-bounds` 警告)。图片上要圈的字贴边时,先给图片补边再量。
56
+ 荧光笔 = 矩形 `fillStyle: 'solid'` + `opacity: 45`(半透明,底下的字还看得清)。
57
+ 读题用背景图、做题换白板:做题那段前面放一个 `{ type: 'board', id: 'clean' }`,之后照白板的坐标写
58
+ (新板的视口按它上面的东西自己算,不用缩放、不用避开照片的坐标)。下一页还是照片就写 `background`。
59
+ 每块画板各自查重叠、出界;擦掉以后在同一处写的字不算重叠。
60
+
61
+ ## 布局经验
62
+
63
+ - 页宽 ~640–760(试卷式取 720)、高 ~250–350(引擎跟笔滚动前);干扰项分行隔离;答案在作答段(下方);
64
+ 竖的东西(楼、竖式)把说明文字放右侧把画面拉宽
65
+ - 要圈算式里的一个数,把它拆成单独的 text 元素(如 `'27 + 4 ='` 与 `'31'`),间距 ≥22;
66
+ "括号留空后来填"等标准小件的写法见 chalk-teaching
67
+ - 用色是政策不是几何,单一真相在 chalk-teaching「用色」,同一批课包里保持一致
68
+
69
+ ## 数量与画面(经验值,画面宽约 700–760)
70
+
71
+ - 被计数的对象一行 ≤18 个用直径 26、列距 40 很舒服(圈还能留边);≤25 个用直径 22、列距 28 勉强;
72
+ 干扰项可以更小(16 / 22)到 30 个一行。**超过 20 个且不需要逐个数 → 线段图**。
73
+ - 要在一行中间"停圈"(圈住前 k 个),列间空隙 ≥14px,否则圈尖必蹭到第 k+1 个。
74
+ - 圈的几何:椭圆要装下一排圆,高度约 ≥3.5× 圆径;圈矩形区域时半轴 = 半边 × √2 + 留边;
75
+ 椭圆越长两端越尖,粗略"每多 3 个对象 padX +4"。圈要么完整落在容器里(≥8px),要么完整穿出去(≥8px),别贴边。
76
+ 名字/标签与圈顶留 ≥12px。
77
+ - 捆怎么画最省元素:不拆的捆 = 竖长矩形 + hachure + 标 10(2 元素);要拆开从里面减的捆 =
78
+ 方框 + 10 根可见小棒 + 标 10(12 元素,方框上下留 ≥24 给后面的圈);新捆成的一捆 = 红色矩形框圈 10 根 + 标 10。
79
+
80
+ ## 渲染事实(不算错,先知道)
81
+
82
+ - `dashed` 短于 ~50px 只剩两段;涂色会盖住同位置先画的线;字幕超 ~38 个汉字折行;
83
+ 播放器按整场包围盒定比例,前几步画面偏空是设计使然(试卷式的"按宽缩放"待引擎)
84
+
85
+ ## 种子与真题参考
86
+
87
+ - 本包里的完整例子:`grades/grade-2/examples/2026-10-27-pingjunfen.ts`(平均分,实物分组);
88
+ 更早的种子场景 `dengche.ts`(时间数轴)、`zuqiu.ts`(实物图 + 辅助函数写法)、`bimoduo.ts`(比多少变体:对齐 + 虚线一一对应)
89
+ 留在已归档的 drawtell 仓 `scenes/`
90
+ - 第一批真题跑过 12 个场景(排队点阵、线段图、凑十、破十、小棒进位、数列分行、爬楼),
91
+ 下面的经验都是从那一批里长出来的
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: chalk-teaching
3
+ description: 做课包的教学知识领域:这道题怎么讲。说明文件格式(references/说明文件.md:每步 讲稿 · 草稿 · 作答 · 检验点)、草稿 / 作答两种段落、画布词汇表(动作 → 引擎写法)、表征库(models/ 一种草稿画法一文件 + models-index.md 索引;文件名即表征名)、讲解模板三档、讲法设计原则、讲稿套路、用色政策、表征准入。写说明文件、挑表征、设计讲法、写讲稿、定用色时读。不是:家长的个人口径(由调用方在转交单 / 上下文里给,优先于本 skill 缺省)、场景怎么写(→ chalk-scene)、工具怎么跑(→ chalk-cli)。不拥有交付物,由调用方按需加载。
4
+ ---
5
+
6
+ # 讲解知识
7
+
8
+ 讲法先落成**说明文件**(`scenes/<id>.md`,格式见 [references/说明文件.md](references/说明文件.md)),再写坐标。
9
+ 草稿画法(**表征**:点阵、线段图、数轴、小棒、分解式……)是有限集,一表征一文件在 `models/`;
10
+ 库里有现成骨架就照骨架讲——数学正确性与笔顺跟着骨架走,比自由发挥稳;没有就按知识点 + 范例 + 画布词汇自己设计,
11
+ 说明文件标 `表征: ★新`,不停下来问。
12
+
13
+ ## 查什么读哪
14
+
15
+ | 想… | 读 |
16
+ |---|---|
17
+ | 写说明文件(格式、两种段落、给家长看一眼) | `references/说明文件.md` |
18
+ | 按知识点 / 题面挑表征 | `models-index.md`(先看转交单的讲法要点与同知识点已验收的课包) |
19
+ | 读一种表征的完整骨架 | `models/<名>.md` |
20
+ | 选模板档(paper-strict / camera-free / motion) | `references/讲解模板三档.md` |
21
+ | 圈的几何余量、数量上限、画得下画不下 | chalk-scene 的「数量与画面」 |
22
+
23
+ ## 画布词汇表(动作优先从这里选)
24
+
25
+ 添画 · 划掉(=减)· 圈起来(=聚焦)· 连箭头 · 分行(=分类)· 虚线 · 涂色 · 擦掉(橡皮)
26
+
27
+ 引擎里的对应写法(第一批真题验证过):
28
+
29
+ - **涂色** = 元素加 `backgroundColor` + `fillStyle: 'hachure'`(斜线填充),能画能播;标记"第几个人"、"多出的一段"都用它
30
+ - **圈起来**:椭圆或**矩形**都算圈。椭圆两端收窄,圈一排对象时要靠高度换余量;
31
+ 要圈"一排里的前 k 个"而右边紧挨着第 k+1 个、或圈的东西本身是排/捆时,矩形圈一次到位(且与"捆 = 矩形"同形)
32
+ - **擦掉** = 笔顺里放一个动作 `{ type: 'erase', id, targets: ['要擦的元素 id'] }`:橡皮在它们上面来回走、它们淡掉,
33
+ 擦完就不在画面上了(圈住了什么也不算它),背景图上也擦得干净。擦掉的东西后面还要用就再画一遍(新 id)。
34
+ 只擦一笔的一部分时,才用老办法:一条沿旧笔迹走的粗线(`strokeWidth` ≥ 12)加 `customData: { tool: 'eraser' }`(纸色盖住)
35
+ - **换一块画板**(读完题换白板做题、一道题换下一页)= 动作 `{ type: 'board', id }`(可带新的 `background`):
36
+ 旧板上的连背景图一起擦干净,新板自己的坐标、自己的视口——不用拆成两个场景,也不用把做题那段缩放挤进照片的坐标
37
+ - **虚线** `strokeStyle: 'dashed'`;短于 ~50px 只剩两段,像冒号——一一对应的连线要够长、两头都到
38
+ - 涂色会盖住同位置在先画的线条(按顺序叠放),先画的虚线别指望从涂色块里透出来
39
+
40
+ ## 两种段落:草稿与作答
41
+
42
+ 草稿段 = 图,灵活、个性化,用图形表达思路;作答段 = 偏书本答案(算式、答、结论,需要作图的题作图也算)。
43
+ 竖向交替,一步可以只有草稿、只有作答或先草稿后作答——是引导不是分区,细则在 `references/说明文件.md`。
44
+
45
+ ## 标准小件
46
+
47
+ 两个反复用到的**标准小件**(没有名字,靠基本元素手搭,写法见种子/工作区场景):
48
+
49
+ - **分解式**:数下面分出两个数(如 5 → 3、2):两条短 line + 两个 text;凑十/破十都要
50
+ - **括号留空后来填**:"( )" 拆成两个 text(左括号、右括号)留出空位,答案填进去时才不会触发 check 的 text-overlap
51
+
52
+ ## 讲法设计原则
53
+
54
+ - 先写说明文件,再写坐标。缺省 3–6 步(数列分行这类可到 7)——步多了孩子跟不上,少了一步塞两件事;
55
+ 每步一个想法、一句讲稿,可有草稿、作答两拍
56
+ - 讲稿短句、面向孩子、讲到什么画什么;讲稿说"从右边起"就真的从右往左落笔——批内笔顺跟着讲稿的方向走
57
+ - 数学正确性优先于画面好看;讲法以"孩子看完能在纸上照着画"为目标(paper-strict 的初衷)
58
+ - 画面本身也会教错东西:楼画成一格一格的、"1 楼"标在格子里,孩子就会把"到 3 楼"数成 3 层——
59
+ 先想"这张图会不会被读成别的意思",再想好看
60
+
61
+ ## 用色(政策,单一真相)
62
+
63
+ 主笔迹 `#1e1e1e`,强调红 `#e03131`,划掉橙 `#e8590c`;红用在讲稿强调处、橙 = 划掉,不出现无来由的颜色。
64
+ 搬移箭头、"新添的"对象用什么色还没定(家长政策),同一批课包里保持一致。
65
+
66
+ ## 讲稿套路(各模型通用)
67
+
68
+ - 每步一句,短句,直接对孩子说;先说动作再说含义("划掉 5 个——送出去的就不是他的了")
69
+ - 数数环节让孩子跟着数("1、2……9"),这是接力交互的钩子
70
+ - 最后一段通常是作答:算式、答写在作答段;草稿里圈出答案可选(缺省圈,家长口径可改)
71
+ - 涉及"我 / 某人自己"的排队类,必有一句"别忘了他自己 / 他被数了两次"
72
+ - 应用题按册子习惯把算式写进作答段;算式是单独一步还是并进末步,同一批课包里保持一致(家长定)
73
+ - 讲稿超过一行(~38 个汉字)字幕会折行,尽量控制在一行内;换行会把"数字 + 量词"拆开
74
+ - 一升二读不了字幕,讲稿就是孩子听到的全部;每句 TTS 约 3 字/秒,一步 10 秒左右为宜。
75
+ dub 报"拉伸超过 5 倍"说明这步讲稿太长或画得太少——回讲法层修(讲稿拆步、多画几笔),别指望时钟
76
+
77
+ ## 表征怎么进库(当前做法)
78
+
79
+ 生成时遇到库里没有合适表征的题:**不停**,按知识点 + 画布词汇 + 邻近范例自己设计草稿,说明文件 `表征: ★新`,
80
+ 给家长看时点明。家长认可(验收通过,或纸上手绘验证)后再进库:`models/<名>.md`(适用知识点 / 画法骨架 / 已验收范例)
81
+ + `models-index.md` 一行;文件名就是表征名。
82
+ 第一批真题(一升二暑假每日一练 12 题)一次就进了 8 个——表征库主要靠真题批量长出来,不靠预先设计。
@@ -0,0 +1,8 @@
1
+ # 交错数列·分行
2
+
3
+ - **适用知识点**:找规律(数列)
4
+ - **常见题型**:两串数交错的找规律
5
+ - **画法骨架**:原数列抄一行 → 隔一个圈一个 → 单数位抄第二行、与原行同列对齐,相邻连箭头标差、填空 →
6
+ 双数位抄第三行同法 → 写回括号 + 圈答案句。用下一个已知数验算("再少 2 正好是 3,对上了")
7
+ 是天然的接力钩子
8
+ - **已验收范例**:✓ 真题:15、11、13、13、11、15…;单条等差数列 = 去掉分行的退化版
@@ -0,0 +1,7 @@
1
+ # 凑十
2
+
3
+ - **适用知识点**:20 以内进位加法
4
+ - **常见题型**:20 以内进位加
5
+ - **画法骨架**:大数一行、小数一行对齐 → 从小数行划掉 k 个 + 箭头 + 大数行添画 k 个("搬"去凑十)→
6
+ 圈满十标 10 + 写分解式 → 先算 N+k=10、再算 10+r → 圈答案
7
+ - **已验收范例**:✓ 真题:7+5
@@ -0,0 +1,6 @@
1
+ # 周期规律
2
+
3
+ - **适用知识点**:找规律(图形)
4
+ - **常见题型**:一组一组重复的找规律(如花朵图)
5
+ - **画法骨架(草案)**:一组一组圈,数一组几个
6
+ - **已验收范例**:无——骨架未验证;生成时可按草案自由设计,说明文件标 `表征: ★新`,家长认可后按 SKILL.md「表征怎么进库」补骨架
@@ -0,0 +1,6 @@
1
+ # 实物图·增减
2
+
3
+ - **适用知识点**:10 / 20 以内加减的应用
4
+ - **常见题型**:数量增减、送给/买来/吃掉、干扰项
5
+ - **画法骨架**:分行画物(干扰项另起一行)→ 减 = 划掉 + 箭头、增 = 添画 → 圈出答案数一遍 → 写算式
6
+ - **已验收范例**:✓ 种子:足球(`scenes/zuqiu.ts`);真题:苹果还剩几个
@@ -0,0 +1,7 @@
1
+ # 实物图·比多少·求大数 / 求小数
2
+
3
+ - **适用知识点**:比多少(求大数 / 求小数)
4
+ - **常见题型**:乙比甲多 n,乙有几 / 少 n
5
+ - **画法骨架**:小数一行 → 大数另起一行先画"和它一样多的"(同列)→ 虚线一一对应 →
6
+ 再添画多出的 n 个(求小数则划掉 n 个)→ 圈全部数一遍
7
+ - **已验收范例**:✓ 真题:鸭有几只(13+12)
@@ -0,0 +1,6 @@
1
+ # 实物图·比多少·求差
2
+
3
+ - **适用知识点**:比多少(求差)
4
+ - **常见题型**:甲比乙多几
5
+ - **画法骨架**:两行**对齐**(同列同 x)→ 虚线一一对应 → 圈出没对上的
6
+ - **已验收范例**:✓ 种子:铅笔比多少(`scenes/bimoduo.ts`)
@@ -0,0 +1,7 @@
1
+ # 小棒进位加
2
+
3
+ - **适用知识点**:100 以内加法(进位)
4
+ - **常见题型**:两位数加一位数进位(27+4、38+5…)
5
+ - **画法骨架**:捆(竖长矩形 + hachure 涂色 + 标 10)与散棒画出被加数 → 添画加数的散棒 →
6
+ 散的满十用矩形框圈成新捆、标 10 → 写"先算个位、再算整十"→ 圈答案
7
+ - **已验收范例**:✓ 真题:27+4
@@ -0,0 +1,6 @@
1
+ # 小棒退位减
2
+
3
+ - **适用知识点**:100 以内减法(退位)
4
+ - **常见题型**:两位数减一位数退位(32−5)
5
+ - **画法骨架(草案)**:小棒进位加的捆画法 + 破十的拆捆划掉
6
+ - **已验收范例**:无——骨架未验证;生成时可按草案自由设计,说明文件标 `表征: ★新`,家长认可后按 SKILL.md「表征怎么进库」补骨架
@@ -0,0 +1,7 @@
1
+ # 排队点阵
2
+
3
+ - **适用知识点**:20 以内加减、数数
4
+ - **常见题型**:前 m 后 n 求总数;左数第 a 右数第 b 求总数或中间人数;报数
5
+ - **画法骨架**:一行小圆代表人 → 先画锚点人(涂色 + 名字)→ 按题意往两侧添画、边画边数 →
6
+ 圈全部(或目标段)数一遍写答案 → 单独一步写算式,红字点破"锚点人只数一次(+1 / −1)"
7
+ - **已验收范例**:✓ 真题 4 题:两人之间几人、前 4 后 4、左 4 右 8、正 7 倒 9
@@ -0,0 +1,6 @@
1
+ # 时间数轴
2
+
3
+ - **适用知识点**:认识钟表、时间的计算
4
+ - **常见题型**:时刻与时长、班次间隔
5
+ - **画法骨架**:画轴 → 标已知时刻 → 添画推算出的时刻 → 圈出目标区间,数格
6
+ - **已验收范例**:✓ 种子:等车(`scenes/dengche.ts`)
@@ -0,0 +1,7 @@
1
+ # 楼层(间隔)图
2
+
3
+ - **适用知识点**:间隔问题(数数)
4
+ - **常见题型**:爬楼、锯木头、植树、敲钟等"间隔"题
5
+ - **画法骨架**:楼是线、层是段:两面墙 + 楼线自下而上标 1 楼…→ 每人一列箭头逐段数(每段标层数)→
6
+ 推另一人层数 → 停在哪条线 → 圈楼标写答案。与时间数轴同构(刻度 = 楼,间隔 = 层)
7
+ - **已验收范例**:✓ 真题:爬楼(小宏 3 楼爸爸几楼)
@@ -0,0 +1,7 @@
1
+ # 破十
2
+
3
+ - **适用知识点**:20 以内退位减法
4
+ - **常见题型**:20 以内退位减
5
+ - **画法骨架**:十几画成"方框 10 根 + 散的几根"(标 10、标几)→ 散的不够减,拆开这捆:
6
+ 框内划掉 n 根、写 10−n → 框内剩的圈起来标数、散的圈起来 → 写 (10−n)+几 → 圈答案
7
+ - **已验收范例**:✓ 真题:12−7
@@ -0,0 +1,6 @@
1
+ # 竖式退位
2
+
3
+ - **适用知识点**:100 以内减法(退位)
4
+ - **常见题型**:两位数减两位数
5
+ - **画法骨架(草案)**:竖式逐位写,退位标记用划掉 + 小字
6
+ - **已验收范例**:无——骨架未验证;生成时可按草案自由设计,说明文件标 `表征: ★新`,家长认可后按 SKILL.md「表征怎么进库」补骨架
@@ -0,0 +1,7 @@
1
+ # 线段图
2
+
3
+ - **适用知识点**:100 以内加减的应用;两步应用题
4
+ - **常见题型**:数 >20 的比多少;两步"先求另一个再求和/差"
5
+ - **画法骨架**:一人一条纸带,左端对齐 → 长出的一段虚线隔开 + 涂色标差 → 先求另一段写进条里 →
6
+ 圈两条求和,算式写右侧
7
+ - **已验收范例**:✓ 真题:姐妹做花(32、比多 8、一共)
@@ -0,0 +1,24 @@
1
+ # 表征库索引
2
+
3
+ 一种草稿画法一文件(`models/<名>.md`:适用知识点 / 画法骨架 / 已验收范例);文件名即表征名。
4
+ 挑表征的顺序:同知识点已验收的范例(说明文件 + 课包)→ 题面 → 本表。库里没有合适的:自己设计,说明文件标 `表征: ★新`,
5
+ 不停下来问(准入见 SKILL.md「表征怎么进库」)。
6
+
7
+ | 表征 | 适用知识点 | 常见题型 | 学段 | 状态 |
8
+ |---|---|---|---|---|
9
+ | [实物图·增减](models/实物图-增减.md) | 10 / 20 以内加减的应用 | 数量增减、送给/买来/吃掉、干扰项 | 一二年级 | ✓ 已验证 |
10
+ | [实物图·比多少·求差](models/实物图-比多少-求差.md) | 比多少(求差) | 甲比乙多几 | 一二年级 | ✓ 已验证 |
11
+ | [实物图·比多少·求大数 / 求小数](models/实物图-比多少-求大数求小数.md) | 比多少(求大数 / 求小数) | 乙比甲多 n,乙有几 / 少 n | 一二年级 | ✓ 已验证 |
12
+ | [线段图](models/线段图.md) | 100 以内加减的应用;两步应用题 | 数 >20 的比多少;"先求另一个再求和/差" | 一二年级起,通用 | ✓ 已验证 |
13
+ | [排队点阵](models/排队点阵.md) | 20 以内加减、数数 | 前 m 后 n;左数第 a 右数第 b;报数 | 一二年级 | ✓ 已验证 |
14
+ | [时间数轴](models/时间数轴.md) | 认识钟表、时间的计算 | 时刻与时长、班次间隔 | 一二年级起,通用 | ✓ 已验证 |
15
+ | [楼层(间隔)图](models/楼层间隔图.md) | 间隔问题(数数) | 爬楼、锯木头、植树、敲钟 | 一二年级 | ✓ 已验证 |
16
+ | [凑十](models/凑十.md) | 20 以内进位加法 | 9 加几、8 加几… | 一年级 | ✓ 已验证 |
17
+ | [破十](models/破十.md) | 20 以内退位减法 | 十几减几 | 一年级 | ✓ 已验证 |
18
+ | [小棒进位加](models/小棒进位加.md) | 100 以内加法(进位) | 两位数加一位数进位(27+4、38+5…) | 一年级 | ✓ 已验证 |
19
+ | [交错数列·分行](models/交错数列分行.md) | 找规律(数列) | 两串数交错;单条等差数列 | 一二年级 | ✓ 已验证 |
20
+ | [竖式退位](models/竖式退位.md) | 100 以内减法(退位) | 两位数减两位数 | 二年级 | 骨架未验证 |
21
+ | [小棒退位减](models/小棒退位减.md) | 100 以内减法(退位) | 两位数减一位数退位(32−5) | 一年级 | 骨架未验证 |
22
+ | [周期规律](models/周期规律.md) | 找规律(图形) | 一组一组重复(如花朵图) | 一年级 | 骨架未验证 |
23
+
24
+ 知识点列写教材单元名(与教材目录的单元标题一致,如「100以内数的认识」),一个表征可对多个知识点;学段是缺省值,以大纲为准。
@@ -0,0 +1,32 @@
1
+ # 讲解模板三档
2
+
3
+ 本文件是这三档的单一真相。
4
+ "纸上可复现"从引擎公理降为模板属性;放松的第一选择是镜头,不是元素。
5
+
6
+ ## paper-strict(默认)
7
+
8
+ 纸上合法操作集:**添画、划掉、圈、箭头、分行**(另有虚线、涂色,见画布词汇表)。
9
+ 孩子看完能在纸上照着画出来——这是产品灵魂。图的价值在生成过程,不在成品。
10
+
11
+ ## camera-free(试卷式滚动)
12
+
13
+ 2026-09-04 收窄:不做通用运镜,只做**试卷式滚动**——页宽固定、高度随段落长,播放器按宽缩放、跟笔滚动(笔到哪滚到哪);
14
+ **元素仍 append-only**,写法与 paper-strict 完全一样,只是不再受"一屏"限制。缩放(凑近看)不在此档。
15
+ ⚠ 引擎尚未实现;实现前一屏装不下的题拆成多个场景。当前 check 只按 paper-strict 的机制约束把关。
16
+
17
+ ## motion(极少数)
18
+
19
+ 移动本身承载语义时才用,如"送给"= 足球移过去。
20
+ 默认先用 paper-strict 的替代表达:划掉 + 箭头(种子场景"足球"就是这么讲"送给"的)。
21
+ ⚠ 引擎尚未实现元素移动。
22
+
23
+ ## 怎么选
24
+
25
+ 先问"paper-strict 能不能讲清楚"——种子两题都能,预期绝大多数一二年级题都能。
26
+ 讲不清是因为"画面装不下"→ camera-free;是因为"语义必须靠移动"→ motion;
27
+ 升档时把理由写进场景文件头部注释,方便回看。
28
+
29
+ ## 机制与政策的分界
30
+
31
+ `template` 枚举、paper-strict 的确定性约束(append-only、笔顺即步序)由 `cotutor chalk check`
32
+ 强制——那是机制,在 cotutor 的 src/chalk。本文件只回答"何时用哪档、怎么写"。
@@ -0,0 +1,102 @@
1
+ # 说明文件:scenes/<id>.md
2
+
3
+ 一道题的讲法,写给**不懂画课包的人**看的:家长、别的模型、将来的孩子端都能读、能改。它是阶段 1 的产物、阶段 2 的输入、
4
+ verify 的对照物、验收后的范例(最佳实践的单位)。与场景 TS 同名同居:`scenes/<id>.md` ↔ `scenes/<id>.ts`。
5
+
6
+ ## 粒度:画布词汇那一层
7
+
8
+ 写"画一个红色的圈",不写圈的粗细、时长、坐标。允许出现的词:
9
+
10
+ - 动作:画布词汇表(添画 / 划掉 / 圈 / 箭头 / 分行 / 虚线 / 涂色)+ 写字
11
+ - 对象与数量:"4 个圆""13 个""三个空"
12
+ - 颜色角色:主笔迹 / 强调(红)/ 划掉(橙)——不写色值
13
+ - 相对位置:一行、下一行、左侧、右侧、下方、对齐、同列
14
+
15
+ **不写**:px、ms、元素 id、椭圆还是矩形、直径列距——那是阶段 2(chalk-scene)的决定。说明文件说"圈住全部 13 个",
16
+ 用椭圆还是矩形由几何决定。
17
+
18
+ ## 两种段落:草稿与作答
19
+
20
+ 贴近孩子真实的做题体验:草稿纸上画图想思路,卷子上写答案。
21
+
22
+ - **草稿段**:图。灵活、个性化,用图形表达思路——点阵、线段、数轴、小棒、划掉、圈,怎么想就怎么画。
23
+ - **作答段**:偏书本里的答案——算式、答、结论文字;需要作图的题(画角、画线段)作图也算作答。像书写行:一行一句。
24
+
25
+ 竖向交替:草稿 → 作答 → 草稿 → 作答……**这是引导,不是分区**:一步可以只有草稿、只有作答,或先草稿后作答;
26
+ 不强求每步都分、不强求二者数量对等。多数题的形状是"几步草稿 + 最后一段作答"。
27
+
28
+ ## 形状
29
+
30
+ ```markdown
31
+ ---
32
+ id: 2026-08-30-guilv # = 场景 id
33
+ tags: [册子/人教数学一下/4, 题型/交错数列分行, 孩子/Ray] # 知识点(册子/<册>/<节>)必备;题型、孩子可选
34
+ 表征: 交错数列分行 # = models/<名>.md;库里没有合适的写 ★新,并在步里写清自己的画法
35
+ template: paper-strict
36
+ 范例: 2026-08-25-xxx # 参考过的已验收说明文件(可省)
37
+ 假设: [] # 缺图 / 看不清处的假设,一行一条
38
+ ---
39
+ ## 题面
40
+ 53、50、47、__、__、__
41
+
42
+ ## 步 1
43
+ - 讲稿:先把这串数抄下来:53、50、47,后面三个空要我们填。
44
+ - 草稿:一行抄数列,三个空画短横线
45
+ - 检验:数列 3 个数 + 3 条横线
46
+
47
+ ## 步 2
48
+ - 讲稿:从 53 到 50 少了 3,从 50 到 47 又少了 3——每次都少 3!
49
+ - 草稿:相邻两数之间连弧形箭头,箭头上标「−3」,主笔迹
50
+ - 检验:2 个箭头,标注 −3
51
+
52
+ ## 步 3
53
+ - 讲稿:47 再少 3 是几?减 3 等于 44,填进第一个空。
54
+ - 草稿:第一个空上方写 44(强调红)
55
+ - 检验:第一个空填 44
56
+
57
+ ## 步 4
58
+ - 讲稿:44 再少 3,等于 41,填进第二个空。
59
+ - 草稿:第二个空上方写 41(强调红)
60
+ - 检验:第二个空填 41
61
+
62
+ ## 步 5
63
+ - 讲稿:41 再少 3,等于 38,填进第三个空。
64
+ - 草稿:第三个空上方写 38(强调红)
65
+ - 检验:第三个空填 38
66
+
67
+ ## 步 6
68
+ - 讲稿:圈出三个答案。倒着检查:38 加 3 是 41,加 3 是 44,再加 3 正好回到 47!
69
+ - 草稿:圈出三个答案(强调红)
70
+ - 作答:44、41、38
71
+ - 检验:3 个圈;倒推心算成立
72
+ ```
73
+
74
+ 每步:**讲稿**(一句,孩子听到的全部;≤ 38 字为宜)必有;**草稿** / **作答** 至少一栏;**检验**(这一步画完该数出什么:数量、位置、心算)必有。
75
+
76
+ ## 讲稿行是两个文件的 join key
77
+
78
+ TS 的 `steps[].line` 与说明文件的讲稿**逐字一致**(dub 按行 hash 音频,改一句只重合成一句)。改讲法先改说明文件,再改 TS;
79
+ 试跑期靠这条纪律,稳定后 `cotutor chalk check` 会拦。
80
+
81
+ ## 怎么写(阶段 1 该想到的六件事)
82
+
83
+ 按顺序:知识点 → 表征 → 口径 → 历史 → 范例 → 段落。
84
+
85
+ 1. **知识点**(转交单与上下文包的 profile):这题在教什么;孩子已学到哪、哪些工具不能用(没学竖式就别上竖式)。
86
+ 2. **表征**:先看同知识点的已验收范例与题面,再翻 `models-index.md`;库里有骨架照骨架,
87
+ 没有就按画布词汇自己设计,frontmatter `表征: ★新`,给家长看时点明"这是新画法"。**不停下来问,不硬套别的骨架。**
88
+ 3. **口径**(转交单 why 里的讲法要点、教材那一节的口径):用词、算式写法、忌讳,压倒本 skill 的缺省。
89
+ 4. **历史**(转交单里孩子刚才的话、上下文包的 recent):上次错在哪、讲过什么,讲稿里点一句,别重复上次的讲法问题。
90
+ 5. **范例**:结构照抄验收过的那份,只换数字与讲稿——比自由发挥稳。范例层空、拿现成的 `.ts` 当结构参考时,
91
+ **只抄步骤结构与讲稿套路**,代码里的形状与几何(椭圆 / 矩形 / 直径 / 坐标)一个词都不带进说明文件——写回画布词汇「圈住」。
92
+ 6. **段落**:哪几步草稿、哪一步作答;检验点带数字。
93
+
94
+ ## 给家长看一眼(对话模式)
95
+
96
+ 直接做课包时,说明文件写完先给家长一条消息:题面一行 + 每步一句讲稿 + 一句"草稿画什么、作答写什么" + "回「好」就画,要改直接说"。
97
+ 不带坐标、不带文件名以外的机器词。家长改了任何一句 → 改说明文件后**重呈现**,不直接画(修订 ≠ 确认)。
98
+ 应用无人值守跑(如 cotutor 的 scene-maker)不设这道门:一口气写说明文件 + TS,说明文件照样落盘。
99
+
100
+ ## 验收后
101
+
102
+ 家长验收通过(工作区 `reviews.json` accepted)的说明文件就是**范例**:下次同知识点的题先翻它,取最近 2–3 份。不删旧范例——限的是取用数,不是存量。家长点名"这个讲得好"的排前。