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.
- package/LICENSE +247 -21
- package/NOTICE +42 -0
- package/README.md +107 -24
- package/bin/cotutor.js +4 -4
- package/cards/canvas/card.css +8 -0
- package/cards/canvas/card.md +68 -0
- package/cards/choice/card.css +18 -0
- package/cards/choice/card.md +55 -0
- package/cards/code/card.css +5 -0
- package/cards/code/card.md +46 -0
- package/cards/dictation/card.css +10 -0
- package/cards/dictation/card.md +97 -0
- package/cards/image/card.css +10 -0
- package/cards/image/card.md +52 -0
- package/cards/lecture/card.css +9 -0
- package/cards/lecture/card.md +69 -0
- package/cards/paint/card.css +20 -0
- package/cards/paint/card.md +77 -0
- package/cards/photo/card.css +15 -0
- package/cards/photo/card.md +61 -0
- package/cards/read/card.css +6 -0
- package/cards/read/card.md +51 -0
- package/cards/text/card.css +3 -0
- package/cards/text/card.md +69 -0
- package/cards/tianzige/card.css +17 -0
- package/cards/tianzige/card.md +78 -0
- package/cards/tutor/card.css +66 -0
- package/cards/tutor/card.md +148 -0
- package/cards/word/card.css +24 -0
- package/cards/word/card.md +91 -0
- package/cards//346/235/277/344/271/246/346/200/216/344/271/210/345/206/231.md +159 -0
- package/dist/app/activity-eval-rules.d.ts +62 -0
- package/dist/app/activity-eval-rules.js +276 -0
- package/dist/app/activity-eval.d.ts +65 -0
- package/dist/app/activity-eval.js +158 -0
- package/dist/app/build.d.ts +11 -0
- package/dist/app/build.js +45 -0
- package/dist/app/cli/activities.d.ts +63 -0
- package/dist/app/cli/activities.js +158 -0
- package/dist/app/cli/cert.d.ts +7 -0
- package/dist/app/cli/cert.js +36 -0
- package/dist/app/cli/chalk/bake.d.ts +10 -0
- package/dist/app/cli/chalk/bake.js +58 -0
- package/dist/app/cli/chalk/browser.d.ts +16 -0
- package/dist/app/cli/chalk/browser.js +142 -0
- package/dist/app/cli/chalk/build.d.ts +14 -0
- package/dist/app/cli/chalk/build.js +100 -0
- package/dist/app/cli/chalk/dub.d.ts +51 -0
- package/dist/app/cli/chalk/dub.js +106 -0
- package/dist/app/cli/chalk/load-scene.d.ts +34 -0
- package/dist/app/cli/chalk/load-scene.js +117 -0
- package/dist/app/cli/chalk/main.d.ts +7 -0
- package/dist/app/cli/chalk/main.js +198 -0
- package/dist/app/cli/chalk/serve.d.ts +4 -0
- package/dist/app/cli/chalk/serve.js +28 -0
- package/dist/app/cli/chalk/snap.d.ts +65 -0
- package/dist/app/cli/chalk/snap.js +103 -0
- package/dist/app/cli/chalk/typecheck.d.ts +7 -0
- package/dist/app/cli/chalk/typecheck.js +51 -0
- package/dist/app/cli/doctor.d.ts +23 -0
- package/dist/app/cli/doctor.js +617 -0
- package/dist/app/cli/grades.d.ts +14 -0
- package/dist/app/cli/grades.js +44 -0
- package/dist/{cli → app/cli}/init.d.ts +3 -1
- package/dist/app/cli/init.js +155 -0
- package/dist/app/cli/main.js +715 -0
- package/dist/app/cli/migrate.d.ts +58 -0
- package/dist/app/cli/migrate.js +253 -0
- package/dist/app/cli/serve.d.ts +37 -0
- package/dist/app/cli/serve.js +98 -0
- package/dist/app/cli/shipped.d.ts +30 -0
- package/dist/app/cli/shipped.js +47 -0
- package/dist/app/cli/skeleton.d.ts +38 -0
- package/dist/app/cli/skeleton.js +161 -0
- package/dist/app/cli/skills.d.ts +55 -0
- package/dist/app/cli/skills.js +189 -0
- package/dist/app/cli/themes.d.ts +52 -0
- package/dist/app/cli/themes.js +148 -0
- package/dist/app/cli/tutors.d.ts +73 -0
- package/dist/app/cli/tutors.js +250 -0
- package/dist/app/cli/usage.d.ts +2 -0
- package/dist/app/cli/usage.js +30 -0
- package/dist/app/dictation/recognize.d.ts +18 -0
- package/dist/app/dictation/recognize.js +6 -0
- package/dist/app/dictation/route.d.ts +52 -0
- package/dist/app/dictation/route.js +510 -0
- package/dist/app/diff.d.ts +11 -0
- package/dist/app/diff.js +71 -0
- package/dist/app/http/access.d.ts +62 -0
- package/dist/app/http/access.js +180 -0
- package/dist/app/http/app.d.ts +246 -0
- package/dist/app/http/app.js +1212 -0
- package/dist/app/http/dev-activities.d.ts +115 -0
- package/dist/app/http/dev-activities.js +193 -0
- package/dist/app/http/dev-overview.d.ts +108 -0
- package/dist/app/http/dev-overview.js +209 -0
- package/dist/app/http/dev-tutor-files.d.ts +80 -0
- package/dist/app/http/dev-tutor-files.js +151 -0
- package/dist/app/http/parent-home.d.ts +37 -0
- package/dist/app/http/parent-home.js +203 -0
- package/dist/app/http/range.d.ts +9 -0
- package/dist/app/http/range.js +19 -0
- package/dist/app/http/raw-view.d.ts +117 -0
- package/dist/app/http/raw-view.js +149 -0
- package/dist/app/http/send-file.d.ts +7 -0
- package/dist/app/http/send-file.js +29 -0
- package/dist/app/http/stage.d.ts +24 -0
- package/dist/app/http/stage.js +97 -0
- package/dist/app/http/theme.d.ts +13 -0
- package/dist/app/http/theme.js +41 -0
- package/dist/app/machine/bailian.d.ts +28 -0
- package/dist/app/machine/bailian.js +88 -0
- package/dist/app/mock/mock-live.d.ts +16 -0
- package/dist/app/mock/mock-live.js +140 -0
- package/dist/app/mock/mock.d.ts +89 -0
- package/dist/app/mock/mock.js +1117 -0
- package/dist/app/replay.d.ts +94 -0
- package/dist/app/replay.js +170 -0
- package/dist/app/skills/analyze-doc.d.ts +3 -0
- package/dist/app/skills/analyze-doc.js +47 -0
- package/dist/app/skills/home-doc.d.ts +5 -0
- package/dist/app/skills/home-doc.js +112 -0
- package/dist/app/skills/tune-doc.d.ts +3 -0
- package/dist/app/skills/tune-doc.js +80 -0
- package/dist/app/talk/list.d.ts +11 -0
- package/dist/app/talk/list.js +9 -0
- package/dist/app/talk/route.d.ts +16 -0
- package/dist/app/talk/route.js +142 -0
- package/dist/app/workspace.d.ts +58 -0
- package/dist/{cli → app}/workspace.js +82 -36
- package/dist/app/ws/route.d.ts +25 -0
- package/dist/app/ws/route.js +29 -0
- package/dist/app/ws/ws.d.ts +31 -0
- package/dist/app/ws/ws.js +169 -0
- package/dist/board/canvas-chat.d.ts +97 -0
- package/dist/board/canvas-chat.js +175 -0
- package/dist/board/card-guards.d.ts +15 -0
- package/dist/board/card-guards.js +38 -0
- package/dist/board/cards/canvas.d.ts +41 -0
- package/dist/board/cards/canvas.js +83 -0
- package/dist/board/cards/choice.d.ts +20 -0
- package/dist/board/cards/choice.js +64 -0
- package/dist/board/cards/code.d.ts +9 -0
- package/dist/board/cards/code.js +10 -0
- package/dist/board/cards/dictation.d.ts +42 -0
- package/dist/board/cards/dictation.js +105 -0
- package/dist/board/cards/docs.d.ts +47 -0
- package/dist/board/cards/docs.js +152 -0
- package/dist/board/cards/image.d.ts +13 -0
- package/dist/board/cards/image.js +26 -0
- package/dist/board/cards/index.d.ts +62 -0
- package/dist/board/cards/index.js +144 -0
- package/dist/board/cards/kind.d.ts +33 -0
- package/dist/board/cards/kind.js +9 -0
- package/dist/board/cards/lecture.d.ts +26 -0
- package/dist/board/cards/lecture.js +62 -0
- package/dist/board/cards/paint.d.ts +38 -0
- package/dist/board/cards/paint.js +85 -0
- package/dist/board/cards/photo.d.ts +15 -0
- package/dist/board/cards/photo.js +29 -0
- package/dist/board/cards/read.d.ts +8 -0
- package/dist/board/cards/read.js +18 -0
- package/dist/board/cards/text.d.ts +20 -0
- package/dist/board/cards/text.js +59 -0
- package/dist/board/cards/tianzige.d.ts +16 -0
- package/dist/board/cards/tianzige.js +64 -0
- package/dist/board/cards/tutor.d.ts +72 -0
- package/dist/board/cards/tutor.js +134 -0
- package/dist/board/cards/word.d.ts +20 -0
- package/dist/board/cards/word.js +76 -0
- package/dist/board/lecture.d.ts +100 -0
- package/dist/board/lecture.js +204 -0
- package/dist/board/paper.d.ts +20 -0
- package/dist/board/paper.js +76 -0
- package/dist/board/parse.d.ts +120 -0
- package/dist/board/parse.js +330 -0
- package/dist/board/presentation.d.ts +295 -0
- package/dist/board/presentation.js +615 -0
- package/dist/board/sections.d.ts +16 -0
- package/dist/board/sections.js +130 -0
- package/dist/brain/api-tools.d.ts +8 -0
- package/dist/brain/api-tools.js +190 -0
- package/dist/brain/api.d.ts +62 -0
- package/dist/brain/api.js +411 -0
- package/dist/brain/cli/adapters.d.ts +60 -0
- package/dist/brain/cli/adapters.js +91 -0
- package/dist/brain/cli/qwen.d.ts +11 -0
- package/dist/brain/cli/qwen.js +141 -0
- package/dist/brain/cli/run-plan.d.ts +59 -0
- package/dist/brain/cli/run-plan.js +71 -0
- package/dist/brain/cli/run.d.ts +35 -0
- package/dist/brain/cli/run.js +256 -0
- package/dist/brain/cli/stream-json.d.ts +18 -0
- package/dist/brain/cli/stream-json.js +86 -0
- package/dist/brain/cli/types.d.ts +144 -0
- package/dist/brain/cli/types.js +3 -0
- package/dist/brain/cli/warm.d.ts +53 -0
- package/dist/brain/cli/warm.js +103 -0
- package/dist/brain/index.d.ts +145 -0
- package/dist/brain/index.js +74 -0
- package/dist/brain/stream.d.ts +20 -0
- package/dist/brain/stream.js +70 -0
- package/dist/brain/transcript.d.ts +45 -0
- package/dist/brain/transcript.js +132 -0
- package/dist/chalk/actions.d.ts +37 -0
- package/dist/chalk/actions.js +69 -0
- package/dist/chalk/bundle.d.ts +26 -0
- package/dist/chalk/bundle.js +69 -0
- package/dist/chalk/check.d.ts +28 -0
- package/dist/chalk/check.js +291 -0
- package/dist/chalk/circle.d.ts +64 -0
- package/dist/chalk/circle.js +193 -0
- package/dist/chalk/clock.d.ts +84 -0
- package/dist/chalk/clock.js +84 -0
- package/dist/chalk/geometry.d.ts +44 -0
- package/dist/chalk/geometry.js +139 -0
- package/dist/chalk/glyphs/capitals.d.ts +12 -0
- package/dist/chalk/glyphs/capitals.js +264 -0
- package/dist/chalk/glyphs/index.d.ts +21 -0
- package/dist/chalk/glyphs/index.js +18 -0
- package/dist/chalk/glyphs/letters.d.ts +13 -0
- package/dist/chalk/glyphs/letters.js +280 -0
- package/dist/chalk/glyphs/metrics.d.ts +33 -0
- package/dist/chalk/glyphs/metrics.js +28 -0
- package/dist/chalk/glyphs/registry.d.ts +7 -0
- package/dist/chalk/glyphs/registry.js +8 -0
- package/dist/chalk/glyphs/sample.d.ts +32 -0
- package/dist/chalk/glyphs/sample.js +102 -0
- package/dist/chalk/glyphs/skeleton.d.ts +64 -0
- package/dist/chalk/glyphs/skeleton.js +126 -0
- package/dist/chalk/glyphs/types.d.ts +58 -0
- package/dist/chalk/glyphs/types.js +17 -0
- package/dist/chalk/index.d.ts +23 -0
- package/dist/chalk/index.js +15 -0
- package/dist/chalk/manifest.d.ts +41 -0
- package/dist/chalk/manifest.js +6 -0
- package/dist/chalk/paint.d.ts +180 -0
- package/dist/chalk/paint.js +210 -0
- package/dist/chalk/pointer.d.ts +8 -0
- package/dist/chalk/pointer.js +21 -0
- package/dist/chalk/prepare.d.ts +11 -0
- package/dist/chalk/prepare.js +15 -0
- package/dist/chalk/scene-schema.d.ts +199 -0
- package/dist/chalk/scene-schema.js +91 -0
- package/dist/chalk/seed.d.ts +3 -0
- package/dist/chalk/seed.js +10 -0
- package/dist/chalk/text-metrics.d.ts +8 -0
- package/dist/chalk/text-metrics.js +156 -0
- package/dist/chalk/timeline.d.ts +47 -0
- package/dist/chalk/timeline.js +84 -0
- package/dist/chalk/types.d.ts +150 -0
- package/dist/chalk/types.js +8 -0
- package/dist/lib/index.d.ts +14 -8
- package/dist/lib/index.js +14 -8
- package/dist/media/draw.d.ts +23 -0
- package/dist/media/draw.js +44 -0
- package/dist/media/mp3.d.ts +6 -0
- package/dist/media/mp3.js +58 -0
- package/dist/media/mp4.d.ts +1 -0
- package/dist/media/mp4.js +58 -0
- package/dist/media/tts-voices.d.ts +18 -0
- package/dist/media/tts-voices.js +606 -0
- package/dist/media/tts.d.ts +56 -0
- package/dist/media/tts.js +174 -0
- package/dist/media/vision.d.ts +25 -0
- package/dist/media/vision.js +71 -0
- package/dist/memory/commit.d.ts +67 -0
- package/dist/memory/commit.js +130 -0
- package/dist/memory/context.d.ts +86 -0
- package/dist/memory/context.js +97 -0
- package/dist/memory/diary.d.ts +84 -0
- package/dist/memory/diary.js +183 -0
- package/dist/memory/grade.d.ts +2 -0
- package/dist/memory/grade.js +7 -0
- package/dist/{lib → memory}/plan.d.ts +3 -1
- package/dist/{lib → memory}/plan.js +10 -1
- package/dist/memory/proposals.d.ts +11 -0
- package/dist/memory/proposals.js +43 -0
- package/dist/memory/retrieval.d.ts +44 -0
- package/dist/memory/retrieval.js +157 -0
- package/dist/memory/timetable.d.ts +19 -0
- package/dist/memory/timetable.js +95 -0
- package/dist/memory/vault-notes.d.ts +165 -0
- package/dist/memory/vault-notes.js +359 -0
- package/dist/memory/vault.d.ts +70 -0
- package/dist/memory/vault.js +169 -0
- package/dist/realtime/bailian.d.ts +120 -0
- package/dist/realtime/bailian.js +288 -0
- package/dist/realtime/cues.d.ts +51 -0
- package/dist/realtime/cues.js +94 -0
- package/dist/realtime/listen.d.ts +32 -0
- package/dist/realtime/listen.js +53 -0
- package/dist/realtime/preview.d.ts +23 -0
- package/dist/realtime/preview.js +38 -0
- package/dist/realtime/prompt.d.ts +8 -0
- package/dist/realtime/prompt.js +13 -0
- package/dist/realtime/voices.d.ts +19 -0
- package/dist/realtime/voices.js +71 -0
- package/dist/runtime/activities.d.ts +17 -0
- package/dist/runtime/activities.js +46 -0
- package/dist/runtime/activity-state.d.ts +22 -0
- package/dist/runtime/activity-state.js +83 -0
- package/dist/runtime/activity.d.ts +63 -0
- package/dist/runtime/activity.js +428 -0
- package/dist/runtime/agent-file.d.ts +24 -0
- package/dist/runtime/agent-file.js +59 -0
- package/dist/runtime/auto-bookkeep.d.ts +30 -0
- package/dist/runtime/auto-bookkeep.js +84 -0
- package/dist/{lib → runtime/context}/context-pack.d.ts +3 -3
- package/dist/runtime/context/context-pack.js +182 -0
- package/dist/runtime/context/thread-digest.d.ts +4 -0
- package/dist/runtime/context/thread-digest.js +35 -0
- package/dist/runtime/context/tutor-rules.d.ts +25 -0
- package/dist/runtime/context/tutor-rules.js +47 -0
- package/dist/runtime/delivery/delivery.d.ts +94 -0
- package/dist/runtime/delivery/delivery.js +145 -0
- package/dist/runtime/delivery/playback.d.ts +25 -0
- package/dist/runtime/delivery/playback.js +29 -0
- package/dist/runtime/delivery/player.d.ts +145 -0
- package/dist/runtime/delivery/player.js +221 -0
- package/dist/runtime/delivery/queue.d.ts +89 -0
- package/dist/runtime/delivery/queue.js +59 -0
- package/dist/runtime/home/edit.d.ts +39 -0
- package/dist/runtime/home/edit.js +132 -0
- package/dist/runtime/home/home.d.ts +180 -0
- package/dist/runtime/home/home.js +311 -0
- package/dist/runtime/home/store.d.ts +142 -0
- package/dist/runtime/home/store.js +440 -0
- package/dist/runtime/journal/conversation.d.ts +46 -0
- package/dist/runtime/journal/conversation.js +89 -0
- package/dist/runtime/journal/events.d.ts +27 -0
- package/dist/runtime/journal/events.js +136 -0
- package/dist/runtime/journal/kid-log.d.ts +105 -0
- package/dist/runtime/journal/kid-log.js +133 -0
- package/dist/runtime/journal/ledger.d.ts +17 -0
- package/dist/{lib → runtime/journal}/ledger.js +7 -32
- package/dist/runtime/journal/mix.d.ts +33 -0
- package/dist/runtime/journal/mix.js +88 -0
- package/dist/runtime/journal/mouth-index.d.ts +26 -0
- package/dist/runtime/journal/mouth-index.js +34 -0
- package/dist/runtime/journal/mouth.d.ts +54 -0
- package/dist/runtime/journal/mouth.js +102 -0
- package/dist/runtime/journal/recorder.d.ts +46 -0
- package/dist/runtime/journal/recorder.js +58 -0
- package/dist/runtime/journal/store.d.ts +123 -0
- package/dist/runtime/journal/store.js +316 -0
- package/dist/runtime/kid-input.d.ts +16 -0
- package/dist/runtime/kid-input.js +195 -0
- package/dist/runtime/kid-view.d.ts +124 -0
- package/dist/runtime/kid-view.js +157 -0
- package/dist/runtime/lecture.d.ts +86 -0
- package/dist/runtime/lecture.js +237 -0
- package/dist/runtime/live/call.d.ts +219 -0
- package/dist/runtime/live/call.js +1211 -0
- package/dist/runtime/live/turns.d.ts +48 -0
- package/dist/runtime/live/turns.js +102 -0
- package/dist/runtime/runner.d.ts +289 -0
- package/dist/runtime/runner.js +898 -0
- package/dist/runtime/talk-run.d.ts +21 -0
- package/dist/runtime/talk-run.js +34 -0
- package/dist/scenes/dictation/match.d.ts +57 -0
- package/dist/scenes/dictation/match.js +255 -0
- package/dist/scenes/dictation/recognize.d.ts +86 -0
- package/dist/scenes/dictation/recognize.js +163 -0
- package/dist/scenes/dictation/store.d.ts +112 -0
- package/dist/scenes/dictation/store.js +99 -0
- package/dist/scenes/look.d.ts +26 -0
- package/dist/scenes/look.js +1 -0
- package/dist/scenes/paint/painter.d.ts +84 -0
- package/dist/scenes/paint/painter.js +170 -0
- package/dist/scenes/paint/prompt.d.ts +23 -0
- package/dist/scenes/paint/prompt.js +36 -0
- package/dist/scenes/talk/en-words.d.ts +8 -0
- package/dist/scenes/talk/en-words.js +44 -0
- package/dist/scenes/talk/list.d.ts +44 -0
- package/dist/scenes/talk/list.js +88 -0
- package/dist/scenes/talk/store.d.ts +27 -0
- package/dist/scenes/talk/store.js +61 -0
- package/dist/scenes/talk/warmup.d.ts +16 -0
- package/dist/scenes/talk/warmup.js +39 -0
- package/dist/schema/activity.d.ts +149 -0
- package/dist/schema/activity.js +113 -0
- package/dist/schema/board.d.ts +200 -0
- package/dist/schema/board.js +42 -0
- package/dist/schema/config.d.ts +353 -80
- package/dist/schema/config.js +293 -76
- package/dist/schema/context-pack.d.ts +82 -13
- package/dist/schema/context-pack.js +97 -10
- package/dist/schema/conversation-files.d.ts +43 -0
- package/dist/schema/conversation-files.js +26 -0
- package/dist/schema/conversation.d.ts +459 -13
- package/dist/schema/conversation.js +148 -8
- package/dist/schema/events.d.ts +138 -0
- package/dist/schema/events.js +1 -0
- package/dist/schema/home.d.ts +46 -0
- package/dist/schema/home.js +30 -0
- package/dist/schema/index.d.ts +19 -4
- package/dist/schema/index.js +19 -4
- package/dist/schema/json-schema.d.ts +2 -0
- package/dist/schema/json-schema.js +23 -0
- package/dist/schema/kid-device.d.ts +20 -0
- package/dist/schema/kid-device.js +32 -0
- package/dist/schema/ledger.d.ts +9 -64
- package/dist/schema/ledger.js +7 -31
- package/dist/schema/memory.d.ts +73 -0
- package/dist/schema/memory.js +47 -0
- package/dist/schema/plan.d.ts +2 -2
- package/dist/schema/plan.js +2 -2
- package/dist/schema/sections.d.ts +32 -25
- package/dist/schema/sections.js +21 -22
- package/dist/schema/theme.d.ts +25 -0
- package/dist/schema/theme.js +26 -0
- package/dist/schema/timetable.d.ts +26 -0
- package/dist/schema/timetable.js +18 -0
- package/dist/schema/workspace.d.ts +41 -0
- package/dist/schema/workspace.js +9 -0
- package/dist/shared/errors.d.ts +8 -0
- package/dist/shared/errors.js +13 -0
- package/dist/shared/home.d.ts +2 -0
- package/dist/shared/home.js +16 -0
- package/dist/shared/human-notes.d.ts +5 -0
- package/dist/shared/human-notes.js +7 -0
- package/dist/shared/qianwen.d.ts +50 -0
- package/dist/shared/qianwen.js +109 -0
- package/dist/shared/time.d.ts +9 -0
- package/dist/shared/time.js +22 -0
- package/dist/shared/tokens.d.ts +18 -0
- package/dist/shared/tokens.js +11 -0
- package/dist/shared/wav.d.ts +10 -0
- package/dist/shared/wav.js +50 -0
- package/dist/stage/Assistant-Bold-ZDZZ6JHA.woff2 +0 -0
- package/dist/stage/Assistant-Medium-DZ25RZU3.woff2 +0 -0
- package/dist/stage/Assistant-Regular-PLF2XOGW.woff2 +0 -0
- package/dist/stage/Assistant-SemiBold-CZ5MX6FK.woff2 +0 -0
- package/dist/stage/chunk-226TNLQA.js +129 -0
- package/dist/stage/chunk-24LGQEKE.js +1 -0
- package/dist/stage/chunk-25XV6UY3.js +10 -0
- package/dist/stage/chunk-2AZI3NHJ.js +1 -0
- package/dist/stage/chunk-2BQZTTBE.js +1 -0
- package/dist/stage/chunk-2M7CGY3Y.js +11 -0
- package/dist/stage/chunk-2VR4WFQ7.js +10 -0
- package/dist/stage/chunk-2ZYXBUWG.js +9 -0
- package/dist/stage/chunk-32LAWMGY.js +1 -0
- package/dist/stage/chunk-3LEMTSOO.js +11 -0
- package/dist/stage/chunk-3QCKGZYE.js +32 -0
- package/dist/stage/chunk-44P66WFA.js +1 -0
- package/dist/stage/chunk-4AM6FRR6.js +7 -0
- package/dist/stage/chunk-4QDE4SUK.js +1 -0
- package/dist/stage/chunk-4QESHV3U.js +1 -0
- package/dist/stage/chunk-4SG5QPHB.js +2 -0
- package/dist/stage/chunk-4T4UVCOC.js +1 -0
- package/dist/stage/chunk-4WUEPPG3.js +34 -0
- package/dist/stage/chunk-4YCN6UZ5.js +99 -0
- package/dist/stage/chunk-5V7ZY2AP.js +1 -0
- package/dist/stage/chunk-5VS5Y2VJ.js +6 -0
- package/dist/stage/chunk-5W4NO2ZD.js +62 -0
- package/dist/stage/chunk-65CRNICM.js +1 -0
- package/dist/stage/chunk-66MULO7F.js +5 -0
- package/dist/stage/chunk-6COFQTBS.js +162 -0
- package/dist/stage/chunk-6VZG3M3I.js +8 -0
- package/dist/stage/chunk-7HVDH43T.js +1 -0
- package/dist/stage/chunk-7JLJN4EZ.js +8 -0
- package/dist/stage/chunk-7QDSP4LN.js +1 -0
- package/dist/stage/chunk-7R6OQAO3.js +1 -0
- package/dist/stage/chunk-7VTTHZKW.js +7 -0
- package/dist/stage/chunk-ATHR5KEN.js +10 -0
- package/dist/stage/chunk-B6R5LTP2.js +36 -0
- package/dist/stage/chunk-BD4WE264.js +1 -0
- package/dist/stage/chunk-BONANU47.js +206 -0
- package/dist/stage/chunk-BTVW7OFK.js +89 -0
- package/dist/stage/chunk-BUTJIDHG.js +8 -0
- package/dist/stage/chunk-C2IPYMML.js +84 -0
- package/dist/stage/chunk-C54FTPPV.js +9 -0
- package/dist/stage/chunk-C6LOUF2Z.js +90 -0
- package/dist/stage/chunk-CFF3PILO.js +339 -0
- package/dist/stage/chunk-CI2FQ2JY.js +9 -0
- package/dist/stage/chunk-CW5O4RV7.js +12 -0
- package/dist/stage/chunk-CYABNQYD.js +1 -0
- package/dist/stage/chunk-D7FFA4NS.js +15 -0
- package/dist/stage/chunk-DUNNXU6Z.js +8 -0
- package/dist/stage/chunk-E3E4Q6JF.js +6 -0
- package/dist/stage/chunk-EB3U3LH7.js +9 -0
- package/dist/stage/chunk-EGSZ736B.js +8 -0
- package/dist/stage/chunk-EOBXW5VQ.js +2 -0
- package/dist/stage/chunk-ERZC3B7Y.js +11 -0
- package/dist/stage/chunk-ESDOOBIH.js +11 -0
- package/dist/stage/chunk-EVU4QAL4.js +178 -0
- package/dist/stage/chunk-EVVZI2NY.js +39 -0
- package/dist/stage/chunk-FBKAZUKD.js +39 -0
- package/dist/stage/chunk-FDVKYQJN.js +1 -0
- package/dist/stage/chunk-FGPVYHVR.js +5 -0
- package/dist/stage/chunk-FHUD4AZC.js +1 -0
- package/dist/stage/chunk-FKUJ2DMY.js +96 -0
- package/dist/stage/chunk-FNZGVIJV.js +1 -0
- package/dist/stage/chunk-GBYSEGYM.js +78 -0
- package/dist/stage/chunk-GCO4TDHX.js +1 -0
- package/dist/stage/chunk-GKTML2LG.js +10 -0
- package/dist/stage/chunk-GMDIHHXQ.js +11 -0
- package/dist/stage/chunk-GOUNACI3.js +10 -0
- package/dist/stage/chunk-GXAYATPF.js +3 -0
- package/dist/stage/chunk-H2K2DDXV.js +8 -0
- package/dist/stage/chunk-H3UJI6ZY.js +13 -0
- package/dist/stage/chunk-H6PUGCME.js +7 -0
- package/dist/stage/chunk-HNBUIMIG.js +1 -0
- package/dist/stage/chunk-HRZY2BJQ.js +10 -0
- package/dist/stage/chunk-HSPJGALW.js +30 -0
- package/dist/stage/chunk-IBYORHIP.js +25 -0
- package/dist/stage/chunk-IHF4EWTY.js +1 -0
- package/dist/stage/chunk-ISBRPNKI.js +1 -0
- package/dist/stage/chunk-IZ3OI3C2.js +2 -0
- package/dist/stage/chunk-JEFZAC2R.js +1 -0
- package/dist/stage/chunk-JFIGRDPO.js +1 -0
- package/dist/stage/chunk-JFVYBOOC.js +9 -0
- package/dist/stage/chunk-JGD4TUTQ.js +1 -0
- package/dist/stage/chunk-JO4BEHDH.js +4 -0
- package/dist/stage/chunk-JOWBS42C.js +1 -0
- package/dist/stage/chunk-JP3TM2TG.js +1 -0
- package/dist/stage/chunk-JVK2C52O.js +1 -0
- package/dist/stage/chunk-K4I76XBX.js +14 -0
- package/dist/stage/chunk-KA6CZZ4M.js +1 -0
- package/dist/stage/chunk-KESSJ36M.js +1 -0
- package/dist/stage/chunk-LKATEVRU.js +1 -0
- package/dist/stage/chunk-LS4EJ2EI.js +1 -0
- package/dist/stage/chunk-LUKJQC2X.js +70 -0
- package/dist/stage/chunk-LWULR3SM.js +1 -0
- package/dist/stage/chunk-LWVRFMKX.js +2 -0
- package/dist/stage/chunk-LXC4ZBPZ.js +1 -0
- package/dist/stage/chunk-M2UP255H.js +1 -0
- package/dist/stage/chunk-MAPPXUZQ.js +231 -0
- package/dist/stage/chunk-MBMPW7Z5.js +1 -0
- package/dist/stage/chunk-MD3HMMTK.js +1 -0
- package/dist/stage/chunk-MLPCUIKR.js +17 -0
- package/dist/stage/chunk-MNQIRPDQ.js +8 -0
- package/dist/stage/chunk-MRG7MJVS.js +1 -0
- package/dist/stage/chunk-MU6EXW72.js +10 -0
- package/dist/stage/chunk-MVU2X6LU.js +4 -0
- package/dist/stage/chunk-N6UA5CZV.js +36 -0
- package/dist/stage/chunk-NLZIT2TJ.js +7 -0
- package/dist/stage/chunk-NOJR3J7M.js +1 -0
- package/dist/stage/chunk-NT7ARDOL.js +1 -0
- package/dist/stage/chunk-NWOGMPZH.js +1 -0
- package/dist/stage/chunk-NXE4KMG3.js +40 -0
- package/dist/stage/chunk-O4YCZXD2.js +257 -0
- package/dist/stage/chunk-OAJZ7HLK.js +1 -0
- package/dist/stage/chunk-OCFCFASO.js +1 -0
- package/dist/stage/chunk-ODGPG5RY.js +7 -0
- package/dist/stage/chunk-ODUEA52Q.js +3 -0
- package/dist/stage/chunk-OGDJ3FCI.js +1 -0
- package/dist/stage/chunk-OLDJ55TT.js +1 -0
- package/dist/stage/chunk-OOCL4ATI.js +2 -0
- package/dist/stage/chunk-OQEFDUDV.js +1 -0
- package/dist/stage/chunk-OQWVEWG7.js +4 -0
- package/dist/stage/chunk-OUIX6BGK.js +1 -0
- package/dist/stage/chunk-OV7OZYUO.js +7 -0
- package/dist/stage/chunk-PFGDY33O.js +1 -0
- package/dist/stage/chunk-PFJDUJB3.js +139 -0
- package/dist/stage/chunk-PGEW76ER.js +1 -0
- package/dist/stage/chunk-PP76TAQX.js +32 -0
- package/dist/stage/chunk-PTBOP4OT.js +2 -0
- package/dist/stage/chunk-PX2RVHCK.js +1 -0
- package/dist/stage/chunk-Q7K3PNAD.js +1 -0
- package/dist/stage/chunk-QDDPLZDB.js +1 -0
- package/dist/stage/chunk-QLGLZ77F.js +1 -0
- package/dist/stage/chunk-QOPFDFHI.js +1 -0
- package/dist/stage/chunk-QXT4KAEJ.js +1 -0
- package/dist/stage/chunk-R4YVZCIT.js +1 -0
- package/dist/stage/chunk-R6P6EHWA.js +62 -0
- package/dist/stage/chunk-RCH3OXBI.js +9 -0
- package/dist/stage/chunk-RHPE44I2.js +1 -0
- package/dist/stage/chunk-RJ2R4FVC.js +1 -0
- package/dist/stage/chunk-RJH2YVTD.js +1 -0
- package/dist/stage/chunk-RLWWW5OB.js +6 -0
- package/dist/stage/chunk-S3WO35Z7.js +120 -0
- package/dist/stage/chunk-S7ZGX6MW.js +1 -0
- package/dist/stage/chunk-SIAWX27B.js +1 -0
- package/dist/stage/chunk-SLG4X622.js +1 -0
- package/dist/stage/chunk-SLJRBC77.js +168 -0
- package/dist/stage/chunk-SRORWQJZ.js +1 -0
- package/dist/stage/chunk-STZTUIIF.js +2 -0
- package/dist/stage/chunk-SVQ6MWNV.js +9 -0
- package/dist/stage/chunk-TL3HLL2S.js +132 -0
- package/dist/stage/chunk-U3DOE6SF.js +24 -0
- package/dist/stage/chunk-UABQIZKW.js +6 -0
- package/dist/stage/chunk-UDK3R764.js +1 -0
- package/dist/stage/chunk-UFF4E54B.js +41 -0
- package/dist/stage/chunk-UFP5Q4AY.js +1 -0
- package/dist/stage/chunk-UMH2TSW2.js +72 -0
- package/dist/stage/chunk-UTASVNF5.js +10 -0
- package/dist/stage/chunk-UW7ML5ML.js +88 -0
- package/dist/stage/chunk-V3J7F6OP.js +1 -0
- package/dist/stage/chunk-VEHP5B5Q.js +5 -0
- package/dist/stage/chunk-VRXWB733.js +9 -0
- package/dist/stage/chunk-VVDHBBS5.js +5 -0
- package/dist/stage/chunk-VYFOH6FU.js +106 -0
- package/dist/stage/chunk-W3VZTLQS.js +3 -0
- package/dist/stage/chunk-W7WNRWTZ.js +8 -0
- package/dist/stage/chunk-WHUCV53C.js +1 -0
- package/dist/stage/chunk-WULMYHIF.js +1 -0
- package/dist/stage/chunk-X54EX7AW.js +9 -0
- package/dist/stage/chunk-X565ISZM.js +1 -0
- package/dist/stage/chunk-XGZMDECB.js +1 -0
- package/dist/stage/chunk-XHONC4RF.js +172 -0
- package/dist/stage/chunk-XIK4XQ6E.js +24 -0
- package/dist/stage/chunk-XJQQWFTE.js +1 -0
- package/dist/stage/chunk-XM4WOU3I.js +13 -0
- package/dist/stage/chunk-XM7Y5HP5.js +38 -0
- package/dist/stage/chunk-XNYYRGD5.js +292 -0
- package/dist/stage/chunk-XOYVR3SV.js +1 -0
- package/dist/stage/chunk-XQIW5HCE.js +1 -0
- package/dist/stage/chunk-YEWL7FUW.js +8 -0
- package/dist/stage/chunk-YI55PY3V.js +1 -0
- package/dist/stage/chunk-YM63HI6W.js +1 -0
- package/dist/stage/chunk-YNLGLU4P.js +9 -0
- package/dist/stage/chunk-YTNMNOWP.js +1 -0
- package/dist/stage/chunk-YV62XKTC.js +1 -0
- package/dist/stage/chunk-YVBA3QW6.js +1 -0
- package/dist/stage/chunk-Z2SY2HOC.js +1 -0
- package/dist/stage/chunk-ZBTCQEBK.js +10 -0
- package/dist/stage/chunk-ZCUFN74D.js +1 -0
- package/dist/stage/chunk-ZHOULXEJ.js +11 -0
- package/dist/stage/chunk-ZTRZIET2.js +1 -0
- package/dist/stage/index.html +11 -0
- package/dist/stage/stage.css +1 -0
- package/dist/stage/stage.js +1 -0
- package/dist/ui/dev/dev-page.d.ts +1 -0
- package/dist/ui/dev/dev-page.js +2248 -0
- package/dist/ui/dev/dev-theme.d.ts +6 -0
- package/dist/ui/dev/dev-theme.js +67 -0
- package/dist/ui/dev/qr-page.d.ts +8 -0
- package/dist/ui/dev/qr-page.js +61 -0
- package/dist/ui/dev/voice-gallery-page.d.ts +1 -0
- package/dist/ui/dev/voice-gallery-page.js +121 -0
- package/dist/ui/dev/voice-scenes.d.ts +21 -0
- package/dist/ui/dev/voice-scenes.js +30 -0
- package/dist/ui/dictation/en-box.d.ts +2 -0
- package/dist/ui/dictation/en-box.js +86 -0
- package/dist/ui/dictation/en-page.d.ts +1 -0
- package/dist/ui/dictation/en-page.js +484 -0
- package/dist/ui/dictation/page.d.ts +1 -0
- package/dist/ui/dictation/page.js +1084 -0
- package/dist/ui/dictation/parent-page.d.ts +1 -0
- package/dist/ui/dictation/parent-page.js +234 -0
- package/dist/ui/dictation/reel-mode.d.ts +1 -0
- package/dist/ui/dictation/reel-mode.js +87 -0
- package/dist/ui/dictation/reel-page.d.ts +1 -0
- package/dist/ui/dictation/reel-page.js +62 -0
- package/dist/ui/dictation/reel.d.ts +163 -0
- package/dist/ui/dictation/reel.js +436 -0
- package/dist/ui/dictation/ui.d.ts +44 -0
- package/dist/ui/dictation/ui.js +80 -0
- package/dist/ui/dictation/unlock.d.ts +7 -0
- package/dist/ui/dictation/unlock.js +16 -0
- package/dist/ui/kid/audio-client.d.ts +11 -0
- package/dist/ui/kid/audio-client.js +74 -0
- package/dist/ui/kid/board-mark-art.d.ts +37 -0
- package/dist/ui/kid/board-mark-art.js +5 -0
- package/dist/ui/kid/board-mark.d.ts +24 -0
- package/dist/ui/kid/board-mark.js +58 -0
- package/dist/ui/kid/kid-log.d.ts +15 -0
- package/dist/ui/kid/kid-log.js +87 -0
- package/dist/ui/kid/kid-nav.d.ts +11 -0
- package/dist/ui/kid/kid-nav.js +22 -0
- package/dist/ui/kid/kid-page.d.ts +9 -0
- package/dist/ui/kid/kid-page.js +3719 -0
- package/dist/ui/kid/letters.d.ts +26 -0
- package/dist/ui/kid/letters.js +51 -0
- package/dist/ui/kid/photo-edit.d.ts +83 -0
- package/dist/ui/kid/photo-edit.js +106 -0
- package/dist/ui/kid/photo-ui.d.ts +23 -0
- package/dist/ui/kid/photo-ui.js +60 -0
- package/dist/ui/kid/reel.d.ts +419 -0
- package/dist/ui/kid/reel.js +648 -0
- package/dist/ui/kid/tianzige.d.ts +8 -0
- package/dist/ui/kid/tianzige.js +45 -0
- package/dist/ui/kid/tutor-face.d.ts +35 -0
- package/dist/ui/kid/tutor-face.js +84 -0
- package/dist/ui/kid/voice-ui.d.ts +70 -0
- package/dist/ui/kid/voice-ui.js +316 -0
- package/dist/ui/kid/voice-view.d.ts +71 -0
- package/dist/ui/kid/voice-view.js +75 -0
- package/dist/ui/kid/word-draw.d.ts +2 -0
- package/dist/ui/kid/word-draw.js +107 -0
- package/dist/ui/kid/word-emoji.d.ts +10 -0
- package/dist/ui/kid/word-emoji.js +66 -0
- package/dist/ui/kid/word-layout.d.ts +25 -0
- package/dist/ui/kid/word-layout.js +29 -0
- package/dist/ui/parent/parent-home-page.d.ts +1 -0
- package/dist/ui/parent/parent-home-page.js +414 -0
- package/dist/ui/parent/parent-page.d.ts +2 -0
- package/dist/ui/parent/parent-page.js +507 -0
- package/dist/ui/shared/brand.d.ts +36 -0
- package/dist/ui/shared/brand.js +51 -0
- package/dist/ui/shared/favicon.d.ts +12 -0
- package/dist/ui/shared/favicon.js +96 -0
- package/dist/ui/shared/icon.d.ts +9 -0
- package/dist/ui/shared/icon.js +35 -0
- package/dist/ui/shared/inline-lib.d.ts +1 -0
- package/dist/ui/shared/inline-lib.js +28 -0
- package/dist/ui/shared/logo.d.ts +31 -0
- package/dist/ui/shared/logo.js +43 -0
- package/dist/ui/shared/page-dom.d.ts +12 -0
- package/dist/ui/shared/page-dom.js +36 -0
- package/dist/ui/shared/png.d.ts +1 -0
- package/dist/ui/shared/png.js +45 -0
- package/dist/ui/shared/qr-svg.d.ts +3 -0
- package/dist/ui/shared/qr-svg.js +32 -0
- package/dist/ui/shared/qr.d.ts +14 -0
- package/dist/ui/shared/qr.js +281 -0
- package/dist/ui/shared/reel-dock.d.ts +22 -0
- package/dist/ui/shared/reel-dock.js +365 -0
- package/dist/ui/shared/tutor-color.d.ts +15 -0
- package/dist/ui/shared/tutor-color.js +47 -0
- package/dist/ui/talk/page.d.ts +6 -0
- package/dist/ui/talk/page.js +294 -0
- package/grades/grade-2/README.md +11 -0
- package/grades/grade-2/VALIDATION.md +41 -0
- package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273.md +157 -0
- 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
- 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
- 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
- package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235.md +64 -0
- package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235./344/276/213/345/255/220.md +31 -0
- package/grades/grade-2/agents/chinese-tutor/activities//345/220/254/345/206/231.md +48 -0
- package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +79 -0
- package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/chinese-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
- package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271.md +81 -0
- package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235.md +94 -0
- 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
- package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +82 -0
- package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/chinese-tutor.md +59 -0
- package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276.md +149 -0
- 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
- package/grades/grade-2/agents/english-tutor/activities//345/220/254/345/206/231.md +47 -0
- package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +78 -0
- package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/english-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
- package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271.md +80 -0
- package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +86 -0
- package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/english-tutor.md +57 -0
- package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +78 -0
- package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202.md +56 -0
- 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
- package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271.md +80 -0
- package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +81 -0
- package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
- package/grades/grade-2/agents/math-tutor.md +51 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/index.json +44 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-1.mp3 +0 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-2.mp3 +0 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-3.mp3 +0 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-4.mp3 +0 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-5.mp3 +0 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/bake.json +1 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/manifest.json +63 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen/scene.json +247 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen.md +40 -0
- package/grades/grade-2/examples/2026-10-27-pingjunfen.ts +26 -0
- package/grades/grade-2/examples//345/271/263/345/235/207/345/210/206./344/276/213/345/255/220.md +24 -0
- package/grades/grade-2/examples//346/225/260/345/255/246/345/271/263/345/235/207/345/210/206.md +42 -0
- package/grades/grade-2/validation/2026-10-27.json +4410 -0
- package/package.json +32 -12
- package/skills/chalk-cli/SKILL.md +62 -0
- package/skills/chalk-scene/SKILL.md +91 -0
- package/skills/chalk-teaching/SKILL.md +82 -0
- 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
- package/skills/chalk-teaching/models//345/207/221/345/215/201.md +7 -0
- package/skills/chalk-teaching/models//345/221/250/346/234/237/350/247/204/345/276/213.md +6 -0
- package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/345/242/236/345/207/217.md +6 -0
- 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
- 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
- package/skills/chalk-teaching/models//345/260/217/346/243/222/350/277/233/344/275/215/345/212/240.md +7 -0
- package/skills/chalk-teaching/models//345/260/217/346/243/222/351/200/200/344/275/215/345/207/217.md +6 -0
- package/skills/chalk-teaching/models//346/216/222/351/230/237/347/202/271/351/230/265.md +7 -0
- package/skills/chalk-teaching/models//346/227/266/351/227/264/346/225/260/350/275/264.md +6 -0
- package/skills/chalk-teaching/models//346/245/274/345/261/202/351/227/264/351/232/224/345/233/276.md +7 -0
- package/skills/chalk-teaching/models//347/240/264/345/215/201.md +7 -0
- package/skills/chalk-teaching/models//347/253/226/345/274/217/351/200/200/344/275/215.md +6 -0
- package/skills/chalk-teaching/models//347/272/277/346/256/265/345/233/276.md +7 -0
- package/skills/chalk-teaching/models-index.md +24 -0
- 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
- package/skills/chalk-teaching/references//350/257/264/346/230/216/346/226/207/344/273/266.md +102 -0
- package/skills/chalk-verify/SKILL.md +57 -0
- package/skills/chalk-verify/references//350/257/204/345/210/244/346/240/207/345/207/206.md +69 -0
- package/skills/cotutor-analyze/SKILL.md +106 -0
- package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +31 -0
- package/skills/cotutor-board/SKILL.md +373 -0
- package/skills/cotutor-board/references/README.md +38 -0
- package/skills/cotutor-board/references/canvas.md +68 -0
- package/skills/cotutor-board/references/choice.md +55 -0
- package/skills/cotutor-board/references/code.md +46 -0
- package/skills/cotutor-board/references/image.md +52 -0
- package/skills/cotutor-board/references/lecture.md +69 -0
- package/skills/cotutor-board/references/paint.md +77 -0
- package/skills/cotutor-board/references/photo.md +61 -0
- package/skills/cotutor-board/references/read.md +51 -0
- package/skills/cotutor-board/references/text.md +69 -0
- package/skills/cotutor-board/references/tianzige.md +78 -0
- package/skills/cotutor-board/references/word.md +91 -0
- package/skills/cotutor-home/SKILL.md +169 -0
- package/skills/cotutor-home/references/dictation.md +97 -0
- package/skills/cotutor-home/references/tutor.md +148 -0
- package/skills/cotutor-home/references//345/221/275/344/273/244.md +21 -0
- package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +142 -0
- package/skills/cotutor-tune/SKILL.md +147 -0
- package/skills/cotutor-tune/references//345/255/227/346/256/265.md +50 -0
- package/skills/cotutor-tutor/SKILL.md +261 -0
- package/skills/cotutor-tutor/references//344/270/212/344/270/213/346/226/207/345/214/205.md +78 -0
- package/themes/default/kid.css +86 -0
- package/themes/default/theme.json +26 -0
- package/agents/chinese-teacher.md +0 -19
- package/agents/homework-aide.md +0 -17
- package/agents/math-teacher.md +0 -19
- package/agents/planner.md +0 -18
- package/agents/reading-teacher.md +0 -19
- package/dist/cli/doctor.d.ts +0 -19
- package/dist/cli/doctor.js +0 -190
- package/dist/cli/init.js +0 -114
- package/dist/cli/main.js +0 -123
- package/dist/cli/serve.d.ts +0 -19
- package/dist/cli/serve.js +0 -22
- package/dist/cli/skeleton.d.ts +0 -21
- package/dist/cli/skeleton.js +0 -82
- package/dist/cli/workspace.d.ts +0 -61
- package/dist/lib/agent-file.d.ts +0 -10
- package/dist/lib/agent-file.js +0 -16
- package/dist/lib/context-pack.js +0 -46
- package/dist/lib/conversation.d.ts +0 -28
- package/dist/lib/conversation.js +0 -44
- package/dist/lib/kid-view.d.ts +0 -26
- package/dist/lib/kid-view.js +0 -38
- package/dist/lib/ledger.d.ts +0 -21
- package/dist/lib/sections.d.ts +0 -12
- package/dist/lib/sections.js +0 -151
- package/dist/lib/transcript.d.ts +0 -36
- package/dist/lib/transcript.js +0 -95
- package/dist/server/app.d.ts +0 -13
- package/dist/server/app.js +0 -45
- /package/dist/{cli → app/cli}/main.d.ts +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# text — 一段字
|
|
2
|
+
|
|
3
|
+
## 是什么
|
|
4
|
+
|
|
5
|
+
板上的一段字:定义、结论、公式、一句要记住的话、题面。一张卡一个意思,能独立被指着讲三句。
|
|
6
|
+
|
|
7
|
+
## 什么时候用 / 别用
|
|
8
|
+
|
|
9
|
+
- 用:给一个概念下定义、放一个公式、写一句要记住的话、写题面(没有选项、不用孩子填)。
|
|
10
|
+
- 用:小节标题——只写一行 `# 标题`,板上出一行无底的字,不算卡。
|
|
11
|
+
- 别用:原文、古诗、单词表(超过两行的要念的东西)→ 用 `read`,孩子能点哪段听哪段。
|
|
12
|
+
- 别用:要孩子选、画的 → `choice` / `canvas`;`text` 卡上什么都做不了。要他说的在讲稿里问。
|
|
13
|
+
- 别用:把讲稿写进卡。「第一步:13 的平方是多少」这种是你说的话,写在围栏外面,一行一句。
|
|
14
|
+
|
|
15
|
+
## 写法
|
|
16
|
+
|
|
17
|
+
- 围栏标签只写 `text`。
|
|
18
|
+
- 正文第一行以 `# ` 开头,就是这张卡的标题,下面是正文。
|
|
19
|
+
- 只有一行 `# 标题`、没有正文,就是小节标题。
|
|
20
|
+
- 算式写 `text formula`:衬线居中,单独一行。
|
|
21
|
+
- 样子(底色、字号、并不并排)不用管,应用按卡的种类定。
|
|
22
|
+
|
|
23
|
+
## 例子
|
|
24
|
+
|
|
25
|
+
<!-- expect {"kind":"text","props":{"title":"认边","text":"两条短边叫直角边,最长的一条叫斜边"}} -->
|
|
26
|
+
```text
|
|
27
|
+
# 认边
|
|
28
|
+
两条短边叫直角边,最长的一条叫斜边
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<!-- expect {"kind":"text","props":{"style":"formula","text":"三角形面积 = 底 × 高 ÷ 2"}} -->
|
|
32
|
+
```text formula
|
|
33
|
+
三角形面积 = 底 × 高 ÷ 2
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
<!-- expect {"kind":"text","props":{"title":"两大类型","heading":true}} -->
|
|
37
|
+
```text
|
|
38
|
+
# 两大类型
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 反例
|
|
42
|
+
|
|
43
|
+
方括号是讲稿的标注语法,不写在卡里;写了会被剥掉,家长视图多一行提醒:
|
|
44
|
+
|
|
45
|
+
<!-- expect {"kind":"text","props":{"text":"两条短边叫直角边"},"warning":true} -->
|
|
46
|
+
```text
|
|
47
|
+
两条短边叫[直角边]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
要孩子填的,别写成文字卡再跟一行行「= 答案」。正文里有空(`___`、`( )`)时,`= ` 开头的行算答案,孩子看不到,家长视图多一行提醒。能选的出 `choice`;答案是一个词的,请他开口说:
|
|
51
|
+
|
|
52
|
+
<!-- expect {"kind":"text","props":{"text":"( )穷( )尽,填两个字。\n= 山\n= 水"},"warning":true} -->
|
|
53
|
+
```text
|
|
54
|
+
( )穷( )尽,填两个字。
|
|
55
|
+
= 山
|
|
56
|
+
= 水
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 孩子看到什么
|
|
60
|
+
|
|
61
|
+
一张带底色的卡:标题一行小字、正文一段;封面是深底大字;公式衬线居中。讲稿念到 `[词]` 时,词在卡上被标注(标题位画圈、正文里的词术语底、公式荧光)。点开只是看清,没有交互。
|
|
62
|
+
|
|
63
|
+
## 你会收回什么
|
|
64
|
+
|
|
65
|
+
没有——这种卡没有状态。
|
|
66
|
+
|
|
67
|
+
## 状态的形状
|
|
68
|
+
|
|
69
|
+
没有。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* 田字格(cards/tianzige/card.md):每字一个田字格,讲到时逐笔写,点了再写一遍 */
|
|
2
|
+
.c.c-tianzige { flex-direction:row; flex-wrap:wrap; gap:10px; justify-content:center; align-items:flex-start; }
|
|
3
|
+
.hz { position:relative; width:112px; height:112px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
|
|
4
|
+
.hz svg { display:block; width:100%; height:100%; }
|
|
5
|
+
.hz .grid { stroke:var(--tint-sand-line); stroke-width:6; fill:none; }
|
|
6
|
+
.hz .grid .mid { stroke-dasharray:24 18; }
|
|
7
|
+
.hz .ghost { fill:#d9d5cc; }
|
|
8
|
+
.hz .ghost.done { fill:var(--ink); }
|
|
9
|
+
.hz .ink { stroke:var(--ink); stroke-width:200; fill:none; stroke-linecap:round; stroke-linejoin:round; }
|
|
10
|
+
.hz .n { position:absolute; right:6px; bottom:2px; font-size:11px; color:#8a857c; line-height:1; }
|
|
11
|
+
/* 带拼音的:一字一列,拼音在格子上方,像课本 */
|
|
12
|
+
.hzc { display:flex; flex-direction:column; align-items:center; gap:2px; }
|
|
13
|
+
.hzc .py { font-size:20px; line-height:1.2; color:var(--ink); letter-spacing:.5px; font-family:-apple-system,"Helvetica Neue",Arial,sans-serif; }
|
|
14
|
+
#st-body .hz { width:180px; height:180px; }
|
|
15
|
+
#st-body .hzc .py { font-size:26px; }
|
|
16
|
+
#st-body .hz .n { font-size:13px; }
|
|
17
|
+
@media (max-width: 480px) { .hz { width:96px; height:96px; } .hzc .py { font-size:18px; } }
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# tianzige — 田字格
|
|
2
|
+
|
|
3
|
+
## 是什么
|
|
4
|
+
|
|
5
|
+
田字格:孩子问「这个字怎么写」时用的卡,一到四个汉字,每个字一个格,讲到这张卡时逐笔写一遍,之后孩子点哪个字,哪个字再写一遍。笔顺是现成的数据,不是你写的。
|
|
6
|
+
|
|
7
|
+
## 什么时候用 / 别用
|
|
8
|
+
|
|
9
|
+
- 用:孩子问「X 怎么写」「X 的笔顺」;讲生字、讲词语时要孩子看清怎么落笔。
|
|
10
|
+
- 用:一个词就写一张,`鼓励` 两个字放一张,孩子看得到它们是一个词。
|
|
11
|
+
- 别用:给孩子读的整句、古诗 → `read`。
|
|
12
|
+
- 别用:解释字义、讲来历 → `text`;田字格里只有字,没有别的。
|
|
13
|
+
- 别用:部首、笔画数写进卡里 → 说在讲稿里;笔画数卡上会自己显示,你不用数,也别在讲稿里数。
|
|
14
|
+
|
|
15
|
+
## 写法
|
|
16
|
+
|
|
17
|
+
- 第一行是要写的字:一到四个汉字,不要空格、标点。
|
|
18
|
+
- 第二行写拼音:一字一个音节,空格隔开,带声调(`gǔ lì` 或 `gu3 li4`)。
|
|
19
|
+
- 多音字写这句话里的读法,如「长大」写 `zhǎng dà`。
|
|
20
|
+
- 拼音和字数对不上,卡上就只有字,不显示拼音。
|
|
21
|
+
- 同音的词先给:先出这张卡,讲稿里说一句是哪个意思,如「鼓励,就是给人加油打气」。
|
|
22
|
+
- 不先问,也不在末尾问「你说的是……吧」。写错了,孩子会说。
|
|
23
|
+
|
|
24
|
+
## 例子
|
|
25
|
+
|
|
26
|
+
<!-- expect {"kind":"tianzige","props":{"chars":"鼓励","pinyin":["gǔ","lì"]}} -->
|
|
27
|
+
```tianzige
|
|
28
|
+
鼓励
|
|
29
|
+
gǔ lì
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
<!-- expect {"kind":"tianzige","props":{"chars":"长大","pinyin":["zhǎng","dà"]}} -->
|
|
33
|
+
```tianzige
|
|
34
|
+
长大
|
|
35
|
+
zhang3 da4
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
<!-- expect {"kind":"tianzige","props":{"chars":"鼓","pinyin":["gǔ"]}} -->
|
|
39
|
+
```tianzige
|
|
40
|
+
鼓
|
|
41
|
+
gǔ
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 反例
|
|
45
|
+
|
|
46
|
+
拼音和字写在同一行,或夹了标点,解析不成,会退成一段文字:
|
|
47
|
+
|
|
48
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
49
|
+
```tianzige
|
|
50
|
+
鼓励 gǔ lì
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
拼音和字数对不上,卡照常,只是不显示拼音:
|
|
54
|
+
|
|
55
|
+
<!-- expect {"kind":"tianzige","props":{"chars":"鼓励"},"warning":true} -->
|
|
56
|
+
```tianzige
|
|
57
|
+
鼓励
|
|
58
|
+
gǔlì
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
超过四个字也解析不成,拆成两张:
|
|
62
|
+
|
|
63
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
64
|
+
```tianzige
|
|
65
|
+
画蛇添足画蛇
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 孩子看到什么
|
|
69
|
+
|
|
70
|
+
白底卡,每个字一个田字格,写了拼音的标在格子上方(像课本);格里先是淡淡的字形;讲到这张卡时一笔一笔写出来,鼓写完再写励,右下角标着几画。之后孩子点哪个格,哪个字再写一遍。没有舞台、没有按钮。数据里没有的字(生僻字)只显示字形、不动。讲稿的 `[词]` 落不到这张卡上,要标注写在别的卡里。
|
|
71
|
+
|
|
72
|
+
## 你会收回什么
|
|
73
|
+
|
|
74
|
+
没有——田字格不记状态(点了几遍不告诉你)。
|
|
75
|
+
|
|
76
|
+
## 状态的形状
|
|
77
|
+
|
|
78
|
+
没有。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* 老师卡(cards/tutor/card.md):首页上一位老师一张,头像 + 名字 + 竖排的按钮 */
|
|
2
|
+
.c.c-tutor { gap:12px; padding:16px; }
|
|
3
|
+
.c-tutor .tt { display:flex; align-items:center; gap:12px; cursor:pointer; }
|
|
4
|
+
.c-tutor .tt .av { width:64px; height:64px; font-size:30px; }
|
|
5
|
+
.c-tutor .tt .nm { font-size:20px; font-weight:700; }
|
|
6
|
+
.c-tutor .bts { display:flex; flex-direction:column; gap:12px; }
|
|
7
|
+
/* 按钮(原型 B,https://claude.ai/artifact/HhpuLJXvNr94E9PqSNv6tj):大胶囊;孩子看到的字在 .btx */
|
|
8
|
+
.c-tutor .bt { display:flex; align-items:center; gap:14px; width:100%; min-height:64px; padding:10px 20px; border-radius:32px; background:#fff; border:1.5px solid var(--line); color:var(--ink); font-size:20px; font-weight:600; text-align:left; line-height:1.3; }
|
|
9
|
+
.c-tutor .bt:active { transform:scale(.98); }
|
|
10
|
+
.c-tutor .bt .bi { flex:0 0 auto; width:28px; height:28px; display:grid; place-items:center; color:var(--accent); }
|
|
11
|
+
.c-tutor .bt .bi svg { width:26px; height:26px; }
|
|
12
|
+
/* 新话题:头像下面一个学科色大气泡(--sc,页面按老师给);不带尖角 */
|
|
13
|
+
.c-tutor .bt-new { min-height:84px; padding:10px 20px 10px 22px; border:0; border-radius:24px; background:var(--sc, var(--accent)); color:#fff; }
|
|
14
|
+
.c-tutor .bt-new .lb { display:flex; flex-direction:column; gap:2px; min-width:0; }
|
|
15
|
+
.c-tutor .bt-new .btx { font-size:26px; font-weight:700; letter-spacing:1px; }
|
|
16
|
+
.c-tutor .bt-new .ln { font-size:15px; font-weight:400; opacity:.9; }
|
|
17
|
+
.c-tutor .bt-new .bi { margin-left:auto; width:40px; height:40px; color:#fff; }
|
|
18
|
+
.c-tutor .bt-new .bi svg { width:36px; height:36px; }
|
|
19
|
+
/* 新话题旁边的「一直听」:白底、学科色边和麦克风;和新话题并一行,窄了就换行 */
|
|
20
|
+
.c-tutor .nl { display:flex; flex-wrap:wrap; gap:12px; }
|
|
21
|
+
.c-tutor .nl > .bt-new { flex:1 1 260px; width:auto; }
|
|
22
|
+
/* 新话题打头的名字首字:平板横着叠时后面的牌露出来的那一格就是它;右边一道竖线隔开「新话题」 */
|
|
23
|
+
.c-tutor .bt-new .fc { flex:none; width:40px; padding-right:14px; border-right:2px solid rgba(255,255,255,.45); font-size:38px; font-weight:800; line-height:44px; text-align:center; box-sizing:content-box; }
|
|
24
|
+
.c-tutor.off { pointer-events:none; }
|
|
25
|
+
.c-tutor.off .av { filter:grayscale(1); opacity:.4; }
|
|
26
|
+
/* 休息:次数用完 / 服务不通,C 的开口朝下(低头);点一下:手指按着时 C 扭一下,松开弹回(弹的那下是 .av 环上的 transition) */
|
|
27
|
+
.c-tutor.off .av .ring circle { transform:rotate(126deg); }
|
|
28
|
+
.c-tutor:active .av .ring circle { transform:rotate(8deg); transition-duration:.08s; }
|
|
29
|
+
.c-tutor.off .nm, .c-tutor.off .bt { color:var(--dim); }
|
|
30
|
+
.c-tutor.off .bt .bi { color:var(--dim); }
|
|
31
|
+
.c-tutor.off .bt-new { background:var(--grey); }
|
|
32
|
+
/* 小课堂:带预览图的海报,图上一个播放键,下面「小课堂 · 课名 · 课长」;挨着的几张收在 .lcs 里,够宽就并排 */
|
|
33
|
+
.c-tutor .lcs { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:12px; }
|
|
34
|
+
.c-tutor .bt-lecture { flex-direction:column; align-items:stretch; gap:0; min-height:0; padding:0; border-radius:20px; overflow:hidden; }
|
|
35
|
+
.c-tutor .bt-lecture .lp { position:relative; display:block; aspect-ratio:16 / 10; background:#fff3e8; }
|
|
36
|
+
.c-tutor .bt-lecture .lp img, .c-tutor .bt-lecture .lp video { position:absolute; inset:0; width:100%; height:100%; display:block; object-fit:cover; }
|
|
37
|
+
.c-tutor .bt-lecture .lp.nopic img { display:none; }
|
|
38
|
+
.c-tutor .bt-lecture .pl { position:absolute; left:50%; top:50%; width:64px; height:64px; margin:-32px 0 0 -32px; border-radius:50%; background:rgba(255,255,255,.94); color:var(--accent); display:grid; place-items:center; box-shadow:0 4px 14px rgba(0,0,0,.22); }
|
|
39
|
+
.c-tutor .bt-lecture .pl svg { width:28px; height:28px; margin-left:3px; }
|
|
40
|
+
.c-tutor .bt-lecture .lm { display:flex; align-items:center; gap:8px; min-width:0; padding:12px 14px; }
|
|
41
|
+
.c-tutor .bt-lecture .tg { flex:none; padding:2px 8px; border-radius:8px; background:#fdeee4; color:#b8541c; font-size:13px; font-weight:700; }
|
|
42
|
+
.c-tutor .bt-lecture .btx { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:20px; font-weight:700; }
|
|
43
|
+
.c-tutor .bt-lecture .ln { flex:none; margin-left:auto; font-size:14px; font-weight:400; color:var(--dim); }
|
|
44
|
+
/* 常驻入口:听写、拍照听写、口语课,不经首页发布、一直在这位老师的卡上 */
|
|
45
|
+
.c-tutor .bt-extra { text-decoration:none; color:var(--ink); border-color:var(--tint-sand-line); }
|
|
46
|
+
.c-tutor .bt-extra .lb { display:flex; flex-direction:column; gap:1px; min-width:0; }
|
|
47
|
+
.c-tutor .bt-extra .ln { font-size:14px; font-weight:400; color:var(--dim); }
|
|
48
|
+
.c-tutor .bt-extra .bi { color:#c95a22; }
|
|
49
|
+
/* 拍照听写的图标是一小格:语文田字格「字」、英语四线格「Aa」,右下角学科色的相机 */
|
|
50
|
+
.c-tutor .bt-x-photo .pg { position:relative; flex:none; width:46px; height:46px; margin-right:4px; }
|
|
51
|
+
.c-tutor .bt-x-photo .pg i { position:absolute; inset:0; display:grid; place-items:center; font-style:normal; font-size:28px; line-height:1; color:#c9b48a; border:1.5px solid #c9a660; background:repeating-linear-gradient(to bottom,#e3cc9a 0 3px,transparent 3px 6px) center/1.5px 100% no-repeat,repeating-linear-gradient(to right,#e3cc9a 0 3px,transparent 3px 6px) center/100% 1.5px no-repeat,#fff; }
|
|
52
|
+
.c-tutor .bt-x-photo.en .pg { width:64px; height:40px; }
|
|
53
|
+
.c-tutor .bt-x-photo.en .pg i { font-size:24px; font-family:"Chalkboard SE","Comic Sans MS","Marker Felt",sans-serif; color:#8fa0b2; border-color:#c9d2de; background:linear-gradient(#cdd6e2,#cdd6e2) 0 16%/100% 1.5px no-repeat,linear-gradient(#cdd6e2,#cdd6e2) 0 40%/100% 1.5px no-repeat,linear-gradient(#e39a9a,#e39a9a) 0 66%/100% 2px no-repeat,linear-gradient(#cdd6e2,#cdd6e2) 0 90%/100% 1.5px no-repeat,#fff; }
|
|
54
|
+
/* 口语课:对话气泡「Hi」带相机角标(拍照屏同一个,src/ui/kid/photo-ui.ts 的 .pg.talk) */
|
|
55
|
+
.c-tutor .bt-x-talk .pg { position:relative; flex:none; width:56px; height:42px; margin-right:4px; }
|
|
56
|
+
.c-tutor .bt-x-talk .pg i { position:absolute; inset:0; display:grid; place-items:center; font-style:normal; font-size:22px; font-weight:700; line-height:1; font-family:"Chalkboard SE","Comic Sans MS","Marker Felt",sans-serif; color:var(--sc); border:1.5px solid color-mix(in srgb, var(--sc) 40%, #fff); border-radius:14px 14px 14px 4px; background:#fff; }
|
|
57
|
+
.c-tutor .bt-x-photo .cam, .c-tutor .bt-x-talk .cam { position:absolute; right:-9px; bottom:-8px; width:26px; height:26px; border-radius:50%; background:var(--sc); color:#fff; display:grid; place-items:center; box-shadow:0 0 0 2px #fff; }
|
|
58
|
+
.c-tutor .bt-x-photo .cam svg, .c-tutor .bt-x-talk .cam svg { width:15px; height:15px; }
|
|
59
|
+
/* 听写:一整条,上面一排空格子(几个词几格;英文是四线三格),下面「听写 · 几个词」和「去写」 */
|
|
60
|
+
.c-tutor .bt-x-dictation { flex-direction:column; align-items:stretch; gap:14px; padding:16px; border-radius:20px; background:var(--tint-sand-bg); }
|
|
61
|
+
.c-tutor .bt-x-dictation .dg { display:flex; gap:8px; }
|
|
62
|
+
.c-tutor .bt-x-dictation .dg i { flex:0 1 56px; aspect-ratio:1; border:1.5px solid #d9b97a; background:linear-gradient(var(--tint-sand-line), var(--tint-sand-line)) center / 1px 100% no-repeat, linear-gradient(var(--tint-sand-line), var(--tint-sand-line)) center / 100% 1px no-repeat, #fff; }
|
|
63
|
+
.c-tutor .bt-x-dictation.en .dg i { flex-basis:104px; aspect-ratio:2; background:linear-gradient(to bottom, #fff 32%, var(--tint-sand-line) 32% 34%, #fff 34% 65%, var(--tint-sand-line) 65% 67%, #fff 67%); }
|
|
64
|
+
.c-tutor .bt-x-dictation .dr { display:flex; align-items:center; gap:12px; }
|
|
65
|
+
.c-tutor .bt-x-dictation .btx { font-size:22px; font-weight:700; }
|
|
66
|
+
.c-tutor .bt-x-dictation .go { flex:none; margin-left:auto; height:48px; padding:0 22px; border-radius:24px; background:#c95a22; color:#fff; font-size:18px; font-weight:700; display:grid; place-items:center; }
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# tutor — 老师卡
|
|
2
|
+
|
|
3
|
+
## 是什么
|
|
4
|
+
|
|
5
|
+
老师卡:首页上一位老师一张,卡上几个按钮,孩子点哪个就带着哪个意思进这位老师——新开一个话题、接着以前的某个话题、说一句开场话让老师照家长备好的讲法讲起来,或者先看一堂做好的小课堂。只用在首页。
|
|
6
|
+
|
|
7
|
+
## 什么时候用 / 别用
|
|
8
|
+
|
|
9
|
+
- 用:排首页时,给每位要推荐下一步的老师写一张:预习下一课、接着没讲完的、再练一练。
|
|
10
|
+
- 用:同一位老师有两三件事,写在同一张卡上,一行一个按钮。
|
|
11
|
+
- 别用:在板书里写老师卡 → 板书里退成一段文字;老师之间不互相推荐。
|
|
12
|
+
- 别用:没什么要推荐的老师不必写 → 应用会补一张只有「新话题」的。
|
|
13
|
+
- 别用:同一位老师写两张 → 只认第一张,检查会让你合并。
|
|
14
|
+
|
|
15
|
+
## 写法
|
|
16
|
+
|
|
17
|
+
围栏标签 `tutor <老师的键>`(cotutor.json tutors 里的英文名,如 `chinese-tutor`)。正文一行一个按钮,孩子看到的字就是这一行,最多 16 个字,孩子的口吻;最多 4 个按钮。
|
|
18
|
+
|
|
19
|
+
- 普通的一行 = **开场按钮**:孩子点了,这行字就作为孩子的第一句发给老师,新开一个话题。
|
|
20
|
+
- `接着 <日期> <话题> <孩子看到的字>` = **接着按钮**:接着那天的那个话题(话题 = 那个话题第一条消息的 job,如 `1930-1`,`cotutor show` 与对话索引里都有)。今天的话题就是接着聊;以前的新开一个会话,老师会拿到那个话题最后一节的讲稿与卡。
|
|
21
|
+
- `小课堂 <课包或视频的 id> <孩子看到的字>` = **小课堂按钮**:孩子点了先铺满看这一课(课包 `bundles/<id>/`,或视频 `lectures/<id>/`),看完才能开口;开口那句新开一个话题,老师拿到课的每句原话与孩子看的情况。
|
|
22
|
+
- `activity <名> [孩子看到的字]` = **activity 按钮**:进这位老师的一个 activity(`agents/<老师>/activities/<名>.md`,如你说我画)。字不写就是 activity 的名字。孩子点了和开场按钮一样,新开一个话题,老师照那个 activity 文件带。
|
|
23
|
+
- 小课堂按钮下面可以挂一行 `activity: <名>`:孩子看完课开口那条起,老师照那个 activity 带(参数用缺省)。如看图说话的课,挂 `activity: 看图说话`。
|
|
24
|
+
- activity 按钮下面 `名: 值` 的行是这个 activity 的参数(家长填的),一行一个。有哪些参数、什么类型、能不能空,看那个文件的「## 家长填的」;检查会对。孩子看不到。
|
|
25
|
+
- `讲法: …` 挂在上一个按钮下面,写给老师的:从哪开始、重点是什么、讲到哪收。可以写多行。孩子看不到。
|
|
26
|
+
- `留到: <日期>` 挂在上一个按钮下面:这个按钮留到那天(含那天),过了孩子就看不到。不写就一直留着。
|
|
27
|
+
- `新话题` 不用写,应用永远放第一个。
|
|
28
|
+
|
|
29
|
+
## 例子
|
|
30
|
+
|
|
31
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"chinese-tutor","buttons":[{"kind":"start","label":"我要预习小蝌蚪找妈妈","brief":"第 22 课。先带他把 1–3 自然段读顺,重点字 塘、脑、袋"},{"kind":"continue","label":"接着写看图写话","date":"2026-09-16","thread":"1930-1","brief":"上次第二句卡住了,先把他写的两句念给他听"}]}} -->
|
|
32
|
+
```tutor chinese-tutor
|
|
33
|
+
我要预习小蝌蚪找妈妈
|
|
34
|
+
讲法: 第 22 课。先带他把 1–3 自然段读顺,重点字 塘、脑、袋
|
|
35
|
+
接着 2026-09-16 1930-1 接着写看图写话
|
|
36
|
+
讲法: 上次第二句卡住了,先把他写的两句念给他听
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
小课堂按钮(课包在 `bundles/` 里,或视频在 `lectures/` 里,检查会查):
|
|
40
|
+
|
|
41
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"math-tutor","buttons":[{"kind":"lecture","label":"13 减 8 怎么拆","bundle":"2026-09-18-po13-jian-8","brief":"他常把 13 当成 1 和 3"}]}} -->
|
|
42
|
+
```tutor math-tutor
|
|
43
|
+
小课堂 2026-09-18-po13-jian-8 13 减 8 怎么拆
|
|
44
|
+
讲法: 他常把 13 当成 1 和 3
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
小课堂看完接着照 activity 带:
|
|
48
|
+
|
|
49
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"chinese-tutor","buttons":[{"kind":"lecture","label":"看图说话怎么说","bundle":"2026-10-08-kantu","activity":"看图说话"}]}} -->
|
|
50
|
+
```tutor chinese-tutor
|
|
51
|
+
小课堂 2026-10-08-kantu 看图说话怎么说
|
|
52
|
+
activity: 看图说话
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
只今天用的开场按钮:
|
|
56
|
+
|
|
57
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"chinese-tutor","buttons":[{"kind":"start","label":"我要读课文","brief":"第 22 课,读顺 1–3 自然段","until":"2026-10-10"}]}} -->
|
|
58
|
+
```tutor chinese-tutor
|
|
59
|
+
我要读课文
|
|
60
|
+
讲法: 第 22 课,读顺 1–3 自然段
|
|
61
|
+
留到: 2026-10-10
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
activity 按钮(你说我画;填了「词」就是我来出题):
|
|
65
|
+
|
|
66
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"chinese-tutor","buttons":[{"kind":"activity","label":"你说我画","activity":"你说我画","params":{}},{"kind":"activity","label":"我来出题","activity":"你说我画","params":{"词":"播种、睡大觉、满满、羞愧"},"brief":"他上周把羞愧说成害羞,落到幅上时问一句"}]}} -->
|
|
67
|
+
```tutor chinese-tutor
|
|
68
|
+
activity 你说我画
|
|
69
|
+
activity 你说我画 我来出题
|
|
70
|
+
词: 播种、睡大觉、满满、羞愧
|
|
71
|
+
讲法: 他上周把羞愧说成害羞,落到幅上时问一句
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
只要「新话题」的老师,正文空着(也可以不写这张卡):
|
|
75
|
+
|
|
76
|
+
<!-- expect {"kind":"tutor","props":{"tutor":"english-tutor","buttons":[]}} -->
|
|
77
|
+
```tutor english-tutor
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 反例
|
|
81
|
+
|
|
82
|
+
按钮的字太长(要跟老师说的话写进了按钮)解析不成,整张卡退成一段文字,检查报「要改」:
|
|
83
|
+
|
|
84
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
85
|
+
```tutor math-tutor
|
|
86
|
+
再练两道退位减法,先让他说怎么想,跨十那一步慢一点
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`接着` 没写日期和话题:
|
|
90
|
+
|
|
91
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
92
|
+
```tutor chinese-tutor
|
|
93
|
+
接着 小蝌蚪找妈妈
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`小课堂` 后面只写了课名,没写课包 id:
|
|
97
|
+
|
|
98
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
99
|
+
```tutor math-tutor
|
|
100
|
+
小课堂 13减8怎么拆
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
课包 id 写错(或课包还没做),解析得过,首页检查报「要改」:`bundles/<id>/` 不在或读不出来。
|
|
104
|
+
|
|
105
|
+
`留到:` 后面写的不是日期:
|
|
106
|
+
|
|
107
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
108
|
+
```tutor chinese-tutor
|
|
109
|
+
我要读课文
|
|
110
|
+
留到: 明天
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`activity` 后面没写名字:
|
|
114
|
+
|
|
115
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
116
|
+
```tutor chinese-tutor
|
|
117
|
+
activity
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
`activity:` 挂在开场按钮下面(只能挂在小课堂按钮下面):
|
|
121
|
+
|
|
122
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
123
|
+
```tutor chinese-tutor
|
|
124
|
+
我要看图说话
|
|
125
|
+
activity: 看图说话
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
activity 的名字写错、参数写错或少了要填的,解析得过,首页检查报「要改」(对的是那个 activity 文件)。
|
|
129
|
+
|
|
130
|
+
`讲法:` 前面没有按钮:
|
|
131
|
+
|
|
132
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
133
|
+
```tutor chinese-tutor
|
|
134
|
+
讲法: 先读课文
|
|
135
|
+
我要预习小蝌蚪找妈妈
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 孩子看到什么
|
|
139
|
+
|
|
140
|
+
首页最上面,一位老师一张卡:头像、名字,下面一个学科色大气泡「新话题 · 想问我什么?」,然后是你写的(开场按钮与 activity 按钮是带 ▶ 的大胶囊,接着按钮带 ↻;小课堂是一张带预览图的海报,图上一个播放键,下面写课名与课长)。点开场或接着按钮,老师页打开、按钮上的字立刻发出去,老师接着就讲;点新话题是空白的老师页,等孩子开口。今天从同一个按钮聊过的,在老师页的空白板上接(新话题一个胶囊;activity、小课堂先问接着还是重新开始),不占按钮。今天的条数用完、或服务不通,整张卡变灰。讲法孩子永远看不到。
|
|
141
|
+
|
|
142
|
+
## 你会收回什么
|
|
143
|
+
|
|
144
|
+
没有卡上的状态。孩子点了哪个按钮,记在那条消息的 `via` 上(`cotutor home show` 汇总);老师那边,开场与接着按钮的那条消息的上下文包里有 `home:`(按钮的字与讲法),接着以前话题的还有 `continue:`,小课堂看完开口那条还有 `lecture:`(课的每句原话与看的情况);activity 按钮起的话题,每条都有 `activity:`(哪个 activity、家长填的参数、应用算的);那个文件「老师怎么带」一节就是这个话题的系统提示,人设、卡、记忆都是它自己的。
|
|
145
|
+
|
|
146
|
+
## 状态的形状
|
|
147
|
+
|
|
148
|
+
没有。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* 单词卡(cards/word/card.md):四线三格里一个英文词,讲到时按笔顺写;舞台里分段两色、慢写 */
|
|
2
|
+
.c.c-word { flex-direction:row; flex-wrap:wrap; align-items:center; gap:8px 14px; }
|
|
3
|
+
.c-word .we { font-size:44px; line-height:1; }
|
|
4
|
+
.c-word .wg { flex:0 1 auto; min-width:0; max-width:100%; }
|
|
5
|
+
.c-word .wg svg { display:block; max-width:100%; height:auto; overflow:visible; }
|
|
6
|
+
.c-word .wd-row { margin-left:auto; }
|
|
7
|
+
.wg .grid line { stroke:var(--tint-sand-line); stroke-width:1.2; vector-effect:non-scaling-stroke; }
|
|
8
|
+
.wg .grid .base { stroke:#b0a89a; }
|
|
9
|
+
.wg .hit { fill:transparent; }
|
|
10
|
+
.wg .gh, .wg .ink { fill:none; stroke-width:21; stroke-linecap:round; stroke-linejoin:round; }
|
|
11
|
+
.wg .gh { stroke:#d9d5cc; }
|
|
12
|
+
.wg .lt.done .gh, .wg .ink { stroke:var(--ink); }
|
|
13
|
+
.wg .ft { fill:var(--ink); font-family:"Helvetica Neue",Arial,sans-serif; }
|
|
14
|
+
#st-body .c-word { flex-direction:column; justify-content:center; gap:18px; padding:24px 16px; }
|
|
15
|
+
#st-body .c-word .we { font-size:72px; }
|
|
16
|
+
#st-body .c-word .wd-row { margin-left:0; }
|
|
17
|
+
#st-body .c-word .lt { cursor:pointer; transition:transform .45s ease; }
|
|
18
|
+
#st-body .c-word .gh { transition:stroke .45s; }
|
|
19
|
+
#st-body .c-word .wg:not(.merged) .lt.k1.done .gh, #st-body .c-word .wg:not(.merged) .lt.k1 .ink { stroke:var(--accent); }
|
|
20
|
+
@media (max-width: 480px) { .c-word .we { font-size:36px; } }
|
|
21
|
+
/* 「听」「再听一遍」钮(原来借录音卡的 .rc-pl,录音卡 10-22 删了) */
|
|
22
|
+
.wd-pl { display:inline-flex; align-items:center; gap:6px; height:36px; padding:0 14px; border-radius:18px; background:#ffffff; border:1.5px solid var(--tint-plum-line); color:var(--tint-plum-head); font-size:15px; font-weight:600; white-space:nowrap; }
|
|
23
|
+
.wd-pl svg { width:18px; height:18px; }
|
|
24
|
+
.wd-pl.on { background:var(--tint-plum-bg); border-color:var(--tint-plum-head); }
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# word — 单词卡
|
|
2
|
+
|
|
3
|
+
## 是什么
|
|
4
|
+
|
|
5
|
+
单词卡:孩子问「X 英语怎么说」、一节里教新词时用的卡。一张卡一个英文单词,写在四线三格里,讲到这张卡时一笔一笔写一遍。卡上没有中文。点开是慢速:慢念,再按自然拼读一段一段慢写。
|
|
6
|
+
|
|
7
|
+
## 什么时候用 / 别用
|
|
8
|
+
|
|
9
|
+
- 用:孩子问「X 英语怎么说」「X 怎么拼」。
|
|
10
|
+
- 用:一节里的新词,一个词一张。
|
|
11
|
+
- 用:短词组也行,如 `ice cream`、`T-shirt`。
|
|
12
|
+
- 别用:一串词一起跟读 → `read`。
|
|
13
|
+
- 别用:句子、课文 → `read`。
|
|
14
|
+
- 别用:中文意思写进卡里 → 说在讲稿里,英文在前、中文在后。
|
|
15
|
+
|
|
16
|
+
## 写法
|
|
17
|
+
|
|
18
|
+
- 第一行:emoji 和英文单词,如 `🍎 apple`。
|
|
19
|
+
- 能画出来的东西配一个 emoji。抽象的词(like、the)不用配。
|
|
20
|
+
- 第二行:自然拼读分段,用 `-` 隔开,如 `ap-ple`、`sh-ee-p`。
|
|
21
|
+
- 分段拼起来要和单词一模一样。一个字母一段也行,如 `c-a-t`。
|
|
22
|
+
- 一张卡一个词,最多三个词、16 个字母。
|
|
23
|
+
- 只写字母、空格、撇号和连字符。不写音标,不写中文谐音。
|
|
24
|
+
|
|
25
|
+
## 例子
|
|
26
|
+
|
|
27
|
+
<!-- expect {"kind":"word","props":{"word":"apple","chunks":["ap","ple"],"emoji":"🍎"}} -->
|
|
28
|
+
```word
|
|
29
|
+
🍎 apple
|
|
30
|
+
ap-ple
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
<!-- expect {"kind":"word","props":{"word":"sheep","chunks":["sh","ee","p"],"emoji":"🐑"}} -->
|
|
34
|
+
```word
|
|
35
|
+
🐑 sheep
|
|
36
|
+
sh-ee-p
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<!-- expect {"kind":"word","props":{"word":"ice cream","chunks":["ice ","cr","ea","m"],"emoji":"🍦"}} -->
|
|
40
|
+
```word
|
|
41
|
+
🍦 ice cream
|
|
42
|
+
ice cr-ea-m
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
<!-- expect {"kind":"word","props":{"word":"like"}} -->
|
|
46
|
+
```word
|
|
47
|
+
like
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 反例
|
|
51
|
+
|
|
52
|
+
写了中文意思,中文会被去掉,卡照常出:
|
|
53
|
+
|
|
54
|
+
<!-- expect {"kind":"word","props":{"word":"apple","emoji":"🍎"}} -->
|
|
55
|
+
```word
|
|
56
|
+
🍎 apple 苹果
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
分段拼不回这个词,分段不要了,卡照常出:
|
|
60
|
+
|
|
61
|
+
<!-- expect {"kind":"word","props":{"word":"apple"}} -->
|
|
62
|
+
```word
|
|
63
|
+
apple
|
|
64
|
+
a-pl
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
整句写不进一张单词卡,会退成一段文字:
|
|
68
|
+
|
|
69
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
70
|
+
```word
|
|
71
|
+
I like apples very much
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
只有中文也解析不成:
|
|
75
|
+
|
|
76
|
+
<!-- expect {"kind":"text","warning":true} -->
|
|
77
|
+
```word
|
|
78
|
+
苹果
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 孩子看到什么
|
|
82
|
+
|
|
83
|
+
卡上是 emoji 和四线三格里的单词,右边一个「听」。讲到这张卡时一笔一笔写一遍。点「听」按正常速度念这个词。点卡打开大的:一边慢念,一边按分段一段一段慢写,两段两个颜色,写完合拢成一个词、颜色退掉,再慢念一遍。孩子点哪一段,那段再慢写一遍。讲稿的 `[apple]` 落在这张卡上,讲到时这张卡亮起来,词上不画荧光。
|
|
84
|
+
|
|
85
|
+
## 你会收回什么
|
|
86
|
+
|
|
87
|
+
没有——单词卡不记状态(点了几遍不告诉你)。
|
|
88
|
+
|
|
89
|
+
## 状态的形状
|
|
90
|
+
|
|
91
|
+
没有。
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<!-- 给人看
|
|
2
|
+
谁读:有脸的老师。生成器(src/board/cards/docs.ts)把这篇和各 cards/<种类>/card.md 的「是什么 / 写法 / 例子」拼成 skills/cotutor-board/SKILL.md;
|
|
3
|
+
Qwen 运行时把它和老师正文一起放进系统提示;自定义运行时也可放进话题第一条的 <cotutor-board>
|
|
4
|
+
能改:改这篇或 card.md,再跑 pnpm run gen:skills。独占一行的注释生成时剥掉,老师看不到;{{卡的种类}} 那一行由生成器替换;
|
|
5
|
+
{{有 x y}} 到 {{/有}} 之间的行,这位老师的卡里 x、y 都有才留(cotutor.json tutors.<老师>.cards,《卡片协议.md》「谁拿到哪些卡」)
|
|
6
|
+
改了:tests/cards.test.ts、skills.test,再 cotutor replay 对照(《写提示词.md》§一)
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# 板书怎么写
|
|
10
|
+
|
|
11
|
+
回复正文就是孩子看到的板书。板书里只有两种东西:你说的话,和板上的卡。
|
|
12
|
+
|
|
13
|
+
## 普通段落 = 你说的话
|
|
14
|
+
|
|
15
|
+
- 一行一句。每句会被念出来,显示在字幕行。
|
|
16
|
+
- 所以不写标题、列表、粗体、括号注释。
|
|
17
|
+
- 想强调某个词,用方括号标出来,如「这叫[底]」。那个词要在某张卡上出现。
|
|
18
|
+
- 一句最多标两处,只标这句的重点。板上的重点只有你标的这些。
|
|
19
|
+
- 末句缺省是一句陈述,说完就停。
|
|
20
|
+
- 末句写成问句,孩子就得答你。什么时候问,见守则「答完就停」。
|
|
21
|
+
- 末句是问句,播放器就停下等孩子。
|
|
22
|
+
<!-- 为什么缺省不问:这篇在系统提示里,比守则(话题第一条)分量重;只写「问句就停下等」,老师读成每节都该问(2026-10-19 真跑)。 -->
|
|
23
|
+
- **只有末句会停。** 中间的问句念完,接着念下一句,不等孩子。
|
|
24
|
+
{{有 choice}}
|
|
25
|
+
- 末句这一问能选,就配一张 `choice` 卡。卡在前,问句在后。
|
|
26
|
+
{{/有}}
|
|
27
|
+
- 答案是一个数、一个词,不配卡:孩子开口说。
|
|
28
|
+
<!-- 为什么:孩子在 iPad 上打字难,拼音的声调打不出来。 -->
|
|
29
|
+
- 开放的问题不用配卡。应用会把末句那一问补成板上的一张提问卡,你别自己再写一张。
|
|
30
|
+
{{有 photo}}
|
|
31
|
+
- 要孩子拍照片给你看,在节尾放一张 `photo` 卡,写要拍什么。末句请他拍下来发给你。
|
|
32
|
+
{{/有}}
|
|
33
|
+
|
|
34
|
+
## 围栏 = 板上的卡
|
|
35
|
+
|
|
36
|
+
- 围栏的语言标签是卡的种类。正文按那种卡的写法写,见下面「卡的种类」。
|
|
37
|
+
- 卡写在讲它的那句话前面,卡与话交错。
|
|
38
|
+
- 卡上是**名词**:定义、公式、题、图、选项。讲稿是**动词**:你说的话。
|
|
39
|
+
- 别把一句话切成一张卡。
|
|
40
|
+
- 不认识的标签,当代码卡原样显示。
|
|
41
|
+
- 正文写得不对的卡,退成一段文字,孩子端不会报错。
|
|
42
|
+
|
|
43
|
+
## 一节多长
|
|
44
|
+
|
|
45
|
+
- 出不出卡,见守则「卡宁缺毋滥」。
|
|
46
|
+
- 出卡的一节 1–3 张卡、3–10 句话。
|
|
47
|
+
- 一张卡至少能指着讲三句;讲不到三句的,别上卡。
|
|
48
|
+
- 一次只讲一个想法,讲完就停。
|
|
49
|
+
- 什么时候问孩子,见守则「答完就停」。
|
|
50
|
+
- 随口问答就一两句话,没有卡。
|
|
51
|
+
- **板书写完就停。** 后面不补总结,不再用工具。孩子看到的是你这轮最后一段话,再补的板书会丢。
|
|
52
|
+
- 板书到第一个「## 」为止,后面的孩子看不到。
|
|
53
|
+
|
|
54
|
+
## 孩子在卡上做了什么
|
|
55
|
+
|
|
56
|
+
- 孩子在卡上做的事(选了、填了、画了),下一条消息的上下文包会在 `cards:` 段告诉你。
|
|
57
|
+
- 一张卡一行:卡的编号、种类、标题、做了什么、答案。
|
|
58
|
+
- 孩子只交答案、没说话时,消息正文是「(交了答案,没说话)」。
|
|
59
|
+
- 孩子看到的卡上没有对错,对错由你口头说。
|
|
60
|
+
- 上下文包里的 `focus.card`,是孩子发消息时正开着的那张卡。
|
|
61
|
+
- 每种卡完整的协议(何时用、别用、反例、你会收回什么)在本技能目录的 references/<种类>.md,索引在 references/README.md。
|
|
62
|
+
|
|
63
|
+
## 一节长什么样
|
|
64
|
+
|
|
65
|
+
孩子说「三角形面积我不会算」,讲的第一节。卡与话交错,卡在讲它的那句前面,最后一句请他做卡上那道题:
|
|
66
|
+
|
|
67
|
+
````
|
|
68
|
+
我们拿两个一样的三角形拼一拼。
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
# 拼
|
|
72
|
+
把两个一样的三角形倒过来拼在一起,得到一个平行四边形
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
两个一样的三角形一拼,就是一个[平行四边形],它的底和高没变。
|
|
76
|
+
|
|
77
|
+
```text formula
|
|
78
|
+
三角形面积 = 底 × 高 ÷ 2
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
所以三角形的面积就是[底]乘[高],再除以 2。
|
|
82
|
+
|
|
83
|
+
```choice
|
|
84
|
+
底 6 厘米、高 4 厘米的三角形,面积是多少?
|
|
85
|
+
- [ ] 24 平方厘米
|
|
86
|
+
- [x] 12 平方厘米
|
|
87
|
+
- [ ] 10 平方厘米
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
你来算算:底 6 厘米、高 4 厘米,面积是多少?
|
|
91
|
+
````
|
|
92
|
+
|
|
93
|
+
{{有 image}}
|
|
94
|
+
## 作业照片
|
|
95
|
+
|
|
96
|
+
上下文包里有 `photos:`,就是孩子拍了作业。
|
|
97
|
+
|
|
98
|
+
两种路径:
|
|
99
|
+
|
|
100
|
+
- `photos:` 是写在卡上的路径,相对 workspace 根。照原样抄进 `image` 或 `canvas` 卡。
|
|
101
|
+
- `photoFiles:` 是同一批照片的绝对路径,顺序一一对应。**Read 用它**,不用 find,不自己拼。
|
|
102
|
+
|
|
103
|
+
怎么看:
|
|
104
|
+
|
|
105
|
+
1. 原图 Read **一次**。认出是哪本、哪页、哪道题、卡在哪。
|
|
106
|
+
2. 照片上半透明的红线是孩子自己圈的,先讲圈住的那道。
|
|
107
|
+
3. 孩子写的字认不清,不裁图、不放大(这轮没有能裁图的工具)。讲稿里请孩子指一下、念出来,或者再拍近一点。
|
|
108
|
+
4. 别为了逐题核对答案,把整页看好几遍。一次只讲一道,其余的轮到了再看。
|
|
109
|
+
<!-- 为什么只读一次、不裁图:每读一张图都是一轮工具调用,孩子在等。
|
|
110
|
+
2026-09-18 ray 的数学作业照片那轮(math-tutor 2101-3)裁了 5 次图,用了 130 秒、3 毛钱。
|
|
111
|
+
2026-10-17 起带照片的那轮只给 Read / Grep / Glob,没有 Bash:照片里一句话就能让老师拿 Bash 读写 workspace 外的东西。 -->
|
|
112
|
+
|
|
113
|
+
怎么讲:
|
|
114
|
+
|
|
115
|
+
1. 讲稿第一句说出你认出的:哪本、哪页、哪道题。
|
|
116
|
+
2. 第一张卡放作业:`image` 卡引原图(路径照 `photos:` 原样写),或 `text` 卡抄题面。
|
|
117
|
+
3. 一页有好几道,在这张卡后面放一张 `choice`,列出题号问孩子讲哪道。一次只讲一道。
|
|
118
|
+
4. 拍糊了、拍不全、认不出,讲稿里请孩子再拍一张,或指一下。
|
|
119
|
+
{{有 canvas}}
|
|
120
|
+
|
|
121
|
+
要孩子在作业上圈、写,用 `canvas` 卡,第一行写照片路径。
|
|
122
|
+
{{/有}}
|
|
123
|
+
|
|
124
|
+
还要知道:
|
|
125
|
+
|
|
126
|
+
- 孩子发之前可以裁剪、圈画。
|
|
127
|
+
- 消息里的字,是孩子对这几张照片说的话。没说话就是「(拍了 N 张)」。
|
|
128
|
+
- 几张一起来的,多半是同一份作业的几页。
|
|
129
|
+
{{/有}}
|
|
130
|
+
|
|
131
|
+
## 孩子的画
|
|
132
|
+
|
|
133
|
+
孩子画了给你看,有两种:
|
|
134
|
+
|
|
135
|
+
- 交了画板卡:`cards:` 里那张卡的一行写着几笔、画了多久、图的路径。
|
|
136
|
+
- 从左栏的纸上交的:上下文包里有 `drawing:`,说图是 `photos:` 第几张。
|
|
137
|
+
|
|
138
|
+
怎么看:
|
|
139
|
+
|
|
140
|
+
1. 图 Read 一次,用 `photoFiles:` 或卡那行里的绝对路径。
|
|
141
|
+
2. 清空重画过的,清掉的那几版也看一眼。
|
|
142
|
+
3. 有 `live:` 的 `draw:`,是他画的时候和嘴说过的话。他说是什么,就是什么。
|
|
143
|
+
|
|
144
|
+
怎么回:
|
|
145
|
+
|
|
146
|
+
1. 讲稿第一句说你看见的:颜色、样子、画了多少、画得多用心。
|
|
147
|
+
2. 认不准画的是什么,就问他,别照题目猜。
|
|
148
|
+
3. 接着他画的时候说过的话说,别再问他答过的。
|
|
149
|
+
4. 再回到这一科:把他说的连成一句话,或者对上要学的。
|
|
150
|
+
<!-- 为什么:10-22 探针里照题目猜,把乌云说成山、大浪说成黄河;10-21 晚 Ray 画了 7 分半,最后没人看见。 -->
|
|
151
|
+
|
|
152
|
+
还要知道:
|
|
153
|
+
|
|
154
|
+
- 消息里的字,是他按住「给老师看」说的话。没说话就是「(画了一张,没说话)」。
|
|
155
|
+
- 画不评对错。
|
|
156
|
+
|
|
157
|
+
## 卡的种类
|
|
158
|
+
|
|
159
|
+
{{卡的种类}}
|