From d6eba0da73083b2ea619d705e6fc5a27f1693e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B2=A9=E5=B2=A9?= Date: Thu, 13 Aug 2026 17:27:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=20dev=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=AE=BE=E8=AE=A1=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-server/package.json | 1 - apps/web/vite.config.ts | 27 +++++++++++++++++++++++++++ docs/FEATURES.md | 1 + docs/IMPLEMENTATION.md | 6 ++++++ package.json | 4 +++- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 apps/web/vite.config.ts diff --git a/apps/web-server/package.json b/apps/web-server/package.json index e263603..7e5b16b 100644 --- a/apps/web-server/package.json +++ b/apps/web-server/package.json @@ -4,7 +4,6 @@ "private": true, "type": "module", "scripts": { - "dev": "bun --watch src/index.ts", "typecheck": "tsc --noEmit", "build": "bun build src/index.ts --outdir dist --target bun" }, diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts new file mode 100644 index 0000000..d570016 --- /dev/null +++ b/apps/web/vite.config.ts @@ -0,0 +1,27 @@ +import { fileURLToPath, URL } from "node:url"; +import { defineConfig, loadEnv } from "vite"; + +const repositoryRoot = fileURLToPath(new URL("../..", import.meta.url)); + +export default defineConfig(({ mode }) => { + const environment = loadEnv(mode, repositoryRoot, ""); + const configuredHost = environment.HOST || "127.0.0.1"; + const backendHost = + configuredHost === "0.0.0.0" ? "127.0.0.1" : configuredHost; + const backendPort = environment.PORT || "3000"; + + return { + envDir: repositoryRoot, + server: { + host: "127.0.0.1", + port: 5173, + strictPort: true, + proxy: { + "/api": { + target: `http://${backendHost}:${backendPort}`, + changeOrigin: true, + }, + }, + }, + }; +}); diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 6d3ca9f..68b4bc3 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -42,6 +42,7 @@ - 人工验证步骤:以空临时数据目录和未配置 DeepSeek 密钥启动生产构建;发送“最终失败链路验收”;检查用户消息、错误提示、输入恢复以及 Run 事件文件和失败摘要。 - 人工操作结果:2026-08-12 使用本机应用内浏览器完成;页面准确显示模型密钥缺失提示,输入恢复,用户消息保留;`events.ndjson` 依次写入 `run.started`、`message.started`、`run.failed`,`run.json` 状态为 `failed`。 - 查看阶段修改:根据用户反馈将应用外壳锁定为浏览器可视区高度;页面根节点不再滚动,侧栏仅“最近”区域内部滚动,ConversationPane 仅消息内容区内部滚动,顶部操作、侧栏底部信息和输入组件保持固定。2026-08-13 在 1280×720 视口验证根页面高度与视口一致且无页面滚动,两个内容区均为独立 `overflow-y: auto` 容器。 +- 开发环境修正:`bun run dev` 的后端固定以仓库根目录运行并读取根 `.env`;前端由 Vite 提供 HMR,开发时统一访问 `127.0.0.1:5173`,`/api` 按同一份 `HOST/PORT` 配置代理到 Bun watch 后端。生产 `start` 仍由 Bun/Hono 提供构建后的 `web/dist`。 - 视觉参考:失败状态验收截图保存为 `docs/visual-reference/f002-model-config-error.jpg`。 - 已知限制:真实 DeepSeek 成功调用需要用户在运行环境提供自己的密钥;自动化和本次人工验收未使用或读取真实密钥。停止与重试留在 F-005,服务重启后的事件重放加固留在 F-010。 - 主要验收:AC-004、AC-010、AC-014、AC-016。 diff --git a/docs/IMPLEMENTATION.md b/docs/IMPLEMENTATION.md index 7467f7d..c2ed453 100644 --- a/docs/IMPLEMENTATION.md +++ b/docs/IMPLEMENTATION.md @@ -787,6 +787,12 @@ LOG_LEVEL=info ## 18. 验证命令 +开发模式从仓库根目录执行 `bun run dev`,并统一访问 Vite 的 +`http://127.0.0.1:5173`:Vite 为前端提供 HMR,并把 `/api` 代理到根目录 +`.env` 中 `HOST`、`PORT` 指定的 Bun 后端;后端使用 watch 自动重启。生产模式先 +执行 `bun run build`,再执行 `bun run start`,由单个 Bun/Hono 进程同时提供 API +和 `apps/web/dist` 静态资源。 + 项目骨架阶段必须创建并实际运行以下命令: ```bash diff --git a/package.json b/package.json index c5c1555..226d197 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "packages/*" ], "scripts": { - "dev": "bun run --filter @great-agent/web --filter @great-agent/web-server dev", + "dev": "bun run --parallel dev:web dev:server", + "dev:web": "bun run --cwd apps/web dev", + "dev:server": "bun --watch apps/web-server/src/index.ts", "format": "biome format --write .", "format:check": "biome format .", "lint": "biome lint .",