docs(integration): promote Learning project catalog

This commit is contained in:
2026-08-20 00:17:42 +08:00
parent d967b0f6bf
commit a5fc8bf596
14 changed files with 114 additions and 115 deletions

View File

@@ -39,12 +39,11 @@
- Prompt Museum 只展示服务端审核并带稳定作者、来源、许可证/署名和素材授权信息的内容;客户端不内置数据集、不推断缺失版权、不提供投稿/点赞/评论/收藏/关注/排行,也不自动发送或生成选中的 Prompt。
- Prompt Museum Renderer 只能通过 Main-owned 固定 GET 路由读取列表和详情。Works Token 不得进入 Renderer;列表查询只允许搜索、使用场景、风格、主体、语言、模型、游标和限制字段。需要受保护图片时必须新增 Main-owned 媒体代理,不能把 access token、内部路径或用户隐私放进图片 URL。
- 产品界面当前只支持中文;系统语言与历史持久设置中的其他值必须归一为 `zh`,不得保留不可达的伪语言选择。
- Learning 是已启用顶层模块。课程目录、生成、进度、下载、Agent、ASR 与课堂 runtime 的 Works 访问必须由 Electron Main 持有;Renderer 不得获得 Works Token、Provider/模型配置、归档路径或任意上游代理能力。
- 有材料的课程生成需求最多 4,000 字,最多接受 5 个文件,单个不超过 50 MiB、总计不超过 150 MiB;Main 必须在取 Token/发请求前严格投影外层对象、布尔选项、材料 id/name/MIME/size/lastModified/order/bytes 并拒绝重复或不连续顺序。材料字节不持久化到 Renderer 状态;无材料请求使用有界 JSON,所有生成控制路径和身份必须使用受限格式。
- Learning 本地生成任务、课程库、player registration 与 IPC 生命周期必须绑定 Electron Main 从认证用户派生的不透明账号分区;刷新只能保留原账号 binding,账号切换、注销、epoch 变化或卸载后必须拒绝旧异步结果、runtime 事件与资源访问。Renderer 持久化键不得使用 Token。
- 课程包最大 512 MiB,必须按服务端声明字节数和 SHA-256 完整下载并原子安装,播放前重新校验;下载只允许 HTTP(S)、无 userinfo、同 Works origin 的最多 5 次重定向,资源请求不得携带 Works Bearer。ZIP entry 数量、单项/总解压大小、压缩比、路径、JSON 深度/节点、模块 id/hash、场景数量和媒体引用必须保持边界。课程媒体仅允许与声明 MIME 精确匹配的 PNG/GIF/JPEG/WebP、MP3/M4A/AAC/WAV/OGG、MP4/WebM、WOFF/WOFF2/TTF/OTF;HTML/SVG/XML/脚本/PDF、未知/双扩展、控制字符和 MIME 不匹配必须 fail closed。大课模块属于同一 aggregate,不得把模块自报身份提升为独立课程权益。
- Learning player 只向当前账号注册并提供已验证课程资源;账号变化必须关闭/轮换 server 和 HTTP URL/cookie nonce。所有 course asset 响应必须使用被动 MIME、`nosniff`、sandbox CSP、same-origin CORP 和 no-store。iframe bridge 必须校验精确 loopback origin 与 source、只信任初始 player 文档并在二次 load 后永久关闭;`postMessage` 不得使用 `*`。只有显式 `readClassroom` 可以注册资源;Agent/runtime 在任何解析前先验证调用前既存 active registration,再用无副作用 resolver 反查当前账号已安装、复验的 aggregate/模块,课程内容不能靠请求自身注册或跨账号复用 URL/cookie。
- OpenMAIC production Stage 不从相邻源码或未验证本机构建目录回退。正式打包必须提供经过版本清单与 SHA-256 验证的 artifact;课堂只允许固定 Agent/ASR/PBL/评分能力,不能代理任意 URL 或方法。
- Learning 是登录必需且受 `module_access.learning` 控制的运营精选项目目录。客户端只提供项目列表、README 详情和用户触发的 ZIP 下载,不提供课程生成、进度、本地课程库、OpenMAIC 播放、Agent、ASR 或课堂 runtime,也不保留旧 API/数据兼容读取路径。
- Works Square 运营后台拥有项目名称、摘要、封面、标签、版本、排序、状态、Markdown、ZIP、声明字节数和 SHA-256。只有冻结了元数据、媒体和归档校验结果的 `published` 项目可被客户端列表或详情读取;客户端不提供上传、编辑或发布入口。
- README 使用安全 Markdown/GFM 并禁用原始 HTML。运营发布时必须解析 Markdown,把无凭据的远程 HTTPS raster 图片经过 DNS/私网、重定向、大小、MIME 和解码校验后镜像,再改写为固定 `/api/learning/projects/:projectId/media/:mediaId` 路径;Main 只代理可信 PNG/JPEG/WebP/GIF/AVIF 且单图最大 10 MiB。
- 项目 ZIP 最大 512 MiB。Main 打开原生保存对话框,将下载流写入临时文件,只允许无 userinfo、最多五跳且保持 Works origin 的重定向,重定向请求不携带 Bearer;实际字节数、声明大小、SHA-256 与 ZIP 签名全部匹配后才原子重命名。Renderer 不得获得 Works Token、对象存储地址、任意下载 URL、临时路径或最终本地路径。
- 新客户端不读取、迁移或展示历史下载课程,但也不自动删除用户现有课程数据。任何清理功能必须另行设计为用户明确控制的可恢复维护动作。
- `game-engine` 不再是内置 OpenCode Skill。`planning-with-files` 在复杂任务中把 `task_plan.md`、`findings.md`、`progress.md` 写到当前项目根目录;不得写入 Skill 安装目录或用户目录。
- Robot V1 在现有 Binding 体验内扫描符合条件的开放 `Xiaozhi-*` 配网热点,并只连接用户明确选择的短效候选;该便利信号不得宣称为可信设备发现、自动下发家庭 Wi-Fi、自动认领或自动确认在线。
- Guided Hotspot Binding capability 由 Electron Main 持有且默认开启。精确 `NIANCODE_AI_HARDWARE_GUIDED_HOTSPOT_BINDING=0` 关闭引导;关闭或 capability 读取失败时保留现有六位码 Binding,Renderer 可以读取但不能覆盖它。
@@ -69,9 +68,9 @@
- AI Canvas 请求冻结修复仍需在安装包内用真实账号重复 Quote PATCH、重试报价和继续调整:确认超时在 30 秒内释放 UI、并行请求可继续、服务端没有隐式重复 mutation。临时 `disable-http2` 不构成根因结论;修复确认后应恢复 HTTP/2 做对照 smoke,再决定正式协议策略。
- Robot Guided Hotspot Binding default-on 发布仍需确认指定硬件/固件确实提供被审计的开放 Hotspot/Portal、部署端签发严格六位 ASCII 数字码且与 Works validator 的时效/消费语义一致,并完成 Windows 真机、签名 macOS x64/arm64 native worker/association 与真实设备端到端 smoke。
- Prompt Museum 客户端契约和页面完成不等于 Works Square 内容后台、审核数据或 CDN 已部署;上线前需以真实登录账号验证列表、详情、署名链接、分页、图片和 Prompt 回填。
- Learning 客户端集成不等于 Works 课程服务、权益、生成流水线、production Stage artifact 或签名安装包已验收;上线前需以真实账号和固定 artifact 完成 Windows/macOS 整链 smoke。
- Learning 客户端集成不等于 Works Square 运营后台、对象存储、远程图片镜像或项目 API 已部署;上线前需先部署服务端合同,再以真实账号验证发布/下架、分页、README 图片、保存取消、ZIP 大小/摘要/签名错误以及 Windows/签名 macOS 安装包。
- 四模块入口策略上线前需确认 Works `module_access` migration/API 已部署,安装包包含对应客户端,并用真实账号逐一关闭四个模块验证卡片、根/深层/别名路由和独立 API 授权。
## Last Reviewed
2026-08-19
2026-08-20

