docs: record automatic game resource delivery

This commit is contained in:
2026-09-06 09:56:47 +08:00
parent 4df4bc9624
commit 5c61110f46
10 changed files with 141 additions and 14 deletions

View File

@@ -9,6 +9,7 @@
- 可发布交互式 AI 应用的一键提交必须由 Electron Main 对安全源码快照执行固定 npm 11.6.2 的 `npm ci --ignore-scripts`,并调用项目 `package-lock.json` 锁定的 Vite 生成静态产物。
- 官方 bundled Project Scaffold Skill 可生成固定起步文件并只读说明发布要求、禁止项和证据缺口,但不得安装依赖、构建、上传、提审或把静态检查表述为平台批准;其 `.mjs` 只来自签名客户端固定资源Marketplace 下载 artifact 仍必须拒绝脚本。
- 代码所有的官方项目插件 `makelore.data-service``makelore.game-resource``makelore.project-scaffold` 在满足各自既有账号获取或随应用提供条件并由当前项目启用后,必须自动进入每个 parent Agent且客户端不得要求或展示伙伴分配child Agent 仍为空,其他 Marketplace 和本机包的既有生命周期不变。
- Game Resource 的一次显式确认必须对应一次 Main-owned Provider 提交Main 内部轮询并把全部终态输出自动保存到调用时冻结项目的 `assets/generated/game-resource/<executionId>/`。响应丢失、保存失败或应用重启只能恢复本地下载/保存不得再次生成或扣费项目写租约只在终态落盘期间持有Agent 不再拥有状态轮询、保存路径或第二次确认。
- Electron 双视口预检必须检查与最终 `built_archive` 相同的内存文件字节;预检失败不得上传,预检成功不得被表述为可信审核凭据。
- 上传协议必须同时携带源码归档、构建归档和严格版本化 artifact contract服务端独立重算摘要、校验合同并固化不可变 Release。
- Renderer 不得获得发布凭据、归档、临时目录、构建 origin 或任意本地路径;旧客户端和旧 sandbox/browser 任务必须提示升级后重新构建提交。
@@ -39,4 +40,4 @@
## Last Reviewed
2026-09-05
2026-09-06

View File

