cotutor 0.3.0 → 0.4.1
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 +9 -7
- package/NOTICE +3 -3
- package/README.md +65 -18
- package/avatars/chinese.webp +0 -0
- package/avatars/english.webp +0 -0
- package/avatars/math.webp +0 -0
- package/bin/cotutor.js +13 -3
- package/cards/photo/card.css +10 -3
- package/cards/photo/card.md +2 -2
- package/cards/tutor/card.css +13 -0
- package/cards/tutor/card.md +2 -1
- package/cards//346/235/277/344/271/246/346/200/216/344/271/210/345/206/231.md +1 -1
- package/dist/app/activity-eval.js +3 -2
- package/dist/app/cli/activities.d.ts +8 -1
- package/dist/app/cli/activities.js +42 -4
- package/dist/app/cli/cert.d.ts +11 -0
- package/dist/app/cli/cert.js +36 -9
- package/dist/app/cli/chalk/browser.d.ts +2 -2
- package/dist/app/cli/chalk/browser.js +22 -7
- package/dist/app/cli/chalk/main.js +3 -2
- package/dist/app/cli/doctor.d.ts +11 -5
- package/dist/app/cli/doctor.js +156 -181
- package/dist/app/cli/firewall.d.ts +24 -0
- package/dist/app/cli/firewall.js +79 -0
- package/dist/app/cli/init.js +8 -5
- package/dist/app/cli/main.js +379 -27
- package/dist/app/cli/migrate.d.ts +2 -11
- package/dist/app/cli/migrate.js +1 -59
- package/dist/app/cli/port-holder.d.ts +16 -0
- package/dist/app/cli/port-holder.js +34 -0
- package/dist/app/cli/port.d.ts +37 -0
- package/dist/app/cli/port.js +116 -0
- package/dist/app/cli/sandbox.d.ts +25 -0
- package/dist/app/cli/sandbox.js +166 -0
- package/dist/app/cli/serve-log.d.ts +13 -0
- package/dist/app/cli/serve-log.js +90 -0
- package/dist/app/cli/serve.d.ts +18 -4
- package/dist/app/cli/serve.js +78 -8
- package/dist/app/cli/service-windows.d.ts +50 -0
- package/dist/app/cli/service-windows.js +117 -0
- package/dist/app/cli/service.d.ts +152 -0
- package/dist/app/cli/service.js +443 -0
- package/dist/app/cli/skeleton.d.ts +1 -1
- package/dist/app/cli/skeleton.js +13 -13
- package/dist/app/cli/skills.d.ts +5 -1
- package/dist/app/cli/skills.js +14 -4
- package/dist/app/cli/tray-icons.d.ts +11 -0
- package/dist/app/cli/tray-icons.js +87 -0
- package/dist/app/cli/tray-ids.d.ts +6 -0
- package/dist/app/cli/tray-ids.js +6 -0
- package/dist/app/cli/tray-mac.d.ts +8 -0
- package/dist/app/cli/tray-mac.js +140 -0
- package/dist/app/cli/tray-run.d.ts +1 -0
- package/dist/app/cli/tray-run.js +42 -0
- package/dist/app/cli/tray-windows.d.ts +5 -0
- package/dist/app/cli/tray-windows.js +166 -0
- package/dist/app/cli/tray.d.ts +236 -0
- package/dist/app/cli/tray.js +670 -0
- package/dist/app/cli/usage.d.ts +1 -1
- package/dist/app/cli/usage.js +11 -6
- package/dist/app/dictation/route.js +3 -2
- package/dist/app/http/app.d.ts +5 -10
- package/dist/app/http/app.js +47 -98
- package/dist/app/http/avatars.d.ts +17 -0
- package/dist/app/http/avatars.js +35 -0
- package/dist/app/http/dev-tutor-files.js +1 -1
- package/dist/app/http/parent-home.d.ts +14 -0
- package/dist/app/http/parent-home.js +69 -6
- package/dist/app/http/parent-look.d.ts +2 -0
- package/dist/app/http/parent-look.js +151 -0
- package/dist/app/http/raw-view.js +3 -3
- package/dist/app/http/voice-preview.d.ts +4 -0
- package/dist/app/http/voice-preview.js +34 -0
- package/dist/app/machine/bailian.d.ts +0 -2
- package/dist/app/machine/bailian.js +5 -6
- package/dist/app/machine/update.d.ts +25 -0
- package/dist/app/machine/update.js +88 -0
- package/dist/app/mock/mock-live.js +1 -1
- package/dist/app/mock/mock.d.ts +4 -2
- package/dist/app/mock/mock.js +20 -12
- package/dist/app/replay.js +4 -4
- package/dist/app/skills/home-doc.js +1 -1
- package/dist/app/workspace.d.ts +9 -4
- package/dist/app/workspace.js +33 -10
- package/dist/app/ws/route.d.ts +8 -2
- package/dist/app/ws/route.js +7 -3
- package/dist/board/parse.d.ts +0 -2
- package/dist/board/parse.js +0 -6
- package/dist/board/presentation.d.ts +9 -15
- package/dist/board/presentation.js +8 -10
- package/dist/brain/api-tools.js +2 -1
- package/dist/brain/api.d.ts +12 -17
- package/dist/brain/api.js +16 -33
- package/dist/brain/index.d.ts +23 -71
- package/dist/brain/index.js +6 -69
- package/dist/brain/log.d.ts +5 -0
- package/dist/brain/log.js +22 -0
- package/dist/brain/runtime.d.ts +30 -0
- package/dist/brain/runtime.js +23 -0
- package/dist/brain/{cli/stream-json.d.ts → stream-json.d.ts} +2 -4
- package/dist/brain/{cli/stream-json.js → stream-json.js} +0 -4
- package/dist/brain/stream.d.ts +5 -5
- package/dist/brain/stream.js +7 -7
- package/dist/brain/transcript.d.ts +3 -3
- package/dist/brain/transcript.js +6 -6
- package/dist/brain/{cli/types.d.ts → types.d.ts} +3 -48
- package/dist/brain/types.js +14 -0
- package/dist/chalk/glyphs/skeleton.d.ts +3 -3
- package/dist/chalk/glyphs/skeleton.js +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/memory/diary.js +3 -3
- package/dist/realtime/bailian.d.ts +1 -1
- package/dist/realtime/bailian.js +3 -2
- package/dist/realtime/preview.js +1 -1
- package/dist/realtime/voices.d.ts +2 -0
- package/dist/realtime/voices.js +57 -57
- package/dist/runtime/activities.d.ts +13 -1
- package/dist/runtime/activities.js +28 -2
- package/dist/runtime/activity-state.js +2 -2
- package/dist/runtime/agent-file.d.ts +3 -3
- package/dist/runtime/agent-file.js +3 -3
- package/dist/runtime/context/tutor-rules.d.ts +2 -2
- package/dist/runtime/context/tutor-rules.js +3 -3
- package/dist/runtime/home/home.d.ts +12 -1
- package/dist/runtime/home/home.js +8 -1
- package/dist/runtime/home/store.d.ts +1 -1
- package/dist/runtime/home/store.js +36 -21
- package/dist/runtime/journal/mix.d.ts +15 -6
- package/dist/runtime/journal/mix.js +60 -19
- package/dist/runtime/journal/recorder.d.ts +58 -13
- package/dist/runtime/journal/recorder.js +106 -16
- package/dist/runtime/journal/store.d.ts +4 -4
- package/dist/runtime/journal/store.js +6 -6
- package/dist/runtime/kid-input.js +2 -3
- package/dist/runtime/live/call.d.ts +12 -0
- package/dist/runtime/live/call.js +51 -18
- package/dist/runtime/live/turns.js +1 -1
- package/dist/runtime/runner.d.ts +9 -55
- package/dist/runtime/runner.js +52 -173
- package/dist/scenes/paint/painter.js +4 -3
- package/dist/schema/config.d.ts +43 -22
- package/dist/schema/config.js +45 -47
- package/dist/schema/conversation.d.ts +6 -0
- package/dist/schema/home.d.ts +11 -1
- package/dist/schema/home.js +7 -2
- package/dist/schema/workspace.d.ts +27 -0
- package/dist/schema/workspace.js +28 -0
- package/dist/shared/default-port.d.ts +2 -0
- package/dist/shared/default-port.js +2 -0
- package/dist/shared/qianwen.d.ts +14 -10
- package/dist/shared/qianwen.js +26 -22
- package/dist/shared/site-url.d.ts +2 -0
- package/dist/shared/site-url.js +5 -0
- package/dist/shared/upgrade.d.ts +9 -0
- package/dist/shared/upgrade.js +23 -0
- package/dist/ui/dev/dev-page.js +25 -252
- package/dist/ui/dev/dev-theme.d.ts +1 -1
- package/dist/ui/dev/dev-theme.js +1 -1
- package/dist/ui/dev/voice-gallery-page.js +1 -1
- package/dist/ui/kid/board-mark.d.ts +2 -2
- package/dist/ui/kid/board-mark.js +2 -2
- package/dist/ui/kid/home-tiles.d.ts +14 -0
- package/dist/ui/kid/home-tiles.js +44 -0
- package/dist/ui/kid/kid-page.js +68 -103
- package/dist/ui/kid/voice-ui.d.ts +1 -1
- package/dist/ui/kid/voice-ui.js +1 -1
- package/dist/ui/kid/word-emoji.js +5 -3
- package/dist/ui/parent/parent-home-page.js +337 -7
- package/dist/ui/parent/parent-page.js +6 -2
- package/dist/ui/parent/parent-settings-page.d.ts +1 -0
- package/dist/ui/parent/parent-settings-page.js +133 -0
- package/dist/ui/{dev → parent}/qr-page.d.ts +2 -2
- package/dist/ui/{dev → parent}/qr-page.js +19 -14
- package/dist/ui/shared/brand.d.ts +3 -1
- package/dist/ui/shared/brand.js +3 -1
- package/grades/grade-2/README.md +1 -1
- package/grades/grade-2/VALIDATION.md +1 -1
- package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +1 -1
- package/grades/grade-2/agents/chinese-tutor/activities//346/{211/271/346/224/271.md → 243/200/346/237/245/344/275/234/344/270/232.md} +4 -4
- package/grades/grade-2/agents/chinese-tutor/activities//346/{211/271/346/224/271. → 243/200/346/237/245/344/275/234/344/270/232.}/344/276/213/345/255/220.md +2 -2
- package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +1 -1
- package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +1 -1
- package/grades/grade-2/agents/english-tutor/activities//346/{211/271/346/224/271.md → 243/200/346/237/245/344/275/234/344/270/232.md} +4 -4
- package/grades/grade-2/agents/english-tutor/activities//346/{211/271/346/224/271. → 243/200/346/237/245/344/275/234/344/270/232.}/344/276/213/345/255/220.md +2 -2
- package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +1 -1
- package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +1 -1
- package/grades/grade-2/agents/math-tutor/activities//346/{211/271/346/224/271.md → 243/200/346/237/245/344/275/234/344/270/232.md} +4 -4
- package/grades/grade-2/agents/math-tutor/activities//346/{211/271/346/224/271. → 243/200/346/237/245/344/275/234/344/270/232.}/344/276/213/345/255/220.md +2 -2
- package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +1 -1
- package/package.json +6 -2
- package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +2 -2
- package/skills/cotutor-board/references/photo.md +2 -2
- package/skills/cotutor-home/SKILL.md +1 -0
- package/skills/cotutor-home/references/tutor.md +2 -1
- package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +2 -1
- package/skills/cotutor-tune/references//345/255/227/346/256/265.md +6 -3
- package/skills/cotutor-tutor/SKILL.md +5 -13
- package/dist/brain/cli/adapters.d.ts +0 -60
- package/dist/brain/cli/adapters.js +0 -91
- package/dist/brain/cli/qwen.d.ts +0 -11
- package/dist/brain/cli/qwen.js +0 -141
- package/dist/brain/cli/run-plan.d.ts +0 -59
- package/dist/brain/cli/run-plan.js +0 -71
- package/dist/brain/cli/run.d.ts +0 -35
- package/dist/brain/cli/run.js +0 -256
- package/dist/brain/cli/types.js +0 -3
- package/dist/brain/cli/warm.d.ts +0 -53
- package/dist/brain/cli/warm.js +0 -103
|
@@ -2,28 +2,43 @@
|
|
|
2
2
|
* 做课包用的浏览器(2026-10-31 替掉 drawtell 的 playwright):起本机的 Chrome(无头、自己的临时 profile,不碰平时用的那个),
|
|
3
3
|
* 走 DevTools 协议(CDP)开页面、等、取值、截图。不另装浏览器:烤画面、截图与孩子端是同一种渲染就够。
|
|
4
4
|
* 每条命令都有超时(回包不来就报错,不挂着);收尾杀进程、删临时 profile,出错也在 finally 里收(scripts/_guard.mjs 那次的教训:无头 Chrome 挂了两天)。
|
|
5
|
-
* Chrome 在哪:环境变量 CHROME > macOS 的 /Applications/Google Chrome.app >
|
|
5
|
+
* Chrome 在哪:环境变量 CHROME > macOS 的 /Applications/Google Chrome.app > Windows 的 Chrome、再 Edge(装在 Program Files 或自己的 AppData 下,不在 PATH 里)
|
|
6
|
+
* > PATH 里的 google-chrome / chromium(Windows 带 .exe)。Edge 是 Windows 10/11 自带的 Chromium,CDP 一样,烤出的画面一字不差(2026-11-02 在 Windows 上对过)。
|
|
6
7
|
*/
|
|
7
8
|
import { spawn } from 'node:child_process';
|
|
8
9
|
import { existsSync } from 'node:fs';
|
|
9
10
|
import { mkdtemp, rm } from 'node:fs/promises';
|
|
10
11
|
import { tmpdir } from 'node:os';
|
|
11
12
|
import { delimiter, join } from 'node:path';
|
|
13
|
+
import { UsageError } from "../../workspace.js";
|
|
12
14
|
const MAC_CHROME = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
|
|
13
15
|
const PATH_NAMES = ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'];
|
|
16
|
+
/** Windows:先 Chrome 后 Edge,每样依次看全机装的、32 位的、只给自己装的 */
|
|
17
|
+
const WIN_BROWSERS = [['Google', 'Chrome', 'Application', 'chrome.exe'], ['Microsoft', 'Edge', 'Application', 'msedge.exe']];
|
|
18
|
+
const WIN_ROOTS = ['ProgramFiles', 'ProgramFiles(x86)', 'LOCALAPPDATA'];
|
|
14
19
|
/** 一条 CDP 命令最多等多久 */
|
|
15
20
|
const SEND_MS = 60_000;
|
|
16
|
-
/** 本机 Chrome 的可执行文件;找不到 null */
|
|
17
|
-
export function chromePath(env = process.env) {
|
|
21
|
+
/** 本机 Chrome(Windows 上没有 Chrome 就是 Edge)的可执行文件;找不到 null */
|
|
22
|
+
export function chromePath(env = process.env, platform = process.platform) {
|
|
18
23
|
const set = env.CHROME?.trim();
|
|
19
24
|
if (set)
|
|
20
25
|
return existsSync(set) ? set : null;
|
|
21
|
-
if (
|
|
26
|
+
if (platform === 'darwin' && existsSync(MAC_CHROME))
|
|
22
27
|
return MAC_CHROME;
|
|
28
|
+
if (platform === 'win32') {
|
|
29
|
+
for (const parts of WIN_BROWSERS) {
|
|
30
|
+
for (const root of WIN_ROOTS) {
|
|
31
|
+
const dir = env[root];
|
|
32
|
+
if (dir && existsSync(join(dir, ...parts)))
|
|
33
|
+
return join(dir, ...parts);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const exe = platform === 'win32' ? '.exe' : '';
|
|
23
38
|
for (const dir of (env.PATH ?? '').split(delimiter)) {
|
|
24
39
|
for (const name of PATH_NAMES)
|
|
25
|
-
if (dir && existsSync(join(dir, name)))
|
|
26
|
-
return join(dir, name);
|
|
40
|
+
if (dir && existsSync(join(dir, name + exe)))
|
|
41
|
+
return join(dir, name + exe);
|
|
27
42
|
}
|
|
28
43
|
return null;
|
|
29
44
|
}
|
|
@@ -86,7 +101,7 @@ async function connect(url) {
|
|
|
86
101
|
export async function withBrowser(fn, opts = {}) {
|
|
87
102
|
const bin = chromePath(opts.env);
|
|
88
103
|
if (!bin)
|
|
89
|
-
throw new
|
|
104
|
+
throw new UsageError('找不到 Chrome:装 Google Chrome,或环境变量 CHROME 指到 Chrome / Chromium / Edge 的可执行文件');
|
|
90
105
|
const width = opts.width ?? 1280;
|
|
91
106
|
const height = opts.height ?? 960;
|
|
92
107
|
const profile = await mkdtemp(join(tmpdir(), 'cotutor-chalk-'));
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { dirname, join, resolve } from 'node:path';
|
|
11
11
|
import { checkScene } from "../../../chalk/check.js";
|
|
12
|
+
import { cardVoice } from "../../../schema/index.js";
|
|
12
13
|
import { UsageError, loadWorkspace, redactDeep, redactHome } from "../../workspace.js";
|
|
13
14
|
import { buildBundle, readBundle } from "./build.js";
|
|
14
15
|
import { LoadError, NotFoundError, loadScene, loadSceneFiles, resolveSceneInput } from "./load-scene.js";
|
|
@@ -153,9 +154,9 @@ export async function chalkCommand(args, flags, opts) {
|
|
|
153
154
|
const ws = loadWorkspace(opts.workspace);
|
|
154
155
|
const bundlesDir = str(flags.bundles) ? resolve(str(flags.bundles)) : ws.dirs.bundles;
|
|
155
156
|
const tutor = str(flags.tutor) ?? 'math-tutor';
|
|
156
|
-
const voice = str(flags.voice) ?? ws.config.tutors
|
|
157
|
+
const voice = str(flags.voice) ?? cardVoice(ws.config.tutors, tutor);
|
|
157
158
|
if (!voice)
|
|
158
|
-
throw new UsageError(`没有音色:--voice <音色>,或 --tutor <老师>(缺省 math-tutor)在 cotutor.json 里配了卡的音色(
|
|
159
|
+
throw new UsageError(`没有音色:--voice <音色>,或 --tutor <老师>(缺省 math-tutor)在 cotutor.json 里配了卡的音色(家长端首页「样子与声音」挑)`);
|
|
159
160
|
const s = await sceneOrBundle('dub', file, bundlesDir, json);
|
|
160
161
|
if (!s)
|
|
161
162
|
return;
|
package/dist/app/cli/doctor.d.ts
CHANGED
|
@@ -4,7 +4,12 @@ export interface DoctorCheck {
|
|
|
4
4
|
ok: boolean;
|
|
5
5
|
required: boolean;
|
|
6
6
|
detail: string;
|
|
7
|
+
/** 给人看的修法 */
|
|
7
8
|
fix?: string;
|
|
9
|
+
/** 不过时能直接跑的修复命令:幂等、不碰孩子的数据、不用人输东西(INSTALL.md 让 agent 照跑) */
|
|
10
|
+
cmd?: string;
|
|
11
|
+
/** 不过、又没有 cmd:要人来(填 key、输开机密码、点弹窗、写孩子的情况),agent 别动手。finish 统一补 */
|
|
12
|
+
human?: true;
|
|
8
13
|
}
|
|
9
14
|
export interface DoctorReport {
|
|
10
15
|
ok: boolean;
|
|
@@ -12,12 +17,13 @@ export interface DoctorReport {
|
|
|
12
17
|
source: RootSource | null;
|
|
13
18
|
checks: DoctorCheck[];
|
|
14
19
|
}
|
|
15
|
-
/** 运行时的 CLI 名(run[0] 的 basename) */
|
|
16
|
-
export declare function runtimeCli(run: readonly string[]): string;
|
|
17
|
-
/** 已知的环境坑,从 CLI 的输出里认出来给修复命令(错误信息即修复指南) */
|
|
18
|
-
export declare function explainLlmFailure(text: string, runtime: readonly string[]): string;
|
|
19
20
|
export declare function doctorWorkspace(override?: string, opts?: ResolveOptions & {
|
|
20
21
|
probeEnv?: boolean;
|
|
21
|
-
live?: boolean;
|
|
22
|
+
live?: boolean;
|
|
23
|
+
/** 测试钉时间用:首页「几天前发布的」按它算 */
|
|
22
24
|
now?: Date;
|
|
25
|
+
/** Windows 上查防火墙放没放行(起一次 PowerShell,一秒多):缺省跟 probeEnv;serve 起来时要查 */
|
|
26
|
+
firewall?: boolean;
|
|
27
|
+
/** 防火墙按哪个端口查:缺省 cotutor.json 的 server.port,serve --port 换了就传进来 */
|
|
28
|
+
port?: number;
|
|
23
29
|
}): Promise<DoctorReport>;
|