aps-agent/docs/architecture/desktop.md

81 lines
3.0 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.

# 桌面端与 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/<id>/`。
## 原生 / 顶栏菜单
Windows 桌面端使用**无边框窗口**(`frame: false`)+ 自绘顶栏:
1. 中文菜单 `文件 / 编辑 / 视图 / 窗口 / 帮助` 贴窗口最顶
2. 顶栏空白区可**拖动窗口**;双击空白可最大化/还原
3. 右侧自绘 **最小化 / 还原·退出全屏 / 关闭**(不依赖系统 overlay,避免点不动)
右侧面板拖拽上限随窗口宽度计算:只保证对话区 ≥280px。
## Skill 与旧「设置页卡片」的区别
旧实现是服务端 `server/data/skills.json` 的登记表。
现实现对标 Codex:Skill 是用户目录下的**文件夹资产**;管理台展示并维护 `manifest.json`,桌面/Web 共用同一套 API。