docs: record game audio client main integration
This commit is contained in:
@@ -1,5 +1,21 @@
|
||||
# Data Flow
|
||||
|
||||
## Game Audio generation and local delivery
|
||||
|
||||
Project-enabled optional bundled Game Audio → frozen eligible parent tool → one explicit
|
||||
generation confirmation → Main durable pre-submit receipt → fixed Works Square hosted API.
|
||||
Main queries the original execution internally, then saves every output beneath
|
||||
`assets/generated/game-audio/<executionId>/` in the frozen original project. A lost POST
|
||||
response uses operation lookup; restart, account reconnect and download retry never submit
|
||||
another generation. The shared project write lease covers materialization/tracker only,
|
||||
not network waiting. Provider/billing status and local delivery status remain separate.
|
||||
|
||||
The conversation card displays saved relative paths. An explicit preview click uses the
|
||||
receipt/account-owned Main route and existing bounded local media reader, then native
|
||||
audio controls with no autoplay. No Provider credential, URL, job ID or audio payload is
|
||||
sent to the model. Server migration 0093 and enabled authoritative prices are deployment
|
||||
prerequisites; synthetic media tests are not real Meowa acceptance.
|
||||
|
||||
## Code conversation metadata
|
||||
|
||||
Main 的 `.makelore/conversations.json` schema v2 是 Conversation 标题和归档状态的唯一权威。新建自动命名会话由 Main 生命周期订阅从首条真实、完整用户消息提取标题;未命名会话的历史 hydration 可补齐同一次命名。串行存储重查 `titleMode` / `autoTitleSet`,手动命名和已删除记录不会被后续事件覆盖。内部命名字段不进入公共 DTO,也不向 Pi session title 双写。
|
||||
|
||||
@@ -4,12 +4,13 @@
|
||||
|
||||
| Path | Responsibility | Owner Notes |
|
||||
|---|---|---|
|
||||
| `electron/coding-plugins/manifest.ts`, `release-descriptor.ts`, `signature-verifier.ts`, and `trusted-keys.ts` | Closed Plugin package/descriptor parsing, fixed code-owned resource roots, compatibility checks, canonical archive validation, and Ed25519 trust | Data Service plus exact Game Resource and Project Scaffold roots are code-owned. Other schema-2 packages still pass descriptor/signature/archive validation; downloadable P0 Skill assets remain text/image-only. Hosted Web Search is not a current Plugin root. |
|
||||
| `electron/coding-plugins/manifest.ts`, `release-descriptor.ts`, `signature-verifier.ts`, and `trusted-keys.ts` | Closed Plugin package/descriptor parsing, fixed code-owned resource roots, compatibility checks, canonical archive validation, and Ed25519 trust | Data Service plus exact Game Resource, Game Audio and Project Scaffold roots are code-owned. Other schema-2 packages still pass descriptor/signature/archive validation; downloadable P0 Skill assets remain text/image-only. Hosted Web Search is not a current Plugin root. |
|
||||
| `electron/coding-plugins/account-plugin-cache.ts`, `marketplace-client.ts`, and `package-store.ts` | Main-owned Account Library cache, authenticated server client, and atomic immutable device installation store | Account acquisition and device installation are separate. Package bytes switch atomically only after descriptor, signature, archive, client-range, and provenance checks; failed updates preserve the prior current release. |
|
||||
| `shared/coding-plugins.ts`, `electron/coding-plugins/effective-resolver.ts`, `registry.ts`, `project-service.ts`, and `electron/coding-runtime/pi/**` | Effective official Plugin projection, selected-model tools, Device Package resources, and frozen parent logical-thread runtime snapshot | The shared project-wide predicate covers `makelore.data-service`, `makelore.game-resource`, and `makelore.project-scaffold`: after their existing delivery/acquisition requirement and project enablement, all parent Agents receive their Skills/tools without assignment. Trusted Marketplace artifacts that require assignment and immutable local Device Package generations retain their distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. |
|
||||
| `shared/coding-plugins.ts`, `electron/coding-plugins/effective-resolver.ts`, `registry.ts`, `project-service.ts`, and `electron/coding-runtime/pi/**` | Effective official Plugin projection, selected-model tools, Device Package resources, and frozen parent logical-thread runtime snapshot | The shared project-wide predicate covers `makelore.data-service`, `makelore.game-resource`, `makelore.game-audio`, and `makelore.project-scaffold`: after their existing delivery/acquisition requirement and project enablement, all parent Agents receive their Skills/tools without assignment. Trusted Marketplace artifacts that require assignment and immutable local Device Package generations retain their distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. |
|
||||
| `electron/coding-runtime/pi/model-tools/**` and `shared/model-tools.ts` | Closed selected-model tool registry and provider-specific Web Search request shaping | The frozen selected model capability controls whether `makelore_web_search` exists. The tool uses that model/provider/credential and normal model billing; no Hosted Plugin adapter, Admission, Plugin Charge, or browser fallback exists. |
|
||||
| `electron/coding-packages/**`, `electron/api/routes/device-packages.ts`, `shared/device-packages.ts`, and `src/stores/device-packages.ts` | Main-owned conversation install preview/confirmation/commit, immutable local package generations, safe Renderer projection, and parent-worker refresh | Sources are npm, Git, absolute local Plugin directories, or loose `SKILL.md`. Lifecycle scripts are disabled; executable extensions and non-empty Skill `scripts/` run with desktop-user authority after disclosure and explicit confirmation. Every generation projects all explicitly installed and currently enabled Skills/extensions; Device Packages never join Account Library, Marketplace Package Store, Release, Channel, or Admission state. |
|
||||
| `electron/coding-plugins/adapters/game-resource.ts`, `electron/services/game-resource-client.ts`, and `electron/services/game-resource-delivery.ts` | Provider-neutral `makelore.game-resource` adapter, Main-owned Works Square transport, and durable local delivery coordinator | An eligible frozen parent submits one confirmed generation. Main polls internally, persists delivery state under userData, downloads every terminal output, and writes it to the frozen original project. A delivery retry resumes download/save only; Renderer/Pi never receive Provider URLs, credentials, balances, raw responses, Provider job IDs, or filesystem authority. |
|
||||
| `electron/coding-plugins/adapters/game-audio.ts`, `electron/services/game-audio-client.ts`, `game-audio-delivery.ts`, and `src/pages/Chat/GameAudioFiles.tsx` | Project-wide music/preview/sound tools, durable single-submit delivery, and click-only local audio preview | Main persists intent before POST, uses by-operation lookup after uncertain submission and resumes only the existing execution. Frozen account/project and shared write leases govern all-output materialization; receipt-owned content reaches native audio controls only on a user click, never as a Provider URL or model-message audio payload. |
|
||||
| `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`, `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 |
|
||||
|
||||
@@ -4,6 +4,18 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
|
||||
|
||||
## Integrated Through
|
||||
|
||||
- 2026-09-21:任务 `20260921-integrate-game-audio-client-a6c8f241` 集成 Game Audio
|
||||
产品源 `09e0ce5cf3d113b3bb7b128b2b04bc355d16173b` 与证据 HEAD
|
||||
`938c4b1ed306fa7a45241534cd44817c775cca13`,保留 `b5907e8` 主线的模型切换及项目重开修复。
|
||||
唯一冲突是 first-chat E2E 辅助函数参数,保留两边语义;无产品代码冲突。
|
||||
新官方游戏音频插件随客户端 2.0.1 内置、按项目开通:一次确认后 Main 内部等待并自动保存全部输出,
|
||||
对话中按需点击试听本地文件、不自动播放;恢复与下载重试不再次生成或收费。
|
||||
合并后 123 项相关单测、类型检查及 Vite 全目标构建通过;首轮音频试听/模型切换 Electron 流程通过,
|
||||
单独复跑模型错误提示出现间歇性等待超时,原因未确定,不能用首轮成功覆盖该记录。
|
||||
整份 first-chat 诊断另有两条未改旧测试的非精确按钮定位歧义,不能据此宣称全 E2E 通过。
|
||||
源 Windows 安装包仅证明原源树,未重新发布集成版;用户将自行在服务器验证真实 Meowa 输出。
|
||||
原有三份未跟踪文档保持。详见[集成记录](tasks/20260921-integrate-game-audio-client-a6c8f241.md)。
|
||||
|
||||
- 2026-09-21:任务 `20260921-merge-readd-project-c82e9b` 经用户确认接管主目录,
|
||||
将修复源 `6aa30a57b4dfd3af669db6e7f9a90175a9bdcbb7` 从 `576edb2` 无冲突快进合入本地 `main`。
|
||||
Code 项目移除后,在“新建项目”直接选择原文件夹会重新打开,保留原身份、类型、智能体、对话及文件;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# Task: Integrate official game audio client into main
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260921-integrate-game-audio-client-a6c8f241
|
||||
- Mode: Integration
|
||||
- Branch: main
|
||||
- Worktree: D:\Datas\OthersProjects\makelore
|
||||
- Base commit: b5907e895cd3c757b0bb269aab59fdbb4143cdac
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Integrate completed official Game Audio source 938c4b1ed306fa7a45241534cd44817c775cca13 into local main while preserving later model-replacement and removed-project reopening fixes. Promote accepted module/domain/current-state facts and verify the combined client.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- User explicitly authorized transferring the completed primary task registration and preserving the original three foreign records. Official release --force of 20260921-merge-readd-project-c82e9b, integration start --adopt-existing and status passed at exact main/base b5907e895cd3c757b0bb269aab59fdbb4143cdac.
|
||||
- Concurrent Task Gate and Planning Gate Passed. Read entry/memory index/own/source records, AGENTS, source outcome/promotion candidates, and all shared-memory changes since d222d175. Reuse unchanged previously-loaded decision/architecture/domain/evidence/reflection/commitment context and audio design. Project-positioning remains a placeholder; actual product is defined by AGENTS/README. Registry peers have no changes since the preceding read-only scope assessment; undefined historical scopes remain unknown/read-only, with no concrete audio conflict.
|
||||
- Preserve main's explicit model replacement without requiring the old model, stable session history, and re-registration of preserved project folders. Audio adds a project-wide optional bundled plugin, Main-owned durable single-submit delivery and click-only local playback; no fourth authority, Provider key, partner gate or second download confirmation.
|
||||
- Plan: merge the exact source with ancestry preserved, inspect any overlap in README/first-chat E2E semantically, verify the combined audio/model/project tests and build, promote compatible docs, commit and complete. Reuse source PostgreSQL/Windows artifact evidence only for the source tree; no claim that its older installer includes subsequent main fixes.
|
||||
- Keep package-122, package-123 and client-hang-diagnosis untracked task records unchanged and out of commits. No reset, stash, clean, subagents, push, install or deployment. Real Meowa generation was moved to the user's server validation, not executed here.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Merge 1841bafb18f0a3725e3a8bb354057408ab9eac4f integrates exact source 938c4b1ed306fa7a45241534cd44817c775cca13 into prior main b5907e895cd3c757b0bb269aab59fdbb4143cdac, preserving both parents. No product code conflict. The one first-chat fixture conflict retains removedModel as the fifth argument and appends audioPreview as sixth; the new audio call supplies false for removedModel. Both existing model and new audio scenarios remain intact.
|
||||
- Promoted accepted Game Audio module, durable single-submit/all-output delivery, project-wide activation and click-only local preview rules in canonical memory. Model-replacement/project-reopening product modules and old assertions are unchanged by integration. Imported source task record remains byte-equivalent to the source; original three foreign untracked records are unchanged and not committed.
|
||||
|
||||
## Verification
|
||||
|
||||
- Combined root typecheck PASS; 12 relevant Vitest files / 123 tests PASS (audio client/delivery/files/plugin, timeline, resolver/manifest/routes, artifact, Pi conversation runtime, core routes and project identity). Vite all four targets PASS; scoped ESLint for the resolved E2E file PASS; diff/cached checks PASS; no unmerged entries remain.
|
||||
- First Electron invocation through pnpm script passed the -- separator through to Playwright and consequently ran the whole first-chat file (9 tests): 7 passed, including audio native playback and removed-model replacement; 2 failed at unchanged loose button-name locators matching both Conversation button and its newly named menu button (Second Conversation, Feature UI branch). No product fix or full-E2E-PASS claim made for those older assertions.
|
||||
- A direct targeted invocation then passed audio playback but failed the model-replacement error-message visibility wait. A bounded repeat also captured that wait timeout; no complete repeat-total result was retained, so it supplies no additional PASS count. That case did pass in the first run. Static comparison proves the existing removed-model scenario, its handler/flag propagation and model/Conversation store/runtime modules remain unchanged; the audio extension is optional and unset there. Treat this as unresolved intermittent E2E initialization/visibility evidence, not a proven audio regression or a fully diagnosed baseline cause. Trace contains test actions but no page/network snapshots, so it does not establish a deeper root cause. Do not rerun until green or hide the failed observation.
|
||||
- Before merge commit, the drift checker refused the staged foreign source record because its import provenance requires committed shared ancestry; source-vs-index/working comparisons showed no edits. After the real two-parent merge, unchanged-source import provenance and task-aware doc drift PASS. Source worktree remains clean/ready and its latest tip is an ancestor of main.
|
||||
- Adopt exact-source Windows artifact/verifier and broader test evidence only for that source tree. Those binaries predate main's model/project fixes and are not labelled integrated-main packages. No real Meowa generation or production acceptance claimed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Paired server migration 0093, actual pricing and real Meowa verification remain deployment/user validation steps. Rebuild installer from integrated main for distribution; retained source artifacts describe their exact older source tree only. The two unchanged locator ambiguities and intermittent model-error visibility test need separate fixture diagnosis, not a claim of full E2E acceptance.
|
||||
- Cleanup awaiting explicit confirmation: task 20260921-game-audio-client-b74d9f31, clean managed ready worktree D:\Datas\OthersProjects\.codex-worktrees\makelore\20260921-game-audio-client-b74d9f31, branch codex/20260921-game-audio-client-b74d9f31-game-audio-client. Latest source tip 938c4b1e is integrated. Retiring preserves branch/commits but removes ignored dependencies and the locally built unpublished 2.0.1 installer/runtime. Nothing removed or installed.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Promote accepted project-wide Game Audio/delivery/local-preview rules and exact integrated evidence without changing source historical records or erasing known baseline test limitations.
|
||||
@@ -33,7 +33,7 @@
|
||||
- Account Library, Device Installation, project enablement, Agent assignment, runtime
|
||||
authorization, and billing are separate states. No read, install, acquisition, or
|
||||
assignment may silently advance another state. The code-owned project-wide identities
|
||||
are `makelore.data-service`, `makelore.game-resource`, and
|
||||
are `makelore.data-service`, `makelore.game-resource`, `makelore.game-audio`, and
|
||||
`makelore.project-scaffold`: their existing delivery/acquisition and project enablement
|
||||
remain separate, but project enablement intentionally makes their Skills/tools
|
||||
available to every parent Agent without creating or requiring assignment state.
|
||||
@@ -48,7 +48,7 @@
|
||||
- System-included Data Service ships with MakeLore and has no Library acquisition,
|
||||
Admission, download, update, or device-uninstall action. Users may still enable it
|
||||
per project; project enablement makes its Skill/tools available to every parent Agent.
|
||||
- Code-owned Game Resource is the optional bundled hosted Plugin. Its exact schema-2
|
||||
- Code-owned Game Resource and Game Audio are optional bundled hosted Plugins. Their exact schema-2
|
||||
manifest, Skill, and tools ship with MakeLore, so it has no device download, update,
|
||||
Beta, signature, or device-uninstall state. Account Library acquisition/removal,
|
||||
project enablement, current server policy, immutable Admission,
|
||||
@@ -62,7 +62,7 @@
|
||||
- A `platform_hosted` Skill or tool may enter only a delivered/installed, enabled,
|
||||
trusted, compatible, policy-admitted parent Pi logical thread. Agent assignment is an
|
||||
additional gate only for Plugin identities whose activation scope requires it; the
|
||||
three code-owned project-wide identities bypass that gate. Unknown, disabled, or
|
||||
four code-owned project-wide identities bypass that gate. Unknown, disabled, or
|
||||
ineligible assignments stay inert; child workers receive no hosted Plugin projection.
|
||||
- A metered hosted mutation requires explicit client confirmation before resolve,
|
||||
Admission, or charging. Works Square owns price, payer, Token Point policy, and receipt
|
||||
@@ -79,6 +79,12 @@
|
||||
retry or application restart may resume only local download/save work and must never
|
||||
submit or charge again. The shared project write lease is held only while materializing
|
||||
terminal outputs; the Agent does not choose paths, poll status, or confirm saving again.
|
||||
- Game Audio requires MakeLore >=2.0.1 and follows the same single-confirmation automatic
|
||||
delivery policy under `assets/generated/game-audio/<executionId>/`. Main persists intent
|
||||
before submitting and uses operation lookup after response loss; resume never repeats
|
||||
the POST. Full music, separately requested preview and sound have authoritative server
|
||||
pricing. Saved files support click-only local audio controls, no autoplay or remote
|
||||
Provider playback. Project-wide activation never requires partner assignment.
|
||||
- Native Web Search is a selected-model capability, not a Marketplace Plugin. Only an
|
||||
exact verified capability may place `makelore_web_search` in a frozen parent worker;
|
||||
it uses that worker's current model/provider/credential and ordinary model billing.
|
||||
@@ -109,9 +115,9 @@
|
||||
CDP 命令保持拒绝,诊断按 owner 引用计数;关闭面板、项目/模块切换、窗口隐藏或
|
||||
后台休眠必须销毁 view、detach debugger 并停止无所有者轮询。
|
||||
- Code-owned official bundled Plugins may be `platform_hosted` or `skill_only`.
|
||||
Data Service is system-included; Game Resource and `makelore.project-scaffold` retain
|
||||
Data Service is system-included; Game Resource, Game Audio and `makelore.project-scaffold` retain
|
||||
Account Library, project enablement, Release, and Admission state where applicable,
|
||||
while their exact resources ship only in the signed client. All three are project-wide:
|
||||
while their exact resources ship only in the signed client. All four are project-wide:
|
||||
once their delivery/acquisition condition is satisfied and they are enabled for a
|
||||
project, every parent Agent receives the full resource set without partner assignment;
|
||||
child Agents remain empty. Downloadable
|
||||
|
||||
Reference in New Issue
Block a user