8.4 KiB
Phase 001 — 仓库骨架搭建
| 项 | 值 |
|---|---|
| 目标 | 把 reference 源码拷进 hermes-ui,裁成最小可运行骨架 |
| 前置 | 无 |
| 产出 | 新项目根目录有完整可 npm ci && npm run build 的代码 |
| 验收命令 | npm ci --ignore-scripts && npm run build |
0. 铁律:reference 的使用边界
reference_code/ekko-studio/ ← 只读参考,不是新项目的一部分
hermes-ui/ ← 新项目本体
硬约束:
reference_code/只在 Phase 001 被读取一次(用于拷贝与对照)。- 从 Phase 002 起,禁止任何代码、配置、文档、测试引用
reference_code/下的路径。 - 拷贝必须是复制进新项目,不是软链、不是 git submodule、不是运行时挂载。
- Phase 001 结束时,
hermes-ui/内的文件必须自洽——把reference_code/整个删掉,npm ci && npm run build && npm run test仍应通过。
验收方式(Phase 001 收尾自查):
cd /Users/jack/source/MyProject/js/hermes-ui
grep -rn "reference_code" . --include="*.ts" --include="*.vue" --include="*.json" \
--include="*.mjs" --include="*.md" --include="*.yml" | grep -v "^./docs/phases/"
# 期望:零命中
1. 目录创建
cd /Users/jack/source/MyProject/js/hermes-ui
mkdir -p docs/phases
# docs/ 与 docs/phases/ 已存在
2. 拷贝(用 rsync 排除,不做人工挑拣)
参考源码:reference_code/ekko-studio/
2.1 拷贝保留项
REF=reference_code/ekko-studio
DST=.
# 包与测试
rsync -a $REF/packages/client ./packages/
rsync -a $REF/packages/server ./packages/
rsync -a $REF/packages/skills ./packages/
rsync -a $REF/tests/ ./tests/
rsync -a $REF/bin/ ./bin/
rsync -a $REF/scripts/ ./scripts/
# 根配置
for f in package.json package-lock.json vite.config.ts vitest.config.ts \
playwright.config.ts tsconfig.json tsconfig.app.json \
tsconfig.node.json nodemon.json Dockerfile docker-compose.yml \
.dockerignore .gitignore; do
cp -p $REF/$f ./$f
done
# 文档(只拷 harness 与 chat-chain-changes 的 README,不拷旧正文)
mkdir -p docs/harness docs/chat-chain-changes
rsync -a $REF/docs/harness/ ./docs/harness/
cp -p $REF/docs/chat-chain-changes/README.md ./docs/chat-chain-changes/
cp -p $REF/LICENSE ./LICENSE
2.2 拷贝后立即删除(不在新项目存在)
rm -rf packages/desktop packages/website packages/ekko-agent packages/esp32-c3
rm -rf tests/ekko-agent
rm -rf packages/client/public/coding-agents
rm -f tsconfig.website.json
rm -rf docs_new
2.3 同步清理 .github/workflows(只留 5 个)
cd .github/workflows
rm -f desktop-release.yml desktop-manual-build.yml \
desktop-mac-update-manifest.yml desktop-runtime.yml website-deploy.yml
ls # 期望:build.yml docker-publish.yml npm-lockfile-check.yml \
# playwright.yml webui-release.yml
webui-release.yml先保留,Phase 002 去品牌时改名。
2.4 不拷的东西(清单)
| 不拷 | 原因 |
|---|---|
packages/desktop/ |
整包砍 |
packages/website/ |
官网砍 |
packages/ekko-agent/ |
J 组砍 |
packages/esp32-c3/ |
固件不做(若要做语音硬件,另开 phase 并从这里恢复) |
tests/ekko-agent/ |
随 J 组砍 |
docs_new/ |
旧版规划文档,已被 docs/01~03 取代 |
docs/planning/ |
上游作者的过程笔记 |
docs/*.md(顶层散落) |
旧功能文档,本项目另有 docs/02-功能清单 |
packages/client/public/coding-agents/ |
随 I 组砍 |
agent-bridge/python/__pycache__/ |
Python 字节码,见 3.3 |
3. 配置文件改造
3.1 package.json(本 Phase 只做最小改动)
必须改:
{
"name": "hermes-ui",
"version": "0.6.29", // 从此版本起自己走
"bin": {
"hermes-ui": "./bin/hermes-ui.mjs"
}
}
暂时不改:scripts / dependencies。
理由:build / dev / test / test:e2e 全部要留,desktop 相关 script 删了但依赖还在,下一个 Phase 再统一清。npm ci 依赖 package.json 与 package-lock.json 一致,任何依赖增删都会让 npm ci 失败——所以依赖清理留到 Phase 004 一次性做。
必须摘掉(否则 npm ci 会自动触发 build):
"scripts": {
// 删掉 "prepare": "[ -d dist ] || npm run build"
}
Phase 007 收尾时再恢复。
3.2 bin/ 重命名
git mv bin/hermes-web-ui.mjs bin/hermes-ui.mjs # 或 mv
git mv bin/hermes-web-ui-mcp.mjs bin/hermes-ui-mcp.mjs
rm -f bin/hermes-studio-mcp.mjs # "studio" 是旧品牌
重命名后要改文件内部的自引用(路径、process.env.npm_package_name 之类)。Phase 002 会做全量品牌扫描,本 Phase 只需保证文件存在、npm run build 不报错。
package.json的bin若指向hermes-ui-mcp也一并改名,两边必须一致。
3.3 nodemon.json
watch 里删掉 packages/ekko-agent/src(该包已不存在,留着 dev 会报路径错误)。
3.4 vite.config.ts
本 Phase 不动。Phase 005 改 manualChunks / optimizeDeps。
3.5 清理 Python 字节码
find packages/server/src/services/hermes/agent-bridge/python/__pycache__ -type f -delete
rmdir packages/server/src/services/hermes/agent-bridge/python/__pycache__ 2>/dev/null
在 .gitignore 加 __pycache__/。
4. 文档编写(必须在本 Phase 完成,不能拖)
代码要继承旧版硬规则,但旧版 AGENTS.md / ARCHITECTURE.md / DEVELOPMENT.md 全是旧品牌,必须重写。
| 文件 | 内容要求 |
|---|---|
AGENTS.md |
≤120 行。包地图改为 packages/client / packages/server / packages/skills / tests/*。保留「Hard Rules」全部 6 条。链接下面 4 个文档。禁止出现 ekko / hermes-web-ui。 |
ARCHITECTURE.md |
包边界、数据归属、运行时流。删掉 "Electron desktop distribution" 段落与 "Desktop Release Flow" 整节。新增一句:HERMES_WEB_UI_HOME 是有意保留的旧标识(配置层),见 docs/03-施工蓝图.md §0。 |
DEVELOPMENT.md |
命令表 + 编码规则 + 测试规则 + PR 形态。把 L47 "Match existing Naive UI patterns and avoid adding a new UI library" 改为 Arco Design Vue。 |
README.md / README_zh.md |
重写。项目简介、装 Python + hermes-agent 的前置步骤(因为砍了桌面端,不再捆绑)、启动命令、目录结构。 |
docs/harness/*.md |
4 个文件直接从 reference 拷贝。但要检查内容里是否引用了 desktop/ekko,有则改。 |
docs/01 / docs/02 / docs/03 已在仓库里,本 Phase 不动。
5. 验收
5.1 命令
cd /Users/jack/source/MyProject/js/hermes-ui
npm ci --ignore-scripts
npm run build
build 必须零 TS 报错。
5.2 自查清单
ls packages/只有clientserverskillsls tests/只有clientservere2esharedfixturesls .github/workflows/只有 5 个文件grep -rn "reference_code" .零命中(排除docs/phases/)package.json的name是hermes-ui,无preparescriptbin/下是hermes-ui.mjs+hermes-ui-mcp.mjsAGENTS.md≤120 行且无旧品牌__pycache__已清、.gitignore已加规则git init已执行(若尚未初始化)
5.3 冒烟(本 Phase 不要求功能正确,只要求不崩)
npm run dev
# 打开 http://localhost:5173
# 登录页能渲染即通过(后端功能此阶段不完整是正常的)
6. 风险
| # | 风险 | 缓解 |
|---|---|---|
| P1-1 | 删 packages/desktop 后根 package.json 仍有 electron 依赖,npm ci 正常但体积浪费 |
故意为之,Phase 004 统一清 |
| P2-1 | 改 package.json 导致 npm ci 报 lock 不同步 |
本 Phase 只改 name / bin / 删 prepare,不动 dependencies |
| P3-1 | npm ci 因缺 prepare 而不 build,后续 npm run build 手动执行 |
正常 |
| P4-1 | 漏拷隐藏文件(.dockerignore 等) |
用显式 cp -p 列表,不靠通配 |
| P5-1 | reference_code 与原仓库有偏差 | 后续 phase 需要对照时,用 git 提交历史比对而非直接拷;实在需要可再读 reference,但产物必须写进新项目 |
7. 完成标志
进入 Phase 002。