@@ -1,6 +1,6 @@
# ADR-008: 交互式 AI 应用 Scaffold 与官方项目插件采用项目级激活
- Status: Accepted / implemented, amended 2026-09-05
- Status: Accepted / implemented, amended 2026-09-06
- Date: 2026-09-04
- Applies to: Project creation, `ProjectType`, code-owned official project Plugins, scaffold Skill, release readiness
@@ -18,6 +18,7 @@
- `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 集合提供给该项目的每个父 Agentchild Agent 仍为空。需要伙伴分配的其他 Marketplace 插件继续使用原规则。
- `makelore.game-resource` 的生成操作采用一次确认、一次提交、自动交付。Main 冻结调用时的项目身份与路径,内部轮询已接受的 Provider execution把全部终态输出保存到该项目固定目录并只在落盘期间获取共享项目写租约。持久交付 receipt 将 Provider/billing 与本地下载/保存分开恢复本地交付不得重新提交或计费。Agent 不再暴露 status/save 工具、路径选择或第二次保存确认。
- `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 下载 artifactP0 下载包仍只接受文本/图片 Skill 资源并拒绝 `.mjs`。第三方 Device Package 的可执行代码继续走自身的披露与确认边界。
@@ -29,6 +30,7 @@
- 旧项目无需批量迁移即可继续打开、生成脚手架和发布;新写入只使用规范类型。
- 发布规则在 Skill 中可被 Agent 解释和预检,但权威执行仍只有 Main 与 Works Square避免形成第二套发布实现。
- 这三个代码所有官方身份的既有 Agent assignment 数据不再参与有效资源计算,可以原样保留;账号移除(适用时)或项目禁用仍会阻止新父 Agent 获得资源,运行中的 generation 仍按既有冻结边界切换。
- Game Resource 的 Provider 作业可以继续由 Main 在后台收敛,而项目文件写入只占用短租约;项目切换不改变已冻结的交付目标,应用或响应中断也不把本地交付失败变成第二次付费生成。
- 对外分发仍需不可变 SemVer/Git 版本、服务端 bundled Release 元数据、已安装 Windows、签名 macOS 与 native Linux 运行证据;工作区测试不能替代这些发布门禁。
## Supersedes
@@ -51,4 +53,8 @@
- 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`
- Automatic Game Resource delivery source commit: `6113a2453299141eab8420a56e93675712dd607b`
- Automatic Game Resource delivery integration product commit: `4df4bc96245c01cd95e35ddf1b2b03d0e0d231c5`
- Automatic Game Resource delivery source task: `20260906-game-resource-auto-delivery-7a4e2c91`
- Automatic Game Resource delivery integration task: `20260906-game-resource-auto-delivery-integration-8c4e1a72`
- Proposal: `10-decisions/proposals/20260904-project-scaffold-implementation-7e4c2a91__interactive-ai-app-type.md`

View File

@@ -4,7 +4,7 @@
| ID | Decision | Status | Date | Applies To | Detail |
|---|---|---|---|---|---|
| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建、代码所有的官方项目插件激活与发布权威分离 | Accepted / implemented, amended 2026-09-05 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace delivery、project-wide activation、release readiness | `adr-008-interactive-ai-app-scaffold.md` |
| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建、代码所有的官方项目插件激活与发布权威分离 | Accepted / implemented, amended 2026-09-06 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace delivery、project-wide activation、Game Resource auto-delivery、release readiness | `adr-008-interactive-ai-app-scaffold.md` |
| ADR-007 | AI Design 采用单一 Current Specification、Living Form 与不可变 Quote 的 V2 权威 | Accepted / implemented | 2026-08-30 | AI Design Renderer、Electron Main、Works Square V2 API | `adr-007-ai-design-living-form-v2.md` |
| ADR-002 | Robot V1 采用 Main 门控的引导式热点配网并衔接现有六位 Binding | Accepted / implemented, default on | 2026-08-16 | Robot Renderer、Host API、Electron Main、现有固件热点入口 | `adr-002-robot-guided-hotspot-binding-v1.md` |
| ADR-003 | Robot 配网页内扫描并连接 Windows/macOS 热点 | Accepted / implemented with physical release gates pending | 2026-08-16 | Robot Renderer、Host API、Electron Main、Windows WLAN、macOS CoreWLAN/CoreLocation | `adr-003-robot-in-app-hotspot-connection.md` |

View File

@@ -10,7 +10,7 @@
| Selected-model Web Search | Parent Pi turn with an explicitly supported selected model | `makelore_web_search` core tool → frozen model/provider/credential request with provider-native forced search → ordinary model response/usage | No Marketplace Release, Account Library, Admission, Hosted Web Search client, Plugin Charge, or `agent_browser` fallback participates. Unsupported selected models expose no tool; child workers receive none. |
| Conversation-driven Device Package install | Agent tool inspects npm/Git/absolute local Plugin/loose Skill source | Main preview → distinct later user confirmation → immutable device-package generation → new/idle parent worker resources | Renderer has no install picker. Lifecycle scripts never run. Pi extensions and non-empty Skill `scripts/` are disclosed as desktop-user executable code before confirmation. Active workers retain their frozen generation until the turn settles; child workers remain empty. |
| Effective Plugin worker snapshot | Installed trusted package or code-owned official definition + project selection + applicable Agent assignments + current server policy | effective resolver → Registry/resource loader/Extension Host/tool catalog → parent Pi worker | One frozen snapshot supplies Skills, tools, package roots, and runtime authorization. Data Service, Game Resource, and Project Scaffold derive their applicable resource set directly from project enablement; assignments remain authoritative only for other Plugin identities that use that scope. Disable, account/project switch, logout, Renderer crash, Main shutdown, or worker generation change invalidates future actions without mutating persisted unknown assignments; child workers receive no Plugin projection. |
| Hosted Game Resource operation | Eligible parent `makelore.game-resource` tool call plus explicit confirmation | frozen Plugin adapter → capability Registry → Main `GameResourceClient` → fixed Works Square game-resource route → provider-neutral receipt/result | Server policy owns pricing, payer, Admission and receipt state. Stable logical operation identity survives response loss/Main restart; `submission_unknown` is not replayed as a fresh request. Result saving uses a bounded project-relative path and the existing project write lease. |
| Hosted Game Resource operation and delivery | Eligible parent `makelore.game-resource` generate call plus one explicit confirmation | frozen Plugin adapter → Main delivery coordinator → one `GameResourceClient` submission → internal status polling → all terminal downloads → `assets/generated/game-resource/<executionId>/` in the frozen original project | Server policy owns pricing, payer, Admission and Provider receipt state; Main owns the durable local delivery receipt and filesystem. `submission_unknown` is not replayed as a fresh request. Restart/retry resumes download/save only, the shared project write lease is held only during terminal materialization, and the Agent receives one progress/result card rather than status/save tools or a second confirmation. |
| 桌面认证生命周期 | Renderer 登录、刷新与注销请求 | Host API → Main Works Session → Works Square `/api/auth/{login,mobile-login,refresh,logout}` → one-feel auth | Main 加密持有并先持久化轮换 token客户端不携带 OAuth client secret连续 7 天未使用才清除会话,终止性 `400`/`401` fail closed |
| 用户模块入口策略 | 会话恢复 / 登录 / 刷新 | Electron Main → Works `/api/auth/me` → 四布尔安全投影 → Renderer auth store → 卡片/路由/provider gate | 缺失对象或字段默认 `true``design` 映射 `painting`;终止性 `401` 清理 Main/Renderer 会话;全局 `/settings` 不受 Code gate |
| 项目创建 | 新建项目对话框 | Host API → Main 项目初始化 | 固定 `interactive_ai_app``custom`,只生成 `.makelore/project.json``knowledge/`;历史双类型在读取边界归一,不因读取改写 |
@@ -81,4 +81,4 @@
## Last Updated
2026-09-05
2026-09-06

View File

@@ -9,7 +9,7 @@
| `shared/coding-plugins.ts`, `electron/coding-plugins/effective-resolver.ts`, `registry.ts`, `project-service.ts`, and `electron/coding-runtime/pi/**` | Effective official Plugin projection, selected-model tools, Device Package resources, and frozen parent logical-thread runtime snapshot | The shared project-wide predicate covers `makelore.data-service`, `makelore.game-resource`, and `makelore.project-scaffold`: after their existing delivery/acquisition requirement and project enablement, all parent Agents receive their Skills/tools without assignment. Trusted Marketplace artifacts that require assignment and immutable local Device Package generations retain their distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. |
| `electron/coding-runtime/pi/model-tools/**` and `shared/model-tools.ts` | Closed selected-model tool registry and provider-specific Web Search request shaping | The frozen selected model capability controls whether `makelore_web_search` exists. The tool uses that model/provider/credential and normal model billing; no Hosted Plugin adapter, Admission, Plugin Charge, or browser fallback exists. |
| `electron/coding-packages/**`, `electron/api/routes/device-packages.ts`, `shared/device-packages.ts`, and `src/stores/device-packages.ts` | Main-owned conversation install preview/confirmation/commit, immutable local package generations, safe Renderer projection, and parent-worker refresh | Sources are npm, Git, absolute local Plugin directories, or loose `SKILL.md`. Lifecycle scripts are disabled; executable extensions and non-empty Skill `scripts/` run with desktop-user authority after disclosure and explicit confirmation. Every generation projects all explicitly installed and currently enabled Skills/extensions; Device Packages never join Account Library, Marketplace Package Store, Release, Channel, or Admission state. |
| `electron/coding-plugins/adapters/game-resource.ts` and `electron/services/game-resource-client.ts` | Provider-neutral `makelore.game-resource` hosted tool adapter and Main-owned Works Square transport | Tools materialize only from an eligible frozen `platform_hosted` parent snapshot. Metered mutations require explicit confirmation and stable logical operation identity; Renderer/Pi never receive Provider URLs, credentials, balances, raw responses, or Provider job IDs. |
| `electron/coding-plugins/adapters/game-resource.ts`, `electron/services/game-resource-client.ts`, and `electron/services/game-resource-delivery.ts` | Provider-neutral `makelore.game-resource` adapter, Main-owned Works Square transport, and durable local delivery coordinator | An eligible frozen parent submits one confirmed generation. Main polls internally, persists delivery state under userData, downloads every terminal output, and writes it to the frozen original project. A delivery retry resumes download/save only; Renderer/Pi never receive Provider URLs, credentials, balances, raw responses, Provider job IDs, or filesystem authority. |
| `electron/api/routes/plugin-marketplace.ts`, `src/stores/{plugin-marketplace,device-packages,coding-plugins}.ts`, and `src/pages/Plugins/` | Existing Main/store authorities plus the pure unified Renderer projection for official catalog, Account Library, official package-device state, local Device Packages, retained IDs, and current-project actions | `/plugins` is the sole canonical surface; legacy Plugin routes only replace-redirect into deterministic filters. `official:`, `local:`, and `retained:` identities stay separate, source failures are isolated, and no Account token, filesystem path, Admission, package bytes, signed URL, or visible install-source picker enters Renderer. |
| `src/components/works/ProjectPublishAction.tsx` | 可发布项目的一键提交、云构建轮询与用户可理解状态 | 只通过 Renderer API 提交非敏感元数据;绑定告警不终止轮询 |
| `shared/project-config.ts` and `electron/coding-projects/project-config.ts` | 规范 `ProjectType` 归一与最小项目创建 | 新写入只使用 `interactive_ai_app` / `custom`;历史 `mini_game` / `mini_program` 只读归一,项目创建只生成 metadata 与 `knowledge/` |
@@ -59,7 +59,7 @@
- Renderer UI → Renderer API contract → Main Host routes → Main services → Works SquareRenderer 不反向读取 Main 凭据、文件系统或归档。
- Plugin sidebar/legacy links → canonical `/plugins` projection → existing Renderer stores → bounded Main Marketplace and Device Package routes. Compatibility routes replace-redirect into deterministic filters and do not create a second lifecycle.
- Hosted Plugin parent tool → frozen Registry adapter → Main `GameResourceClient` → fixed Works Square game-resource routes. Stable logical operation identity survives response loss and Main restart; ambiguous submission remains reviewable and is never converted into an automatic fresh mutation. Saving a result uses the existing bounded project path and project write lease.
- Hosted Game Resource parent tool → frozen Registry adapter → Main delivery coordinator → `GameResourceClient` → fixed Works Square game-resource routes → durable local receipt → frozen project output directory. Stable logical operation identity survives response loss and Main restart; ambiguous submission remains reviewable and is never converted into an automatic fresh mutation. Main polls internally and acquires the shared project write lease only while materializing terminal outputs; resuming delivery never submits or charges again.
- AI 编程 Renderer product Snapshot/commands → typed `/api/coding/*` Host API → Main Coding composition → target `CodingConversationRuntime` → shared Agent Server 内的目标 Pi 逻辑线程Pi Provider 请求再经 Main AI proxy 访问模型上游。Renderer 不持有 Pi wire、凭据或本地 runtime URL。
- Project configuration 只决定产品身份与分流;用户显式调用 Scaffold Skill 才生成固定起步文件Main release builder 生成 source/built/contract服务端独立重算和校验决定发布安全。本地 `ProjectType` 或 Skill 准备度结论都不是授权结论。
- Built artifact preflight 检查最终上传的同字节快照,但客户端可被绕过且不产生可信 receipt服务端仍是合同、摘要和不可变 Release 安全权威。
@@ -93,4 +93,4 @@
## Last Updated
2026-09-05
2026-09-06

View File

@@ -24,7 +24,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
| Pi Conversation Runtime | 一个长驻 Pi `0.84.2` Agent Server 承载每条 active/warm Conversation 的隔离逻辑 Runtime/Session/JSONL channel | 严格 LF JSONL RPC、generation recovery、Snapshot hydration正式包从 staged `pi-runtime` manifest/root 定位并校验 Pi 包入口top-level 逻辑 turn 并发 4、warm idle LRU 8Server 退出统一使旧 channel 失效并按需单实例重启 |
| Pi Provider & Managed Resources | Provider catalog、thread-local secret projection、model/resource revision、Prompt/Skill/extension materialization、selected-model tools | 父凭据只进入选中逻辑线程的内存 credential storechild 凭据只进入该短命进程Works `model_capabilities` 由 Main 严格归一化并作为安全 Provider metadata 持久化。Web Search 仅在精确 capability 存在时随冻结的 selected model/provider/credential 进入 parent tool catalog并走普通模型计费不回退 `agent_browser` 或独立 Hosted Provider。服务端 reasoning levels 优先于本地 profile缺字段则清理 override 并回退;不扫描项目或用户的 `.pi/.agents/.codex`,不把 secret 或原始响应放进 argv、catalog 或 Renderer |
| Pi Extension, Subagents & Lifecycle | 必需的生成式 Makelore extension、Main 显式选定的已安装 extensions、UI interaction、ephemeral child、write lease 与 background run lease | Makelore bridge 固定为首个 extension其余选定 extension 全部经 Pi 的 explicit additional paths 加载且 ambient discovery 关闭child 并发 4、单次最多 8、禁止递归active/uncertain run 不因页面隐藏或 confirmation timeout 被停止replacement/stop 必须可解释并清理所有 ownership |
| Code-owned Official Project Plugins | Existing Account acquisition or system-included delivery → project enablement → effective parent snapshot | Data Service、Game Resource 与 Project Scaffold 都不要求 Agent assignment项目启用后自动进入每个父 Agentchild 不继承 Plugin。三者不经过设备下载、更新、Beta 或 artifact 签名Game Resource 仍进入固定 Works Square hosted routeProject Scaffold 的 `.mjs` 仍只来自签名客户端固定资源。需要分配的 Marketplace 下载包保持原规则。 |
| Code-owned Official Project Plugins | Existing Account acquisition or system-included delivery → project enablement → effective parent snapshot | Data Service、Game Resource 与 Project Scaffold 都不要求 Agent assignment项目启用后自动进入每个父 Agentchild 不继承 Plugin。三者不经过设备下载、更新、Beta 或 artifact 签名Game Resource 的一次确认由 Main 提交一次、内部轮询并把全部终态输出自动写入冻结的原项目,恢复本地交付不得重新生成或计费;Project Scaffold 的 `.mjs` 仍只来自签名客户端固定资源。需要分配的 Marketplace 下载包保持原规则。 |
| Device Packages | Conversation install tools → Main-owned inspect/preview/confirm/commit → immutable local generation → parent Skill/Pi-extension resources | 支持 npm、Git、绝对本地 Plugin 目录与 loose `SKILL.md`没有可见安装入口、Account Library、Release、Admission 或 Marketplace Package Store。可执行 extension 与非空 Skill `scripts/` 拥有桌面用户权限,必须披露并独立确认;生命周期脚本禁用。每个 generation 包含所有显式安装且当前启用的 Skill/extension新/idle parent 自动刷新active parent 在 turn settled 后刷新child 始终为空。 |
| AI Design Workspace & Living Form | 一个 Workspace 的当前 Direction、Current Specification、持久 Agent Session、conversation timeline、Tasks 与 Assets | 自然对话是主创作面Living Form 仅以“AI 已理解”的紧凑辅助摘要与可选手动调整投影服务端 Current SpecificationRenderer 只持有草稿和已接受投影 |
| AI Design Input & Reconciliation | Chat、字段/集合编辑、decision、proposal、lock、Asset binding 与 restore | 全部进入同一 `design.input.apply` reducer稳定 command/operation ID 支持 unknown-result 重放revision conflict 刷新权威状态;待提交 chat 从同一 pending operation 临时投影assistant delta 只能在匹配该 operation 的一个未完成助手气泡中临时绘制且不生成独立整理进度栏 |
@@ -107,4 +107,4 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
## Last Updated
2026-09-05
2026-09-06

View File

@@ -4,6 +4,24 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- Automatic Game Resource delivery source
`6113a2453299141eab8420a56e93675712dd607b` from task
`20260906-game-resource-auto-delivery-7a4e2c91` is integrated onto local `main`
as product commit `4df4bc96245c01cd95e35ddf1b2b03d0e0d231c5` by task
`20260906-game-resource-auto-delivery-integration-8c4e1a72`. One confirmed
`game_resource_generate` call is now a Main-owned submit-and-deliver operation:
Main submits once, polls the accepted execution internally, downloads every terminal
output, and saves the files under the frozen original project at
`assets/generated/game-resource/<executionId>/`. Provider execution, billing, and
local delivery remain separate states. A durable user-data receipt resumes only the
local download/save phase after an interruption, so it cannot create a second
Provider submission or Token Point charge. The shared project write lease is held
only while terminal outputs are materialized, and the Agent-visible status/save tools
and second save confirmation are removed. Source verification passed 99 focused
tests, the 1,901-test full unit suite with 2 skips plus pressure, typecheck, lint with
0 errors/5 unchanged warnings, all Vite targets, 8 Electron tests, the unified Plugin
E2E journey, and Windows x64 runtime staging. No live paid Provider generation,
client installation, deployment, publication, or push is claimed.
- Official project-wide Plugin activation source
`718783f6837e29f56c9add633596249c03e5701f` from task
`20260905-official-plugin-project-scope-6e4a9c21` is integrated onto local `main`
@@ -677,7 +695,7 @@ Canvas 侧栏提供“获取灵感”进入 Prompt Museum。列表、筛选、
Makelore 在会话恢复、登录和刷新后由 Electron Main 请求 Works `/api/auth/me`Renderer 只获得 Code、Canvas、Learning、Robot 四个布尔权限。缺失 `module_access` 或任一字段时默认开启;服务端 `design` 显式映射客户端 `painting`。被关闭的模块卡片置灰且不可点击,根路由、深层路由和别名路由均在 `MainLayout` 或模块初始化前阻断。Code provider 等待认证权限加载完成;权限查询返回终止性 `401` 时同时清理 Main 和 Renderer 会话。`/settings` 是全局设置,不受 Code 入口策略阻断。该机制只是客户端入口策略,不代替服务端 API 授权。
插件在编程侧栏只有一个“插件”入口,`/plugins` 是唯一产品页面,并以统一列表投影 Marketplace、账号 Library、官方设备状态、本机 Device Packages、当前项目状态与 retained IDs`/plugin-marketplace``/my-plugins``/project-plugins` 路由只做确定性筛选重定向。获取、设备安装、项目启用、Agent Skill 分配、运行授权和计费仍是独立生命周期,不因界面统一而自动推进;原生 selected-model Web Search 不进入插件列表。
插件在编程侧栏只有一个“插件”入口,`/plugins` 是唯一产品页面,并以统一列表投影 Marketplace、账号 Library、官方设备状态、本机 Device Packages、当前项目状态与 retained IDs`/plugin-marketplace``/my-plugins``/project-plugins` 路由只做确定性筛选重定向。获取、设备安装、项目启用、Agent Skill 分配、运行授权和计费仍是独立生命周期,不因界面统一而自动推进;原生 selected-model Web Search 不进入插件列表。Game Resource 在一次计费确认后由 Main 提交一次并内部轮询终态全部输出自动写入调用时冻结的原项目Agent 不再轮询状态、选择保存路径或进行第二次保存确认,交付恢复也不得重新生成或重复计费。
AI 学习现在是已启用的运营精选项目目录,并继续受登录和 `module_access.learning` 控制。Renderer 通过 Main-owned Host API 获取分页项目卡片和 README 详情Markdown 支持 GFM、禁用原始 HTML。服务端发布时只校验图片 URL 为无凭据、默认端口、无 fragment 且当前 DNS 结果全部为公网地址的 HTTPS URL保留地址而不下载、识别格式、转码或镜像客户端仅为 README 图片节点启用直连,因此 SVG 和 Electron 支持的其他格式可直接显示单图失败不阻断详情。封面和历史发布媒体继续走受控路径。详情页的下载按钮打开系统保存对话框Main 将 ZIP 流式写入临时文件,只允许最多五跳同 Works origin 重定向,不校验 `Content-Length``archiveBytes`、实际流字节数或客户端大小上限,校验 SHA-256 和 ZIP 签名后原子保存Renderer 只接收 `saved``cancelled`。课程生成、进度、本地课程库、OpenMAIC player、Agent、ASR、课堂 runtime、Learning IPC 和 player artifact 打包已删除且没有兼容读取路径;历史课程数据保留但不再读取。服务端和客户端源码契约已完成,不代表生产部署或真实账号安装包联调已经完成。

View File

@@ -0,0 +1,96 @@
# Task: Integrate automatic Game Resource delivery
## Identity
- Task ID: 20260906-game-resource-auto-delivery-integration-8c4e1a72
- Mode: Integration
- Branch: codex/20260906-game-resource-auto-delivery-integration-8c4e1a72-game-resource-auto-delivery-integration
- Worktree: D:\Datas\OthersProjects\.codex-worktrees\makelore\20260906-game-resource-auto-delivery-integration-8c4e1a72
- Base commit: f721966f3c8db982279e34033b94b4347f0a8174
- Owner: codex-root
- Status: Ready for Integration
## Scope
- Integrate source commit `6113a2453299141eab8420a56e93675712dd607b`
from feature task `20260906-game-resource-auto-delivery-7a4e2c91` onto the
current local `main` frontier.
- Preserve the source product and test patch unchanged, reconcile its promotion
candidates into canonical project memory, and verify the resulting integrated
tree at the affected Game Resource/Main/Pi/Plugin boundaries.
- Advance only local `main`; do not push, publish, deploy, install a client, or
execute a paid Provider generation.
## Intent And Constraints
- The accepted product behavior is one confirmed Game Resource operation owned by
Electron Main: submit once, poll internally, save every output into the frozen
original project, and resume local delivery without a second Provider submission
or Token Point charge.
- Provider execution and local delivery remain separate states. Electron Main keeps
filesystem, Works credentials, Provider, billing, retry, receipt, and write-lease
authority; Renderer, Pi, Skill, and model gain none of those authorities.
- Preserve ADR-006's single Pi runtime, frozen parent worker, no-replay mutation,
background ownership, and shared project-write-lease rules, plus ADR-008's
project-wide Game Resource activation and child-empty behavior.
- Apply the source with `git cherry-pick --no-commit`, register its task record as
an unchanged adopted foreign document before committing, and never edit the source
task record in this Integration task.
- The user root worktree has three pre-existing untracked task records. They remain
unowned and untouched; all integration work stays in this isolated worktree.
- Concurrent Task Gate: Passed. The exact integration task identity, branch,
worktree, base, and exclusive integration lock match task-context state.
- Planning Gate: Passed after reading the required project memory, ADR-006, ADR-008,
the source task outcome and promotion candidate, the relevant reflection, and all
planning peer scopes. Historical placeholder peer scopes are unknown coordination
state but provide no evidenced semantic conflict with this exact source integration.
## Outcome
- Integrated source `6113a2453299141eab8420a56e93675712dd607b` as
product commit `4df4bc96245c01cd95e35ddf1b2b03d0e0d231c5`; both commits
resolve to tree `de2d63d6be23ca018742d3e7cbb2322a32014e3c`.
- The accepted one-confirmation flow is present on the integrated tree: Electron Main
submits generation once, polls internally, downloads all terminal outputs, writes
deterministic create-only files beneath the frozen original project, and persists
delivery state outside the project so local recovery cannot submit or charge again.
- One shared project write-lease coordinator is used by Pi writes and Game Resource
materialization; the delivery coordinator holds it only for the terminal write/change
tracking phase. The generated Pi bridge is version 6 and emits one progress/result
card. Agent-facing status and save tools plus the second save confirmation are absent.
- Promoted the source task's durable decision into ADR-008, current state, system
overview, module map, data flow, business rules, success criteria, and evidence.
The adopted source task record remains byte-for-byte unchanged.
- No server, Provider, Marketplace policy, price, Admission, or billing contract changed.
No live paid Provider request, build installation, deployment, publication, push, or
remote main mutation was performed.
## Verification
- Before the product commit, the adopted foreign task record matched the source worktree
byte-for-byte (`7,672` bytes), and `git diff --cached --check` passed.
- Source/product tree equality passed with exact tree
`de2d63d6be23ca018742d3e7cbb2322a32014e3c`.
- Integrated-tree focused regression: 14 files / 101 tests passed, covering the delivery
coordinator, client/adapter, Registry/manifest, Pi extension/release/product seams,
composition, artifact projection, and conversation timeline.
- Integrated-tree `corepack pnpm run typecheck` passed.
- Adopted source evidence remains valid for the identical product tree: 13 files / 99
focused tests; 227 files / 1,901 full unit tests / 2 skips plus pressure 1/1; lint with
0 errors / 5 unchanged warnings; all Vite targets; Windows Electron 8/8; unified Plugin
E2E 3/3; and Windows x64 Pi runtime staging.
- Dependency restoration used the committed lockfile in offline, frozen,
`--ignore-scripts` mode and changed no tracked product file.
- Final project-document, drift, task-context, diff, clean-tree, exact-root-untracked-file,
local-main fast-forward, and task-retirement checks are completed at closeout.
## Follow-ups
- Rebuild and install MakeLore from the new local `main`, then run one explicitly
authorized live Game Resource generation to confirm the progress card and all output
files in a real project. The current integration intentionally does not incur a paid
Provider call or replace the installed client.
## Promotion Candidates
- Promoted in this Integration Gate; no unresolved candidate remains.

View File

@@ -47,8 +47,13 @@
- Electron Main to fixed Works Square routes is the only hosted Plugin transport.
Packages, Renderer state, Pi arguments/results, logs, and saved project metadata must
not expose Provider credentials, URLs, credit balances, raw responses, or Provider job
IDs. Saving a hosted result must use bounded project-relative paths and the existing
project write lease.
IDs. A confirmed Game Resource generation is one Main-owned submit-and-deliver
operation: submit once, poll internally, download every terminal output, and save it
below `assets/generated/game-resource/<executionId>/` in the project frozen at call
time. Provider/billing state and local delivery state remain separate. A delivery
retry or application restart may resume only local download/save work and must never
submit or charge again. The shared project write lease is held only while materializing
terminal outputs; the Agent does not choose paths, poll status, or confirm saving again.
- Native Web Search is a selected-model capability, not a Marketplace Plugin. Only an
exact verified capability may place `makelore_web_search` in a frozen parent worker;
it uses that worker's current model/provider/credential and ordinary model billing.
@@ -164,4 +169,4 @@
## Last Reviewed
2026-09-05
2026-09-06

View File

@@ -4,6 +4,7 @@ Use this index for searchable, traceable evidence records.
| Date | Topic | Status | Source | Detail |
|---|---|---|---|---|
| 2026-09-06 | Game Resource generation automatically delivers every output to the frozen project | Integrated on local `main`; live paid Provider and rebuilt installed-client smoke not run | Source `6113a2453299141eab8420a56e93675712dd607b`, product `4df4bc96245c01cd95e35ddf1b2b03d0e0d231c5`, source task `20260906-game-resource-auto-delivery-7a4e2c91`, integration task `20260906-game-resource-auto-delivery-integration-8c4e1a72`, ADR-008 | One confirmed generate call submits once; Main internally polls, downloads all terminal outputs, and writes them to the original frozen project. A durable receipt resumes local delivery without another Provider call or Token Point charge, and the shared write lease is held only during materialization. Agent-visible status/save tools and the second save confirmation are gone. Source evidence: 99 focused tests, 1,901 full unit tests/2 skips plus pressure, typecheck, lint, all Vite targets, 8 Electron tests, unified Plugins E2E 3/3, and Windows x64 runtime staging. No live paid generation, deploy, publication, push, installation, or packaged end-to-end smoke is claimed. |
| 2026-09-05 | Code-owned official project Plugins activate per project without partner assignment | Integrated on local `main`; rebuilt installed-client smoke pending | Initial Scaffold source/product `300ac89a81409440aac84ff45b1d9ca2fa186629` / `6710527e8f7150a6c4997d566a380454e33f455e`; broadened source/product `718783f6837e29f56c9add633596249c03e5701f` / `e0de7aa28c1d6e97454f0e4073ae9153e746bb4b`; tasks `20260905-official-plugin-project-scope-6e4a9c21` / `20260905-official-plugin-project-scope-integration-8b3d6f42`; ADR-008 | `makelore.data-service`, `makelore.game-resource`, and `makelore.project-scaffold` now enter every parent Agent after their existing delivery/acquisition and project-enable requirements, without partner assignment; child Agents remain empty and other package lifecycles are unchanged. TDD reproduced Main `skill_unassigned` and Renderer assignment-command failures. The broadened source passed 30 focused, 70 adjacent, and 37 resolver/composition tests, typecheck, lint, all Vite targets, and Electron E2E 1/1. The ordinary full unit run had one unrelated two-second real-process timing miss among 1,889 passes/2 skips; that file passed 6/6 alone. No rebuilt installed-client smoke is claimed. |
| 2026-09-03 | Device Package packaged prepare 与全部已启用资源加载 | Integrated on local `main`; rebuilt installed-client activation pending | Prepare source `5a2f0eb6785b59d8b455ed5cb1d9773351ff895a`, activation source `17664c5fffcfe695653b4146503e645f54767c4b`, tasks `20260902-local-skill-install-fix-6b3e91a4` / `20260903-load-installed-resources-8f3c1a72`, verified candidate `bd377c9`, main promotion task `20260903-promote-installed-resources-main-5c8e1a72` | Packaged package inspection now uses the distributed physical Pi runtime instead of importing an incomplete `app.asar` graph; closed Device Package failures remain closed across the bridge. The parent Agent Server keeps its generated Makelore extension first, passes every further Main-selected installed/enabled extension through Pi `0.84.2` `additionalExtensionPaths`, retains every selected Skill path, and keeps ambient discovery off. Packaged prepare without commit passed for loose `SKILL.md`, npm, and Git/Ponytail; a real Agent Server loaded two external extensions and exposed both commands. Across the two source tasks, focused tests, 222 files / 1,815 full unit tests / 2 conditional skips, pressure, typecheck, scoped lint, production build, Windows packaging, and artifact/Pi verification passed. The currently installed 1.2.6 client was not replaced, so no live installed-client success is claimed. |
| 2026-09-03 | Packaged Pi runtime-root resolver and local unsigned macOS arm64 artifact | Integrated locally; exact mounted-image bootstrap passed; signed release gate remains open | Source `5d7a235`, merge `4babd6d`, task `20260902-build-unsigned-mac-9d7e4a2c` | Node 24 did not honor the parent URL previously passed to `import.meta.resolve`, so an installed Agent Server searched beside the product resource script instead of staged `pi-runtime`. The replacement uses `findPackageJSON` from the explicit runtime manifest, selects the package import entry, rejects path escape, and imports the exact file URL. Focused real-process, full unit, typecheck, lint and Vite build passed at source. The corrected local-only unsigned DMG is 315,653,270 bytes with SHA-256 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`; direct initialize/shutdown passed both unpacked and from a read-only mounted image. It is not signed, notarized, published, or complete cross-platform evidence. |