feat(learning): replace courses with project catalog

This commit is contained in:
2026-08-20 00:08:04 +08:00
parent 2cb8a7aef4
commit 38db1589e2
56 changed files with 1741 additions and 8725 deletions

View File

@@ -7,7 +7,7 @@ Makelore 是一个面向软件、视觉创作、互动学习与智能机器人
- `Makelore CodeAI 编程`:管理本地项目、项目 Agent、会话、文件上下文、代码变更和运行时。
- `Makelore CanvasAI 绘画`以设计项目Workspace组织 Agent 对话、方向确认、文生图、单参考图生图、视频生成任务和私有结果参考图可从当前项目作品选择或从本地上传。Canvas 侧栏在“新建设计项目”上方提供“获取灵感”,进入服务端驱动的提示词博物馆。
- `Makelore RobotAI 机器`:管理机器人智能体、设备激活绑定、智能体配置与设备分配;机器人工作台的智能体位于 Robot 全局侧栏,选中后在内容区先查看绑定设备、再查看基础设置,当前智能体通过 URL 参数保持可分享选择;绑定设备时默认先选择“引导配网”或“已有激活码”。在 Windows 与 macOS 的引导路径中Makelore 可在弹窗内扫描并连接附近开放的 `Xiaozhi-*` 配网热点,失败时仍可通过系统 Wi-Fi 手动连接;后续继续复用机器人现有热点配网页面,不修改固件,也不由 Makelore 接收 Wi-Fi 密码。
- `Makelore LearningAI 学习`:浏览和下载 Works 课程,也可以从需求、材料与多媒体选项发起后台单课生成;下载后的 frozen 课程包由内置 OpenMAIC production Stage 播放
- `Makelore LearningAI 学习`:浏览运营精选的学习项目,阅读项目 README并把经过完整性校验的 ZIP 源码包保存到电脑继续实践
应用启动默认进入 AI 模块入口选择页。入口页可在未登录状态浏览;未登录用户点击已开通模块时进入客户端原生登录页,可使用账号密码或手机号短信验证码登录。登录请求由 Renderer 经 Host API 交给 Electron Main再由 Main 调用 Works Square成功后回到入口选择页。已登录时Electron Main 会从 Works Square `/api/auth/me` 读取当前账号的四模块开关并只向 Renderer 投影布尔策略;被管理员关闭的模块会在入口页置灰且无法点击,直接访问其工作区路径也会返回入口页。旧服务端未返回策略或缺少单项字段时默认开放;这个客户端门禁不替代服务端 API 授权。
@@ -27,7 +27,7 @@ Makelore 是一个面向软件、视觉创作、互动学习与智能机器人
- AI 绘画:每个设计项目固定一个设计 Agent并可包含多条互相独立的设计会话。消息、Brief、Quote 和 `turnRevision` 属于 Conversation图片/视频生成任务与资产属于 Workspace切换或新建会话不会创建新项目也不会隐藏项目任务。图片创作既支持文生图也支持从当前项目已完成作品或本地上传中选择一张参考图继续生成输入框支持直接上传参考图上传后可在候选区点击或输入 `@` 选择,并将所选资产随消息提交;视频沿用同一单图选择器绑定首帧。每条 Conversation 复用服务端持久 Agent Gateway Session已连接时 Agent 命令、流式回复和任务进度共用 WebSocket断流时使用幂等 REST 提交与低频同步。确认栏展示并允许编辑服务端最终提示词和 generation options分别展示清晰度、画幅和视频时长每次修改都会按当前 Quote 重新报价、刷新设计点,报价完成前不能确认,确认时将最新提示词与参数原值提交给后端。客户端不计算百炼尺寸、供应商价格或积分价格,服务端 Quote 是唯一计费准则。确认结果会按 Quote 对账,即使 Run 在任务落库后异常结束Workspace 任务仍会恢复到统一列表。生产环境使用 Works Square 云端 Workspace 契约,上游不可用时明确报错。
- AI 绘画项目栏会在当前项目下保留会话历史,默认显示最近五条消息摘要和更新时间,更多会话可展开;新建或点击历史条目都在同一项目中切换并恢复完整对话。
- AI 绘画项目支持从侧栏删除。确认删除时必须完整输入项目名称;删除后项目及其会话、任务、参考图和生成作品会从账户中隐藏且无法访问,不影响用户已另存到磁盘的副本。服务端采用软删除,数据库记录和对象存储暂不物理清理。未提交的任务会被取消并释放预留积分,已提交或运行中的任务继续后台结算但对用户隐藏;删除当前项目后自动打开最近更新的剩余项目,删除最后一个项目后进入空状态。
- AI 学习:默认主区直接展示课程广场,生成课程从全局左栏打开宽工作台;无材料请求使用 JSON有材料请求使用严格有界 multipart最多 5 个、单个 50 MiB、总计 150 MiB,需求最多 4,000 字)。大课在课程广场保持一张课程卡,进入后按有序模块切换同一 production Stage。课程包最大 512 MiB先校验大小与 SHA-256 再原子安装;课程媒体只允许与 MIME 匹配的被动图片、音频、视频和字体类型,同源 HTML/SVG/XML/脚本/PDF 等在安装与服务阶段都被拒绝。本地课程按 Main 确认的账号隔离Agent、ASR、PBL 与主观题评分通过 Main 白名单桥接并在离线或无权益时明确提示
- AI 学习:主区展示服务端分页项目卡片,详情页用安全 Markdown 渲染 README原始远程图片由 Works Square 在发布时校验、镜像并改写为固定媒体路径,再由 Main 进行 Bearer 代理、可信 raster MIME 与 10 MiB 上限校验。下载按钮打开系统保存对话框Main 流式校验声明大小、SHA-256 与 ZIP 签名后原子保存,单包最大 512 MiB。客户端不提供课程生成、课程播放器、本地课程库、Agent、ASR 或课堂 runtime。运营管理与接口字段见 [`docs/learning-project-catalog-server-contract.md`](docs/learning-project-catalog-server-contract.md)
- 提示词博物馆只陈列经过审核的作品预览、Prompt、分类以及作者/来源/许可证信息,支持搜索、使用场景/风格/主体筛选和详情抽屉;“使用此 Prompt”只把原文带回当前 Canvas 会话输入框,不自动发送、不构成社区。列表和详情数据由服务端提供,客户端不打包数据集;服务端字段契约见 [`docs/prompt-museum-server-contract.md`](docs/prompt-museum-server-contract.md)。
- 视觉系统:单一浅色主题,品牌蓝 `#3A5578`、星火橙 `#F26A3D`、白色画布与低饱和蓝灰层级。
- 字体系统Renderer UI 内嵌 Inter Variable 与经过字符子集化的 Source Han Sans SC WOFF2按字符范围统一中英文并保留系统中文字体 fallback代码、路径和日志使用独立等宽字体。
@@ -75,7 +75,7 @@ pnpm run package:win
pnpm run package:linux
```
Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode 运行时资源,产物写入忽略的 `release/` 目录。正式发布还必须通过 `MAKELORE_LEARNING_PLAYER_ARTIFACT` 提供已解压且通过清单校验的 OpenMAIC 播放器产物CI 先按固定 URL 与 SHA-256 下载,未提供或校验失败会立即停止,安装包不依赖相邻源码仓库或被忽略的本机构建目录。Windows 正式包中的 OpenCode、Playwright MCP、Python 和 uv 均从安装目录解析;缺少本地资源时启动或产物验证会直接失败,不会回退到系统 Python、npm 或 npx 下载。Git、项目编译器和用户选择的浏览器仍属于项目/系统工具,不属于内置 OpenCode 运行时。macOS 与 Linux 的双架构产物需要分别完成对应架构的 staging 与产物验证后再发布。
Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode 运行时资源,产物写入忽略的 `release/` 目录。AI 学习不再携带独立播放器产物。Windows 正式包中的 OpenCode、Playwright MCP、Python 和 uv 均从安装目录解析;缺少本地资源时启动或产物验证会直接失败,不会回退到系统 Python、npm 或 npx 下载。Git、项目编译器和用户选择的浏览器仍属于项目/系统工具,不属于内置 OpenCode 运行时。macOS 与 Linux 的双架构产物需要分别完成对应架构的 staging 与产物验证后再发布。
## 代码结构
@@ -99,7 +99,7 @@ Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode
- AI 编程项目配置以项目内 `.niancode/project.json` 为准;项目文件和会话主数据保持本地,问答观察快照按个人资料同步规则单向上行。
- AI 绘画 Renderer 只调用 Main-owned Host APIMain 负责 Works Square Token 刷新、Conversation 所属的服务端持久 Agent Session、单次 WebSocket ticket、双向命令/事件帧、断点续传与契约映射,并通过本机 Host API 的 SSE 投影同步任务状态。切换会话只重连对应流;注销或退出时关闭本地流并清除本机 Session-id 缓存,不删除服务端持久 Conversation Session。远端 Token 与 ticket 不进入 Renderer。
- AI 绘画使用独立的云端 Workspace 边界,不回退到 AI 编程项目数据,也不向 Renderer 暴露 Provider、模型、Prompt、存储 URI 或远端登录 Token。
- AI 学习的课程目录、生成、进度、Agent、ASR 与课堂 runtime 都经过 Main-owned 边界Renderer 不持有 Works Token、模型、Provider 配置或本地 archive 路径。Main 以登录身份派生不透明账号分区并拒绝切换后的迟到结果;课程下载重定向只允许同 Works origin,播放器使用账号绑定的 loopback origin 与短效 nonce。只有显式 `readClassroom` 播放路径可以注册课程资源Agent/runtime 会先验证调用前已存在的 active player registration再做无副作用权威解析课程不能靠请求自身完成注册。云端绑定始终使用课程 aggregate `contentHash`,模块 id/hash 仅作为受控上下文;课堂 runtime 只允许固定能力路径,播放器不能自报课程身份或代理任意 URL
- AI 学习只通过 Main-owned Host API 获取项目列表、README 详情和固定媒体路径Renderer 不持有 Works Token、对象存储地址、任意下载 URL 或本地文件路径。项目 ZIP 只允许同 Works origin 最多五跳重定向,重定向请求不携带 Bearer下载结果仅向 Renderer 返回 `saved``cancelled`。README 不执行原始 HTML图片必须由服务端镜像为固定项目媒体路径
- Prompt Museum 使用独立的 Main-owned Host API 代理Renderer 只接收分页卡片、详情和服务端返回的图片地址Works Square Token 只由 Main 持有。发布记录必须由服务端完成作者、来源、许可证和素材授权审核,模块不提供投稿、点赞、评论或排行榜。
- AI 编程的 Agent 配置是项目所有的;稳定 id 用于保持会话兼容显示名称可以修改。AI 绘画的设计 Agent 是固定产品能力,不作为用户可增删的项目实体。