cotutor 0.1.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 (845) hide show
  1. package/LICENSE +247 -21
  2. package/NOTICE +42 -0
  3. package/README.md +107 -24
  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/app/cli/cert.d.ts +7 -0
  41. package/dist/app/cli/cert.js +36 -0
  42. package/dist/app/cli/chalk/bake.d.ts +10 -0
  43. package/dist/app/cli/chalk/bake.js +58 -0
  44. package/dist/app/cli/chalk/browser.d.ts +16 -0
  45. package/dist/app/cli/chalk/browser.js +142 -0
  46. package/dist/app/cli/chalk/build.d.ts +14 -0
  47. package/dist/app/cli/chalk/build.js +100 -0
  48. package/dist/app/cli/chalk/dub.d.ts +51 -0
  49. package/dist/app/cli/chalk/dub.js +106 -0
  50. package/dist/app/cli/chalk/load-scene.d.ts +34 -0
  51. package/dist/app/cli/chalk/load-scene.js +117 -0
  52. package/dist/app/cli/chalk/main.d.ts +7 -0
  53. package/dist/app/cli/chalk/main.js +198 -0
  54. package/dist/app/cli/chalk/serve.d.ts +4 -0
  55. package/dist/app/cli/chalk/serve.js +28 -0
  56. package/dist/app/cli/chalk/snap.d.ts +65 -0
  57. package/dist/app/cli/chalk/snap.js +103 -0
  58. package/dist/app/cli/chalk/typecheck.d.ts +7 -0
  59. package/dist/app/cli/chalk/typecheck.js +51 -0
  60. package/dist/app/cli/doctor.d.ts +23 -0
  61. package/dist/app/cli/doctor.js +617 -0
  62. package/dist/app/cli/grades.d.ts +14 -0
  63. package/dist/app/cli/grades.js +44 -0
  64. package/dist/{cli → app/cli}/init.d.ts +3 -1
  65. package/dist/app/cli/init.js +155 -0
  66. package/dist/app/cli/main.js +715 -0
  67. package/dist/app/cli/migrate.d.ts +58 -0
  68. package/dist/app/cli/migrate.js +253 -0
  69. package/dist/app/cli/serve.d.ts +37 -0
  70. package/dist/app/cli/serve.js +98 -0
  71. package/dist/app/cli/shipped.d.ts +30 -0
  72. package/dist/app/cli/shipped.js +47 -0
  73. package/dist/app/cli/skeleton.d.ts +38 -0
  74. package/dist/app/cli/skeleton.js +161 -0
  75. package/dist/app/cli/skills.d.ts +55 -0
  76. package/dist/app/cli/skills.js +189 -0
  77. package/dist/app/cli/themes.d.ts +52 -0
  78. package/dist/app/cli/themes.js +148 -0
  79. package/dist/app/cli/tutors.d.ts +73 -0
  80. package/dist/app/cli/tutors.js +250 -0
  81. package/dist/app/cli/usage.d.ts +2 -0
  82. package/dist/app/cli/usage.js +30 -0
  83. package/dist/app/dictation/recognize.d.ts +18 -0
  84. package/dist/app/dictation/recognize.js +6 -0
  85. package/dist/app/dictation/route.d.ts +52 -0
  86. package/dist/app/dictation/route.js +510 -0
  87. package/dist/app/diff.d.ts +11 -0
  88. package/dist/app/diff.js +71 -0
  89. package/dist/app/http/access.d.ts +62 -0
  90. package/dist/app/http/access.js +180 -0
  91. package/dist/app/http/app.d.ts +246 -0
  92. package/dist/app/http/app.js +1212 -0
  93. package/dist/app/http/dev-activities.d.ts +115 -0
  94. package/dist/app/http/dev-activities.js +193 -0
  95. package/dist/app/http/dev-overview.d.ts +108 -0
  96. package/dist/app/http/dev-overview.js +209 -0
  97. package/dist/app/http/dev-tutor-files.d.ts +80 -0
  98. package/dist/app/http/dev-tutor-files.js +151 -0
  99. package/dist/app/http/parent-home.d.ts +37 -0
  100. package/dist/app/http/parent-home.js +203 -0
  101. package/dist/app/http/range.d.ts +9 -0
  102. package/dist/app/http/range.js +19 -0
  103. package/dist/app/http/raw-view.d.ts +117 -0
  104. package/dist/app/http/raw-view.js +149 -0
  105. package/dist/app/http/send-file.d.ts +7 -0
  106. package/dist/app/http/send-file.js +29 -0
  107. package/dist/app/http/stage.d.ts +24 -0
  108. package/dist/app/http/stage.js +97 -0
  109. package/dist/app/http/theme.d.ts +13 -0
  110. package/dist/app/http/theme.js +41 -0
  111. package/dist/app/machine/bailian.d.ts +28 -0
  112. package/dist/app/machine/bailian.js +88 -0
  113. package/dist/app/mock/mock-live.d.ts +16 -0
  114. package/dist/app/mock/mock-live.js +140 -0
  115. package/dist/app/mock/mock.d.ts +89 -0
  116. package/dist/app/mock/mock.js +1117 -0
  117. package/dist/app/replay.d.ts +94 -0
  118. package/dist/app/replay.js +170 -0
  119. package/dist/app/skills/analyze-doc.d.ts +3 -0
  120. package/dist/app/skills/analyze-doc.js +47 -0
  121. package/dist/app/skills/home-doc.d.ts +5 -0
  122. package/dist/app/skills/home-doc.js +112 -0
  123. package/dist/app/skills/tune-doc.d.ts +3 -0
  124. package/dist/app/skills/tune-doc.js +80 -0
  125. package/dist/app/talk/list.d.ts +11 -0
  126. package/dist/app/talk/list.js +9 -0
  127. package/dist/app/talk/route.d.ts +16 -0
  128. package/dist/app/talk/route.js +142 -0
  129. package/dist/app/workspace.d.ts +58 -0
  130. package/dist/{cli → app}/workspace.js +82 -36
  131. package/dist/app/ws/route.d.ts +25 -0
  132. package/dist/app/ws/route.js +29 -0
  133. package/dist/app/ws/ws.d.ts +31 -0
  134. package/dist/app/ws/ws.js +169 -0
  135. package/dist/board/canvas-chat.d.ts +97 -0
  136. package/dist/board/canvas-chat.js +175 -0
  137. package/dist/board/card-guards.d.ts +15 -0
  138. package/dist/board/card-guards.js +38 -0
  139. package/dist/board/cards/canvas.d.ts +41 -0
  140. package/dist/board/cards/canvas.js +83 -0
  141. package/dist/board/cards/choice.d.ts +20 -0
  142. package/dist/board/cards/choice.js +64 -0
  143. package/dist/board/cards/code.d.ts +9 -0
  144. package/dist/board/cards/code.js +10 -0
  145. package/dist/board/cards/dictation.d.ts +42 -0
  146. package/dist/board/cards/dictation.js +105 -0
  147. package/dist/board/cards/docs.d.ts +47 -0
  148. package/dist/board/cards/docs.js +152 -0
  149. package/dist/board/cards/image.d.ts +13 -0
  150. package/dist/board/cards/image.js +26 -0
  151. package/dist/board/cards/index.d.ts +62 -0
  152. package/dist/board/cards/index.js +144 -0
  153. package/dist/board/cards/kind.d.ts +33 -0
  154. package/dist/board/cards/kind.js +9 -0
  155. package/dist/board/cards/lecture.d.ts +26 -0
  156. package/dist/board/cards/lecture.js +62 -0
  157. package/dist/board/cards/paint.d.ts +38 -0
  158. package/dist/board/cards/paint.js +85 -0
  159. package/dist/board/cards/photo.d.ts +15 -0
  160. package/dist/board/cards/photo.js +29 -0
  161. package/dist/board/cards/read.d.ts +8 -0
  162. package/dist/board/cards/read.js +18 -0
  163. package/dist/board/cards/text.d.ts +20 -0
  164. package/dist/board/cards/text.js +59 -0
  165. package/dist/board/cards/tianzige.d.ts +16 -0
  166. package/dist/board/cards/tianzige.js +64 -0
  167. package/dist/board/cards/tutor.d.ts +72 -0
  168. package/dist/board/cards/tutor.js +134 -0
  169. package/dist/board/cards/word.d.ts +20 -0
  170. package/dist/board/cards/word.js +76 -0
  171. package/dist/board/lecture.d.ts +100 -0
  172. package/dist/board/lecture.js +204 -0
  173. package/dist/board/paper.d.ts +20 -0
  174. package/dist/board/paper.js +76 -0
  175. package/dist/board/parse.d.ts +120 -0
  176. package/dist/board/parse.js +330 -0
  177. package/dist/board/presentation.d.ts +295 -0
  178. package/dist/board/presentation.js +615 -0
  179. package/dist/board/sections.d.ts +16 -0
  180. package/dist/board/sections.js +130 -0
  181. package/dist/brain/api-tools.d.ts +8 -0
  182. package/dist/brain/api-tools.js +190 -0
  183. package/dist/brain/api.d.ts +62 -0
  184. package/dist/brain/api.js +411 -0
  185. package/dist/brain/cli/adapters.d.ts +60 -0
  186. package/dist/brain/cli/adapters.js +91 -0
  187. package/dist/brain/cli/qwen.d.ts +11 -0
  188. package/dist/brain/cli/qwen.js +141 -0
  189. package/dist/brain/cli/run-plan.d.ts +59 -0
  190. package/dist/brain/cli/run-plan.js +71 -0
  191. package/dist/brain/cli/run.d.ts +35 -0
  192. package/dist/brain/cli/run.js +256 -0
  193. package/dist/brain/cli/stream-json.d.ts +18 -0
  194. package/dist/brain/cli/stream-json.js +86 -0
  195. package/dist/brain/cli/types.d.ts +144 -0
  196. package/dist/brain/cli/types.js +3 -0
  197. package/dist/brain/cli/warm.d.ts +53 -0
  198. package/dist/brain/cli/warm.js +103 -0
  199. package/dist/brain/index.d.ts +145 -0
  200. package/dist/brain/index.js +74 -0
  201. package/dist/brain/stream.d.ts +20 -0
  202. package/dist/brain/stream.js +70 -0
  203. package/dist/brain/transcript.d.ts +45 -0
  204. package/dist/brain/transcript.js +132 -0
  205. package/dist/chalk/actions.d.ts +37 -0
  206. package/dist/chalk/actions.js +69 -0
  207. package/dist/chalk/bundle.d.ts +26 -0
  208. package/dist/chalk/bundle.js +69 -0
  209. package/dist/chalk/check.d.ts +28 -0
  210. package/dist/chalk/check.js +291 -0
  211. package/dist/chalk/circle.d.ts +64 -0
  212. package/dist/chalk/circle.js +193 -0
  213. package/dist/chalk/clock.d.ts +84 -0
  214. package/dist/chalk/clock.js +84 -0
  215. package/dist/chalk/geometry.d.ts +44 -0
  216. package/dist/chalk/geometry.js +139 -0
  217. package/dist/chalk/glyphs/capitals.d.ts +12 -0
  218. package/dist/chalk/glyphs/capitals.js +264 -0
  219. package/dist/chalk/glyphs/index.d.ts +21 -0
  220. package/dist/chalk/glyphs/index.js +18 -0
  221. package/dist/chalk/glyphs/letters.d.ts +13 -0
  222. package/dist/chalk/glyphs/letters.js +280 -0
  223. package/dist/chalk/glyphs/metrics.d.ts +33 -0
  224. package/dist/chalk/glyphs/metrics.js +28 -0
  225. package/dist/chalk/glyphs/registry.d.ts +7 -0
  226. package/dist/chalk/glyphs/registry.js +8 -0
  227. package/dist/chalk/glyphs/sample.d.ts +32 -0
  228. package/dist/chalk/glyphs/sample.js +102 -0
  229. package/dist/chalk/glyphs/skeleton.d.ts +64 -0
  230. package/dist/chalk/glyphs/skeleton.js +126 -0
  231. package/dist/chalk/glyphs/types.d.ts +58 -0
  232. package/dist/chalk/glyphs/types.js +17 -0
  233. package/dist/chalk/index.d.ts +23 -0
  234. package/dist/chalk/index.js +15 -0
  235. package/dist/chalk/manifest.d.ts +41 -0
  236. package/dist/chalk/manifest.js +6 -0
  237. package/dist/chalk/paint.d.ts +180 -0
  238. package/dist/chalk/paint.js +210 -0
  239. package/dist/chalk/pointer.d.ts +8 -0
  240. package/dist/chalk/pointer.js +21 -0
  241. package/dist/chalk/prepare.d.ts +11 -0
  242. package/dist/chalk/prepare.js +15 -0
  243. package/dist/chalk/scene-schema.d.ts +199 -0
  244. package/dist/chalk/scene-schema.js +91 -0
  245. package/dist/chalk/seed.d.ts +3 -0
  246. package/dist/chalk/seed.js +10 -0
  247. package/dist/chalk/text-metrics.d.ts +8 -0
  248. package/dist/chalk/text-metrics.js +156 -0
  249. package/dist/chalk/timeline.d.ts +47 -0
  250. package/dist/chalk/timeline.js +84 -0
  251. package/dist/chalk/types.d.ts +150 -0
  252. package/dist/chalk/types.js +8 -0
  253. package/dist/lib/index.d.ts +14 -8
  254. package/dist/lib/index.js +14 -8
  255. package/dist/media/draw.d.ts +23 -0
  256. package/dist/media/draw.js +44 -0
  257. package/dist/media/mp3.d.ts +6 -0
  258. package/dist/media/mp3.js +58 -0
  259. package/dist/media/mp4.d.ts +1 -0
  260. package/dist/media/mp4.js +58 -0
  261. package/dist/media/tts-voices.d.ts +18 -0
  262. package/dist/media/tts-voices.js +606 -0
  263. package/dist/media/tts.d.ts +56 -0
  264. package/dist/media/tts.js +174 -0
  265. package/dist/media/vision.d.ts +25 -0
  266. package/dist/media/vision.js +71 -0
  267. package/dist/memory/commit.d.ts +67 -0
  268. package/dist/memory/commit.js +130 -0
  269. package/dist/memory/context.d.ts +86 -0
  270. package/dist/memory/context.js +97 -0
  271. package/dist/memory/diary.d.ts +84 -0
  272. package/dist/memory/diary.js +183 -0
  273. package/dist/memory/grade.d.ts +2 -0
  274. package/dist/memory/grade.js +7 -0
  275. package/dist/{lib → memory}/plan.d.ts +3 -1
  276. package/dist/{lib → memory}/plan.js +10 -1
  277. package/dist/memory/proposals.d.ts +11 -0
  278. package/dist/memory/proposals.js +43 -0
  279. package/dist/memory/retrieval.d.ts +44 -0
  280. package/dist/memory/retrieval.js +157 -0
  281. package/dist/memory/timetable.d.ts +19 -0
  282. package/dist/memory/timetable.js +95 -0
  283. package/dist/memory/vault-notes.d.ts +165 -0
  284. package/dist/memory/vault-notes.js +359 -0
  285. package/dist/memory/vault.d.ts +70 -0
  286. package/dist/memory/vault.js +169 -0
  287. package/dist/realtime/bailian.d.ts +120 -0
  288. package/dist/realtime/bailian.js +288 -0
  289. package/dist/realtime/cues.d.ts +51 -0
  290. package/dist/realtime/cues.js +94 -0
  291. package/dist/realtime/listen.d.ts +32 -0
  292. package/dist/realtime/listen.js +53 -0
  293. package/dist/realtime/preview.d.ts +23 -0
  294. package/dist/realtime/preview.js +38 -0
  295. package/dist/realtime/prompt.d.ts +8 -0
  296. package/dist/realtime/prompt.js +13 -0
  297. package/dist/realtime/voices.d.ts +19 -0
  298. package/dist/realtime/voices.js +71 -0
  299. package/dist/runtime/activities.d.ts +17 -0
  300. package/dist/runtime/activities.js +46 -0
  301. package/dist/runtime/activity-state.d.ts +22 -0
  302. package/dist/runtime/activity-state.js +83 -0
  303. package/dist/runtime/activity.d.ts +63 -0
  304. package/dist/runtime/activity.js +428 -0
  305. package/dist/runtime/agent-file.d.ts +24 -0
  306. package/dist/runtime/agent-file.js +59 -0
  307. package/dist/runtime/auto-bookkeep.d.ts +30 -0
  308. package/dist/runtime/auto-bookkeep.js +84 -0
  309. package/dist/{lib → runtime/context}/context-pack.d.ts +3 -3
  310. package/dist/runtime/context/context-pack.js +182 -0
  311. package/dist/runtime/context/thread-digest.d.ts +4 -0
  312. package/dist/runtime/context/thread-digest.js +35 -0
  313. package/dist/runtime/context/tutor-rules.d.ts +25 -0
  314. package/dist/runtime/context/tutor-rules.js +47 -0
  315. package/dist/runtime/delivery/delivery.d.ts +94 -0
  316. package/dist/runtime/delivery/delivery.js +145 -0
  317. package/dist/runtime/delivery/playback.d.ts +25 -0
  318. package/dist/runtime/delivery/playback.js +29 -0
  319. package/dist/runtime/delivery/player.d.ts +145 -0
  320. package/dist/runtime/delivery/player.js +221 -0
  321. package/dist/runtime/delivery/queue.d.ts +89 -0
  322. package/dist/runtime/delivery/queue.js +59 -0
  323. package/dist/runtime/home/edit.d.ts +39 -0
  324. package/dist/runtime/home/edit.js +132 -0
  325. package/dist/runtime/home/home.d.ts +180 -0
  326. package/dist/runtime/home/home.js +311 -0
  327. package/dist/runtime/home/store.d.ts +142 -0
  328. package/dist/runtime/home/store.js +440 -0
  329. package/dist/runtime/journal/conversation.d.ts +46 -0
  330. package/dist/runtime/journal/conversation.js +89 -0
  331. package/dist/runtime/journal/events.d.ts +27 -0
  332. package/dist/runtime/journal/events.js +136 -0
  333. package/dist/runtime/journal/kid-log.d.ts +105 -0
  334. package/dist/runtime/journal/kid-log.js +133 -0
  335. package/dist/runtime/journal/ledger.d.ts +17 -0
  336. package/dist/{lib → runtime/journal}/ledger.js +7 -32
  337. package/dist/runtime/journal/mix.d.ts +33 -0
  338. package/dist/runtime/journal/mix.js +88 -0
  339. package/dist/runtime/journal/mouth-index.d.ts +26 -0
  340. package/dist/runtime/journal/mouth-index.js +34 -0
  341. package/dist/runtime/journal/mouth.d.ts +54 -0
  342. package/dist/runtime/journal/mouth.js +102 -0
  343. package/dist/runtime/journal/recorder.d.ts +46 -0
  344. package/dist/runtime/journal/recorder.js +58 -0
  345. package/dist/runtime/journal/store.d.ts +123 -0
  346. package/dist/runtime/journal/store.js +316 -0
  347. package/dist/runtime/kid-input.d.ts +16 -0
  348. package/dist/runtime/kid-input.js +195 -0
  349. package/dist/runtime/kid-view.d.ts +124 -0
  350. package/dist/runtime/kid-view.js +157 -0
  351. package/dist/runtime/lecture.d.ts +86 -0
  352. package/dist/runtime/lecture.js +237 -0
  353. package/dist/runtime/live/call.d.ts +219 -0
  354. package/dist/runtime/live/call.js +1211 -0
  355. package/dist/runtime/live/turns.d.ts +48 -0
  356. package/dist/runtime/live/turns.js +102 -0
  357. package/dist/runtime/runner.d.ts +289 -0
  358. package/dist/runtime/runner.js +898 -0
  359. package/dist/runtime/talk-run.d.ts +21 -0
  360. package/dist/runtime/talk-run.js +34 -0
  361. package/dist/scenes/dictation/match.d.ts +57 -0
  362. package/dist/scenes/dictation/match.js +255 -0
  363. package/dist/scenes/dictation/recognize.d.ts +86 -0
  364. package/dist/scenes/dictation/recognize.js +163 -0
  365. package/dist/scenes/dictation/store.d.ts +112 -0
  366. package/dist/scenes/dictation/store.js +99 -0
  367. package/dist/scenes/look.d.ts +26 -0
  368. package/dist/scenes/look.js +1 -0
  369. package/dist/scenes/paint/painter.d.ts +84 -0
  370. package/dist/scenes/paint/painter.js +170 -0
  371. package/dist/scenes/paint/prompt.d.ts +23 -0
  372. package/dist/scenes/paint/prompt.js +36 -0
  373. package/dist/scenes/talk/en-words.d.ts +8 -0
  374. package/dist/scenes/talk/en-words.js +44 -0
  375. package/dist/scenes/talk/list.d.ts +44 -0
  376. package/dist/scenes/talk/list.js +88 -0
  377. package/dist/scenes/talk/store.d.ts +27 -0
  378. package/dist/scenes/talk/store.js +61 -0
  379. package/dist/scenes/talk/warmup.d.ts +16 -0
  380. package/dist/scenes/talk/warmup.js +39 -0
  381. package/dist/schema/activity.d.ts +149 -0
  382. package/dist/schema/activity.js +113 -0
  383. package/dist/schema/board.d.ts +200 -0
  384. package/dist/schema/board.js +42 -0
  385. package/dist/schema/config.d.ts +353 -80
  386. package/dist/schema/config.js +293 -76
  387. package/dist/schema/context-pack.d.ts +82 -13
  388. package/dist/schema/context-pack.js +97 -10
  389. package/dist/schema/conversation-files.d.ts +43 -0
  390. package/dist/schema/conversation-files.js +26 -0
  391. package/dist/schema/conversation.d.ts +459 -13
  392. package/dist/schema/conversation.js +148 -8
  393. package/dist/schema/events.d.ts +138 -0
  394. package/dist/schema/events.js +1 -0
  395. package/dist/schema/home.d.ts +46 -0
  396. package/dist/schema/home.js +30 -0
  397. package/dist/schema/index.d.ts +19 -4
  398. package/dist/schema/index.js +19 -4
  399. package/dist/schema/json-schema.d.ts +2 -0
  400. package/dist/schema/json-schema.js +23 -0
  401. package/dist/schema/kid-device.d.ts +20 -0
  402. package/dist/schema/kid-device.js +32 -0
  403. package/dist/schema/ledger.d.ts +9 -64
  404. package/dist/schema/ledger.js +7 -31
  405. package/dist/schema/memory.d.ts +73 -0
  406. package/dist/schema/memory.js +47 -0
  407. package/dist/schema/plan.d.ts +2 -2
  408. package/dist/schema/plan.js +2 -2
  409. package/dist/schema/sections.d.ts +32 -25
  410. package/dist/schema/sections.js +21 -22
  411. package/dist/schema/theme.d.ts +25 -0
  412. package/dist/schema/theme.js +26 -0
  413. package/dist/schema/timetable.d.ts +26 -0
  414. package/dist/schema/timetable.js +18 -0
  415. package/dist/schema/workspace.d.ts +41 -0
  416. package/dist/schema/workspace.js +9 -0
  417. package/dist/shared/errors.d.ts +8 -0
  418. package/dist/shared/errors.js +13 -0
  419. package/dist/shared/home.d.ts +2 -0
  420. package/dist/shared/home.js +16 -0
  421. package/dist/shared/human-notes.d.ts +5 -0
  422. package/dist/shared/human-notes.js +7 -0
  423. package/dist/shared/qianwen.d.ts +50 -0
  424. package/dist/shared/qianwen.js +109 -0
  425. package/dist/shared/time.d.ts +9 -0
  426. package/dist/shared/time.js +22 -0
  427. package/dist/shared/tokens.d.ts +18 -0
  428. package/dist/shared/tokens.js +11 -0
  429. package/dist/shared/wav.d.ts +10 -0
  430. package/dist/shared/wav.js +50 -0
  431. package/dist/stage/Assistant-Bold-ZDZZ6JHA.woff2 +0 -0
  432. package/dist/stage/Assistant-Medium-DZ25RZU3.woff2 +0 -0
  433. package/dist/stage/Assistant-Regular-PLF2XOGW.woff2 +0 -0
  434. package/dist/stage/Assistant-SemiBold-CZ5MX6FK.woff2 +0 -0
  435. package/dist/stage/chunk-226TNLQA.js +129 -0
  436. package/dist/stage/chunk-24LGQEKE.js +1 -0
  437. package/dist/stage/chunk-25XV6UY3.js +10 -0
  438. package/dist/stage/chunk-2AZI3NHJ.js +1 -0
  439. package/dist/stage/chunk-2BQZTTBE.js +1 -0
  440. package/dist/stage/chunk-2M7CGY3Y.js +11 -0
  441. package/dist/stage/chunk-2VR4WFQ7.js +10 -0
  442. package/dist/stage/chunk-2ZYXBUWG.js +9 -0
  443. package/dist/stage/chunk-32LAWMGY.js +1 -0
  444. package/dist/stage/chunk-3LEMTSOO.js +11 -0
  445. package/dist/stage/chunk-3QCKGZYE.js +32 -0
  446. package/dist/stage/chunk-44P66WFA.js +1 -0
  447. package/dist/stage/chunk-4AM6FRR6.js +7 -0
  448. package/dist/stage/chunk-4QDE4SUK.js +1 -0
  449. package/dist/stage/chunk-4QESHV3U.js +1 -0
  450. package/dist/stage/chunk-4SG5QPHB.js +2 -0
  451. package/dist/stage/chunk-4T4UVCOC.js +1 -0
  452. package/dist/stage/chunk-4WUEPPG3.js +34 -0
  453. package/dist/stage/chunk-4YCN6UZ5.js +99 -0
  454. package/dist/stage/chunk-5V7ZY2AP.js +1 -0
  455. package/dist/stage/chunk-5VS5Y2VJ.js +6 -0
  456. package/dist/stage/chunk-5W4NO2ZD.js +62 -0
  457. package/dist/stage/chunk-65CRNICM.js +1 -0
  458. package/dist/stage/chunk-66MULO7F.js +5 -0
  459. package/dist/stage/chunk-6COFQTBS.js +162 -0
  460. package/dist/stage/chunk-6VZG3M3I.js +8 -0
  461. package/dist/stage/chunk-7HVDH43T.js +1 -0
  462. package/dist/stage/chunk-7JLJN4EZ.js +8 -0
  463. package/dist/stage/chunk-7QDSP4LN.js +1 -0
  464. package/dist/stage/chunk-7R6OQAO3.js +1 -0
  465. package/dist/stage/chunk-7VTTHZKW.js +7 -0
  466. package/dist/stage/chunk-ATHR5KEN.js +10 -0
  467. package/dist/stage/chunk-B6R5LTP2.js +36 -0
  468. package/dist/stage/chunk-BD4WE264.js +1 -0
  469. package/dist/stage/chunk-BONANU47.js +206 -0
  470. package/dist/stage/chunk-BTVW7OFK.js +89 -0
  471. package/dist/stage/chunk-BUTJIDHG.js +8 -0
  472. package/dist/stage/chunk-C2IPYMML.js +84 -0
  473. package/dist/stage/chunk-C54FTPPV.js +9 -0
  474. package/dist/stage/chunk-C6LOUF2Z.js +90 -0
  475. package/dist/stage/chunk-CFF3PILO.js +339 -0
  476. package/dist/stage/chunk-CI2FQ2JY.js +9 -0
  477. package/dist/stage/chunk-CW5O4RV7.js +12 -0
  478. package/dist/stage/chunk-CYABNQYD.js +1 -0
  479. package/dist/stage/chunk-D7FFA4NS.js +15 -0
  480. package/dist/stage/chunk-DUNNXU6Z.js +8 -0
  481. package/dist/stage/chunk-E3E4Q6JF.js +6 -0
  482. package/dist/stage/chunk-EB3U3LH7.js +9 -0
  483. package/dist/stage/chunk-EGSZ736B.js +8 -0
  484. package/dist/stage/chunk-EOBXW5VQ.js +2 -0
  485. package/dist/stage/chunk-ERZC3B7Y.js +11 -0
  486. package/dist/stage/chunk-ESDOOBIH.js +11 -0
  487. package/dist/stage/chunk-EVU4QAL4.js +178 -0
  488. package/dist/stage/chunk-EVVZI2NY.js +39 -0
  489. package/dist/stage/chunk-FBKAZUKD.js +39 -0
  490. package/dist/stage/chunk-FDVKYQJN.js +1 -0
  491. package/dist/stage/chunk-FGPVYHVR.js +5 -0
  492. package/dist/stage/chunk-FHUD4AZC.js +1 -0
  493. package/dist/stage/chunk-FKUJ2DMY.js +96 -0
  494. package/dist/stage/chunk-FNZGVIJV.js +1 -0
  495. package/dist/stage/chunk-GBYSEGYM.js +78 -0
  496. package/dist/stage/chunk-GCO4TDHX.js +1 -0
  497. package/dist/stage/chunk-GKTML2LG.js +10 -0
  498. package/dist/stage/chunk-GMDIHHXQ.js +11 -0
  499. package/dist/stage/chunk-GOUNACI3.js +10 -0
  500. package/dist/stage/chunk-GXAYATPF.js +3 -0
  501. package/dist/stage/chunk-H2K2DDXV.js +8 -0
  502. package/dist/stage/chunk-H3UJI6ZY.js +13 -0
  503. package/dist/stage/chunk-H6PUGCME.js +7 -0
  504. package/dist/stage/chunk-HNBUIMIG.js +1 -0
  505. package/dist/stage/chunk-HRZY2BJQ.js +10 -0
  506. package/dist/stage/chunk-HSPJGALW.js +30 -0
  507. package/dist/stage/chunk-IBYORHIP.js +25 -0
  508. package/dist/stage/chunk-IHF4EWTY.js +1 -0
  509. package/dist/stage/chunk-ISBRPNKI.js +1 -0
  510. package/dist/stage/chunk-IZ3OI3C2.js +2 -0
  511. package/dist/stage/chunk-JEFZAC2R.js +1 -0
  512. package/dist/stage/chunk-JFIGRDPO.js +1 -0
  513. package/dist/stage/chunk-JFVYBOOC.js +9 -0
  514. package/dist/stage/chunk-JGD4TUTQ.js +1 -0
  515. package/dist/stage/chunk-JO4BEHDH.js +4 -0
  516. package/dist/stage/chunk-JOWBS42C.js +1 -0
  517. package/dist/stage/chunk-JP3TM2TG.js +1 -0
  518. package/dist/stage/chunk-JVK2C52O.js +1 -0
  519. package/dist/stage/chunk-K4I76XBX.js +14 -0
  520. package/dist/stage/chunk-KA6CZZ4M.js +1 -0
  521. package/dist/stage/chunk-KESSJ36M.js +1 -0
  522. package/dist/stage/chunk-LKATEVRU.js +1 -0
  523. package/dist/stage/chunk-LS4EJ2EI.js +1 -0
  524. package/dist/stage/chunk-LUKJQC2X.js +70 -0
  525. package/dist/stage/chunk-LWULR3SM.js +1 -0
  526. package/dist/stage/chunk-LWVRFMKX.js +2 -0
  527. package/dist/stage/chunk-LXC4ZBPZ.js +1 -0
  528. package/dist/stage/chunk-M2UP255H.js +1 -0
  529. package/dist/stage/chunk-MAPPXUZQ.js +231 -0
  530. package/dist/stage/chunk-MBMPW7Z5.js +1 -0
  531. package/dist/stage/chunk-MD3HMMTK.js +1 -0
  532. package/dist/stage/chunk-MLPCUIKR.js +17 -0
  533. package/dist/stage/chunk-MNQIRPDQ.js +8 -0
  534. package/dist/stage/chunk-MRG7MJVS.js +1 -0
  535. package/dist/stage/chunk-MU6EXW72.js +10 -0
  536. package/dist/stage/chunk-MVU2X6LU.js +4 -0
  537. package/dist/stage/chunk-N6UA5CZV.js +36 -0
  538. package/dist/stage/chunk-NLZIT2TJ.js +7 -0
  539. package/dist/stage/chunk-NOJR3J7M.js +1 -0
  540. package/dist/stage/chunk-NT7ARDOL.js +1 -0
  541. package/dist/stage/chunk-NWOGMPZH.js +1 -0
  542. package/dist/stage/chunk-NXE4KMG3.js +40 -0
  543. package/dist/stage/chunk-O4YCZXD2.js +257 -0
  544. package/dist/stage/chunk-OAJZ7HLK.js +1 -0
  545. package/dist/stage/chunk-OCFCFASO.js +1 -0
  546. package/dist/stage/chunk-ODGPG5RY.js +7 -0
  547. package/dist/stage/chunk-ODUEA52Q.js +3 -0
  548. package/dist/stage/chunk-OGDJ3FCI.js +1 -0
  549. package/dist/stage/chunk-OLDJ55TT.js +1 -0
  550. package/dist/stage/chunk-OOCL4ATI.js +2 -0
  551. package/dist/stage/chunk-OQEFDUDV.js +1 -0
  552. package/dist/stage/chunk-OQWVEWG7.js +4 -0
  553. package/dist/stage/chunk-OUIX6BGK.js +1 -0
  554. package/dist/stage/chunk-OV7OZYUO.js +7 -0
  555. package/dist/stage/chunk-PFGDY33O.js +1 -0
  556. package/dist/stage/chunk-PFJDUJB3.js +139 -0
  557. package/dist/stage/chunk-PGEW76ER.js +1 -0
  558. package/dist/stage/chunk-PP76TAQX.js +32 -0
  559. package/dist/stage/chunk-PTBOP4OT.js +2 -0
  560. package/dist/stage/chunk-PX2RVHCK.js +1 -0
  561. package/dist/stage/chunk-Q7K3PNAD.js +1 -0
  562. package/dist/stage/chunk-QDDPLZDB.js +1 -0
  563. package/dist/stage/chunk-QLGLZ77F.js +1 -0
  564. package/dist/stage/chunk-QOPFDFHI.js +1 -0
  565. package/dist/stage/chunk-QXT4KAEJ.js +1 -0
  566. package/dist/stage/chunk-R4YVZCIT.js +1 -0
  567. package/dist/stage/chunk-R6P6EHWA.js +62 -0
  568. package/dist/stage/chunk-RCH3OXBI.js +9 -0
  569. package/dist/stage/chunk-RHPE44I2.js +1 -0
  570. package/dist/stage/chunk-RJ2R4FVC.js +1 -0
  571. package/dist/stage/chunk-RJH2YVTD.js +1 -0
  572. package/dist/stage/chunk-RLWWW5OB.js +6 -0
  573. package/dist/stage/chunk-S3WO35Z7.js +120 -0
  574. package/dist/stage/chunk-S7ZGX6MW.js +1 -0
  575. package/dist/stage/chunk-SIAWX27B.js +1 -0
  576. package/dist/stage/chunk-SLG4X622.js +1 -0
  577. package/dist/stage/chunk-SLJRBC77.js +168 -0
  578. package/dist/stage/chunk-SRORWQJZ.js +1 -0
  579. package/dist/stage/chunk-STZTUIIF.js +2 -0
  580. package/dist/stage/chunk-SVQ6MWNV.js +9 -0
  581. package/dist/stage/chunk-TL3HLL2S.js +132 -0
  582. package/dist/stage/chunk-U3DOE6SF.js +24 -0
  583. package/dist/stage/chunk-UABQIZKW.js +6 -0
  584. package/dist/stage/chunk-UDK3R764.js +1 -0
  585. package/dist/stage/chunk-UFF4E54B.js +41 -0
  586. package/dist/stage/chunk-UFP5Q4AY.js +1 -0
  587. package/dist/stage/chunk-UMH2TSW2.js +72 -0
  588. package/dist/stage/chunk-UTASVNF5.js +10 -0
  589. package/dist/stage/chunk-UW7ML5ML.js +88 -0
  590. package/dist/stage/chunk-V3J7F6OP.js +1 -0
  591. package/dist/stage/chunk-VEHP5B5Q.js +5 -0
  592. package/dist/stage/chunk-VRXWB733.js +9 -0
  593. package/dist/stage/chunk-VVDHBBS5.js +5 -0
  594. package/dist/stage/chunk-VYFOH6FU.js +106 -0
  595. package/dist/stage/chunk-W3VZTLQS.js +3 -0
  596. package/dist/stage/chunk-W7WNRWTZ.js +8 -0
  597. package/dist/stage/chunk-WHUCV53C.js +1 -0
  598. package/dist/stage/chunk-WULMYHIF.js +1 -0
  599. package/dist/stage/chunk-X54EX7AW.js +9 -0
  600. package/dist/stage/chunk-X565ISZM.js +1 -0
  601. package/dist/stage/chunk-XGZMDECB.js +1 -0
  602. package/dist/stage/chunk-XHONC4RF.js +172 -0
  603. package/dist/stage/chunk-XIK4XQ6E.js +24 -0
  604. package/dist/stage/chunk-XJQQWFTE.js +1 -0
  605. package/dist/stage/chunk-XM4WOU3I.js +13 -0
  606. package/dist/stage/chunk-XM7Y5HP5.js +38 -0
  607. package/dist/stage/chunk-XNYYRGD5.js +292 -0
  608. package/dist/stage/chunk-XOYVR3SV.js +1 -0
  609. package/dist/stage/chunk-XQIW5HCE.js +1 -0
  610. package/dist/stage/chunk-YEWL7FUW.js +8 -0
  611. package/dist/stage/chunk-YI55PY3V.js +1 -0
  612. package/dist/stage/chunk-YM63HI6W.js +1 -0
  613. package/dist/stage/chunk-YNLGLU4P.js +9 -0
  614. package/dist/stage/chunk-YTNMNOWP.js +1 -0
  615. package/dist/stage/chunk-YV62XKTC.js +1 -0
  616. package/dist/stage/chunk-YVBA3QW6.js +1 -0
  617. package/dist/stage/chunk-Z2SY2HOC.js +1 -0
  618. package/dist/stage/chunk-ZBTCQEBK.js +10 -0
  619. package/dist/stage/chunk-ZCUFN74D.js +1 -0
  620. package/dist/stage/chunk-ZHOULXEJ.js +11 -0
  621. package/dist/stage/chunk-ZTRZIET2.js +1 -0
  622. package/dist/stage/index.html +11 -0
  623. package/dist/stage/stage.css +1 -0
  624. package/dist/stage/stage.js +1 -0
  625. package/dist/ui/dev/dev-page.d.ts +1 -0
  626. package/dist/ui/dev/dev-page.js +2248 -0
  627. package/dist/ui/dev/dev-theme.d.ts +6 -0
  628. package/dist/ui/dev/dev-theme.js +67 -0
  629. package/dist/ui/dev/qr-page.d.ts +8 -0
  630. package/dist/ui/dev/qr-page.js +61 -0
  631. package/dist/ui/dev/voice-gallery-page.d.ts +1 -0
  632. package/dist/ui/dev/voice-gallery-page.js +121 -0
  633. package/dist/ui/dev/voice-scenes.d.ts +21 -0
  634. package/dist/ui/dev/voice-scenes.js +30 -0
  635. package/dist/ui/dictation/en-box.d.ts +2 -0
  636. package/dist/ui/dictation/en-box.js +86 -0
  637. package/dist/ui/dictation/en-page.d.ts +1 -0
  638. package/dist/ui/dictation/en-page.js +484 -0
  639. package/dist/ui/dictation/page.d.ts +1 -0
  640. package/dist/ui/dictation/page.js +1084 -0
  641. package/dist/ui/dictation/parent-page.d.ts +1 -0
  642. package/dist/ui/dictation/parent-page.js +234 -0
  643. package/dist/ui/dictation/reel-mode.d.ts +1 -0
  644. package/dist/ui/dictation/reel-mode.js +87 -0
  645. package/dist/ui/dictation/reel-page.d.ts +1 -0
  646. package/dist/ui/dictation/reel-page.js +62 -0
  647. package/dist/ui/dictation/reel.d.ts +163 -0
  648. package/dist/ui/dictation/reel.js +436 -0
  649. package/dist/ui/dictation/ui.d.ts +44 -0
  650. package/dist/ui/dictation/ui.js +80 -0
  651. package/dist/ui/dictation/unlock.d.ts +7 -0
  652. package/dist/ui/dictation/unlock.js +16 -0
  653. package/dist/ui/kid/audio-client.d.ts +11 -0
  654. package/dist/ui/kid/audio-client.js +74 -0
  655. package/dist/ui/kid/board-mark-art.d.ts +37 -0
  656. package/dist/ui/kid/board-mark-art.js +5 -0
  657. package/dist/ui/kid/board-mark.d.ts +24 -0
  658. package/dist/ui/kid/board-mark.js +58 -0
  659. package/dist/ui/kid/kid-log.d.ts +15 -0
  660. package/dist/ui/kid/kid-log.js +87 -0
  661. package/dist/ui/kid/kid-nav.d.ts +11 -0
  662. package/dist/ui/kid/kid-nav.js +22 -0
  663. package/dist/ui/kid/kid-page.d.ts +9 -0
  664. package/dist/ui/kid/kid-page.js +3719 -0
  665. package/dist/ui/kid/letters.d.ts +26 -0
  666. package/dist/ui/kid/letters.js +51 -0
  667. package/dist/ui/kid/photo-edit.d.ts +83 -0
  668. package/dist/ui/kid/photo-edit.js +106 -0
  669. package/dist/ui/kid/photo-ui.d.ts +23 -0
  670. package/dist/ui/kid/photo-ui.js +60 -0
  671. package/dist/ui/kid/reel.d.ts +419 -0
  672. package/dist/ui/kid/reel.js +648 -0
  673. package/dist/ui/kid/tianzige.d.ts +8 -0
  674. package/dist/ui/kid/tianzige.js +45 -0
  675. package/dist/ui/kid/tutor-face.d.ts +35 -0
  676. package/dist/ui/kid/tutor-face.js +84 -0
  677. package/dist/ui/kid/voice-ui.d.ts +70 -0
  678. package/dist/ui/kid/voice-ui.js +316 -0
  679. package/dist/ui/kid/voice-view.d.ts +71 -0
  680. package/dist/ui/kid/voice-view.js +75 -0
  681. package/dist/ui/kid/word-draw.d.ts +2 -0
  682. package/dist/ui/kid/word-draw.js +107 -0
  683. package/dist/ui/kid/word-emoji.d.ts +10 -0
  684. package/dist/ui/kid/word-emoji.js +66 -0
  685. package/dist/ui/kid/word-layout.d.ts +25 -0
  686. package/dist/ui/kid/word-layout.js +29 -0
  687. package/dist/ui/parent/parent-home-page.d.ts +1 -0
  688. package/dist/ui/parent/parent-home-page.js +414 -0
  689. package/dist/ui/parent/parent-page.d.ts +2 -0
  690. package/dist/ui/parent/parent-page.js +507 -0
  691. package/dist/ui/shared/brand.d.ts +36 -0
  692. package/dist/ui/shared/brand.js +51 -0
  693. package/dist/ui/shared/favicon.d.ts +12 -0
  694. package/dist/ui/shared/favicon.js +96 -0
  695. package/dist/ui/shared/icon.d.ts +9 -0
  696. package/dist/ui/shared/icon.js +35 -0
  697. package/dist/ui/shared/inline-lib.d.ts +1 -0
  698. package/dist/ui/shared/inline-lib.js +28 -0
  699. package/dist/ui/shared/logo.d.ts +31 -0
  700. package/dist/ui/shared/logo.js +43 -0
  701. package/dist/ui/shared/page-dom.d.ts +12 -0
  702. package/dist/ui/shared/page-dom.js +36 -0
  703. package/dist/ui/shared/png.d.ts +1 -0
  704. package/dist/ui/shared/png.js +45 -0
  705. package/dist/ui/shared/qr-svg.d.ts +3 -0
  706. package/dist/ui/shared/qr-svg.js +32 -0
  707. package/dist/ui/shared/qr.d.ts +14 -0
  708. package/dist/ui/shared/qr.js +281 -0
  709. package/dist/ui/shared/reel-dock.d.ts +22 -0
  710. package/dist/ui/shared/reel-dock.js +365 -0
  711. package/dist/ui/shared/tutor-color.d.ts +15 -0
  712. package/dist/ui/shared/tutor-color.js +47 -0
  713. package/dist/ui/talk/page.d.ts +6 -0
  714. package/dist/ui/talk/page.js +294 -0
  715. package/grades/grade-2/README.md +11 -0
  716. package/grades/grade-2/VALIDATION.md +41 -0
  717. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273.md +157 -0
  718. 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
  719. 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
  720. 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
  721. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235.md +64 -0
  722. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235./344/276/213/345/255/220.md +31 -0
  723. package/grades/grade-2/agents/chinese-tutor/activities//345/220/254/345/206/231.md +48 -0
  724. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +79 -0
  725. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  726. package/grades/grade-2/agents/chinese-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  727. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271.md +81 -0
  728. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  729. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235.md +94 -0
  730. 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
  731. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +82 -0
  732. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  733. package/grades/grade-2/agents/chinese-tutor.md +59 -0
  734. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276.md +149 -0
  735. 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
  736. package/grades/grade-2/agents/english-tutor/activities//345/220/254/345/206/231.md +47 -0
  737. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +78 -0
  738. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  739. package/grades/grade-2/agents/english-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  740. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271.md +80 -0
  741. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  742. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +86 -0
  743. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  744. package/grades/grade-2/agents/english-tutor.md +57 -0
  745. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +78 -0
  746. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  747. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202.md +56 -0
  748. 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
  749. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271.md +80 -0
  750. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  751. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +81 -0
  752. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  753. package/grades/grade-2/agents/math-tutor.md +51 -0
  754. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/index.json +44 -0
  755. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-1.mp3 +0 -0
  756. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-2.mp3 +0 -0
  757. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-3.mp3 +0 -0
  758. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-4.mp3 +0 -0
  759. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-5.mp3 +0 -0
  760. package/grades/grade-2/examples/2026-10-27-pingjunfen/bake.json +1 -0
  761. package/grades/grade-2/examples/2026-10-27-pingjunfen/manifest.json +63 -0
  762. package/grades/grade-2/examples/2026-10-27-pingjunfen/scene.json +247 -0
  763. package/grades/grade-2/examples/2026-10-27-pingjunfen.md +40 -0
  764. package/grades/grade-2/examples/2026-10-27-pingjunfen.ts +26 -0
  765. package/grades/grade-2/examples//345/271/263/345/235/207/345/210/206./344/276/213/345/255/220.md +24 -0
  766. package/grades/grade-2/examples//346/225/260/345/255/246/345/271/263/345/235/207/345/210/206.md +42 -0
  767. package/grades/grade-2/validation/2026-10-27.json +4410 -0
  768. package/package.json +32 -12
  769. package/skills/chalk-cli/SKILL.md +62 -0
  770. package/skills/chalk-scene/SKILL.md +91 -0
  771. package/skills/chalk-teaching/SKILL.md +82 -0
  772. 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
  773. package/skills/chalk-teaching/models//345/207/221/345/215/201.md +7 -0
  774. package/skills/chalk-teaching/models//345/221/250/346/234/237/350/247/204/345/276/213.md +6 -0
  775. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/345/242/236/345/207/217.md +6 -0
  776. 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
  777. 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
  778. package/skills/chalk-teaching/models//345/260/217/346/243/222/350/277/233/344/275/215/345/212/240.md +7 -0
  779. package/skills/chalk-teaching/models//345/260/217/346/243/222/351/200/200/344/275/215/345/207/217.md +6 -0
  780. package/skills/chalk-teaching/models//346/216/222/351/230/237/347/202/271/351/230/265.md +7 -0
  781. package/skills/chalk-teaching/models//346/227/266/351/227/264/346/225/260/350/275/264.md +6 -0
  782. package/skills/chalk-teaching/models//346/245/274/345/261/202/351/227/264/351/232/224/345/233/276.md +7 -0
  783. package/skills/chalk-teaching/models//347/240/264/345/215/201.md +7 -0
  784. package/skills/chalk-teaching/models//347/253/226/345/274/217/351/200/200/344/275/215.md +6 -0
  785. package/skills/chalk-teaching/models//347/272/277/346/256/265/345/233/276.md +7 -0
  786. package/skills/chalk-teaching/models-index.md +24 -0
  787. 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
  788. package/skills/chalk-teaching/references//350/257/264/346/230/216/346/226/207/344/273/266.md +102 -0
  789. package/skills/chalk-verify/SKILL.md +57 -0
  790. package/skills/chalk-verify/references//350/257/204/345/210/244/346/240/207/345/207/206.md +69 -0
  791. package/skills/cotutor-analyze/SKILL.md +106 -0
  792. package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +31 -0
  793. package/skills/cotutor-board/SKILL.md +373 -0
  794. package/skills/cotutor-board/references/README.md +38 -0
  795. package/skills/cotutor-board/references/canvas.md +68 -0
  796. package/skills/cotutor-board/references/choice.md +55 -0
  797. package/skills/cotutor-board/references/code.md +46 -0
  798. package/skills/cotutor-board/references/image.md +52 -0
  799. package/skills/cotutor-board/references/lecture.md +69 -0
  800. package/skills/cotutor-board/references/paint.md +77 -0
  801. package/skills/cotutor-board/references/photo.md +61 -0
  802. package/skills/cotutor-board/references/read.md +51 -0
  803. package/skills/cotutor-board/references/text.md +69 -0
  804. package/skills/cotutor-board/references/tianzige.md +78 -0
  805. package/skills/cotutor-board/references/word.md +91 -0
  806. package/skills/cotutor-home/SKILL.md +169 -0
  807. package/skills/cotutor-home/references/dictation.md +97 -0
  808. package/skills/cotutor-home/references/tutor.md +148 -0
  809. package/skills/cotutor-home/references//345/221/275/344/273/244.md +21 -0
  810. package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +142 -0
  811. package/skills/cotutor-tune/SKILL.md +147 -0
  812. package/skills/cotutor-tune/references//345/255/227/346/256/265.md +50 -0
  813. package/skills/cotutor-tutor/SKILL.md +261 -0
  814. package/skills/cotutor-tutor/references//344/270/212/344/270/213/346/226/207/345/214/205.md +78 -0
  815. package/themes/default/kid.css +86 -0
  816. package/themes/default/theme.json +26 -0
  817. package/agents/chinese-teacher.md +0 -19
  818. package/agents/homework-aide.md +0 -17
  819. package/agents/math-teacher.md +0 -19
  820. package/agents/planner.md +0 -18
  821. package/agents/reading-teacher.md +0 -19
  822. package/dist/cli/doctor.d.ts +0 -19
  823. package/dist/cli/doctor.js +0 -190
  824. package/dist/cli/init.js +0 -114
  825. package/dist/cli/main.js +0 -123
  826. package/dist/cli/serve.d.ts +0 -19
  827. package/dist/cli/serve.js +0 -22
  828. package/dist/cli/skeleton.d.ts +0 -21
  829. package/dist/cli/skeleton.js +0 -82
  830. package/dist/cli/workspace.d.ts +0 -61
  831. package/dist/lib/agent-file.d.ts +0 -10
  832. package/dist/lib/agent-file.js +0 -16
  833. package/dist/lib/context-pack.js +0 -46
  834. package/dist/lib/conversation.d.ts +0 -28
  835. package/dist/lib/conversation.js +0 -44
  836. package/dist/lib/kid-view.d.ts +0 -26
  837. package/dist/lib/kid-view.js +0 -38
  838. package/dist/lib/ledger.d.ts +0 -21
  839. package/dist/lib/sections.d.ts +0 -12
  840. package/dist/lib/sections.js +0 -151
  841. package/dist/lib/transcript.d.ts +0 -36
  842. package/dist/lib/transcript.js +0 -95
  843. package/dist/server/app.d.ts +0 -13
  844. package/dist/server/app.js +0 -45
  845. /package/dist/{cli → app/cli}/main.d.ts +0 -0
