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
@@ -1,23 +1,52 @@
1
1
  /**
2
- * 对话索引:一老师一天一份(《cotutor契约草案.md》§3)。每条消息 = 一次 -p 运行 = 一份 NDJSON 转录;
3
- * 索引里的 kidText / artifacts 是孩子视图的物化结果,孩子端不解析日志。跨天自动新开(2026-09-08 拍板)。
2
+ * 对话索引:一老师一天一份。每条消息 = 一次 -p 运行 = 一份 NDJSON 转录;
3
+ * 索引里的 kidText / artifacts 是孩子视图的物化结果,孩子端不解析日志。跨天自动新开。
4
4
  */
5
5
  import { z } from 'zod';
6
6
  import { FocusSchema, MESSAGE_FROM } from "./context-pack.js";
7
- import { BoardSectionSchema } from "./board.js";
8
- import { HandoffSchema, HoldupAskSchema } from "./sections.js";
7
+ import { BoardSectionSchema, DeviceSchema } from "./board.js";
8
+ import { BookkeepingSchema } from "./sections.js";
9
+ import { MessageViaSchema } from "./home.js";
10
+ import { ActivityRunSchema } from "./activity.js";
11
+ import { MemoryLineSchema, MemoryProposalSchema, PendingCommitSchema } from "./memory.js";
9
12
  export const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
