# 桌面端与 Web 双形态 > 对标 Codex:桌面安装后用户主目录出现 `~/.aps`;同一套 UI 也可纯 Web 部署。 ## 目录约定(对标 Codex `~/.codex`) 桌面端安装到电脑后,**固定**写到用户主目录(不是安装目录): | 系统 | 路径 | | --- | --- | | Windows | `%USERPROFILE%\.aps` → 如 `C:\Users\andy_\.aps` | | macOS / Linux | `~/.aps` | ``` ~/.aps/ # 本机应用数据(会话 / DB / Skill…) ├─ sessions/ │ └─ workspace.json # 项目元数据 + 话题会话 + 消息 ├─ skills/ ├─ data/ # world.json / master.db / knowledge… ├─ cache/ tmp/ logs/ packs/ └─ config.json <用户自选工程目录>/ # 新建项目时指定;排产业务文件放这里 ├─ 订单 / 物料 / 工艺 Excel… └─ … ``` - **话题会话**:存在 `~/.aps/sessions/`,可不绑定项目(独立话题)。 - **工程项目**:可选;创建时指定 `workDir`,业务数据文件由用户放在该目录。 | 变量 | 含义 | | --- | --- | | `APS_MODE` | `desktop` \| `web`(默认 `web`) | | `APS_HOME` | 显式主目录(覆盖默认) | | `APS_SKILLS_PATH` | 单文件 skills.json(测试兼容) | | `APS_WORLD_PATH` / `APS_DB_PATH` / … | 单项覆盖 | `GET /api/system/paths`、`GET /api/skills` 的 `skillsDir` / `mode` 可查看当前解析结果。 ## 开发命令 在**仓库根**、`apps/web` 或 `apps/desktop` 均可执行(脚本会自动定位仓库根): ```bash # 建议先在仓库根装依赖 cd ../.. # 若当前在 apps/desktop npm run bootstrap npm run dev:web # FastAPI + Vite(浏览器) npm run dev:desktop # FastAPI + Vite + Electron(数据 → ~/.aps) # 也可拆开(仅仓库根): npm run dev:server npm run dev:ui ``` ## 打包 ```bash npm run build:web # 产出 apps/web/dist —— 静态资源,部署到 Nginx/CDN,API 另部服务端 npm run build:desktop # 先 build:web,再 electron-builder 打 Windows 安装包(apps/desktop/release) ``` - **Web 部署**:只部署 `apps/web/dist` + 后端进程(uvicorn / 容器);`APS_MODE=web`。 - **桌面分发**:安装包内嵌壳;首次运行创建 `~/.aps`,Skill 写入 `~/.aps/skills//`。 ## 原生 / 顶栏菜单 Windows 桌面端使用**无边框窗口**(`frame: false`)+ 自绘顶栏: 1. 中文菜单 `文件 / 编辑 / 视图 / 窗口 / 帮助` 贴窗口最顶 2. 顶栏空白区可**拖动窗口**;双击空白可最大化/还原 3. 右侧自绘 **最小化 / 还原·退出全屏 / 关闭**(不依赖系统 overlay,避免点不动) 右侧面板拖拽上限随窗口宽度计算:只保证对话区 ≥280px。 ## Skill 与旧「设置页卡片」的区别 旧实现是服务端 `server/data/skills.json` 的登记表。 现实现对标 Codex:Skill 是用户目录下的**文件夹资产**;管理台展示并维护 `manifest.json`,桌面/Web 共用同一套 API。