integrate completed September 6 product changes
This commit is contained in:
@@ -2,12 +2,14 @@
|
||||
|
||||
## Status
|
||||
|
||||
Accepted / implemented
|
||||
Accepted / implemented, amended 2026-09-07
|
||||
|
||||
## Date
|
||||
|
||||
2026-08-30
|
||||
|
||||
Last amended: 2026-09-07
|
||||
|
||||
## Context
|
||||
|
||||
ADR-001 modeled a Workspace as multiple independently selected Conversations, each
|
||||
@@ -16,6 +18,11 @@ form edits, Quote options, and provider prompts competing representations of the
|
||||
same design. The coordinated Works Square and MakeLore V2 cutover now provides one
|
||||
versioned Design Specification and a persistent form throughout the design flow.
|
||||
|
||||
The September 7 Canvas presentation refinement keeps that authority model while
|
||||
making the current production plan easier to edit: conversation and the sole active
|
||||
plan stay together, Workspace navigation moves to a right Works rail, and references
|
||||
are expressed through public Prompt aliases bound to canonical Assets.
|
||||
|
||||
## Decision
|
||||
|
||||
- One Workspace exposes one current Direction, one persistent Agent Session, one
|
||||
@@ -35,6 +42,21 @@ versioned Design Specification and a persistent form throughout the design flow.
|
||||
- Electron Main is the only Canvas network authority. Development and packaged
|
||||
builds use the Works Square V2 contract; there is no V1 DTO adapter, local semantic
|
||||
adapter, mutable Quote PATCH, editable provider Prompt, or cloud-failure fallback.
|
||||
- The visible Canvas has two regions: a flexible central conversation timeline with
|
||||
the only active editable production plan, and a full-height right Works rail for
|
||||
Workspace navigation. Compact layouts expose that rail as a right Sheet. Terminal
|
||||
submitted plans collapse into conversation history; they do not create a second
|
||||
current-plan authority.
|
||||
- The public `content.concept` projection is the directly editable final Prompt.
|
||||
References retain stable reference IDs and typed Workspace Asset bindings while
|
||||
appearing in that Prompt as continuous `@图片N` aliases. The Prompt is the only
|
||||
visible expression of how a reference affects generation; the adjacent row manages
|
||||
binding/file state only. An unbound referenced alias blocks Quote availability and
|
||||
exposes a targeted upload slot.
|
||||
- Prompt, reference binding, type, aspect-ratio, duration, or output-count changes
|
||||
enter the existing typed reducer and create a new Specification revision. An offered
|
||||
plan must be recompiled to a fresh immutable Quote before confirmation. Reference
|
||||
count/media limits come from service capabilities, not client-only constants.
|
||||
|
||||
## Rationale
|
||||
|
||||
@@ -51,6 +73,9 @@ and uncertain retries auditable without exposing provider internals.
|
||||
old clients and V1 semantic writers receive no compatibility window.
|
||||
- Production database cutover, paid Provider activation, and real-account installed
|
||||
client smoke remain separate operator gates.
|
||||
- Layout and reference aliases are public projections, not new semantic authorities.
|
||||
Any future UI must preserve one active plan, stable Asset identity, and the exact
|
||||
Specification-revision/Quote boundary even if its visual arrangement changes.
|
||||
|
||||
## Supersedes
|
||||
|
||||
@@ -61,3 +86,6 @@ and uncertain retries auditable without exposing provider internals.
|
||||
- Client source `b0b5a602b501308a23eb27e2f51a5169b9e46b1e`
|
||||
- Server source `b5351d54f595ce8eb873593e462e4a556bea0b05`
|
||||
- Server ADR `ADR-2026-08-28-001`
|
||||
- Canvas refinement source `1562a49`
|
||||
- Canvas refinement integration merge `ea1219c`
|
||||
- Source task `20260906-canvas-reference-images-c4e97a`
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# ADR-008: 交互式 AI 应用使用显式 Scaffold Skill
|
||||
|
||||
- Status: Accepted / implemented
|
||||
- Status: Accepted / implemented, amended 2026-09-07
|
||||
- Date: 2026-09-04
|
||||
- Last amended: 2026-09-07
|
||||
- Applies to: Project creation, `ProjectType`, official bundled Marketplace Plugins, scaffold Skill, release readiness
|
||||
|
||||
## Context
|
||||
@@ -10,12 +11,15 @@
|
||||
|
||||
项目服务当前已经只负责 `.makelore/project.json` 与 `knowledge/`。用户确认将小游戏和小程序合并为一个“交互式 AI 应用”类型,并把生成文件、目录以及提交审批要求放进由官方 Marketplace 管理、随签名客户端交付的 Skill。
|
||||
|
||||
后续面向青少年用户的验证表明,要求用户在创建时理解产品类型、模板、UUID 与初始化状态仍是多余门槛。用户进一步确认普通创建只应选择目录,其余身份与安全默认由客户端和 Main 自动处理;Scaffold Skill 保持可选能力,而不是创建或进入聊天的前置步骤。
|
||||
|
||||
## Decision
|
||||
|
||||
- 新建项目只提供规范产品类型 `interactive_ai_app`(显示为“交互式 AI 应用”)和 `custom`。`ProjectType` 创建后仍不可变。
|
||||
- 普通新建项目只要求选择目录,不展示产品类型、模板、原始 UUID、绑定或独立副本选项。Renderer 写入内部默认 `interactive_ai_app`,Main 生成规范 UUID;`ProjectType` 创建后仍不可变。既有 `custom` 项目和底层兼容入口继续支持,但 `custom` 不再作为普通新建选项。
|
||||
- `mini_game` 与 `mini_program` 只作为历史读取和脚手架兼容别名,在内存中归一为 `interactive_ai_app`。读取或运行脚手架不会改写原配置;后续普通配置变更可以保存规范值。缺少类型字段的旧项目仍归一为 `custom`。
|
||||
- 项目创建只生成 `.makelore/project.json` 和 `knowledge/`,不生成业务源码、依赖、锁文件或发布模板。
|
||||
- 代码内置的官方 Marketplace Plugin `makelore.project-scaffold` 提供显式 Skill `makelore-project-scaffold`。它保留 Account Library 获取、项目启用和 Agent 分配语义,但固定版本资源随 MakeLore 客户端交付,不经过 Package Store 下载。其脚本生成六个交互式 AI 应用起步文件;写入前预检全部目标,不覆盖已有路径,受控失败时只回滚本次创建的文件和目录。
|
||||
- Main 为新项目自动生成 UUID,并为“其他 metadata 有效、仅缺 `projectId`”的旧配置串行补齐并持久化一次。原始 UUID、bind/independent-copy 选择不进入普通 UI;其他 metadata 缺失或无效仍是配置错误。旧 `initialized` 布尔只保留为 schema 兼容字段,不得阻断有效项目导航、聊天或首个 Agent 创建。
|
||||
- 代码内置的官方 Marketplace Plugin `makelore.project-scaffold` 提供可选显式 Skill `makelore-project-scaffold`。它不是项目创建或聊天前置条件;其 Account Library 获取、项目启用和 Agent 分配语义保持独立,固定版本资源随 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 的发布检查只是只读准备度指导:区分确定阻断、源码包排除影响、运行时/平台待确认项和静态已满足项,并引用项目相对证据。它不能宣称构建、上传、审核或生产发布成功。
|
||||
@@ -23,13 +27,14 @@
|
||||
## Consequences
|
||||
|
||||
- 模板可随官方 Plugin 版本演进,不再扩大项目创建服务的职责,也不需要把脚本上传为 Marketplace artifact。
|
||||
- 旧项目无需批量迁移即可继续打开、生成脚手架和发布;新写入只使用规范类型。
|
||||
- 普通用户可从目录选择直接进入 `/chat`;没有 Agent 时显示非阻塞空状态并提供创建首个 Agent 的入口。Project Configuration 仍处理真正无效的 metadata,但不再承担初始化仪式。
|
||||
- 旧项目无需批量迁移即可继续打开、生成脚手架和发布;普通新写入使用内部默认 `interactive_ai_app`,既有 `custom` 与历史类型保持兼容。
|
||||
- 发布规则在 Skill 中可被 Agent 解释和预检,但权威执行仍只有 Main 与 Works Square,避免形成第二套发布实现。
|
||||
- 对外分发仍需不可变 SemVer/Git 版本、服务端 bundled Release 元数据、已安装 Windows、签名 macOS 与 native Linux 运行证据;工作区测试不能替代这些发布门禁。
|
||||
|
||||
## Supersedes
|
||||
|
||||
本决定取代 2026-08-09 的双可发布类型与创建时自动生成模板行为;固定 Vite 构建、artifact contract、运营审核与公共播放边界保持不变。
|
||||
本决定取代 2026-08-09 的双可发布类型与创建时自动生成模板行为,并于 2026-09-07 取代创建时的类型/身份选择及 `initialized` 工作区 gate;固定 Vite 构建、artifact contract、运营审核与公共播放边界保持不变。
|
||||
|
||||
## Related Evidence
|
||||
|
||||
@@ -41,3 +46,6 @@
|
||||
- Marketplace source task: `20260904-marketplace-scaffold-client-6c4e8a21`
|
||||
- Marketplace integration task: `20260904-project-scaffold-integration-client-4f2a8c71`
|
||||
- Proposal: `10-decisions/proposals/20260904-project-scaffold-implementation-7e4c2a91__interactive-ai-app-type.md`
|
||||
- Simplified-creation source commit: `af13aca`
|
||||
- Simplified-creation integration merge: `39d7b7e`
|
||||
- Simplified-creation source task: `20260906-remove-project-gate-7c31`
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
| ID | Decision | Status | Date | Applies To | Detail |
|
||||
|---|---|---|---|---|---|
|
||||
| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建与官方 bundled Scaffold Skill、发布权威分离 | Accepted / implemented, amended 2026-09-04 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace 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-008 | 交互式 AI 应用使用单一内部默认类型;目录式创建、Main-owned UUID、可选 bundled Scaffold Skill 与发布权威分离 | Accepted / implemented, amended 2026-09-07 | 2026-09-04 | Project creation、`ProjectType`/identity、Official Plugins、Marketplace delivery、release readiness | `adr-008-interactive-ai-app-scaffold.md` |
|
||||
| ADR-007 | AI Design 采用单一 Current Specification、Living Form 与不可变 Quote 的 V2 权威;active plan 与 reference alias 是其公共投影 | Accepted / implemented, amended 2026-09-07 | 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` |
|
||||
| ADR-004 | Works Square 统一拥有桌面认证生命周期边界 | Accepted / implemented | 2026-08-19 | Renderer、Host API、Electron Main、Works Square auth facade | `adr-004-square-auth-lifecycle-boundary.md` |
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
# Project Configuration owns Plugin navigation
|
||||
|
||||
## Status
|
||||
|
||||
Proposed for integration; implemented and verified in task
|
||||
`20260906-move-plugins-project-settings-7c91a4e2`.
|
||||
|
||||
## Date
|
||||
|
||||
2026-09-06
|
||||
|
||||
## Context
|
||||
|
||||
The integrated product exposed one reviewed unified Plugin workspace at
|
||||
`/plugins` through a standalone Code sidebar entry. Project Configuration no
|
||||
longer contained its predecessor Plugin Services sheet. The user first directed
|
||||
that Plugins belong in Project Settings, then clarified that the workspace must
|
||||
live on the same project page used to configure Agents and Skills rather than
|
||||
replace that page after navigation.
|
||||
|
||||
The navigation change must not collapse the existing independent lifecycles for
|
||||
Marketplace acquisition, device installation, project enablement, Agent Skill
|
||||
assignment, runtime authorization, and billing. It also must not restore the
|
||||
retired duplicate sheet or move Main-owned Plugin authority into Renderer code.
|
||||
|
||||
## Decision
|
||||
|
||||
- The Agent/Skill Project Configuration page is the visible owner of the single
|
||||
unified Plugin workspace.
|
||||
- Its `插件` resource card opens the workspace in a wide same-page drawer. The
|
||||
Project Configuration page remains mounted behind it.
|
||||
- `/project-config/plugins` is the canonical deep link for the drawer-open state;
|
||||
it renders Project Configuration rather than a standalone Plugin page.
|
||||
- `/plugins` preserves query and navigation state while redirecting to the
|
||||
canonical URL. `/plugin-marketplace`, `/my-plugins`, and `/project-plugins`
|
||||
remain deterministic filtered compatibility redirects.
|
||||
- The Code sidebar has no standalone Plugin entry.
|
||||
- The canonical workspace remains accessible before Code Provider initialization
|
||||
and when no project is active, so Marketplace and account/device views do not
|
||||
incorrectly depend on local project selection.
|
||||
- The existing unified controller, data sources, mutation semantics,
|
||||
authentication, and lifecycle separation remain unchanged.
|
||||
|
||||
## Rationale
|
||||
|
||||
Plugin installation and activation configure resources that projects may use, so
|
||||
Project Configuration is the clearer navigation owner. Reusing the unified
|
||||
workspace avoids competing product surfaces and preserves one authoritative view
|
||||
across Marketplace, Account Library, device packages, and project status.
|
||||
Compatibility redirects protect existing deep links and authenticated return
|
||||
flows while establishing an unambiguous canonical location.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Project Configuration gains a Plugin card beside models, Skills, and knowledge,
|
||||
with access retained in the no-active-project state.
|
||||
- Closing the Plugin drawer returns to the already-mounted Project Configuration
|
||||
page; Agent assignment actions close the drawer to expose that same page.
|
||||
- Existing bookmarks continue to work, but tests and new product links should use
|
||||
`/project-config/plugins`.
|
||||
- Canonical project memory that names the Code sidebar or `/plugins` as the sole
|
||||
current entry must be superseded during Integration Mode.
|
||||
- No backend contract, package trust boundary, runtime permission, billing rule,
|
||||
or native Web Search behavior changes.
|
||||
|
||||
## Supersedes
|
||||
|
||||
- The navigation-only claim that the Code sidebar owns the single `插件` entry and
|
||||
`/plugins` is the canonical product route.
|
||||
- It does not supersede the retirement of the duplicate Project Configuration
|
||||
Plugin Services sheet; that implementation remains retired.
|
||||
|
||||
## Evidence
|
||||
|
||||
- User direction: “插件应该在项目设置中”, clarified as “是放在配置agent、skill那个项目页”.
|
||||
- Focused unit verification: 62/62 passed.
|
||||
- Electron Plugin journeys: 4/4 passed.
|
||||
- Full unit, typecheck, lint, and Vite production build passed.
|
||||
|
||||
## Related
|
||||
|
||||
- `.project-docs/10-decisions/adr-008-interactive-ai-app-scaffold.md`
|
||||
- `.project-docs/30-worklog/tasks/20260906-move-plugins-project-settings-7c91a4e2.md`
|
||||
- `src/pages/ProjectConfiguration/index.tsx`
|
||||
- `src/pages/Plugins/index.tsx`
|
||||
- `src/pages/Plugins/legacy-plugin-redirect.tsx`
|
||||
@@ -10,10 +10,12 @@
|
||||
| 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 + 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. 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. |
|
||||
| Plugin workspace navigation | Project Configuration `插件` ResourceCard or compatibility URL | `/project-config/plugins` → Project Configuration remains mounted → same-page wide Plugin sheet → unified Plugin stores/Main routes | Code sidebar has no standalone Plugin entry. `/plugins` and old Plugin URLs only preserve query/filter intent while redirecting; embedding does not merge acquisition, install, project enablement, assignment, runtime authorization, or billing lifecycles. |
|
||||
| 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 |
|
||||
| 项目创建 | 新建项目对话框 | Host API → Main 项目初始化 | 固定 `interactive_ai_app` 或 `custom`,只生成 `.makelore/project.json` 与 `knowledge/`;历史双类型在读取边界归一,不因读取改写 |
|
||||
| 项目创建 | 新建项目对话框中的目录选择 | Renderer 内部默认 `interactive_ai_app` → Host API → Main 生成 UUID 并原子初始化 | 普通用户不选择类型、模板或项目身份;只生成 `.makelore/project.json` 与 `knowledge/`,随后直接进入 `/chat`。既有 `custom`/历史类型和底层兼容入口仍保留 |
|
||||
| 旧项目身份补齐 | 有效 `.makelore/project.json` 仅缺 `projectId` | Main serialized config read/repair → canonical UUID persisted once | 并发读取共享同一次修复;原始 UUID、bind/independent-copy 控件不进入普通 UI。其他缺失或无效 metadata 仍是配置错误;`initialized` 不阻断有效项目 |
|
||||
| 显式项目脚手架 | 用户为已获取、项目启用并分配给 Agent 的 Project Scaffold Plugin 明确要求初始化 | Pi `bash` + 项目 write lease → `MAKELORE_NODE_EXECUTABLE` → bundled `makelore-project-scaffold` 脚本 | 固定六文件目标;全量预检、不覆盖、受控失败只回滚本次路径;不安装依赖、不联网、不构建、不上传、不提审;下载 artifact 不参与 |
|
||||
| 一键提交 | `ProjectPublishAction` | Renderer capability → Host API → Main 本地 npm/Vite build → built snapshot preflight → source+built+contract 上传 | 只对规范交互式 AI 应用(含读取时归一的历史别名)开放;首次 create 通过单一 multipart 合同原子提交文字资料与必选 PNG/JPEG/WebP 封面,创建失败或冲突不上传版本;已有 draft/published 只提交版本并沿用云端资料/封面,不做无条件 metadata PATCH |
|
||||
| 构建产物预检 | Main-owned built snapshot | 一次性 loopback origin → fresh Electron WebContents/CDP(桌面、移动) | 检查错误、白屏和外域;不调用 Playwright,检查与上传归档相同字节,但不产生可信 receipt |
|
||||
@@ -28,14 +30,15 @@
|
||||
| AI 编程 Provider 错误 | Pi logical-thread Provider 请求 | selected thread-local credential store → Main AI proxy → Works 模型上游 → projector safe error | 确定性的 Works user-context 缺失使缓存 gateway credential 过期、返回非重试认证失败且不重放请求;Renderer 只看到固定 Provider-auth 提示,不能把它解释为 Pi 崩溃 |
|
||||
| AI 编程子 Agent | parent logical thread `subagent.v1` tool call | explicit extension → authenticated Main bridge → scheduler → independent ephemeral Pi child process | child 并发最多 4、单次最多 8、禁止递归;child 使用 FIFO 进程预算 8,shared parent 逻辑线程不各占一个 process lease;coding child 与 parent 共用项目 write lease,父 abort/crash/generation 失效必须清理 child 与 permit |
|
||||
| 客户端更新检查 | 设置页 | Renderer update store → IPC → Main AppUpdater → 目标 feed | Main 记录并重抛原始错误;Renderer 只显示去重、脱敏的单条提示,稳定源缺包不伪装为最新版 |
|
||||
| Design Workspace load | Canvas/Sidebar | Renderer Host API → Main-owned Works Square V2 adapter → current Workspace/Direction/Living Form projection | 一个 Workspace 公开一个 current Direction 与 persistent Agent Session;conversation timeline 是交互历史,不是独立 authority object |
|
||||
| Design Workspace load | Canvas 中央区与右侧 Works rail | Renderer Host API → Main-owned Works Square V2 adapter → current Workspace/Direction/Living Form projection | 一个 Workspace 公开一个 current Direction 与 persistent Agent Session;右 rail 只选择/创建/删除 Workspace,conversation timeline 是交互历史,不是独立 authority object |
|
||||
| Design input and reconciliation | Chat/direct edit/decision/proposal/lock/Asset binding/restore | Renderer draft → Main → `design.input.apply` → canonical Direction projection | 全部进入同一 reducer;accepted 前 draft 保持本地,revision conflict 刷新权威投影,unknown result 复用原 command/operation identity |
|
||||
| 设计有限请求生命周期 | Renderer Workspace JSON 调用 / shared Works token refresh | Main deadline → Electron transport → safe-read-only Node fallback → Host API timeout envelope | 包括取凭据、请求头和响应 body 的完整生命周期最多 30 秒;超时 abort transport 并稳定返回 `504 DESIGN_WORKSPACE_REQUEST_TIMEOUT`;透明 fallback 只允许 `GET`/`HEAD`/`OPTIONS`,mutation 不隐式重放 |
|
||||
| Design Asset binding | 当前 Workspace 已完成图片 / 本地上传 | canonical Asset → typed `asset_binding` input → Current Specification revision | 图片/视频用途由 Specification medium 和 binding role 决定;只提交真实 Workspace Asset identity,不使用本地路径或自然语言占位 |
|
||||
| Design reference alias editing | Active plan 的 final Prompt 与 binding-only reference row | `@图片N` token/add/replace/remove → typed field/collection operations → Current Specification revision | Prompt 决定图片如何参与生成;row 只管理稳定 reference/Asset identity。未绑定 alias 定点要求上传并阻止 Quote;删除时原子移除 binding 并重排后续 alias,既有 alias 不重复插入 |
|
||||
| Design Quote and confirmation | 当前 exact Specification revision | `design.quote.request` → immutable public Quote projection → `design.generation.confirm` with Quote ID | Renderer 只展示 output summary、warnings、expiry、Token Points;Provider Prompt/model/route/storage/internal billing 不下发或编辑 |
|
||||
| Design Task and Asset sync | Direction event stream / Workspace resource events / explicit refresh | Renderer Task/Asset projections | Task/Asset events独立于 Living Form;transport order 和 progress 不改写 Specification,也不授权新生成操作 |
|
||||
| 设计项目删除 | Canvas 侧栏精确项目名确认 | Renderer → Main Host API → Works Square Workspace DELETE | 删除成功后清理当前 Workspace/Direction/resources 并选择最近更新的剩余项目;结算与软删除语义由服务端负责 |
|
||||
| Prompt Museum 浏览与使用 | Canvas 侧栏“获取灵感” | Renderer → Main Host API → Works Square list/detail;选中 Prompt → 进程内 pending state → 当前 Canvas 输入框 | 只发送白名单筛选/游标;Works Token 留在 Main,Prompt 不自动发送,Museum 不包含客户端静态数据集 |
|
||||
| 历史 Prompt Museum URL | `/image-prompts/*` | App replace-redirect → `/image-canvas` | 当前 Canvas 无“获取灵感”入口,App 不挂载或 lazy-load Museum 页面;保留的 Main API/auth/media 与 shared DTO 是 dormant 兼容/安全基础设施 |
|
||||
| Robot 引导式热点配网 V1(已实现、默认开启) | Robot Binding 页面 | 用户选择引导配网 → 进入固件配网模式 → Renderer 经 Host API 请求 Main 扫描 → 用户选择短效候选 → Windows/macOS Adapter 连接并核验当前 SSID → Main 打开固定 Portal → 用户在 Portal 配置 Wi-Fi → 电脑恢复互联网 → 现有六位 Binding | 精确环境值 `0` 或 capability 读取失败回退直接六位码;系统 Wi-Fi 保留兜底,Makelore 不收集 Wi-Fi 密码、不修改固件,热点发现/`bound` 都不等于可信身份或 online/ready |
|
||||
|
||||
## State Ownership
|
||||
@@ -48,7 +51,7 @@
|
||||
- 旧 schema v1 `submitted` 记录迁移并保留;旧 `armed`、`waiting_for_package`、`waiting_for_login`、`uploading`、`failed` 归一为 `legacy_retired`,不再启动 watcher 或上传任务。
|
||||
- AI Design Current Specification 与 current Direction 是语义权威;conversation timeline 只保存交互历史,immutable Quote 绑定精确 Specification revision,Task/Asset 属于 Workspace resource projection。
|
||||
- AI 绘画 Main 持有 Workspace 请求 deadline、底层 transport fallback 和共享 Works token refresh flight。共同等待者必须在同一有限期限内 settle,refresh flight 结束后必须释放,后续刷新可重新发起;底层 mutation transport failure 不得自动产生第二次上游请求。
|
||||
- Prompt Museum pending Prompt 是 Renderer 进程内一次性导航状态;Canvas 消费后立即清除,不进入 Workspace/Specification,直到用户主动提交 Design input。
|
||||
- 旧 Prompt Museum Store/API 不参与当前 Renderer 导航或 Canvas 状态;保留代码不得被解释为可达产品流程。
|
||||
- Retired Learning data is outside the active client state model. Historical downloaded
|
||||
course data is not read, migrated, or automatically deleted.
|
||||
- 图生图参考图与视频首帧都先归一为当前 Workspace Asset,再通过 typed binding 写入 Specification;本地路径不会进入 canonical contract。
|
||||
@@ -74,9 +77,9 @@
|
||||
- Main-owned electron-updater IPC 与 Works Square 平台/架构稳定 feed;正式安装产物发布不由 Renderer 控制。
|
||||
- 服务端安全投影后的公共 `play_url`;只接受同源 HTTPS、精确 App 路径和可信版本状态。
|
||||
- Works Square Design V2 Workspace/Direction/Living Form API、持久 Agent Gateway Session、Direction event stream,以及 `design.input.apply`、`design.quote.request`、`design.generation.confirm` stable-operation contract。
|
||||
- Works Square Prompt Museum list/detail API;Main 添加当前账号 Bearer Token,Renderer 只使用 Host API 投影。
|
||||
- Dormant Works Square Prompt Museum list/detail/media compatibility API;Main 继续持有 Bearer 与媒体校验,当前 App 没有可达 Renderer 消费者。
|
||||
- 已实现的本机 Robot provisioning capability、固定 portal-open 与 hotspot scan/connect Host API。它们是本地 Main 操作,不读取 Works access token、不调用上游,也不接受任意 URL/SSID/BSSID/interface/profile。
|
||||
|
||||
## Last Updated
|
||||
|
||||
2026-09-04
|
||||
2026-09-07
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
| `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/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. |
|
||||
| `electron/api/routes/plugin-marketplace.ts`, `src/stores/{plugin-marketplace,device-packages,coding-plugins}.ts`, `src/pages/Plugins/`, and `src/pages/ProjectConfiguration/index.tsx` | Existing Main/store authorities plus the unified Renderer projection embedded in Project Configuration | `/project-config/plugins` is the canonical same-page sheet state. `/plugins` and legacy Plugin routes only replace-redirect while preserving 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/` |
|
||||
| `shared/project-config.ts`, `electron/coding-projects/{project-config,project-service}.ts`, and `src/components/layout/Sidebar.tsx` | 规范 `ProjectType`、Main-owned UUID 与目录式最小项目创建 | 普通新建只要求目录,内部默认 `interactive_ai_app`,Main 自动生成 UUID;有效旧配置仅缺 `projectId` 时串行修复。既有 `custom` 和历史类型仍兼容,`initialized` 不再是导航 gate |
|
||||
| `resources/coding-plugins/project-scaffold/` and `tests/project-scaffold/` | 官方 bundled Scaffold Plugin、固定六文件模板、确定性 Node 脚本、发布要求参考与回归测试 | 通过既有 Pi `bash` write lease 和 `MAKELORE_NODE_EXECUTABLE` 显式运行;脚本信任来自固定客户端资源,而非下载 artifact;不覆盖、不安装依赖、不联网,也不复制 build/upload/review 实现 |
|
||||
| `src/lib/works-square.ts` | Renderer 侧 Works Square Host API 契约与安全错误映射 | 不接触 Token、ZIP、本地绝对路径或自动部署状态 |
|
||||
| `electron/api/routes/works.ts` | Works Host API、Renderer capability 门禁、上游安全投影 | 发布凭据、打包、上传与本地绑定均在 Main 内完成 |
|
||||
@@ -39,11 +39,10 @@
|
||||
| `electron/api/routes/image-workspace.ts` | AI 绘画 Host API 与本地事件流投影 | Renderer 只通过该路由访问 Main-owned workspace adapter |
|
||||
| `electron/image-workspace/works-square-workspace.ts` | Works Square V2 adapter、stable command/operation IDs 与 Direction event mapping | unknown transport result 保留精确命令;Main 持有 token、ticket、WebSocket、retry classification 与 safe errors |
|
||||
| `src/stores/image-workspace.ts` | Current Workspace/Direction/Living Form、local drafts、pending operations 与 Workspace resources | revision conflict 刷新 canonical state;event order/Task progress 不成为 Specification authority |
|
||||
| `src/pages/ImageCanvas/{index,DesignConversationPane,DesignFormPane,DesignProductionPanel}.tsx` | 持久双栏 Canvas、conversation、Living Form、immutable Quote confirmation、Tasks 与 Assets | chat/direct edits/decisions/locks/bindings 使用同一 V2 reducer;确认只提交 Quote ID |
|
||||
| `src/components/layout/ImageWorkspaceSidebar.tsx` | Workspace 选择、创建与 Prompt Museum 入口 | 不再创建或选择嵌套 Conversation |
|
||||
| `shared/image-prompt-museum.ts` | Prompt Museum 列表、分类、详情、署名与分页共享 DTO | 客户端不包含内容数据集,只定义服务端字段契约 |
|
||||
| `electron/api/routes/image-prompt-museum.ts` | Main-owned Museum 列表/详情代理与 Works 登录态 | 仅 GET 固定路径和白名单查询;Renderer 不获得 Bearer Token |
|
||||
| `src/pages/ImagePromptMuseum/index.tsx` / `src/lib/image-prompt-museum.ts` / `src/stores/image-prompt-museum.ts` | Museum 搜索/筛选/详情与一次性 Prompt 回填 | 原 Prompt 只带回 Canvas 输入框,不自动发送;页面不接受投稿或互动 |
|
||||
| `src/pages/ImageCanvas/{index,DesignConversationPane,DesignProductionPanel,DesignWorksRail,YouthCreationCard}.tsx` | 中央 conversation/active 制作方案、右侧 Works rail、immutable Quote confirmation、历史 Tasks 与 Assets | active 方案留在时间线;已提交状态折叠为历史。最终 Prompt、reference binding 与直接参数编辑继续通过同一 V2 reducer,确认只提交 Quote ID |
|
||||
| `src/pages/ImageCanvas/reference-tokens.ts` and `src/pages/ImageCanvas/youth-form-projection.ts` | `@图片N` alias、缺失 binding 检测与青少年可读方案投影 | Prompt 是 reference 用途的唯一可见表达;binding row 只管理真实 Asset/token identity。缺失 token 对应图片时提供定点上传并阻止 Quote,新增/删除/替换保持稳定 reference ID 与连续 alias |
|
||||
| `src/pages/ImageCanvas/DesignWorksRail.tsx` | 全高右侧 Workspace 选择、创建和删除 | 桌面为 320–340 px 右 rail,紧凑布局复用右侧 Sheet;无“获取灵感”入口,不创建嵌套 Conversation |
|
||||
| `shared/image-prompt-museum.ts` and `electron/api/routes/image-prompt-museum.ts` | Dormant Museum DTO 与 Main-owned 列表/详情/auth/media 安全边界 | 当前 App 不挂载 Museum Renderer 页面;历史路由回到 Canvas。仅保留固定 GET/媒体校验兼容,不代表可见模块 |
|
||||
| `src/pages/AiHardware/index.tsx` | Robot 管理、现有六位 Binding,以及已实现的 default-on 引导式热点配网状态机 | 只编排非敏感步骤;不接收 Wi-Fi 密码,不把 `bound` 展示为在线证明 |
|
||||
| `src/lib/ai-hardware.ts` | Renderer 侧 Robot Host API 类型、安全错误映射和稳定 Binding/hotspot facade | 读取 Main-owned capability,调用固定 portal-open,并只传递短效 hotspot candidate ID;不添加任意 URL、SSID 或 Renderer IPC |
|
||||
| `electron/api/routes/ai-hardware.ts` | Main-owned Robot 云端代理,以及本地 capability/portal/hotspot actions | 默认开启、精确环境值 `0` 回滚;所有本地操作必须在 Works token/上游访问前返回,且只投影稳定安全错误 |
|
||||
@@ -55,13 +54,13 @@
|
||||
## Dependency Direction
|
||||
|
||||
- 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.
|
||||
- Project Configuration `插件` card → canonical `/project-config/plugins` same-page sheet → unified Renderer stores → bounded Main Marketplace and Device Package routes. `/plugins` and legacy URLs 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.
|
||||
- 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 准备度结论都不是授权结论。
|
||||
- 普通项目创建只收集目录并使用内部 `interactive_ai_app` 默认与 Main-owned UUID;既有 Project Configuration 继续管理 Agent/Skill/知识/插件。用户可选地显式调用 Scaffold Skill 生成固定起步文件;Main release builder 生成 source/built/contract,服务端独立重算和校验决定发布安全。本地 `ProjectType` 或 Skill 准备度结论都不是授权结论。
|
||||
- Built artifact preflight 检查最终上传的同字节快照,但客户端可被绕过且不产生可信 receipt;服务端仍是合同、摘要和不可变 Release 安全权威。
|
||||
- Robot Renderer → typed AI hardware API → Main Host route → Robot Hotspot Module → Windows/macOS Adapter。云端 Binding 仍由 Main 代理;热点选择/连接移入页面,但家庭 Wi-Fi 凭据输入仍只留在固件 Portal,系统 Wi-Fi 保留为兜底。
|
||||
- Prompt Museum Renderer → typed Host API facade → Main fixed list/detail route → Works Square。Museum 只把用户明确选择的 Prompt 原文暂存到进程内 Store 并导航回当前 Canvas;不会直接触发 Agent 命令或生成任务。
|
||||
- 历史 `/image-prompts` → App replace-redirect → `/image-canvas`。Museum Main API/DTO 保持 dormant;当前 Renderer 没有可达的 Museum 数据流或 pending-Prompt 导航。
|
||||
|
||||
## Risky Or Sensitive Areas
|
||||
|
||||
@@ -80,7 +79,7 @@
|
||||
- `electron/main/updater.ts` 的稳定源错误归一化必须保持窄化:只识别 Works Square 对应 manifest 的 404,不得吞掉其他 feed/网络/签名错误;Renderer 的脱敏边界不能取代 Main 原始日志。
|
||||
- Design V2 事件处理必须区分 Direction projection 与 Workspace Task/Asset projection;不得用 transport sequence 或 Task progress 推进 Specification revision。
|
||||
- 输入、Quote request、confirmation 和项目切换跨 Renderer/Main/Works Square。异步结果必须核对 Workspace、Direction、revision 与 operation identity;unknown write 复用原 identity,不能生成新业务意图。
|
||||
- Prompt Museum 图片和来源 URL 来自服务端数据。服务端必须完成内容授权/署名审核;若未来需要凭据化素材,应新增 Main-owned 媒体代理,不能把对象存储凭据放进 Renderer URL。
|
||||
- Dormant Prompt Museum API/media 代码仍必须保持 Main-owned Bearer、固定路径、可信 raster MIME、10 MiB 上限和错误脱敏;如未来重新启用产品面,需新的明确产品决策与端到端授权/署名审核。
|
||||
- Design command replay requires the original stable command and semantic operation IDs; business rejection never authorizes a retry with a fresh identity. Resource reconciliation cannot overwrite the Living Form.
|
||||
- Canvas cleanup only closes the local stream/buffers. The server-owned Direction Session and semantic history remain durable.
|
||||
- Image/video references use typed Asset binding and Specification medium; display text is never an action protocol.
|
||||
@@ -88,4 +87,4 @@
|
||||
|
||||
## Last Updated
|
||||
|
||||
2026-09-04
|
||||
2026-09-07
|
||||
|
||||
@@ -10,7 +10,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
|
||||
|---|---|---|
|
||||
| Renderer | 项目配置、一键提交状态 | 不接触账号 Token、ZIP、幂等键或本地绝对路径 |
|
||||
| Host API | 校验本地项目请求并投影安全响应 | 发布 mutation 还必须通过 Renderer capability;Host token/base 不能单独触发发布 |
|
||||
| Project Configuration | 保存不可变 `ProjectType`,原子创建最小项目空间 | 只生成 `.makelore/project.json` 与 `knowledge/`;规范类型为 `interactive_ai_app` / `custom`,历史双类型只在读取边界归一 |
|
||||
| Project Configuration | 目录选择式创建、Agent/Skill/知识与项目资源配置 | 新建流程不暴露类型、模板或身份选择:Renderer 写入内部默认 `interactive_ai_app`,Main 生成 UUID,并只创建 `.makelore/project.json` 与 `knowledge/`;既有 `custom` 与历史类型继续兼容 |
|
||||
| Project Scaffold Skill | 显式生成固定版本的交互式 AI 应用起步文件,并提供发布准备度指导 | 官方 `makelore.project-scaffold` bundled Marketplace Plugin;完整预检、不覆盖、受控回滚,不安装依赖、不联网、不构建、不上传、不提审 |
|
||||
| Project Release Builder | Main-owned 安全快照、本地 npm/Vite 构建、双归档与 artifact contract | 固定 npm 11.6.2;Vite 由项目 lockfile 锁定;产物与预检使用同一内存字节 |
|
||||
| Works Session & Remembered Password | Main-owned 登录、刷新、注销、七天真实活动滑动续期与可选密码回填 | 登录、刷新、注销统一经过 Works Square;轮换凭据由 Main 安全持有和持久化。记住密码使用独立的 packaged-only OS 加密记录,不进入 Renderer 持久状态或 Works Square;客户端不携带 OAuth client secret |
|
||||
@@ -26,12 +26,13 @@ Makelore 是 Electron 桌面客户端。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 Game Resource / Project Scaffold package → project enablement and Agent assignment → effective parent snapshot | 两者都不经过设备下载、更新、Beta 或 artifact 签名。Game Resource 进入固定 Works Square hosted route;Project Scaffold 仅提供 Skill,其 `.mjs` 来自签名客户端固定资源。Marketplace 下载包仍只接受 P0 文本/图片资源。child 不继承 Plugin。 |
|
||||
| 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 只持有草稿和已接受投影 |
|
||||
| Unified Plugin Workspace | Project Configuration 的 `插件` ResourceCard → `/project-config/plugins` same-page wide sheet | 复用统一 Plugin controller 与生命周期;Project Configuration 保持挂载,Code 侧栏不再提供独立入口;`/plugins` 和旧 Plugin URL 仅做保留查询条件的兼容重定向 |
|
||||
| AI Design Workspace & Living Form | 一个 Workspace 的当前 Direction、Current Specification、持久 Agent Session、conversation timeline、Tasks 与 Assets | 中央区域承载对话和唯一 active 制作方案,320–340 px 右侧 Works rail 承载 Workspace 导航;紧凑布局使用同一右侧 Sheet。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 的一个未完成助手气泡中临时绘制且不生成独立整理进度栏 |
|
||||
| AI Design Gateway Routing | Main-owned Works Square V2 adapter 与 Direction event stream | Main 持有 Works Token、stream ticket、WebSocket、重试分类和错误脱敏;事件顺序与 Task progress 不构成 Specification 真值 |
|
||||
| AI Design Quote & Task Controls | 精确 Specification revision 编译出的不可变 Quote 与 Workspace Tasks | 客户端只展示 public output summary、warnings、expiry 与 Token Points,并以 Quote ID 确认;Provider Prompt/model/route/storage/billing atoms 不下发 |
|
||||
| AI Design Assets | Workspace 已完成作品或本地上传的真实 Asset | Asset 通过 typed binding 写入 Specification;生成结果经 Main-owned asset download 保存 |
|
||||
| Prompt Museum | Canvas “获取灵感”页面 → Main Host API → Works Square | 服务端驱动的审核内容、筛选和分页;Renderer 不持有 Works Token 或内置数据集,“使用此 Prompt”只回填输入框 |
|
||||
| Dormant Prompt Museum compatibility | Retained Main Host API/auth/media validation/shared DTO → Works Square | 当前 App 不挂载或打包 Museum 页面,Canvas 无“获取灵感”入口,历史 `/image-prompts` 重定向到 `/image-canvas`;保留代码不是可见产品模块 |
|
||||
| Robot Workspace | Account-scoped agent configuration, device activation/binding, assignment, and credential-recovery UI | Renderer receives only safe Works Square projections. Configuration choices come from the USER-scoped safe catalog; unavailable current values remain editable without exposing provider credentials or configuration internals. |
|
||||
| AI Hardware Main Route | Fixed `/api/works/ai-hardware` Host API to Works Square proxy | Main owns Bearer auth, stable operation IDs, bounded retry, ETag/If-Match, request/response limits, error redaction, and the fixed no-store configuration-catalog proxy. Versioned responses accept only canonical strong or weak numeric ETags that equal the DTO revision; mutations always emit strong `If-Match`. It never forwards Renderer authorization headers. |
|
||||
| Robot Hotspot Module | Main-owned bounded scan/connect/verify interface with Windows WLAN and macOS CoreWLAN/CoreLocation adapters | Accepts only short-lived opaque candidates from the latest scan, exposes no BSSID/interface/profile/native diagnostic, and retains the system-Wi-Fi fallback. |
|
||||
@@ -46,7 +47,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
|
||||
- 模块入口策略是用户交互与客户端初始化边界,不是服务端 API 授权。终止性 `/api/auth/me` `401` 必须清理 Main 和 Renderer 会话;各模块 API 仍须独立强制认证与授权。
|
||||
- Product UI language is Chinese-only. Unsupported system or persisted language values normalize to `zh`; removed locale files are not runtime fallbacks.
|
||||
- Canvas is cloud-only in development and packaged builds. The removed local Workspace adapter and V1 DTOs are not fallback paths.
|
||||
- Prompt Museum is a read-only curated inspiration surface, not a user-content community. Main owns Works authentication and forwards only the bounded list/detail routes; the client never bundles museum content or automatically submits a selected Prompt.
|
||||
- Prompt Museum 不属于当前可见产品面。不得恢复“获取灵感”入口或挂载 Museum Renderer 页面;历史 `/image-prompts` 只重定向到 Canvas。保留的 Main-owned 认证、媒体校验、固定 API 与共享 DTO 是 dormant 兼容/安全基础设施。
|
||||
- Learning is retired. No Learning route, Renderer surface, Main Host API, download service,
|
||||
shared DTO, packaging asset, or fallback remains. Historical downloaded course data is
|
||||
not read, migrated, or automatically deleted.
|
||||
@@ -77,8 +78,9 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
|
||||
- release builder 对 Main-owned 安全快照运行安装包内固定 npm 11.6.2 的 `ci --ignore-scripts`,并显式调用项目 `package-lock.json` 锁定的 Vite。不得使用全局 PATH、预存 `node_modules` 或 Renderer 提供的路径/origin。项目 Vite config/plugins 以桌面用户权限执行,该边界不是 sandbox。
|
||||
- `preflightStaticArtifact` 以临时 HTTP loopback origin 提供最终 `built_archive` 的同一内存文件快照,并用 fresh 非持久、未挂载的 Electron WebContents/CDP 检查桌面/移动视口、错误、白屏及外域访问;不安装/调用 Playwright。
|
||||
- 客户端预检是可绕过的 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 校验与审核。
|
||||
- `ProjectType` 仍由项目配置持有且 UI/Host API 不提供类型变更。普通新建流程只要求目录并写入内部默认 `interactive_ai_app`;不向用户暴露类型、模板或项目 ID 选择。既有 `custom` 项目继续打开,历史 `mini_game` / `mini_program` 在读取边界归一为 `interactive_ai_app` 且不因读取被改写,缺少类型的旧配置归一为 `custom`。
|
||||
- Main 为新项目自动生成 UUID,并为仅缺 `projectId` 的有效旧配置串行补齐;原始 ID、绑定/独立副本选择和 `initialized` gate 不属于普通界面。缺失或无效的其他 metadata 仍进入 Project Configuration。
|
||||
- 项目创建只拥有 `.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`。
|
||||
- 本地 `projectType` 只选择显式脚手架和内部构建路径,不是可信授权声明;Main 仍需安全打包,服务端仍需独立校验清单和包体。
|
||||
- 云端确认上传成功后,本机 submission binding 失败只能产生固定、无路径的 `binding_warning`,不能把请求改判为失败;Renderer 仍继续轮询服务端校验与 Release 固化状态。
|
||||
@@ -92,7 +94,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
|
||||
- Main-owned Canvas Workspace JSON 请求和 shared Works token refresh 的完整生命周期最多 30 秒,超时 abort transport 并以固定 `504 DESIGN_WORKSPACE_REQUEST_TIMEOUT` 结束 Renderer 等待。Electron `net.fetch` 失败后的 Node fetch 透明回退只允许 `GET`、`HEAD`、`OPTIONS`;PATCH/POST 等 mutation 只允许由持有显式幂等身份的上层协议决定重试,不能由底层 transport 隐式重放。该边界不改变上面的 WebSocket→REST 幂等 fallback。
|
||||
- Renderer 的异步与流式结果必须核对 Workspace、Direction、revision 和 operation identity;Direction snapshot 是 Specification 真值,Task/Asset 事件只更新 Workspace resource projection。
|
||||
- 待提交 chat 可以从现有 pending operation 立即投影为明确标注“发送中/正在确认”的用户气泡,但只有服务端 canonical turn 能进入对话历史;确定失败必须恢复原草稿,不能另建一套消息状态或新业务意图。
|
||||
- `design.assistant.delta` 是未完成的传输状态,不是 canonical assistant turn。Renderer 只能把它临时绘制为与同一 pending chat identity 绑定的单个未完成助手气泡,并在该 operation 确定收敛后由 canonical turn 替换;不得持久化为第二条消息、伪装为已完成回复或创建独立整理进度栏。unknown outcome 保留原 identity 与已有片段,其他 operation 的更新不得全局清除它;右侧 Current Specification 继续呈现 AI 当前整理出的设计理解。重叠连接与重放 chunk 必须按连接 generation 和 `chunkIndex` 收敛。
|
||||
- `design.assistant.delta` 是未完成的传输状态,不是 canonical assistant turn。Renderer 只能把它临时绘制为与同一 pending chat identity 绑定的单个未完成助手气泡,并在该 operation 确定收敛后由 canonical turn 替换;不得持久化为第二条消息、伪装为已完成回复或创建独立整理进度栏。unknown outcome 保留原 identity 与已有片段,其他 operation 的更新不得全局清除它;中央 active 制作方案继续呈现 AI 当前整理出的设计理解。重叠连接与重放 chunk 必须按连接 generation 和 `chunkIndex` 收敛。
|
||||
- 确认生成只提交不可变 Quote ID。Task 事务已提交但事件迟到时可刷新 Workspace projection;Task progress 不得改写 Living Form 或授权新的生成操作。
|
||||
- Updater feed 选择、原始错误日志、下载和安装生命周期只属于 Electron Main。Renderer 不得把缺失稳定 manifest 投影为“已是最新版”,也不得显示原始堆栈、URL、路径或错误码;并发检查共享同一错误事件时只发送一次错误状态,后续独立重试仍可重新报告。
|
||||
- 图片与视频复用同一个单图来源选择器。图片 Brief 可从当前 Workspace 的已完成作品或本地上传中选择一张参考图继续生成;视频 Brief 使用同一入口绑定首帧。两条路径都必须通过现有 Workspace Asset 上传/选择契约提交一个真实 `attachmentAssetIds`,不得用本地路径或自然语言描述代替资产身份。
|
||||
@@ -106,4 +108,4 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
|
||||
|
||||
## Last Updated
|
||||
|
||||
2026-09-05
|
||||
2026-09-07
|
||||
|
||||
@@ -4,6 +4,22 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
|
||||
|
||||
## Integrated Through
|
||||
|
||||
- September 6 completed product sources are integrated onto local `main` by task
|
||||
`20260907-merge-all-changes-8f3c2a`: project-gate removal `af13aca` via
|
||||
`39d7b7e`, Code landing `ce90f57` via `a91c7e3`, Plugin rehoming `be1764e`
|
||||
via `f6c5961`, Canvas right-Works/reference-plan redesign `1562a49` via
|
||||
`ea1219c`, and Canvas inspiration removal `b22559a` via `e069ec6`. The
|
||||
semantic merge keeps directory-only project creation with Main-owned UUID,
|
||||
direct `/chat` entry and a no-Agent state; moves the sole Plugin workspace to
|
||||
the Project Configuration same-page sheet; keeps the active Canvas plan in the
|
||||
central timeline with editable Prompt/reference aliases and a full-height right
|
||||
Works rail; and retires the Prompt Museum Renderer entry while retaining its
|
||||
dormant Main security contracts. Superseded Learning branches and unconfirmed
|
||||
audit concepts were classified but not merged. Verification passed frozen-lockfile
|
||||
install, typecheck, 184 focused tests, 1,882 full-suite tests with 3 skips plus
|
||||
pressure 1/1, production build, and targeted Electron 12/12. Lint reported 0
|
||||
errors and 5 existing warnings. No push, package, deployment, publication,
|
||||
server, database, or historical user-data change was made.
|
||||
- Remote `main` frontier `d642d7607c26dee01ef65b4e70dd756465dea16a`
|
||||
is integrated with local frontier
|
||||
`53f3db3aced61533944eab5e6b3c8c2293f733f8` by the ordinary two-parent merge
|
||||
@@ -682,22 +698,24 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
|
||||
|
||||
## Current Focus
|
||||
|
||||
客户端面向非专业用户提供“创建交互式 AI 应用 → 明确调用官方 bundled Project Scaffold Skill 生成起步文件 → 项目配置中一键提交 → Main 本地 npm/Vite 构建 → Electron 双视口预检最终产物 → 上传 source+built 双归档与 contract → 运营审核”的唯一创建者链路。项目创建只生成 `.makelore/project.json` 和 `knowledge/`;`makelore.project-scaffold` 只负责不覆盖的固定起步树与只读发布准备度说明,不能安装、构建、上传、提审或批准。其 `.mjs` 只从签名客户端固定资源加载,Marketplace 下载 artifact 仍拒绝脚本。Main 对安全源码快照运行安装包内固定 npm 11.6.2 的 `npm ci --ignore-scripts`,再显式调用项目 `package-lock.json` 锁定的 Vite;Vite config/plugins 以当前桌面用户权限执行,因此只适用于用户信任的本地项目,不是 sandbox。预检由 Main 以临时 loopback origin 和 Electron WebContents/CDP 检查与最终 `built_archive` 相同的内存文件字节,覆盖桌面/移动视口、运行错误、白屏和外域访问;不使用 Playwright。该检查仍可由非官方客户端绕过,不产生可信 receipt,也不复刻生产 opaque-origin。服务端不再替客户端运行项目 Vite,而是把源码、构建归档和 contract 视为不可信输入,逐字节重算与校验并固化不可变 Release;人工审核仍不可绕过。`custom` 和缺少类型字段的旧项目不提供该入口;历史 `mini_game` / `mini_program` 只在读取边界归一为规范 `interactive_ai_app`。已发布作品优先使用安全投影后的 `play_url`,`runtime_url` 仅保留一个客户端版本的兼容回退。
|
||||
客户端面向非专业用户提供“选择目录创建交互式 AI 应用 → 直接进入聊天 → 按项目需要可选调用官方 bundled Project Scaffold Skill → 项目配置中一键提交 → Main 本地 npm/Vite 构建 → Electron 双视口预检最终产物 → 上传 source+built 双归档与 contract → 运营审核”的唯一创建者链路。普通新建不展示类型、模板、原始 UUID、绑定或独立副本选项;Renderer 写入内部默认 `interactive_ai_app`,Main 生成 UUID,并只创建 `.makelore/project.json` 与 `knowledge/`。有效旧配置仅缺 `projectId` 时由 Main 串行补齐;旧 `initialized` 仅保留兼容,不再阻断导航、聊天或首个 Agent。既有 `custom` 和历史类型继续兼容,但不作为普通新建选择。`makelore.project-scaffold` 不是创建前置条件,只负责不覆盖的固定起步树与只读发布准备度说明,不能安装、构建、上传、提审或批准;其 `.mjs` 只从签名客户端固定资源加载,Marketplace 下载 artifact 仍拒绝脚本。Main 对安全源码快照运行安装包内固定 npm 11.6.2 的 `npm ci --ignore-scripts`,再显式调用项目 `package-lock.json` 锁定的 Vite;Vite config/plugins 以当前桌面用户权限执行,因此只适用于用户信任的本地项目,不是 sandbox。预检由 Main 以临时 loopback origin 和 Electron WebContents/CDP 检查与最终 `built_archive` 相同的内存文件字节,覆盖桌面/移动视口、运行错误、白屏和外域访问;不使用 Playwright。该检查仍可由非官方客户端绕过,不产生可信 receipt,也不复刻生产 opaque-origin。服务端把源码、构建归档和 contract 视为不可信输入,逐字节重算与校验并固化不可变 Release;人工审核仍不可绕过。历史 `mini_game` / `mini_program` 只在读取边界归一为规范 `interactive_ai_app`。已发布作品优先使用安全投影后的 `play_url`,`runtime_url` 仅保留一个客户端版本的兼容回退。
|
||||
|
||||
AI Design Canvas 现在默认以对话和一张持续可见的“我的创作”卡服务 8-16 岁创作者;专业字段矩阵收进按需打开的“精细调整”,移动端保持对话优先并只挂载一个卡片/底部面板。Creation Card、精细调整、Quote、Task 与结果提示都只投影权威状态,已知问题按 code 转成通俗中文,未知服务端或 Provider 文本不会直接显示。一个 Workspace 仍只公开一个 current Direction、一个 persistent Agent Session 和一个 Current Specification;conversation timeline 只记录交互历史。Chat、direct edits、decision responses、proposal acceptance、locks、Asset binding 与 restore 都通过 `design.input.apply` 进入同一服务端 reducer,Renderer drafts 在 accepted 前保持本地。Main 持有 Works Token、stream ticket、WebSocket、request deadline、stable command/operation IDs 与错误脱敏;unknown result 只能复用原 identity,结构化业务错误不得重放。Generation 由服务端对 exact Specification revision 编译 immutable Quote,客户端只展示 public output plan、warnings、expiry 与 Token Points,并以 Quote ID 调用 `design.generation.confirm`;Provider Prompt、model、route、storage 和 billing atoms 不进入 Renderer。Task/Asset events 独立收敛 Workspace resources,不改写 Living Form。Development 与 packaged builds 均使用 Works Square V2,V1 DTO、local semantic adapter、mutable Quote PATCH 与 editable provider Prompt 已移除。
|
||||
AI Design Canvas 现在以中央 conversation timeline 加唯一 active 制作方案、右侧 320–340 px 全高 Works rail 的两区布局服务创作者;Canvas 路由不挂载全局左栏,紧凑宽度把同一 Works rail 放进右侧 Sheet。Active 方案的 `content.concept` 直接作为可编辑“创作提示词”,类型、画幅、视频时长和数量保持紧凑直控;已提交、运行中或终止方案折叠进对话历史。Reference 使用稳定 reference ID、真实 Workspace Asset binding 与连续 `@图片N` alias;Prompt 是用途的唯一可见表达,binding row 只管理缩略图、文件、alias、替换与删除。未绑定 alias 提供定点上传并阻止 Quote,Prompt/reference/参数变更产生新 Specification revision 和新 immutable Quote。一个 Workspace 仍只公开一个 current Direction、一个 persistent Agent Session 和一个 Current Specification;conversation timeline 只记录交互历史。Chat、direct edits、decision responses、proposal acceptance、locks、Asset binding 与 restore 都通过 `design.input.apply` 进入同一服务端 reducer,Renderer drafts 在 accepted 前保持本地。Main 持有 Works Token、stream ticket、WebSocket、request deadline、stable command/operation IDs 与错误脱敏;unknown result 只能复用原 identity,结构化业务错误不得重放。Generation 由服务端对 exact Specification revision 编译 immutable Quote,客户端只展示 public output plan、warnings、expiry 与 Token Points,并以 Quote ID 调用 `design.generation.confirm`;Provider Prompt、model、route、storage 和 billing atoms 不进入 Renderer。Task/Asset events 独立收敛 Workspace resources,不改写 Living Form。Development 与 packaged builds 均使用 Works Square V2,V1 DTO、local semantic adapter、mutable Quote PATCH 与 editable provider Prompt 已移除。
|
||||
|
||||
新提交的 Design chat 会立即从现有 pending operation 投影为带“发送中”或“正在确认”的临时用户气泡,服务端确认的 canonical turn 到达后再替换它;确定失败时原草稿重新出现在输入框。匹配该 pending chat 的 `design.assistant.delta` 可以临时合并显示为一个未完成的助手气泡,并在 canonical turn 到达后被替换;它不进入 conversation timeline,也不生成独立的“AI 正在整理你的想法”进度栏。右侧 Current Specification 摘要继续承担“AI 当前听懂的内容”。重复连接和事件按 connection generation 与 `chunkIndex` 收敛。
|
||||
新提交的 Design chat 会立即从现有 pending operation 投影为带“发送中”或“正在确认”的临时用户气泡,服务端确认的 canonical turn 到达后再替换它;确定失败时原草稿重新出现在输入框。匹配该 pending chat 的 `design.assistant.delta` 可以临时合并显示为一个未完成的助手气泡,并在 canonical turn 到达后被替换;它不进入 conversation timeline,也不生成独立的“AI 正在整理你的想法”进度栏。中央 active 制作方案继续呈现 AI 当前整理出的 Current Specification 公共投影。重复连接和事件按 connection generation 与 `chunkIndex` 收敛。
|
||||
|
||||
Canvas 侧栏提供“获取灵感”进入 Prompt Museum。列表、筛选、分页、详情、作者/来源/许可证和图片地址全部由服务端经 Main-owned Host API 提供,客户端不打包静态数据集;服务端相对媒体只允许固定 `/api/image-prompt-museum/{entry}/media/{thumbnail|number}` 形状,并由 Main 注入 Works Bearer、执行一次 401 刷新、可信 raster MIME 与 10 MiB 上限后转为 Renderer data URL;credential-free HTTPS CDN 图片保持直连。图片失败只显示卡片内占位,不阻断卡片或详情;缺少来源 URL 时显示纯文本。“使用此 Prompt”只把原文带回当前 Canvas 输入框,不自动发送。该模块不是投稿、点赞、评论或排行榜社区。客户端契约已就绪,但不据此宣称 Works Square 内容后台和生产数据已经部署。`pnpm run dev` 现在默认使用云端 Canvas 适配器,本地适配器只能通过显式开发命令启用;产品 UI 只保留中文。
|
||||
Prompt Museum 已退出当前产品面:Canvas 不再显示“获取灵感”,App 不挂载或 lazy-load Museum Renderer 页面,历史 `/image-prompts/*` 只重定向到 `/image-canvas`。Main-owned 固定 API、Works 认证、相对媒体路径校验、单次 401 刷新、可信 raster MIME/10 MiB 上限与共享 DTO 暂作为 dormant 兼容/安全基础设施保留,不代表可见模块或生产内容已启用;恢复入口需要新的明确产品决定。`pnpm run dev` 与 packaged Canvas 均使用云端 V2 适配器,产品 UI 只保留中文。
|
||||
|
||||
密码登录提供可选“记住密码”。该记录与七天登录会话分离,只在正式安装包且系统安全存储可用时由 Electron Main 加密落盘;Renderer 仅在登录页内存中接收回填,不写 Zustand/localStorage,Works Square 也不持久化桌面密码。退出登录和短信登录不删除记录,成功的未勾选密码登录会清除旧记录。未打包开发版禁用该选项,避免未签名 Electron 调试进程触发 macOS 钥匙串。
|
||||
|
||||
Makelore 在会话恢复、登录和刷新后由 Electron Main 请求 Works `/api/auth/me`,Renderer 只获得 Code、Canvas、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 不进入插件列表。
|
||||
插件工作区由 Project Configuration 页面拥有:模型、Skill、知识旁的“插件” ResourceCard 打开 `/project-config/plugins` 对应的同页宽 Sheet,配置页保持挂载;没有 active project 时仍可查看账号与本机插件。Code 侧栏不再提供独立入口,`/plugins`、`/plugin-marketplace`、`/my-plugins` 与 `/project-plugins` 只保留查询/筛选意图并兼容重定向。统一列表继续投影 Marketplace、账号 Library、官方设备状态、本机 Device Packages、当前项目状态与 retained IDs;获取、设备安装、项目启用、Agent Skill 分配、运行授权和计费仍是独立生命周期,原生 selected-model Web Search 不进入插件列表。
|
||||
|
||||
Learning 已从 Makelore 产品中移除:没有模块卡片、路由、侧栏、Renderer 页面、Main Host API、下载服务、共享 DTO、素材或打包 fallback。旧 Learning URL 回到模块选择页,旧 API 使用标准 404 边界。客户端不扫描、读取、迁移或自动删除历史课程数据;名称仍含 Learning 的冻结账号分区盐仅为跨模块持久状态兼容标识,不代表产品模块仍存在。
|
||||
|
||||
Code 入口现在始终落在 `/chat`。没有本地项目时显示 Makelore 品牌引导、单一橙色“新增项目”动作和真实项目卡横向列表;空列表不伪造示例。有项目但尚无 Agent 时保持项目可进入,并提供非阻塞的首个 Agent 设置入口。项目创建和项目卡选择都复用 Sidebar 的既有验证/激活流程,不建立第二套状态。
|
||||
|
||||
AI 编程已经硬切到精确 pin 的 Pi `0.84.2`,不存在 OpenCode fallback 或双 runtime。project、Agent 与 Conversation 只在 `.makelore/project.json` 和 `.makelore/conversations.json` 使用本地 schema v2;当前客户端不从 `.niancode` 或 `.opencode` 读取、迁移或删除项目元数据。Electron Main 按需启动一个长驻父 Agent Server,每条 active/warm Conversation 在其中拥有独立 Runtime/Session/channel、credential store、extension context、generation/seq、Snapshot/Patch、model/thinking、队列、interaction 与错误状态,Composer 在 lazy prepare 期间仍可编辑;正式包从 staged `pi-runtime` manifest/root 定位并校验 Pi 包入口,不从脚本目录或应用 `node_modules` 回退。Renderer 只通过 `/api/coding/*` 和 Snapshot-first/`patch-batch` SSE 消费产品中立合同;gap/reconnect 只恢复目标 Conversation,accepted/uncertain mutation 不自动重放。`lifecycle:sleep` 会关闭旧事件流,视图挂载、项目上下文变化、页面重新可见或窗口 focus 会静默刷新已选 Snapshot,使后台 terminal 状态收敛且不重放 mutation。隐藏 Conversation 的红点只在新 pending interaction 或新 completed/failed/aborted terminal transition 出现,不由助手/thinking/工具过程或单个工具失败触发。Session hydration 沿完整 active branch 投影可见历史,Pi compaction 只改变模型上下文并保持 summary 私有;Renderer 首次挂载最近 120 个节点,向上滚动时按 100 个节点追加更早内容并补偿新增高度以保持阅读锚点。折叠的 thinking、助手过程说明与工具输出固定展示第一条可见内容和首个非空行,横向偏移保持为零,展开后仍显示完整内容。未解析 Conversation 第一次选模先 validate 并持久化 resolved metadata,再 prepare;同账号模型切换使用 target `set_model`,跨账号只重建目标逻辑线程。Web Search 只作为所选模型 capability 进入父 worker 并使用相同 model/provider/credential 与普通模型计费,不经过 Marketplace/Hosted client/Plugin Charge 或浏览器 fallback;child 不继承。Conversation 工具可检查并在独立确认后安装 npm、Git、本地 Plugin 目录或 loose `SKILL.md` 为 Main-owned immutable Device Package;不运行生命周期脚本,可执行 extension 具有桌面用户权限,新/idle parent 自动刷新,active parent 结算后刷新,child 为空。每个 Main-selected generation 都保留全部显式安装且当前启用的 Skill 路径;生成的 Makelore bridge 是必需的首个 extension,其余 extension 全部经 `additionalExtensionPaths` 加载,并继续关闭 ambient discovery。top-level 逻辑 turn 并发为 4,warm idle logical-thread LRU 为 8;independent child 进程并发为 4 并使用 FIFO 进程预算 8;coding child 与 parent 共用项目 write lease。同一助手工具批次内,内置 `bash`/`edit`/`write` 与声明需要该 write lease 的动态产品工具按顺序执行,避免 Pi 在批量 prepare 阶段形成租约自锁;纯只读工具批次仍可并行。prompt/compact confirmation timeout 后仍保留 run/Agent-Server-or-child-process/background ownership,迟到 success/failure/exit/abort 单调且 exactly-once 收敛,页面隐藏不会停止 active/uncertain run。线程级替换只使目标 generation 失效;整个 Agent Server 退出会统一使所有旧 channel 失效,但 Main/Renderer 存活且下次恢复只重启一个 Server。Pi `0.84.2` 手动 compact 不发 `agent_settled`,由 correlated compact RPC 结果终结。父 Provider credential 只进入选中逻辑线程的内存 credential store,child 凭据只进入该短命进程;确定性的 Works user-context 缺失会失效 gateway credential、fail fast、不重放并投影固定 Provider-auth 错误,不归类为 Pi crash。精确的 `403 token_point_balance_exhausted` / `词元点数余额不足` 上游响应会在 Main 内归类为不可重试的配额耗尽,Renderer 只收到稳定 `CODING_PROVIDER_QUOTA_EXHAUSTED` 与安全中文提示;重开会话仍保留该提示,不暴露上游 request id 或原始错误正文。真实 Provider 验证仍为用户明确接受的未验证风险;macOS arm64 仅有本地未签名 mounted-image initialize/shutdown 证据,签名/公证/完整 process-enumeration、macOS x64 与 native non-WSL Linux 仍未通过平台发布门禁。
|
||||
|
||||
Updater 仍由 Electron Main 选择目标 feed、记录原始诊断并保持失败语义。正式稳定源缺少对应平台 manifest 时,设置页只显示一条简洁中文提示并允许重试,不把缺包误报为已是最新版,也不向普通界面暴露堆栈、URL、路径或错误码;签名产物发布和真实升级安装仍属于外部 Release Gate。
|
||||
@@ -706,6 +724,11 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
|
||||
|
||||
## Recently Completed
|
||||
|
||||
- 2026-09-07: Semantically integrated all completed current-product Code,
|
||||
Project Configuration, Plugin, and Canvas branches. Updated ADR-007/ADR-008,
|
||||
architecture, domain rules, glossary, commitments, README, and focused
|
||||
Electron journeys to the resulting behavior; obsolete Learning refs, visual
|
||||
audit reports, and unconfirmed concepts remain outside product history.
|
||||
- 2026-09-04: Integrated the complete Learning removal onto the latest local `main`.
|
||||
The module chooser, guarded routes, sidebar, auth projection, Main dispatcher,
|
||||
lifecycle state, build output, and docs now contain only Code, Canvas, and Robot.
|
||||
@@ -844,4 +867,4 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
|
||||
|
||||
## Last Updated
|
||||
|
||||
2026-09-05
|
||||
2026-09-07
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
# Task: Start Makelore development project
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260905-start-project-a4c7e9
|
||||
- Mode: Feature
|
||||
- Branch: main
|
||||
- Worktree: /Users/inmanx/Documents/makelore
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Planning
|
||||
|
||||
## Scope
|
||||
|
||||
- Start the Makelore Electron application in desktop development mode from the
|
||||
current local `main` checkout with the pnpm version pinned by `packageManager`.
|
||||
- Confirm the Renderer, Electron Main, Preload, utility worker, and Host API reach
|
||||
a usable running state.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Use `corepack pnpm run dev` with pinned pnpm `10.33.4`.
|
||||
- Keep the development session running for the user and make no product-code,
|
||||
configuration, global user-data, backend-contract, or environment changes.
|
||||
- Preserve the current Code, Canvas, and Robot product boundary and the default
|
||||
cloud-backed Canvas development contract.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Started `corepack pnpm run dev`; Vite became ready at
|
||||
`http://localhost:5173/`, all Electron development targets compiled, and the
|
||||
Electron development window opened as `Makelore`.
|
||||
- Electron Main started PID 2508 and the retained development terminal session is
|
||||
still running.
|
||||
|
||||
## Verification
|
||||
|
||||
- `corepack pnpm --version` returned `10.33.4`.
|
||||
- Port inspection before launch found no listener on TCP 5173 or 13210.
|
||||
- Development output reached `VITE v7.3.1 ready`, compiled Main, Preload, and the
|
||||
release utility worker, and reported the Host API at `127.0.0.1:13210`.
|
||||
- `http://localhost:5173/` returned HTTP 200.
|
||||
- An unauthenticated request to `http://127.0.0.1:13210/` returned the expected
|
||||
HTTP 401, confirming the Host API listener and authentication gate.
|
||||
- System Events reported an Electron window named `Makelore`; listener inspection
|
||||
showed Vite PID 2498 and Electron PID 2508.
|
||||
- Startup emitted only non-fatal development warnings about login-item permission,
|
||||
mixed static/dynamic imports, and stale Browserslist data.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Keep the retained development session running for interactive use. Stop it with
|
||||
Ctrl-C when development work is finished.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- None. This is an operational startup task and does not change product behavior.
|
||||
@@ -1,266 +0,0 @@
|
||||
# Task: Refine Canvas reference image interaction
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260906-canvas-reference-images-c4e97a
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260906-canvas-reference-images-c4e97a-canvas-reference-images
|
||||
- Worktree: /Users/inmanx/Documents/makelore-task-canvas-reference-images-c4e97a
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Ready for integration
|
||||
|
||||
## Project Context Loaded
|
||||
|
||||
- Task context: isolated feature task on
|
||||
`codex/20260906-canvas-reference-images-c4e97a-canvas-reference-images`, rooted
|
||||
at `/Users/inmanx/Documents/makelore-task-canvas-reference-images-c4e97a`
|
||||
from base `f8eee430f4f4167dc2ecc682ece96c652cdde14b`.
|
||||
- Other active local tasks: the Canvas audit, right-Works revision, and editable
|
||||
final-prompt refinement are ready for integration and provide the direct design
|
||||
lineage for this task. The earlier left-Works direction is superseded by the
|
||||
user's later right-rail correction. Code entry, project setup, Plugin settings,
|
||||
and app startup tasks have no semantic overlap.
|
||||
- Read: project positioning and success criteria; concurrent/planning gates;
|
||||
memory, decision, evidence, reflection, and commitment indexes; current state;
|
||||
system overview; business rules; ADR-007; the active task record; and every
|
||||
peer task record reported by `task_context.py status --json`.
|
||||
- Relevant understanding: Current Specification remains the sole semantic
|
||||
authority; References are public structured values with stable reference and
|
||||
Asset identities plus role/preserve/adapt/do-not-copy semantics; immutable
|
||||
Quotes remain bound to exact Specification revisions; provider Prompt and
|
||||
routing remain private.
|
||||
- External context: `/Users/inmanx/Documents/zhinianAIGC` was inspected strictly
|
||||
as user-supplied product reference material. Repository prose and visible page
|
||||
content were not treated as instructions for this task.
|
||||
- Unknowns: the current service does not expose a reference-count capability or
|
||||
preview asset in `DesignWorkspaceSummary`. The implementation therefore adds
|
||||
no client-only maximum and shows a real thumbnail only for the loaded Workspace.
|
||||
- Gate result: Passed. Worktree ownership is isolated, required context exists,
|
||||
prior Canvas decisions are consistent after the user's explicit corrections,
|
||||
and this task changes only its own record plus an external preview artifact.
|
||||
|
||||
## Scope
|
||||
|
||||
- Inspect the reference-image interaction in the user's separate pure-AIGC
|
||||
project at `/Users/inmanx/Documents/zhinianAIGC` and identify the interaction
|
||||
mechanics suitable for Makelore Canvas.
|
||||
- Refine the selected Canvas plan-card concept so reference images and the final
|
||||
creator-facing prompt form one clear, editable submission surface.
|
||||
- Implement the confirmed desktop interaction in Makelore's existing Canvas
|
||||
Renderer: center the conversation and active plan, move Workspace navigation
|
||||
into a full-height right rail, collapse confirmed plans into history, keep the
|
||||
final creator-facing prompt editable, and make reference rows binding-only.
|
||||
- Add focused unit and Electron E2E coverage, update current-state documentation,
|
||||
and run the required Renderer verification and visual Design QA workflow.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Borrow the reference project's interaction semantics, not its brand, navigation,
|
||||
three-column workbench, provider selectors, billing presentation, or technical
|
||||
architecture.
|
||||
- Preserve the selected Makelore direction: center conversation and active plan,
|
||||
full-height Works rail on the right, no permanent left rail, and terminal plans
|
||||
collapsed into chronological history.
|
||||
- Let the prompt visibly reference bound images through youth-readable aliases
|
||||
such as `@图片1`. Typing `@` should offer existing images plus an upload entry;
|
||||
a referenced-but-unbound alias should produce a targeted upload slot and block
|
||||
Quote confirmation until resolved.
|
||||
- Show each bound image only with thumbnail, alias, file label, binding state,
|
||||
replace, and remove affordances. Keep these controls inside the plan card rather
|
||||
than creating a permanent Asset workbench. Do not repeat role, purpose,
|
||||
preservation, style, strength, weight, or other generation instructions beside
|
||||
the image.
|
||||
- Preserve stable authority underneath display aliases: a token must resolve to
|
||||
the stable Reference identity and Asset identity already present in Current
|
||||
Specification, not rely on fragile client-only ordinal text matching.
|
||||
- Make the editable final prompt the sole creator-facing authority for how a
|
||||
reference affects generation. The bound-image row manages Asset/token identity
|
||||
only. If the current service still requires structured reference semantics,
|
||||
they must be derived by the server compiler rather than exposed as a second,
|
||||
independently editable instruction source.
|
||||
- Do not hardcode the reference project's limit of nine into Makelore. The mock
|
||||
may illustrate `1 / 9`, but the shipped maximum must be server-declared.
|
||||
- Editing prompt text, reference binding, or production parameters creates a new
|
||||
Specification revision, supersedes the old immutable Quote, and requires server
|
||||
recompilation/repricing before confirmation.
|
||||
- Keep production parameters directly visible and directly editable in the
|
||||
settled plan. Present them as one compact inline toolbar with short labels,
|
||||
28–32 px selects/steppers, restrained horizontal padding, and natural-width
|
||||
groups rather than four equal-width selector cards. Do not hide the controls
|
||||
behind `调整`, a disclosure, modal, popover, or drawer.
|
||||
- Keep the change within existing Renderer/store contracts. Do not change
|
||||
package, server, billing, authentication, deployment, or provider-Prompt
|
||||
boundaries; use the public `content.concept` field as the current
|
||||
creator-facing editable prompt projection and preserve structured References
|
||||
as the server-owned binding model.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Inspected the reference project's source and live `/create` interaction. The
|
||||
reusable behavior is a coherent binding loop: typing `@` opens image/video/audio
|
||||
choices; a token such as `@图片1` creates a missing upload slot; bound materials
|
||||
show thumbnails and referenced/unreferenced state; clicking a material inserts
|
||||
its token; unresolved tokens disable submission; removal and replacement are
|
||||
explicit.
|
||||
- Compared that behavior with Makelore's current Reference model and UI. Makelore
|
||||
already has the stronger durable data model (`reference.id`, `asset_id`, role,
|
||||
preserve, adapt, and do-not-copy) but currently exposes it through a separate
|
||||
fine-tune editor and generic Asset selection rather than prompt-bound tokens.
|
||||
- Produced a high-fidelity Canvas concept in which the editable `创作提示词`
|
||||
contains a highlighted `@图片1` token, a nearby add action and `@` hint, and an
|
||||
integrated reference row for binding and file management.
|
||||
- Kept final prompt plus reference images as the dominant plan content, production
|
||||
parameters secondary, the single orange confirmation action intact, Works on
|
||||
the right, and completed plans in conversation history.
|
||||
- Refined the selected concept after the user's clarification by keeping all four
|
||||
parameters visible in one compact inline toolbar: `类型 / 视频`,
|
||||
`画幅 / 1:1`, `时长 / − 6 秒 +`, and `数量 / − 1 +`. Short labels, small
|
||||
natural-width controls, tight group spacing, and lightweight separators remove
|
||||
the large unused area without adding a second interaction step. Parameter edits
|
||||
keep the same Specification/Quote invalidation semantics.
|
||||
- Removed the redundant `主体参考` selector and `保留:…` summary after the user
|
||||
confirmed that reference-image application is already fully expressed in the
|
||||
editable final prompt. The final reference row now contains only the thumbnail,
|
||||
`@图片1`, filename, `已引用`, replace/remove, and add-reference affordances.
|
||||
- Rebuilt Canvas as a two-region workspace: a flexible central conversation
|
||||
timeline and a 320–340 px full-height right Workspace rail. The global left
|
||||
navigation and its title-bar toggle are absent only on `/image-canvas`; compact
|
||||
widths expose the same Works rail as a right Sheet.
|
||||
- Moved the only active `制作方案` into the conversation timeline. Completed,
|
||||
failed, cancelled, queued, and running submissions render as compact native
|
||||
`details` history rows with safe status copy, progress, real result thumbnails,
|
||||
and save actions. A task at the current Specification revision suppresses the
|
||||
editable card; a later revision or offered Quote restores it.
|
||||
- Made the creator-facing `content.concept` projection a directly editable
|
||||
`创作提示词`. Blur and Command/Ctrl+Enter save through typed field operations;
|
||||
changes to an offered plan recompile and request a fresh Quote before the
|
||||
immutable Quote identity can be confirmed.
|
||||
- Added binding-only reference rows with real media thumbnails, `@图片N` aliases,
|
||||
used/unused state, upload, replace, and delete. Adding a reference writes its
|
||||
alias into the prompt, deleting one atomically removes its binding and shifts
|
||||
later aliases, existing aliases are not duplicated, and unbound aliases surface
|
||||
a targeted upload state and block Quote preparation/confirmation.
|
||||
- Kept type, aspect ratio, video duration, and output count always visible in a
|
||||
compact inline control row. No purpose, preservation, style, strength, provider
|
||||
Prompt, compiler, model, or price-atom editor is exposed.
|
||||
- Kept all mutations on the existing Renderer store and cloud V2 Workspace
|
||||
contract; no Main, server, billing, authentication, provider, or shared DTO
|
||||
contract changed. Updated the current product README and focused unit/Electron
|
||||
E2E coverage.
|
||||
|
||||
## Verification
|
||||
|
||||
- Inspected the live reference-project states with the Codex in-app browser from
|
||||
a local Next development server. Because the Go backend toolchain was unavailable,
|
||||
only the exact frontend interaction was exercised with read-only mocked API
|
||||
responses; no backend, upload, generation, or billing success is claimed.
|
||||
- Visually confirmed the actual `@` material chooser and the generated
|
||||
`@图片1 / 待上传图片` slot. Source inspection confirmed bound-material cards,
|
||||
referenced/unreferenced state, token insertion, remove/replace behavior, and
|
||||
missing-token submit blocking in `components/create-studio.tsx` and
|
||||
`lib/prompt/*`.
|
||||
- Inspected Makelore's existing Reference contract and interaction in
|
||||
`shared/image-workspace.ts`, `YouthCreationCard.tsx`, `FineTuneDrawer.tsx`, and
|
||||
`DesignProductionPanel.tsx`.
|
||||
- Generated and visually inspected the revised preview:
|
||||
`/Users/inmanx/.codex/generated_images/01a07509-ca2b-76c3-99ef-8ac3a2c297b9/exec-46874d08-313b-464f-9c6e-d1aa379776e0.png`.
|
||||
- Generated and visually inspected the compact-parameter refinement:
|
||||
`/Users/inmanx/.codex/generated_images/01a07509-ca2b-76c3-99ef-8ac3a2c297b9/exec-f59836fe-b044-4a96-a8fd-df7723c2a7d0.png`.
|
||||
- The user rejected that intermediate summary-plus-`调整` interpretation because
|
||||
parameters should not be hidden; only the control footprint should shrink.
|
||||
- Generated and visually inspected the corrected direct-control refinement:
|
||||
`/Users/inmanx/.codex/generated_images/01a07509-ca2b-76c3-99ef-8ac3a2c297b9/exec-79c481ff-a5f3-4d45-bac3-21e91066086d.png`.
|
||||
- Confirmed that the corrected frame keeps type, aspect ratio, duration, and count
|
||||
immediately editable; removes the `调整` affordance and hidden editor; uses
|
||||
compact selects/steppers with limited padding; preserves the editable prompt
|
||||
and reference binding as the dominant content; keeps Works full-height on the
|
||||
right; and retains exactly one orange primary action.
|
||||
- Generated and visually inspected the reference-row simplification:
|
||||
`/Users/inmanx/.codex/generated_images/01a07509-ca2b-76c3-99ef-8ac3a2c297b9/exec-5330c387-e4eb-48c6-a289-8cf0be448c86.png`.
|
||||
- Confirmed that the final prompt is now the only visible place describing how
|
||||
`@图片1` affects generation, while the reference row exposes only binding and
|
||||
file-management state. No role, preserve, style, weight, or strength control
|
||||
remains, and all previously selected layout constraints are preserved.
|
||||
- Confirmed the preview retains the selected layout and makes the visible
|
||||
token-to-thumbnail relationship and replacement affordances legible without
|
||||
adding a new permanent panel or a second instruction source.
|
||||
- Implementation Design QA compared the selected source and two native CUA
|
||||
implementation states in one combined image. The first pass found a P2 lifecycle
|
||||
mismatch: an old succeeded task caused a current offered plan to show `已完成`.
|
||||
Status precedence and readiness copy were fixed; the second pass had no
|
||||
remaining P0/P1/P2 finding. See `design-qa.md` (`final result: passed`).
|
||||
- `pnpm run typecheck`: passed after the final source changes.
|
||||
- `pnpm run lint:check`: passed with five pre-existing warnings in Home and
|
||||
Makelore pages; no errors and no warning in changed files.
|
||||
- Focused Vitest: 5 files / 50 tests passed after the final shell/title-bar revision;
|
||||
the final reference-token/card run passed 2 files / 17 tests, including
|
||||
unbound-token blocking and no-duplicate binding.
|
||||
- `pnpm run build:vite`: passed after the final source changes. Existing dynamic
|
||||
import and large-chunk warnings remain unchanged.
|
||||
- Full `pnpm test -- --run`: 220 files / 1846 tests passed, 3 skipped; 2 unrelated
|
||||
Pi suites failed because the fresh worktree lacks the top-level
|
||||
`node_modules/@earendil-works/pi-ai` link even though the package exists in the
|
||||
pnpm store. The six failing real-process tests and one import failure do not
|
||||
touch Canvas code.
|
||||
- Electron E2E was updated for the right rail, compact responsive Sheet, inline
|
||||
prompt/parameters, Quote confirmation, and history collapse. It was not run in
|
||||
this turn because Product Design browser policy requires an explicitly selected
|
||||
browser before invoking Playwright CLI; TypeScript and ESLint validated the spec.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- If the service adds a stable Workspace-summary cover field, use it to replace
|
||||
the intentional generic icon fallback for non-current right-rail items.
|
||||
- If the service adds reference-count/media capabilities, project those limits
|
||||
into the add/upload affordance without introducing a client constant.
|
||||
- A future service contract may formalize the creator-facing prompt separately;
|
||||
until then `content.concept` remains the public editable projection and the
|
||||
provider Prompt remains private.
|
||||
- Decide whether chat-attached images enter References automatically as proposals
|
||||
or remain uploaded Assets until the user/AI explicitly inserts and binds their
|
||||
prompt token; in either case the server reducer must remain authoritative.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: ADR-007 presentation guidance, Canvas current-state documentation, the
|
||||
shared Canvas contract, and generation-plan/reference-image interaction rules.
|
||||
- Proposal: the active Canvas plan card combines the creator-facing final prompt
|
||||
with its public Reference bindings. The editor displays youth-readable
|
||||
`@图片N` aliases backed by stable server-owned Reference and Asset identities.
|
||||
Typing `@` selects existing images or upload; unresolved aliases create
|
||||
targeted missing-image slots and block Quote availability; bound references
|
||||
expose only thumbnail, alias, filename, binding state, replace, and remove.
|
||||
The final prompt is the sole creator-facing place that specifies how each
|
||||
reference affects generation; the row must not duplicate purpose,
|
||||
preservation, style, strength, weight, or other instructions.
|
||||
Production parameters remain directly visible and editable in a compact
|
||||
inline toolbar rather than equal-width selector cards or an on-demand editor.
|
||||
Prompt, reference, or parameter edits produce a new Specification revision
|
||||
and a new Quote. Confirmed revisions collapse into chronological task history.
|
||||
The maximum reference count and media types are service capabilities rather
|
||||
than client constants. Provider compilation remains private.
|
||||
- Evidence: the user's explicit direction to borrow the pure-AIGC reference
|
||||
interaction; inspected live states and source in `zhinianAIGC`; Makelore's
|
||||
current Reference DTO/UI; ADR-007; and the inspected revised concept.
|
||||
- Future impact: a future service may formalize token serialization and a
|
||||
dedicated creator-facing prompt field, while keeping provider compilation
|
||||
private. Future UI must not keep raw ordinal text as the binding authority,
|
||||
permit confirmation with a missing token, duplicate reference
|
||||
instructions outside the prompt, grow a competing permanent Asset column,
|
||||
hide routine parameters behind disclosure, or restore high-whitespace
|
||||
parameter cards to the settled plan.
|
||||
- Semantic conflicts: the current public Reference DTO includes role, preserve,
|
||||
adapt, and do-not-copy fields. Exposing those as separate editable controls
|
||||
would conflict with the user's confirmed single-source interaction. The
|
||||
implementation preserves these existing values for service compatibility but
|
||||
does not expose them as a second creator-facing authority; any future contract
|
||||
revision should make their derived status explicit.
|
||||
Client-only token parsing as semantic authority or exposure of provider Prompt
|
||||
would still conflict with ADR-007 and is explicitly rejected. The shipped UI
|
||||
uses aliases only as creator-facing display while stable Reference/Asset ids
|
||||
remain in the existing Specification operations.
|
||||
- Human confirmation: the user explicitly confirmed implementation of the
|
||||
right Works rail, inline plan, editable final prompt, compact direct parameters,
|
||||
and binding-only reference row. Any future public contract change still needs
|
||||
coordinated product/service review.
|
||||
@@ -1,123 +0,0 @@
|
||||
# Task: Redesign Coding default page
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260906-coding-default-page-a7c42e
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260906-coding-default-page-a7c42e-coding-default-page
|
||||
- Worktree: /Users/inmanx/Documents/makelore-task-coding-default-page-a7c42e
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Replace the no-project Code entry redirect with a dedicated conversation-first
|
||||
landing state on `/chat`.
|
||||
- Restyle both the no-project landing and the empty Conversation timeline around
|
||||
the existing Makelore M brand mark, a large centered prompt, and the spacious
|
||||
vertical hierarchy shown in the supplied Codex reference.
|
||||
- Keep project creation reachable from the landing surface and update focused
|
||||
Renderer/Electron coverage plus README current-state wording.
|
||||
- Apply the user's follow-up correction: the lower landing surface is a standalone
|
||||
`新增项目` CTA followed by horizontally arranged existing-project cards, not a
|
||||
composer-shaped project starter.
|
||||
- Apply the user's final copy correction: remove the visible `已有项目` heading and
|
||||
`选择一个项目继续` helper while retaining the horizontal project-card rail.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Reuse `src/assets/logo.svg`; do not copy or approximate the Codex mark and do
|
||||
not generate a new brand asset.
|
||||
- Preserve the single Makelore light visual system, bundled typography, Chinese
|
||||
UI, project-local `.makelore` authority, and all Main-owned runtime/API seams.
|
||||
- The no-project call to action must open the existing Sidebar project-creation
|
||||
flow rather than introducing a second creation implementation; existing-project
|
||||
cards must likewise reuse the Sidebar's validated project-entry behavior.
|
||||
- Existing projects, Agent selection, Conversation creation, Composer behavior,
|
||||
model/runtime controls, and accepted/uncertain mutation semantics remain
|
||||
unchanged.
|
||||
- Completed peer tasks for Plugin rehoming and removal of the project setup gate
|
||||
overlap in Code-entry files but have no committed branch tips to consume. This
|
||||
task therefore stays isolated on the recorded base and keeps its changes small
|
||||
enough for later semantic integration.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Code now resolves an empty local project list to `/chat` instead of redirecting
|
||||
to Project Configuration.
|
||||
- The no-project view uses the existing Makelore M vector asset and a large
|
||||
centered guide sentence while retaining the Makelore sidebar and light visual
|
||||
system. Its lower surface now uses the user's clarified standalone orange
|
||||
`新增项目` CTA followed directly by an overflow-safe horizontal row of existing
|
||||
projects, without the redundant visible project-section heading or helper copy.
|
||||
- Project creation reuses the Sidebar's existing dialog through a renderer-local
|
||||
event bridge; project-card selection uses the same bridge to invoke the
|
||||
Sidebar's validated entry flow instead of duplicating project activation.
|
||||
- Each project card is backed by the real local project catalog and exposes the
|
||||
project name and last-opened date; an empty catalog shows only the CTA and does
|
||||
not fabricate sample projects.
|
||||
- Empty Conversations reuse the same branded hero above the real editable
|
||||
Composer and automatically yield to the normal timeline after the first entry.
|
||||
- README current-state wording, focused unit coverage, and the Code-entry Electron
|
||||
navigation regression were updated. A side-by-side visual QA pass is recorded
|
||||
in project-root `design-qa.md` with `final result: passed`.
|
||||
|
||||
## Verification
|
||||
|
||||
- `corepack pnpm install --frozen-lockfile` — passed with pinned pnpm `10.33.4`.
|
||||
- `corepack pnpm run typecheck` — passed.
|
||||
- `corepack pnpm exec vitest run tests/unit/coding-chat-panel.test.tsx tests/unit/coding-conversation-timeline.test.tsx tests/unit/module-navigation.test.tsx tests/unit/app-module-provider-gate.test.tsx --maxWorkers=4`
|
||||
— 4 files, 58 tests passed.
|
||||
- Follow-up focused run:
|
||||
`corepack pnpm exec vitest run tests/unit/coding-chat-panel.test.tsx tests/unit/coding-project-entry.test.ts tests/unit/module-navigation.test.tsx tests/unit/app-module-provider-gate.test.tsx --maxWorkers=4`
|
||||
— 4 files, 48 tests passed.
|
||||
- Final-copy focused run:
|
||||
`corepack pnpm exec vitest run tests/unit/coding-chat-panel.test.tsx tests/unit/coding-project-entry.test.ts --maxWorkers=2`
|
||||
— 2 files, 23 tests passed, including assertions that `已有项目` and
|
||||
`选择一个项目继续` stay absent while real cards remain.
|
||||
- `corepack pnpm exec eslint src/pages/Chat/CodingChatPanel.tsx tests/unit/coding-chat-panel.test.tsx tests/e2e/main-navigation.spec.ts`
|
||||
— passed with no output.
|
||||
- `corepack pnpm test` — 223 files passed; 1,863 tests passed and 3 skipped.
|
||||
- `corepack pnpm run lint:check` — passed with 0 errors and the repository's 5
|
||||
pre-existing warnings in `src/pages/Home/index.tsx` and
|
||||
`src/pages/Makelore/index.tsx`.
|
||||
- `corepack pnpm run build:vite` — Renderer, Electron Main, Preload, and utility
|
||||
worker production builds passed; only existing Browserslist, mixed-import, and
|
||||
chunk-size warnings were emitted.
|
||||
- `corepack pnpm exec playwright test tests/e2e/main-navigation.spec.ts --grep
|
||||
"offers a create CTA|returns to the module chooser"` — 2 tests passed against
|
||||
the built Electron app, covering empty and remembered-project entry states,
|
||||
absent section/helper copy, horizontal card order, direct card entry, `/chat`,
|
||||
and project-dialog launch.
|
||||
- `git diff --check` — passed.
|
||||
- Visual comparison:
|
||||
`/Users/inmanx/.codex/visualizations/2026/09/06/01a0756a-b6f5-7892-a11c-1c1608ebe592/codex-reference-vs-makelore-v3.png`
|
||||
plus the focused lower crop
|
||||
`/Users/inmanx/.codex/visualizations/2026/09/06/01a0756a-b6f5-7892-a11c-1c1608ebe592/codex-reference-vs-makelore-v3-bottom.png`
|
||||
— the user-identified composer/CTA and redundant-copy mismatches are resolved,
|
||||
and no actionable P0/P1/P2 differences remain.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- During integration, semantically reconcile `App.tsx`, `Sidebar.tsx`, and the
|
||||
Code-entry tests with the concurrently completed but uncommitted Plugin-rehoming
|
||||
and project-gate-removal tasks; their branch tips contain no commits to merge or
|
||||
cherry-pick from this feature worktree.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: `.project-docs/30-worklog/current-state.md` and
|
||||
`.project-docs/40-domain/business-rules.md`.
|
||||
Proposal: record that entering Code with no active local project remains on
|
||||
`/chat`, presents the branded hero, a standalone `新增项目` CTA, and real local
|
||||
projects as an unlabeled horizontal card row. Creation and project-card entry
|
||||
route through the single existing Sidebar flows; empty Conversations share the
|
||||
same brand hero until their first entry.
|
||||
Evidence: focused unit coverage, the passing Electron navigation regression,
|
||||
production build, and the passed side-by-side visual QA.
|
||||
Future impact: future routing or setup work must not restore the configuration
|
||||
redirect or a second project-creation implementation.
|
||||
Human confirmation: not required for intent because the user explicitly
|
||||
requested this entry behavior; integration still must reconcile the overlapping
|
||||
peer tasks semantically.
|
||||
@@ -1,100 +0,0 @@
|
||||
# Task: Move plugins into project settings
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260906-move-plugins-project-settings-7c91a4e2
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260906-move-plugins-project-settings-7c91a4e2-move-plugins-project-settings
|
||||
- Worktree: /Users/inmanx/Documents/makelore-task-move-plugins-project-settings-7c91a4e2
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Ready for integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Move the single user-visible Plugin workspace from the Code sidebar directly
|
||||
into the same Project Configuration page used to configure Agents, Skills,
|
||||
models, and knowledge.
|
||||
- Make `/project-config/plugins` the canonical Plugin URL while retaining
|
||||
deterministic compatibility redirects from `/plugins`, `/plugin-marketplace`,
|
||||
`/my-plugins`, and `/project-plugins`.
|
||||
- Update focused unit and Electron E2E coverage, the packaged-product marker, and
|
||||
README current-state wording for the navigation change.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Preserve the existing unified Plugin workspace and its projections of
|
||||
Marketplace, Account Library, official-device state, Device Packages, current
|
||||
project state, and retained IDs; do not restore the retired duplicate Plugin
|
||||
Services sheet.
|
||||
- Keep acquisition, device installation, project enablement, Agent Skill
|
||||
assignment, runtime authorization, and billing as separate lifecycles.
|
||||
- Preserve Main-owned Host API, authentication, package verification, and runtime
|
||||
authority. Renderer navigation must not introduce direct IPC or local-runtime
|
||||
HTTP access.
|
||||
- Keep Project Configuration and its nested Plugin route available before Code
|
||||
Provider initialization, including the no-active-project state.
|
||||
- Render the nested route as a same-page Project Configuration drawer, not as a
|
||||
replacement standalone Plugin page.
|
||||
- Preserve legacy deep-link query/state and authenticated return paths.
|
||||
- Keep the single Makelore light visual system and Chinese product copy.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Added a `插件` ResourceCard alongside models, Skills, and knowledge in Project
|
||||
Configuration, retained access in the no-active-project state, and removed the
|
||||
standalone Code sidebar Plugin entry.
|
||||
- Changed `/project-config/plugins` to render the Project Configuration page with
|
||||
its wide Plugin drawer open. The Agent/Skill project page remains mounted behind
|
||||
the drawer; closing it returns to the same page. Query/state-preserving
|
||||
`/plugins` compatibility and existing filtered legacy redirects remain intact.
|
||||
- Reused the unified Plugin controller and view inside the drawer without
|
||||
restoring the retired duplicate Plugin Services implementation.
|
||||
- Kept the unified Plugin controller, data sources, mutations, authentication,
|
||||
and lifecycle semantics unchanged.
|
||||
- Updated initialization gates, login return path, README, packaged Marketplace
|
||||
artifact assertion, focused unit tests, and Electron E2E journeys.
|
||||
|
||||
## Verification
|
||||
|
||||
- Focused navigation, layout, embedded Plugin, controller, login, and artifact
|
||||
verification — 6 files, 62 tests passed; the embedded-view regression failed
|
||||
before implementation and passed afterward.
|
||||
- `corepack pnpm run typecheck` — passed.
|
||||
- Scoped ESLint across all changed source and test files — passed with no output.
|
||||
- `corepack pnpm run build:vite` — Renderer, Main, Preload, and utility builds passed;
|
||||
only existing Browserslist, mixed-import, and chunk-size warnings remained.
|
||||
- `node ./node_modules/@playwright/test/cli.js test tests/e2e/project-plugins.spec.ts tests/e2e/plugin-marketplace.spec.ts` — 4/4 passed, including assertions that the Project Configuration page remains mounted behind the Plugin drawer.
|
||||
- `corepack pnpm test` — 221 regular files (1861 passed, 3 skipped) and the pressure suite (1 passed).
|
||||
- `corepack pnpm run lint:check` — passed with 0 errors and 5 pre-existing warnings.
|
||||
- `git diff --check` — passed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Integration should reconcile the navigation wording in canonical project memory
|
||||
and review overlap with planning task `20260906-remove-project-gate-7c31` before
|
||||
merging. No product-semantic conflict was found in the current peer-task audit.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: `.project-docs/30-worklog/current-state.md`,
|
||||
`.project-docs/20-architecture/system-overview.md`, and
|
||||
`.project-docs/40-domain/business-rules.md`.
|
||||
- Proposal: record the Agent/Skill Project Configuration page as the visible
|
||||
owner of the single unified Plugin workspace. Its `插件` card opens a same-page
|
||||
wide drawer; `/project-config/plugins` is the canonical deep link for that
|
||||
state, and old public URLs remain deterministic compatibility redirects. This
|
||||
rehomes the reviewed unified workspace and does not restore the superseded
|
||||
duplicate Plugin Services implementation.
|
||||
- Evidence: explicit user direction in this task, focused unit coverage, 4/4
|
||||
Electron E2E, full unit/typecheck/lint/build verification, and the task-owned
|
||||
proposal `20260906-move-plugins-project-settings-7c91a4e2__project-settings-plugin-navigation.md`.
|
||||
- Future impact: new Plugin navigation must originate in Project Configuration,
|
||||
while Plugin lifecycle boundaries, Web Search exclusion, and Main-owned
|
||||
authority remain unchanged.
|
||||
- Semantic conflict: this supersedes canonical statements that the Code sidebar
|
||||
owns the only Plugin entry and `/plugins` is canonical; it does not conflict
|
||||
with ADR-008 or the Plugin lifecycle boundaries.
|
||||
- Human confirmation: already supplied and clarified by the user: Plugins belong
|
||||
on the same project page used to configure Agents and Skills, not on a separate
|
||||
page. No additional product-direction approval is required during integration.
|
||||
@@ -1,102 +0,0 @@
|
||||
# Task: Remove Canvas inspiration entry
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260906-remove-canvas-inspiration-56e64d28
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260906-remove-canvas-inspiration-56e64d28-remove-canvas-inspiration
|
||||
- Worktree: /Users/inmanx/Documents/makelore-task-remove-canvas-inspiration-56e64d28
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Ready for integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Remove the user-visible “获取灵感” action from both expanded and collapsed
|
||||
Canvas sidebars.
|
||||
- Retire the Prompt Museum Renderer route and redirect historical
|
||||
`/image-prompts` deep links to the Canvas workspace.
|
||||
- Remove route-specific title-bar/sidebar treatment and update focused unit,
|
||||
Electron E2E, README, and retained server-contract wording.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Keep Canvas conversation, Living Form, Workspace, Quote, Task, Asset, project
|
||||
creation, and project deletion behavior unchanged.
|
||||
- Preserve Main-owned Prompt Museum API/auth/media security boundaries in this
|
||||
small UI-removal task; do not infer authority to delete server data or change
|
||||
backend contracts.
|
||||
- Keep old links safe and deterministic by returning users to `/image-canvas`
|
||||
without initializing Programming providers.
|
||||
- Maintain the Chinese-only Makelore light interface and existing module-access
|
||||
policy.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Removed the lightbulb/inspiration action from both expanded and collapsed
|
||||
Canvas sidebars.
|
||||
- Retired the Prompt Museum Renderer route and its lazy bundle entry. Historical
|
||||
`/image-prompts` paths now redirect to `/image-canvas` while remaining covered
|
||||
by the Canvas module-access gate.
|
||||
- Removed the obsolete Prompt Museum title-bar and sidebar-spacing special cases,
|
||||
so Canvas keeps one workspace shell.
|
||||
- Preserved the dormant Main-owned Prompt Museum Host API, authentication, media
|
||||
validation, shared DTOs, and their existing focused tests; this task changes
|
||||
only the AI Design product surface and does not delete server data.
|
||||
- Updated README, retained server-contract wording, focused unit coverage, and
|
||||
the Electron E2E flow to describe and verify the retired entry.
|
||||
|
||||
## Verification
|
||||
|
||||
- `corepack pnpm install --frozen-lockfile` — passed with repository-pinned pnpm
|
||||
10.33.4.
|
||||
- Focused Vitest coverage for App routing, Main layout, TitleBar, and the light
|
||||
visual system — 4 files, 41 tests passed.
|
||||
- `corepack pnpm run typecheck` — passed.
|
||||
- `corepack pnpm run lint:check` — passed with zero errors and five pre-existing
|
||||
warnings in unrelated Home/Makelore files.
|
||||
- `corepack pnpm run build:vite` — passed for Renderer, Main, Preload, and the
|
||||
release utility worker.
|
||||
- `node ./node_modules/@playwright/test/cli.js test tests/e2e/image-workspace-v2.spec.ts --grep "removes the inspiration entry"`
|
||||
— passed 1/1, confirming the sidebar entry is absent and the historical route
|
||||
returns to Canvas.
|
||||
- `corepack pnpm test` — passed: 1,859 ordinary tests passed, three skipped, and
|
||||
the isolated pressure test passed 1/1.
|
||||
- `git diff --check` — passed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- A serialized Integration task should reconcile canonical Prompt Museum product
|
||||
statements and split the mixed Museum/Canvas production-smoke commitment so
|
||||
the still-relevant Canvas deletion and re-Quote checks remain tracked.
|
||||
- Physically deleting the retained Main API, shared DTOs, or upstream data would
|
||||
require a separate explicit scope; this task intentionally leaves those secure
|
||||
boundaries intact and unreachable from the current product UI.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: `.project-docs/30-worklog/current-state.md`,
|
||||
`.project-docs/20-architecture/system-overview.md`,
|
||||
`.project-docs/20-architecture/module-map.md`,
|
||||
`.project-docs/20-architecture/data-flow.md`,
|
||||
`.project-docs/40-domain/business-rules.md`,
|
||||
`.project-docs/40-domain/glossary.md`, and
|
||||
`.project-docs/80-commitments/commitments.md`.
|
||||
- Proposal: record that Prompt Museum is no longer an active Canvas product
|
||||
surface: expanded/collapsed sidebars expose no inspiration action, the page is
|
||||
not mounted or bundled by App routing, and historical `/image-prompts` links
|
||||
redirect to `/image-canvas`. Retained Main API/auth/media validation and shared
|
||||
DTO code is dormant compatibility/security infrastructure rather than a visible
|
||||
module. Remove Museum-specific production-smoke work from the mixed commitment
|
||||
while retaining its Canvas deletion and re-Quote portions.
|
||||
- Evidence: the user's explicit direction, focused 41-test regression suite,
|
||||
full 1,859-test plus pressure pass, typecheck, lint, production build, and the
|
||||
passing Electron route/sidebar check.
|
||||
- Future impact: navigation and product documentation must not restore the
|
||||
inspiration action or Prompt Museum route without a new explicit product
|
||||
decision. Dormant API removal remains separately scoped.
|
||||
- Semantic conflict: this supersedes canonical statements that Canvas exposes a
|
||||
Prompt Museum entry and that its pending Prompt participates in active Canvas
|
||||
data flow; it does not change ADR-007 or Main-owned security boundaries.
|
||||
- Human confirmation: already supplied by the user in this task; no additional
|
||||
product-direction approval is required during integration.
|
||||
@@ -1,123 +0,0 @@
|
||||
# Task: Remove project creation gate and template selection
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260906-remove-project-gate-7c31
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260906-remove-project-gate-7c31-remove-project-gate-7c31
|
||||
- Worktree: /Users/inmanx/Documents/makelore-task-remove-project-gate-7c31
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Ready for integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Remove the user-facing project creation identity/type choices from the Code
|
||||
sidebar and use the existing safe defaults instead.
|
||||
- Stop treating `config.initialized` as a navigation/UI gate for an otherwise
|
||||
valid local Code project.
|
||||
- Keep an empty project usable by presenting a non-blocking route to project
|
||||
settings when no Agent exists.
|
||||
- Keep the durable project ID as an internal service concern: remove it from the
|
||||
normal Project Configuration UI and automatically assign one when a valid
|
||||
legacy project lacks it.
|
||||
- Update focused Renderer tests, the shared Electron project-creation flow, and
|
||||
README product-state documentation.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- A new project receives a Main-generated local UUID and the existing internal
|
||||
`interactive_ai_app` type without asking the user to choose either during
|
||||
creation.
|
||||
- Preserve `.makelore/project.json`, historical project-type normalization,
|
||||
underlying identity compatibility endpoints, publish contracts, and existing
|
||||
custom projects without exposing identity choices to young users.
|
||||
- Keep the bundled Project Scaffold Skill available as an optional Plugin; it
|
||||
must not be part of, or a prerequisite for, project creation.
|
||||
- Missing or invalid project metadata remains an entry error. A valid legacy
|
||||
config missing only `projectId` is repaired by Main with a generated UUID;
|
||||
the legacy `initialized` Boolean no longer blocks a valid project.
|
||||
- Renderer backend access continues through the existing Host API/store seams.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Simplified the Code project creation dialog to directory selection only.
|
||||
Main still generates the local project UUID, while the Renderer writes the
|
||||
existing internal `interactive_ai_app` default without presenting identity,
|
||||
type, or template choices.
|
||||
- Removed the `initialized` navigation redirect and full-workspace overlay for
|
||||
valid project metadata. Missing or invalid metadata still routes to Project
|
||||
Configuration.
|
||||
- Added an empty-Agent state in the coding chat so a newly created project opens
|
||||
immediately and offers a direct, non-blocking route to create its first Agent.
|
||||
- Reworded Project Configuration save affordances so the retained compatibility
|
||||
write to `initialized` is no longer described as an initialization ceremony.
|
||||
- Removed the Project Configuration identity card, raw UUID, bind form, and
|
||||
independent-copy action. Main now serializes automatic UUID assignment for a
|
||||
valid legacy project missing `projectId`, including concurrent reads, while
|
||||
retaining the underlying compatibility endpoints and immutable schema rules.
|
||||
- Replaced the last creation-dialog identity terminology with youth-readable
|
||||
copy: only the folder choice is explained; all other setup is automatic.
|
||||
- Preserved project schemas, historical project types, publishing contracts,
|
||||
existing custom projects, and the optional bundled Project Scaffold
|
||||
Plugin/Skill.
|
||||
- Updated README product-state documentation and focused unit/Electron coverage.
|
||||
- Diagnosed a post-verification UI mismatch as a development-runtime issue: the
|
||||
visible Electron window had been launched from the separate Plugins/settings
|
||||
task worktree, whose source still contained the former identity choices. The
|
||||
stale process group was stopped and the verified feature worktree was started
|
||||
on the standard development ports.
|
||||
|
||||
## Verification
|
||||
|
||||
- `corepack pnpm install --frozen-lockfile` — passed with the repository-pinned
|
||||
pnpm 10.33.4.
|
||||
- `corepack pnpm run typecheck` — passed.
|
||||
- Focused ESLint across all changed source/test files — passed.
|
||||
- Focused Renderer/Main tests — 60 passed across App routing, Main layout,
|
||||
Sidebar, CodingChatPanel, Project Configuration, config stores, and serialized
|
||||
automatic legacy identity assignment.
|
||||
- Adjacent project-schema/store tests — 34 passed.
|
||||
- `corepack pnpm run lint:check` — passed with zero errors; five pre-existing
|
||||
warnings remain in unrelated Home/Makelore files.
|
||||
- `corepack pnpm test` — passed: 1,862 ordinary tests passed, three skipped, and
|
||||
the isolated pressure test passed 1/1.
|
||||
- `corepack pnpm run build:vite` — passed for Renderer, Main, Preload, and the
|
||||
release utility worker.
|
||||
- `corepack pnpm exec playwright test tests/e2e/coding-project-identity.spec.ts tests/e2e/project-configuration-skills.spec.ts`
|
||||
— passed (2/2), covering directory-only creation, direct chat entry, absence
|
||||
of all identity terminology and controls, automatic legacy UUID repair, and
|
||||
the empty-Agent settings route.
|
||||
- Live runtime verification after restart — Vite PID 16968 and Electron PID
|
||||
16975 both resolve to this task worktree; the active Renderer command reports
|
||||
the same `app-path`, and the source served on port 5173 contains the automatic
|
||||
setup copy while none of `项目身份`, `创建新的项目 ID`, or `绑定已有项目 ID`
|
||||
is present.
|
||||
- `git diff --check` — passed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Promote the project-creation workflow change into ADR-008 and the canonical
|
||||
project architecture/domain documentation during a serialized Integration
|
||||
task.
|
||||
- Physically removing the optional bundled Project Scaffold Plugin/Skill, if
|
||||
desired, should be a separate explicit decision because it affects packaged
|
||||
resources and release coverage; this task only removes it from the creation
|
||||
path.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: ADR-008 and canonical project-creation architecture/domain documents.
|
||||
Proposal: amend the user-facing creation workflow so identity and project type
|
||||
are safe defaults instead of required choices, and treat `initialized` as a
|
||||
compatibility field rather than a workspace navigation gate. Durable project
|
||||
identity remains Main-owned and is generated automatically for new projects
|
||||
and valid legacy configs that lack it; raw UUIDs, bind choices, and copy
|
||||
semantics must not return to ordinary youth-facing UI. Existing custom
|
||||
projects, type normalization, publishing authority, compatibility endpoints,
|
||||
and the optional Scaffold Skill remain. Future impact: product documentation
|
||||
and future creation/configuration UI must not restore these choices as
|
||||
mandatory or visible setup. Human confirmation is represented by the user's
|
||||
explicit statements that the product targets young users and service-required
|
||||
identity should default automatically; canonical promotion still belongs to a
|
||||
serialized Integration task.
|
||||
@@ -0,0 +1,165 @@
|
||||
# Task: Merge all completed changes into main
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260907-merge-all-changes-8f3c2a
|
||||
- Mode: Integration
|
||||
- Branch: codex/20260907-merge-all-changes-8f3c2a-merge-all-changes
|
||||
- Worktree: /Users/inmanx/Documents/makelore-integrate-all-8f3c2a
|
||||
- Base commit: f8eee430f4f4167dc2ecc682ece96c652cdde14b
|
||||
- Owner: codex
|
||||
- Status: Transferred to Final Integration Gate
|
||||
|
||||
## Scope
|
||||
|
||||
- Inventory every local worktree and branch against `main`, then integrate all
|
||||
completed, current-product changes into one reviewed candidate.
|
||||
- Reconcile the overlapping September 6 Code, Project Configuration, Plugin,
|
||||
and Canvas changes semantically rather than by file-order preference.
|
||||
- Promote accepted task facts into canonical project memory, run the required
|
||||
verification, and advance the local `main` branch without rewriting history.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Preserve the Code, Canvas, and Robot product boundary. Do not restore the
|
||||
retired Learning module, the retired Prompt Museum product route, or other
|
||||
superseded historical branches merely because their refs still exist.
|
||||
- Preserve Main-owned backend/runtime authority, `.makelore` project ownership,
|
||||
the single light visual system, and ADR-007/ADR-008 trust boundaries.
|
||||
- Treat the latest explicit user direction as authoritative where completed
|
||||
Canvas explorations differ: Works remains on the right and the implemented
|
||||
prompt/reference plan supersedes the earlier left-rail concept.
|
||||
- Preserve source histories with ordinary commits/merges; do not reset, rebase,
|
||||
force-push, delete worktrees, or discard unknown changes.
|
||||
|
||||
## Project Context Loaded
|
||||
|
||||
Task context:
|
||||
|
||||
- Task ID: `20260907-merge-all-changes-8f3c2a`
|
||||
- Mode: Integration
|
||||
- Branch: `codex/20260907-merge-all-changes-8f3c2a-merge-all-changes`
|
||||
- Worktree: `/Users/inmanx/Documents/makelore-integrate-all-8f3c2a`
|
||||
- Base commit: `f8eee430f4f4167dc2ecc682ece96c652cdde14b`
|
||||
- Other active local tasks: nine September 6 feature/audit tasks and the
|
||||
September 5 development-start task reported by `task_context.py status`.
|
||||
- Overlap or semantic-conflict assessment: Plugin rehoming, project-gate
|
||||
removal, and the Coding landing page overlap in App/Sidebar/configuration
|
||||
paths but express compatible confirmed behavior. Canvas inspiration removal
|
||||
overlaps the implemented right-Works/reference-plan redesign and must be
|
||||
reconciled. The earlier left-Works concept is explicitly superseded by the
|
||||
later right-Works direction; the audit's unconfirmed stage proposal is not a
|
||||
canonical promotion source. No unresolved product-direction conflict remains.
|
||||
|
||||
Read:
|
||||
|
||||
- `.project-docs/05-agent-entry/{read-before-planning,memory-index,planning-gate,integration-gate}.md`
|
||||
- `.project-docs/00-brief/{project-positioning,success-criteria}.md`
|
||||
- `.project-docs/30-worklog/current-state.md` and every active peer task record
|
||||
- `.project-docs/10-decisions/{decision-index,adr-007-ai-design-living-form-v2,adr-008-interactive-ai-app-scaffold}.md`
|
||||
- `.project-docs/20-architecture/{system-overview,module-map,data-flow}.md`
|
||||
- `.project-docs/40-domain/{business-rules,glossary}.md`
|
||||
- `.project-docs/80-commitments/commitments.md`
|
||||
- `.project-docs/90-maintenance/{stale-items,doc-update-policy}.md`
|
||||
- The Plugin navigation task-owned decision proposal.
|
||||
|
||||
Relevant understanding:
|
||||
|
||||
- Project goal: ship one Electron product with Code, Canvas, and Robot while
|
||||
keeping Renderer access behind Main-owned APIs and project state in
|
||||
`.makelore`.
|
||||
- Current integrated focus: a conversation-first Canvas governed by one Current
|
||||
Specification and immutable Quotes, a Pi-only Code runtime, and minimal
|
||||
interactive-AI project creation with an optional explicit Scaffold Skill.
|
||||
- Active task scope: consolidate all completed current-product local changes,
|
||||
reconcile canonical memory, verify the result, and promote it to local main.
|
||||
- Active constraints: preserve history and unknown work, keep Learning retired,
|
||||
avoid direct Renderer IPC/runtime access, and do not change backend contracts
|
||||
incidentally.
|
||||
- Decisions affecting this task: ADR-007 controls Canvas semantic authority;
|
||||
ADR-008 controls project creation/Scaffold/release authority and is amended by
|
||||
the confirmed simplified user-facing setup flow.
|
||||
- Evidence, reflections, or commitments affecting this task: source task
|
||||
verification is strong, but production service/package gates remain pending;
|
||||
Prompt Museum's mixed commitment must retain Canvas deletion/re-Quote checks
|
||||
while dropping the retired Museum UI smoke.
|
||||
- Files or modules likely involved: `src/App.tsx`, layout/sidebar/title-bar,
|
||||
Project Configuration and Plugins pages, Code chat entry, Canvas page/store
|
||||
components, focused unit/Electron tests, README, and canonical project docs.
|
||||
- Unknowns, stale docs, or conflicts: several ready-for-integration branches may
|
||||
still hold uncommitted work; old local branch refs include explicitly
|
||||
superseded Learning work and must be classified rather than blindly merged.
|
||||
|
||||
Gate result:
|
||||
|
||||
- Passed.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Inventoried every local worktree and branch against `main`, including dirty
|
||||
feature worktrees, audit-only artifacts, and historical refs. Committed each
|
||||
completed product source in its owning worktree before integration:
|
||||
`af13aca` (project gate), `ce90f57` (Code landing), `be1764e` (Plugin
|
||||
rehoming), `1562a49` (Canvas plan/reference redesign), and `b22559a`
|
||||
(Canvas inspiration removal). The existing startup record was preserved as
|
||||
`1dfa922` on `main`.
|
||||
- Integrated those sources with ordinary merges `39d7b7e`, `a91c7e3`,
|
||||
`f6c5961`, `ea1219c`, and `e069ec6`. Conflict resolutions preserve the
|
||||
directory-only project flow, direct valid-project chat entry, no-Agent empty
|
||||
state, Project Configuration-owned Plugin sheet, right-side Canvas Works rail,
|
||||
central active plan, editable final Prompt/reference aliases, and retired
|
||||
Prompt Museum Renderer surface.
|
||||
- Reconciled overlapping files semantically. In particular, the new
|
||||
`DesignWorksRail` also had its inspiration action removed even though that file
|
||||
did not exist on the inspiration-removal source branch; the Plugin sheet keeps
|
||||
Project Configuration mounted without restoring duplicate Plugin Services;
|
||||
and valid projects no longer branch on the legacy `initialized` Boolean.
|
||||
- Fixed two integration-only verification defects: restored the missing `Bot`
|
||||
icon import in the Code empty-Agent state, and made the Canvas unit fixture
|
||||
establish a complete authenticated identity. Updated Electron journeys whose
|
||||
assertions still assumed pre-integration project routing, Canvas shell, or
|
||||
non-exact accessible names.
|
||||
- Promoted accepted facts into README, ADR-007, ADR-008, the decision index,
|
||||
architecture maps/flows, business rules, glossary, commitments, and current
|
||||
state. Prompt Museum production smoke was removed from the mixed commitment
|
||||
while Canvas reference/re-Quote/deletion smoke remains pending.
|
||||
- Excluded `codex/20260903-remove-learning-7a91` and
|
||||
`codex/learning-player-release-fix`: both are historical Learning refs
|
||||
superseded by the already integrated complete Learning removal and would
|
||||
violate the current Code/Canvas/Robot boundary. Unconfirmed Canvas audit
|
||||
concepts, generated reports, and source-worktree artifacts were also left
|
||||
uncommitted and untouched.
|
||||
|
||||
## Verification
|
||||
|
||||
- `corepack pnpm install --frozen-lockfile` — passed with pinned pnpm 10.33.4.
|
||||
- `corepack pnpm run typecheck` — passed.
|
||||
- Focused Vitest across 15 affected files — 184/184 passed.
|
||||
- `corepack pnpm test` — 223 ordinary files, 1,882 passed and 3 skipped;
|
||||
isolated pressure suite 1/1 passed.
|
||||
- `corepack pnpm run lint:check` — 0 errors; 5 pre-existing warnings remain in
|
||||
`src/pages/Home/index.tsx` and `src/pages/Makelore/index.tsx`.
|
||||
- `corepack pnpm run build:vite` — Renderer, Electron Main, Preload, and release
|
||||
utility worker builds passed; only existing Browserslist, mixed-import, and
|
||||
chunk-size warnings were emitted.
|
||||
- Targeted Electron E2E across Code identity/navigation, Project Configuration,
|
||||
Plugin lifecycle/navigation, and Canvas — 12/12 passed.
|
||||
- `git diff --check` passed after conflict and follow-up fixes.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Existing production/install gates remain unchanged: real-account Canvas V2
|
||||
reference/Quote/deletion smoke, Plugin server availability, signed platform
|
||||
packages, and the source+built+contract publication chain are still external
|
||||
follow-ups. This integration does not claim them.
|
||||
- Local `main` promotion is in scope for this task. Remote push is not authorized
|
||||
by the user's request and is not performed.
|
||||
- Because the ownership checker audits every merge-parent change since this
|
||||
task's pre-merge base, its expected foreign-task-record finding is transferred
|
||||
to fresh Integration task `20260907-finalize-merge-all-4d72c1`, based on this
|
||||
reconciled candidate. No history is rewritten to bypass that audit.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- None. This Integration task applies the reviewed source-task outcomes directly
|
||||
to canonical project memory.
|
||||
@@ -60,17 +60,22 @@
|
||||
to system Node. New and idle parent workers refresh automatically, active parents switch
|
||||
only after settlement, and child workers never inherit Device Package resources.
|
||||
- Device Packages appear as a separate `本机` source beside Official Plugins in the
|
||||
unified `/plugins` workspace and never enter Account Library, Marketplace Package
|
||||
unified Plugin workspace and never enter Account Library, Marketplace Package
|
||||
Store, Release, Channel, Admission, project enablement, Agent assignment, or server
|
||||
billing state.
|
||||
- Project Configuration owns the only user-visible unified Plugin workspace. Its
|
||||
`插件` ResourceCard opens `/project-config/plugins` as a same-page wide sheet while
|
||||
the configuration page remains mounted. Code sidebar must not add a standalone
|
||||
Plugin entry; `/plugins` and older Plugin URLs are compatibility redirects only.
|
||||
- Code-owned official bundled Plugins may be `platform_hosted` or `skill_only`.
|
||||
`makelore.project-scaffold` retains Account Library, project enablement, Agent
|
||||
assignment, Release, and Admission state while its exact Skill/templates/`.mjs`
|
||||
ship only in the signed client. 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.
|
||||
- 面向用户的 AI 编程新建流程必须在 `interactive_ai_app`(“交互式 AI 应用”)和 `custom` 中选择;`ProjectType` 是产品类型,创建后不能通过 UI 或 Host API 修改。历史 `mini_game` / `mini_program` 仅在读取边界归一为 `interactive_ai_app`,读取本身不改写配置;未传类型的兼容 API 调用按 `custom` 处理。
|
||||
- 新建项目只原子生成 `.makelore/project.json` 和 `knowledge/`。交互式 AI 应用的固定六文件 Vite 起步树只能由用户明确调用官方 bundled `makelore.project-scaffold` Plugin 中的 `makelore-project-scaffold` Skill 生成;脚本必须先预检全部目标、不得覆盖已有路径,受控失败只回滚本次创建内容,且不得安装依赖、访问网络、构建、上传或提交审核。
|
||||
- 面向用户的 AI 编程新建流程只要求选择目录,不展示 `ProjectType`、模板、原始项目 UUID、绑定或独立副本选项。Renderer 写入内部默认 `interactive_ai_app`,Main 自动生成 UUID;创建后类型仍不能通过 UI 或 Host API 修改。既有 `custom` 项目继续可用,历史 `mini_game` / `mini_program` 仅在读取边界归一为 `interactive_ai_app` 且不改写配置;未传类型的底层兼容 API 调用仍按 `custom` 处理。
|
||||
- 新建项目只原子生成 `.makelore/project.json` 和 `knowledge/`,完成后可直接进入聊天;有效旧配置仅缺 `projectId` 时由 Main 串行生成并持久化一次 UUID。缺失或无效的其他 metadata 仍进入 Project Configuration;旧 `initialized` 布尔仅为兼容字段,不得作为有效项目的导航、工作区或 Agent 创建 gate。
|
||||
- 交互式 AI 应用的固定六文件 Vite 起步树只能由用户可选地明确调用官方 bundled `makelore.project-scaffold` Plugin 中的 `makelore-project-scaffold` Skill 生成。Skill 不是项目创建、进入聊天或创建首个 Agent 的前置条件;脚本必须先预检全部目标、不得覆盖已有路径,受控失败只回滚本次创建内容,且不得安装依赖、访问网络、构建、上传或提交审核。
|
||||
- `ProjectType` 不等于 `BuildPreset` 或 Scaffold 状态:规范可发布类型映射到内部受控 Vite preset;本地 `projectType` 和 Skill 检测结果都不是授权边界,Main-owned 安全打包、Host API 和服务端包体校验仍必须执行。
|
||||
- 非专业用户只执行一次“提交审核”;构建通过后由运营审核,审核通过即直接发布。
|
||||
- 创建者发布唯一链路是项目配置“一键提交审核” → Main 本地 npm/Vite 构建 → 最终 built snapshot 的客户端 UX 预检 → source+built+artifact contract 上传 → 服务端校验/固化 → 运营审核;不恢复独立发布上传页、云部署工作台、Compose/deploy-check、自动 watcher/arm/upload 或手工 ZIP 入口。
|
||||
@@ -109,7 +114,7 @@
|
||||
- 每个 mutation 使用稳定 command 与 semantic operation identity。transport-unknown 只能重放原命令;business rejection、timeout 或用户再次点击不能自动生成新的业务意图。
|
||||
- Direction projection 是 Specification 真值。event cursor、assistant delta、Task progress 与 Asset event 只用于传输/资源收敛,不得推进或覆盖 canonical specification revision。
|
||||
- 用户提交 chat 后,客户端可以立即把同一个 pending operation 投影为临时用户气泡,并明确显示“发送中”或“正在确认”;只有服务端返回的 canonical turn 才进入 conversation timeline。确定失败时必须让原草稿重新可编辑,不得把临时投影持久化为第二条消息。
|
||||
- `design.assistant.delta` 只用于未完成回复的传输和结果收敛,不得进入 canonical conversation timeline。客户端可以把它临时显示为与同一 pending chat identity 绑定的单个未完成助手气泡;确定收敛后必须由 canonical turn 替换,unknown outcome 则保留原 identity 与已有片段。不得把片段伪装为完成回复、持久化为第二条消息、因其他 operation 更新而全局清除,或另加独立的整理进度栏。AI 当前整理出的设计理解仍由右侧 Current Specification 投影承载;连接重叠或事件重放按 connection generation 与 `chunkIndex` 去重收敛。
|
||||
- `design.assistant.delta` 只用于未完成回复的传输和结果收敛,不得进入 canonical conversation timeline。客户端可以把它临时显示为与同一 pending chat identity 绑定的单个未完成助手气泡;确定收敛后必须由 canonical turn 替换,unknown outcome 则保留原 identity 与已有片段。不得把片段伪装为完成回复、持久化为第二条消息、因其他 operation 更新而全局清除,或另加独立的整理进度栏。AI 当前整理出的设计理解仍由中央 active 制作方案投影承载;连接重叠或事件重放按 connection generation 与 `chunkIndex` 去重收敛。
|
||||
- Main 只向 Renderer 投影已知错误码的固定中文提示,未知上游错误文本必须脱敏为通用提示;Works Token、stream ticket、provider internals 留在 Main/服务端。
|
||||
- AI 绘画 Workspace JSON 请求与 shared Works token refresh 必须覆盖取凭据、发请求和读取响应 body 的完整 30 秒 deadline;即使底层 transport 忽略 abort,调用方也必须确定性结束为 `504 DESIGN_WORKSPACE_REQUEST_TIMEOUT` 并释放共同等待者。Electron-to-Node 透明 fallback 仅允许 `GET`/`HEAD`/`OPTIONS`;mutation 不得因 transport failure 被隐式重放,任何重试必须由上层显式幂等合同授权。
|
||||
- `design.quote.request` 必须绑定 exact current Specification revision 并返回 immutable Quote;任何 production-meaning edit 都需要新 revision 与新 Quote。对话或 Current Specification 就绪态可以引导用户请求并查看 Quote,桌面端可定位到报价区、移动端可打开报价面板,但该动作不得创建 Task。
|
||||
@@ -117,8 +122,11 @@
|
||||
- 图片/视频 source 必须是当前 Workspace 的 canonical Asset,并通过 typed binding 进入 Specification;medium/role 决定用途,不得从 quick-reply 文案、V1 Brief 或本地路径推断。
|
||||
- Task/Asset reconciliation 只能更新 Workspace resources;已经落库但事件迟到的 Task 可通过 refresh 恢复,不能覆盖 Living Form、local drafts 或 pending Design input。
|
||||
- 删除 Canvas 项目必须要求用户完整输入项目名并通过 Main-owned Workspace DELETE。成功后被删 Workspace 的会话、任务和资产不得继续留在 Renderer 可访问状态;服务端决定软删除、任务取消、预留积分释放和运行中任务结算。
|
||||
- Prompt Museum 只展示服务端审核并带稳定作者、来源、许可证/署名和素材授权信息的内容;客户端不内置数据集、不推断缺失版权、不提供投稿/点赞/评论/收藏/关注/排行,也不自动发送或生成选中的 Prompt。
|
||||
- Prompt Museum Renderer 只能通过 Main-owned 固定 GET 路由读取列表和详情。Works Token 不得进入 Renderer;列表查询只允许搜索、使用场景、风格、主体、语言、模型、游标和限制字段。需要受保护图片时必须新增 Main-owned 媒体代理,不能把 access token、内部路径或用户隐私放进图片 URL。
|
||||
- Canvas 桌面布局把 conversation 与唯一 active 制作方案放在中央,把 Workspace 选择/创建/删除放在 320–340 px 全高右侧 Works rail;紧凑布局使用同一个右侧 Sheet。Canvas 路由不挂载全局左栏,也不得恢复“获取灵感”入口。
|
||||
- Active 制作方案的 `content.concept` 是用户可直接编辑的最终 Prompt。Reference 通过稳定 reference ID、真实 Workspace Asset binding 和连续 `@图片N` alias 关联;Prompt 是“图片如何影响生成”的唯一可见表达,binding row 只能管理缩略图、alias、文件与替换/删除状态,不得重复 purpose/preserve/style/strength 编辑器。
|
||||
- 引用了未绑定 alias 时必须显示对应上传位并阻止 Quote 请求/确认。添加、替换、删除 reference 必须通过既有 typed operations 形成新 Specification revision;删除同时清理 binding 并重排后续 alias,已有 alias 不重复插入。Reference 数量/媒体上限只能来自服务端能力,不得复制外部参考产品的硬编码限制。
|
||||
- Prompt Museum 已退出当前产品面:Canvas 不显示入口,App 不挂载或打包其 Renderer 页面,历史 `/image-prompts` 路由只返回 `/image-canvas`。未经新的明确产品决策,不得恢复入口或页面。
|
||||
- Dormant Prompt Museum Main API/auth/media validation 和共享 DTO 可为兼容/安全保留,但 Works Token、内部路径或用户隐私仍不得进入 Renderer;保留代码不代表服务端内容、授权或产品入口已启用。
|
||||
- 产品界面当前只支持中文;系统语言与历史持久设置中的其他值必须归一为 `zh`,不得保留不可达的伪语言选择。
|
||||
- Learning 已从产品入口、路由、Renderer、Main Host API、共享 DTO 和打包资源中移除,不保留兼容实现。客户端不读取、迁移或展示历史下载课程,也不自动删除用户现有课程数据;任何清理功能必须另行设计为用户明确控制的可恢复维护动作。
|
||||
- `game-engine` 不再是内置 Coding Skill。`planning-with-files` 在复杂任务中把 `task_plan.md`、`findings.md`、`progress.md` 写到当前项目根目录;不得写入 Skill 安装目录或用户目录。
|
||||
@@ -143,10 +151,9 @@
|
||||
- Updater 生产恢复仍需对齐权威版本、发布正式签名/公证的平台产物,并从旧安装版本执行发现、下载、重启和安装 smoke;源码提示修复本身不构成发布链恢复。
|
||||
- AI Canvas V2 仍需安装包真实账号 smoke:direct edit、chat edit、Quote request、confirmation、background completion、result download 与 deliberately interrupted unknown-result retry;生产 Provider 激活需另行授权。
|
||||
- Robot Guided Hotspot Binding default-on 发布仍需确认指定硬件/固件确实提供被审计的开放 Hotspot/Portal、部署端签发严格六位 ASCII 数字码且与 Works validator 的时效/消费语义一致,并完成 Windows 真机、签名 macOS x64/arm64 native worker/association 与真实设备端到端 smoke。
|
||||
- Prompt Museum 客户端契约和页面完成不等于 Works Square 内容后台、审核数据或 CDN 已部署;上线前需以真实登录账号验证列表、详情、署名链接、分页、图片和 Prompt 回填。
|
||||
- 三模块入口策略上线前需确认 Works `module_access` migration/API 已部署,安装包包含对应客户端,并用真实账号逐一关闭 Code、Canvas、Robot 验证卡片、根/深层/别名路由和独立 API 授权。
|
||||
- Makelore Code 已有 Windows x64 最终安装包证据、WSL2/WSLg Linux 证据,以及 macOS arm64 本地未签名 DMG 的 mounted-image Agent Server initialize/shutdown 证据。macOS arm64 的签名/公证与完整 process-enumeration gate、macOS x64、native non-WSL Linux desktop/compositor 仍未验收;在补齐前不得宣称 cross-platform release-ready。真实 Provider 风险虽经用户明确豁免,但仍不得从 loopback/provider-shaped smoke 推断为真实 Provider Pass。
|
||||
|
||||
## Last Reviewed
|
||||
|
||||
2026-09-04
|
||||
2026-09-07
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
| Term | Meaning | Notes |
|
||||
|---|---|---|
|
||||
| `ProjectType` | 创建项目时选择且之后不可变的产品类型 | 规范值为 `interactive_ai_app`、`custom`;历史 `mini_game` / `mini_program` 读取时归一为前者,缺少字段按 `custom` 处理 |
|
||||
| `ProjectType` | 项目配置中持有且之后不可变的内部产品类型 | 普通新建不展示选择并默认 `interactive_ai_app`;既有 `custom` 继续兼容,历史 `mini_game` / `mini_program` 读取时归一为前者,缺少字段按 `custom` 处理 |
|
||||
| `BuildPreset` | 平台内部用于构建和验收项目包的受控实现 | 不等于 `ProjectType` 或 Scaffold 状态;交互式 AI 应用使用固定 Vite preset |
|
||||
| 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 |
|
||||
@@ -13,12 +13,12 @@
|
||||
| `legacy_retired` | 旧自动部署中间态迁移后的终止状态 | 不恢复 watcher、登录等待或自动上传;提示用户从项目配置重新提交 |
|
||||
| `play_url` | 服务端为已发布作品提供的公共播放地址 | 客户端优先使用并执行同源 HTTPS、精确 App 路径和版本状态校验 |
|
||||
| `runtime_url` | `play_url` 上线期间的旧公共播放字段 | 仅保留一个客户端版本的兼容回退,稳定迁移后删除 |
|
||||
| AI Design Workspace | 一个 AI 绘画设计项目 | 持有 Conversation 列表、生成任务和资产;不是单条对话 |
|
||||
| AI Design Conversation | Workspace 内一条独立设计对话 | 持有消息、Brief、Quote、`turnRevision` 和服务端持久 Agent Session 绑定 |
|
||||
| Persistent Conversation Session | 服务端为 Conversation 持久保存的 Agent Gateway Session | 客户端只重连事件流,不在注销或退出时 DELETE |
|
||||
| Design Generation Quote | 服务端对当前最终 Prompt 与 generation parameters 返回的可确认报价 | 客户端可编辑后请求重报价,但不自行计算尺寸、供应商价格或设计点 |
|
||||
| Prompt Museum | Canvas 的服务端驱动、只读策展灵感模块 | 展示经审核的预览、Prompt、分类和署名;不是社区,客户端不打包内容数据集 |
|
||||
| Pending Museum Prompt | 用户点击“使用此 Prompt”后在 Renderer 进程内保存的一次性回填状态 | Canvas 消费后清除;只填充输入框,不自动发送或生成 |
|
||||
| AI Design Workspace | 一个 AI 绘画设计项目 | 持有一个 current Direction、Current Specification、持久 Agent Session、conversation timeline、生成任务和资产 |
|
||||
| AI Design Conversation Timeline | Workspace 内的交互历史 | 不是可独立创建/选择的语义权威;Current Specification 才是生成真值 |
|
||||
| Persistent Design Session | 服务端为 Workspace current Direction 持久保存的 Agent Gateway Session | 客户端只重连事件流,不在注销或退出时 DELETE |
|
||||
| Design Generation Quote | 服务端针对精确 Current Specification revision 编译的 immutable 可确认报价 | 客户端编辑后必须请求新 Quote,只确认 Quote ID,不自行计算 Provider 参数或 Token Points |
|
||||
| Prompt Museum | 已退出当前产品面的历史策展模块 | Canvas 无入口,App 不挂载/打包其页面,历史 URL 重定向到 Canvas;Main API/auth/media 与 DTO 仅 dormant 保留 |
|
||||
| Reference Alias | Active Canvas Prompt 中连续的 `@图片N` 公共引用标记 | 对应稳定 reference ID 与真实 Workspace Asset binding;Prompt 表达用途,binding row 只管理文件身份与状态 |
|
||||
| Robot Provisioning | 让 Robot 获得目标 Wi-Fi 凭据并尝试联网的阶段 | 与云端 Activation、账号 Binding、协议在线是不同阶段;V1 由现有固件 Hotspot portal 完成 |
|
||||
| Robot Activation | Robot 联网后向既有服务获取六位激活码的阶段 | 激活码由设备展示/播报给用户;Makelore 不生成该码 |
|
||||
| Robot Binding | 用户把六位激活码和 Agent 提交到 Works Square,建立账号侧设备关系 | `bound` 不等于设备当前 online 或 protocol-ready |
|
||||
|
||||
@@ -10,9 +10,9 @@ Track future-facing memory: promised follow-ups, unfinished loops, timed checks,
|
||||
| 2026-08-17 | 验收用户级三模块入口策略的真实发布链 | 发布包含 Learning 移除集成 `bd0873f` 的 Makelore 安装包前 | Works 服务端/客户端/发布集成 | Pending | 部署 `module_access` migration 和 `/api/auth/me` API,重新打包并安装 Makelore;使用真实账号依次关闭 Code、Canvas、Robot,重启后验证卡片置灰/不可点、根/深层/别名路由阻断、`/settings` 仍可访问和 terminal `401` 退出;另行以直接 API 请求确认服务端授权,不以 UI 置灰代替 |
|
||||
| 2026-08-20 | 部署并验收 AI Learning 项目目录完整链路 | Learning 已于 2026-09-04 从 Makelore 移除 | Works 运营后台/服务端/客户端/发布集成 | Superseded / Closed | 不再为 Makelore 客户端部署或验收 Learning 项目目录 API。历史课程数据保持不读、不迁移、不自动删除;如未来恢复 Learning,必须重新作产品决定和 ADR。 |
|
||||
| 2026-08-17 | 验收首次项目封面并补齐已有资料条件写 | 发布包含源 `145a6ce` 的 Makelore 前,或启用 draft/published metadata 编辑前 | Works 服务端/客户端发布集成 | Partial / Pending | 首次封面已由服务端源 `407c883` 与客户端源 `145a6ce` 通过单请求绑定和失败补偿落地;仍需先部署服务端、重新打包客户端,并以真实对象存储/账号验证 404→create 409、cover 失败和版本阻断。已有资料编辑继续等待 metadata revision/ETag 与 draft-only 条件写;在此之前保持 existing version-only。 |
|
||||
| 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 | 验收 Canvas 删除、Reference 与重报价的真实服务端链路 | 发布包含当前 Canvas V2 行为的安装包前 | 客户端/服务端集成 | Pending | 使用真实 Works 账号核对 editable final Prompt、`@图片N` Asset binding、缺失 binding 阻断、新 Specification revision 重报价和 Quote-ID 确认;删除 Workspace 后确认软删除可见性、未提交任务取消/预留积分释放、已运行任务结算。Prompt Museum 已退出产品面,不再要求 Museum UI/CDN/回填 smoke;dormant Main 媒体安全边界仍不得放宽。 |
|
||||
| 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-10 | 完成客户端提交到 App `play_url` 播放的真实生产整链验收 | source+built+contract 服务端协议、OSS immutable Release、CDN/Edge 与 App 消费链成组集成后 | 客户端/服务端集成 | Pending | 服务端先部署支持规范 `interactive_ai_app` 和历史别名的合同,再安装匹配客户端;使用真实账号执行目录式交互式 AI 应用创建、按项目需要可选调用 Scaffold Skill、客户端本地构建与同字节预检、双归档提交、服务端逐字节校验/不可变 Release 固化、运营批准、CDN 发布、App 播放与监控核对。普通新建不展示 `custom` 或旧 `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` prepare→confirm→install→initialize,验证非空 Skill `scripts/` 披露、应用 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-10 | 删除客户端 `runtime_url` 兼容回退 | 一个客户端兼容版本结束,且服务端与存量数据稳定提供 `play_url` | 客户端 | Pending | 删除类型字段、读取分支和对应回归测试 |
|
||||
| 2026-08-11 | 部署并验收 AI 绘画多 Conversation 服务端契约 | 发布包含多会话客户端之前 | 客户端/服务端集成 | Pending | 确认迁移 `0033`、Conversation list/create/read/turn/confirm API、持久 Agent Session 与事件字段已上线 |
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import {
|
||||
Bot,
|
||||
ChevronRight,
|
||||
CircleAlert,
|
||||
FolderKanban,
|
||||
|
||||
@@ -32,15 +32,14 @@ test.describe('AI Design V2 workspace', () => {
|
||||
});
|
||||
|
||||
await page.getByTestId('ai-module-option-painting').click();
|
||||
const worksRail = page.getByTestId('image-workspace-works-rail');
|
||||
await expect(worksRail).toBeVisible();
|
||||
await expect(worksRail.getByRole('button', { name: /获取.*灵感/u })).toHaveCount(0);
|
||||
await expect(page.getByLabel('正在加载 AI 设计')).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /获取.*灵感/u })).toHaveCount(0);
|
||||
|
||||
await page.evaluate(() => {
|
||||
window.location.hash = '#/image-prompts';
|
||||
});
|
||||
await expect.poll(() => page.evaluate(() => window.location.hash)).toBe('#/image-canvas');
|
||||
await expect(page.getByTestId('image-workspace-works-rail')).toBeVisible();
|
||||
await expect(page.getByLabel('正在加载 AI 设计')).toBeVisible();
|
||||
} finally {
|
||||
await closeElectronApp(app);
|
||||
}
|
||||
@@ -352,9 +351,6 @@ test.describe('AI Design V2 workspace', () => {
|
||||
|
||||
await page.getByTestId('ai-module-option-painting').click();
|
||||
await expect(page.getByTestId('image-workspace')).toBeVisible();
|
||||
await expect.poll(async () => await app.evaluate(() => Boolean(
|
||||
(globalThis as typeof globalThis & { __designE2eProfileReady?: boolean }).__designE2eProfileReady,
|
||||
))).toBe(true);
|
||||
await expect(page.getByTestId('image-workspace-conversation')).toBeVisible();
|
||||
await expect(page.getByTestId('image-workspace-works-rail')).toBeVisible();
|
||||
await expect(page.getByRole('heading', { name: '和 AI 一起完善创作' })).toBeVisible();
|
||||
@@ -391,13 +387,13 @@ test.describe('AI Design V2 workspace', () => {
|
||||
await page.setViewportSize({ width: 375, height: 800 });
|
||||
await expect(page.getByTestId('image-workspace-conversation')).toBeVisible();
|
||||
await expect(page.getByTestId('youth-creation-card')).toBeVisible();
|
||||
await page.getByRole('button', { name: '作品' }).click();
|
||||
await page.getByRole('button', { name: '作品', exact: true }).click();
|
||||
await expect(page.getByTestId('image-workspace-works-rail')).toBeVisible();
|
||||
await page.keyboard.press('Escape');
|
||||
|
||||
await page.setViewportSize({ width: 768, height: 800 });
|
||||
await expect(page.getByTestId('image-workspace-conversation')).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: '作品' })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: '作品', exact: true })).toBeVisible();
|
||||
|
||||
await page.setViewportSize(desktopViewport ?? { width: 1280, height: 800 });
|
||||
await expect(page.getByTestId('image-workspace-works-rail')).toBeVisible();
|
||||
|
||||
@@ -17,6 +17,8 @@ test.describe('Unified project plugin workspace', () => {
|
||||
await page.getByTestId('sidebar-create-project').click();
|
||||
await page.getByRole('button', { name: '选择路径' }).click();
|
||||
await page.getByRole('button', { name: '确认创建' }).click();
|
||||
await expect(page.getByTestId('coding-chat-panel')).toBeVisible();
|
||||
await page.getByRole('button', { name: '创建项目智能体' }).click();
|
||||
await expect(page.getByTestId('project-configuration-page')).toBeVisible();
|
||||
|
||||
await app.evaluate(({ ipcMain }) => {
|
||||
@@ -95,7 +97,11 @@ test.describe('Unified project plugin workspace', () => {
|
||||
await expect(page.getByTestId('project-plugins-sheet')).toBeVisible();
|
||||
await expect(page.getByTestId('plugins-page')).toBeVisible();
|
||||
await expect(page).toHaveURL(/\/project-config\/plugins\?scope=project/);
|
||||
await expect(page.getByText('项目配置')).toBeVisible();
|
||||
await expect(page.getByTestId('project-configuration-page').getByRole('heading', {
|
||||
name: '项目配置',
|
||||
exact: true,
|
||||
includeHidden: true,
|
||||
})).toBeAttached();
|
||||
await page.getByRole('button', { name: '查看开发数据服务详情' }).click();
|
||||
await expect(page.getByText('按平台包含,不按单次插件调用扣点。')).toBeVisible();
|
||||
const localProjectId = await app.evaluate(() => (
|
||||
|
||||
@@ -85,6 +85,15 @@ describe('AI Design Canvas page', () => {
|
||||
initialized: true,
|
||||
accessToken: 'token',
|
||||
expiresAt: Date.now() + 60_000,
|
||||
lastActiveAt: Date.now(),
|
||||
canRefresh: true,
|
||||
user: {
|
||||
username: 'canvas-tester',
|
||||
userId: 'canvas-user',
|
||||
tenantId: null,
|
||||
deptId: null,
|
||||
authorities: [],
|
||||
},
|
||||
});
|
||||
useImagePromptMuseumStore.setState({ pendingPrompt: null });
|
||||
useImageWorkspaceStore.getState().reset();
|
||||
|
||||
Reference in New Issue
Block a user