Files
makelore/.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md
T

55 lines
5.9 KiB
Markdown
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.
# ADR-008: 交互式 AI 应用 Scaffold 与官方项目插件采用项目级激活
- Status: Accepted / implemented, amended 2026-09-05
- Date: 2026-09-04
- Applies to: Project creation, `ProjectType`, code-owned official project Plugins, scaffold Skill, release readiness
## Context
历史客户端把 `mini_game` 和 `mini_program` 作为两个可发布产品类型,并在创建项目时自动生成两套业务模板。这把项目身份、起步文件和发布规则绑定在同一次创建操作中,使模板演进和平台发布约束难以独立维护。
项目服务当前已经只负责 `.makelore/project.json` 与 `knowledge/`。用户确认将小游戏和小程序合并为一个“交互式 AI 应用”类型,并把生成文件、目录以及提交审批要求放进由官方 Marketplace 管理、随签名客户端交付的 Skill。
后续实际使用又证明,把伙伴分配作为代码所有官方项目插件的第二个项目级开关会产生重复且相互矛盾的状态。用户进一步确认 Data Service、游戏资源生成、项目初始化与发布检查都应在项目启用后直接对项目生效,伙伴分配只保留给确实采用该范围的其他插件。
## Decision
- 新建项目只提供规范产品类型 `interactive_ai_app`(显示为“交互式 AI 应用”)和 `custom`。`ProjectType` 创建后仍不可变。
- `mini_game` 与 `mini_program` 只作为历史读取和脚手架兼容别名,在内存中归一为 `interactive_ai_app`。读取或运行脚手架不会改写原配置;后续普通配置变更可以保存规范值。缺少类型字段的旧项目仍归一为 `custom`。
- 项目创建只生成 `.makelore/project.json` 和 `knowledge/`,不生成业务源码、依赖、锁文件或发布模板。
- 代码所有的官方项目插件 `makelore.data-service`、`makelore.game-resource` 与 `makelore.project-scaffold` 采用统一的项目级激活规则。Data Service 随应用提供;Game Resource 与 Project Scaffold 保留 Account Library 获取;三者都保留项目启用语义,但不再要求或展示 Agent 分配。项目启用后,Main-owned effective resolver 自动把完整 Skill/tool 集合提供给该项目的每个父 Agent;child Agent 仍为空。需要伙伴分配的其他 Marketplace 插件继续使用原规则。
- `makelore.project-scaffold` 提供显式 Skill `makelore-project-scaffold`。固定版本资源随 MakeLore 客户端交付,不经过 Package Store 下载。其脚本生成六个交互式 AI 应用起步文件;写入前预检全部目标,不覆盖已有路径,受控失败时只回滚本次创建的文件和目录。
- Scaffold Skill 不安装依赖、不访问网络、不执行构建、不上传、不提交审核,也不提供 `--force`、类型覆盖或模板迁移状态。Main 继续独占固定 npm/Vite 构建、同字节预检、打包和上传;Works Square 继续独占服务端校验、不可变 Release 与运营审核。
- 官方 Plugin 的 `.mjs` 仅因它位于客户端固定、代码所有的 bundled resource root 中而可执行。应用通过不可覆盖的 `MAKELORE_NODE_EXECUTABLE` 向父 Pi worker/Agent Server 提供自身 Node;不得回退系统 Node。该例外不适用于 Marketplace 下载 artifact:P0 下载包仍只接受文本/图片 Skill 资源并拒绝 `.mjs`。第三方 Device Package 的可执行代码继续走自身的披露与确认边界。
- Skill 的发布检查只是只读准备度指导:区分确定阻断、源码包排除影响、运行时/平台待确认项和静态已满足项,并引用项目相对证据。它不能宣称构建、上传、审核或生产发布成功。
## Consequences
- 模板可随官方 Plugin 版本演进,不再扩大项目创建服务的职责,也不需要把脚本上传为 Marketplace artifact。
- 旧项目无需批量迁移即可继续打开、生成脚手架和发布;新写入只使用规范类型。
- 发布规则在 Skill 中可被 Agent 解释和预检,但权威执行仍只有 Main 与 Works Square,避免形成第二套发布实现。
- 这三个代码所有官方身份的既有 Agent assignment 数据不再参与有效资源计算,可以原样保留;账号移除(适用时)或项目禁用仍会阻止新父 Agent 获得资源,运行中的 generation 仍按既有冻结边界切换。
- 对外分发仍需不可变 SemVer/Git 版本、服务端 bundled Release 元数据、已安装 Windows、签名 macOS 与 native Linux 运行证据;工作区测试不能替代这些发布门禁。
## Supersedes
本决定取代 2026-08-09 的双可发布类型与创建时自动生成模板行为;固定 Vite 构建、artifact contract、运营审核与公共播放边界保持不变。
## Related Evidence
- Source commit: `959b633`
- Integration merge: `4bc3e0ea5331a7d3f3576768c0119c02c0f0f952`
- Official Marketplace source commit: `ddb678b46ff10a28e04beeafcfc00c8c8a23ff9f`
- Official Marketplace integration merge: `2bc3e4420852388ce46841e05c1cbf49e80b250c`
- Source task: `20260904-project-scaffold-implementation-7e4c2a91`
- Marketplace source task: `20260904-marketplace-scaffold-client-6c4e8a21`
- Marketplace integration task: `20260904-project-scaffold-integration-client-4f2a8c71`
- Project-wide activation source commit: `300ac89a81409440aac84ff45b1d9ca2fa186629`
- Project-wide activation source task: `20260905-project-plugin-scope-7c4e9a21`
- Project-wide activation integration task: `20260905-project-plugin-scope-integration-4d8a2c71`
- Official project-wide activation source commit: `718783f6837e29f56c9add633596249c03e5701f`
- Official project-wide activation product commit: `e0de7aa28c1d6e97454f0e4073ae9153e746bb4b`
- Official project-wide activation source task: `20260905-official-plugin-project-scope-6e4a9c21`
- Official project-wide activation integration task: `20260905-official-plugin-project-scope-integration-8b3d6f42`
- Proposal: `10-decisions/proposals/20260904-project-scaffold-implementation-7e4c2a91__interactive-ai-app-type.md`