From f721966f3c8db982279e34033b94b4347f0a8174 Mon Sep 17 00:00:00 2001 From: brother7 <7brother7@gmail.com> Date: Sat, 5 Sep 2026 13:25:31 +0800 Subject: [PATCH] docs: record official plugin project scope --- .project-docs/00-brief/success-criteria.md | 3 +- .../adr-008-interactive-ai-app-scaffold.md | 15 ++++-- .project-docs/10-decisions/decision-index.md | 2 +- .project-docs/20-architecture/data-flow.md | 6 +-- .project-docs/20-architecture/module-map.md | 4 +- .../20-architecture/system-overview.md | 6 +-- .project-docs/30-worklog/current-state.md | 27 ++++++++-- ...ugin-project-scope-integration-8b3d6f42.md | 53 +++++++++++++++++++ .project-docs/40-domain/business-rules.md | 31 ++++++----- .project-docs/40-domain/glossary.md | 1 + .project-docs/50-evidence/evidence-index.md | 2 +- .project-docs/80-commitments/commitments.md | 2 +- README.md | 6 +-- 13 files changed, 123 insertions(+), 35 deletions(-) create mode 100644 .project-docs/30-worklog/tasks/20260905-official-plugin-project-scope-integration-8b3d6f42.md diff --git a/.project-docs/00-brief/success-criteria.md b/.project-docs/00-brief/success-criteria.md index 0d7fd65..70a75a3 100644 --- a/.project-docs/00-brief/success-criteria.md +++ b/.project-docs/00-brief/success-criteria.md @@ -8,6 +8,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 和本机包的既有生命周期不变。 - Electron 双视口预检必须检查与最终 `built_archive` 相同的内存文件字节;预检失败不得上传,预检成功不得被表述为可信审核凭据。 - 上传协议必须同时携带源码归档、构建归档和严格版本化 artifact contract;服务端独立重算摘要、校验合同并固化不可变 Release。 - Renderer 不得获得发布凭据、归档、临时目录、构建 origin 或任意本地路径;旧客户端和旧 sandbox/browser 任务必须提示升级后重新构建提交。 @@ -38,4 +39,4 @@ ## Last Reviewed -2026-09-04 +2026-09-05 diff --git a/.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md b/.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md index 14fd830..63faffa 100644 --- a/.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md +++ b/.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md @@ -1,8 +1,8 @@ -# ADR-008: 交互式 AI 应用使用显式 Scaffold Skill +# ADR-008: 交互式 AI 应用 Scaffold 与官方项目插件采用项目级激活 - Status: Accepted / implemented, amended 2026-09-05 - Date: 2026-09-04 -- Applies to: Project creation, `ProjectType`, official bundled Marketplace Plugins, scaffold Skill, release readiness +- Applies to: Project creation, `ProjectType`, code-owned official project Plugins, scaffold Skill, release readiness ## Context @@ -10,12 +10,15 @@ 项目服务当前已经只负责 `.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/`,不生成业务源码、依赖、锁文件或发布模板。 -- 代码内置的官方 Marketplace Plugin `makelore.project-scaffold` 提供显式 Skill `makelore-project-scaffold`。它保留 Account Library 获取和项目启用语义,但不再要求或展示 Agent 分配:项目启用后,Main-owned effective resolver 自动把完整 Skill 集合提供给该项目的每个父 Agent;child Agent 仍为空。固定版本资源随 MakeLore 客户端交付,不经过 Package Store 下载。其脚本生成六个交互式 AI 应用起步文件;写入前预检全部目标,不覆盖已有路径,受控失败时只回滚本次创建的文件和目录。该项目级例外不改变其他 Plugin 的 Agent 分配规则。 +- 代码所有的官方项目插件 `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 的发布检查只是只读准备度指导:区分确定阻断、源码包排除影响、运行时/平台待确认项和静态已满足项,并引用项目相对证据。它不能宣称构建、上传、审核或生产发布成功。 @@ -25,7 +28,7 @@ - 模板可随官方 Plugin 版本演进,不再扩大项目创建服务的职责,也不需要把脚本上传为 Marketplace artifact。 - 旧项目无需批量迁移即可继续打开、生成脚手架和发布;新写入只使用规范类型。 - 发布规则在 Skill 中可被 Agent 解释和预检,但权威执行仍只有 Main 与 Works Square,避免形成第二套发布实现。 -- Project Scaffold 的既有 Agent assignment 数据不再参与有效资源计算,可以原样保留;账号移除或项目禁用仍会阻止新父 Agent 获得 Skill,运行中的 generation 仍按既有冻结边界切换。 +- 这三个代码所有官方身份的既有 Agent assignment 数据不再参与有效资源计算,可以原样保留;账号移除(适用时)或项目禁用仍会阻止新父 Agent 获得资源,运行中的 generation 仍按既有冻结边界切换。 - 对外分发仍需不可变 SemVer/Git 版本、服务端 bundled Release 元数据、已安装 Windows、签名 macOS 与 native Linux 运行证据;工作区测试不能替代这些发布门禁。 ## Supersedes @@ -44,4 +47,8 @@ - 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` diff --git a/.project-docs/10-decisions/decision-index.md b/.project-docs/10-decisions/decision-index.md index fe962af..d9dff27 100644 --- a/.project-docs/10-decisions/decision-index.md +++ b/.project-docs/10-decisions/decision-index.md @@ -4,7 +4,7 @@ | ID | Decision | Status | Date | Applies To | Detail | |---|---|---|---|---|---| -| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建与项目级官方 bundled Scaffold Skill、发布权威分离 | 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-05 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace delivery、project-wide activation、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` | diff --git a/.project-docs/20-architecture/data-flow.md b/.project-docs/20-architecture/data-flow.md index c1d7dbb..0d3d734 100644 --- a/.project-docs/20-architecture/data-flow.md +++ b/.project-docs/20-architecture/data-flow.md @@ -6,10 +6,10 @@ |---|---|---|---| | Marketplace catalog and Account Library | Signed-in Renderer intent | bounded Host API → Main Marketplace client/cache → Works Square catalog, Library, resolve, Admission, and download APIs | Main binds requests to the current Account and response generation. Free acquisition changes only Account Library; it does not install, enable a project, assign an Agent Skill, or authorize runtime execution. | | Marketplace device installation | Account Library entry and explicit channel | Main resolve/Admission/download → descriptor/signature/archive/client compatibility verification → immutable Package Store index switch | Stable and explicit Beta remain distinct even when they resolve to the same immutable Release. Failed install/update retains the previous current release; explicit uninstall waits only for protecting worker/account references and completes after the final worker exits. | -| Official bundled Plugin acquisition | Account Library entry for Game Resource or Project Scaffold | server stable bundled Release/Admission + exact MakeLore resource package | Free acquisition changes Library only and project enablement remains separate. Game Resource also retains Agent assignment; Project Scaffold is the project-wide `skill_only` exception and needs no assignment after project enablement. No device download, update, Beta, artifact signature, or device-uninstall action exists for either code-owned identity. Project Scaffold may execute only its bundled `.mjs`; historical Hosted Web Search entries are ignored. | +| Code-owned official Plugin activation | System-included Data Service or Account Library entry for Game Resource / Project Scaffold | existing delivery/acquisition + project enablement + exact MakeLore resource package | Delivery/acquisition and project enablement remain separate. Once enabled, all three identities enter every parent Agent without assignment; child Agents remain empty. No device download, update, Beta, artifact signature, or device-uninstall action exists for these code-owned identities. Project Scaffold may execute only its bundled `.mjs`; historical Hosted Web Search entries are ignored. | | 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 acquired official bundled 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. `makelore.project-scaffold` derives its applicable Skill set directly from project enablement; other Plugin assignments remain authoritative. 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. | +| 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. | | 桌面认证生命周期 | 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 | @@ -81,4 +81,4 @@ ## Last Updated -2026-09-04 +2026-09-05 diff --git a/.project-docs/20-architecture/module-map.md b/.project-docs/20-architecture/module-map.md index 2d729d4..3715779 100644 --- a/.project-docs/20-architecture/module-map.md +++ b/.project-docs/20-architecture/module-map.md @@ -6,7 +6,7 @@ |---|---|---| | `electron/coding-plugins/manifest.ts`, `release-descriptor.ts`, `signature-verifier.ts`, and `trusted-keys.ts` | Closed Plugin package/descriptor parsing, fixed code-owned resource roots, compatibility checks, canonical archive validation, and Ed25519 trust | Data Service plus exact Game Resource and Project Scaffold roots are code-owned. Other schema-2 packages still pass descriptor/signature/archive validation; downloadable P0 Skill assets remain text/image-only. Hosted Web Search is not a current Plugin root. | | `electron/coding-plugins/account-plugin-cache.ts`, `marketplace-client.ts`, and `package-store.ts` | Main-owned Account Library cache, authenticated server client, and atomic immutable device installation store | Account acquisition and device installation are separate. Package bytes switch atomically only after descriptor, signature, archive, client-range, and provenance checks; failed updates preserve the prior current release. | -| `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 | Project enablement and Agent Skill assignment are preserved independently except for the code-owned `makelore.project-scaffold` project-wide predicate: after Account acquisition and project enablement, all parent Agents receive its Skills without assignment. Trusted Marketplace artifacts, exact acquired official bundled definitions, and immutable local Device Package generations enter through distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. | +| `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. | @@ -93,4 +93,4 @@ ## Last Updated -2026-09-04 +2026-09-05 diff --git a/.project-docs/20-architecture/system-overview.md b/.project-docs/20-architecture/system-overview.md index 8fc1444..ec4afb3 100644 --- a/.project-docs/20-architecture/system-overview.md +++ b/.project-docs/20-architecture/system-overview.md @@ -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 | -| Official Bundled Plugins | Acquired code-owned bundled package → project enablement → effective parent snapshot | 两者都不经过设备下载、更新、Beta 或 artifact 签名。Game Resource 仍要求 Agent assignment 并进入固定 Works Square hosted route;Project Scaffold 是项目级 `skill_only` 例外,项目启用后自动进入每个父 Agent,且 `.mjs` 只来自签名客户端固定资源。Marketplace 下载包仍只接受 P0 文本/图片资源;child 不继承 Plugin。 | +| 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 下载包保持原规则。 | | 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 的一个未完成助手气泡中临时绘制且不生成独立整理进度栏 | @@ -80,7 +80,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展 - 客户端预检是可绕过的 UX fail-fast:没有可信 receipt,也不复刻生产 opaque-origin。服务端不执行项目 Vite,而是独立重算和校验 source/built/contract 字节、固化不可变 Release;人工审核仍不可绕过。未来若要求 runtime 强门禁,需由可信 verifier 绑定精确构建产物。 - `ProjectType` 由创建请求写入项目配置,UI 与 Host API 不提供类型变更。新项目只写 `interactive_ai_app` 或 `custom`;历史 `mini_game` / `mini_program` 在读取边界归一为 `interactive_ai_app` 且不因读取被改写,缺少类型的旧配置归一为 `custom`。 - 项目创建只拥有 `.makelore/project.json` 和 `knowledge/`。交互式 AI 应用起步树由用户明确调用 Scaffold Skill 生成;Skill 的发布准备度结论不执行也不替代 Main build/preflight/package/upload 或 Works Square 校验与审核。 -- `makelore.project-scaffold` 是代码所有的 bundled `skill_only` Marketplace Plugin。其官方 `.mjs` 只从固定客户端资源根加载;下载 artifact 的扩展名/资产校验没有放宽,仍拒绝 `.mjs`。 +- `makelore.data-service`、`makelore.game-resource` 与 `makelore.project-scaffold` 共用代码所有的项目级激活谓词;满足既有交付/获取条件并由项目启用后,其完整资源进入每个 parent Agent,不读取伙伴分配。Project Scaffold 是 bundled `skill_only` Marketplace Plugin,其官方 `.mjs` 只从固定客户端资源根加载;下载 artifact 的扩展名/资产校验没有放宽,仍拒绝 `.mjs`。 - 本地 `projectType` 只选择显式脚手架和内部构建路径,不是可信授权声明;Main 仍需安全打包,服务端仍需独立校验清单和包体。 - 云端确认上传成功后,本机 submission binding 失败只能产生固定、无路径的 `binding_warning`,不能把请求改判为失败;Renderer 仍继续轮询服务端校验与 Release 固化状态。 - 公共播放投影只有在上游 `playable === true`、版本名非空且 URL 通过同源 HTTPS、无 userinfo/loopback、长度、精确路径和无 query/fragment 校验时才可播放;不可信数据 fail closed。 @@ -107,4 +107,4 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展 ## Last Updated -2026-09-04 +2026-09-05 diff --git a/.project-docs/30-worklog/current-state.md b/.project-docs/30-worklog/current-state.md index 5de7710..6e3c6de 100644 --- a/.project-docs/30-worklog/current-state.md +++ b/.project-docs/30-worklog/current-state.md @@ -4,6 +4,24 @@ This file is the integrated default-branch snapshot. Feature tasks record progre ## Integrated Through +- Official project-wide Plugin activation source + `718783f6837e29f56c9add633596249c03e5701f` from task + `20260905-official-plugin-project-scope-6e4a9c21` is integrated onto local `main` + as `e0de7aa28c1d6e97454f0e4073ae9153e746bb4b` by task + `20260905-official-plugin-project-scope-integration-8b3d6f42`. The shared + activation predicate now treats `makelore.data-service`, + `makelore.game-resource`, and `makelore.project-scaffold` as code-owned official + project Plugins: after their existing system delivery or Account acquisition and + project enablement, every parent Agent receives the full Skill/tool set without an + Agent-assignment gate or partner-assignment action. Child Agents remain empty; + downloaded Marketplace and local Device Packages retain their existing lifecycles, + and stored assignments for the three official identities may remain inert. Source + verification passed 30 focused, 70 adjacent, and 37 resolver/composition tests, + typecheck, lint with 0 errors/5 unchanged warnings, all Vite targets, and the + targeted Electron project-Plugin journey. The ordinary full unit run had one + unrelated two-second Pi real-process timing miss among 1,889 passes/2 skips; that + exact file passed 6/6 in isolation. A rebuilt and installed client smoke is still + required; this source integration does not change an already running binary. - Project Scaffold project-wide activation source `300ac89a81409440aac84ff45b1d9ca2fa186629` from task `20260905-project-plugin-scope-7c4e9a21` is integrated onto local `main` as @@ -11,8 +29,9 @@ This file is the integrated default-branch snapshot. Feature tasks record progre `makelore.project-scaffold` remains Account-acquired and project-enabled, but no longer has an Agent-assignment gate or partner-assignment action. Main now materializes its complete Skill set for every parent Agent in the enabled project; child Agents remain - empty, active generations keep their existing freeze boundary, and all other Plugins - retain their assignment semantics. Source verification passed 45 focused and 87 + empty, active generations keep their existing freeze boundary. This was the initial + narrow exception and is superseded by the three-identity official rule above; Plugins + outside that set retain their assignment semantics. Source verification passed 45 focused and 87 adjacent tests, typecheck, lint with 0 errors/5 unchanged warnings, pressure, and all Vite targets. One unrelated two-second Pi real-process timing assertion failed in the ordinary full run and passed 6/6 in isolation. A rebuilt/installed-client smoke remains @@ -51,7 +70,9 @@ This file is the integrated default-branch snapshot. Feature tasks record progre it ships in the fixed signed-client resource root. Downloadable Marketplace artifacts remain text/image-only and reject `.mjs`; acquisition, project enablement, and immutable bundled Release/Admission remain distinct. Project Scaffold is project-wide - after enablement and has no Agent-assignment state; other Plugins retain assignment. + after enablement and has no Agent-assignment state; the same activation scope now also + covers Data Service and Game Resource, while Plugins outside the code-owned set retain + their own assignment rules. Main and Works Square retain build, preflight, artifact, upload, immutable Release, and review authority. Exact integration verification passed diff --git a/.project-docs/30-worklog/tasks/20260905-official-plugin-project-scope-integration-8b3d6f42.md b/.project-docs/30-worklog/tasks/20260905-official-plugin-project-scope-integration-8b3d6f42.md new file mode 100644 index 0000000..c9eb705 --- /dev/null +++ b/.project-docs/30-worklog/tasks/20260905-official-plugin-project-scope-integration-8b3d6f42.md @@ -0,0 +1,53 @@ +# Task: Integrate official project-wide Plugin activation + +## Identity + +- Task ID: 20260905-official-plugin-project-scope-integration-8b3d6f42 +- Mode: Integration +- Branch: main +- Worktree: D:\Datas\OthersProjects\makelore +- Base commit: 5e0a091955da7aadcf0c70a1a266fc3aa077359a +- Owner: codex-root +- Status: Ready for Integration + +## Scope + +- Integrate source commit `718783f6837e29f56c9add633596249c03e5701f` onto local `main` without changing its product tree. +- Promote the user-confirmed project-wide activation rule for the three code-owned official project Plugins: `makelore.data-service`, `makelore.game-resource`, and `makelore.project-scaffold`. +- Reconcile ADR-008, architecture, domain rules, README, evidence, current state, success criteria, and the installed-client release commitment with that rule. +- Preserve the root worktree's three adopted foreign untracked task records byte-for-byte. + +## Intent And Constraints + +- The screenshot proves Game Resource still exposed a redundant partner-assignment action. The shared predicate, not a stale Renderer-only label, was the cause. +- Account acquisition/delivery and project enablement remain independent where applicable. Once enabled, these three official project Plugins materialize for every parent Agent without Agent assignment; child Agents remain empty. +- Downloaded Marketplace and locally installed packages retain their current assignment and lifecycle semantics. Existing stored assignments for the three official identities remain inert and may be preserved. +- Source task records are read-only. The integrated source record may be adopted unchanged for the product commit, then removed from the coordinator checkpoint while the source branch retains it. +- No server, Marketplace policy, billing, Provider, Package Store, local-package, or deployment change is in scope. +- Concurrent Task Gate: Passed. Integration lock is held by this task on local `main`; the only root dirt is the three explicitly adopted foreign task records. +- Planning Gate: Passed after reading the source task, current project memory, ADR-008, architecture/domain documents, evidence, reflection, commitments, and stale items. The current canonical text conflicts with the newer explicit user decision, so Integration mode will amend it rather than preserve the obsolete Project-Scaffold-only exception. + +## Outcome + +- Integrated source `718783f6837e29f56c9add633596249c03e5701f` as local-main product commit `e0de7aa28c1d6e97454f0e4073ae9153e746bb4b`; the source and product commits have the identical tree `071647a125d6ecb7a100fe68dfe6db4e9845c166`. +- `isProjectWideCodingPluginId` now contains the closed code-owned set Data Service, Game Resource, and Project Scaffold. Main effective resolution and Renderer action projection consume the same predicate, so project-enabled parents no longer require or display partner assignment; children remain empty. +- Promoted the user-confirmed rule into ADR-008, decision index, current state, architecture, domain rules/glossary, success criteria, README, evidence, and release commitments. Obsolete Project-Scaffold-only wording was removed or marked as the earlier superseded checkpoint. +- Removed the duplicate foreign source task record only from the integration checkpoint. The source branch/commit retains its complete record. +- The three pre-existing adopted foreign untracked task records remain byte-for-byte unchanged. + +## Verification + +- Source record blob in the staged integration exactly matched source commit blob `42e3aad7b09755630d5ba90bfaebcffe5a072137` before the product commit. +- Source/product tree equality: both resolve to `071647a125d6ecb7a100fe68dfe6db4e9845c166`. +- Adopted source evidence: TDD RED reproduced four public failures; GREEN passed 30 focused, 70 adjacent, and 37 resolver/composition tests; typecheck, scoped/full lint, all Vite targets, and targeted Electron E2E 1/1 passed. Full unit recorded 1,889 passes/2 skips plus one unrelated two-second real-process timing miss that passed 6/6 alone. +- Root-worktree duplicate Vitest invocation was environment-blocked before collection because that checkout has no executable `vitest`; it produced no product failure or change. Exact source/product tree equality is the integration proof for the already verified product bytes. +- `git diff --check`, task-aware document drift, final clean tracked status, task-context completion, and exact untracked-path preservation are required at closeout. + +## Follow-ups + +- Rebuild and install a client from the new `main`, then verify Game Resource, Data Service, and Project Scaffold detail views contain no partner-assignment action and a new parent Agent receives their resources after project enablement. +- Local source integration does not update the already running installed MakeLore binary. + +## Promotion Candidates + +- Promoted in this Integration Gate; no unresolved candidate remains. diff --git a/.project-docs/40-domain/business-rules.md b/.project-docs/40-domain/business-rules.md index d2f9fa6..268d111 100644 --- a/.project-docs/40-domain/business-rules.md +++ b/.project-docs/40-domain/business-rules.md @@ -7,10 +7,11 @@ later consume Token Points, and system-included Data Service remains zero-charge. - Account Library, Device Installation, project enablement, Agent assignment, runtime authorization, and billing are separate states. No read, install, acquisition, or - assignment may silently advance another state. The sole code-owned activation-scope - exception is `makelore.project-scaffold`: Account acquisition and project enablement - remain separate, but project enablement intentionally makes its Skills available to - every parent Agent without creating or requiring assignment state. + assignment may silently advance another state. The code-owned project-wide identities + are `makelore.data-service`, `makelore.game-resource`, and + `makelore.project-scaffold`: their existing delivery/acquisition and project enablement + remain separate, but project enablement intentionally makes their Skills/tools + available to every parent Agent without creating or requiring assignment state. - Marketplace packages become effective only after closed manifest/descriptor parsing, canonical archive and client-compatibility checks, Ed25519 verification, immutable Package Store selection, project enablement, Agent projection, and current server @@ -21,11 +22,11 @@ worker or delete bytes it still owns. - System-included Data Service ships with MakeLore and has no Library acquisition, Admission, download, update, or device-uninstall action. Users may still enable it - per project and assign its Skill to an Agent. + per project; project enablement makes its Skill/tools available to every parent Agent. - Code-owned Game Resource is the optional bundled hosted Plugin. Its exact schema-2 manifest, Skill, and tools ship with MakeLore, so it has no device download, update, Beta, signature, or device-uninstall state. Account Library acquisition/removal, - project enablement, Agent assignment, current server policy, immutable Admission, + project enablement, current server policy, immutable Admission, explicit confirmation, and Token Point billing remain distinct. - Production Marketplace trust fails closed while the official Ed25519 public key is absent. Test-only/integration keys and packaged unknown-key rejection are evidence, @@ -33,8 +34,10 @@ implemented, but production package trust and real Provider activation remain closed until the official key and separate server pricing, credential, Admission, and acceptance gates are ready. -- A `platform_hosted` Skill or tool may enter only an installed, enabled, assigned, - trusted, compatible, policy-admitted parent Pi logical thread. Unknown, disabled, or +- A `platform_hosted` Skill or tool may enter only a delivered/installed, enabled, + trusted, compatible, policy-admitted parent Pi logical thread. Agent assignment is an + additional gate only for Plugin identities whose activation scope requires it; the + three code-owned project-wide identities bypass that gate. Unknown, disabled, or ineligible assignments stay inert; child workers receive no hosted Plugin projection. - A metered hosted mutation requires explicit client confirmation before resolve, Admission, or charging. Works Square owns price, payer, Token Point policy, and receipt @@ -67,10 +70,12 @@ Store, Release, Channel, Admission, project enablement, Agent assignment, or server billing state. - Code-owned official bundled Plugins may be `platform_hosted` or `skill_only`. - `makelore.project-scaffold` retains Account Library, project enablement, Release, and - Admission state while its exact Skill/templates/`.mjs` ship only in the signed client. - It is project-wide: once acquired and enabled for a project, every parent Agent receives - the Skill without partner assignment; child Agents remain empty. Downloadable + Data Service is system-included; Game Resource and `makelore.project-scaffold` retain + Account Library, project enablement, Release, and Admission state where applicable, + while their exact resources ship only in the signed client. All three are project-wide: + once their delivery/acquisition condition is satisfied and they are enabled for a + project, every parent Agent receives the full resource set without partner assignment; + child Agents remain empty. Downloadable Marketplace artifacts remain P0 text/image-only and must reject `.mjs`; official bundled authority is not inferred from provider metadata or an uploaded ZIP. @@ -159,4 +164,4 @@ ## Last Reviewed -2026-09-04 +2026-09-05 diff --git a/.project-docs/40-domain/glossary.md b/.project-docs/40-domain/glossary.md index 471cd0b..715c5d9 100644 --- a/.project-docs/40-domain/glossary.md +++ b/.project-docs/40-domain/glossary.md @@ -4,6 +4,7 @@ |---|---|---| | `ProjectType` | 创建项目时选择且之后不可变的产品类型 | 规范值为 `interactive_ai_app`、`custom`;历史 `mini_game` / `mini_program` 读取时归一为前者,缺少字段按 `custom` 处理 | | `BuildPreset` | 平台内部用于构建和验收项目包的受控实现 | 不等于 `ProjectType` 或 Scaffold 状态;交互式 AI 应用使用固定 Vite preset | +| Official Project Plugin | 由 MakeLore 代码所有、以项目启用作为生效范围的官方 Plugin | 当前闭合集合为 `makelore.data-service`、`makelore.game-resource`、`makelore.project-scaffold`;满足既有交付/获取条件并启用项目后自动进入每个 parent Agent,不使用伙伴分配,child 为空 | | Project Scaffold Skill | 官方 bundled Marketplace Plugin `makelore.project-scaffold` 中由用户明确调用、独立版本化的起步文件生成与发布准备度指导 | `.mjs` 只来自固定客户端资源;不覆盖路径、不安装/构建/上传/提审;项目创建服务和 Main/Works 发布权威不属于该 Skill | | Main-owned Release Build | Electron Main 对安全源码快照执行固定 npm 与项目 lockfile Vite 的本地构建 | Vite config/plugins 以桌面用户权限执行,不是 sandbox;Renderer 不获得路径、归档或 origin | | Artifact Contract | 与 source/built 双归档一并上传的严格版本化清单 | 服务端把三者视为不可信输入并独立逐字节重算、校验 | diff --git a/.project-docs/50-evidence/evidence-index.md b/.project-docs/50-evidence/evidence-index.md index 2ac1b57..4d25d7d 100644 --- a/.project-docs/50-evidence/evidence-index.md +++ b/.project-docs/50-evidence/evidence-index.md @@ -4,7 +4,7 @@ Use this index for searchable, traceable evidence records. | Date | Topic | Status | Source | Detail | |---|---|---|---|---| -| 2026-09-05 | Project Scaffold project-wide parent-Agent activation | Integrated on local `main`; rebuilt installed-client smoke pending | Source `300ac89a81409440aac84ff45b1d9ca2fa186629`, product `6710527e8f7150a6c4997d566a380454e33f455e`, tasks `20260905-project-plugin-scope-7c4e9a21` / `20260905-project-plugin-scope-integration-4d8a2c71`, ADR-008 | An acquired and project-enabled `makelore.project-scaffold` now enters every parent Agent without partner assignment; child Agents remain empty and every other Plugin keeps its assignment semantics. TDD reproduced the old `skill_unassigned` boundary, then 45 focused and 87 adjacent tests, typecheck, lint, pressure, and all Vite targets passed. The ordinary full suite had one unrelated two-second real-process timing miss among 1,888 passes/2 skips; that file passed 6/6 alone. No package/install 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. | | 2026-09-03 | Makelore Code foreground Snapshot reconciliation and attention-only Conversation markers | Integrated locally; installed-app cause correlated and source regression suites passed | Foreground source `7aa118b` / merge `04320dd`, badge source `f2c3755` / merge `bbfe16d`, tasks `20260903-diagnose-recurring-stall-a83f5c21` and `20260902-conversation-badge-a7c49e` | The diagnosed installed run had already persisted an aborted terminal and Main had completed it with `project_deactivated`; no tool child or network work remained, while Renderer retained a cached `live` Snapshot. Coding now closes stale SSE on `lifecycle:sleep` and refreshes the selected Main-owned Snapshot on view/project context, visibility, and focus without replaying any mutation. Hidden red markers now arise only for a new pending interaction or a new completed/failed/aborted run, not assistant/thinking/tool progress or an individual tool failure. Source verification covered 45 focused foreground tests, 28 focused badge-store tests, full suites, typecheck, lint, production builds, and real Electron regressions. | diff --git a/.project-docs/80-commitments/commitments.md b/.project-docs/80-commitments/commitments.md index 7ece578..e1ebd33 100644 --- a/.project-docs/80-commitments/commitments.md +++ b/.project-docs/80-commitments/commitments.md @@ -13,7 +13,7 @@ Track future-facing memory: promised follow-ups, unfinished loops, timed checks, | 2026-08-16 | 验收 Prompt Museum 与 Canvas 删除/重报价的真实服务端链路 | 发布包含 `26b52d7` Canvas 行为的安装包前 | 客户端/服务端集成 | Pending | 使用真实 Works 账号核对 Museum 列表/详情/分页/筛选/署名/CDN/Prompt 回填,并确认固定相对媒体路径可经 Main Bearer 代理、401 刷新、10 MiB/可信 raster MIME 边界后在 Renderer 展示;核对最终 Prompt/options 重报价和确认设计点;删除 Workspace 后确认软删除可见性、未提交任务取消/预留积分释放、已运行任务结算。保留 Main 错误脱敏和严格 DTO/HTTPS 投影,不以客户端回归替代服务端验收 | | 2026-08-16 | 验收 default-on Robot Guided Hotspot Binding 的 Windows/macOS 真实设备链路 | 下一份包含页面内热点连接行为的安装包发布前 | 客户端/硬件/服务端集成 | Pending | 核对精确出货固件与固定 Portal、六位码发行/消费语义;执行 Windows Robot 真机扫描/连接、签名 macOS x64/arm64 CoreLocation/CoreWLAN/worker/ASAR/Koffi smoke,以及真实 Host/native Electron 端到端配网+Binding;保留 `NIANCODE_AI_HARDWARE_GUIDED_HOTSPOT_BINDING=0` 回滚并记录支持矩阵 | | 2026-08-10 | 完成客户端提交到 App `play_url` 播放的真实生产整链验收 | source+built+contract 服务端协议、OSS immutable Release、CDN/Edge 与 App 消费链成组集成后 | 客户端/服务端集成 | Pending | 服务端先部署支持规范 `interactive_ai_app` 和历史别名的合同,再安装匹配客户端;使用真实账号执行交互式 AI 应用创建、显式 Scaffold Skill 初始化、客户端本地构建与同字节预检、双归档提交、服务端逐字节校验/不可变 Release 固化、运营批准、CDN 发布、App 播放与监控核对。旧 `mini_game` / `mini_program` 只验证兼容读取,不作为新建选项;如需不可绕过 runtime gate,另行设计可信 verifier | -| 2026-08-12 | Windows/macOS 发布流水线保留固定 npm/Pi 运行时与 Device Package 产物门禁 | 每次生成正式 Windows 或 macOS 安装器时 | 客户端发布 | Partial / Pending | 运行目标平台的 publish-runtime、artifact、Pi 与 final packaged proof;启动最终 Agent Server 并确认它从 staged `pi-runtime` manifest/root 初始化,再用安装后的首个 Conversation 确认不出现 runtime-unavailable 投影。安装 exact-main 客户端后,还需完成至少一个 npm/Git/loose-Skill prepare→confirm 流程,并以包含两个 extension 的已启用 Device Package generation 验证首个 Makelore bridge 与所有附加 extension/Skill 均生效、禁用项不加载、新/idle parent 刷新且 child 为空;同时以账号已获取、项目已启用但未分配伙伴的状态运行 `makelore-project-scaffold`,验证每个父 Agent 自动获得 Skill、child 为空、应用 Node 路径和既有文件不覆盖。源 `5d7a235` 已通过本地未签名 macOS arm64 DMG 的 read-only mounted-image initialize/shutdown,DMG SHA-256 为 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`;当前安装的 1.2.6 客户端早于 `5a2f0eb` / `17664c5` 修复。仍需签名/公证、完整 process proof、实际替换安装与首个 Conversation、新 Windows artifact,以及签名 macOS 和 native Linux 的脚手架 Skill 运行证据;不得以 prepare-only 或 workspace real-process 测试替代。 | +| 2026-08-12 | Windows/macOS 发布流水线保留固定 npm/Pi 运行时与 Device Package 产物门禁 | 每次生成正式 Windows 或 macOS 安装器时 | 客户端发布 | Partial / Pending | 运行目标平台的 publish-runtime、artifact、Pi 与 final packaged proof;启动最终 Agent Server 并确认它从 staged `pi-runtime` manifest/root 初始化,再用安装后的首个 Conversation 确认不出现 runtime-unavailable 投影。安装 exact-main 客户端后,还需完成至少一个 npm/Git/loose-Skill prepare→confirm 流程,并以包含两个 extension 的已启用 Device Package generation 验证首个 Makelore bridge 与所有附加 extension/Skill 均生效、禁用项不加载、新/idle parent 刷新且 child 为空;同时分别以 Data Service(随应用提供)、Game Resource / Project Scaffold(账号已获取)且项目已启用、未分配伙伴的状态打开新 parent Agent,验证三者自动获得完整 Skill/tool、child 为空,插件详情不显示伙伴分配;Project Scaffold 还需验证应用 Node 路径和既有文件不覆盖。源 `5d7a235` 已通过本地未签名 macOS arm64 DMG 的 read-only mounted-image initialize/shutdown,DMG SHA-256 为 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`;当前安装的 1.2.6 客户端早于 `5a2f0eb` / `17664c5` / `718783f` 修复。仍需签名/公证、完整 process proof、实际替换安装与首个 Conversation、新 Windows artifact,以及签名 macOS 和 native Linux 的脚手架 Skill 运行证据;不得以 prepare-only 或 workspace real-process 测试替代。 | | 2026-08-10 | 删除客户端 `runtime_url` 兼容回退 | 一个客户端兼容版本结束,且服务端与存量数据稳定提供 `play_url` | 客户端 | Pending | 删除类型字段、读取分支和对应回归测试 | | 2026-08-11 | 部署并验收 AI 绘画多 Conversation 服务端契约 | 发布包含多会话客户端之前 | 客户端/服务端集成 | Pending | 确认迁移 `0033`、Conversation list/create/read/turn/confirm API、持久 Agent Session 与事件字段已上线 | | 2026-08-12 | 复核 AI 编程 Provider 错误与重试投影 | 升级 Pi、Works gateway 或上游 Provider 错误格式时 | 客户端/Pi/provider 集成 | Pending | 重新验证确定性 Works user-context 缺失仍会 expire credential、非重试 fail fast、固定脱敏为 `CODING_PROVIDER_AUTH_REQUIRED`,并且不会被后续 `agent_settled` 改写为 completed;不得把其他 401/429/5xx 扩大归类。 | diff --git a/README.md b/README.md index 533f85f..fe265a7 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Makelore 是一个面向软件、视觉创作、互动学习与智能机器人 - AI 绘画健壮性:Renderer 为每次命令生成稳定 operation id,网络结果未知时保留原命令供原样重试,不把未知写入当失败或创建第二次生成。Main 负责 Token 刷新、Agent Gateway REST 提交和有界 Run 查询,并将可恢复事件流投影为 Host API SSE;断线后按事件游标续接并重新读取权威 Workspace。Canvas 只使用 Works Square 云端 V2 契约,没有本地语义适配器或降级路径,上游不可用时明确报错。 - AI 绘画项目栏只展示 Workspace,不再在项目下创建独立设计会话。删除时必须完整输入项目名称;删除后项目、Living Form、任务、参考图和生成作品会从账户中隐藏且无法访问,不影响用户已另存到磁盘的副本。删除当前项目后自动打开最近更新的剩余项目,删除最后一个项目后进入空状态。 - AI 学习:主区展示服务端分页项目卡片,详情页用安全 Markdown 渲染 README;原始 HTML 被禁用,Markdown 图片节点直接加载服务端校验后的无凭据 HTTPS URL,包括 SVG 和 Electron 支持的其他图片格式,不经过服务端下载、识别、转码或镜像。下载按钮打开系统保存对话框,Main 不按 `Content-Length`、声明字节数或客户端上限阻断下载,流式校验 SHA-256 与 ZIP 签名后原子保存。客户端不提供课程生成、课程播放器、本地课程库、Agent、ASR 或课堂 runtime。运营管理与接口字段见 [`docs/learning-project-catalog-server-contract.md`](docs/learning-project-catalog-server-contract.md)。 -- 插件工作台:Code 侧栏只有一个“插件”入口,`/plugins` 在同一列表中投影官方目录、账号 Library、本机 Device Packages 与当前项目状态;旧 Marketplace、My Plugins、Project Plugins URL 只做确定性筛选重定向。来源身份保持 `official:`、`local:`、`retained:` 分离;“免费获取”、官方设备交付、项目启用和伙伴分配仍分别写入既有 authority,不会自动推进下一步。任一来源失败不会清空其他来源;本机 Skill/Pi 插件仍只能通过对话安装,页面只管理已安装包并明确其本机全局生效范围。 +- 插件工作台:Code 侧栏只有一个“插件”入口,`/plugins` 在同一列表中投影官方目录、账号 Library、本机 Device Packages 与当前项目状态;旧 Marketplace、My Plugins、Project Plugins URL 只做确定性筛选重定向。来源身份保持 `official:`、`local:`、`retained:` 分离;“免费获取”、官方设备交付和项目启用仍分别写入既有 authority,不会自动推进下一步。Data Service、游戏资源生成、项目初始化与发布检查这三个代码所有的官方项目插件在项目启用后随项目生效,不提供伙伴分配;需要分配的下载型 Marketplace 插件仍保留既有规则。任一来源失败不会清空其他来源;本机 Skill/Pi 插件仍只能通过对话安装,页面只管理已安装包并明确其本机全局生效范围。 - 官方插件运行架构:Renderer 只调用 Main-owned Marketplace facade;Main 负责账号、请求 deadline、签名/摘要校验、不可变 Release、current selection 与原子回滚。Pi parent worker 使用冻结的 effective snapshot,将每个有效 Skill 与已验证 Package Store root 成对传给 resource loader、Extension Host 和 CLI;`skill_only` 不依赖运行时 Policy,也不执行分发包中的任意代码。正式激活仍等待官方 Ed25519 公钥(production key activation HOLD);生产私钥只能来自部署 secret,测试使用注入的临时密钥。 - 原生 Web Search 是冻结 selected model/provider/credential 的 parent-only 模型工具;只有 Works `model_capabilities` 明确声明支持时才出现,使用当前模型的正常计费链,不依赖 Marketplace 获取、Release、Admission、Hosted Provider 或 `agent_browser` 回退。 - 本机 Device Packages 只由 Conversation 工具发起安装,支持 npm、Git、绝对本地 Plugin 目录和 loose `SKILL.md`。Main 在预览和独立确认后提交不可变本机 generation,禁用生命周期脚本;确认界面明确提示 Pi extension 以桌面当前用户权限执行。新建/空闲 parent 会同时加载所有显式安装且当前启用的 Skill,以及必需 Makelore 扩展之外的全部 Pi extension,active parent 在 turn settled 后切换,child 不继承这些资源,也不会扫描 ambient 项目或用户目录;Renderer 不提供安装源选择器。 @@ -115,8 +115,8 @@ Pi 正式包必须继续运行 `pnpm run verify:artifact:pi`、`pnpm run smoke:p ### 项目内置编码技能 - 产品内置四个核心编码技能根:`agent-browser`(开发浏览器)、`frontend-slides`(项目演示)、`grilling`(方案质询)和 `planning-with-files`(项目规划),统一从 vendor-neutral 的 `resources/coding-skills/` 打包。`data-service`(开发数据)由固定的 `resources/coding-plugins/data-service/` 插件包持有,不在核心技能根中复制路径或定义。 -- Marketplace 官方插件 Skill 从已签名 Package Store Release 或受控内置定义动态物化,不进入核心技能根;只有 parent worker 的冻结 effective snapshot 满足对应账号、设备、项目与伙伴条件时才生效,child worker 不继承 hosted tool。所选模型的 Web Search 与 Conversation 安装的设备包使用各自独立的 Main-owned 合同,不属于这条 Marketplace 生命周期。 -- 项目插件“启用”和把插件技能分配给智能体是两个独立动作:只有项目已启用 Data Service 时,未分配的 `data-service` 才可供新选择;禁用后,已有分配仍会显示并继续保存在智能体的 `skillIds`,但处于不可用且不生效的状态,重新启用后恢复生效。未启用的技能不进入该智能体的有效 Pi 资源集合。 +- Marketplace 官方插件 Skill 从已签名 Package Store Release 或受控内置定义动态物化,不进入核心技能根;parent worker 的冻结 effective snapshot 必须满足对应账号、设备、项目、Policy,以及该插件确实要求时的伙伴分配条件,child worker 不继承 hosted tool。所选模型的 Web Search 与 Conversation 安装的设备包使用各自独立的 Main-owned 合同,不属于这条 Marketplace 生命周期。 +- `makelore.data-service`、`makelore.game-resource` 与 `makelore.project-scaffold` 是代码所有的官方项目级例外:满足各自既有账号获取或随应用提供条件并在项目启用后,其完整 Skill/tool 集合自动进入该项目的每个 parent Agent,不要求或展示伙伴分配;禁用项目插件后未来 worker 不再加载,既有 assignment 数据可原样保留但不参与生效判断。其他 Marketplace 插件继续按自身 assignment 规则计算有效资源。 - `data-service` 只在用户显式请求后触发:先检查并说明最小集合,用户确认后配置一次、复制 SDK 资产,再用本地预览执行 put/read-back;它不用于已发布作品。 - 创建项目智能体时,`agent-browser`、`grilling` 与 `planning-with-files` 默认启用;`frontend-slides` 作为专项能力可手动启用。用户可以在创建或编辑智能体时调整选择。最终选择写入项目智能体的 `skillIds`。 - `grilling` 会在复杂实现前逐项确认高影响决策,用户确认前不执行变更。`planning-with-files` 只在复杂、可分阶段或需要跨会话恢复的任务中使用,并把 `task_plan.md`、`findings.md` 和 `progress.md` 直接保存到当前项目根目录,不写入 Skill 安装目录、用户目录或隐藏配置目录。