@@ -1,80 +1,23 @@
1
1
  /**
2
- * 公共账本(《cotutor契约草案.md》§5):observations.jsonl 与 artifacts.jsonl,追加式、一行一条、id 唯一;
3
- * 改状态追加新行,同 id 后者为准,不改历史。retracted 用追加行(2026-09-08 拍板)。
2
+ * 产物账本:artifacts.jsonl,追加式、一行一条、id 唯一;改状态追加新行,同 id 后者为准,不改历史。
3
+ * 观察不在这里:观察的真相是 vault 的日记(《obsidian仓库设计.md》§1),老师记账时回「## 记账」段、应用写日记。
4
4
  */
5
5
  import { z } from 'zod';
6
- export declare const EvidenceSchema: z.ZodUnion<readonly [z.ZodObject<{
7
- conversation: z.ZodString;
8
- job: z.ZodOptional<z.ZodString>;
9
- }, z.core.$strip>, z.ZodObject<{
10
- artifact: z.ZodString;
11
- }, z.core.$strip>]>;
12
- export type Evidence = z.infer<typeof EvidenceSchema>;
13
- /** 完整观察行 */
14
- export declare const ObservationSchema: z.ZodObject<{
15
- id: z.ZodString;
16
- date: z.ZodString;
17
- author: z.ZodString;
18
- subject: z.ZodOptional<z.ZodString>;
19
- topic: z.ZodOptional<z.ZodString>;
20
- claim: z.ZodString;
21
- evidence: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
22
- conversation: z.ZodString;
23
- job: z.ZodOptional<z.ZodString>;
24
- }, z.core.$strip>, z.ZodObject<{
25
- artifact: z.ZodString;
26
- }, z.core.$strip>]>>;
27
- retracted: z.ZodDefault<z.ZodBoolean>;
28
- }, z.core.$strip>;
29
- export type Observation = z.infer<typeof ObservationSchema>;
30
- /** 纠错行:只带 id + retracted + 谁 + 何时 */
31
- export declare const ObservationRetractSchema: z.ZodObject<{
32
- id: z.ZodString;
33
- retracted: z.ZodLiteral<true>;
34
- by: z.ZodString;
35
- date: z.ZodString;
36
- }, z.core.$strip>;
37
- export type ObservationRetract = z.infer<typeof ObservationRetractSchema>;
38
- export declare const ObservationLineSchema: z.ZodUnion<readonly [z.ZodObject<{
39
- id: z.ZodString;
40
- date: z.ZodString;
41
- author: z.ZodString;
42
- subject: z.ZodOptional<z.ZodString>;
43
- topic: z.ZodOptional<z.ZodString>;
44
- claim: z.ZodString;
45
- evidence: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
46
- conversation: z.ZodString;
47
- job: z.ZodOptional<z.ZodString>;
48
- }, z.core.$strip>, z.ZodObject<{
49
- artifact: z.ZodString;
50
- }, z.core.$strip>]>>;
51
- retracted: z.ZodDefault<z.ZodBoolean>;
52
- }, z.core.$strip>, z.ZodObject<{
53
- id: z.ZodString;
54
- retracted: z.ZodLiteral<true>;
55
- by: z.ZodString;
56
- date: z.ZodString;
57
- }, z.core.$strip>]>;
58
- export type ObservationLine = z.infer<typeof ObservationLineSchema>;
59
- export declare const ARTIFACT_KINDS: readonly ["课包", "补讲", "批改", "计划", "其它"];
60
- export declare const ARTIFACT_STATUS: readonly ["draft", "ready", "accepted", "retired"];
6
+ export declare const ARTIFACT_KINDS: readonly ["课包", "其它"];
7
+ export declare const ARTIFACT_STATUS: readonly ["draft", "ready", "retired"];
61
8
  export type ArtifactStatus = (typeof ARTIFACT_STATUS)[number];
