1
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-20 09:54:17 +08:00
parent 67c584b4df
commit 50759f3c1e
159 changed files with 16938 additions and 16925 deletions

View File

@@ -124,7 +124,7 @@
工具链:
- `scripts/dev-server/localApiPlugins.ts``1504`
- `scripts/dev-server/*.ts`:已于 `2026-04-19` 删除,旧 Vite 本地 API 链路不再保留实现代码
#### 影响
@@ -145,27 +145,27 @@
---
### P1-2继续收口 editor / assets 工具链边界
### P1-2继续收口 editor / assets 工具链边界(旧链路已删除)
这项的重要性正在上升。
#### 证据
- `docs/technical/EDITOR_ASSET_API_MIGRATION_2026-04-08.md` 已说明 editor/assets API 已经迁到 `server-node`,方向是对的。
- 但当前仓库里仍保留一个 `1504` 行的 `scripts/dev-server/localApiPlugins.ts`
- `scripts/dev-server/*.ts` 旧 Vite 本地 API 实现代码已于 `2026-04-19` 删除,仓库里不再保留并行实现
- 目录 `temp-build-goal-check/` 当前包含 `15099` 个文件,已经开始干扰 lint 和本地开发信号。
- 相关日志里还出现了大量指向 `temp-build-goal-check` 的页面 reload 与 `ENOENT` 噪音。
#### 影响
- 旧工具链虽然“不再是主入口”,但它们还在继续占据认知空间和仓库噪音预算
- 新旧 editor/assets 路径长期并存,会导致维护者很难快速判断哪条链才是正式路径
- editor/assets 正式入口已经收口到 `server-node`,这部分双链路问题已解除
- 当前更大的噪音来源已经转移到临时构建目录、检查目录和历史日志残留
#### 当前建议
1. 明确把旧 Vite 插件链标记为迁移参考,避免继续被误用
1. 保持 `scripts/dev-server/README.md` 作为迁移结果标记,不要恢复旧 Vite `/api/*` 本地插件链
2. 将临时构建目录、检查目录、导出目录统一移出主工程扫描面。
3. 对 editor/assets 正式入口补一份“唯一推荐入口”文档或 README 更新,减少后续回流。
3. 继续以 `server-node/src/modules/editor/**``server-node/src/modules/assets/**``src/editor/shared/editorApiClient.ts` 作为唯一推荐入口,减少后续回流。
---

View File