View File

@@ -19,12 +19,10 @@
| Design Generation Quote | 服务端对当前最终 Prompt 与 generation parameters 返回的可确认报价 | 客户端可编辑后请求重报价,但不自行计算尺寸、供应商价格或设计点 |
| Prompt Museum | Canvas 的服务端驱动、只读策展灵感模块 | 展示经审核的预览、Prompt、分类和署名;不是社区,客户端不打包内容数据集 |
| Pending Museum Prompt | 用户点击“使用此 Prompt”后在 Renderer 进程内保存的一次性回填状态 | Canvas 消费后清除;只填充输入框,不自动发送或生成 |
| Learning Course Aggregate | Works 权益、进度和本地安装的产品级课程身份 | 由 `courseId + contentHash` 标识;大课的模块仍属于同一 aggregate |
| Frozen Learning Package | 下载后按字节数和 SHA-256 校验并原子安装的不可变课程 ZIP | 播放前重验;模块、场景、媒体与路径必须通过本地边界校验 |
| Learning Player Artifact | Makelore 打包的 OpenMAIC production Stage 静态产物 | CI 固定 URL/SHA-256,打包与运行时验证 artifact 清单;不依赖相邻源码仓库 |
| Learning Runtime Capability | 本地课堂可请求的固定 Works 联网能力 | 仅 Agent、ASR、quiz/PBL/评分等白名单路径;课程内容不能指定任意 URL、方法或身份 |
| Learning Account Partition | Electron Main 从当前认证身份派生的不透明本地分区键 | 隔离生成恢复、已安装课程、player registration 和异步生命周期;不把 Token 或原始账号标识用作授权 |
| Learning Player Session | 当前账号专属的 verified loopback production Stage 会话 | HTTP URL/cookie 使用短效 nonce;iframe bridge 使用精确 origin/source 和单文档生命周期;账号切换或注销后旧 URL、cookie 和注册资源失效 |
| Learning Project | Works Square 运营发布、供用户阅读 README 并下载源码/素材 ZIP 的精选学习项目 | 客户端只读;不是课程、生成任务或本地播放器实体 |
| Published Learning Project | 在一个发布代际中冻结名称、封面、Markdown、镜像媒体、ZIP 字节数和 SHA-256 的公开项目快照 | 只有 `published` 状态进入客户端列表/详情;下架后不可见,审计记录保留 |
| Learning Project Media | README 远程 HTTPS raster 图片经服务端校验、镜像后生成的固定项目媒体资源 | 客户端只接受固定 `/api/learning/projects/:projectId/media/:mediaId` 路径;Main 验证可信 MIME 和 10 MiB 上限 |
| Learning Project Archive | 用户在详情页明确选择保存的项目 ZIP | Main 负责原生保存窗口、受控下载、512 MiB、声明大小、SHA-256、ZIP 签名和原子重命名;不在客户端形成课程库 |
| Robot Provisioning | 让 Robot 获得目标 Wi-Fi 凭据并尝试联网的阶段 | 与云端 Activation、账号 Binding、协议在线是不同阶段;V1 由现有固件 Hotspot portal 完成 |
| Robot Activation | Robot 联网后向既有服务获取六位激活码的阶段 | 激活码由设备展示/播报给用户;Makelore 不生成该码 |
| Robot Binding | 用户把六位激活码和 Agent 提交到 Works Square,建立账号侧设备关系 | `bound` 不等于设备当前 online 或 protocol-ready |