62
9
  /** 产物事件行:首行要带 kind / by / path,后续行只带变化的字段 */
63
10
  export declare const ArtifactEventSchema: z.ZodObject<{
64
11
  id: z.ZodString;
65
12
  kind: z.ZodOptional<z.ZodEnum<{
66
13
  课包: "课包";
67
- 补讲: "补讲";
68
- 批改: "批改";
69
- 计划: "计划";
70
14
  其它: "其它";
71
15
  }>>;
72
16
  by: z.ZodOptional<z.ZodString>;
73
17
  at: z.ZodString;
74
18
  status: z.ZodOptional<z.ZodEnum<{
75
- draft: "draft";
76
19
  ready: "ready";
77
- accepted: "accepted";
20
+ draft: "draft";
78
21
  retired: "retired";
79
22
  }>>;
80
23
  path: z.ZodOptional<z.ZodString>;
@@ -82,7 +25,8 @@ export declare const ArtifactEventSchema: z.ZodObject<{
82
25
  conversation: z.ZodString;
83
26
  job: z.ZodOptional<z.ZodString>;
84
27
  }, z.core.$strip>>;
85
- hash: z.ZodOptional<z.ZodString>;
28
+ costUsd: z.ZodOptional<z.ZodNumber>;
29
+ durationMs: z.ZodOptional<z.ZodNumber>;
86
30
  }, z.core.$strip>;
