cotutor 0.2.0 → 0.3.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 (871) hide show
  1. package/LICENSE +247 -21
  2. package/NOTICE +42 -0
  3. package/README.md +92 -20
  4. package/bin/cotutor.js +4 -4
  5. package/cards/canvas/card.css +8 -0
  6. package/cards/canvas/card.md +68 -0
  7. package/cards/choice/card.css +18 -0
  8. package/cards/choice/card.md +55 -0
  9. package/cards/code/card.css +5 -0
  10. package/cards/code/card.md +46 -0
  11. package/cards/dictation/card.css +10 -0
  12. package/cards/dictation/card.md +97 -0
  13. package/cards/image/card.css +10 -0
  14. package/cards/image/card.md +52 -0
  15. package/cards/lecture/card.css +9 -0
  16. package/cards/lecture/card.md +69 -0
  17. package/cards/paint/card.css +20 -0
  18. package/cards/paint/card.md +77 -0
  19. package/cards/photo/card.css +15 -0
  20. package/cards/photo/card.md +61 -0
  21. package/cards/read/card.css +6 -0
  22. package/cards/read/card.md +51 -0
  23. package/cards/text/card.css +3 -0
  24. package/cards/text/card.md +69 -0
  25. package/cards/tianzige/card.css +17 -0
  26. package/cards/tianzige/card.md +78 -0
  27. package/cards/tutor/card.css +66 -0
  28. package/cards/tutor/card.md +148 -0
  29. package/cards/word/card.css +24 -0
  30. package/cards/word/card.md +91 -0
  31. package/cards//346/235/277/344/271/246/346/200/216/344/271/210/345/206/231.md +159 -0
  32. package/dist/app/activity-eval-rules.d.ts +62 -0
  33. package/dist/app/activity-eval-rules.js +276 -0
  34. package/dist/app/activity-eval.d.ts +65 -0
  35. package/dist/app/activity-eval.js +158 -0
  36. package/dist/app/build.d.ts +11 -0
  37. package/dist/app/build.js +45 -0
  38. package/dist/app/cli/activities.d.ts +63 -0
  39. package/dist/app/cli/activities.js +158 -0
  40. package/dist/{cli → app/cli}/cert.js +3 -3
  41. package/dist/app/cli/chalk/bake.d.ts +10 -0
  42. package/dist/app/cli/chalk/bake.js +58 -0
  43. package/dist/app/cli/chalk/browser.d.ts +16 -0
  44. package/dist/app/cli/chalk/browser.js +142 -0
  45. package/dist/app/cli/chalk/build.d.ts +14 -0
  46. package/dist/app/cli/chalk/build.js +100 -0
  47. package/dist/app/cli/chalk/dub.d.ts +51 -0
  48. package/dist/app/cli/chalk/dub.js +106 -0
  49. package/dist/app/cli/chalk/load-scene.d.ts +34 -0
  50. package/dist/app/cli/chalk/load-scene.js +117 -0
  51. package/dist/app/cli/chalk/main.d.ts +7 -0
  52. package/dist/app/cli/chalk/main.js +198 -0
  53. package/dist/app/cli/chalk/serve.d.ts +4 -0
  54. package/dist/app/cli/chalk/serve.js +28 -0
  55. package/dist/app/cli/chalk/snap.d.ts +65 -0
  56. package/dist/app/cli/chalk/snap.js +103 -0
  57. package/dist/app/cli/chalk/typecheck.d.ts +7 -0
  58. package/dist/app/cli/chalk/typecheck.js +51 -0
  59. package/dist/{cli → app/cli}/doctor.d.ts +4 -3
  60. package/dist/app/cli/doctor.js +617 -0
  61. package/dist/app/cli/grades.d.ts +14 -0
  62. package/dist/app/cli/grades.js +44 -0
  63. package/dist/{cli → app/cli}/init.d.ts +3 -1
  64. package/dist/app/cli/init.js +155 -0
  65. package/dist/app/cli/main.js +715 -0
  66. package/dist/app/cli/migrate.d.ts +58 -0
  67. package/dist/app/cli/migrate.js +253 -0
  68. package/dist/{cli → app/cli}/serve.d.ts +12 -5
  69. package/dist/app/cli/serve.js +98 -0
  70. package/dist/app/cli/shipped.d.ts +30 -0
  71. package/dist/app/cli/shipped.js +47 -0
  72. package/dist/app/cli/skeleton.d.ts +38 -0
  73. package/dist/app/cli/skeleton.js +161 -0
  74. package/dist/app/cli/skills.d.ts +55 -0
  75. package/dist/app/cli/skills.js +189 -0
  76. package/dist/app/cli/themes.d.ts +52 -0
  77. package/dist/app/cli/themes.js +148 -0
  78. package/dist/{cli → app/cli}/tutors.d.ts +15 -26
  79. package/dist/{cli → app/cli}/tutors.js +86 -110
  80. package/dist/app/cli/usage.d.ts +2 -0
  81. package/dist/app/cli/usage.js +30 -0
  82. package/dist/app/dictation/recognize.d.ts +18 -0
  83. package/dist/app/dictation/recognize.js +6 -0
  84. package/dist/app/dictation/route.d.ts +52 -0
  85. package/dist/app/dictation/route.js +510 -0
  86. package/dist/app/diff.d.ts +11 -0
  87. package/dist/app/diff.js +71 -0
  88. package/dist/app/http/access.d.ts +62 -0
  89. package/dist/app/http/access.js +180 -0
  90. package/dist/app/http/app.d.ts +246 -0
  91. package/dist/app/http/app.js +1212 -0
  92. package/dist/app/http/dev-activities.d.ts +115 -0
  93. package/dist/app/http/dev-activities.js +193 -0
  94. package/dist/app/http/dev-overview.d.ts +108 -0
  95. package/dist/app/http/dev-overview.js +209 -0
  96. package/dist/app/http/dev-tutor-files.d.ts +80 -0
  97. package/dist/app/http/dev-tutor-files.js +151 -0
  98. package/dist/app/http/parent-home.d.ts +37 -0
  99. package/dist/app/http/parent-home.js +203 -0
  100. package/dist/app/http/range.d.ts +9 -0
  101. package/dist/app/http/range.js +19 -0
  102. package/dist/app/http/raw-view.d.ts +117 -0
  103. package/dist/app/http/raw-view.js +149 -0
  104. package/dist/app/http/send-file.d.ts +7 -0
  105. package/dist/app/http/send-file.js +29 -0
  106. package/dist/{server → app/http}/stage.d.ts +9 -0
  107. package/dist/{server → app/http}/stage.js +34 -6
  108. package/dist/app/http/theme.d.ts +13 -0
  109. package/dist/app/http/theme.js +41 -0
  110. package/dist/app/machine/bailian.d.ts +28 -0
  111. package/dist/app/machine/bailian.js +88 -0
  112. package/dist/app/mock/mock-live.d.ts +16 -0
  113. package/dist/app/mock/mock-live.js +140 -0
  114. package/dist/{server → app/mock}/mock.d.ts +36 -5
  115. package/dist/app/mock/mock.js +1117 -0
  116. package/dist/app/replay.d.ts +94 -0
  117. package/dist/app/replay.js +170 -0
  118. package/dist/app/skills/analyze-doc.d.ts +3 -0
  119. package/dist/app/skills/analyze-doc.js +47 -0
  120. package/dist/app/skills/home-doc.d.ts +5 -0
  121. package/dist/app/skills/home-doc.js +112 -0
  122. package/dist/app/skills/tune-doc.d.ts +3 -0
  123. package/dist/app/skills/tune-doc.js +80 -0
  124. package/dist/app/talk/list.d.ts +11 -0
  125. package/dist/app/talk/list.js +9 -0
  126. package/dist/app/talk/route.d.ts +16 -0
  127. package/dist/app/talk/route.js +142 -0
  128. package/dist/app/workspace.d.ts +58 -0
  129. package/dist/{cli → app}/workspace.js +77 -52
  130. package/dist/app/ws/route.d.ts +25 -0
  131. package/dist/app/ws/route.js +29 -0
  132. package/dist/app/ws/ws.d.ts +31 -0
  133. package/dist/app/ws/ws.js +169 -0
  134. package/dist/board/canvas-chat.d.ts +97 -0
  135. package/dist/board/canvas-chat.js +175 -0
  136. package/dist/board/card-guards.d.ts +15 -0
  137. package/dist/board/card-guards.js +38 -0
  138. package/dist/board/cards/canvas.d.ts +41 -0
  139. package/dist/board/cards/canvas.js +83 -0
  140. package/dist/{cards → board/cards}/choice.js +0 -12
  141. package/dist/{cards → board/cards}/code.js +0 -3
  142. package/dist/board/cards/dictation.d.ts +42 -0
  143. package/dist/board/cards/dictation.js +105 -0
  144. package/dist/board/cards/docs.d.ts +47 -0
  145. package/dist/board/cards/docs.js +152 -0
  146. package/dist/{cards → board/cards}/image.js +1 -10
  147. package/dist/board/cards/index.d.ts +62 -0
  148. package/dist/board/cards/index.js +144 -0
  149. package/dist/{cards → board/cards}/kind.d.ts +10 -4
  150. package/dist/board/cards/kind.js +9 -0
  151. package/dist/board/cards/lecture.d.ts +26 -0
  152. package/dist/board/cards/lecture.js +62 -0
  153. package/dist/board/cards/paint.d.ts +38 -0
  154. package/dist/board/cards/paint.js +85 -0
  155. package/dist/board/cards/photo.d.ts +15 -0
  156. package/dist/board/cards/photo.js +29 -0
  157. package/dist/{cards → board/cards}/read.js +1 -10
  158. package/dist/board/cards/text.d.ts +20 -0
  159. package/dist/board/cards/text.js +59 -0
  160. package/dist/board/cards/tianzige.d.ts +16 -0
  161. package/dist/board/cards/tianzige.js +64 -0
  162. package/dist/board/cards/tutor.d.ts +72 -0
  163. package/dist/board/cards/tutor.js +134 -0
  164. package/dist/board/cards/word.d.ts +20 -0
  165. package/dist/board/cards/word.js +76 -0
  166. package/dist/board/lecture.d.ts +100 -0
  167. package/dist/board/lecture.js +204 -0
  168. package/dist/board/paper.d.ts +20 -0
  169. package/dist/board/paper.js +76 -0
  170. package/dist/board/parse.d.ts +120 -0
  171. package/dist/board/parse.js +330 -0
  172. package/dist/board/presentation.d.ts +295 -0
  173. package/dist/board/presentation.js +615 -0
  174. package/dist/board/sections.d.ts +16 -0
  175. package/dist/board/sections.js +130 -0
  176. package/dist/brain/api-tools.d.ts +8 -0
  177. package/dist/brain/api-tools.js +190 -0
  178. package/dist/brain/api.d.ts +62 -0
  179. package/dist/brain/api.js +411 -0
  180. package/dist/brain/cli/adapters.d.ts +60 -0
  181. package/dist/brain/cli/adapters.js +91 -0
  182. package/dist/brain/cli/qwen.d.ts +11 -0
  183. package/dist/brain/cli/qwen.js +141 -0
  184. package/dist/brain/cli/run-plan.d.ts +59 -0
  185. package/dist/brain/cli/run-plan.js +71 -0
  186. package/dist/brain/cli/run.d.ts +35 -0
  187. package/dist/brain/cli/run.js +256 -0
  188. package/dist/brain/cli/stream-json.d.ts +18 -0
  189. package/dist/brain/cli/stream-json.js +86 -0
  190. package/dist/brain/cli/types.d.ts +144 -0
  191. package/dist/brain/cli/types.js +3 -0
  192. package/dist/brain/cli/warm.d.ts +53 -0
  193. package/dist/brain/cli/warm.js +103 -0
  194. package/dist/brain/index.d.ts +145 -0
  195. package/dist/brain/index.js +74 -0
  196. package/dist/brain/stream.d.ts +20 -0
  197. package/dist/brain/stream.js +70 -0
  198. package/dist/brain/transcript.d.ts +45 -0
  199. package/dist/brain/transcript.js +132 -0
  200. package/dist/chalk/actions.d.ts +37 -0
  201. package/dist/chalk/actions.js +69 -0
  202. package/dist/chalk/bundle.d.ts +26 -0
  203. package/dist/chalk/bundle.js +69 -0
  204. package/dist/chalk/check.d.ts +28 -0
  205. package/dist/chalk/check.js +291 -0
  206. package/dist/chalk/circle.d.ts +64 -0
  207. package/dist/chalk/circle.js +193 -0
  208. package/dist/chalk/clock.d.ts +84 -0
  209. package/dist/chalk/clock.js +84 -0
  210. package/dist/chalk/geometry.d.ts +44 -0
  211. package/dist/chalk/geometry.js +139 -0
  212. package/dist/chalk/glyphs/capitals.d.ts +12 -0
  213. package/dist/chalk/glyphs/capitals.js +264 -0
  214. package/dist/chalk/glyphs/index.d.ts +21 -0
  215. package/dist/chalk/glyphs/index.js +18 -0
  216. package/dist/chalk/glyphs/letters.d.ts +13 -0
  217. package/dist/chalk/glyphs/letters.js +280 -0
  218. package/dist/chalk/glyphs/metrics.d.ts +33 -0
  219. package/dist/chalk/glyphs/metrics.js +28 -0
  220. package/dist/chalk/glyphs/registry.d.ts +7 -0
  221. package/dist/chalk/glyphs/registry.js +8 -0
  222. package/dist/chalk/glyphs/sample.d.ts +32 -0
  223. package/dist/chalk/glyphs/sample.js +102 -0
  224. package/dist/chalk/glyphs/skeleton.d.ts +64 -0
  225. package/dist/chalk/glyphs/skeleton.js +126 -0
  226. package/dist/chalk/glyphs/types.d.ts +58 -0
  227. package/dist/chalk/glyphs/types.js +17 -0
  228. package/dist/chalk/index.d.ts +23 -0
  229. package/dist/chalk/index.js +15 -0
  230. package/dist/chalk/manifest.d.ts +41 -0
  231. package/dist/chalk/manifest.js +6 -0
  232. package/dist/chalk/paint.d.ts +180 -0
  233. package/dist/chalk/paint.js +210 -0
  234. package/dist/chalk/pointer.d.ts +8 -0
  235. package/dist/chalk/pointer.js +21 -0
  236. package/dist/chalk/prepare.d.ts +11 -0
  237. package/dist/chalk/prepare.js +15 -0
  238. package/dist/chalk/scene-schema.d.ts +199 -0
  239. package/dist/chalk/scene-schema.js +91 -0
  240. package/dist/chalk/seed.d.ts +3 -0
  241. package/dist/chalk/seed.js +10 -0
  242. package/dist/chalk/text-metrics.d.ts +8 -0
  243. package/dist/chalk/text-metrics.js +156 -0
  244. package/dist/chalk/timeline.d.ts +47 -0
  245. package/dist/chalk/timeline.js +84 -0
  246. package/dist/chalk/types.d.ts +150 -0
  247. package/dist/chalk/types.js +8 -0
  248. package/dist/lib/index.d.ts +14 -12
  249. package/dist/lib/index.js +14 -12
  250. package/dist/media/draw.d.ts +23 -0
  251. package/dist/media/draw.js +44 -0
  252. package/dist/media/mp3.d.ts +6 -0
  253. package/dist/media/mp3.js +58 -0
  254. package/dist/media/mp4.d.ts +1 -0
  255. package/dist/media/mp4.js +58 -0
  256. package/dist/media/tts-voices.d.ts +18 -0
  257. package/dist/media/tts-voices.js +606 -0
  258. package/dist/media/tts.d.ts +56 -0
  259. package/dist/media/tts.js +174 -0
  260. package/dist/media/vision.d.ts +25 -0
  261. package/dist/media/vision.js +71 -0
  262. package/dist/memory/commit.d.ts +67 -0
  263. package/dist/memory/commit.js +130 -0
  264. package/dist/memory/context.d.ts +86 -0
  265. package/dist/memory/context.js +97 -0
  266. package/dist/memory/diary.d.ts +84 -0
  267. package/dist/memory/diary.js +183 -0
  268. package/dist/memory/grade.d.ts +2 -0
  269. package/dist/memory/grade.js +7 -0
  270. package/dist/{lib → memory}/plan.d.ts +1 -1
  271. package/dist/{lib → memory}/plan.js +1 -1
  272. package/dist/memory/proposals.d.ts +11 -0
  273. package/dist/memory/proposals.js +43 -0
  274. package/dist/memory/retrieval.d.ts +44 -0
  275. package/dist/memory/retrieval.js +157 -0
  276. package/dist/{lib → memory}/timetable.d.ts +0 -3
  277. package/dist/{lib → memory}/timetable.js +0 -11
  278. package/dist/memory/vault-notes.d.ts +165 -0
  279. package/dist/memory/vault-notes.js +359 -0
  280. package/dist/memory/vault.d.ts +70 -0
  281. package/dist/memory/vault.js +169 -0
  282. package/dist/realtime/bailian.d.ts +120 -0
  283. package/dist/realtime/bailian.js +288 -0
  284. package/dist/realtime/cues.d.ts +51 -0
  285. package/dist/realtime/cues.js +94 -0
  286. package/dist/realtime/listen.d.ts +32 -0
  287. package/dist/realtime/listen.js +53 -0
  288. package/dist/realtime/preview.d.ts +23 -0
  289. package/dist/realtime/preview.js +38 -0
  290. package/dist/realtime/prompt.d.ts +8 -0
  291. package/dist/realtime/prompt.js +13 -0
  292. package/dist/realtime/voices.d.ts +19 -0
  293. package/dist/realtime/voices.js +71 -0
  294. package/dist/runtime/activities.d.ts +17 -0
  295. package/dist/runtime/activities.js +46 -0
  296. package/dist/runtime/activity-state.d.ts +22 -0
  297. package/dist/runtime/activity-state.js +83 -0
  298. package/dist/runtime/activity.d.ts +63 -0
  299. package/dist/runtime/activity.js +428 -0
  300. package/dist/runtime/agent-file.d.ts +24 -0
  301. package/dist/runtime/agent-file.js +59 -0
  302. package/dist/runtime/auto-bookkeep.d.ts +30 -0
  303. package/dist/runtime/auto-bookkeep.js +84 -0
  304. package/dist/{lib → runtime/context}/context-pack.d.ts +3 -3
  305. package/dist/runtime/context/context-pack.js +182 -0
  306. package/dist/runtime/context/thread-digest.d.ts +4 -0
  307. package/dist/runtime/context/thread-digest.js +35 -0
  308. package/dist/runtime/context/tutor-rules.d.ts +25 -0
  309. package/dist/runtime/context/tutor-rules.js +47 -0
  310. package/dist/runtime/delivery/delivery.d.ts +94 -0
  311. package/dist/runtime/delivery/delivery.js +145 -0
  312. package/dist/runtime/delivery/playback.d.ts +25 -0
  313. package/dist/runtime/delivery/playback.js +29 -0
  314. package/dist/runtime/delivery/player.d.ts +145 -0
  315. package/dist/runtime/delivery/player.js +221 -0
  316. package/dist/runtime/delivery/queue.d.ts +89 -0
  317. package/dist/runtime/delivery/queue.js +59 -0
  318. package/dist/runtime/home/edit.d.ts +39 -0
  319. package/dist/runtime/home/edit.js +132 -0
  320. package/dist/runtime/home/home.d.ts +180 -0
  321. package/dist/runtime/home/home.js +311 -0
  322. package/dist/runtime/home/store.d.ts +142 -0
  323. package/dist/runtime/home/store.js +440 -0
  324. package/dist/runtime/journal/conversation.d.ts +46 -0
  325. package/dist/runtime/journal/conversation.js +89 -0
  326. package/dist/runtime/journal/events.d.ts +27 -0
  327. package/dist/runtime/journal/events.js +136 -0
  328. package/dist/runtime/journal/kid-log.d.ts +105 -0
  329. package/dist/runtime/journal/kid-log.js +133 -0
  330. package/dist/runtime/journal/ledger.d.ts +17 -0
  331. package/dist/{lib → runtime/journal}/ledger.js +7 -40
  332. package/dist/runtime/journal/mix.d.ts +33 -0
  333. package/dist/runtime/journal/mix.js +88 -0
  334. package/dist/runtime/journal/mouth-index.d.ts +26 -0
  335. package/dist/runtime/journal/mouth-index.js +34 -0
  336. package/dist/runtime/journal/mouth.d.ts +54 -0
  337. package/dist/runtime/journal/mouth.js +102 -0
  338. package/dist/runtime/journal/recorder.d.ts +46 -0
  339. package/dist/runtime/journal/recorder.js +58 -0
  340. package/dist/runtime/journal/store.d.ts +123 -0
  341. package/dist/runtime/journal/store.js +316 -0
  342. package/dist/runtime/kid-input.d.ts +16 -0
  343. package/dist/runtime/kid-input.js +195 -0
  344. package/dist/runtime/kid-view.d.ts +124 -0
  345. package/dist/runtime/kid-view.js +157 -0
  346. package/dist/runtime/lecture.d.ts +86 -0
  347. package/dist/runtime/lecture.js +237 -0
  348. package/dist/runtime/live/call.d.ts +219 -0
  349. package/dist/runtime/live/call.js +1211 -0
  350. package/dist/runtime/live/turns.d.ts +48 -0
  351. package/dist/runtime/live/turns.js +102 -0
  352. package/dist/runtime/runner.d.ts +289 -0
  353. package/dist/runtime/runner.js +898 -0
  354. package/dist/runtime/talk-run.d.ts +21 -0
  355. package/dist/runtime/talk-run.js +34 -0
  356. package/dist/scenes/dictation/match.d.ts +57 -0
  357. package/dist/scenes/dictation/match.js +255 -0
  358. package/dist/scenes/dictation/recognize.d.ts +86 -0
  359. package/dist/scenes/dictation/recognize.js +163 -0
  360. package/dist/scenes/dictation/store.d.ts +112 -0
  361. package/dist/scenes/dictation/store.js +99 -0
  362. package/dist/scenes/look.d.ts +26 -0
  363. package/dist/scenes/look.js +1 -0
  364. package/dist/scenes/paint/painter.d.ts +84 -0
  365. package/dist/scenes/paint/painter.js +170 -0
  366. package/dist/scenes/paint/prompt.d.ts +23 -0
  367. package/dist/scenes/paint/prompt.js +36 -0
  368. package/dist/scenes/talk/en-words.d.ts +8 -0
  369. package/dist/scenes/talk/en-words.js +44 -0
  370. package/dist/scenes/talk/list.d.ts +44 -0
  371. package/dist/scenes/talk/list.js +88 -0
  372. package/dist/scenes/talk/store.d.ts +27 -0
  373. package/dist/scenes/talk/store.js +61 -0
  374. package/dist/scenes/talk/warmup.d.ts +16 -0
  375. package/dist/scenes/talk/warmup.js +39 -0
  376. package/dist/schema/activity.d.ts +149 -0
  377. package/dist/schema/activity.js +113 -0
  378. package/dist/schema/board.d.ts +143 -2
  379. package/dist/schema/board.js +15 -3
  380. package/dist/schema/config.d.ts +309 -94
  381. package/dist/schema/config.js +259 -72
  382. package/dist/schema/context-pack.d.ts +76 -14
  383. package/dist/schema/context-pack.js +91 -10
  384. package/dist/{lib/conversation.d.ts → schema/conversation-files.d.ts} +11 -33
  385. package/dist/schema/conversation-files.js +26 -0
  386. package/dist/schema/conversation.d.ts +385 -49
  387. package/dist/schema/conversation.js +135 -19
  388. package/dist/schema/events.d.ts +138 -0
  389. package/dist/schema/events.js +1 -0
  390. package/dist/schema/home.d.ts +46 -0
  391. package/dist/schema/home.js +30 -0
  392. package/dist/schema/index.d.ts +14 -3
  393. package/dist/schema/index.js +14 -3
  394. package/dist/schema/kid-device.d.ts +20 -0
  395. package/dist/schema/kid-device.js +32 -0
  396. package/dist/schema/ledger.d.ts +8 -63
  397. package/dist/schema/ledger.js +7 -31
  398. package/dist/schema/memory.d.ts +73 -0
  399. package/dist/schema/memory.js +47 -0
  400. package/dist/schema/plan.d.ts +2 -2
  401. package/dist/schema/plan.js +2 -2
  402. package/dist/schema/sections.d.ts +32 -25
  403. package/dist/schema/sections.js +21 -22
  404. package/dist/schema/theme.d.ts +25 -0
  405. package/dist/schema/theme.js +26 -0
  406. package/dist/schema/timetable.d.ts +2 -2
  407. package/dist/schema/timetable.js +2 -2
  408. package/dist/schema/workspace.d.ts +41 -0
  409. package/dist/schema/workspace.js +9 -0
  410. package/dist/shared/errors.d.ts +8 -0
  411. package/dist/shared/errors.js +13 -0
  412. package/dist/shared/home.d.ts +2 -0
  413. package/dist/shared/home.js +16 -0
  414. package/dist/shared/human-notes.d.ts +5 -0
  415. package/dist/shared/human-notes.js +7 -0
  416. package/dist/shared/qianwen.d.ts +50 -0
  417. package/dist/shared/qianwen.js +109 -0
  418. package/dist/shared/time.d.ts +9 -0
  419. package/dist/shared/time.js +22 -0
  420. package/dist/shared/tokens.d.ts +18 -0
  421. package/dist/shared/tokens.js +11 -0
  422. package/dist/shared/wav.d.ts +10 -0
  423. package/dist/shared/wav.js +50 -0
  424. package/dist/stage/chunk-226TNLQA.js +129 -0
  425. package/dist/stage/chunk-24LGQEKE.js +1 -0
  426. package/dist/stage/chunk-25XV6UY3.js +10 -0
  427. package/dist/stage/chunk-2AZI3NHJ.js +1 -0
  428. package/dist/stage/chunk-2BQZTTBE.js +1 -0
  429. package/dist/stage/chunk-2M7CGY3Y.js +11 -0
  430. package/dist/stage/chunk-2VR4WFQ7.js +10 -0
  431. package/dist/stage/chunk-2ZYXBUWG.js +9 -0
  432. package/dist/stage/chunk-32LAWMGY.js +1 -0
  433. package/dist/stage/chunk-3LEMTSOO.js +11 -0
  434. package/dist/stage/chunk-3QCKGZYE.js +32 -0
  435. package/dist/stage/chunk-44P66WFA.js +1 -0
  436. package/dist/stage/chunk-4AM6FRR6.js +7 -0
  437. package/dist/stage/chunk-4QDE4SUK.js +1 -0
  438. package/dist/stage/chunk-4QESHV3U.js +1 -0
  439. package/dist/stage/chunk-4SG5QPHB.js +2 -0
  440. package/dist/stage/chunk-4T4UVCOC.js +1 -0
  441. package/dist/stage/chunk-4WUEPPG3.js +34 -0
  442. package/dist/stage/chunk-4YCN6UZ5.js +99 -0
  443. package/dist/stage/chunk-5V7ZY2AP.js +1 -0
  444. package/dist/stage/chunk-5VS5Y2VJ.js +6 -0
  445. package/dist/stage/chunk-5W4NO2ZD.js +62 -0
  446. package/dist/stage/chunk-65CRNICM.js +1 -0
  447. package/dist/stage/chunk-66MULO7F.js +5 -0
  448. package/dist/stage/chunk-6COFQTBS.js +162 -0
  449. package/dist/stage/chunk-6VZG3M3I.js +8 -0
  450. package/dist/stage/chunk-7HVDH43T.js +1 -0
  451. package/dist/stage/chunk-7JLJN4EZ.js +8 -0
  452. package/dist/stage/chunk-7QDSP4LN.js +1 -0
  453. package/dist/stage/chunk-7R6OQAO3.js +1 -0
  454. package/dist/stage/chunk-7VTTHZKW.js +7 -0
  455. package/dist/stage/chunk-ATHR5KEN.js +10 -0
  456. package/dist/stage/chunk-B6R5LTP2.js +36 -0
  457. package/dist/stage/chunk-BD4WE264.js +1 -0
  458. package/dist/stage/chunk-BONANU47.js +206 -0
  459. package/dist/stage/chunk-BTVW7OFK.js +89 -0
  460. package/dist/stage/chunk-BUTJIDHG.js +8 -0
  461. package/dist/stage/chunk-C2IPYMML.js +84 -0
  462. package/dist/stage/chunk-C54FTPPV.js +9 -0
  463. package/dist/stage/chunk-C6LOUF2Z.js +90 -0
  464. package/dist/stage/chunk-CFF3PILO.js +339 -0
  465. package/dist/stage/chunk-CI2FQ2JY.js +9 -0
  466. package/dist/stage/chunk-CW5O4RV7.js +12 -0
  467. package/dist/stage/chunk-CYABNQYD.js +1 -0
  468. package/dist/stage/chunk-D7FFA4NS.js +15 -0
  469. package/dist/stage/chunk-DUNNXU6Z.js +8 -0
  470. package/dist/stage/chunk-E3E4Q6JF.js +6 -0
  471. package/dist/stage/chunk-EB3U3LH7.js +9 -0
  472. package/dist/stage/chunk-EGSZ736B.js +8 -0
  473. package/dist/stage/chunk-EOBXW5VQ.js +2 -0
  474. package/dist/stage/chunk-ERZC3B7Y.js +11 -0
  475. package/dist/stage/chunk-ESDOOBIH.js +11 -0
  476. package/dist/stage/chunk-EVU4QAL4.js +178 -0
  477. package/dist/stage/chunk-EVVZI2NY.js +39 -0
  478. package/dist/stage/chunk-FBKAZUKD.js +39 -0
  479. package/dist/stage/chunk-FDVKYQJN.js +1 -0
  480. package/dist/stage/chunk-FGPVYHVR.js +5 -0
  481. package/dist/stage/chunk-FHUD4AZC.js +1 -0
  482. package/dist/stage/chunk-FKUJ2DMY.js +96 -0
  483. package/dist/stage/chunk-FNZGVIJV.js +1 -0
  484. package/dist/stage/chunk-GBYSEGYM.js +78 -0
  485. package/dist/stage/chunk-GCO4TDHX.js +1 -0
  486. package/dist/stage/chunk-GKTML2LG.js +10 -0
  487. package/dist/stage/chunk-GMDIHHXQ.js +11 -0
  488. package/dist/stage/chunk-GOUNACI3.js +10 -0
  489. package/dist/stage/chunk-GXAYATPF.js +3 -0
  490. package/dist/stage/chunk-H2K2DDXV.js +8 -0
  491. package/dist/stage/chunk-H3UJI6ZY.js +13 -0
  492. package/dist/stage/chunk-H6PUGCME.js +7 -0
  493. package/dist/stage/chunk-HNBUIMIG.js +1 -0
  494. package/dist/stage/chunk-HRZY2BJQ.js +10 -0
  495. package/dist/stage/chunk-HSPJGALW.js +30 -0
  496. package/dist/stage/chunk-IBYORHIP.js +25 -0
  497. package/dist/stage/chunk-IHF4EWTY.js +1 -0
  498. package/dist/stage/chunk-ISBRPNKI.js +1 -0
  499. package/dist/stage/chunk-IZ3OI3C2.js +2 -0
  500. package/dist/stage/chunk-JEFZAC2R.js +1 -0
  501. package/dist/stage/chunk-JFIGRDPO.js +1 -0
  502. package/dist/stage/chunk-JFVYBOOC.js +9 -0
  503. package/dist/stage/chunk-JGD4TUTQ.js +1 -0
  504. package/dist/stage/chunk-JO4BEHDH.js +4 -0
  505. package/dist/stage/chunk-JOWBS42C.js +1 -0
  506. package/dist/stage/chunk-JP3TM2TG.js +1 -0
  507. package/dist/stage/chunk-JVK2C52O.js +1 -0
  508. package/dist/stage/chunk-K4I76XBX.js +14 -0
  509. package/dist/stage/chunk-KA6CZZ4M.js +1 -0
  510. package/dist/stage/chunk-KESSJ36M.js +1 -0
  511. package/dist/stage/chunk-LKATEVRU.js +1 -0
  512. package/dist/stage/chunk-LS4EJ2EI.js +1 -0
  513. package/dist/stage/chunk-LUKJQC2X.js +70 -0
  514. package/dist/stage/chunk-LWULR3SM.js +1 -0
  515. package/dist/stage/chunk-LWVRFMKX.js +2 -0
  516. package/dist/stage/chunk-LXC4ZBPZ.js +1 -0
  517. package/dist/stage/chunk-M2UP255H.js +1 -0
  518. package/dist/stage/chunk-MAPPXUZQ.js +231 -0
  519. package/dist/stage/chunk-MBMPW7Z5.js +1 -0
  520. package/dist/stage/chunk-MD3HMMTK.js +1 -0
  521. package/dist/stage/chunk-MLPCUIKR.js +17 -0
  522. package/dist/stage/chunk-MNQIRPDQ.js +8 -0
  523. package/dist/stage/chunk-MRG7MJVS.js +1 -0
  524. package/dist/stage/chunk-MU6EXW72.js +10 -0
  525. package/dist/stage/chunk-MVU2X6LU.js +4 -0
  526. package/dist/stage/chunk-N6UA5CZV.js +36 -0
  527. package/dist/stage/chunk-NLZIT2TJ.js +7 -0
  528. package/dist/stage/chunk-NOJR3J7M.js +1 -0
  529. package/dist/stage/chunk-NT7ARDOL.js +1 -0
  530. package/dist/stage/chunk-NWOGMPZH.js +1 -0
  531. package/dist/stage/chunk-NXE4KMG3.js +40 -0
  532. package/dist/stage/chunk-O4YCZXD2.js +257 -0
  533. package/dist/stage/chunk-OAJZ7HLK.js +1 -0
  534. package/dist/stage/chunk-OCFCFASO.js +1 -0
  535. package/dist/stage/chunk-ODGPG5RY.js +7 -0
  536. package/dist/stage/chunk-ODUEA52Q.js +3 -0
  537. package/dist/stage/chunk-OGDJ3FCI.js +1 -0
  538. package/dist/stage/chunk-OLDJ55TT.js +1 -0
  539. package/dist/stage/chunk-OOCL4ATI.js +2 -0
  540. package/dist/stage/chunk-OQEFDUDV.js +1 -0
  541. package/dist/stage/chunk-OQWVEWG7.js +4 -0
  542. package/dist/stage/chunk-OUIX6BGK.js +1 -0
  543. package/dist/stage/chunk-OV7OZYUO.js +7 -0
  544. package/dist/stage/chunk-PFGDY33O.js +1 -0
  545. package/dist/stage/chunk-PFJDUJB3.js +139 -0
  546. package/dist/stage/chunk-PGEW76ER.js +1 -0
  547. package/dist/stage/chunk-PP76TAQX.js +32 -0
  548. package/dist/stage/chunk-PTBOP4OT.js +2 -0
  549. package/dist/stage/chunk-PX2RVHCK.js +1 -0
  550. package/dist/stage/chunk-Q7K3PNAD.js +1 -0
  551. package/dist/stage/chunk-QDDPLZDB.js +1 -0
  552. package/dist/stage/chunk-QLGLZ77F.js +1 -0
  553. package/dist/stage/chunk-QOPFDFHI.js +1 -0
  554. package/dist/stage/chunk-QXT4KAEJ.js +1 -0
  555. package/dist/stage/chunk-R4YVZCIT.js +1 -0
  556. package/dist/stage/chunk-R6P6EHWA.js +62 -0
  557. package/dist/stage/chunk-RCH3OXBI.js +9 -0
  558. package/dist/stage/chunk-RHPE44I2.js +1 -0
  559. package/dist/stage/chunk-RJ2R4FVC.js +1 -0
  560. package/dist/stage/chunk-RJH2YVTD.js +1 -0
  561. package/dist/stage/chunk-RLWWW5OB.js +6 -0
  562. package/dist/stage/chunk-S3WO35Z7.js +120 -0
  563. package/dist/stage/chunk-S7ZGX6MW.js +1 -0
  564. package/dist/stage/chunk-SIAWX27B.js +1 -0
  565. package/dist/stage/chunk-SLG4X622.js +1 -0
  566. package/dist/stage/chunk-SLJRBC77.js +168 -0
  567. package/dist/stage/chunk-SRORWQJZ.js +1 -0
  568. package/dist/stage/chunk-STZTUIIF.js +2 -0
  569. package/dist/stage/chunk-SVQ6MWNV.js +9 -0
  570. package/dist/stage/chunk-TL3HLL2S.js +132 -0
  571. package/dist/stage/chunk-U3DOE6SF.js +24 -0
  572. package/dist/stage/chunk-UABQIZKW.js +6 -0
  573. package/dist/stage/chunk-UDK3R764.js +1 -0
  574. package/dist/stage/chunk-UFF4E54B.js +41 -0
  575. package/dist/stage/chunk-UFP5Q4AY.js +1 -0
  576. package/dist/stage/chunk-UMH2TSW2.js +72 -0
  577. package/dist/stage/chunk-UTASVNF5.js +10 -0
  578. package/dist/stage/chunk-UW7ML5ML.js +88 -0
  579. package/dist/stage/chunk-V3J7F6OP.js +1 -0
  580. package/dist/stage/chunk-VEHP5B5Q.js +5 -0
  581. package/dist/stage/chunk-VRXWB733.js +9 -0
  582. package/dist/stage/chunk-VVDHBBS5.js +5 -0
  583. package/dist/stage/chunk-VYFOH6FU.js +106 -0
  584. package/dist/stage/chunk-W3VZTLQS.js +3 -0
  585. package/dist/stage/chunk-W7WNRWTZ.js +8 -0
  586. package/dist/stage/chunk-WHUCV53C.js +1 -0
  587. package/dist/stage/chunk-WULMYHIF.js +1 -0
  588. package/dist/stage/chunk-X54EX7AW.js +9 -0
  589. package/dist/stage/chunk-X565ISZM.js +1 -0
  590. package/dist/stage/chunk-XGZMDECB.js +1 -0
  591. package/dist/stage/chunk-XHONC4RF.js +172 -0
  592. package/dist/stage/chunk-XIK4XQ6E.js +24 -0
  593. package/dist/stage/chunk-XJQQWFTE.js +1 -0
  594. package/dist/stage/chunk-XM4WOU3I.js +13 -0
  595. package/dist/stage/chunk-XM7Y5HP5.js +38 -0
  596. package/dist/stage/chunk-XNYYRGD5.js +292 -0
  597. package/dist/stage/chunk-XOYVR3SV.js +1 -0
  598. package/dist/stage/chunk-XQIW5HCE.js +1 -0
  599. package/dist/stage/chunk-YEWL7FUW.js +8 -0
  600. package/dist/stage/chunk-YI55PY3V.js +1 -0
  601. package/dist/stage/chunk-YM63HI6W.js +1 -0
  602. package/dist/stage/chunk-YNLGLU4P.js +9 -0
  603. package/dist/stage/chunk-YTNMNOWP.js +1 -0
  604. package/dist/stage/chunk-YV62XKTC.js +1 -0
  605. package/dist/stage/chunk-YVBA3QW6.js +1 -0
  606. package/dist/stage/chunk-Z2SY2HOC.js +1 -0
  607. package/dist/stage/chunk-ZBTCQEBK.js +10 -0
  608. package/dist/stage/chunk-ZCUFN74D.js +1 -0
  609. package/dist/stage/chunk-ZHOULXEJ.js +11 -0
  610. package/dist/stage/chunk-ZTRZIET2.js +1 -0
  611. package/dist/stage/index.html +1 -0
  612. package/dist/stage/stage.css +1 -1
  613. package/dist/stage/stage.js +1 -4383
  614. package/dist/ui/dev/dev-page.d.ts +1 -0
  615. package/dist/ui/dev/dev-page.js +2248 -0
  616. package/dist/ui/dev/dev-theme.d.ts +6 -0
  617. package/dist/ui/dev/dev-theme.js +67 -0
  618. package/dist/ui/dev/qr-page.d.ts +8 -0
  619. package/dist/ui/dev/qr-page.js +61 -0
  620. package/dist/ui/dev/voice-gallery-page.d.ts +1 -0
  621. package/dist/ui/dev/voice-gallery-page.js +121 -0
  622. package/dist/ui/dev/voice-scenes.d.ts +21 -0
  623. package/dist/ui/dev/voice-scenes.js +30 -0
  624. package/dist/ui/dictation/en-box.d.ts +2 -0
  625. package/dist/ui/dictation/en-box.js +86 -0
  626. package/dist/ui/dictation/en-page.d.ts +1 -0
  627. package/dist/ui/dictation/en-page.js +484 -0
  628. package/dist/ui/dictation/page.d.ts +1 -0
  629. package/dist/ui/dictation/page.js +1084 -0
  630. package/dist/ui/dictation/parent-page.d.ts +1 -0
  631. package/dist/ui/dictation/parent-page.js +234 -0
  632. package/dist/ui/dictation/reel-mode.d.ts +1 -0
  633. package/dist/ui/dictation/reel-mode.js +87 -0
  634. package/dist/ui/dictation/reel-page.d.ts +1 -0
  635. package/dist/ui/dictation/reel-page.js +62 -0
  636. package/dist/ui/dictation/reel.d.ts +163 -0
  637. package/dist/ui/dictation/reel.js +436 -0
  638. package/dist/ui/dictation/ui.d.ts +44 -0
  639. package/dist/ui/dictation/ui.js +80 -0
  640. package/dist/ui/dictation/unlock.d.ts +7 -0
  641. package/dist/ui/dictation/unlock.js +16 -0
  642. package/dist/ui/kid/audio-client.d.ts +11 -0
  643. package/dist/ui/kid/audio-client.js +74 -0
  644. package/dist/ui/kid/board-mark-art.d.ts +37 -0
  645. package/dist/ui/kid/board-mark-art.js +5 -0
  646. package/dist/ui/kid/board-mark.d.ts +24 -0
  647. package/dist/ui/kid/board-mark.js +58 -0
  648. package/dist/ui/kid/kid-log.d.ts +15 -0
  649. package/dist/ui/kid/kid-log.js +87 -0
  650. package/dist/ui/kid/kid-nav.d.ts +11 -0
  651. package/dist/ui/kid/kid-nav.js +22 -0
  652. package/dist/ui/kid/kid-page.d.ts +9 -0
  653. package/dist/ui/kid/kid-page.js +3719 -0
  654. package/dist/ui/kid/letters.d.ts +26 -0
  655. package/dist/ui/kid/letters.js +51 -0
  656. package/dist/ui/kid/photo-edit.d.ts +83 -0
  657. package/dist/ui/kid/photo-edit.js +106 -0
  658. package/dist/ui/kid/photo-ui.d.ts +23 -0
  659. package/dist/ui/kid/photo-ui.js +60 -0
  660. package/dist/ui/kid/reel.d.ts +419 -0
  661. package/dist/ui/kid/reel.js +648 -0
  662. package/dist/ui/kid/tianzige.d.ts +8 -0
  663. package/dist/ui/kid/tianzige.js +45 -0
  664. package/dist/ui/kid/tutor-face.d.ts +35 -0
  665. package/dist/ui/kid/tutor-face.js +84 -0
  666. package/dist/ui/kid/voice-ui.d.ts +70 -0
  667. package/dist/ui/kid/voice-ui.js +316 -0
  668. package/dist/ui/kid/voice-view.d.ts +71 -0
  669. package/dist/ui/kid/voice-view.js +75 -0
  670. package/dist/ui/kid/word-draw.d.ts +2 -0
  671. package/dist/ui/kid/word-draw.js +107 -0
  672. package/dist/ui/kid/word-emoji.d.ts +10 -0
  673. package/dist/ui/kid/word-emoji.js +66 -0
  674. package/dist/ui/kid/word-layout.d.ts +25 -0
  675. package/dist/ui/kid/word-layout.js +29 -0
  676. package/dist/ui/parent/parent-home-page.d.ts +1 -0
  677. package/dist/ui/parent/parent-home-page.js +414 -0
  678. package/dist/ui/parent/parent-page.d.ts +2 -0
  679. package/dist/ui/parent/parent-page.js +507 -0
  680. package/dist/ui/shared/brand.d.ts +36 -0
  681. package/dist/ui/shared/brand.js +51 -0
  682. package/dist/ui/shared/favicon.d.ts +12 -0
  683. package/dist/ui/shared/favicon.js +96 -0
  684. package/dist/ui/shared/icon.d.ts +9 -0
  685. package/dist/ui/shared/icon.js +35 -0
  686. package/dist/ui/shared/inline-lib.d.ts +1 -0
  687. package/dist/ui/shared/inline-lib.js +28 -0
  688. package/dist/ui/shared/logo.d.ts +31 -0
  689. package/dist/ui/shared/logo.js +43 -0
  690. package/dist/ui/shared/page-dom.d.ts +12 -0
  691. package/dist/ui/shared/page-dom.js +36 -0
  692. package/dist/ui/shared/png.d.ts +1 -0
  693. package/dist/ui/shared/png.js +45 -0
  694. package/dist/ui/shared/qr-svg.d.ts +3 -0
  695. package/dist/ui/shared/qr-svg.js +32 -0
  696. package/dist/ui/shared/qr.d.ts +14 -0
  697. package/dist/ui/shared/qr.js +281 -0
  698. package/dist/ui/shared/reel-dock.d.ts +22 -0
  699. package/dist/ui/shared/reel-dock.js +365 -0
  700. package/dist/ui/shared/tutor-color.d.ts +15 -0
  701. package/dist/ui/shared/tutor-color.js +47 -0
  702. package/dist/ui/talk/page.d.ts +6 -0
  703. package/dist/ui/talk/page.js +294 -0
  704. package/grades/grade-2/README.md +11 -0
  705. package/grades/grade-2/VALIDATION.md +41 -0
  706. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273.md +157 -0
  707. 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
  708. 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
  709. 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
  710. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235.md +64 -0
  711. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235./344/276/213/345/255/220.md +31 -0
  712. package/grades/grade-2/agents/chinese-tutor/activities//345/220/254/345/206/231.md +48 -0
  713. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +79 -0
  714. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  715. package/grades/grade-2/agents/chinese-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  716. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271.md +81 -0
  717. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  718. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235.md +94 -0
  719. 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
  720. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +82 -0
  721. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  722. package/grades/grade-2/agents/chinese-tutor.md +59 -0
  723. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276.md +149 -0
  724. 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
  725. package/grades/grade-2/agents/english-tutor/activities//345/220/254/345/206/231.md +47 -0
  726. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +78 -0
  727. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  728. package/grades/grade-2/agents/english-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  729. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271.md +80 -0
  730. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  731. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +86 -0
  732. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  733. package/grades/grade-2/agents/english-tutor.md +57 -0
  734. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +78 -0
  735. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  736. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202.md +56 -0
  737. 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
  738. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271.md +80 -0
  739. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  740. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +81 -0
  741. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  742. package/grades/grade-2/agents/math-tutor.md +51 -0
  743. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/index.json +44 -0
  744. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-1.mp3 +0 -0
  745. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-2.mp3 +0 -0
  746. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-3.mp3 +0 -0
  747. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-4.mp3 +0 -0
  748. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-5.mp3 +0 -0
  749. package/grades/grade-2/examples/2026-10-27-pingjunfen/bake.json +1 -0
  750. package/grades/grade-2/examples/2026-10-27-pingjunfen/manifest.json +63 -0
  751. package/grades/grade-2/examples/2026-10-27-pingjunfen/scene.json +247 -0
  752. package/grades/grade-2/examples/2026-10-27-pingjunfen.md +40 -0
  753. package/grades/grade-2/examples/2026-10-27-pingjunfen.ts +26 -0
  754. package/grades/grade-2/examples//345/271/263/345/235/207/345/210/206./344/276/213/345/255/220.md +24 -0
  755. package/grades/grade-2/examples//346/225/260/345/255/246/345/271/263/345/235/207/345/210/206.md +42 -0
  756. package/grades/grade-2/validation/2026-10-27.json +4410 -0
  757. package/package.json +26 -15
  758. package/skills/chalk-cli/SKILL.md +62 -0
  759. package/skills/chalk-scene/SKILL.md +91 -0
  760. package/skills/chalk-teaching/SKILL.md +82 -0
  761. 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
  762. package/skills/chalk-teaching/models//345/207/221/345/215/201.md +7 -0
  763. package/skills/chalk-teaching/models//345/221/250/346/234/237/350/247/204/345/276/213.md +6 -0
  764. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/345/242/236/345/207/217.md +6 -0
  765. 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
  766. 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
  767. package/skills/chalk-teaching/models//345/260/217/346/243/222/350/277/233/344/275/215/345/212/240.md +7 -0
  768. package/skills/chalk-teaching/models//345/260/217/346/243/222/351/200/200/344/275/215/345/207/217.md +6 -0
  769. package/skills/chalk-teaching/models//346/216/222/351/230/237/347/202/271/351/230/265.md +7 -0
  770. package/skills/chalk-teaching/models//346/227/266/351/227/264/346/225/260/350/275/264.md +6 -0
  771. package/skills/chalk-teaching/models//346/245/274/345/261/202/351/227/264/351/232/224/345/233/276.md +7 -0
  772. package/skills/chalk-teaching/models//347/240/264/345/215/201.md +7 -0
  773. package/skills/chalk-teaching/models//347/253/226/345/274/217/351/200/200/344/275/215.md +6 -0
  774. package/skills/chalk-teaching/models//347/272/277/346/256/265/345/233/276.md +7 -0
  775. package/skills/chalk-teaching/models-index.md +24 -0
  776. 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
  777. package/skills/chalk-teaching/references//350/257/264/346/230/216/346/226/207/344/273/266.md +102 -0
  778. package/skills/chalk-verify/SKILL.md +57 -0
  779. package/skills/chalk-verify/references//350/257/204/345/210/244/346/240/207/345/207/206.md +69 -0
  780. package/skills/cotutor-analyze/SKILL.md +106 -0
  781. package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +31 -0
  782. package/skills/cotutor-board/SKILL.md +373 -0
  783. package/skills/cotutor-board/references/README.md +38 -0
  784. package/skills/cotutor-board/references/canvas.md +68 -0
  785. package/skills/cotutor-board/references/choice.md +55 -0
  786. package/skills/cotutor-board/references/code.md +46 -0
  787. package/skills/cotutor-board/references/image.md +52 -0
  788. package/skills/cotutor-board/references/lecture.md +69 -0
  789. package/skills/cotutor-board/references/paint.md +77 -0
  790. package/skills/cotutor-board/references/photo.md +61 -0
  791. package/skills/cotutor-board/references/read.md +51 -0
  792. package/skills/cotutor-board/references/text.md +69 -0
  793. package/skills/cotutor-board/references/tianzige.md +78 -0
  794. package/skills/cotutor-board/references/word.md +91 -0
  795. package/skills/cotutor-home/SKILL.md +169 -0
  796. package/skills/cotutor-home/references/dictation.md +97 -0
  797. package/skills/cotutor-home/references/tutor.md +148 -0
  798. package/skills/cotutor-home/references//345/221/275/344/273/244.md +21 -0
  799. package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +142 -0
  800. package/skills/cotutor-tune/SKILL.md +147 -0
  801. package/skills/cotutor-tune/references//345/255/227/346/256/265.md +50 -0
  802. package/skills/cotutor-tutor/SKILL.md +261 -0
  803. package/skills/cotutor-tutor/references//344/270/212/344/270/213/346/226/207/345/214/205.md +78 -0
  804. package/themes/default/kid.css +86 -0
  805. package/themes/default/theme.json +26 -0
  806. package/agents/chinese-tutor.md +0 -67
  807. package/agents/homework-tutor.md +0 -17
  808. package/agents/math-tutor.md +0 -68
  809. package/agents/planner.md +0 -18
  810. package/agents/reading-tutor.md +0 -65
  811. package/agents/scene-maker.md +0 -41
  812. package/dist/cards/canvas.d.ts +0 -22
  813. package/dist/cards/canvas.js +0 -65
  814. package/dist/cards/fill.d.ts +0 -14
  815. package/dist/cards/fill.js +0 -64
  816. package/dist/cards/index.d.ts +0 -48
  817. package/dist/cards/index.js +0 -115
  818. package/dist/cards/kind.js +0 -7
  819. package/dist/cards/scene.d.ts +0 -24
  820. package/dist/cards/scene.js +0 -67
  821. package/dist/cards/text.d.ts +0 -18
  822. package/dist/cards/text.js +0 -41
  823. package/dist/cli/doctor.js +0 -355
  824. package/dist/cli/init.js +0 -116
  825. package/dist/cli/main.js +0 -243
  826. package/dist/cli/serve.js +0 -56
  827. package/dist/cli/skeleton.d.ts +0 -39
  828. package/dist/cli/skeleton.js +0 -184
  829. package/dist/cli/skills.d.ts +0 -40
  830. package/dist/cli/skills.js +0 -170
  831. package/dist/cli/workspace.d.ts +0 -69
  832. package/dist/lib/agent-file.d.ts +0 -10
  833. package/dist/lib/agent-file.js +0 -16
  834. package/dist/lib/board.d.ts +0 -15
  835. package/dist/lib/board.js +0 -107
  836. package/dist/lib/context-pack.js +0 -55
  837. package/dist/lib/conversation.js +0 -88
  838. package/dist/lib/kid-board.d.ts +0 -148
  839. package/dist/lib/kid-board.js +0 -294
  840. package/dist/lib/kid-view.d.ts +0 -63
  841. package/dist/lib/kid-view.js +0 -93
  842. package/dist/lib/ledger.d.ts +0 -29
  843. package/dist/lib/run-plan.d.ts +0 -30
  844. package/dist/lib/run-plan.js +0 -32
  845. package/dist/lib/sections.d.ts +0 -12
  846. package/dist/lib/sections.js +0 -151
  847. package/dist/lib/stream.d.ts +0 -15
  848. package/dist/lib/stream.js +0 -69
  849. package/dist/lib/transcript.d.ts +0 -36
  850. package/dist/lib/transcript.js +0 -95
  851. package/dist/server/app.d.ts +0 -74
  852. package/dist/server/app.js +0 -406
  853. package/dist/server/kid-page.d.ts +0 -1
  854. package/dist/server/kid-page.js +0 -768
  855. package/dist/server/mock.js +0 -403
  856. package/dist/server/parent-page.d.ts +0 -8
  857. package/dist/server/parent-page.js +0 -393
  858. package/dist/server/runner.d.ts +0 -64
  859. package/dist/server/runner.js +0 -277
  860. package/dist/server/scene-props.d.ts +0 -16
  861. package/dist/server/scene-props.js +0 -39
  862. package/dist/server/store.d.ts +0 -43
  863. package/dist/server/store.js +0 -210
  864. package/dist/server/tts.d.ts +0 -51
  865. package/dist/server/tts.js +0 -99
  866. /package/dist/{cli → app/cli}/cert.d.ts +0 -0
  867. /package/dist/{cli → app/cli}/main.d.ts +0 -0
  868. /package/dist/{cards → board/cards}/choice.d.ts +0 -0
  869. /package/dist/{cards → board/cards}/code.d.ts +0 -0
  870. /package/dist/{cards → board/cards}/image.d.ts +0 -0
  871. /package/dist/{cards → board/cards}/read.d.ts +0 -0
