- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构) - ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本) - 投喂指南、分卷、逐节文件 - 调研记录、一致性基线、生成与质检脚本
6.9 KiB
ClassIsland 复刻工程:给 ChatGPT 的完整实现提示词(ClassHelper 技术栈版)
文档性质:这是一份「提示词」而非分析报告。请把本文件(或按章节分卷)直接投喂给 ChatGPT,要求它按第 17 部分的里程碑从零实现一个 ClassIsland 等价应用;实现技术栈采用 ClassHelper 桌面端(Electron 44 + Vue 3.5 + Element Plus + Pinia + Vite 8 + TypeScript 5.9 + pnpm monorepo),以等价替换 ClassIsland 原项目的 C# / .NET 8 / Avalonia / FluentAvalonia / XAML。
信息来源:ClassIsland v2.1 源码(
repos/ClassIsland,C#/Avalonia)与 ClassHelper 源码(repos/ClassHelper-master,TypeScript/Electron)。文中所有确切数值、资源名、行为均尽量标注文件:行号证据;无源码依据处标注【推断】。ClassIsland 的截图与文档仅用于校对视觉语义,不复制其代码。重要说明:本提示词要求实现者的一切自动验证(构建、冒烟、截图、动画检查)必须无头/离屏运行,禁止弹出可见窗口、禁止播放声音、禁止干扰用户桌面。这是本项目的强制纪律,也是验收的一部分(见第 18 部分)。
使用说明(给人类读者,不投喂给模型)
- 整体投喂:全文约 200k tokens,需使用上下文 ≥ 200k 的模型(如 GPT-5 级长上下文 / Gemini 2.5 Pro)才能一次粘贴;将本文件从「## 0.」到结尾整体粘贴,尾附一句:「请严格按此提示词实现,先给出实施计划与文件树,再按里程碑推进。」
- 分卷投喂:按
## 0+## 1+## 2(基础)→## 3## 5(视觉与组件)→## 6## 8(业务)→## 9## 13(系统与数据)→## 14## 19(动画、资源、验收)的顺序分批发送;每批发完后要求模型复述关键参数,避免长上下文丢失。 - 推荐追问:「请先输出 20 个你认为最可能歧义的点」「请给出 packages/desktop-client 的完整文件树与每个文件的职责」「请先实现 M0/M1 并给出无头验证脚本」。
- 证据约定:文中
repos/ClassIsland/...与repos/ClassHelper-master/...是规格来源路径,不是让你照抄的运行时依赖;实现时应把这些规格转写为 TypeScript/CSS。
0. 给 ChatGPT 的任务声明(从本节开始执行)
0.1 你的任务
从零实现一个名为 ClassIsland(实现代号 classisland-ts)的跨平台桌面应用:它常驻班级多媒体屏幕,以悬浮「岛」显示当天课表、当前课程、倒计时、日期时间、天气等信息;在上下课等重要时间点发出包含音效、语音与全屏特效的提醒;并提供课表编辑、档案管理、组件系统、主题、自动化、插件、自动更新等完整能力。灵感来源是 iOS 灵动岛(Dynamic Island),但它是为教室大屏与「不打扰授课」场景重新设计的桌面工具。
你必须交付可安装、可离线运行、可长时间无人值守运行的 Electron 应用,而不是网页 Demo 或原型。视觉与交互规格必须严格按本提示词执行,尤其是第 3(设计 tokens)、4(主界面)、5(组件)、14(动画)部分中的数值。
0.2 不可协商的技术栈
- pnpm@11.8.0 monorepo;Node.js >= 20.19;TypeScript ~5.9.3(strict)。
- Electron ^44.3.0 + electron-builder ^26.15.3;主进程/preload 用 esbuild 打包,渲染层用 Vite ^8.3.0 多入口(
index.html应用窗口、island.html岛)。 - Vue ^3.5.42 + Vue Router ^5.3.1 + Pinia ^4.0.3;Element Plus ^2.14.5 仅用于设置/管理类界面,不得进入岛的渲染进程。
- 三个进程角色:主进程(窗口/调度/配置/更新/IPC)、岛渲染进程(常驻、透明、逐像素自绘)、应用窗口渲染进程(按需创建)。
- 复用 ClassHelper 已验证的实现模式:独立
island.html+ 独立透明 BrowserWindow、连续圆角squircle.ts、弹簧动画spring.ts、config.json原子读写、contextBridge 白名单、tokens.css设计变量、自研auto-update.ts(禁止 electron-updater)、崩溃守卫crash-guard.ts。 - 不引入服务端依赖;所有业务数据本地存储;可选管理端联动只能作为 P2 可裁剪子包。
0.3 硬性纪律(违反即不合格)
- 所有自动验证必须无头/离屏执行;不得显示可见窗口、托盘气泡、系统通知或声音;需要人工观察的验证用显式
--visual参数开启且不得作为默认。 - 渲染层零 Node 权限:preload 只暴露 contextBridge 白名单,不暴露
ipcRenderer;nodeIntegration=false、contextIsolation=true、sandbox=true。 - 主窗口(岛)不得抢焦点、默认不进入任务栏;不得使用
setBackgroundMaterial()等破坏逐像素透明的 API。 - 动画必须 60fps:优先 transform/opacity,禁止
setInterval逐帧驱动、禁止逐帧改布局属性。 - 核心功能离线可用;数据写入原子化并自动备份;迁移前先备份。
- 不得伪造验收结果;未验证项必须显式标注。
0.4 交付物
- 完整源码 +
pnpm-lock.yaml+ 构建/打包脚本;README.md含运行、构建、打包、数据目录说明。 docs/architecture.md、docs/data-schema.md、docs/plugin-api.md、docs/theme-api.md。- 至少 1 个示例课表档案、1 个示例主题、1 个示例插件(P1)。
- 无头测试(单元 + 组件 + 端到端)与第 16 部分的验收报告。
0.5 工作方式
- 通读本提示词后,先输出:实施计划、完整文件树、你识别出的歧义点(一次性提问)。
- 按第 17 部分的 M0→M8 顺序实现;每个里程碑结束都交付「可无头启动 + 通过该阶段验收」的状态。
- 每完成一个模块,写清楚:实现了什么、证据(文件与行号)、未实现/推断项、如何验证。
- 遇到本提示词未覆盖的细节:按第 18.5 节的优先级裁决,并在代码注释标注「推断」。
- 不得把不同模块混在一起「顺手重构」;保持提交/变更范围单一、可回滚。
0.6 术语与阅读顺序
- 岛(Island / MainWindow):常驻悬浮主界面;由一行或多行「行(Line)」组成。
- 行(MainWindowLine):承载组件的横向容器,拥有自己的背景、进度条、遮罩与提醒气泡。
- 组件(Component):最小显示单元(日期、时钟、倒计时、课程表、天气等),可嵌套。
- 档案(Profile):一套课表/时间表/科目的配置集合,对应一个 JSON 文件。
- 课表(ClassPlan) 与 时间表(TimeLayout):见第 6 部分。
- 提醒(Notification)、自动化(Automation)、规则集(Ruleset)、主题(XamlTheme→CSS 主题包)、插件(Plugin):见对应章节。
- 阅读顺序:0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13 → 14 → 15 → 16 → 17 → 18 → 19。