87
31
  export type ArtifactEvent = z.infer<typeof ArtifactEventSchema>;
88
32
  /** 折叠后的产物 */
@@ -94,7 +38,8 @@ export interface Artifact {
94
38
  status: ArtifactStatus;
95
39
  path?: string;
96
40
  source?: ArtifactEvent['source'];
97
- hash?: string;
41
+ costUsd?: number;
42
+ durationMs?: number;
98
43
  /** 最后一次事件时间 */
99
44
  updatedAt: string;
100
45
  }
@@ -1,35 +1,10 @@
1
1
  /**
2
- * 公共账本(《cotutor契约草案.md》§5):observations.jsonl 与 artifacts.jsonl,追加式、一行一条、id 唯一;
3
- * 改状态追加新行,同 id 后者为准,不改历史。retracted 用追加行(2026-09-08 拍板)。
2
+ * 产物账本:artifacts.jsonl,追加式、一行一条、id 唯一;改状态追加新行,同 id 后者为准,不改历史。
3
+ * 观察不在这里:观察的真相是 vault 的日记(《obsidian仓库设计.md》§1),老师记账时回「## 记账」段、应用写日记。
4
4
  */
5
5
  import { z } from 'zod';
6
- export const EvidenceSchema = z.union([
7
- z.object({ conversation: z.string().min(1), job: z.string().optional() }),
8
- z.object({ artifact: z.string().min(1) }),
9
- ]);
10
- /** 完整观察行 */
11
- export const ObservationSchema = z.object({
12
- id: z.string().min(1),
13
- date: z.string().min(1),
14
- /** 写它的老师(agent 名)或 parent */
15
- author: z.string().min(1),
16
- subject: z.string().optional(),
17
- topic: z.string().optional(),
18
- /** 一句话 */
19
- claim: z.string().min(1),
20
- evidence: EvidenceSchema.optional(),
21
- retracted: z.boolean().default(false),
22
- });
23
- /** 纠错行:只带 id + retracted + 谁 + 何时 */
24
- export const ObservationRetractSchema = z.object({
25
- id: z.string().min(1),
26
- retracted: z.literal(true),
27
- by: z.string().min(1),
28
- date: z.string().min(1),
29
- });
30
- export const ObservationLineSchema = z.union([ObservationSchema, ObservationRetractSchema]);
31
- export const ARTIFACT_KINDS = ['课包', '补讲', '批改', '计划', '其它'];
32
- export const ARTIFACT_STATUS = ['draft', 'ready', 'accepted', 'retired'];
6
+ export const ARTIFACT_KINDS = ['课包', '其它'];
7
+ export const ARTIFACT_STATUS = ['draft', 'ready', 'retired'];
33
8
  /** 产物事件行:首行要带 kind / by / path,后续行只带变化的字段 */
