Files
classhelper-island-refactor…/scripts/guide.mjs
T
ClassIsland Prompt Kit 22c1784bab feat: ClassIsland / ClassHelper 灵动岛提示词套件
- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构)
- ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本)
- 投喂指南、分卷、逐节文件
- 调研记录、一致性基线、生成与质检脚本
2026-11-12 21:59:58 +08:00

118 lines
7.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
const partsDir = join(root, 'parts');
const files = readdirSync(partsDir).filter((f) => /^\d{2}-.+\.md$/.test(f)).sort();
const titles = {
'00': '使用说明 + 任务声明(总入口)',
'01': '项目总纲(定位 / 体验原则 / 架构 / 功能全景)',
'02': '技术栈与工程结构(pnpm/Electron/Vue/Vite、进程模型、构建)',
'03': '设计系统 Token(颜色/字体/圆角/间距/阴影/层级/DPI)',
'04': '主界面(岛)像素级规格(窗口/行/背景/进度/遮罩/编辑/隐藏)',
'05': '组件系统(11 个内置组件逐个规格)',
'06': '课程表/时间表/档案/科目/周次/调课/导入导出',
'07': '提醒系统(队列/提供者/气泡/强提醒/音效/TTS/天气服务)',
'08': '自动化(触发器/行动/规则集)',
'09': '主题系统(Fluent/Classic、主题包、壁纸取色 P2)',
'10': '设置中心(19 个设置页逐项)',
'11': '其它窗口与向导(OOBE/闪屏/崩溃/恢复/更新/换课/Excel/教程…)',
'12': '插件系统、IPC、单实例与自动更新',
'13': '数据模型、存储、备份与迁移(JSON schema)',
'14': '动画与动效总表(99 条)',
'15': '资源清单(图标/字体/音效/天气图标/教程/本地化)',
'16': '质量门禁与验收清单',
'17': '开发里程碑(M0–M8)',
'18': '禁止事项与实现边界(红线)',
'19': '结语',
};
const rows = [];
for (const f of files) {
const t = readFileSync(join(partsDir, f), 'utf8');
const chars = [...t.replace(/\s/g, '')].length;
const cjk = (t.match(/[\u4e00-\u9fff]/g) || []).length;
const tokens = Math.round(cjk * 0.9 + (chars - cjk) * 0.3);
const num = f.slice(0, 2);
rows.push({ num, file: f, title: titles[num] || '', chars, cjk, tokens });
}
const table = rows
.map((r) => `| ${r.num} | ${r.title} | \`${r.file}\` | ${r.chars} | ${r.tokens} |`)
.join('\n');
const totalChars = rows.reduce((a, r) => a + r.chars, 0);
const totalTokens = rows.reduce((a, r) => a + r.tokens, 0);
const md = `# 投喂指南:把这份 ClassIsland 提示词交给 ChatGPT
> 本目录是最终交付物。主提示词共 20 个 part(00–19),合计约 **${totalChars}** 字符(去空白)、**约 ${totalTokens} tokens**。请不要一次性把全部内容塞进小上下文模型;按下面三套方案挑一套。
## 一、交付物
| 文件 | 内容 | 用途 |
|---|---|---|
| \`../ClassIsland-给ChatGPT的完整提示词.md\` | 全量主提示词(20 个 part,含目录) | 唯一权威版本;模型上下文足够时一次投喂 |
| \`vol1-总纲与技术栈(00-02).md\` ~ \`vol5-动画资源验收与结语(14-19).md\` | 5 个分卷 | 适合 128k 上下文模型分批投喂 |
| \`sections/\` | 20 个独立 part 文件 | 适合 32k–64k 上下文模型逐章投喂;也方便只补某一章 |
| \`../analysis/\`、\`../parts/\` | 调研记录与原始 part 源文件 | 供人工核对证据(不投喂给模型) |
## 二、各 part 体量与 token 估算
| # | 内容 | 文件 | 字符(去空白) | 估算 tokens |
|---|---|---|---|---|
${table}
> token 估算按「汉字 0.9、其他字符 0.3」粗算,仅用于选择投喂方式;实际以所用模型 tokenizer 为准。
## 三、三套投喂方案
### 方案 A:一次性投喂(上下文 ≥ 200k tokens)
- 适用:GPT-5 级别 / Claude 长上下文 / Gemini 2.5 Pro 等。
- 做法:粘贴 \`ClassIsland-给ChatGPT的完整提示词.md\` 全文,末尾追加:
> 请严格按此提示词实现「classisland-ts」。先通读全文,输出:①实施计划与完整文件树;②你识别出的歧义点(一次性列出,等我确认);③M0 的验收脚本设计。确认后再开始写代码。
- 注意:长上下文也会「中间遗忘」,务必要求模型在每个里程碑复述本阶段关键数值。
### 方案 B:五卷投喂(上下文 ≥ 128k tokens)
1. 第 1 批:\`vol1\` + 追加话术:「这是项目的总纲、技术栈与工程结构;先只确认理解,不要写代码。请复述 10 条体验原则、技术栈版本、进程模型。」
2. 第 2 批:\`vol2\` +「这是设计 tokens、主界面与组件规格;请输出你将创建的 Vue 组件树与 CSS token 文件草案。」
3. 第 3 批:\`vol3\` +「这是课表、提醒、自动化;请输出数据流与状态机设计。」
4. 第 4 批:\`vol4\` +「这是主题、设置、窗口、插件、数据;请输出 IPC 通道表与数据 schema 清单。」
5. 第 5 批:\`vol5\` +「这是动画、资源、验收、里程碑、红线;请输出最终实施顺序与验收计划,然后从 M0 开始实现。」
- 每批结束时要求模型把「已确认的关键参数」写进一份 \`SPEC-LOCK.md\`,下一批先复述再继续。
### 方案 C:逐章投喂(上下文 32k–64k)
- 适用:GPT-4o 等 32k/128k 模型或需要精细控制时。
- 做法:按 00 → 19 顺序,每次投喂 \`sections/\` 下 1–3 个 part(建议:00+01+02;03+04;05;06;07;08;09+10;11;12+13;14+15;16+17+18+19)。
- 每次投喂加一句:「只实现/修改与本章相关的文件;先复述本章关键数值与验收点,再动手;不要重写其他模块。」
## 四、建议的追问与验收话术
- 开工前:「请先输出 20 个你认为最可能歧义的地方,并给出你的默认决策。」
- 架构评审:「请给出 packages/desktop-client/src 的完整文件树,每个文件一句话职责;标注哪些文件对应提示词的哪个章节。」
- 像素校验:「请给出岛在 1920×1080、缩放 100%、深色 Fluent 主题下的基准截图校验清单(元素/坐标/颜色/字号)。」
- 动画校验:「请列出第 14 部分要求的 99 条动画中,你已实现/未实现的清单,并给出每条的验证方法。」
- 无头验证:「所有自动验证必须无头运行,不得显示可见窗口或播放声音;请提供 headless 测试命令与输出。」
- 数据安全:「请演示一次配置迁移:备份 → 迁移 → 校验 → 失败回滚。」
- 完成前:「请对照第 16 部分逐条勾选,并列出未通过项与原因;对照第 18 部分确认红线。」
## 五、必须向模型强调的三件事
1. **证据路径不是依赖**:文中 \`repos/ClassIsland/...\`、\`repos/ClassHelper-master/...\` 是规格来源,实现时应转写为 TypeScript/CSS,不得在产物中引用这两个仓库。
2. **技术栈不可替换**:pnpm 11 + Electron 44 + Vue 3.5 + Element Plus 2.14 + Pinia 4 + Vite 8 + TS 5.9;更新器自研(禁 electron-updater);岛不得引入 Element Plus 全局样式。
3. **不打扰纪律**:任何自动验证必须无头/离屏,不得弹窗、发声、占用真实桌面(第 18 部分)。
## 六、已知的「与 ClassIsland 原版差异」(模型需在交付说明中列出)
- Avalonia 窗口 → Electron 透明 BrowserWindow(固定包围盒 + 窗内形变,见 04 §4.3)。
- XAML 资源字典/主题 → CSS 变量 + 受控主题包(09)。
- 插件 DLL/.cipx → npm 包 + utilityProcess 宿主(12)。
- 命名管道 IPC → Electron IPC + 可选本地只读 HTTP(12)。
- Excel 导入导出:原版 2.1 已停用,本实现用 xlsx 重建为 P1(06/11)。
- 壁纸取色:原版 2.1 已停用,本实现仅 P2 实验性、默认关闭(09)。
- 置顶轮询:原版 1ms 轮询 → 事件驱动 + ≥1000ms 兜底(04/18)。
`;
writeFileSync(join(root, 'out', '投喂指南.md'), md, 'utf8');
console.log('written out/投喂指南.md');
console.log(md.split('\n').slice(0, 5).join('\n'));