10
- export const ConversationMessageSchema = z.object({
13
+ /** 孩子端设备的编号:服务端种的 cookie,随机 12 位十六进制 */
14
+ export const DEVICE_ID_RE = /^[0-9a-f]{12}$/;
15
+ export const TimingSchema = z.object({
16
+ /** 进程起来的时刻(ISO,精确到毫秒;消息的 at 只到分钟) */
17
+ startedAt: z.string().min(1),
18
+ /** 这轮用的是提前起好的老师进程(预热,2026-09-29);startedAt 仍是孩子开口那刻 */
19
+ warm: z.literal(true).optional(),
20
+ /** 流式时第一张卡闭合(孩子端第一次看到东西);整块出的运行时没有 */
21
+ firstCardMs: z.number().int().nonnegative().optional(),
22
+ /** 首句就绪:嘴能开口的那一刻(头号埋点),第一拍关了就算(讲稿不配音) */
23
+ firstReadyMs: z.number().int().nonnegative().optional(),
24
+ /** 老师进程退出 */
25
+ doneMs: z.number().int().nonnegative().optional(),
26
+ /** 每拍(2026-09-13,从事件推):关、就绪 */
27
+ beats: z.array(z.object({ card: z.number().int().nonnegative().nullable(), closedMs: z.number().int().nonnegative().optional(), readyMs: z.number().int().nonnegative().optional() })).optional(),
28
+ });
29
+ export const SessionSchema = z.object({ id: z.string().min(1), runtime: z.string().min(1) });
30
+ const MessageObjectSchema = z.object({
11
31
  /** 一轮的 id(job),也是转录文件名的一段:<date>.<job>.log */
12
32
  job: z.string().min(1),
33
+ /** 话题 id = 话题第一条消息的 job(一个话题 = 一段连续问答 = 老师的一个会话;一天可多个)。旧索引没有:读时按 threadOf 现算 */
34
+ thread: z.string().optional(),
13
35
  at: z.string().min(1),
36
+ /** 谁发的:孩子(孩子端、工作台、cotutor send 都算)或应用派的任务 */
14
37
  from: z.enum(MESSAGE_FROM),
15
38
  /** 消息原文(不含上下文包) */
16
39
  text: z.string(),
17
40
  focus: FocusSchema.optional(),
18
- /** 孩子端的两个不打字的动作:继续(不计每日上限)/ 交给老师(把卡上的状态交出去) */
19
- action: z.enum(['continue', 'submit']).optional(),
41
+ /** 孩子端不打字的动作:交给老师(把卡上的状态交出去) */
42
+ action: z.enum(['submit']).optional(),
43
+ /** 这条消息带的作业照片(R5,2026-09-14):相对 workspace 根的路径(captures/<日期>/<HHMM>-<n>.jpg),上下文包 photos: 段原样给老师 Read;日记永不引用它 */
44
+ photos: z.array(z.string().min(1)).optional(),
20
45
  result: z.enum(['running', 'ok', 'error']).default('running'),
46
+ /** 这一轮的 token:输入(含缓存读)与输出;记账、显示都按它(src/shared/tokens.ts)。运行时没报(出错没收尾)就没有 */
47
+ /** cached = 输入里命中缓存的,context = 最后一次请求的输入(这一轮结束时上下文多大);这两样只有 API 运行时报 */
48
+ tokens: z.object({ in: z.number().int().nonnegative(), out: z.number().int().nonnegative(), cached: z.number().int().nonnegative().optional(), context: z.number().int().nonnegative().optional() }).optional(),
49
+ /** 老数据:2026-10-28 之前 claude 那几轮记的美元。不再写、不显示,留在这里免得改写索引时丢掉 */
21
50
  costUsd: z.number().optional(),
22
51
  /** 孩子视图文本;null = 这次运行没有给孩子的话(出错或空) */
23
52
  kidText: z.string().nullable().optional(),
@@ -25,30 +54,117 @@ export const ConversationMessageSchema = z.object({
25
54
  artifacts: z.array(z.string()).default([]),
26
55
  /** 跑这条用的运行时名(runtimes 里的键);换运行时时新开会话 */
27
56
  runtime: z.string().optional(),
28
- /** 最终文本里剥出来的「待裁量」段:家长视图渲染成选项按钮(R2 物化,免得页面再解析日志) */
29
- holdup: HoldupAskSchema.nullable().optional(),
30
- /** 最终文本里剥出来的「转交」段:应用据此自动起目标老师的一轮(from: system) */
31
- handoff: HandoffSchema.nullable().optional(),
32
- /** 自动转交起的那一轮:目标老师与 job;没起(上限、忙、老师不在)的原因在 warnings */
33
- handoffJob: z.object({ tutor: z.string(), job: z.string() }).nullable().optional(),
34
57
  /** 不 ok 时的原因(subtype / terminal_reason),家长视图红条 */
35
58
  error: z.string().nullable().optional(),
36
59
  /** 最终文本解析出的板书节(卡 + 讲稿;孩子端下发前剥答案);null = 这轮没有 */
37
60
  section: BoardSectionSchema.nullable().optional(),
38
- /** 最终文本里第一个 H2 起给家长的尾巴(「## 家长」等),孩子看不到 */
61
+ /** 最终文本里第一个 H2 起给家长的尾巴(老师写的任何标题段),孩子看不到 */
39
62
  parentText: z.string().optional(),
40
63
  /** 解析板书时的提醒(卡没解析成等),家长视图显示;孩子端不报 */
41
64
  warnings: z.array(z.string()).optional(),
65
+ /** 这轮「## 记忆」段真落进 vault 记忆文件的改动:新增的行(带日期)、「改:旧 → 新」、「删:旧」;进孩子的记忆的前面加「孩子的记忆:」;家长视图显示 */
66
+ remembered: z.array(z.string()).optional(),
67
+ /** 同一批改动的整行原文(删话题时按它撤销,2026-10-05):before = 改之前那行(新增的为 null),after = 改之后那行(删掉的为 null) */
68
+ memoryLines: z.array(MemoryLineSchema).optional(),
69
+ /** 同上,写进孩子的记忆(`agent: all`)的那几行(2026-10-30) */
70
+ childLines: z.array(MemoryLineSchema).optional(),
71
+ /** 记账那轮追加进日记的那一段原文(删话题时从日记里摘掉,2026-10-05) */
72
+ diaryBlock: z.string().optional(),
73
+ /** 这轮「## 记忆」段的每一条建议与证据对没对上(2026-10-30,schema/memory.ts);家长视图看哪些没证据、哪些对不上没记 */
74
+ memoryProposals: z.array(MemoryProposalSchema).optional(),
75
+ /** 写 vault 之前记的一笔,写完就没了;还在 = 写到一半断了,下次记账、删话题之前对照文件补记或丢掉(schema/memory.ts) */
76
+ pending: PendingCommitSchema.optional(),
77
+ /** 这轮上下文包里家长笔记的版本:role(profile / entry)→ `路径@hash`;同一话题下一轮对得上就只写「未变」(2026-09-17) */
78
+ notes: z.record(z.string(), z.string()).optional(),
42
79
  /** 这条消息带给老师的卡(上一轮之后孩子改过状态的):id 与 describe 出的那句;家长视图显示「孩子在板书上做的」 */
43
80
  cards: z.array(z.object({ card: z.string().min(1), text: z.string() })).optional(),
44
- /** kidText 的配音文件名(conversations/<老师>/ 下,如 2026-09-09.1620-1.mp3);null = 没合成(老师没配音色、tts 运行时没配或失败) */
45
- audio: z.string().nullable().optional(),
81
+ /** 这轮的用时(埋点,2026-09-11):都是从 startedAt 起的毫秒数;家长视图每轮一行「首卡 10s · 整轮 23s」 */
82
+ timing: TimingSchema.optional(),
83
+ /** 发这条时孩子端是什么端(缺省当平板横屏) */
84
+ device: DeviceSchema.optional(),
85
+ /** 哪一台设备:服务端种的 cookie 编号;工作台、cotutor send 发的没有 */
86
+ deviceId: z.string().regex(DEVICE_ID_RE).optional(),
87
+ /** 这轮是给某个话题记账的任务(from: system,resume 那个话题的会话);跑完老师回的「## 记账」段经应用落进日记 */
88
+ bookkeep: z.object({ thread: z.string().min(1) }).optional(),
89
+ /** 这轮是记账后整理记忆的任务(from: system,新会话;2026-09-18):老师回「## 记忆」段的一串增 / 改 / 删,不受每轮条数上限;孩子端看不到 */
90
+ tidy: z.literal(true).optional(),
91
+ /** 这一轮整段压缩过(API 运行时,上一轮结束时上下文过了 32k):之前的模型历史不再发,前情由应用照索引拼(src/runtime/context/thread-digest.ts) */
92
+ compacted: z.literal(true).optional(),
93
+ /** 最终文本里剥出来的「## 记账」段(物化;日记已按它写好);null = 这轮没有 */
94
+ bookkeeping: BookkeepingSchema.nullable().optional(),
95
+ /** 这轮模型用了哪些工具、读了什么(2026-09-15,从 .log 抽,brain/transcript.ts toolCalls):名字、最要紧的参数、成没成、结果多少字。家长端「看原文」的「读了什么」站;cotutor show 也吐 */
96
+ tools: z.array(z.object({ name: z.string().min(1), arg: z.string(), ok: z.boolean().nullable(), chars: z.number().int().nonnegative(), sub: z.boolean().optional() })).optional(),
97
+ /** 这条是回放(cotutor replay,app/replay.ts):原轮的 job。回放落在 evals/ 里,不在 conversations/ */
98
+ replayOf: z.string().min(1).optional(),
99
+ /** 这条是 cotutor activity eval 跑的(落在 evals/,模拟孩子):同回放,不写记忆、不预热 */
100
+ eval: z.literal(true).optional(),
101
+ /** 这一轮走实时:讲稿没配音,由 realtime 模型(嘴)照念;孩子端放的是嘴的声音,以前的话题里这几句不出声 */
102
+ live: z.literal(true).optional(),
103
+ /**
104
+ * 这条是孩子看完小课堂后的第一条:哪份课包、课名、看了多久、看完没、停过几次、画过的几处;节前的小课堂卡与画的卡从这里画。
105
+ * again = 问过以后「再看一遍」又画了,这条只为带上新画的(节前只画画的卡)。一处画:时刻、SVG 停在哪(缩略图)、几笔(课包坐标)、给老师的那段话、截图
106
+ */
107
+ lecture: z
108
+ .object({
109
+ bundle: z.string().min(1),
110
+ title: z.string(),
111
+ watchedMs: z.number().nonnegative(),
112
+ finished: z.boolean(),
113
+ pauses: z.number().int().nonnegative(),
114
+ again: z.literal(true).optional(),
115
+ /** 视频小课堂(lectures/<id>/);没有 = 课包 */
116
+ video: z.literal(true).optional(),
117
+ /** 一处 = 停在同一刻画的几笔;截图在 captures/ 里(画面叠上那几笔;路径相对 workspace 根)。2026-10-19 以前一笔一处(path),读成一笔的 strokes */
118
+ marks: z.array(z.object({ atMs: z.number().nonnegative(), svgMs: z.number().nonnegative(), strokes: z.array(z.array(z.tuple([z.number(), z.number()]))), text: z.string().optional(), image: z.string().optional(), t: z.number().optional() })).optional(),
119
+ /**
120
+ * 看的过程(录像用第 5 步):放 / 停 / 拖到哪 / 放完,一次一条。t = 离这条消息发出去多少毫秒(≤ 0,孩子端自己的钟算,
121
+ * 不用对钟);pos = 那时停在课里的哪一刻;play = 那之后在放。画的 t 同理(这一处第一笔画下去的那一刻)
122
+ */
123
+ log: z.array(z.object({ t: z.number(), pos: z.number().nonnegative(), play: z.boolean() })).optional(),
124
+ })
125
+ .optional(),
126
+ /**
127
+ * 孩子从左栏的纸「给老师看」交的画:图在 captures/(相对 workspace 根)、几笔、各颜色几笔(「黑 12、红 40」)、
128
+ * 画了多久(第一笔到最后一笔,算上清空前那几版)、清空前存的那几版的图。板上节前一张孩子的画卡从这里画;图和清掉的那几版进上下文包 photos 给老师 Read
129
+ */
130
+ drawing: z
131
+ .object({
132
+ image: z.string().min(1),
133
+ strokes: z.number().int().nonnegative(),
134
+ colors: z.string().optional(),
135
+ ms: z.number().nonnegative().optional(),
136
+ cleared: z.array(z.string().min(1)).optional(),
137
+ })
138
+ .optional(),
139
+ /** 孩子从首页哪个按钮进来的;开场按钮的 text 就是按钮上的字,不是孩子说的 */
140
+ via: MessageViaSchema.optional(),
141
+ /** 这个话题是从哪个 activity 起的(只记在话题第一条):名字与点的那一刻的参数,话题后面每条都照它带 */
142
+ activity: ActivityRunSchema.optional(),
143
+ /** 口语课页的哪份口语单起的这个话题(talk/<id>/ 4,只记在话题第一条) */
144
+ talk: z.string().optional(),
145
+ /** 这个话题接着以前哪天的哪个话题(首页的「接着」按钮;新会话,上下文包带那个话题的尾巴) */
146
+ continues: z.object({ date: z.string().regex(DATE_RE), thread: z.string().min(1) }).optional(),
46
147
  });
148
+ export const ConversationMessageSchema = MessageObjectSchema;
47
149
  export const ConversationIndexSchema = z.object({
48
150
  tutor: z.string().min(1),
49
151
  date: z.string().regex(DATE_RE),
50
- /** 当天会话;首条消息跑完后写入,之后每条 --resume 它 */
51
- session: z.object({ id: z.string().min(1), runtime: z.string().min(1) }).nullable().default(null),
152
+ /** 当前话题(末条消息所在)的会话;首条消息跑完后写入。每个话题自己的会话在 sessions 里,这里只是最新那条(旧索引只有它) */
153
+ session: SessionSchema.nullable().default(null),
154
+ /** 话题 id → 那个话题的会话;今天的旧话题接着聊就 resume 它 */
155
+ sessions: z.record(z.string(), SessionSchema).default({}),
52
156
  messages: z.array(ConversationMessageSchema).default([]),
53
- costUsd: z.number().default(0),
157
+ /** 话题 id → 家长打的星(1–5;《obsidian仓库设计.md》§4:打分的单位是话题;≥ vault.keepScore 记账时才沉淀摘要) */
158
+ ratings: z.record(z.string(), z.number().int().min(1).max(5)).default({}),
159
+ /** 话题 id → 记账那轮的 job(记过的不再记;日记里已有这个话题的一段) */
160
+ booked: z.record(z.string(), z.string().min(1)).default({}),
54
161
  });
162
+ /**
163
+ * 每条消息的话题 id(与 messages 对齐)。有 thread 字段照它;没有(旧索引)按规则现算:第一条 = 自己的 job,
164
+ * from: system 的(记账、整理记忆这类)永远开新话题,其余跟前一条。写新消息时 runner 已经填了 thread,这里只是兜底。
165
+ */
166
+ export function threads(messages) {
167
+ const out = [];
168
+ messages.forEach((m, i) => out.push(m.thread ?? (i === 0 || m.from === 'system' ? m.job : out[i - 1])));
169
+ return out;
170
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * 一轮运行的事件(<日期>.<job>.events.jsonl 的一行;控制台与时间线的唯一来源)。格式化与读在 runtime/journal/events.ts。
3
+ */
4
+ import type { Tokens } from '../shared/tokens.ts';
5
+ export type Lane = 'main' | 'tts' | 'ready' | 'index' | 'ledger' | 'mouth';
6
+ export declare const LANES: readonly Lane[];
7
+ export type RunEvent = {
8
+ t: number;
9
+ } & (
10
+ /** warmMs:用的是提前起好的进程(预热),它等了多久 */
11
+ {
12
+ lane: 'main';
13
+ kind: 'start';
14
+ cli: string;
15
+ runtime: string;
16
+ resume: boolean;
17
+ warmMs?: number;
18
+ } | {
19
+ lane: 'main';
20
+ kind: 'card';
21
+ card: number;
22
+ label: string;
23
+ }
24
+ /** play:这句的 [[play]] 锚着小课堂卡(念完放那一段;实时时服务端等孩子端放完再交后面的句子);echo / call:热身的 [[echo 词]] [[say 词]] 与 [[call]](实时时服务端等孩子跟、进打电话) */
25
+ | {
26
+ lane: 'main';
27
+ kind: 'line';
28
+ line: number;
29
+ text: string;
30
+ play?: true;
31
+ echo?: {
32
+ word: string;
33
+ say?: true;
34
+ };
35
+ call?: true;
36
+ } | {
37
+ lane: 'main';
38
+ kind: 'tool';
39
+ name: string;
40
+ sub: boolean;
41
+ } | {
42
+ lane: 'main';
43
+ kind: 'exit';
44
+ ok: boolean;
45
+ reason?: string;
46
+ tokens?: Tokens;
47
+ turns?: number;
48
+ }
49
+ /** 断流:老师进程 idleMs 没吐一个字节(工具不在跑),杀掉;retry = 接着跑第几次(0 = 次数用完,不再跑),kept = 断前已写出的正文字数 */
50
+ | {
51
+ lane: 'main';
52
+ kind: 'stall';
53
+ idleMs: number;
54
+ retry: number;
55
+ kept: number;
56
+ } | {
57
+ lane: 'tts';
58
+ kind: 'queued';
59
+ label: string;
60
+ } | {
61
+ lane: 'tts';
62
+ kind: 'done';
63
+ label: string;
64
+ ms: number;
65
+ file: string;
66
+ } | {
67
+ lane: 'tts';
68
+ kind: 'failed';
69
+ label: string;
70
+ ms: number;
71
+ error: string;
72
+ } | {
73
+ lane: 'ready';
74
+ kind: 'beat';
75
+ beat: number;
76
+ card: number | null;
77
+ first: boolean;
78
+ }
79
+ /** 第一句配好了,能开口了(首句就绪;2026-10-08 起比第一拍早) */
80
+ | {
81
+ lane: 'ready';
82
+ kind: 'speak';
83
+ } | {
84
+ lane: 'ready';
85
+ kind: 'all';
86
+ cards: number;
87
+ lines: number;
88
+ } | {
89
+ lane: 'index';
90
+ kind: 'written';
91
+ warnings: number;
92
+ }
93
+ /** 记账:话题的一段写进了 vault 的日记(file 是日记文件名) */
94
+ | {
95
+ lane: 'ledger';
96
+ kind: 'diary';
97
+ thread: string;
98
+ file: string;
99
+ }
100
+ /** 实时老师的嘴:孩子按下 · 松手(voice)或发了不是说的(text / photo / card;ask 是卡上的「?」 撤了,旧记录里还有)· 嘴接住的声音开始在孩子端放 ·
101
+ * 讲稿第几句开始放 · 孩子按下打断了这一轮(line = 正念到第几句,0 起;还没念到讲稿 = null) */
102
+ | {
103
+ lane: 'mouth';
104
+ kind: 'hold';
105
+ }
106
+ /** vad = 一直听时孩子说完(服务端 VAD 判的、应用收下了) */
107
+ | {
108
+ lane: 'mouth';
109
+ kind: 'release';
110
+ how: 'voice' | 'vad' | 'text' | 'photo' | 'card' | 'ask';
111
+ } | {
112
+ lane: 'mouth';
113
+ kind: 'catch';
114
+ text: string;
115
+ } | {
116
+ lane: 'mouth';
117
+ kind: 'read';
118
+ line: number;
119
+ } | {
120
+ lane: 'mouth';
121
+ kind: 'cut';
122
+ line: number | null;
123
+ }
124
+ /** 脑想得久(松手几秒了讲稿还一句没有),嘴垫了一句(开始放) */
125
+ | {
126
+ lane: 'mouth';
127
+ kind: 'fill';
128
+ text: string;
129
+ });
130
+ /** 发事件时给的形状:少一个 t(runner 补);Omit 直接套在联合上会塌成公共键,所以逐个分发 */
131
+ export type RunEventInput = RunEvent extends infer E ? (E extends RunEvent ? Omit<E, 't'> : never) : never;
132
+ /** 内存订阅者拿到的:事件 + 是谁的哪一轮 */
133
+ export interface RunEventEnvelope {
134
+ tutor: string;
135
+ date: string;
136
+ job: string;
137
+ event: RunEvent;
138
+ }
@@ -0,0 +1 @@
1
+ export const LANES = ['main', 'tts', 'ready', 'index', 'ledger', 'mouth'];
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 首页:家长批准后发布的那页卡。草稿 home/draft.md 是板书同一套围栏语法(src/runtime/home/home.ts 解析),
3
+ * `cotutor home publish` 校验后写 home/published.json,孩子端只读它。卡的 props 契约在 src/board/cards/<kind>.ts(老师卡的讲法留在这里,下发孩子前剥掉)。
4
+ */
5
+ import { z } from 'zod';
6
+ /** 发布的 id:发布时刻 YYYY-MM-DD-HHMM,同一分钟再发加 -2、-3 */
7
+ export declare const HOME_ID_RE: RegExp;
8
+ export declare const PublishedHomeSchema: z.ZodObject<{
9
+ id: z.ZodString;
10
+ publishedAt: z.ZodString;
11
+ for: z.ZodOptional<z.ZodString>;
12
+ source: z.ZodString;
13
+ cards: z.ZodArray<z.ZodObject<{
14
+ kind: z.ZodString;
15
+ props: z.ZodRecord<z.ZodString, z.ZodUnknown>;
16
+ state: z.ZodOptional<z.ZodUnknown>;
17
+ assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ look: z.ZodOptional<z.ZodObject<{
19
+ tint: z.ZodOptional<z.ZodString>;
20
+ look: z.ZodOptional<z.ZodString>;
21
+ emoji: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>>;
23
+ }, z.core.$strip>>;
24
+ note: z.ZodDefault<z.ZodString>;
25
+ warnings: z.ZodDefault<z.ZodArray<z.ZodString>>;
26
+ }, z.core.$strip>;
27
+ export type PublishedHome = z.infer<typeof PublishedHomeSchema>;
28
+ /** 孩子从首页哪个按钮进来的:home = 发布的 id(没发布过的缺省首页是 null),button = 老师卡上文件里的第几个按钮,或应用加的 new / recent */
29
+ export declare const HomeViaSchema: z.ZodObject<{
30
+ home: z.ZodNullable<z.ZodString>;
31
+ button: z.ZodUnion<readonly [z.ZodNumber, z.ZodEnum<{
32
+ recent: "recent";
33
+ new: "new";
34
+ }>]>;
35
+ }, z.core.$strip>;
36
+ export type HomeVia = z.infer<typeof HomeViaSchema>;
37
+ /** 消息里记的 via:再带上按钮上的字(发布的首页以后会换,记下来 home show 才说得清) */
38
+ export declare const MessageViaSchema: z.ZodObject<{
39
+ home: z.ZodNullable<z.ZodString>;
40
+ button: z.ZodUnion<readonly [z.ZodNumber, z.ZodEnum<{
41
+ recent: "recent";
42
+ new: "new";
43
+ }>]>;
44
+ label: z.ZodString;
45
+ }, z.core.$strip>;
46
+ export type MessageVia = z.infer<typeof MessageViaSchema>;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 首页:家长批准后发布的那页卡。草稿 home/draft.md 是板书同一套围栏语法(src/runtime/home/home.ts 解析),
3
+ * `cotutor home publish` 校验后写 home/published.json,孩子端只读它。卡的 props 契约在 src/board/cards/<kind>.ts(老师卡的讲法留在这里,下发孩子前剥掉)。
4
+ */
5
+ import { z } from 'zod';
6
+ import { BoardCardSchema } from "./board.js";
7
+ const DAY_RE = /^\d{4}-\d{2}-\d{2}$/;
8
+ /** 发布的 id:发布时刻 YYYY-MM-DD-HHMM,同一分钟再发加 -2、-3 */
9
+ export const HOME_ID_RE = /^\d{4}-\d{2}-\d{2}-\d{4}(?:-\d+)?$/;
10
+ export const PublishedHomeSchema = z.object({
11
+ id: z.string().regex(HOME_ID_RE),
12
+ publishedAt: z.string().min(1),
13
+ /** 草稿 frontmatter 的 for:给哪天用的 */
14
+ for: z.string().regex(DAY_RE).optional(),
15
+ /** 这份的原文(相对 workspace 根,home/history/<id>.md) */
16
+ source: z.string().min(1),
17
+ /** 解析后的卡,文件顺序;老师卡带讲法(brief),孩子端下发前剥 */
18
+ cards: z.array(BoardCardSchema),
19
+ /** 家长段(第一个 H2 起),孩子看不到 */
20
+ note: z.string().default(''),
21
+ /** 发布时还在的提醒(家长端「首页」页显示) */
22
+ warnings: z.array(z.string()).default([]),
23
+ });
24
+ /** 孩子从首页哪个按钮进来的:home = 发布的 id(没发布过的缺省首页是 null),button = 老师卡上文件里的第几个按钮,或应用加的 new / recent */
25
+ export const HomeViaSchema = z.object({
26
+ home: z.string().regex(HOME_ID_RE).nullable(),
27
+ button: z.union([z.number().int().nonnegative(), z.enum(['new', 'recent'])]),
28
+ });
29
+ /** 消息里记的 via:再带上按钮上的字(发布的首页以后会换,记下来 home show 才说得清) */
30
+ export const MessageViaSchema = HomeViaSchema.extend({ label: z.string() });
@@ -2,20 +2,31 @@
2
2
  * cotutor 契约(类型即文档)。每个文件一个契约面:
3
3
  * config cotutor.json(老师表、政策、运行时、paths 角色)
4
4
  * context-pack 每条消息前的上下文包
5
- * conversation 一老师一天一份的对话索引
6
- * ledger 观察与产物两本追加式账本
7
- * sections 最终文本里的「待裁量」「转交」段
5
+ * conversation 一老师一天一份的对话索引;conversation-files 它在 conversations/ 下的文件布局
6
+ * ledger 产物账本(追加式)
7
+ * events 一轮运行的事件(events.jsonl)
8
+ * sections 最终文本里的「记账」「记忆」段
9
+ * memory 「记忆」段的建议与证据、写 vault 前记下的那一笔(pending)
8
10
  * plan 计划文件
9
11
  * timetable 课程表(vault 里的 markdown 表)
12
+ * theme 主题清单(themes/<name>/theme.json:底色槽、字形槽、笔)
13
+ * activity activity 文件(agents/<老师>/activities/<名>.md:家长填的、应用算的、应用拦的、老师怎么带、工具人收到什么)
10
14
  * 运行时校验用 zod,失败信息经 explainIssues 变成修复指南。
11
15
  */
12
16
  export * from './issues.ts';
13
17
  export * from './config.ts';
18
+ export * from './workspace.ts';
14
19
  export * from './context-pack.ts';
15
20
  export * from './conversation.ts';
21
+ export * from './conversation-files.ts';
16
22
  export * from './ledger.ts';
23
+ export * from './events.ts';
17
24
  export * from './sections.ts';
25
+ export * from './memory.ts';
18
26
  export * from './board.ts';
19
27
  export * from './plan.ts';
20
28
  export * from './timetable.ts';
21
29
  export * from './json-schema.ts';
30
+ export * from './theme.ts';
31
+ export * from './home.ts';
32
+ export * from './activity.ts';
@@ -2,20 +2,31 @@
2
2
  * cotutor 契约(类型即文档)。每个文件一个契约面:
3
3
  * config cotutor.json(老师表、政策、运行时、paths 角色)
4
4
  * context-pack 每条消息前的上下文包
5
- * conversation 一老师一天一份的对话索引
6
- * ledger 观察与产物两本追加式账本
7
- * sections 最终文本里的「待裁量」「转交」段
5
+ * conversation 一老师一天一份的对话索引;conversation-files 它在 conversations/ 下的文件布局
6
+ * ledger 产物账本(追加式)
7
+ * events 一轮运行的事件(events.jsonl)
8
+ * sections 最终文本里的「记账」「记忆」段
9
+ * memory 「记忆」段的建议与证据、写 vault 前记下的那一笔(pending)
8
10
  * plan 计划文件
9
11
  * timetable 课程表(vault 里的 markdown 表)
12
+ * theme 主题清单(themes/<name>/theme.json:底色槽、字形槽、笔)
13
+ * activity activity 文件(agents/<老师>/activities/<名>.md:家长填的、应用算的、应用拦的、老师怎么带、工具人收到什么)
10
14
  * 运行时校验用 zod,失败信息经 explainIssues 变成修复指南。
11
15
  */
12
16
  export * from "./issues.js";
13
17
  export * from "./config.js";
18
+ export * from "./workspace.js";
14
19
  export * from "./context-pack.js";
15
20
  export * from "./conversation.js";
21
+ export * from "./conversation-files.js";
16
22
  export * from "./ledger.js";
23
+ export * from "./events.js";
17
24
  export * from "./sections.js";
25
+ export * from "./memory.js";
18
26
  export * from "./board.js";
19
27
  export * from "./plan.js";
20
28
  export * from "./timetable.js";
21
29
  export * from "./json-schema.js";
30
+ export * from "./theme.js";
31
+ export * from "./home.js";
32
+ export * from "./activity.js";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 孩子端的设备:服务端种的一枚 cookie 算一台,编号是随机的 12 位十六进制。
3
+ * 自动标签由浏览器信息算:「iPad · Safari 27 · 主屏幕」。纯函数,离屏可测。
4
+ */
5
+ /** 设备 cookie 的名字;活 400 天(浏览器允许的最长) */
6
+ export declare const DEVICE_COOKIE = "cotutor_kid";
7
+ export declare const DEVICE_COOKIE_DAYS = 400;
8
+ export { DEVICE_ID_RE } from './conversation.ts';
9
+ /** 认设备要的那几样:浏览器信息、触点数、是不是从主屏幕打开 */
10
+ export interface DeviceHint {
11
+ ua: string;
12
+ touch?: number;
13
+ standalone?: boolean;
14
+ }
15
+ /**
16
+ * 「iPad · Safari 27 · 主屏幕」。
17
+ * iPad 的 Safari 缺省请求桌面网站,浏览器信息写 Macintosh,要看触点数;新版 iOS 浏览器信息里的系统版本冻住了,只写浏览器的版本。
18
+ * 从主屏幕图标打开的 iOS 页面浏览器信息里没有 Safari 版本,只写「主屏幕」。
19
+ */
20
+ export declare function deviceLabel(d: DeviceHint): string;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 孩子端的设备:服务端种的一枚 cookie 算一台,编号是随机的 12 位十六进制。
3
+ * 自动标签由浏览器信息算:「iPad · Safari 27 · 主屏幕」。纯函数,离屏可测。
4
+ */
5
+ /** 设备 cookie 的名字;活 400 天(浏览器允许的最长) */
6
+ export const DEVICE_COOKIE = 'cotutor_kid';
7
+ export const DEVICE_COOKIE_DAYS = 400;
8
+ export { DEVICE_ID_RE } from "./conversation.js";
9
+ /**
10
+ * 「iPad · Safari 27 · 主屏幕」。
11
+ * iPad 的 Safari 缺省请求桌面网站,浏览器信息写 Macintosh,要看触点数;新版 iOS 浏览器信息里的系统版本冻住了,只写浏览器的版本。
12
+ * 从主屏幕图标打开的 iOS 页面浏览器信息里没有 Safari 版本,只写「主屏幕」。
13
+ */
14
+ export function deviceLabel(d) {
15
+ const ua = d.ua;
16
+ const mac = /Macintosh/.test(ua);
17
+ const kind = /iPad/.test(ua) || (mac && (d.touch ?? 0) > 1) ? 'iPad'
18
+ : /iPhone/.test(ua) ? 'iPhone'
19
+ : /Android/.test(ua) ? (/Mobile/.test(ua) ? 'Android 手机' : 'Android 平板')
20
+ : mac ? 'Mac'
21
+ : /Windows/.test(ua) ? 'Windows'
22
+ : /Linux/.test(ua) ? 'Linux'
23
+ : '';
24
+ const major = (re) => re.exec(ua)?.[1] ?? '';
25
+ const browser = /EdgiOS|Edg\//.test(ua) ? `Edge ${major(/(?:EdgiOS|Edg)\/(\d+)/)}`
26
+ : /CriOS|Chrome\//.test(ua) ? `Chrome ${major(/(?:CriOS|Chrome)\/(\d+)/)}`
27
+ : /FxiOS|Firefox\//.test(ua) ? `Firefox ${major(/(?:FxiOS|Firefox)\/(\d+)/)}`
28
+ : /Safari\//.test(ua) && /Version\//.test(ua) ? `Safari ${major(/Version\/(\d+)/)}`
29
+ : '';
30
+ const parts = [kind, browser.trim(), d.standalone ? '主屏幕' : ''].filter(Boolean);
31
+ return parts.length ? parts.join(' · ') : '不认得的浏览器';
32
+ }
@@ -1,72 +1,16 @@
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>;
@@ -74,7 +18,6 @@ export declare const ArtifactEventSchema: z.ZodObject<{
74
18
  status: z.ZodOptional<z.ZodEnum<{
75
19
  ready: "ready";
76
20
  draft: "draft";
77
- accepted: "accepted";
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
  }