@@ -1,6 +1,91 @@
# 工程清理与后端边界审计2026-04-19
更新时间:`2026-04-19`
更新时间:`2026-04-20`
## 0.1 执行回填2026-04-19
本文审计项 `3.2``4.4` 已于 `2026-04-19` 当日完成首轮处置:
1. 已删除 `scripts/dev-server/localApiPlugins.ts`
2. 已删除 `scripts/dev-server/characterAssetStudioPlugins.ts`
3. 已删除 `scripts/dev-server/qwenSpriteSheetToolPlugins.ts`
4. `scripts/dev-server/` 目录仅保留迁移说明,不再保留旧 Vite 本地 API 实现代码
5. 当前正式入口统一为 `scripts/dev-node.mjs + vite proxy + server-node/src/modules/**`
本文其余段落保留为本次审计时的原始问题快照,用于解释为什么要做这轮删除。
## 0.2 执行回填2026-04-19仓库噪音产物
本文审计项 `3.1` 已于 `2026-04-19` 当日完成首轮处置:
1. 已从版本库删除以下根目录历史扫描/截图产物:
- `npc-editor-dom.html`
- `npc-editor-shot.png`
- `temp-write-check.txt`
- `tmp_character_presets_scan.txt`
- `tmp_jsx_text_scan.txt`
- `tmp_runtime_text_scan.txt`
- `tmp_text_candidates.txt`
- `tmp_text_candidates_refined.txt`
- `tmp_visible_props_scan.txt`
- `tmp_volc_seedance_doc.html`
2. 已从版本库删除 `scripts/__pycache__/generate-build-tag-similarity.cpython-313.pyc`
3. 已清理本地工作区中的 `.codex-*.log``.preview.*``npc-editor-console.log``temp-build-goal-check/`,清理前对应体量约为:
- 根目录噪音文件 `60` 个,约 `49.94 MB`
- `temp-build-goal-check/``15620` 个条目,约 `158.85 MB`
4. 已补齐 `.gitignore``.prettierignore``.eslintrc.cjs` 的忽略口径,显式覆盖 `tmp_*``tmp/``npc-editor-*``temp-write-check.txt``temp-build-goal-check/``__pycache__/`
5. `scripts/dev-server/localApiPlugins.ts` 之外的后端边界收口项不在本轮噪音清理范围内,后续继续按本文第二至第四阶段推进。
## 0.3 执行回填2026-04-19运行时边界第一轮收口
本文审计项 `4.1``5.1` 已于 `2026-04-19` 当日完成一轮工程收口:
1. `RuntimeStoryOptionView` 现在由后端直接附带 `interaction` 元数据。
2. `server-node/src/modules/story/runtimeSession.ts` 已成为 runtime option interaction 的唯一构建位置。
3. `src/services/runtimeStoryService.ts` 不再根据 `currentEncounter + functionId` 在前端本地重建一份 interaction 映射。
4. `/api/custom-world/scene-image` 已补齐服务端 prompt 兜底组装能力,允许前端只提交 `profile + landmark + userPrompt` 上下文。
5. `src/services/aiService.ts` 的场景图 SDK 已改为直接调用后端接口,不再为了该链路动态加载 `src/services/ai.ts`
## 0.4 执行回填2026-04-19自定义世界后端边界第二轮收口
本文审计项 `5.2` 与“第三阶段第 4 条:清理 `server-node -> src/**` 的反向依赖”已于 `2026-04-19` 当日完成第二轮工程收口:
1. `server-node/src/modules/custom-world/` 已新增服务端自持 runtime 模块,承接:
- `creator intent` 归一化
- `anchorPack / lockState` 推导
- custom world framework/profile compile 与 normalize
2. `server-node/src/modules/ai/customWorldOrchestrator.ts``server-node/src/services/customWorldAgentFoundationDraftService.ts` 已不再运行时依赖:
- `src/services/customWorld.js`
- `src/services/customWorldBuilder.js`
- `src/services/customWorldCreatorIntent.js`
- `src/types.js`
3. `server-node/src/prompts/customWorldPrompts.ts` 已成为后端自持的 custom world prompt source`scene image``foundation draft` 相关 builder 不再从前端 `src/prompts/customWorldPrompts.ts` 反向 import。
4. 本轮只迁移 prompt source 位置,没有改动任何 custom world 提示词正文,也没有改动功能需求。
## 0.5 执行回填2026-04-20NPC 待接委托正式接取收口)
本文审计项 `5.3` 已于 `2026-04-20` 完成一轮补充收口:
1. `src/hooks/story/npcEncounterActions.ts` 中“聊天里的待接委托正式接取”已不再由前端本地直接写入:
- `quests`
- `runtimeStats.questsAccepted`
- `npcChatState.pendingQuestOffer`
2. `server-node/src/modules/quest/questStoryActionService.ts` 现在会优先读取服务端快照里已保存的 `pendingQuestOffer.quest`,按当前聊天态中已经展示给玩家的那份委托完成正式接取。
3. `server-node/src/modules/story/storyActionService.ts` 已补齐待接委托接取后的聊天态投影:
- 保留 NPC 对话展示模式
- 清空 `pendingQuestOffer`
- 回到既有的三条自由追问建议
4. 本轮没有新增任何 runtime functionId也没有改动任务生成提示词或任务需求只是把既有“接任务”正式结算权收回到后端。
## 0.6 执行回填2026-04-20NPC 聊天任务草案与浏览器 LLM fallback 收口)
本文审计项 `5.1``5.3` 已于 `2026-04-20` 完成一轮补充收口:
1. `server-node/src/modules/ai/chatOrchestrator.ts` 现在会基于 `NPC chat turn` 的运行时上下文,在后端判断是否触发 `pendingQuestOffer`,并把 quest draft 与引导文案一并回填给前端。
2. `src/hooks/story/npcEncounterActions.ts` 不再在 NPC 单轮聊天完成后本地调用 `generateQuestForNpcEncounter(...)` 再决定是否挂出待接委托。
3. `src/services/questDirector.ts` 浏览器端在后端失败时不再退回本地 LLM 生成 quest draft而是直接走 deterministic fallback compile。
4. `src/services/runtimeItemAiDirector.ts` 浏览器端在后端失败时不再退回本地 LLM 生成 runtime item intent而是直接返回 deterministic fallback intents。
5. 本轮仍未改动任何业务提示词正文,也没有改动 quest / runtime item 的需求能力面,只是继续清理浏览器里的正式 AI orchestration 残留。
## 0. 审计目标
@@ -71,11 +156,11 @@
### 证据
| 项目 | 当前证据 | 判断 |
| --- | --- | --- |
| 根目录日志/临时文件 | 根目录命中 `60``.codex-*.log``.preview.*``tmp_*``npc-editor-*``temp-write-check.txt`,合计约 `52.36 MB` | 已经不是偶发临时文件,而是长期堆积的开发残留 |
| `temp-build-goal-check/` | 当前包含 `15099` 个文件,合计约 `166.56 MB` | 大体量检查产物,应该移出主工程视野 |
| Python 缓存 | 当前存在 `scripts/__pycache__/` | 纯缓存产物,不应长期留在仓库工作区中 |
| 项目 | 当前证据 | 判断 |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| 根目录日志/临时文件 | 根目录命中 `60``.codex-*.log``.preview.*``tmp_*``npc-editor-*``temp-write-check.txt`,合计约 `52.36 MB` | 已经不是偶发临时文件,而是长期堆积的开发残留 |
| `temp-build-goal-check/` | 当前包含 `15099` 个文件,合计约 `166.56 MB` | 大体量检查产物,应该移出主工程视野 |
| Python 缓存 | 当前存在 `scripts/__pycache__/` | 纯缓存产物,不应长期留在仓库工作区中 |
### 影响
@@ -123,20 +208,20 @@
### 高置信度无入口/仅测试引用清单
| 模块 | 证据 | 判断 |
| --- | --- | --- |
| `src/components/GameShell.tsx` | 文件体量 `761` 行;当前 `src/App.tsx` 只接入 `components/game-shell/GameShellRuntime.tsx`;仓库内无其它 import | 旧版壳层残留 |
| `src/components/custom-world-home/CustomWorldCreationHub.tsx` | 仅被 `CustomWorldCreationHub.test.tsx``CustomWorldCreationHub.interaction.test.tsx` 引用;`src/routing/appRoutes.tsx` 只有 `game``qwen-sprite-tool` 两条路由 | 已做出 UI但未进入正式入口 |
| `src/components/custom-world-home/CustomWorldCreationLauncherModal.tsx` | 当前无运行时引用 | 同属未接线入口壳层 |
| `src/components/custom-world-agent/*``9` 个子模块 | 当前合计约 `826` 行;典型文件包括 `CustomWorldAgentLauncherModal.tsx``CustomWorldAgentDraftDrawer.tsx``CustomWorldAgentLockBar.tsx``CustomWorldAgentQuickActions.tsx``CustomWorldAgentSummaryPanel.tsx`;部分文件完全无引用,部分仅被测试引用 | 处于“做了一部分 UI但未进入主链”的孤岛状态 |
| `src/hooks/story/storyBootstrap.ts` | `250` 行,仓库内只定义不消费 | 已被新流程替代的可能性高 |
| `src/hooks/useEquipmentFlow.ts` / `useForgeFlow.ts` / `useInventoryFlow.ts` | 合计约 `393` 行,当前无运行时引用 | 旧流转层残留 |
| `src/editor/shared/cloneValue.ts` / `EditorEmptyState.tsx` / `EditorSelectionCard.tsx` / `useJsonSave.ts` | 当前无运行时引用 | editor 旧共享层碎片 |
| `src/services/customWorldPresentation.stub.ts` | 当前无引用,且文件本身就是 stub | 高置信度占位残留 |
| `src/services/typewriter.ts` | 当前无引用,仅提供一个 `getTypewriterDelay` | 已被其它链路内联实现替代 |
| `src/data/buildTagSimilarity.generated.ts` | 当前 `823` 行,仅能被生成脚本自身检索到,没有消费方 | 生成产物未接入任何业务链路 |
| `src/data/customWorldCharacterLoadout.stub.ts` | 当前无引用,且实现只返回空数组 | 占位残留 |
| `src/components/DeveloperTeamModal.tsx` / `src/components/LazySkillEffectPreview.tsx` | 当前无运行时引用 | 小体量零散孤岛 |
| 模块 | 证据 | 判断 |
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| `src/components/GameShell.tsx` | 文件体量 `761` 行;当前 `src/App.tsx` 只接入 `components/game-shell/GameShellRuntime.tsx`;仓库内无其它 import | 旧版壳层残留 |
| `src/components/custom-world-home/CustomWorldCreationHub.tsx` | 仅被 `CustomWorldCreationHub.test.tsx``CustomWorldCreationHub.interaction.test.tsx` 引用;`src/routing/appRoutes.tsx` 只有 `game``qwen-sprite-tool` 两条路由 | 已做出 UI但未进入正式入口 |
| `src/components/custom-world-home/CustomWorldCreationLauncherModal.tsx` | 当前无运行时引用 | 同属未接线入口壳层 |
| `src/components/custom-world-agent/*``9` 个子模块 | 当前合计约 `826` 行;典型文件包括 `CustomWorldAgentLauncherModal.tsx``CustomWorldAgentDraftDrawer.tsx``CustomWorldAgentLockBar.tsx``CustomWorldAgentQuickActions.tsx``CustomWorldAgentSummaryPanel.tsx`;部分文件完全无引用,部分仅被测试引用 | 处于“做了一部分 UI但未进入主链”的孤岛状态 |
| `src/hooks/story/storyBootstrap.ts` | `250` 行,仓库内只定义不消费 | 已被新流程替代的可能性高 |
| `src/hooks/useEquipmentFlow.ts` / `useForgeFlow.ts` / `useInventoryFlow.ts` | 合计约 `393` 行,当前无运行时引用 | 旧流转层残留 |
| `src/editor/shared/cloneValue.ts` / `EditorEmptyState.tsx` / `EditorSelectionCard.tsx` / `useJsonSave.ts` | 当前无运行时引用 | editor 旧共享层碎片 |
| `src/services/customWorldPresentation.stub.ts` | 当前无引用,且文件本身就是 stub | 高置信度占位残留 |
| `src/services/typewriter.ts` | 当前无引用,仅提供一个 `getTypewriterDelay` | 已被其它链路内联实现替代 |
| `src/data/buildTagSimilarity.generated.ts` | 当前 `823` 行,仅能被生成脚本自身检索到,没有消费方 | 生成产物未接入任何业务链路 |
| `src/data/customWorldCharacterLoadout.stub.ts` | 当前无引用,且实现只返回空数组 | 占位残留 |
| `src/components/DeveloperTeamModal.tsx` / `src/components/LazySkillEffectPreview.tsx` | 当前无运行时引用 | 小体量零散孤岛 |
### 判断
@@ -521,4 +606,3 @@
6. `vite.config.ts`
7. `.eslintrc.cjs`
8. `git grep` 对关键模块引用、后端跨层 import、localStorage、旧 dev 插件入口的扫描结果