34
9
  export const ArtifactEventSchema = z.object({
35
10
  id: z.string().min(1),
@@ -39,6 +14,7 @@ export const ArtifactEventSchema = z.object({
39
14
  status: z.enum(ARTIFACT_STATUS).optional(),
40
15
  path: z.string().optional(),
41
16
  source: z.object({ conversation: z.string().min(1), job: z.string().optional() }).optional(),
42
- /** manifest 指纹,同内容重出验收延续;验收开关关掉时可以没有 accepted 行 */
43
- hash: z.string().optional(),
17
+ /** 做这个产物花的钱与时长(做它的那一方记;老 workspace 里有 scene-maker 那轮收尾时应用追加的) */
18
+ costUsd: z.number().nonnegative().optional(),
19
+ durationMs: z.number().int().nonnegative().optional(),
44
20
  });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 老师回的「## 记忆」「## 记账」怎么进 vault(《vault重构方案》§3,2026-10-30):老师写的是建议,应用校验后提交。
3
+ * - 建议:「## 记忆」的一条。行首 `孩子:` 是关于孩子本人的(target: child),有脸的老师写的进孩子的记忆(`agent: all`,所有有脸的老师共用),
4
+ * 行末 `证据:「…」` 是孩子在这个话题里说过的原话。证据对不上孩子说过的就不提交;没写证据的照旧提交,记成 unverified。
5
+ * - 提交:先在这一轮的索引上记 pending(要写什么、写到哪、写之前的版本),再写 vault,写完把 pending 换成 memoryLines / diaryBlock / booked。
6
+ * 写 vault 与写索引之间断了,下次记账、删话题之前先对照文件里的实际结果补记或丢掉,不重写一遍。
7
+ * 证据只记在 workspace 的索引里,vault 的格式不变。
8
+ */
9
+ import { z } from 'zod';
10
+ /** 一行记忆的改动:before = 改之前那行(新增为 null),after = 改之后那行(删掉为 null);删话题时按整行原文撤 */
11
+ export declare const MemoryLineSchema: z.ZodObject<{
12
+ before: z.ZodNullable<z.ZodString>;
13
+ after: z.ZodNullable<z.ZodString>;
14
+ }, z.core.$strip>;
15
+ export type MemoryLine = z.infer<typeof MemoryLineSchema>;
16
+ /** 证据对没对上:verified = 孩子说过这句;unverified = 没写证据;rejected = 孩子没说过(不提交) */
17
+ export declare const EVIDENCE_CHECKS: readonly ["verified", "unverified", "rejected"];
18
+ export type EvidenceCheck = (typeof EVIDENCE_CHECKS)[number];
19
+ export declare const MemoryProposalSchema: z.ZodObject<{
20
+ item: z.ZodString;
21
+ target: z.ZodEnum<{
22
+ tutor: "tutor";
23
+ child: "child";
24
+ }>;
25
+ quote: z.ZodOptional<z.ZodString>;
26
+ check: z.ZodEnum<{
27
+ verified: "verified";
28
+ unverified: "unverified";
29
+ rejected: "rejected";
30
+ }>;
31
+ }, z.core.$strip>;
32
+ export type MemoryProposal = z.infer<typeof MemoryProposalSchema>;
33
+ /** 一个记忆文件要写的那笔 */
34
+ export declare const PendingMemorySchema: z.ZodObject<{
35
+ file: z.ZodString;
36
+ base: z.ZodNullable<z.ZodString>;
37
+ hash: z.ZodString;
38
+ changes: z.ZodArray<z.ZodString>;
39
+ lines: z.ZodArray<z.ZodObject<{
40
+ before: z.ZodNullable<z.ZodString>;
41
+ after: z.ZodNullable<z.ZodString>;
42
+ }, z.core.$strip>>;
43
+ }, z.core.$strip>;
44
+ export type PendingMemory = z.infer<typeof PendingMemorySchema>;
45
+ /** 写 vault 之前记下的一笔;写完就换成 memoryLines / childLines / diaryBlock(没了这条 = 提交完了) */
46
+ export declare const PendingCommitSchema: z.ZodObject<{
47
+ memory: z.ZodOptional<z.ZodObject<{
48
+ file: z.ZodString;
49
+ base: z.ZodNullable<z.ZodString>;
50
+ hash: z.ZodString;
51
+ changes: z.ZodArray<z.ZodString>;
52
+ lines: z.ZodArray<z.ZodObject<{
53
+ before: z.ZodNullable<z.ZodString>;
54
+ after: z.ZodNullable<z.ZodString>;
55
+ }, z.core.$strip>>;
56
+ }, z.core.$strip>>;
57
+ child: z.ZodOptional<z.ZodObject<{
58
+ file: z.ZodString;
59
+ base: z.ZodNullable<z.ZodString>;
60
+ hash: z.ZodString;
61
+ changes: z.ZodArray<z.ZodString>;
62
+ lines: z.ZodArray<z.ZodObject<{
63
+ before: z.ZodNullable<z.ZodString>;
64
+ after: z.ZodNullable<z.ZodString>;
65
+ }, z.core.$strip>>;
66
+ }, z.core.$strip>>;
67
+ diary: z.ZodOptional<z.ZodObject<{
68
+ file: z.ZodString;
69
+ block: z.ZodString;
70
+ thread: z.ZodString;
71
+ }, z.core.$strip>>;
72
+ }, z.core.$strip>;
73
+ export type PendingCommit = z.infer<typeof PendingCommitSchema>;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 老师回的「## 记忆」「## 记账」怎么进 vault(《vault重构方案》§3,2026-10-30):老师写的是建议,应用校验后提交。
3
+ * - 建议:「## 记忆」的一条。行首 `孩子:` 是关于孩子本人的(target: child),有脸的老师写的进孩子的记忆(`agent: all`,所有有脸的老师共用),
4
+ * 行末 `证据:「…」` 是孩子在这个话题里说过的原话。证据对不上孩子说过的就不提交;没写证据的照旧提交,记成 unverified。
5
+ * - 提交:先在这一轮的索引上记 pending(要写什么、写到哪、写之前的版本),再写 vault,写完把 pending 换成 memoryLines / diaryBlock / booked。
6
+ * 写 vault 与写索引之间断了,下次记账、删话题之前先对照文件里的实际结果补记或丢掉,不重写一遍。
7
+ * 证据只记在 workspace 的索引里,vault 的格式不变。
8
+ */
9
+ import { z } from 'zod';
10
+ /** 一行记忆的改动:before = 改之前那行(新增为 null),after = 改之后那行(删掉为 null);删话题时按整行原文撤 */
11
+ export const MemoryLineSchema = z.object({ before: z.string().nullable(), after: z.string().nullable() });
12
+ /** 证据对没对上:verified = 孩子说过这句;unverified = 没写证据;rejected = 孩子没说过(不提交) */
13
+ export const EVIDENCE_CHECKS = ['verified', 'unverified', 'rejected'];
14
+ export const MemoryProposalSchema = z.object({
15
+ /** 去掉 `证据:「…」` 之后的那条,增 / 改 / 删的写法照旧(`孩子:` 前缀留着) */
16
+ item: z.string(),
17
+ /** tutor = 这位老师(或这个 activity)自己的记忆;child = 关于孩子本人的(行首 `孩子:`) */
18
+ target: z.enum(['tutor', 'child']),
19
+ /** 证据:老师抄的孩子原话 */
20
+ quote: z.string().optional(),
21
+ check: z.enum(EVIDENCE_CHECKS),
22
+ });
23
+ /** 一个记忆文件要写的那笔 */
24
+ export const PendingMemorySchema = z.object({
25
+ /** 记忆文件,相对 vault 根 */
26
+ file: z.string().min(1),
27
+ /** 写之前的版本(textHash);新建的文件为 null */
28
+ base: z.string().nullable(),
29
+ /** 写成之后的版本 */
30
+ hash: z.string().min(1),
31
+ changes: z.array(z.string()),
32
+ lines: z.array(MemoryLineSchema),
33
+ });
34
+ /** 写 vault 之前记下的一笔;写完就换成 memoryLines / childLines / diaryBlock(没了这条 = 提交完了) */
35
+ export const PendingCommitSchema = z.object({
36
+ /** 这位老师(或这个 activity)自己的记忆 */
37
+ memory: PendingMemorySchema.optional(),
38
+ /** 孩子的记忆(`agent: all`,`孩子:` 开头的那几条) */
39
+ child: PendingMemorySchema.optional(),
40
+ diary: z.object({
41
+ /** 日记文件名(<日期>.md) */
42
+ file: z.string().min(1),
43
+ block: z.string().min(1),
44
+ /** 记的是哪个话题的账(写成了就记进索引的 booked) */
45
+ thread: z.string().min(1),
46
+ }).optional(),
47
+ });
@@ -1,6 +1,6 @@
1
1
  /**
2
- * 计划文件 vault/计划/<周>.md(《cotutor契约草案.md》§8):frontmatter week / status / author,
3
- * 正文按老师分 H2(用显示名,2026-09-08 拍板),行内自由。家长改成 confirmed 即真相。
2
+ * 计划文件 vault/计划/<周>.md:frontmatter week / status / author,
3
+ * 正文按老师分 H2(用显示名),行内自由。家长改成 confirmed 即真相。
4
4
  */
5
5
  import { z } from 'zod';
6
6
  export declare const PLAN_STATUS: readonly ["draft", "confirmed"];
@@ -1,6 +1,6 @@
1
1
  /**
2
- * 计划文件 vault/计划/<周>.md(《cotutor契约草案.md》§8):frontmatter week / status / author,
3
- * 正文按老师分 H2(用显示名,2026-09-08 拍板),行内自由。家长改成 confirmed 即真相。
2
+ * 计划文件 vault/计划/<周>.md:frontmatter week / status / author,
3
+ * 正文按老师分 H2(用显示名),行内自由。家长改成 confirmed 即真相。
4
4
  */
5
5
  import { z } from 'zod';
6
6
  export const PLAN_STATUS = ['draft', 'confirmed'];
@@ -1,30 +1,37 @@
1
1
  /**
2
- * 老师最终文本里的两种固定段(《cotutor契约草案.md》§4 / §6):
3
- * - 「## 待裁量」需要家长拍板的问题 + 选项(HoldupAskV0,沿用 growth-apps 的形状);
4
- * - 「## 转交」交给另一位老师(HandoffV0,第一期只允许一跳)。
5
- * 孩子视图剥掉它们;家长视图渲染成按钮;应用按转交 resume 目标老师。解析不出整段当正文——格式是增强不是门槛。
2
+ * 老师最终文本里的固定段(《obsidian仓库设计.md》§6):只剩「## 记账」——记账任务的回答:话题叫什么、属于哪册哪节、摘要、讲解骨架、观察;
3
+ * 老师不直接写 vault,应用按它渲染日记。孩子视图剥掉它;解析不出整段当正文——格式是增强不是门槛。
6
4
  */
7
5
  import { z } from 'zod';
8
- export declare const HoldupOptionSchema: z.ZodObject<{
9
- label: z.ZodString;
10
- note: z.ZodOptional<z.ZodString>;
11
- recommended: z.ZodOptional<z.ZodBoolean>;
6
+ /** 记账段里的一个话题(《obsidian仓库设计.md》§6):只有 thread 与 name 必需;summary / steps 只在话题打分够时才要 */
7
+ export declare const BookkeepingEntrySchema: z.ZodObject<{
8
+ thread: z.ZodString;
9
+ name: z.ZodString;
10
+ textbook: z.ZodOptional<z.ZodString>;
11
+ summary: z.ZodOptional<z.ZodString>;
12
+ steps: z.ZodOptional<z.ZodString>;
13
+ observations: z.ZodDefault<z.ZodArray<z.ZodString>>;
14
+ asked: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
15
  }, z.core.$strip>;
13
- export type HoldupOption = z.infer<typeof HoldupOptionSchema>;
14
- export declare const HoldupAskSchema: z.ZodObject<{
15
- question: z.ZodString;
16
- options: z.ZodDefault<z.ZodArray<z.ZodObject<{
17
- label: z.ZodString;
18
- note: z.ZodOptional<z.ZodString>;
19
- recommended: z.ZodOptional<z.ZodBoolean>;
20
- }, z.core.$strip>>>;
16
+ export type BookkeepingEntry = z.infer<typeof BookkeepingEntrySchema>;
17
+ export declare const BookkeepingSchema: z.ZodObject<{
18
+ entries: z.ZodArray<z.ZodObject<{
19
+ thread: z.ZodString;
20
+ name: z.ZodString;
21
+ textbook: z.ZodOptional<z.ZodString>;
22
+ summary: z.ZodOptional<z.ZodString>;
23
+ steps: z.ZodOptional<z.ZodString>;
24
+ observations: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ asked: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ }, z.core.$strip>>;
21
27
  }, z.core.$strip>;
22
- export type HoldupAsk = z.infer<typeof HoldupAskSchema>;
23
- export declare const HandoffSchema: z.ZodObject<{
24
- to: z.ZodString;
25
- why: z.ZodOptional<z.ZodString>;
26
- refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
27
- }, z.core.$strip>;
28
- export type Handoff = z.infer<typeof HandoffSchema>;
29
- export declare const HOLDUP_HEADING = "\u5F85\u88C1\u91CF";
30
- export declare const HANDOFF_HEADING = "\u8F6C\u4EA4";
28
+ export type Bookkeeping = z.infer<typeof BookkeepingSchema>;
29
+ export declare const BOOKKEEPING_HEADING = "\u8BB0\u8D26";
30
+ /**
31
+ * 「## 记忆」段(2026-09-17;2026-09-18 起能改能删):任何一轮都能写,一行一条 `- …`:缺省新增(应用加日期追加),
32
+ * `- 改:原话 → 新的` 改一行,`- 删:原话` 删一行(按原话找,任何一行都能动);落进 vault 里这位 agent 的记忆文件(`cotutor: memory`),
33
+ * 家长在 Obsidian 里读、改、删。讲课的轮每轮最多 MEMORY_MAX_PER_TURN 条,多的丢并提醒;记账后的整理轮不限,整理完不超过 MEMORY_TIDY_CAP 条。老师不直接写文件。
34
+ */
35
+ export declare const MEMORY_HEADING = "\u8BB0\u5FC6";
36
+ export declare const MEMORY_MAX_PER_TURN = 2;
37
+ export declare const MEMORY_TIDY_CAP = 30;
@@ -1,26 +1,25 @@
1
1
  /**
2
- * 老师最终文本里的两种固定段(《cotutor契约草案.md》§4 / §6):
3
- * - 「## 待裁量」需要家长拍板的问题 + 选项(HoldupAskV0,沿用 growth-apps 的形状);
4
- * - 「## 转交」交给另一位老师(HandoffV0,第一期只允许一跳)。
5
- * 孩子视图剥掉它们;家长视图渲染成按钮;应用按转交 resume 目标老师。解析不出整段当正文——格式是增强不是门槛。
2
+ * 老师最终文本里的固定段(《obsidian仓库设计.md》§6):只剩「## 记账」——记账任务的回答:话题叫什么、属于哪册哪节、摘要、讲解骨架、观察;
3
+ * 老师不直接写 vault,应用按它渲染日记。孩子视图剥掉它;解析不出整段当正文——格式是增强不是门槛。
6
4
  */
7
5
  import { z } from 'zod';
8
- import { AGENT_NAME_RE } from "./config.js";
9
- export const HoldupOptionSchema = z.object({
10
- label: z.string().min(1),
11
- note: z.string().optional(),
12
- recommended: z.boolean().optional(),
6
+ /** 记账段里的一个话题(《obsidian仓库设计.md》§6):只有 thread 与 name 必需;summary / steps 只在话题打分够时才要 */
7
+ export const BookkeepingEntrySchema = z.object({
8
+ thread: z.string().min(1).describe('话题 id;记账任务的消息里给了,原样抄'),
9
+ name: z.string().min(1).max(24).describe('话题名,≤ 12 字;日记里的 H2 = 学科 · 话题名'),
10
+ textbook: z.string().optional().describe('属于哪册哪节,写成 wikilink 的目标「册#节标题」(教材目录的 H2,记账消息里列了可选项,原样抄一条);认不出就不写这行'),
11
+ summary: z.string().optional().describe('1–3 句:讲了什么、难点在哪、孩子哪里卡住;只在家长打分 ≥ keepScore 时才要(消息里要了才写),不够的应用会丢'),
12
+ steps: z.string().optional().describe('讲解的骨架,一行,步骤用 → 连;只在打分够时才要'),
13
+ observations: z.array(z.string().min(1)).default([]).describe('关于孩子、值得别的老师下次知道的,0–3 条;进日记的「- 观察:」行,是上下文包 recent 的来源;没有就不写'),
14
+ asked: z.array(z.string().min(1)).optional().describe('孩子在这个话题里说的话,挑 1–3 句值得留的,照原话抄(可以只抄其中一截);应用核对必须是孩子说过的,进日记的「孩子问」;不写就由应用从孩子的话里筛(2026-10-30)'),
13
15
  });
14
- export const HoldupAskSchema = z.object({
15
- question: z.string().min(1),
16
- options: z.array(HoldupOptionSchema).default([]),
17
- });
18
- export const HandoffSchema = z.object({
19
- /** 目标老师(agent 名) */
20
- to: z.string().regex(AGENT_NAME_RE),
21
- why: z.string().optional(),
22
- /** 相关文件或产物引用 */
23
- refs: z.array(z.string()).default([]),
24
- });
25
- export const HOLDUP_HEADING = '待裁量';
26
- export const HANDOFF_HEADING = '转交';
16
+ export const BookkeepingSchema = z.object({ entries: z.array(BookkeepingEntrySchema).min(1) });
17
+ export const BOOKKEEPING_HEADING = '记账';
18
+ /**
19
+ * 「## 记忆」段(2026-09-17;2026-09-18 起能改能删):任何一轮都能写,一行一条 `- …`:缺省新增(应用加日期追加),
20
+ * `- 改:原话 → 新的` 改一行,`- 删:原话` 删一行(按原话找,任何一行都能动);落进 vault 里这位 agent 的记忆文件(`cotutor: memory`),
21
+ * 家长在 Obsidian 里读、改、删。讲课的轮每轮最多 MEMORY_MAX_PER_TURN 条,多的丢并提醒;记账后的整理轮不限,整理完不超过 MEMORY_TIDY_CAP 条。老师不直接写文件。
22
+ */
23
+ export const MEMORY_HEADING = '记忆';
24
+ export const MEMORY_MAX_PER_TURN = 2;
25
+ export const MEMORY_TIDY_CAP = 30;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 主题清单(themes/<name>/theme.json)的契约。样子的真相在主题里,不在卡的协议里:
3
+ * 卡的底色槽(tints)、字形槽(looks)、五支笔(pens)各是一张表,主题想要几个就几个,每个一个名字 + 一句「给什么用」——
4
+ * 老师与课文件在围栏行上写的 tint= / look= 照这张表认,名字不在表里就落 `default`;所以换主题永远能显示。
5
+ * 颜色的值不在清单里,在旁边的 kid.css 里(同一个名字对应 CSS 里的 data-tint / data-look / mk-<pen>)。
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const THEME_NAME_RE: RegExp;
9
+ export declare const THEME_MANIFEST_FILE = "theme.json";
10
+ export declare const THEME_CSS_FILE = "kid.css";
11
+ export declare const THEMES_DIR = "themes";
12
+ export declare const ThemeManifestSchema: z.ZodObject<{
13
+ name: z.ZodString;
14
+ default: z.ZodString;
15
+ tints: z.ZodRecord<z.ZodString, z.ZodObject<{
16
+ use: z.ZodString;
17
+ }, z.core.$strip>>;
18
+ looks: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
19
+ use: z.ZodString;
20
+ }, z.core.$strip>>>;
21
+ pens: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
22
+ use: z.ZodString;
23
+ }, z.core.$strip>>>;
24
+ }, z.core.$strip>;
25
+ export type ThemeManifest = z.infer<typeof ThemeManifestSchema>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 主题清单(themes/<name>/theme.json)的契约。样子的真相在主题里,不在卡的协议里:
3
+ * 卡的底色槽(tints)、字形槽(looks)、五支笔(pens)各是一张表,主题想要几个就几个,每个一个名字 + 一句「给什么用」——
4
+ * 老师与课文件在围栏行上写的 tint= / look= 照这张表认,名字不在表里就落 `default`;所以换主题永远能显示。
5
+ * 颜色的值不在清单里,在旁边的 kid.css 里(同一个名字对应 CSS 里的 data-tint / data-look / mk-<pen>)。
6
+ */
7
+ import { z } from 'zod';
8
+ export const THEME_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
9
+ export const THEME_MANIFEST_FILE = 'theme.json';
10
+ export const THEME_CSS_FILE = 'kid.css';
11
+ export const THEMES_DIR = 'themes';
12
+ const SlotSchema = z.object({ use: z.string().min(1).describe('给什么用(写课文件、排版时照这句挑)') });
13
+ const SlotTable = z.record(z.string().regex(THEME_NAME_RE), SlotSchema);
14
+ export const ThemeManifestSchema = z
15
+ .object({
16
+ name: z.string().regex(THEME_NAME_RE),
17
+ /** 素版与回退用的底色槽,必须在 tints 里 */
18
+ default: z.string().regex(THEME_NAME_RE),
19
+ tints: SlotTable.refine((t) => Object.keys(t).length > 0, '至少一个底色槽'),
20
+ looks: SlotTable.default({}),
21
+ pens: SlotTable.default({}),
22
+ })
23
+ .superRefine((m, ctx) => {
24
+ if (!(m.default in m.tints))
25
+ ctx.addIssue({ code: 'custom', path: ['default'], message: `default 槽 "${m.default}" 不在 tints 里` });
26
+ });
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 课程表:一周的固定时段(星期 × 时间 × 学科 [× 孩子])。真相是 vault 里的 `课程表.md`(paths.timetable),
3
+ * 家长在 Obsidian 里改一张 markdown 表;解析器在 memory/timetable.ts(抄自 growth-apps,错误即修复指南带行号)。
4
+ * 一孩一 workspace 后「孩子」列可选,留着是给多孩共用一张表的家。
5
+ * 课程表只做归类线索(今天有什么、现在是什么时段),不做逻辑约束——孩子任何时候都能找任何老师。
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const TIME_RE: RegExp;
9
+ export declare const TimetableEntrySchema: z.ZodObject<{
10
+ day: z.ZodNumber;
11
+ start: z.ZodString;
12
+ end: z.ZodString;
13
+ subject: z.ZodString;
14
+ kid: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ export type TimetableEntry = z.infer<typeof TimetableEntrySchema>;
17
+ export declare const TimetableSchema: z.ZodObject<{
18
+ entries: z.ZodArray<z.ZodObject<{
19
+ day: z.ZodNumber;
20
+ start: z.ZodString;
21
+ end: z.ZodString;
22
+ subject: z.ZodString;
23
+ kid: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>;
26
+ export type Timetable = z.infer<typeof TimetableSchema>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 课程表:一周的固定时段(星期 × 时间 × 学科 [× 孩子])。真相是 vault 里的 `课程表.md`(paths.timetable),
3
+ * 家长在 Obsidian 里改一张 markdown 表;解析器在 memory/timetable.ts(抄自 growth-apps,错误即修复指南带行号)。
4
+ * 一孩一 workspace 后「孩子」列可选,留着是给多孩共用一张表的家。
5
+ * 课程表只做归类线索(今天有什么、现在是什么时段),不做逻辑约束——孩子任何时候都能找任何老师。
6
+ */
7
+ import { z } from 'zod';
8
+ export const TIME_RE = /^\d{2}:\d{2}$/;
9
+ export const TimetableEntrySchema = z.object({
10
+ /** 1–7 = 周一–周日 */
11
+ day: z.number().int().min(1).max(7),
12
+ start: z.string().regex(TIME_RE),
13
+ end: z.string().regex(TIME_RE),
14
+ /** 自由文本(语文 / 数学 / 英语……),与 tutors[].subject 对齐即归到那位老师 */
15
+ subject: z.string().min(1),
16
+ kid: z.string().optional(),
17
+ });
18
+ export const TimetableSchema = z.object({ entries: z.array(TimetableEntrySchema) });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 一个孩子的 workspace 解析好的样子(app/workspace.ts 的 loadWorkspace 给;从那边挪来,2026-10-29):根、从哪认出来的、cotutor.json、各角色的绝对路径、几个目录。
3
+ * 类型放在 schema:运行层、记忆、场景都按它取自己要的那几样,不用去引命令行那一层。
4
+ */
5
+ import type { CotutorConfig, PathRole } from './config.ts';
6
+ /**
7
+ * 技能目录,相对 workspace 根(2026-10-30 从 .claude/skills 挪来):Codex、Qwen Code 在 workspace 里对话时直接读它;
8
+ * Claude Code 只认 .claude/skills,那里是一条指过来的相对链(init / upgrade 建)
9
+ */
10
+ export declare const SKILLS_DIR = ".agents/skills";
11
+ /** 老师文件 agents/<name>.md(2026-10-30 从 .claude/agents 挪来):和老师的家 agents/<name>/ 并排,同包里的 grades/grade-<n>/agents/ */
12
+ export declare function tutorFilePath(agentsDir: string, name: string): string;
13
+ /** workspace 是怎么找到的:--workspace / COTUTOR_WORKSPACE / cwd 祖先 / ~/.config/cotutor/config.json / ~/cotutor/ 唯一目录 */
14
+ export type RootSource = 'flag' | 'env' | 'cwd' | 'user-config' | 'home-single';
15
+ export interface Workspace {
16
+ root: string;
17
+ source: RootSource;
18
+ config: CotutorConfig;
19
+ /** 角色 → 绝对路径;vault 侧角色相对 vault 解析,没配 vault 就相对 workspace 根;captures 相对 workspace 根 */
20
+ paths: Record<PathRole, string> & Record<string, string>;
21
+ dirs: {
22
+ /** 老师文件 <name>.md 与老师的家 <name>/(会话 cwd,activity 在里面) */
23
+ agents: string;
24
+ ledger: string;
25
+ conversations: string;
26
+ /** 技能 .agents/skills/ */
27
+ skills: string;
28
+ /** 课包(cotutor chalk build 的产物,小课堂与 lecture 卡从这里放;派生物,gitignore) */
29
+ bundles: string;
30
+ /** 首页:草稿、已发布、历史;publish 时才建,不进骨架 */
31
+ home: string;
32
+ /** 视频小课堂(第 4 步):lectures/<id>/lecture.md + video.mp4;家长在编程助手里做,不进骨架 */
33
+ lectures: string;
34
+ /** 配音的缓存(.cotutor/tts/,src/media/tts.ts):同一句同一个音色只合成一次;机器文件,gitignore */
35
+ tts: string;
36
+ };
37
+ files: {
38
+ config: string;
39
+ artifacts: string;
40
+ };
41
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 技能目录,相对 workspace 根(2026-10-30 从 .claude/skills 挪来):Codex、Qwen Code 在 workspace 里对话时直接读它;
3
+ * Claude Code 只认 .claude/skills,那里是一条指过来的相对链(init / upgrade 建)
4
+ */
5
+ export const SKILLS_DIR = '.agents/skills';
6
+ /** 老师文件 agents/<name>.md(2026-10-30 从 .claude/agents 挪来):和老师的家 agents/<name>/ 并排,同包里的 grades/grade-<n>/agents/ */
7
+ export function tutorFilePath(agentsDir, name) {
8
+ return `${agentsDir}/${name}.md`;
9
+ }
@@ -0,0 +1,8 @@
1
+ /** 用法错误:main 捕获后 exit 2,错误信息即修复指南。 */
2
+ export declare class UsageError extends Error {
3
+ }
4
+ /** 配置文件损坏或形状不对:文件在,但用不了。 */
5
+ export declare class ConfigError extends UsageError {
6
+ readonly file: string;
7
+ constructor(file: string, cause: string);
8
+ }
@@ -0,0 +1,13 @@
1
+ /** 跨模块共用的错误(从 app/workspace.ts 挪来,2026-10-29) */
2
+ import { redactHome } from "./home.js";
3
+ /** 用法错误:main 捕获后 exit 2,错误信息即修复指南。 */
4
+ export class UsageError extends Error {
5
+ }
6
+ /** 配置文件损坏或形状不对:文件在,但用不了。 */
7
+ export class ConfigError extends UsageError {
8
+ file;
9
+ constructor(file, cause) {
10
+ super(`配置文件用不了:${redactHome(file)}\n${cause}\n修好它;文件在 git 里就 git diff 看改动、git checkout 回退。cotutor doctor 可逐项体检。`);
11
+ this.file = file;
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ export declare function redactHome(value: string): string;
2
+ export declare function redactDeep<T>(value: T): T;
@@ -0,0 +1,16 @@
1
+ /** 给人看的路径里把家目录换成 $HOME(报错、doctor、--json 输出不带出用户名;从 app/workspace.ts 挪来,2026-10-29) */
2
+ import { homedir } from 'node:os';
3
+ export function redactHome(value) {
4
+ const home = homedir();
5
+ return home && value.startsWith(home) ? '$HOME' + value.slice(home.length) : value;
6
+ }
7
+ export function redactDeep(value) {
8
+ if (typeof value === 'string')
9
+ return redactHome(value);
10
+ if (Array.isArray(value))
11
+ return value.map(redactDeep);
12
+ if (value && typeof value === 'object') {
13
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, redactDeep(v)]));
14
+ }
15
+ return value;
16
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 独占一行(或几行)的 `<!-- … -->` 是给人看的(谁读、为什么,《写提示词.md》§二、§四),递给模型前剥掉;
3
+ * 连同它前面那个换行一起去掉,规矩下面紧跟的注释剥完不留空行。行内的注释不动。
4
+ */
5
+ export declare function stripHumanNotes(body: string): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 独占一行(或几行)的 `<!-- … -->` 是给人看的(谁读、为什么,《写提示词.md》§二、§四),递给模型前剥掉;
3
+ * 连同它前面那个换行一起去掉,规矩下面紧跟的注释剥完不留空行。行内的注释不动。
4
+ */
5
+ export function stripHumanNotes(body) {
6
+ return body.replace(/(^|\n)[ \t]*<!--[\s\S]*?-->[ \t]*(?=\n|$)/g, '').trim();
7
+ }