docs: record automatic game resource delivery
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 集合提供给该项目的每个父 Agent;child 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 下载 artifact:P0 下载包仍只接受文本/图片 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`
|
||||
|
||||
@@ -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` |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 Square;Renderer 不反向读取 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
|
||||
|
||||
@@ -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 8;Server 退出统一使旧 channel 失效并按需单实例重启 |
|
||||
| Pi Provider & Managed Resources | Provider catalog、thread-local secret projection、model/resource revision、Prompt/Skill/extension materialization、selected-model tools | 父凭据只进入选中逻辑线程的内存 credential store,child 凭据只进入该短命进程;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,项目启用后自动进入每个父 Agent;child 不继承 Plugin。三者不经过设备下载、更新、Beta 或 artifact 签名;Game Resource 仍进入固定 Works Square hosted route,Project 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,项目启用后自动进入每个父 Agent;child 不继承 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 Specification,Renderer 只持有草稿和已接受投影 |
|
||||
| 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
|
||||
|
||||
@@ -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 打包已删除且没有兼容读取路径;历史课程数据保留但不再读取。服务端和客户端源码契约已完成,不代表生产部署或真实账号安装包联调已经完成。
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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. |
|
||||
|
||||
Reference in New Issue
Block a user