Files
storyforge/docs/STORYFORGE_SPLIT_ASSESSMENT_2026-03-26.md

253 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# StoryForge / AI Glasses 拆分评估方案
执行状态2026-03-26
- 已确认独立仓库存在:`https://git.hyzq.site/krisolo/ai-glasses`
- 已确认本机独立工作区存在:`/Users/kris/code/AI-glasses`
- 当前评估方案已进入执行阶段:`StoryForge-gitea` 将移除混入的 `android-app/`
## 1. 结论摘要
当前仓库的问题更像是“项目导入时发生了目录叠加”,而不是后续开发过程中出现了随机数据错乱。
明确证据如下:
- Gitea 现有历史只有一个根提交:`acb1103`,日期为 `2026-03-14`
- 这个根提交从一开始就包含完整的 `android-app/` 子树。
-`android-app/` 子树内同时存在:
- `StoryForge` 相关界面与接口代码;
- 明显属于 `AI Glasses` 的包名、BLE、Baidu 实时能力、硬件依赖和 AAR。
因此,当前更合理的判断是:
- `StoryForge``AI Glasses` 原本是两个独立项目;
-`StoryForge-gitea` 建库或导入时,把一个带 `AI Glasses` Android 子项目的目录整体叠加进来了;
- 后续又在这个混合目录上继续写入了一部分 `StoryForge` Android 代码,导致边界越来越模糊。
## 2. 现状诊断
### 2.1 明显属于 StoryForge 的主干目录
这些目录整体上是当前 StoryForge 的核心交付面:
- `collector-service/`
- `web/storyforge-web-v4/`
- `scripts/douyin-browser-capture/`
- `n8n/`
- `deploy/`
- `docs/`
- `Common/`
- `docker-compose.yml`
- `.env.example`
### 2.2 明显带有 AI Glasses 叠加痕迹的区域
`android-app/` 是本仓库最明显的混合区,内部包含三类内容:
1. 明显偏 AI Glasses / 硬件链路的内容:
- `android-app/app/src/main/java/com/aiglasses/app/ble/BleManager.kt`
- `android-app/app/src/main/java/com/aiglasses/app/software/BaiduConversationAgent.kt`
- `android-app/app/src/main/java/com/aiglasses/app/software/BaiduRealtimeWsClient.kt`
- `android-app/app/src/main/java/com/aiglasses/app/software/BaiduVisualUploader.kt`
- `android-app/app/src/main/java/com/aiglasses/app/software/SoftwareConversationController.kt`
- `android-app/app/src/main/java/com/aiglasses/app/ui/MainViewModel.kt`
- `android-app/app/libs/lib_agent-1.0.1.4.aar`
- `android-app/app/libs/brtc-3.5.0.1a.aar`
2. 明显是 StoryForge 业务,但写在旧命名空间里的内容:
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeApiService.kt`
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeModels.kt`
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeRepository.kt`
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeScreen.kt`
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeSessionStore.kt`
- `android-app/app/src/main/java/com/aiglasses/app/storyforge/StoryForgeViewModel.kt`
- `android-app/app/src/main/java/com/aiglasses/app/MainActivity.kt`
3. 明显属于旧项目命名残留的工程设置:
- `android-app/settings.gradle.kts` 中的 `rootProject.name = "AIGlassesApp"`
- `android-app/app/build.gradle.kts` 中的 `namespace = "com.aiglasses.app"`
- `android-app/app/src/main/res/values/themes.xml` 中的 `Theme.AIGlasses`
- `android-app/app/src/main/AndroidManifest.xml` 当前仍引用 `Theme.AIGlasses`
### 2.3 Git 历史上的关键时间点
- `2026-03-14` `acb1103`
- Gitea 根提交。
- 从第一天就已带入 `android-app/``com.aiglasses.*`
- `2026-03-20 14:10` `ac6a8a8`
- 开始明显向 StoryForge Android UI / 交互继续推进。
- `2026-03-20 14:17` `7070c3a`
- 提交信息直接是 `restore android build path`,说明 Android 构建链被重新激活。
- `2026-03-22` `fe07a5f`
- 明确进入 `storyforge mobile v4 shell` 阶段。
结论是Gitea 历史里没有“完全纯净、完全不含 Android 叠加痕迹”的版本,但存在“尚未明显进入 APK 推进阶段”的较早切点。
## 3. 目标定义
基于当前产品节奏,推荐把拆分目标定义成:
- `StoryForge-gitea` 只保留 StoryForge 当前实际在推进的主线:
- Web
- Backend
- n8n orchestration
- Douyin browser capture
- deploy / docs / ops
- `AI Glasses` 相关 Android / BLE / Baidu / AAR / OTA 旧链路,移出当前仓库边界。
- 如果未来要做 StoryForge Mobile重新在一个干净边界内启动而不是继续沿用 `com.aiglasses.*` 的混合目录。
## 4. 拆分策略选项
### 方案 A按目录硬拆StoryForge 先回到 Web 主线
做法:
- 从当前 StoryForge 仓库中移除整个 `android-app/` 目录。
- 同步清理 README、docs、脚本中所有 Android/APK 主线描述。
- 保留 Web、Backend、n8n、browser capture、deploy、docs 作为 StoryForge 正式主干。
优点:
- 边界最清楚,最符合“此前一直在做 Web 版本”的项目认知。
- 能最快结束当前“两个项目目录叠加”的混乱状态。
- 后续所有开发决策都会更简单。
缺点:
- 当前 `android-app/storyforge/*` 里写过的一些 StoryForge 业务代码会一起被移出,需要单独存档。
适用判断:
- 如果当前项目目标就是 Web 优先、暂不做 APK这是最推荐方案。
### 方案 B保留 StoryForge Android 子集,拆掉 AI Glasses 硬件链
做法:
-`android-app/` 中只保留 `storyforge/*``MainActivity.kt`、必要的网络与 OTA 文件;
- 删除 `ble/``software/`、旧 `ui/MainViewModel.kt`、AAR、旧权限与旧命名
- 后续再把包名重构到 `com.storyforge.*`
优点:
- 保留了已写过的 StoryForge 移动端业务界面。
缺点:
- 仍要处理大量命名空间和依赖残留。
- 会继续占用当前 StoryForge 项目的精力。
- 和“你之前并没有打算做 APK”的事实不完全一致。
适用判断:
- 只有在你确认近期确实要保留 StoryForge Android 端时才值得做。
### 方案 C直接回滚到较早基线
候选点:
- `acb1103`:最早基线,但已经带着 Android 叠加目录。
- `1c539ab`:仍未明显进入 Android 壳推进,但已有少量 Android 接口同步。
优点:
- 操作简单。
缺点:
- 无法真正解决“根提交就已经叠加”的结构问题。
- 会回退掉后续大量有价值的 Web / backend / deploy 进展。
适用判断:
- 只适合做参考,不适合作为主方案。
## 5. 推荐方案
推荐采用 `方案 A按目录硬拆StoryForge 先回到 Web 主线`
原因:
- 它最符合当前产品事实:你确认之前的实际推进重点一直是 Web而不是 APK。
- 它最符合现有目录证据:`android-app/` 是混合最严重的区域,且根提交就已叠加。
- 它最符合后续治理成本:先把 StoryForge 主仓库边界收干净,后面要不要重建移动端,再单独决定。
## 6. 实施步骤
### 第 0 阶段:安全快照
- 基于当前 Gitea 状态打一个拆分前快照分支。
- 导出 `android-app/` 的完整目录快照,作为独立归档或后续 AI Glasses 仓库恢复源。
- 记录关键参考提交:
- `acb1103`
- `1c539ab`
- `ac6a8a8`
- `7070c3a`
- `fe07a5f`
### 第 1 阶段StoryForge 主仓库边界清理
- 从 StoryForge 仓库中移除整个 `android-app/`
- 清理以下入口中的 Android/APK 主线描述:
- `README.md`
- `docs/AUDIT_2026-03-18.md`
- `docs/MVP_STATUS_2026-03-18.md`
- `docs/LAN_E2E_GUIDE_2026-03-18.md`
- 其他出现 `compileDebugKotlin``assembleDebug``APK``com.aiglasses` 的说明文档
- 调整基线检查脚本,不再把 Android 编译当成 StoryForge 主仓库必检项。
### 第 2 阶段AI Glasses 资产外置
-`android-app/` 单独落到 AI Glasses 仓库或归档仓库。
- 在那个仓库中保留 `com.aiglasses.*`、BLE、Baidu、AAR、OTA 等原始工程语义。
### 第 3 阶段StoryForge 后续演进
- 当前仓库继续只推进:
- `collector-service/`
- `web/storyforge-web-v4/`
- `scripts/douyin-browser-capture/`
- `n8n/`
- `deploy/`
- `docs/`
- 若未来确实需要 StoryForge Mobile再开一个全新、干净的移动端工程不复用当前混合 Android 目录。
## 7. 风险与控制
### 风险 1误删仍有参考价值的 StoryForge Android 代码
控制:
- 在删除前先对 `android-app/` 做完整快照导出。
- 如果担心未来要参考 `storyforge/*` 子目录,可以单独保留一份只读归档。
### 风险 2文档和状态记录出现历史断层
控制:
- 不改历史提交。
- 仅在当前分支上明确标记“自本次拆分起StoryForge 主仓库不再承载 Android 主线”。
### 风险 3脚本和检查项仍假设存在 Android
控制:
- 统一核对:
- `README.md`
- `scripts/check_repo_baseline.sh`
- 任何引用 `./gradlew` 的脚本或文档
## 8. 最终建议
不要先回滚历史,也不要先做大规模重命名。
更稳妥的动作顺序应当是:
1. 先承认当前问题是“目录叠加”而不是“功能开发方向变化”。
2. 先把 `android-app/` 整体从 StoryForge 主仓库边界中拆出去。
3. 把 StoryForge 主仓库重新收敛成 Web / Backend / Orchestration 主线。
4. 最后再决定是否需要单独保留一个 StoryForge Mobile 项目。