Files
claw/docs/L4-工程实现与部署拓扑层.md

299 lines
8.6 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.
# L4 — 工程实现与部署拓扑层
**文档版本**: 2.1<br>
**适用项目**: sgClawZeroClaw 重构版)<br>
**编制日期**: 2026-03-29
**读者**: 开发者、测试工程师、联调工程师
---
## 1. 当前仓库结构
本仓库已经收敛为以 Rust Runtime 为主、文档为辅的产品内核仓库。
不再把外部浏览器仓库和旧验证页当作本仓库的主实现面。
```
claw/
├── Cargo.toml
├── resources/
│ └── rules.json
├── src/
│ ├── main.rs
│ ├── lib.rs
│ ├── agent/
│ ├── compat/
│ ├── config/
│ ├── llm/
│ ├── pipe/
│ └── security/
├── tests/
├── third_party/
│ └── zeroclaw/
├── docs/
│ ├── L0-...md
│ ├── L1-...md
│ ├── L2-...md
│ ├── L3-...md
│ ├── L4-...md
│ ├── 浏览器对接标准.md
│ ├── plans/
│ └── archive/
└── frontend/
├── README.md
└── archive/
```
工程上应把 `third_party/zeroclaw` 理解为“已 vendored 的能力核心”,而不是单独维护的兄弟项目,也不是只用于兼容的附属依赖。
---
## 2. 关键实现文件
### 2.1 入口与装配
- [`src/main.rs`](/home/zyl/projects/sgClaw/claw/src/main.rs)
- [`src/lib.rs`](/home/zyl/projects/sgClaw/claw/src/lib.rs)
职责:
- 初始化二进制入口。
- 建立标准输入输出 transport。
- 完成握手。
- 将消息循环交给 `agent`
### 2.2 协议与浏览器工具
- [`src/pipe/protocol.rs`](/home/zyl/projects/sgClaw/claw/src/pipe/protocol.rs)
- [`src/pipe/browser_tool.rs`](/home/zyl/projects/sgClaw/claw/src/pipe/browser_tool.rs)
- [`src/pipe/handshake.rs`](/home/zyl/projects/sgClaw/claw/src/pipe/handshake.rs)
职责:
- 定义 wire message。
- 维护 `seq` 和 HMAC。
- 提供命令发送与响应等待能力。
### 2.3 执行路径
- [`src/agent/mod.rs`](/home/zyl/projects/sgClaw/claw/src/agent/mod.rs)
- [`src/agent/runtime.rs`](/home/zyl/projects/sgClaw/claw/src/agent/runtime.rs)
- [`src/compat/runtime.rs`](/home/zyl/projects/sgClaw/claw/src/compat/runtime.rs)
- [`src/compat/browser_tool_adapter.rs`](/home/zyl/projects/sgClaw/claw/src/compat/browser_tool_adapter.rs)
职责:
- 当前决定 fallback 或 compat 执行。
- 把受保护的浏览器工具契约映射到浏览器协议。
- 在 ZeroClaw turn 事件与宿主日志之间做桥接。
说明:
- `src/agent/runtime.rs``src/agent/planner.rs` 属于过渡性轻量路径,不应再被写成长期产品主线。
- 主线目标应是“sgClaw security layer + zeroclaw core runtime”而不是长期保留 browser-only compat 分叉。
### 2.4 安全与配置
- [`src/security/mac_policy.rs`](/home/zyl/projects/sgClaw/claw/src/security/mac_policy.rs)
- [`src/config/settings.rs`](/home/zyl/projects/sgClaw/claw/src/config/settings.rs)
- [`resources/rules.json`](/home/zyl/projects/sgClaw/claw/resources/rules.json)
职责:
- 维护运行时安全边界。
- 读取 provider / skills 等运行时配置,并逐步向 zeroclaw-first 配置模型收敛。
---
## 3. 构建与运行
### 3.1 本地构建
当前仓库以 Cargo 为主:
```bash
cargo build
```
发布构建:
```bash
cargo build --release
```
如果需要做协议或兼容层改动,优先先跑测试,再谈部署。
### 3.2 运行前提
sgClaw 不是独立交互式 CLI 产品,正常运行前提是:
- 有浏览器宿主进程作为父进程。
- 宿主通过 STDIO 与 sgClaw 通信。
- 宿主实现 `init/submit_task/response` 协议。
直接在终端里执行二进制,只能用于开发级调试,不代表真实产品启动方式。
### 3.3 模型配置
当前启用 ZeroClaw compat runtime 的关键环境变量:
```bash
DEEPSEEK_API_KEY=...
DEEPSEEK_BASE_URL=...
DEEPSEEK_MODEL=...
```
若这些变量不存在或不完整,系统会退回 planner fallback。这个行为是当前实现状态不是长期架构推荐。
### 3.4 runtime config 文件
`host``--config-path=<workspace_root>/sgclaw_config.json` 拉起 `sgclaw` 时,`sgclaw` 会自己读取该 JSON 文件,而不是要求宿主额外复制 skills。
当前支持的关键字段:
```json
{
"apiKey": "sk-...",
"baseUrl": "https://api.deepseek.com",
"model": "deepseek-chat",
"skillsDir": "skill_lib"
}
```
说明:
- `skillsDir` 可省略。
- 若省略,则默认使用 `<workspace_root>/.sgclaw-zeroclaw-workspace/skills`
- 若为相对路径,则相对于 `sgclaw_config.json` 所在目录解析。
- 若指向某个 skill repo 根目录,且其下存在 `skills/` 子目录,运行时会自动落到该 `skills/` 目录。
- 因此 `host` 只需要负责传递 `runtime config` 路径skill 查找策略由 `sgclaw` 自己控制。
- 长期看,这个文件应表达 zeroclaw-first、`planner-first` 的 runtime/profile/tool policy 配置,而不仅是 provider shim。
### 3.5 launch config 文件与 fallback
`launch config``host` 读取,不由 sgClaw 自己解析。设计冻结后的推荐路径为:
```text
<profile>/superrpa/sgclaw_launch_config.json
```
该文件承载的字段应包括:
- `binary`
- `args`
- `env`
- `working_dir`
- `runtime_config_path`
- `frontend_bundle_dir`
加载规则必须保持稳定:
1. `host` 优先读取 profile-local `launch config`
2.`binary` 缺失或无效,则回退到浏览器已知可启动的默认 sgClaw 路径
3.`runtime_config_path` 缺失,则回退到 `<profile>/superrpa/sgclaw_config.json`
4.`frontend_bundle_dir` 缺失或无效,则回退到 bundled frontend resources
这样做的目的不是削弱宿主管控,而是把高频变化项从编译期常量改成运行期可替换对象。
### 3.6 frontend bundle 装载拓扑
`frontend bundle` 的部署方式应当是“外部 bundle 优先,内置资源兜底”:
```text
host
├─ validate frontend_bundle_dir
├─ if valid: load external frontend bundle
└─ else: load bundled frontend resources
```
这意味着后续改浮窗 UI、验收页面或 planner 展示逻辑,不应再默认要求重编 Chromium。
---
## 4. 测试拓扑
当前测试覆盖重点是“协议与兼容性”,而不是 UI 演示。
主要测试类别包括:
- `pipe_protocol_test.rs`
- `pipe_handshake_test.rs`
- `browser_tool_test.rs`
- `runtime_task_flow_test.rs`
- `agent_runtime_test.rs`
- `compat_runtime_test.rs`
- `compat_browser_tool_test.rs`
- `compat_config_test.rs`
- `compat_memory_test.rs`
- `compat_cron_test.rs`
建议执行:
```bash
cargo test
```
这组测试表达了一个重要工程事实当前系统的稳定核心是协议、安全边界、runtime 选择和 zeroclaw 接入,而不是旧版前端验证页。
---
## 5. 部署边界
### 5.1 本仓库负责什么
- 提供 sgClaw Rust 二进制。
- 提供规则文件。
- 提供协议文档和测试基线。
### 5.2 外部宿主负责什么
- 读取并校验 `launch config`
- 拉起并托管 sgClaw 进程。
- 提供页面执行能力。
- 实现命令落地、响应回传和宿主侧校验。
- 装载 `frontend bundle`,并在无效时回退到内置资源。
### 5.3 不在本仓库内交付的内容
- Chromium 工程源码与 BUILD 配置。
- Side Panel 成品前端。
- 生产部署脚本、安装包、发布流水线。
L4 的工程边界必须按仓库现实写清楚,否则会把“外部依赖”误写成“本仓库已交付”。
---
## 6. 部署建议拓扑
一个最小可工作的部署拓扑如下:
```
Browser Host Process
├─ reads launch config
├─ launches sgclaw binary
├─ writes init / submit_task to stdin
├─ reads command / log / task_complete from stdout
├─ executes page actions in host environment
└─ loads external frontend bundle or bundled resources
sgclaw binary
├─ loads runtime config
├─ loads resources/rules.json
├─ runs planner-first execution
├─ verifies action/domain
├─ optionally calls provider API
└─ waits for browser response
```
这就是当前版本真正需要被实现和联调的部署模型。
---
## 7. 工程结论
L4 层面的核心结论只有两点:
1. 本仓库已经从“带演示页的杂糅目录”收敛为“Rust Runtime + 协议文档 + 测试”的内核仓库。
2. ZeroClaw 重构后的工程重点是把工程形态从“browser-first compat”收口为“zeroclaw-first runtime + sgClaw security envelope”同时保持浏览器协议稳定。
3. `host``launch config``runtime config``frontend bundle``planner-first` 必须在文档、代码和验收中使用同一套术语,避免再次把前端逻辑上移到 sgClaw 之外。