chore: 官网拆分 homepage + 关于页瘦身 + 端口 5175(当前可用状态基线)
This commit is contained in:
1 parent
5eb11826db
commit
be151cb68f
85 files changed
+4420
-1530
No files matched your search
@@ -7,45 +7,48 @@
|
||||
## 产品形态(硬边界)
|
||||
|
||||
```text
|
||||
浏览器 → 只看官网 + 文档(Gin :8789)
|
||||
浏览器 → 官网/docs 为独立静态站(homepage/dist,可部署自有域名;本地 :8789 亦可预览)
|
||||
操作 → 只走桌面 Tauri(./run.sh gui)
|
||||
Vite :1420 → 仅桌面 WebView 源,不是浏览器产品
|
||||
Vite :5175 → 仅桌面 WebView 源,不是浏览器产品
|
||||
```
|
||||
|
||||
| 职责 | 放哪 |
|
||||
| -------------------------------------------------- | --------------------------------------------------------------- |
|
||||
| 桌面操作(SSH/SFTP/转发/RDP/VNC/串口/本地终端/AI) | **本仓** `src/` + `src-tauri/` |
|
||||
| 产品官网 + 用户文档 | **本仓** `apps/server`(Gin embed;原 `site-opsxshell` 已并入) |
|
||||
| 产品官网 + 用户文档 | **本仓** `homepage/`(静态站源 → tools/homepage-build 出 dist) |
|
||||
| 结账 / 在线授权 | 独立服务 **opsx-licence**;桌面只验 `LIC-` / `LICOFF-` |
|
||||
|
||||
同族对照:**opsxdb / opsxapi** 同形态(浏览器=官网/docs,操作=桌面)。Shell 的 Gin **只有** site/docs/health/download,**没有**操作 API——原生能力全在 Rust。
|
||||
同族对照:**opsxdb / opsxapi** 同形态(浏览器=官网/docs,操作=桌面)。Shell 的 Gin 只有 health/download + 本地静态托管 homepage/dist 预览,**没有**操作 API——原生能力全在 Rust。
|
||||
|
||||
`src/` 里的 React 是 **Tauri WebView UI**,不是浏览器 SaaS 客户端。
|
||||
|
||||
### 目录对齐说明
|
||||
|
||||
- 已对齐:`apps/server`(Gin 官网+docs)、`./run.sh web|gui` 场景。
|
||||
- **暂不**把 `src/` / `src-tauri/` 物理迁到 `apps/web` / `apps/desktop`(db/api 的 monorepo 布局);语义已统一,大挪目录收益小、打断现有打包与 CI。需要时再单独立项。
|
||||
- 已对齐:根级 `src/` + `src-tauri/` + `server/` + `homepage/` + `tools/homepage-build`,`./run.sh web|gui`,Vite :5175。
|
||||
- **不要重建**已废弃的 `apps/`、`packages/`、仓库根 `release/`、`.ui-review/`(db/api 旧 monorepo 空壳)。语义已统一,勿再把 `src/` / `src-tauri/` 迁回 `apps/web` / `apps/desktop`。
|
||||
- **安装包走 Tauri 2 标准目录** `src-tauri/target/{debug,release}/bundle/`(指定 triple 时为 `src-tauri/target/<triple>/release/bundle/`)。不要再造仓库根 `release/` 发版暂存;框架给了标准路径就用标准路径。`./run.sh gui` 是 `tauri dev` 裸二进制,macOS Dock 可能显示默认图标——这是 Tauri 开发态通病,不是缺根目录 `release/`,正式 `.app` / DMG 图标以 `bundle.icon` 为准。
|
||||
|
||||
## 架构(怎么改代码)
|
||||
|
||||
```text
|
||||
UI / Zustand → src/platform/* → Tauri command → src-tauri/services/*
|
||||
apps/server → Gin:/ 官网 · /docs · /health · /download(无操作面)
|
||||
UI / Zustand → src/platform/* → Tauri command → src-tauri/src/services/*
|
||||
server → Gin:/health · /download + 静态托管 homepage/dist(无操作面)
|
||||
```
|
||||
|
||||
- `src/platform/`:唯一 `invoke` / 事件入口;组件与 store **不直接** `invoke`。
|
||||
- `src/features/`:逐步提取功能域模型、Hook 和控件;目前从 settings 开始,页面仍在 `components/`,不要求整仓搬目录。
|
||||
- `src/platform/`:唯一 `invoke` / 事件入口;组件与 store **不直接** `invoke`,复用 `platform/invoke.ts`,不另建 `lib/tauri.ts`。
|
||||
- `src-tauri/src/commands/`:参数边界 + 统一响应;业务在 `services/`。
|
||||
- `shared/types/`:前后端契约;新能力先契约再 command,再补 `desktop.d.ts` / `platform` / `test/setup.ts`。
|
||||
- 文案:`src/i18n` 七语种同步;`test/i18n/localeKeys.test.ts` 校验 key。
|
||||
- 官网 HTML:`apps/server/internal/site/`;用户文档 Markdown:`apps/server/internal/docs/content/`(改完重编 server)。
|
||||
- 官网落地页 + 用户文档:`homepage/`(改完跑 `tools/homepage-build` 重新生成 dist)。Gin 只静态托管 `homepage/dist`,不要把文档源塞回 `server/`。
|
||||
|
||||
扩展顺序:契约 → services → command → platform → UI → 测试。
|
||||
|
||||
### IPC
|
||||
|
||||
- 业务失败(SSH/SFTP/转发/会话/本地文件):信封 `{ success, error, errorCode? }`。
|
||||
- RDP/VNC 运行态:throw,视图里 catch。
|
||||
- RDP/VNC 运行态:throw,视图里 catch。`invokeNative` 将拒绝转换为 `NativeCommandError`,保留错误码与原始原因;业务失败信封仍由调用方检查 `success`。
|
||||
- Rust 错误复用 `domain/error.rs` 的 `AppError` / `codes`;目前仅部分文件操作接入,不代表全量迁移完成。
|
||||
- 文件对话框 command 须在主线程;磁盘 I/O 用 `spawn_blocking`。
|
||||
|
||||
## 硬边界(少而硬)
|
||||
@@ -58,7 +61,7 @@ apps/server → Gin:/ 官网 · /docs · /health · /download(无操作
|
||||
6. 会话运行态(SSH/转发/RDP/VNC worker)只在原生内存;断开即清理桌面 worker。
|
||||
7. 不把结账/签发、CLI/MCP/插件宿主、堡垒机审批做成默认能力。
|
||||
8. 不恢复旧 Electron 桌面壳、旧构建链。
|
||||
9. **不要**把桌面操作做成浏览器工作台;`:1420` 不是对外入口。
|
||||
9. **不要**把桌面操作做成浏览器工作台;`:5175` 不是对外入口。
|
||||
|
||||
## 领域要点(细节跟现有代码,勿另起炉灶)
|
||||
|
||||
@@ -66,9 +69,10 @@ apps/server → Gin:/ 官网 · /docs · /health · /download(无操作
|
||||
- **SSH/SFTP**:协议心跳保链路(勿向 Shell 灌回车空格);意外断开有限次重连;SFTP 分清 upload/download 与路径方向。
|
||||
- **RDP/VNC**:仅桌面端;有限次重连;压缩/帧路径跟 `services/desktop/`,勿新开解压栈。
|
||||
- **AI**:新配置先临时凭据实测再落盘;远程执行只复用当前 SSH;critical 硬拒绝。
|
||||
- **设置与主题**:设置经 `settingsStore` 串行保存,失败撤回对应修改并保留后续待保存项;不要绕过 store 并发写 `app-settings`。主题复用 `themes/app-theme.ts` 与 `useTheme`。
|
||||
- **授权**:只对接 opsx-licence;本地验 `LIC-` / `LICOFF-`。
|
||||
|
||||
实现时优先对照邻近模块与单测,而不是在本文件追加细则。
|
||||
实现时优先对照邻近模块与单测,而不是在本文件追加细则。当前分层与未完成项见 [架构说明](docs/architecture.md) 和 [重构进度](docs/architecture-refactor.md)。
|
||||
|
||||
## 命令
|
||||
|
||||
@@ -79,7 +83,7 @@ apps/server → Gin:/ 官网 · /docs · /health · /download(无操作
|
||||
./run.sh stop | status
|
||||
npm run test:patrol # 改功能优先
|
||||
npm run acceptance:quick # 或 acceptance:full
|
||||
./scripts/build.sh # 当前平台安装包 → release/
|
||||
./scripts/build.sh # 当前平台安装包 → src-tauri/target/<triple>/release/bundle/
|
||||
./scripts/macos-notarize.sh # 新 DMG 公证(有凭据时)
|
||||
```
|
||||
|
||||
@@ -91,3 +95,9 @@ npm run acceptance:quick # 或 acceptance:full
|
||||
- **跟仓内模式**:新功能对齐现有 `platform` / `services` 分包,禁止平行架构。
|
||||
- **少造文档**:非用户要求不要新增长篇 markdown;改行为同步必要注释即可。
|
||||
- **测试够用**:功能改动跑 patrol + 相关单测;不必为每个微规则再加一篇规范。
|
||||
|
||||
## 本地数据路径规则(三族统一)
|
||||
|
||||
- **用户数据**(连接配置/集合/AI key/驱动 jar):纯 Rust 项目走 Tauri `app_data_dir()`(平台规范);**有 Go sidecar 的走 `~/.<程序名>/` dotfile**(程序名叫什么目录就叫什么,如本项目 `~/.opsxshell/`;Go 拿不到 Tauri 路径 API,dotfile 是最干净方案)。**同一项目用户数据只允许一处**,跟着能力层走。
|
||||
- **壳状态**(窗口位置等可丢弃项):`app_data_dir()`,由 tauri 插件自管。
|
||||
- **禁止相对路径存数据**(桌面 cwd 不定,数据会散落)。
|
||||
Reference in new issue
Block a user