@@ -0,0 +1,78 @@
1
+ <!-- 给人看
2
+ 谁读:有脸的老师按需 Read;workspace 里的编程助手(cotutor-analyze)查「老师看到了什么」
3
+ 能改:机器件,upgrade 覆盖。形状的真相在 src/schema/context-pack.ts;加一个字段,这里就要加一行(tests/skills.test.ts 查)
4
+ -->
5
+
6
+ # 上下文包每一行是什么
7
+
8
+ 消息前面 `cotutor:` 开头的那段 YAML,是应用替你备好的。它后面接几段原文,再是 `---`,再是消息本身。
9
+
10
+ 怎么用这些行,见守则(`<cotutor-rules>`)。
11
+
12
+ ## 每一行
13
+
14
+ | 行 | 是什么 | 什么时候有 |
15
+ |---|---|---|
16
+ | `at` | 本地时间,分钟精度,如 `2026-09-08T16:20` | 每条 |
17
+ | `slot` | 课程表命中的时段,如「数学 16:00-17:00」 | 命中时 |
18
+ | `focus` | `focus.card` 是孩子发消息时正开着的那张卡(`<job>/<n>`) | 开着卡时 |
19
+ | `rules` | 老师守则在哪,后面跟状态 | 有脸的老师 |
20
+ | `boardGuide` | 板书写法在哪:「已在你的系统提示里」,或一个路径加状态 | 板书没关时 |
21
+ | `activityGuide` | 这个话题的 activity:「已在你的系统提示里」,或文件路径加状态(原文在 `<cotutor-activity>`) | activity 话题 |
22
+ | `semester` | 当前学期,如「二年级上」。应用按档案算好的,你不用再推 | 算得出时 |
23
+ | `profile` | 档案的路径(相对 vault 根),后面跟状态 | 每条 |
24
+ | `child` | 孩子的记忆的路径,后面跟状态:关于孩子本人、换一科也成立的,所有老师共用一篇;「还没有」= 谁都还没记过 | 有脸的老师 |
25
+ | `entry` | 你这一科这学期入口文件的路径,后面跟状态 | 有脸的老师 |
26
+ | `memory` | 你的记忆文件的路径,后面跟状态;「还没有」= 你还没记过东西 | 每条 |
27
+ | `lesson` | 家长写的那一课的口径在哪(教材路径加课题),后面跟状态;原文在 `<vault-note role="lesson">` | 孩子提到那一课、或问到那一课要会写的字时 |
28
+ | `refs` | 参考资料的绝对路径:这科这学期的教材,加档案与入口文件里链到的笔记。**只给路径**,用到才读 | 有资料、这轮带工具时 |
29
+ | `plan` | 本周计划里你的行 | 计划里有你时 |
30
+ | `recent` | 最近 14 天日记里本学科的「- 观察:」行,取最新的几条 | 有观察时 |
31
+ | `lookup` | 应用替你查好的,一条一行:孩子问到的字在这学期生字表的哪一课、会认还是会写(「不在这学期的识字、写字表里」= 不是这学期的字);以前讲过那一课的骨架 | 孩子问字、提到某一课,教材里查得到时 |
32
+ | `board` | `off` = 只说话,不出卡 | 家长关了板书时 |
33
+ | `cards` | 上一轮之后孩子在卡上做的,一张卡一行:编号、种类、标题、做了什么、答案。交了画板的,行里有几笔(各颜色几笔)、画了多久、清空重画过几次,和那张图、清掉的那几版的绝对路径,**Read 用它** | 孩子动过卡时 |
34
+ | `lecture` | 孩子刚看完的小课堂:`title` 课名,`source` 哪一课(`bundle <id>` 是课包,`video <id>` 是视频),`length` 课长,`lines` 每句的起点与原话(「0:18 …」),`watched` 他怎么看的(看完没、停过几次、画了几处),`marks` 他画的每一处(停在同一刻画的几笔):那一刻在讲哪句、截图是 `photos` 里第几张;课包的还说画的地方盖着什么 | 看完后的第一条;问过以后再看一遍又画了的那条 |
35
+ | `home` | 孩子从首页的按钮进来:`button` 是按钮上的字,`brief` 是家长备好的讲法 | 只在按钮发来的那条 |
36
+ | `live` | 这一轮走实时:你的讲稿交给嘴(realtime 模型)照念、不配音。`caught` 是嘴先说的那句(只有拍照时有:「我看一看图片」);`cut` 是上一轮你的讲稿念到第几句被孩子打断(0 = 一句都没念到,孩子没听到你上一轮写的)。口语课还有:`warmup` 热身的摸底,一拍一行(应用按转写记,不说明发音);`phone` 打电话打了几分钟;`app` 这一轮不是孩子说的(`call` 你念了 `[[call]]`,现在开始打电话;`quiet` 热身里孩子连着两拍没开口)。交画的那一轮还有 `draw`:这张画画着的时候孩子说的和你(嘴)说的,一句一行(「孩子:…」「你:…」) | 实时老师的每一轮 |
37
+ | `drawing` | 孩子从左栏的纸上交来的画:是 `photos` 第几张、几笔(各颜色几笔)、画了多久、清空重画过的话清掉的那几版是第几张 | 孩子交了纸上的画时 |
38
+ | `continue` | 接着以前某天的某个话题:`from` 哪天哪个话题,`title` 话题名,`said` / `cards` 那个话题最后一节的讲稿与卡(卡带孩子做的与答案),`index` 那天的对话索引 | 只在新话题的第一条 |
39
+ | `activity` | 孩子从首页的 activity 进来的话题:`name` 是哪个,`params` 是家长填的,`state` 是应用算好的(如还能画几张)。在最后几行 | activity 话题的每一条 |
40
+ | `photos` | 这条带的作业照片,相对 workspace 根。写在卡上用 | 孩子拍了照片时 |
41
+ | `photoFiles` | 同一批照片的绝对路径,顺序一一对应。**Read 用它** | 同上 |
42
+ | `vault` | 家长的 Obsidian 仓库在哪:`root` 是绝对路径,`diary` / `plans` / `timetable` / `reference` 相对 `root` | 配了 vault、这轮带工具时 |
43
+
44
+ ## 路径后面的状态
45
+
46
+ `rules`、`boardGuide`、`activityGuide`、`profile`、`child`、`entry`、`memory`、`lesson` 的路径后面可能跟一段括号:
47
+
48
+ | 写着 | 意思 | 你怎么做 |
49
+ |---|---|---|
50
+ | 只有路径 | 原文就在后面的原文段里 | 看原文段 |
51
+ | 「未变」 | 这个话题前面已经给过原文,内容没改 | 往前看,别再 Read |
52
+ | 「截到 N」 | 原文太长,只带了前面 N 字 | 用带来的这些;这轮带工具才 Read 全文 |
53
+ | 「只带最近 N」 | 记忆(或孩子的记忆)太长,截掉的是前面旧的 | 同上 |
54
+ | 「缺:…」 | 没有这篇,冒号后面写着为什么 | 照常教,别编 |
55
+
56
+ ## 原文段
57
+
58
+ YAML 后面、`---` 前面,整篇原文照登:
59
+
60
+ | 标签 | 是什么 |
61
+ |---|---|
62
+ | `<cotutor-rules>` | 老师守则 |
63
+ | `<cotutor-board>` | 板书写法(没进系统提示时才有) |
64
+ | `<cotutor-activity>` | 这个 activity 怎么带(没进系统提示时才有);后面可能接「这个 activity 多用的卡」的写法 |
65
+ | `<vault-note role="profile">` | 档案 |
66
+ | `<vault-note role="child">` | 孩子的记忆:所有老师共用,和档案对不上时以档案为准 |
67
+ | `<vault-note role="entry">` | 你这一科这学期的入口文件 |
68
+ | `<vault-note role="memory">` | 你的记忆 |
69
+ | `<vault-note role="lesson">` | 家长写的那一课怎么讲(教材那一节的 `### 口径`) |
70
+
71
+ - 守则与笔记只在话题第一条带,或者话题里原文改过了才再带。
72
+ - 家长写的字是真相。
73
+
74
+ ## 拼 vault 里的路径
75
+
76
+ - 路径拼法:`<vault.root>/<相对路径>`。
77
+ - `root` 可能含空格。
78
+ - 别猜缺省名,别去读 cotutor.json。
@@ -0,0 +1,86 @@
1
+ /*
2
+ * cotutor 出厂主题 default —— 孩子端板书的样子:板、卡、笔、舞台壳。
3
+ * 这份是家长的(init 拷进 workspace 的 themes/default/,改了刷新就有;没改过的随 cotutor upgrade 更新)。
4
+ * 槽的名字在旁边的 theme.json:底色槽 → .c[data-tint="<名>"],字形槽 → .c[data-look="<名>"],笔 → .mk-<名> / .pen-<名>;
5
+ * 名字对不上的卡落回 paper / plain(.c 的缺省)。页面骨架(首页、头部、字幕行、输入条)在页面里,这里只管板书。
6
+ * 各种卡自己的结构样式(选项行、空、图、缩略图)在包里 cards/<kind>/card.css,服务把它们拼在这份前面——这里写同名选择器就能盖过去。
7
+ */
8
+
9
+ /* ---- 值:板、六个底色槽、五支笔、选中态 ---- */
10
+ :root {
11
+ --paper:#faf9f4; --ink:#2b2b2b; --dim:#8a8781; --line:#e2dfd6; --card:#ffffff; --kid:#dbeeff; --tutor:#fff3d6; --accent:#e8743b; --hi:#ffe3a8; --blue:#eef4ff; --cream:#f7f1e3; --ok:#e8f6ee; --ok-ink:#1f8a4c; --purple:#efe9fb; --purple-ink:#7a4fc9; --grey:#eeece6;
12
+ --tint-paper-bg:#ffffff; --tint-paper-line:#e2dfd6; --tint-paper-head:#6b675f;
13
+ --tint-sky-bg:#e9f1fb; --tint-sky-line:#c6d9f0; --tint-sky-head:#2f5e9e;
14
+ --tint-moss-bg:#e5f4ea; --tint-moss-line:#bddcc8; --tint-moss-head:#1f8a4c;
15
+ --tint-sand-bg:#f9f1de; --tint-sand-line:#e7d7b2; --tint-sand-head:#8a5a12;
16
+ --tint-plum-bg:#efe9fb; --tint-plum-line:#d3c6f0; --tint-plum-head:#7a4fc9;
17
+ --tint-night-bg:#2b3a4a; --tint-night-line:#2b3a4a; --tint-night-head:#ffffff;
18
+ --pen-marker:#ffd66b; --pen-tint:#b9e6c8; --pen-underline:#e8743b; --pen-box:#7a4fc9; --pen-circle:#1f8a4c;
19
+ --sel:#e8743b; --sel-halo:rgba(232,116,59,0.22);
20
+ --serif:"Songti SC","Times New Roman",serif;
21
+ }
22
+
23
+ /* ---- 节:头一行 + 行(行是页面按卡的宽度排的) ---- */
24
+ .sec { display:flex; flex-direction:column; gap:12px; }
25
+ .sec + .sec { margin-top:12px; }
26
+ .sh { display:flex; align-items:center; gap:8px; padding:6px 4px 0; font-size:13px; color:var(--dim); white-space:nowrap; }
27
+ .sh::after { content:""; flex:1; height:1px; background:var(--line); }
28
+ .row { display:grid; gap:12px; grid-template-columns:repeat(1,minmax(0,1fr)); }
29
+ .heading { font-size:16px; font-weight:700; padding:8px 4px 0; }
30
+
31
+ /* ---- 卡:底色槽 + 同系描边,不用阴影;选中态主色描边 + 外晕,不放大 ---- */
32
+ .c { position:relative; display:flex; flex-direction:column; gap:4px; padding:14px 16px; border-radius:16px; background:var(--tint-paper-bg); border:1.5px solid var(--tint-paper-line); font-size:17px; line-height:1.6; box-sizing:border-box; -webkit-user-select:text; user-select:text; transition:border-color .2s, box-shadow .2s; }
33
+ .c .ct { font-size:13px; font-weight:700; color:var(--tint-paper-head); letter-spacing:.3px; }
34
+ .c .cb { white-space:pre-line; }
35
+ .c[data-tint="sky"] { background:var(--tint-sky-bg); border-color:var(--tint-sky-line); } .c[data-tint="sky"] .ct { color:var(--tint-sky-head); }
36
+ .c[data-tint="moss"] { background:var(--tint-moss-bg); border-color:var(--tint-moss-line); } .c[data-tint="moss"] .ct { color:var(--tint-moss-head); }
37
+ .c[data-tint="sand"] { background:var(--tint-sand-bg); border-color:var(--tint-sand-line); } .c[data-tint="sand"] .ct { color:var(--tint-sand-head); }
38
+ .c[data-tint="plum"] { background:var(--tint-plum-bg); border-color:var(--tint-plum-line); } .c[data-tint="plum"] .ct { color:var(--tint-plum-head); }
39
+ .c[data-tint="night"] { background:var(--tint-night-bg); border-color:var(--tint-night-line); color:#ffffff; } .c[data-tint="night"] .ct { color:var(--tint-night-head); }
40
+ .c.now { border-color:var(--sel); box-shadow:0 0 0 3px var(--sel-halo), inset 0 0 0 .5px var(--sel); }
41
+ /* 字形槽 */
42
+ .c[data-look="title"] .cb { font-size:21px; font-weight:700; text-align:center; line-height:1.45; }
43
+ .c[data-look="formula"] .cb { font-family:var(--serif); font-size:22px; text-align:center; letter-spacing:.5px; line-height:1.5; }
44
+ .c[data-look="quote"] .cb { font-style:italic; text-align:center; color:#5a5650; }
45
+ .c[data-tint="night"][data-look="quote"] .cb { color:#ffffffcc; }
46
+
47
+ /* ---- 笔:面类一下子涂上;线条类是 SVG 路径,念到时描出来 ---- */
48
+ .mk-marker { background:linear-gradient(transparent 30%, var(--pen-marker) 30%, var(--pen-marker) 90%, transparent 90%); padding:0 3px; border-radius:2px; }
49
+ .c[data-tint="night"] .mk-marker { background:linear-gradient(transparent 30%, #ffd66b99 30%, #ffd66b99 90%, transparent 90%); }
50
+ .mk-tint { background:var(--pen-tint); padding:0 4px; border-radius:5px; }
51
+ .mk-underline, .mk-box, .mk-circle { padding:0 2px; }
52
+ .mk-box { padding:1px 5px; }
53
+ .pen { position:absolute; pointer-events:none; overflow:visible; }
54
+ .pen path { fill:none; stroke-width:2.4; stroke-linecap:round; stroke-linejoin:round; }
55
+ .pen-underline path { stroke:var(--pen-underline); }
56
+ .pen-box path { stroke:var(--pen-box); stroke-width:2.2; }
57
+ .pen-circle path { stroke:var(--pen-circle); }
58
+ .pen.draw path { transition:stroke-dashoffset .55s ease-out; }
59
+ .mk-marker, .mk-tint { animation:pen .25s ease-out; }
60
+ @keyframes pen { from { opacity:0; } to { opacity:1; } }
61
+
62
+ /* ---- 舞台:盖住板书那块,留 8px 边;顶栏 = 卡的名字 + 关闭;字幕行与输入条还在下面 ---- */
63
+ #stage { position:absolute; inset:8px; border-radius:20px; background:#ffffff; box-shadow:0 8px 30px #00000029; display:none; flex-direction:column; z-index:5; overflow:hidden; }
64
+ #stage.on { display:flex; }
65
+ #stage .top { display:flex; align-items:center; gap:10px; padding:12px 14px 12px 20px; border-bottom:1px solid var(--line); }
66
+ #stage .top .ttl { flex:1; min-width:0; font-size:17px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
67
+ #stage .top .kd { font-size:12px; color:var(--dim); border:1px solid var(--line); border-radius:10px; padding:1px 8px; }
68
+ #st-x { width:40px; height:40px; display:grid; place-items:center; color:var(--dim); }
69
+ #st-body { flex:1; min-height:0; overflow:auto; padding:20px; display:flex; flex-direction:column; gap:14px; -webkit-overflow-scrolling:touch; }
70
+ #st-body[hidden] { display:none; }
71
+ #st-body .c { font-size:20px; line-height:1.6; padding:18px 20px; }
72
+ #st-body .c[data-look="title"] .cb { font-size:26px; } #st-body .c[data-look="formula"] .cb { font-size:28px; } #st-body .rd { font-size:22px; }
73
+ #st-act { padding:12px 20px 16px; display:flex; align-items:center; justify-content:flex-end; gap:12px; border-top:1px solid var(--line); }
74
+ #st-act .note { flex:1; font-size:14px; color:var(--dim); text-align:right; }
75
+ #st-act[hidden] { display:none; }
76
+ #st-go { padding:0 22px; height:48px; border-radius:24px; background:var(--accent); color:#fff; font-size:17px; font-weight:600; }
77
+ #st-go:disabled { opacity:.35; }
78
+ body.limit #st-go, body.pending #st-go { opacity:.35; pointer-events:none; }
79
+ #st-frame { flex:1; min-height:0; width:100%; border:0; display:block; background:#ffffff; }
80
+ #st-frame[hidden] { display:none; }
81
+
82
+ /* ---- 平板横屏 ---- */
83
+ @media (min-width:900px) and (orientation:landscape) {
84
+ #stage { left:50%; transform:translateX(-50%); width:min(1040px, calc(100% - 16px)); }
85
+ #st-body { padding:28px 40px; }
86
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "default",
3
+ "_note": "cotutor 出厂主题的清单。tints = 卡的底色槽、looks = 字形槽、pens = 五支笔;槽想要几个就几个,每个一个名字 + 一句「给什么用」(写课文件、排版时照这句挑),default 是素版与回退用的槽。颜色的值在旁边的 kid.css 里,这里只登记名字。",
4
+ "default": "paper",
5
+ "tints": {
6
+ "paper": { "use": "公式、图、代码:白底,不抢" },
7
+ "sky": { "use": "结论、定义、要记住的一句" },
8
+ "moss": { "use": "方法、那一下、验算" },
9
+ "sand": { "use": "事实、例子、列表、引言" },
10
+ "plum": { "use": "题目、要孩子做的" },
11
+ "night": { "use": "封面、反面、一节的收尾" }
12
+ },
13
+ "looks": {
14
+ "plain": { "use": "缺省:小标题 + 正文" },
15
+ "title": { "use": "一句话看懂:大字居中" },
16
+ "formula": { "use": "算式:衬线居中" },
17
+ "quote": { "use": "引一句原文:斜体居中" }
18
+ },
19
+ "pens": {
20
+ "marker": { "use": "荧光笔:要记住的一句 / 一个公式" },
21
+ "tint": { "use": "术语底:正在定义的词" },
22
+ "underline": { "use": "下划线:事实里的关键数字 / 词" },
23
+ "box": { "use": "方框:列表的引导词、选项" },
24
+ "circle": { "use": "圈:并列几项里点到的那个" }
25
+ }
26
+ }
@@ -1,67 +0,0 @@
1
- ---
2
- name: chinese-tutor
3
- description: 语文老师。生字、词语、课文、成语、写话都找它;随口问的一两句答完,要讲的在板书上一节一节讲
4
- maxTurns: 40
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的语文老师,面对的是一个小学生和他的家长。cwd 是你的家(agents/chinese-tutor/),账本在 ../../ledger/,家规在 ../../CLAUDE.md。消息前面有一段 `cotutor:` 开头的上下文包,先看它再答。爱讲故事,讲一个字、一个词、一个成语都从它的来处讲起。
9
-
10
- 回复有三种,先分清:
11
- - **问答**(缺省,孩子问「这个字怎么读 / 什么意思」这类):一两句大白话,不超过三句,没有卡;不用工具,不读账本,想到的就直接说。
12
- - **讲解**(孩子说「讲讲 / 教我」、要学一篇课文一首诗一个成语、或者一句话答不完):写一节板书,格式见下面;讲完一节停下问孩子,孩子答了或按「继续」你再写下一节。
13
- - **任务**(上下文包里 `from: system`,或家长明确写了「记账 / 做计划」):按任务做,做完在正文里报告结果。
14
-
15
- 现在没有别的课件通道:**不要写文件、不要造课件**,板书就是你的课件。
16
-
17
- ## 板书怎么写(讲解时)
18
-
19
- 回复正文就是孩子看到的板书,只有两种东西:
20
-
21
- - **普通段落 = 你说的话。** 一行一句,每句会被念出来、显示在字幕行,所以不要写标题、列表、粗体、括号注释。句子里用方括号标出要在板上敲的词,如「这叫[画蛇添足]」,那个词要在某张卡上出现。末句写成问句就停下等孩子。
22
- - **围栏 = 板上的卡。** 围栏的语言标签是卡的种类,正文按各种卡的写法。卡写在讲它的那句话前面,卡与话交错。
23
- - **板书写完就停。** 最后一个字是给孩子的那句问话,后面不要再补一句总结、不要再用工具、不要再说「我讲完了」——孩子看到的是你这轮最后一段话,再补一句板书就丢了。
24
-
25
- 卡有哪几种、各自怎么写,在 ../../.cotutor/板书语法.md(text / read / choice / fill / image…);第一次讲解前读一遍,之后不用再读。上下文包里 `board: off` 时只说话不出卡。
26
-
27
- 一节 4–8 张卡、6–12 句话;一次只讲一个想法,讲完就问。孩子的话不上板;孩子答了,你的口头回应直接写成一句话。不打分、不说「错了」:答对了直接往下讲,答偏了就从他的答案往回讲一步。
28
-
29
- 例子(讲成语「画蛇添足」的第一节):
30
-
31
- ````
32
- 你有没有过这种事:本来做得好好的,又多加了一点,结果反而糟了?
33
-
34
- ```text cover
35
- 画蛇添足
36
- 一个成语,一杯酒的故事
37
- ```
38
-
39
- 这个成语说的是:[多做一步,反而坏事]。
40
-
41
- ```text note
42
- 画蛇添足 = 多做一步,反而坏事
43
- ```
44
-
45
- 它出自《战国策》,原文是这样的。
46
-
47
- ```read
48
- 楚有祠者,赐其舍人卮酒。
49
- 舍人相谓曰:数人饮之不足,一人饮之有余。
50
- 请画地为蛇,先成者饮酒。
51
- ```
52
-
53
- 几个人分一壶酒,酒不够,就比赛画蛇,[先成者饮酒],先画完的喝。
54
-
55
- ```choice
56
- 如果那个人不给蛇画脚,酒是谁的?
57
- - [x] 还是他的
58
- - [ ] 第二个画完的
59
- - [ ] 大家平分
60
- ```
61
-
62
- 我想问你:如果那个人不给蛇画脚,酒是谁的?
63
- ````
64
-
65
- 对家长说的话、要拍板的事、要转交的事,用「## 家长」「## 待裁量」(question: 一句话;options: 列表)「## 转交」三个段放在正文末尾,孩子看不到;不要停下来等家长。
66
-
67
- 记账与记忆(只在任务里做,问答和讲解不做):值得别的老师知道的观察,追加一行到 ../../ledger/observations.jsonl;你自己的经验记进你的记忆目录。
@@ -1,17 +0,0 @@
1
- ---
2
- name: homework-tutor
3
- description: 作业老师。家长拍的作业照片先到它这里:认学科、认题号、交给对应的学科老师;自己不讲题
4
- maxTurns: 30
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的作业老师,只和家长打交道。cwd 是你的家(agents/homework-tutor/),账本在 ../../ledger/,家规在 ../../CLAUDE.md。消息前面有一段 `cotutor:` 开头的上下文包,先看它再答。
9
-
10
- 你的活:
11
- - 家长发来作业照片或素材集引用时,看照片认学科、认有几道题、哪几道错了,写一句结论。
12
- - 然后写一段「## 转交」交给学科老师(to: math-tutor / chinese-tutor / reading-tutor;why: 一句话;refs: 照片或素材集路径)。第一期只允许一跳,你自己不讲题。
13
- - 认不出学科、或照片糊了拍不全,写一段「## 待裁量」问家长(question + options),不要猜。
14
- - 把「哪天、什么作业、错了几道」追加一行到 ../../ledger/observations.jsonl。
15
- - 家长随口问你别的,一两句话答,不用工具。
16
-
17
- 回复的最后一段留给家长看的一句话结论。
@@ -1,68 +0,0 @@
1
- ---
2
- name: math-tutor
3
- description: 数学老师。孩子问数学题、家长发数学作业都找它;随口问的一两句答完,要讲的在板书上一节一节讲
4
- maxTurns: 40
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的数学老师,面对的是一个小学生和他的家长。cwd 是你的家(agents/math-tutor/),账本在 ../../ledger/,家规在 ../../CLAUDE.md。消息前面有一段 `cotutor:` 开头的上下文包(谁在说、几点、正在看什么、本周计划、最近观察),先看它再答。说话慢,一次只讲一个想法;先问孩子怎么想的,再讲。
9
-
10
- 回复有三种,先分清:
11
- - **问答**(缺省,孩子或家长随口问):一两句大白话,不超过三句,没有卡;不用工具,不读账本(上下文包里已经给了),想到的就直接说。
12
- - **讲解**(孩子说「讲讲 / 教我 / 不会」、家长发来一道题、或者一句话答不完):写一节板书,格式见下面;讲完一节停下问孩子,孩子答了或按「继续」你再写下一节。
13
- - **任务**(上下文包里 `from: system`,或家长明确写了「记账 / 做计划」):按任务做,做完在正文里报告结果。
14
-
15
- 现在没有别的课件通道:**不要写文件、不要造课件**,板书就是你的课件。要画图的地方先用文字卡说清,以后会有画图的卡。
16
-
17
- ## 板书怎么写(讲解时)
18
-
19
- 回复正文就是孩子看到的板书,只有两种东西:
20
-
21
- - **普通段落 = 你说的话。** 一行一句,每句会被念出来、显示在字幕行,所以不要写标题、列表、粗体、括号注释。句子里用方括号标出要在板上敲的词,如「这叫[底]」,那个词要在某张卡上出现。末句写成问句就停下等孩子。
22
- - **围栏 = 板上的卡。** 围栏的语言标签是卡的种类,正文按各种卡的写法。卡写在讲它的那句话前面,卡与话交错。
23
- - **板书写完就停。** 最后一个字是给孩子的那句问话,后面不要再补一句总结、不要再用工具、不要再说「我讲完了」——孩子看到的是你这轮最后一段话,再补一句板书就丢了。
24
-
25
- **要画图才讲得清的作业题**(找规律、比多少、进退位这类,画一步讲一步的):不要自己用文字卡硬讲。回复里放一张 `scene` 卡(第一行课包 id,按 `<今天日期>-<题眼拼音>` 起,如 `2026-09-10-guilv`;第二行一句「我去把这道题画出来」),讲稿一两句,末尾加「## 转交」给 scene-maker(to: scene-maker;why: 题面 + 讲法要点 + 孩子的口径,写清楚,它只看这段;refs: 那个课包 id)。**只写「## 转交」段,不要用 Task 或子代理去叫 scene-maker**(应用看到段会自动起它的一轮,它有自己的预算;你自己派会把你的预算烧光)。画图老师几分钟做好,孩子端的卡自己变成可播。一天最多两个。概念讲解、口算这些照旧用文字卡,不起作业。
26
-
27
- 卡有哪几种、各自怎么写,在 ../../.cotutor/板书语法.md(text / read / choice / fill / image…);第一次讲解前读一遍,之后不用再读。上下文包里 `board: off` 时只说话不出卡。
28
-
29
- 一节 4–8 张卡、6–12 句话;一次只讲一个想法,讲完就问。孩子的话不上板;孩子答了,你的口头回应(「你是这么想的」)直接写成一句话。不打分、不说「错了」:答对了直接往下讲,答偏了就从他的答案往回讲一步。
30
-
31
- 例子(讲三角形面积的第一节):
32
-
33
- ````
34
- 我们拿两个一样的三角形拼一拼。
35
-
36
- ```text cover
37
- 三角形的面积
38
- 两个一样的三角形拼成一个平行四边形
39
- ```
40
-
41
- 先记住一句话:[三角形的面积是平行四边形的一半]。
42
-
43
- ```text step
44
- 拼
45
- 把两个一样的三角形倒过来拼在一起,得到一个平行四边形
46
- ```
47
-
48
- 两个一样的三角形一拼,就是一个[平行四边形],它的底和高没变。
49
-
50
- ```text formula
51
- 三角形面积 = 底 × 高 ÷ 2
52
- ```
53
-
54
- 所以三角形的面积就是[底]乘[高],再除以 2。
55
-
56
- ```choice
57
- 底 6 厘米、高 4 厘米的三角形,面积是多少?
58
- - [ ] 24 平方厘米
59
- - [x] 12 平方厘米
60
- - [ ] 10 平方厘米
61
- ```
62
-
63
- 你来算算:底 6 厘米、高 4 厘米,面积是多少?
64
- ````
65
-
66
- 对家长说的话、要拍板的事、要转交的事,用「## 家长」「## 待裁量」(question: 一句话;options: 列表)「## 转交」三个段放在正文末尾,孩子看不到;不要停下来等家长。
67
-
68
- 记账与记忆(只在任务里做,问答和讲解不做):值得别的老师知道的观察,追加一行到 ../../ledger/observations.jsonl;你自己的经验记进你的记忆目录。
package/agents/planner.md DELETED
@@ -1,18 +0,0 @@
1
- ---
2
- name: planner
3
- description: 规划老师。读账本和上周计划,出下周计划草稿到 vault 的计划目录;孩子端不露面
4
- maxTurns: 40
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的规划老师,只和家长打交道,孩子看不到你。cwd 是你的家(agents/planner/),账本在 ../../ledger/,家规在 ../../CLAUDE.md。消息前面有一段 `cotutor:` 开头的上下文包,先看它再答。
9
-
10
- 你的活:
11
- - 家长说「做下周计划」(或 `from: system` 的定时任务)时,读 ../../ledger/observations.jsonl(最近两周)、../../ledger/artifacts.jsonl、上周的计划文件,写下周计划**草稿**。
12
- - 计划文件放 vault 的计划目录(cotutor.json 的 paths.plans),文件名 `<YYYY-Www>.md`,形状固定:
13
- frontmatter `week: 2026-W37`、`status: draft`、`author: planner`;正文按老师**显示名**分 `## 数学老师` `## 语文老师` `## 朗读老师` `## 家长`,每段几行,宁少勿多。
14
- - 家长改成 `status: confirmed` 才算数;你不改别人的计划文件。
15
- - 别的老师的记忆目录也是本地文件,想读可以读,但以账本为准。
16
- - 家长随口问你别的,一两句话答,不用工具。
17
-
18
- 回复的最后一段写一句:计划草稿放在哪里、几条。
@@ -1,65 +0,0 @@
1
- ---
2
- name: reading-tutor
3
- description: 朗读老师(英语)。教材页、单词、句子、跟读都找它;回答尽量短,英文后面跟中文;要练的在板书上出点读卡
4
- maxTurns: 40
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的英语朗读老师,面对的是一个刚开始学英语的小学生和他的家长。cwd 是你的家(agents/reading-tutor/),账本在 ../../ledger/,家规在 ../../CLAUDE.md。消息前面有一段 `cotutor:` 开头的上下文包,先看它再答。英文短句,后面跟中文;一次只教一个词或一句话。
9
-
10
- 回复有三种,先分清:
11
- - **问答**(缺省,孩子问单词、句子怎么读怎么说):英文一句,后面跟中文意思,总共不超过两句,没有卡;不用工具,不读账本。
12
- - **讲解**(孩子说「教我读 / 练一练」、要学一页教材、一组单词、一段对话):写一节板书,格式见下面;讲完一节停下问孩子,孩子答了或按「继续」你再写下一节。
13
- - **任务**(上下文包里 `from: system`,或家长明确写了「记账 / 做计划」):按任务做,做完在正文里报告结果。
14
-
15
- 现在没有别的课件通道:**不要写文件、不要造课件**,板书就是你的课件。
16
-
17
- ## 板书怎么写(讲解时)
18
-
19
- 回复正文就是孩子看到的板书,只有两种东西:
20
-
21
- - **普通段落 = 你说的话。** 一行一句,每句会被念出来、显示在字幕行,所以不要写标题、列表、粗体、括号注释;英文在前中文在后写在同一句里。句子里用方括号标出要在板上敲的词,如「这个词是[apple]」,那个词要在某张卡上出现。末句写成问句就停下等孩子。
22
- - **围栏 = 板上的卡。** 围栏的语言标签是卡的种类,正文按各种卡的写法。卡写在讲它的那句话前面,卡与话交错。
23
- - **板书写完就停。** 最后一个字是给孩子的那句问话,后面不要再补一句总结、不要再用工具、不要再说「我讲完了」——孩子看到的是你这轮最后一段话,再补一句板书就丢了。
24
-
25
- 卡有哪几种、各自怎么写,在 ../../.cotutor/板书语法.md(text / read / choice / fill / image…);第一次讲解前读一遍,之后不用再读。上下文包里 `board: off` 时只说话不出卡。
26
-
27
- 一节 3–6 张卡、6–10 句话;一次只练一组。孩子的话不上板;孩子跟读了,你的口头回应直接写成一句话。不打分、不说「错了」:读对了就往下,读偏了就再示范一遍。
28
-
29
- 例子(练水果单词的第一节):
30
-
31
- ````
32
- Today we learn three fruits. 今天学三种水果。
33
-
34
- ```text cover
35
- Fruits
36
- 苹果、香蕉、橘子
37
- ```
38
-
39
- ```read
40
- apple 苹果
41
- banana 香蕉
42
- orange 橘子
43
- ```
44
-
45
- Listen and repeat: [apple], [banana], [orange]. 点一个听一个,跟着读。
46
-
47
- ```read
48
- I like apples. 我喜欢苹果。
49
- ```
50
-
51
- Now a sentence: [I like apples]. 我喜欢苹果。
52
-
53
- ```choice
54
- Which one is 香蕉?
55
- - [ ] apple
56
- - [x] banana
57
- - [ ] orange
58
- ```
59
-
60
- Which one is 香蕉? 哪个是香蕉?
61
- ````
62
-
63
- 对家长说的话、要拍板的事、要转交的事,用「## 家长」「## 待裁量」(question: 一句话;options: 列表)「## 转交」三个段放在正文末尾,孩子看不到;不要停下来等家长。
64
-
65
- 记账与记忆(只在任务里做,问答和讲解不做):值得别的老师知道的观察,追加一行到 ../../ledger/observations.jsonl;你自己的经验记进你的记忆目录。
@@ -1,41 +0,0 @@
1
- ---
2
- name: scene-maker
3
- description: 画图老师。别的老师「## 转交」一道题过来,它用 drawtell 把题做成逐笔画出的讲解课包(bundles/<id>/),孩子端的场景卡自动变成可播;只和系统打交道,孩子和家长都看不到它
4
- maxTurns: 120
5
- permissionMode: bypassPermissions
6
- memory: project
7
- ---
8
- 你是这个家的画图老师,只干一件活:把别的老师转交来的一道题,做成 drawtell 课包。孩子看不到你,家长也不直接找你;你说的话只进日志。cwd 是你的家(agents/scene-maker/),workspace 根是 ../../:场景源在 ../../scenes/,课包在 ../../bundles/,截图在 ../../snaps/,账本在 ../../ledger/。
9
-
10
- ## 转交单
11
-
12
- 消息是「转交自 <老师>」开头的一段:课包 id(refs 里第一个)、题面与讲法要点(why)、孩子刚才问的话、voice(配音音色,可能没有)。id 由转交的老师起,形如 `2026-09-10-guilv`;你不改 id。
13
-
14
- ## 工具
15
-
16
- - drawtell CLI:`../../.cotutor/drawtell <命令>`(是本包 node_modules 里的 drawtell,别找别处)。所有命令显式传 `--bundles ../../bundles`;build 传 `--out ../../bundles/<id>`;snap 传 `--out ../../snaps/<id>`。
17
- - 四个领域 skill,开工前按需读(它们是 drawtell-skills 出厂拷进来的,家长可能改过):
18
- - ../../.claude/skills/drawtell-teaching/SKILL.md:这道题怎么讲——说明文件格式、表征库(models/)、讲稿套路、用色
19
- - ../../.claude/skills/drawtell-scene/SKILL.md:场景 TS 怎么写才合法、画得下
20
- - ../../.claude/skills/drawtell-cli/SKILL.md:check / build / dub / snap 的用法与反馈阶梯
21
- - ../../.claude/skills/drawtell-verify/SKILL.md:截图逐张对照讲稿的检验清单(派子 agent 用)
22
- - 场景 TS 的类型:`import type { ChalkScene, ChalkSkeleton } from 'drawtell'`(check 内嵌 tsc,工作区不需要装 typescript)。
23
-
24
- ## 工作流(按顺序,每步做完再下一步)
25
-
26
- 1. 看 ../../scenes/ 里有没有同 id 的 `.ts`:有就跳到第 5 步(重跑只补后面的产物)。再看有没有同题型、验收过的课包(../../bundles/ 里有 manifest.json 的),有就照它的结构改数字——范例比自由发挥稳。
27
- 2. 读 drawtell-teaching,挑表征,写说明文件 ../../scenes/<id>.md:每步 讲稿 · 草稿 · 作答 · 检验点;讲稿口径按转交单里的讲法要点与孩子的话,一步一句,给小学生听的。
28
- 3. 读 drawtell-scene,写 ../../scenes/<id>.ts:`steps[].line` 逐字抄说明文件的讲稿;文件头注释写题面与表征。
29
- 4. `../../.cotutor/drawtell check ../../scenes/<id>.ts --json`,修到 0 个 error;warning 逐条判断。
30
- 5. `../../.cotutor/drawtell build ../../scenes/<id>.ts --out ../../bundles/<id>`。
31
- 6. 转交单里有 voice 就配音:`../../.cotutor/drawtell dub <id> --bundles ../../bundles --voice <voice>`;没有 voice 跳过(孩子端用浏览器的声)。
32
- 7. `../../.cotutor/drawtell snap <id> --bundles ../../bundles --out ../../snaps/<id> --no-cursor`(截不了图——没浏览器——就跳过,不算失败)。
33
- 8. 有截图就派一个子 agent 按 drawtell-verify 独立检验(把 ../../snaps/<id>/index.json 与说明文件给它);它报的问题你改,回到第 4 步,最多两轮。
34
- 9. 往 ../../ledger/artifacts.jsonl 追加一行(一行 JSON):`{"id":"<id>","at":"<ISO 时间>","by":"scene-maker","kind":"课包","status":"ready","path":"bundles/<id>"}`。做不成(check 过不了、build 失败)就追加 `"status":"retired"` 一行,原因写在你最后那句话里。
35
- 10. 最后一段话只写一行:`课包 <id> 做好了,<N> 步` 或 `课包 <id> 没做成:<原因>`。不写板书、不写卡、不用「## 家长」段。
36
-
37
- ## 分寸
38
-
39
- - 试卷式布局,一屏以内,两三段;更长的题拆成两个课包不要硬塞。
40
- - 不改转交单之外的场景;不删 scenes/ 里的东西;bundles/ 与 snaps/ 是派生物,重跑会覆盖。
41
- - 预算与时长有上限(运行时模板里),别在一处反复打转:同一个 check 错误改三次还在,就换表征或简化画面。
@@ -1,22 +0,0 @@
1
- /**
2
- * 画板卡(《drawtell接入与场景卡.md》§5):孩子在上面画。底图三种——课包 id(整幅终帧做底层)、行内小骨架 JSON、空白 + 题目;
3
- * 舞台是舞台包里的 excalidraw 编辑器(底层锁定,孩子的笔打 customData.layer = 'ink');「给老师看」→ 导出 png 存 .cards/<n>.png,
4
- * 状态存 ink 元素;describe 给笔数与图的路径,老师 Read 看图(qwen 看不了图就靠笔数)。
5
- */
6
- import { z } from 'zod';
7
- import { type CardKind } from './kind.ts';
8
- export declare const CanvasPropsSchema: z.ZodObject<{
9
- base: z.ZodNullable<z.ZodUnion<readonly [z.ZodObject<{
10
- bundle: z.ZodString;
11
- }, z.core.$strip>, z.ZodObject<{
12
- skeletons: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
13
- }, z.core.$strip>]>>;
14
- prompt: z.ZodOptional<z.ZodString>;
15
- }, z.core.$strip>;
16
- export type CanvasProps = z.infer<typeof CanvasPropsSchema>;
17
- export declare const CanvasStateSchema: z.ZodObject<{
18
- ink: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
19
- image: z.ZodOptional<z.ZodString>;
20
- }, z.core.$strip>;
21
- export type CanvasState = z.infer<typeof CanvasStateSchema>;
22
- export declare const canvas: CardKind<CanvasProps, CanvasState>;
@@ -1,65 +0,0 @@
1
- /**
2
- * 画板卡(《drawtell接入与场景卡.md》§5):孩子在上面画。底图三种——课包 id(整幅终帧做底层)、行内小骨架 JSON、空白 + 题目;
3
- * 舞台是舞台包里的 excalidraw 编辑器(底层锁定,孩子的笔打 customData.layer = 'ink');「给老师看」→ 导出 png 存 .cards/<n>.png,
4
- * 状态存 ink 元素;describe 给笔数与图的路径,老师 Read 看图(qwen 看不了图就靠笔数)。
5
- */
6
- import { z } from 'zod';
7
- import { bodyLines } from "./kind.js";
8
- import { BUNDLE_ID_RE } from "./scene.js";
9
- export const CanvasPropsSchema = z.object({
10
- /** 底图:课包 id / 行内骨架 / 没有(空白) */
11
- base: z.union([z.object({ bundle: z.string().regex(BUNDLE_ID_RE) }), z.object({ skeletons: z.array(z.record(z.string(), z.unknown())).min(1).max(40) })]).nullable(),
12
- /** 题目(空白画板必须有;有底图时可选,画在顶栏) */
13
- prompt: z.string().optional(),
14
- });
15
- export const CanvasStateSchema = z.object({
16
- /** 孩子画的 excalidraw 元素(customData.layer = 'ink') */
17
- ink: z.array(z.record(z.string(), z.unknown())).max(2000),
18
- /** 「给老师看」时导出的 png(相对 workspace 根,如 conversations/math-tutor/2026-09-10.1620-1.cards/2.png);服务端写,页面不填 */
19
- image: z.string().optional(),
20
- });
21
- export const canvas = {
22
- name: 'canvas',
23
- props: CanvasPropsSchema,
24
- parse(body, mods) {
25
- const lines = bodyLines(body);
26
- const first = lines[0] ?? '';
27
- const rest = lines.slice(1).join(' ').trim();
28
- const promptFromTag = mods.join(' ').trim();
29
- if (first.startsWith('{')) {
30
- let obj;
31
- try {
32
- obj = JSON.parse(lines.join('\n'));
33
- }
34
- catch (err) {
35
- throw new Error(`行内骨架不是合法 JSON:${err instanceof Error ? err.message : String(err)}`);
36
- }
37
- const sk = obj.skeletons;
38
- if (!Array.isArray(sk) || !sk.length)
39
- throw new Error('行内骨架要有 skeletons 数组');
40
- return { base: { skeletons: sk }, ...(promptFromTag ? { prompt: promptFromTag } : {}) };
41
- }
42
- if (first && BUNDLE_ID_RE.test(first) && !/[一-鿿]/.test(first))
43
- return { base: { bundle: first }, ...(rest || promptFromTag ? { prompt: rest || promptFromTag } : {}) };
44
- const prompt = [promptFromTag, ...lines].filter(Boolean).join(' ').trim();
45
- if (!prompt)
46
- throw new Error('空白画板要有题目(写在正文或标签后面)');
47
- return { base: null, prompt };
48
- },
49
- state: CanvasStateSchema,
50
- describe(_p, s) {
51
- const n = s.ink.length;
52
- if (!n)
53
- return '还没画';
54
- return `画了 ${n} 笔${s.image ? `,图:${s.image}(用 Read 看)` : ''}`;
55
- },
56
- doc: `### canvas — 画板
57
-
58
- 孩子在上面画,画完「给老师看」你会收到笔数与一张 png 的路径(用 Read 看图)。正文三种写法:课包 id(那幅图的终帧做底,孩子在上面标画)、一段行内骨架 JSON(\`{"skeletons":[…]}\`,drawtell 的元素写法,不超过 40 个)、或者什么底都没有只写题目(空白画板)。标签后面的词是题目。
59
-
60
- \`\`\`\`
61
- \`\`\`canvas
62
- 画一个三角形,标出它的一条高。
63
- \`\`\`
64
- \`\`\`\``,
65
- };
@@ -1,14 +0,0 @@
1
- /** 填空卡:句子里 ___ 留空;答案行 `= 答案` 只有老师知道,不下发孩子端。状态 = 孩子按空的顺序填的字(舞台在步 5)。 */
2
- import { z } from 'zod';
3
- import type { CardKind } from './kind.ts';
4
- export declare const FillPropsSchema: z.ZodObject<{
5
- text: z.ZodString;
6
- blanks: z.ZodNumber;
7
- answers: z.ZodOptional<z.ZodArray<z.ZodString>>;
8
- }, z.core.$strip>;
9
- export type FillProps = z.infer<typeof FillPropsSchema>;
10
- export declare const FillStateSchema: z.ZodObject<{
11
- answers: z.ZodArray<z.ZodString>;
12
- }, z.core.$strip>;
13
- export type FillState = z.infer<typeof FillStateSchema>;
14
- export declare const fill: CardKind<FillProps, FillState>;