docs: archive legacy planning and frontend assets
This commit is contained in:
10
docs/archive/项目管理与排期/README.md
Normal file
10
docs/archive/项目管理与排期/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 项目管理与排期归档
|
||||
|
||||
本目录存放团队协作与管理向文档,作为历史参考:
|
||||
|
||||
- 团队分工与职责
|
||||
- 管理标准与流程规范
|
||||
- 协作时间表与甘特图
|
||||
- 启动说明文档(Rust 侧 / 浏览器侧)
|
||||
|
||||
这些文档不再作为产品主线文档入口的一部分。
|
||||
396
docs/archive/项目管理与排期/browser_team_kickoff.md
Normal file
396
docs/archive/项目管理与排期/browser_team_kickoff.md
Normal file
@@ -0,0 +1,396 @@
|
||||
# sgClaw 浏览器团队开发启动文档
|
||||
|
||||
**适用对象**:Chromium / C++ 浏览器开发团队(P2)
|
||||
**目标**:浏览器团队拿到本文档后即可独立启动开发,并在一个周期后与 sgClaw 项目团队完成 Pipe 联调。
|
||||
**协议版本**:`1.0`
|
||||
**冻结日期**:`2026-03-24`
|
||||
|
||||
---
|
||||
|
||||
## 1. 开发目标
|
||||
|
||||
浏览器团队本周期只负责浏览器侧 Pipe 接入,不负责 LLM、Skill、Memory、Agent 推理。
|
||||
|
||||
本周期结束时,浏览器侧必须具备以下能力:
|
||||
|
||||
1. 能从浏览器主进程启动 `sgclaw` Rust 子进程。
|
||||
2. 能通过 `stdin/stdout` 与 `sgclaw` 进行双向 `JSON Line` 通信。
|
||||
3. 能解析 sgClaw 发来的 `command` 消息,并路由到现有 `CommandRouter`。
|
||||
4. 能执行最小可联调动作:`click`、`type`、`navigate`、`getText`。
|
||||
5. 能返回结构化 `response` 消息。
|
||||
6. 能在浏览器侧执行域名和 action 白名单校验。
|
||||
|
||||
本周期不做:
|
||||
|
||||
1. 不改现有 `CommandRouter` 的核心接口。
|
||||
2. 不新造一套浏览器操作 API。
|
||||
3. 不改为 HTTP、WebSocket、Named Pipe。
|
||||
4. 不实现 Rust 侧逻辑。
|
||||
|
||||
---
|
||||
|
||||
## 2. 架构边界
|
||||
|
||||
浏览器侧是父进程,`sgclaw` 是子进程。浏览器侧新增三个模块:
|
||||
|
||||
1. `SgClawProcessHost`
|
||||
负责子进程启动、停止、状态管理、异常退出处理。
|
||||
2. `PipeListener`
|
||||
负责异步读取 `sgclaw stdout`,按行解析 JSON 并分发。
|
||||
3. `MacWhitelistCheck`
|
||||
负责浏览器侧二次安全校验,防止越权 action 落到 `CommandRouter`。
|
||||
|
||||
浏览器侧数据流固定如下:
|
||||
|
||||
`Side Panel / UI -> SgClawProcessHost -> STDIO Pipe -> sgclaw`
|
||||
|
||||
`sgclaw -> STDIO Pipe -> PipeListener -> MacWhitelistCheck -> CommandRouter -> response`
|
||||
|
||||
---
|
||||
|
||||
## 3. 浏览器团队负责的交付物
|
||||
|
||||
本周期交付以下文件或等价模块:
|
||||
|
||||
1. `sgclaw_process_host.h`
|
||||
2. `sgclaw_process_host.cc`
|
||||
3. `pipe_listener.h`
|
||||
4. `pipe_listener.cc`
|
||||
5. `mac_whitelist_check.h`
|
||||
6. `mac_whitelist_check.cc`
|
||||
7. `rules.json`
|
||||
8. `sgclaw_unittests` 中对应单元测试
|
||||
|
||||
建议目录:
|
||||
|
||||
```text
|
||||
chrome/browser/superrpa/sgclaw/
|
||||
sgclaw_process_host.h
|
||||
sgclaw_process_host.cc
|
||||
pipe_listener.h
|
||||
pipe_listener.cc
|
||||
mac_whitelist_check.h
|
||||
mac_whitelist_check.cc
|
||||
test/
|
||||
sgclaw_process_host_unittest.cc
|
||||
pipe_listener_unittest.cc
|
||||
mac_whitelist_check_unittest.cc
|
||||
resources/
|
||||
rules.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 冻结接口
|
||||
|
||||
### 4.1 传输协议
|
||||
|
||||
1. 传输层固定为 `STDIO Pipe`。
|
||||
2. 编码固定为 `UTF-8`。
|
||||
3. 消息边界固定为 `JSON Line`,每行一条完整 JSON。
|
||||
4. 单条消息最大 `1 MB`。
|
||||
5. `stdout` 只允许输出协议消息,日志必须走 `stderr`。
|
||||
|
||||
### 4.2 握手协议
|
||||
|
||||
浏览器发送:
|
||||
|
||||
```json
|
||||
{"type":"init","version":"1.0","hmac_seed":"0123456789abcdef","capabilities":["browser_action"]}
|
||||
```
|
||||
|
||||
sgClaw 返回:
|
||||
|
||||
```json
|
||||
{"type":"init_ack","version":"1.0","agent_id":"uuid-v4","supported_actions":["click","type","navigate","getText","getHtml","waitForSelector","pageScreenshot","select","scrollTo","getAomSnapshot","storageSet","storageGet","zombieSpawn","zombieKill"]}
|
||||
```
|
||||
|
||||
约束:
|
||||
|
||||
1. 浏览器必须在子进程启动后 `5s` 内发送 `init`。
|
||||
2. `5s` 内收不到 `init_ack`,判定启动失败。
|
||||
3. `version` 不一致,必须立即终止会话。
|
||||
|
||||
### 4.3 command 消息格式
|
||||
|
||||
```json
|
||||
{
|
||||
"type":"command",
|
||||
"seq":12,
|
||||
"action":"click",
|
||||
"params":{"selector":"#submit","wait_after":300},
|
||||
"security":{
|
||||
"expected_domain":"oa.example.com",
|
||||
"hmac":"<hex>"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
字段要求:
|
||||
|
||||
1. `seq` 为正整数,必须唯一。
|
||||
2. `action` 必须在白名单内。
|
||||
3. `params` 必须是对象。
|
||||
4. `security.expected_domain` 和 `security.hmac` 必须存在。
|
||||
|
||||
### 4.4 response 消息格式
|
||||
|
||||
成功:
|
||||
|
||||
```json
|
||||
{
|
||||
"type":"response",
|
||||
"seq":12,
|
||||
"success":true,
|
||||
"data":{"text":"提交成功"},
|
||||
"aom_snapshot":[],
|
||||
"timing":{"queue_ms":2,"exec_ms":38}
|
||||
}
|
||||
```
|
||||
|
||||
失败:
|
||||
|
||||
```json
|
||||
{
|
||||
"type":"response",
|
||||
"seq":12,
|
||||
"success":false,
|
||||
"data":{
|
||||
"error":{
|
||||
"code":"CMD_SELECTOR_NOT_FOUND",
|
||||
"message":"selector '#submit' not found"
|
||||
}
|
||||
},
|
||||
"aom_snapshot":[],
|
||||
"timing":{"queue_ms":1,"exec_ms":10}
|
||||
}
|
||||
```
|
||||
|
||||
约束:
|
||||
|
||||
1. 一个 `command.seq` 只能对应一个 `response.seq`。
|
||||
2. 失败必须返回结构化错误,不允许只返回字符串。
|
||||
3. `timing` 必须始终带上。
|
||||
|
||||
---
|
||||
|
||||
## 5. 本周期最小 Action 集
|
||||
|
||||
联调周期只强制四个动作:
|
||||
|
||||
1. `click`
|
||||
2. `type`
|
||||
3. `navigate`
|
||||
4. `getText`
|
||||
|
||||
动作语义:
|
||||
|
||||
1. `click`
|
||||
调用现有点击能力,支持可选 `wait_after`。
|
||||
2. `type`
|
||||
在目标输入框输入文本,支持 `clear_first`。
|
||||
3. `navigate`
|
||||
导航到目标 URL。
|
||||
4. `getText`
|
||||
获取目标节点文本。
|
||||
|
||||
其余 action 可保留接口但不进入本周期强制验收。
|
||||
|
||||
---
|
||||
|
||||
## 6. 浏览器侧实现要求
|
||||
|
||||
### 6.1 SgClawProcessHost
|
||||
|
||||
必须实现:
|
||||
|
||||
1. 单例,避免重复创建多个 `sgclaw` 子进程。
|
||||
2. `Start()` 创建匿名管道并启动子进程。
|
||||
3. `Stop()` 正常关闭并在超时后强制结束。
|
||||
4. `OnProcessCrash()` 记录错误并更新状态。
|
||||
5. 状态机至少包含 `Idle -> Starting -> Running -> Stopped / Crashed`。
|
||||
|
||||
建议接口:
|
||||
|
||||
```cpp
|
||||
class SgClawProcessHost {
|
||||
public:
|
||||
bool Start();
|
||||
void Stop();
|
||||
bool IsRunning() const;
|
||||
bool SendLine(std::string json_line);
|
||||
};
|
||||
```
|
||||
|
||||
### 6.2 PipeListener
|
||||
|
||||
必须实现:
|
||||
|
||||
1. 持续读取 `stdout`。
|
||||
2. 以换行符切分 `JSON Line`。
|
||||
3. 拒绝空行、非 JSON、超过 1MB 的消息。
|
||||
4. 能按 `seq` 追踪一次请求的完整生命周期。
|
||||
5. 管道断开时通知 `SgClawProcessHost`。
|
||||
|
||||
### 6.3 CommandRouter 对接
|
||||
|
||||
必须实现:
|
||||
|
||||
1. `command.action` 到现有浏览器命令的映射表。
|
||||
2. 尽量复用现有 `CommandRouter`。
|
||||
3. 不允许在 Pipe 层直接写新的页面控制逻辑。
|
||||
4. response 必须从实际执行结果构造,不允许伪造成功。
|
||||
|
||||
建议映射:
|
||||
|
||||
1. `click -> CommandRouter.click`
|
||||
2. `type -> CommandRouter.type`
|
||||
3. `navigate -> CommandRouter.navigate`
|
||||
4. `getText -> CommandRouter.getText`
|
||||
|
||||
### 6.4 MacWhitelistCheck
|
||||
|
||||
必须实现:
|
||||
|
||||
1. action 白名单校验。
|
||||
2. expected_domain 与当前页面域名比对。
|
||||
3. `rules.json` 加载失败时默认拒绝。
|
||||
4. 拒绝时返回统一错误码。
|
||||
|
||||
建议错误码:
|
||||
|
||||
1. `MAC_ACTION_NOT_ALLOWED`
|
||||
2. `MAC_DOMAIN_NOT_ALLOWED`
|
||||
3. `MAC_RULES_LOAD_FAILED`
|
||||
4. `PIPE_INVALID_JSON`
|
||||
5. `PIPE_MESSAGE_TOO_LARGE`
|
||||
|
||||
---
|
||||
|
||||
## 7. 浏览器团队开发顺序
|
||||
|
||||
### Day 1-2
|
||||
|
||||
1. 完成 `SgClawProcessHost` 骨架。
|
||||
2. 用 dummy 子进程验证启动和退出。
|
||||
3. 打通 `stdin/stdout` 读写通道。
|
||||
|
||||
验收:
|
||||
|
||||
1. 能启动 `echo` 或测试进程。
|
||||
2. 能发送一行字符串并收到回写。
|
||||
|
||||
### Day 3-4
|
||||
|
||||
1. 完成 `PipeListener`。
|
||||
2. 完成 `init -> init_ack` 握手。
|
||||
3. 建立 `command` / `response` 解析结构。
|
||||
|
||||
验收:
|
||||
|
||||
1. 能与 Rust 侧互发 JSON Line。
|
||||
2. 能处理 `seq` 对应关系。
|
||||
|
||||
### Day 5-6
|
||||
|
||||
1. 接入 `CommandRouter`。
|
||||
2. 完成 4 个最小 action。
|
||||
3. 完成 `MacWhitelistCheck`。
|
||||
|
||||
验收:
|
||||
|
||||
1. Rust 发起 `click/type/navigate/getText` 时浏览器真实执行。
|
||||
2. 非白名单域名被拒绝。
|
||||
|
||||
### Day 7
|
||||
|
||||
1. 完成浏览器侧单元测试。
|
||||
2. 提供联调分支和运行说明。
|
||||
3. 预留半天与项目团队联调。
|
||||
|
||||
---
|
||||
|
||||
## 8. 浏览器团队自测清单
|
||||
|
||||
- [ ] `Start()` 成功启动真实 `sgclaw` 二进制。
|
||||
- [ ] `Start()` 重复调用不会启动多个实例。
|
||||
- [ ] `Stop()` 能正常关闭进程。
|
||||
- [ ] `init -> init_ack` 成功。
|
||||
- [ ] 超过 1MB 的 JSON 消息会被拒绝。
|
||||
- [ ] 非 JSON 行会被拒绝。
|
||||
- [ ] `click/type/navigate/getText` 能成功返回。
|
||||
- [ ] 域名不匹配时返回 `MAC_DOMAIN_NOT_ALLOWED`。
|
||||
- [ ] `rules.json` 缺失时默认拒绝。
|
||||
- [ ] 日志中能按 `seq` 查到请求和响应。
|
||||
|
||||
---
|
||||
|
||||
## 9. 联调输入输出样例
|
||||
|
||||
### 9.1 手动握手
|
||||
|
||||
浏览器发:
|
||||
|
||||
```json
|
||||
{"type":"init","version":"1.0","hmac_seed":"00112233445566778899aabbccddeeff","capabilities":["browser_action"]}
|
||||
```
|
||||
|
||||
期待 Rust 回:
|
||||
|
||||
```json
|
||||
{"type":"init_ack","version":"1.0","agent_id":"00000000-0000-0000-0000-000000000000","supported_actions":["click","type","navigate","getText","getHtml","waitForSelector","pageScreenshot","select","scrollTo","getAomSnapshot","storageSet","storageGet","zombieSpawn","zombieKill"]}
|
||||
```
|
||||
|
||||
### 9.2 最小 click 联调
|
||||
|
||||
Rust 发:
|
||||
|
||||
```json
|
||||
{"type":"command","seq":1,"action":"click","params":{"selector":"#login-btn"},"security":{"expected_domain":"oa.example.com","hmac":"<hex>"}}
|
||||
```
|
||||
|
||||
浏览器回:
|
||||
|
||||
```json
|
||||
{"type":"response","seq":1,"success":true,"data":{},"aom_snapshot":[],"timing":{"queue_ms":1,"exec_ms":35}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. 联调日必须提供的东西
|
||||
|
||||
浏览器团队在联调前必须准备:
|
||||
|
||||
1. 可运行的浏览器分支。
|
||||
2. `sgclaw` 子进程启动入口。
|
||||
3. `rules.json` 默认测试配置。
|
||||
4. 最小测试页面,至少包含一个输入框、一个按钮、一个文本节点。
|
||||
5. 一份 action 到 `CommandRouter` 的映射表。
|
||||
6. 一份错误码表。
|
||||
|
||||
---
|
||||
|
||||
## 11. 周期结束验收标准
|
||||
|
||||
以下全部满足,浏览器团队本周期完成:
|
||||
|
||||
1. 能在浏览器中稳定启动和停止 `sgclaw`。
|
||||
2. `init -> init_ack` 成功率 100%。
|
||||
3. `click/type/navigate/getText` 联调通过。
|
||||
4. 所有失败场景均返回结构化错误。
|
||||
5. 域名和 action 白名单生效。
|
||||
6. 与项目团队在同一测试页完成一次端到端演示。
|
||||
|
||||
---
|
||||
|
||||
## 12. 依赖与协作方式
|
||||
|
||||
浏览器团队只依赖以下冻结输入:
|
||||
|
||||
1. Pipe 协议版本:`1.0`
|
||||
2. 消息结构:`init / init_ack / command / response`
|
||||
3. 最小 action:`click/type/navigate/getText`
|
||||
4. 安全字段:`expected_domain`、`hmac`
|
||||
|
||||
除以上四项外,本周期内其他细节不应阻塞浏览器侧开发。
|
||||
|
||||
390
docs/archive/项目管理与排期/sgclaw_project_team_kickoff.md
Normal file
390
docs/archive/项目管理与排期/sgclaw_project_team_kickoff.md
Normal file
@@ -0,0 +1,390 @@
|
||||
# sgClaw 本项目团队开发启动文档
|
||||
|
||||
**适用对象**:sgClaw Rust / Agent 项目开发团队(P1a、P1b)
|
||||
**目标**:项目团队拿到本文档后即可独立启动 Rust 侧开发,并在一个周期后与浏览器团队完成 Pipe 联调。
|
||||
**协议版本**:`1.0`
|
||||
**冻结日期**:`2026-03-24`
|
||||
|
||||
---
|
||||
|
||||
## 1. 开发目标
|
||||
|
||||
本项目团队本周期只负责 sgClaw Rust 侧能力,不负责 Chromium 内部实现。
|
||||
|
||||
本周期结束时,Rust 侧必须具备以下能力:
|
||||
|
||||
1. 可作为浏览器子进程启动。
|
||||
2. 通过 `stdin/stdout` 执行双向 `JSON Line` 通信。
|
||||
3. 完成 `init -> init_ack` 握手。
|
||||
4. 提供 `BrowserPipeTool`,可发送 `click/type/navigate/getText`。
|
||||
5. 能等待并解析浏览器侧 `response`。
|
||||
6. 能执行本地 `MAC Policy` 初步校验。
|
||||
|
||||
本周期不做:
|
||||
|
||||
1. 不切回 HTTP/TCP 演示通道。
|
||||
2. 不依赖浏览器团队未完成的 UI。
|
||||
3. 不把 pipe 协议和业务 skill 混在一起推进。
|
||||
4. 不要求本周期完成完整 15 action。
|
||||
|
||||
---
|
||||
|
||||
## 2. Rust 团队负责的交付物
|
||||
|
||||
本周期交付以下文件或等价模块:
|
||||
|
||||
1. `src/main.rs`
|
||||
2. `src/pipe/protocol.rs`
|
||||
3. `src/pipe/handshake.rs`
|
||||
4. `src/pipe/browser_tool.rs`
|
||||
5. `src/pipe/mod.rs`
|
||||
6. `src/security/mac_policy.rs`
|
||||
7. `src/security/hmac.rs`
|
||||
8. `tests/pipe_protocol_test.rs`
|
||||
9. `tests/pipe_handshake_test.rs`
|
||||
10. `tests/browser_tool_test.rs`
|
||||
11. `tests/integration/handshake_flow_test.rs`
|
||||
|
||||
建议本周期目录保持如下:
|
||||
|
||||
```text
|
||||
src/
|
||||
main.rs
|
||||
lib.rs
|
||||
pipe/
|
||||
mod.rs
|
||||
protocol.rs
|
||||
handshake.rs
|
||||
browser_tool.rs
|
||||
security/
|
||||
mod.rs
|
||||
hmac.rs
|
||||
mac_policy.rs
|
||||
tests/
|
||||
pipe_protocol_test.rs
|
||||
pipe_handshake_test.rs
|
||||
browser_tool_test.rs
|
||||
integration/
|
||||
handshake_flow_test.rs
|
||||
resources/
|
||||
rules.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 冻结边界
|
||||
|
||||
### 3.1 本周期团队边界
|
||||
|
||||
P1a 负责:
|
||||
|
||||
1. Pipe 协议结构体。
|
||||
2. 握手。
|
||||
3. `BrowserPipeTool`。
|
||||
4. HMAC 计算。
|
||||
5. response 关联和超时处理。
|
||||
|
||||
P1b 负责:
|
||||
|
||||
1. 将 `BrowserPipeTool` 作为工具注册到后续 `AgentRuntime`。
|
||||
2. 但本周期联调不阻塞于完整 ReAct Loop。
|
||||
|
||||
本周期联调最小成功标准是:
|
||||
|
||||
1. Rust 能发命令。
|
||||
2. 浏览器能执行并返回。
|
||||
3. Rust 能按 `seq` 收到正确 response。
|
||||
|
||||
### 3.2 进程与日志约束
|
||||
|
||||
1. `stdin` 只读协议消息。
|
||||
2. `stdout` 只写协议消息。
|
||||
3. 所有日志必须写到 `stderr`。
|
||||
4. 遇到协议错误时返回结构化错误或退出,不允许把调试日志写进 `stdout`。
|
||||
|
||||
---
|
||||
|
||||
## 4. 冻结协议
|
||||
|
||||
### 4.1 Browser -> sgClaw
|
||||
|
||||
`init`
|
||||
|
||||
```json
|
||||
{"type":"init","version":"1.0","hmac_seed":"0123456789abcdef","capabilities":["browser_action"]}
|
||||
```
|
||||
|
||||
`response`
|
||||
|
||||
```json
|
||||
{"type":"response","seq":1,"success":true,"data":{},"aom_snapshot":[],"timing":{"queue_ms":1,"exec_ms":20}}
|
||||
```
|
||||
|
||||
### 4.2 sgClaw -> Browser
|
||||
|
||||
`init_ack`
|
||||
|
||||
```json
|
||||
{"type":"init_ack","version":"1.0","agent_id":"uuid-v4","supported_actions":["click","type","navigate","getText","getHtml","waitForSelector","pageScreenshot","select","scrollTo","getAomSnapshot","storageSet","storageGet","zombieSpawn","zombieKill"]}
|
||||
```
|
||||
|
||||
`command`
|
||||
|
||||
```json
|
||||
{
|
||||
"type":"command",
|
||||
"seq":1,
|
||||
"action":"click",
|
||||
"params":{"selector":"#submit"},
|
||||
"security":{
|
||||
"expected_domain":"oa.example.com",
|
||||
"hmac":"<hex>"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 必须满足的协议规则
|
||||
|
||||
1. 编码为 UTF-8。
|
||||
2. 每行一个完整 JSON。
|
||||
3. 单消息最大 `1 MB`。
|
||||
4. `seq` 从 `1` 开始递增。
|
||||
5. 每个 `command.seq` 对应唯一 `response.seq`。
|
||||
6. `version` 固定为 `1.0`。
|
||||
|
||||
---
|
||||
|
||||
## 5. Rust 侧实现要求
|
||||
|
||||
### 5.1 main.rs
|
||||
|
||||
本周期 `main` 的目标很简单:
|
||||
|
||||
1. 初始化日志到 `stderr`。
|
||||
2. 用 `stdin/stdout` 执行握手。
|
||||
3. 初始化 `BrowserPipeTool` 所需对象。
|
||||
4. 保持进程存活,等待命令结果和后续任务。
|
||||
|
||||
如果当前代码还保留演示版 HTTP 入口,本周期必须恢复到 pipe 入口优先。
|
||||
|
||||
### 5.2 handshake.rs
|
||||
|
||||
必须实现:
|
||||
|
||||
1. 从 `stdin` 读取第一条 `init`。
|
||||
2. 校验 `version`。
|
||||
3. 从 `hmac_seed` 派生会话级 HMAC key。
|
||||
4. 生成 `agent_id`。
|
||||
5. 向 `stdout` 回写 `init_ack`。
|
||||
|
||||
失败条件:
|
||||
|
||||
1. 第一条消息不是 `init`。
|
||||
2. `version` 不匹配。
|
||||
3. `hmac_seed` 非法。
|
||||
|
||||
### 5.3 protocol.rs
|
||||
|
||||
必须定义:
|
||||
|
||||
1. `BrowserMessage`
|
||||
2. `AgentMessage`
|
||||
3. `SecurityFields`
|
||||
4. `Timing`
|
||||
5. `Action`
|
||||
|
||||
本周期最小 `Action` 必须覆盖:
|
||||
|
||||
1. `click`
|
||||
2. `type`
|
||||
3. `navigate`
|
||||
4. `getText`
|
||||
|
||||
建议保留剩余 action 枚举,为后续扩展留口。
|
||||
|
||||
### 5.4 browser_tool.rs
|
||||
|
||||
必须实现:
|
||||
|
||||
1. 输入参数反序列化为 `Action`。
|
||||
2. 调用本地 `MAC Policy` 做前置校验。
|
||||
3. 分配递增 `seq`。
|
||||
4. 计算 `security.hmac`。
|
||||
5. 向 `stdout` 写出 `command`。
|
||||
6. 等待同 `seq` 的 `response`。
|
||||
7. 超时返回错误。
|
||||
|
||||
建议超时:
|
||||
|
||||
1. 握手超时:`5s`
|
||||
2. 单 action 响应超时:`30s`
|
||||
|
||||
### 5.5 mac_policy.rs
|
||||
|
||||
本周期最小校验:
|
||||
|
||||
1. action 白名单。
|
||||
2. 域名白名单。
|
||||
3. storage key 前缀约束可后置。
|
||||
4. 熔断器可后置,但接口要预留。
|
||||
|
||||
`rules.json` 建议格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1.0",
|
||||
"domains": {
|
||||
"allowed": ["oa.example.com", "erp.example.com", "hr.example.com"]
|
||||
},
|
||||
"pipe_actions": {
|
||||
"allowed": ["click", "type", "navigate", "getText"],
|
||||
"blocked": ["eval", "executeJsInPage"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 本周期开发顺序
|
||||
|
||||
### Day 1-2
|
||||
|
||||
1. 固定协议结构体。
|
||||
2. 写 `pipe_protocol_test`。
|
||||
3. 写 `pipe_handshake_test`。
|
||||
4. 恢复 `stdin/stdout` 入口。
|
||||
|
||||
验收:
|
||||
|
||||
1. 能独立运行进程并手动喂一条 `init`。
|
||||
2. 能正确输出 `init_ack`。
|
||||
|
||||
### Day 3-4
|
||||
|
||||
1. 完成 `BrowserPipeTool`。
|
||||
2. 完成 HMAC 计算。
|
||||
3. 完成基于 `seq` 的 response 匹配。
|
||||
4. 与本地 mock 浏览器进程联通。
|
||||
|
||||
验收:
|
||||
|
||||
1. Rust 能发出 `click/type/navigate/getText` 四类命令。
|
||||
2. mock response 能被正确接收。
|
||||
|
||||
### Day 5-6
|
||||
|
||||
1. 接入最小 `MAC Policy`。
|
||||
2. 完成 integration test。
|
||||
3. 准备联调脚本和示例 JSON。
|
||||
|
||||
验收:
|
||||
|
||||
1. 非白名单 action 在 Rust 侧被前置拒绝。
|
||||
2. 域名不合法时直接失败。
|
||||
|
||||
### Day 7
|
||||
|
||||
1. 收口测试。
|
||||
2. 输出联调说明。
|
||||
3. 与浏览器团队联调。
|
||||
|
||||
---
|
||||
|
||||
## 7. Rust 团队自测清单
|
||||
|
||||
- [ ] `protocol.rs` 序列化/反序列化测试通过。
|
||||
- [ ] `init -> init_ack` 测试通过。
|
||||
- [ ] `version` 不匹配时握手失败。
|
||||
- [ ] `hmac_seed` 非法时握手失败。
|
||||
- [ ] `click/type/navigate/getText` 命令都能正确编码。
|
||||
- [ ] `response.seq` 不匹配时不会误关联。
|
||||
- [ ] 单 action 超时能返回错误。
|
||||
- [ ] 非白名单 action 被 `MAC Policy` 拒绝。
|
||||
- [ ] 日志只出现在 `stderr`。
|
||||
|
||||
---
|
||||
|
||||
## 8. 联调输入输出样例
|
||||
|
||||
### 8.1 手动运行握手
|
||||
|
||||
输入:
|
||||
|
||||
```json
|
||||
{"type":"init","version":"1.0","hmac_seed":"00112233445566778899aabbccddeeff","capabilities":["browser_action"]}
|
||||
```
|
||||
|
||||
期望输出:
|
||||
|
||||
```json
|
||||
{"type":"init_ack","version":"1.0","agent_id":"00000000-0000-0000-0000-000000000000","supported_actions":["click","type","navigate","getText","getHtml","waitForSelector","pageScreenshot","select","scrollTo","getAomSnapshot","storageSet","storageGet","zombieSpawn","zombieKill"]}
|
||||
```
|
||||
|
||||
### 8.2 最小命令样例
|
||||
|
||||
输出给浏览器:
|
||||
|
||||
```json
|
||||
{"type":"command","seq":1,"action":"navigate","params":{"url":"https://oa.example.com/login"},"security":{"expected_domain":"oa.example.com","hmac":"<hex>"}}
|
||||
```
|
||||
|
||||
浏览器回:
|
||||
|
||||
```json
|
||||
{"type":"response","seq":1,"success":true,"data":{},"aom_snapshot":[],"timing":{"queue_ms":1,"exec_ms":50}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 联调前必须提供的东西
|
||||
|
||||
本项目团队在联调前必须准备:
|
||||
|
||||
1. 可运行的 `sgclaw` 可执行文件或 debug 启动方式。
|
||||
2. 协议样例文件。
|
||||
3. `rules.json` 默认测试配置。
|
||||
4. 四个最小 action 的参数样例。
|
||||
5. 一份错误码表。
|
||||
6. 一份 `stderr` 日志关键字段说明。
|
||||
|
||||
---
|
||||
|
||||
## 10. 周期结束验收标准
|
||||
|
||||
以下全部满足,Rust 团队本周期完成:
|
||||
|
||||
1. `sgclaw` 可以被浏览器作为子进程启动。
|
||||
2. `init -> init_ack` 成功率 100%。
|
||||
3. 能稳定发送 `click/type/navigate/getText` 四类命令。
|
||||
4. 能稳定按 `seq` 收到并解析 response。
|
||||
5. Rust 侧前置 `MAC Policy` 生效。
|
||||
6. 与浏览器团队在同一测试页面上联调成功。
|
||||
|
||||
---
|
||||
|
||||
## 11. 联调日执行顺序
|
||||
|
||||
联调当天只按下面顺序走,避免双方并发改协议:
|
||||
|
||||
1. 先验证 `init -> init_ack`。
|
||||
2. 再验证 `navigate`。
|
||||
3. 再验证 `type`。
|
||||
4. 再验证 `click`。
|
||||
5. 最后验证 `getText`。
|
||||
6. 再补失败场景:域名拒绝、非法 action、超时。
|
||||
|
||||
任何协议字段问题,一律以 `protocol.rs` 和本文件为准,不在联调现场临时改口。
|
||||
|
||||
---
|
||||
|
||||
## 12. 对浏览器团队的依赖
|
||||
|
||||
Rust 团队本周期只依赖浏览器团队提供以下冻结输入:
|
||||
|
||||
1. 浏览器能启动子进程。
|
||||
2. 浏览器能收发 JSON Line。
|
||||
3. 浏览器支持 4 个最小 action。
|
||||
4. 浏览器返回结构化 `response`。
|
||||
|
||||
浏览器内部如何落到 `CommandRouter`,不属于 Rust 团队阻塞项。
|
||||
|
||||
546
docs/archive/项目管理与排期/协作时间表.md
Normal file
546
docs/archive/项目管理与排期/协作时间表.md
Normal file
@@ -0,0 +1,546 @@
|
||||
# sgClaw 项目协作时间表
|
||||
|
||||
> **💡 提示**:本文档包含完整的甘特图、依赖关系图和详细时间表。建议使用支持 Mermaid 的 Markdown 查看器(如 VS Code、Typora、GitHub)查看。
|
||||
|
||||
## 快速导航
|
||||
|
||||
- [📊 甘特图](#甘特图)
|
||||
- [🔗 依赖关系图](#依赖关系图)
|
||||
- [📅 每日详细里程碑](#二每日详细里程碑按人员)
|
||||
- [🔌 关键接口对接清单](#三关键接口对接清单)
|
||||
- [📢 每日站会议程](#四每日站会议程)
|
||||
- [⚠️ 风险预案](#五风险预案)
|
||||
- [✅ 交付物 Checklist](#六交付物-checklist)
|
||||
|
||||
---
|
||||
|
||||
## 📊 甘特图
|
||||
|
||||

|
||||
|
||||
## 可视化图表
|
||||
|
||||
### 关键路径
|
||||
|
||||
```
|
||||
Day 1-2 ━━━━━━━━━━━━━━━━━━━━━━ 环境搭建(并行)
|
||||
┃
|
||||
Day 3 ━━━━━┻━━━━━━━━━━━━━━━━━ P1a Pipe 协议开发 ⭐
|
||||
┃
|
||||
Day 4-5 ━━━┻━━━━━━━━━━━━━━━━━ P1a + P2 联调 Pipe ⭐⭐⭐
|
||||
┃ (关键路径,阻塞所有人)
|
||||
┃
|
||||
▼
|
||||
【W1 里程碑】链路打通
|
||||
┃
|
||||
Day 6 ━━━━━┻━━━━━━━━━━━━━━━━━ 三组并行集成:
|
||||
├─ P1a + P1b (Runtime)
|
||||
├─ P1b + P3 (Skill)
|
||||
└─ P2 + P4 (UI)
|
||||
┃
|
||||
Day 7 ━━━━━┫ 安全策略 + AI 翻译
|
||||
┃
|
||||
Day 8-9 ━━━┻━━━━━━━━━━━━━━━━━ 全员 E2E 测试
|
||||
┃
|
||||
Day 10 ━━━━▼━━━━━━━━━━━━━━━━━ P4 打包发布
|
||||
【W2 里程碑】正式发布
|
||||
```
|
||||
|
||||
### 并行度分析
|
||||
|
||||
```
|
||||
Day 1-2: ████████████████████ 5 人并行(环境搭建)
|
||||
Day 3: ████ P1a 单人关键路径
|
||||
Day 4-5: ████████ P1a+P2 双人关键路径 ⭐
|
||||
Day 6-7: ████████████████ 4 人并行(P3 独立)
|
||||
Day 8-9: ████████████████████ 5 人并行(E2E 测试)
|
||||
Day 10: ████ P4 单人发布
|
||||
|
||||
关键瓶颈:Day 4-5(P1a + P2 联调)
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🔗 依赖关系图
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Day 1-2: 环境搭建] --> B[Day 3: P1a Pipe 协议]
|
||||
B --> C[Day 4-5: P1a+P2 联调 Pipe ⭐]
|
||||
C --> D[Day 5 晚: W1 里程碑]
|
||||
|
||||
D --> E1[Day 6: P1a+P1b 集成]
|
||||
D --> E2[Day 6: P1b+P3 Skill]
|
||||
D --> E3[Day 6: P2+P4 UI]
|
||||
|
||||
E1 --> F[Day 7: 安全+AI]
|
||||
E2 --> F
|
||||
E3 --> F
|
||||
|
||||
F --> G[Day 8-9: E2E 测试]
|
||||
G --> H[Day 10: P4 打包发布]
|
||||
|
||||
style C fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
style D fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
style H fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 一、关键依赖关系图
|
||||
|
||||
```
|
||||
Day 1-2: 环境搭建(所有人独立)
|
||||
↓
|
||||
Day 3-5: 【关键路径】P1a + P2 联调打通 Pipe
|
||||
↓ ↓
|
||||
Day 6-7: P1a+P1b 集成 P2+P4 UI 对接
|
||||
↓ ↓
|
||||
P1b+P3 Skill 加载测试
|
||||
↓
|
||||
Day 8-9: 全员 E2E 测试
|
||||
↓
|
||||
Day 10: P4 发布打包
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、每日详细里程碑(按人员)
|
||||
|
||||
### Day 1 - 环境搭建日(并行,无依赖)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a(赵义仑)** | 搭建 Rust 环境,创建项目骨架 | `sgClaw/src/main.rs` + Cargo.toml | `cargo build` 成功 |
|
||||
| **P1b** | 同 P1a,克隆仓库 | 环境就绪 | `cargo test` 通过 |
|
||||
| **P2** | 搭建 Chromium 编译环境 | depot_tools + gn + ninja | 能编译出 Chrome |
|
||||
| **P3** | 调研 agent-vue 现有场景 | 场景清单 Excel(400+ 条) | 分类完成:表单/审批/采集/同步/巡检 |
|
||||
| **P4** | 搭建 Vue 开发环境 | npm install 完成 | `npm run dev` 启动 |
|
||||
|
||||
**晚上站会**:同步进度,确认明天 P1a + P2 联调计划
|
||||
|
||||
---
|
||||
|
||||
### Day 2 - 基础框架日(并行,开始有少量依赖)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 实现 Pipe Protocol 基础结构 | `pipe/protocol.rs`, `pipe/reader.rs`, `pipe/writer.rs` | 单元测试:能序列化/反序列化 JSON Line |
|
||||
| **P1b** | 设计 Skill 元数据格式 | `skill/metadata.rs`, `schema/skill-metadata.json` | JSON Schema 验证通过 |
|
||||
| **P2** | 实现 SgClawProcessHost 基础框架 | `sgclaw_process_host.h`, `.cc` | 能启动 dummy 进程(`echo "hello"`) |
|
||||
| **P3** | 精选 10 个代表性场景 | 10 个场景的业务流程文档 | 覆盖 5 种模式(表单/审批/采集/同步/巡检) |
|
||||
| **P4** | 设计 Side Panel UI 原型 | Figma/手绘原型 | 产品经理审核通过 |
|
||||
|
||||
**晚上站会**:P1a 和 P2 确认明天联调细节(JSON 格式、错误码)
|
||||
|
||||
---
|
||||
|
||||
### Day 3 - 联调开始日(P1a + P2 关键路径)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 实现 STDIN 读取、STDOUT 写入 | Pipe 双向通信代码 | 能收发 JSON 消息 | **→ P2** |
|
||||
| **P1b** | 开始 SkillLoader 开发 | `skill/loader.rs` 初版 | 能扫描目录、读取 .js 文件 | - |
|
||||
| **P2** ⭐ | 实现 PipeListener 异步读取 | `pipe_listener.cc` | 能从 STDOUT 读取 JSON Line | **→ P1a** |
|
||||
| **P3** | 手工编写前 3 个黄金样本 | 3 个 Skill.js 文件 | 代码能手动执行(mock browserAction) | - |
|
||||
| **P4** | 开发 Side Panel UI 框架 | `AgentControlPanel.vue` 初版 | 能渲染基本界面 | - |
|
||||
|
||||
**下午联调**(P1a + P2):
|
||||
1. P1a 启动 Rust 进程,监听 STDIN
|
||||
2. P2 用 C++ 创建子进程,传递 fd
|
||||
3. 互相发送 JSON 消息:`{"action":"ping"}` ↔ `{"status":"pong"}`
|
||||
|
||||
**验收标准**:双向通信成功,能在 Chrome 控制台看到 Rust 日志
|
||||
|
||||
---
|
||||
|
||||
### Day 4 - 核心功能日(P1a + P2 继续打通)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 实现 BrowserPipeTool(3 个 Action) | `tool/browser_pipe.rs` | 支持 click / type / navigate | **→ P2** |
|
||||
| **P1b** | SkillLoader 签名验证 | `skill/signature.rs` | Ed25519 验证通过/失败 | - |
|
||||
| **P2** ⭐ | CommandRouter 对接 | `sgclaw_process_host.cc` 集成 CommandRouter | 能调用现有 70+ 命令 | **→ P1a** |
|
||||
| **P3** | 手工编写剩余 7 个黄金样本 | 10 个 Skill.js 全部完成 | 每个都有详细注释 | - |
|
||||
| **P4** | 开发 Skill 管理后台 | `SkillManager.vue` | 能列表显示 Skill | **→ P2**(IPC 接口确认)|
|
||||
|
||||
**下午联调**(P1a + P2):
|
||||
1. P1a 发送 `{"action":"click", "params":{"selector":"#btn"}}`
|
||||
2. P2 接收后调用 CommandRouter → CdpBridge → Chrome DevTools Protocol
|
||||
3. 浏览器真实执行点击
|
||||
|
||||
**验收标准**:能用 Rust 控制浏览器点击按钮
|
||||
|
||||
---
|
||||
|
||||
### Day 5 - W1 里程碑(Pipe 全链路打通)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 完善 BrowserPipeTool(15 个 Action) | 完整工具 | 所有 Action 测试通过 | **→ P2** |
|
||||
| **P1b** | Memory 模块开发 | `memory/ring_buffer.rs`, `memory/sqlite_store.rs` | Ring Buffer 存取、SQLite 初始化 | - |
|
||||
| **P2** ⭐ | MAC 白名单检查 | `mac_whitelist_check.cc`, `rules.json` | 白名单校验生效 | **→ P1a** |
|
||||
| **P3** | 设计 System Prompt | `prompts/translation-system.txt` | 在 10 个样本上测试准确率 | - |
|
||||
| **P4** | UI 集成测试 | Vue ↔ C++ IPC 调通 | 能从 UI 启动/停止 sgClaw | **→ P2** |
|
||||
|
||||
**下午全体演示**(W1 里程碑验收):
|
||||
1. P4 打开 Side Panel,输入"点击登录按钮"
|
||||
2. Vue → C++ → Rust → 大模型(mock)→ Rust → C++ → 浏览器
|
||||
3. 浏览器真实执行操作
|
||||
|
||||
**验收标准**:**LLM → Pipe → Browser 链路全通**
|
||||
|
||||
---
|
||||
|
||||
### Day 6 - 并行集成日(三组同时进行)
|
||||
|
||||
#### 组 1:P1a + P1b(集成 AgentRuntime)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 提供 BrowserPipeTool 给 P1b | 完整 Tool trait 实现 | P1b 能注册工具 |
|
||||
| **P1b** | AgentRuntime 集成 | `agent/runtime.rs` | ZeroClaw ReAct Loop 运行 |
|
||||
|
||||
**下午联调**:
|
||||
- P1b 创建 `AgentRuntime`,注册 `BrowserPipeTool`
|
||||
- 模拟 LLM 输出:`{"tool":"browser","action":"click","params":{...}}`
|
||||
- 验证工具调用成功
|
||||
|
||||
#### 组 2:P1b + P3(Skill 加载测试)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1b** | SkillLoader 完善 | JS 沙箱执行 | 能执行 Skill.js |
|
||||
| **P3** | 10 个 Skill 加签名 | 签名完成的 Skill | 验证通过 |
|
||||
|
||||
**下午联调**:
|
||||
- P1b 扫描 `skills/` 目录
|
||||
- 加载 P3 的 10 个 Skill
|
||||
- 执行一个 Skill,调用 `browserAction`
|
||||
|
||||
#### 组 3:P2 + P4(UI 对接)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P2** | 暴露 IPC 接口给 P4 | `window.superrpa.sgclaw.*` | P4 能调用 |
|
||||
| **P4** | 完善 UI + Skill 后台 | 两个 Vue 组件 | 能管理 Skill 启用/禁用 |
|
||||
|
||||
**下午联调**:
|
||||
- P4 调用 `window.superrpa.sgclaw.listSkills()`
|
||||
- P2 返回 Skill 列表
|
||||
- P4 在界面上显示
|
||||
|
||||
---
|
||||
|
||||
### Day 7 - 安全与优化日
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** | MAC Policy 集成到 BrowserPipeTool | 安全策略生效 | 非白名单域名被拦截 | **→ P2**(确认拦截反馈)|
|
||||
| **P1b** | Critic 评估器 | `agent/critic.rs` | 能判断成功/失败/重试 | - |
|
||||
| **P2** | Human-in-the-loop 确认弹窗 | C++ 对话框 | 敏感操作弹窗确认 | **→ P1a**(定义敏感操作列表)|
|
||||
| **P3** | 批量 AI 翻译(第 1 批) | 100 个 Skill 候选 | 翻译准确率 >90% | - |
|
||||
| **P4** | 测试框架搭建 | Jest + Puppeteer 配置 | 能运行单元测试 | - |
|
||||
|
||||
**下午安全测试**:
|
||||
- 尝试访问非白名单域名(应被拦截)
|
||||
- 尝试执行敏感操作(应弹窗确认)
|
||||
- 连续失败 10 次触发熔断
|
||||
|
||||
---
|
||||
|
||||
### Day 8 - E2E 测试日(全员参与)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 修复 Pipe 通信 bug | 稳定版本 | 无消息丢失 |
|
||||
| **P1b** | 修复 Memory 存取 bug | 稳定版本 | SQLite 读写正常 |
|
||||
| **P2** | 修复浏览器端 bug | 稳定版本 | 进程不崩溃 |
|
||||
| **P3** | 批量 AI 翻译(第 2-4 批) | 400 个 Skill 全部完成 | 自动检查通过率 >85% |
|
||||
| **P4** | E2E 测试脚本 | 6 个业务场景测试 | 全部通过 |
|
||||
|
||||
**E2E 测试场景**:
|
||||
1. 财务合规:导出 ERP 月度报表
|
||||
2. OA 审批:批量审批 10 个单据
|
||||
3. 风险监测:巡检风险指标
|
||||
4. 人资社保:办理社保增减员
|
||||
5. 营销数据:跨平台采集数据
|
||||
6. 跨系统同步:ERP → 财务数据同步
|
||||
|
||||
**验收标准**:每个场景端到端运行成功,无崩溃
|
||||
|
||||
---
|
||||
|
||||
### Day 9 - 稳定性测试日
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 性能优化 | Pipe 通信延迟 <10ms | 性能达标 |
|
||||
| **P1b** | Memory 压力测试 | L2 存 1000 条记录 | 无内存泄漏 |
|
||||
| **P2** | 长时间运行测试 | 24 小时稳定性 | 进程不崩溃 |
|
||||
| **P3** | Skill 质量抽检 | 抽检 20 个 Skill | 人工验证通过 |
|
||||
| **P4** | 集成测试 + 打包预演 | 测试报告 | 覆盖率 >70% |
|
||||
|
||||
**压力测试**:
|
||||
- 连续执行 100 次操作
|
||||
- 8GB 内存限制下运行
|
||||
- 监控内存占用(sgClaw 应 <10MB)
|
||||
|
||||
---
|
||||
|
||||
### Day 10 - 发布日(W2 里程碑)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 代码审查 + 交付 | 完整 Rust 代码 | P2 审查通过 |
|
||||
| **P1b** | 代码审查 + 交付 | 完整 Rust 代码 | P1a 审查通过 |
|
||||
| **P2** | 代码审查 + 交付 | 完整 C++ 代码 | P1a 审查通过 |
|
||||
| **P3** | Skill 仓库交付 | 400+ Skill + 文档 | P1b 审查通过 |
|
||||
| **P4** | **打包发布** | `.deb` + `.exe` 安装包 | 两平台安装成功 |
|
||||
|
||||
**发布物清单**:
|
||||
- `sgclaw-v1.0.0-kylin-v10-amd64.deb` (~456MB)
|
||||
- `sgclaw-v1.0.0-windows-x64.exe` (~460MB)
|
||||
- `CHANGELOG.md`
|
||||
- `INSTALL.md`
|
||||
- 演示视频(6 个场景)
|
||||
|
||||
---
|
||||
|
||||
## 三、关键接口对接清单
|
||||
|
||||
### 1. P1a ↔ P2 接口(最重要)
|
||||
|
||||
**协议**:JSON Line over STDIO Pipe
|
||||
|
||||
**Request 示例**(C++ → Rust):
|
||||
```json
|
||||
{
|
||||
"sequence_id": 1,
|
||||
"action": "click",
|
||||
"params": {
|
||||
"selector": "#submit-button",
|
||||
"button": "left"
|
||||
},
|
||||
"timestamp": 1709499600000
|
||||
}
|
||||
```
|
||||
|
||||
**Response 示例**(Rust → C++):
|
||||
```json
|
||||
{
|
||||
"sequence_id": 1,
|
||||
"status": "success",
|
||||
"result": {
|
||||
"clicked": true
|
||||
},
|
||||
"error": null,
|
||||
"timestamp": 1709499601000
|
||||
}
|
||||
```
|
||||
|
||||
**对接时间**:Day 3-5(关键路径)
|
||||
|
||||
**验收标准**:
|
||||
- Day 3:能互相发送 ping/pong
|
||||
- Day 4:能调用 3 个 Action(click/type/navigate)
|
||||
- Day 5:能调用全部 15 个 Action
|
||||
|
||||
---
|
||||
|
||||
### 2. P1a ↔ P1b 接口
|
||||
|
||||
**模块依赖**:
|
||||
- P1b 的 `AgentRuntime` 依赖 P1a 的 `BrowserPipeTool`
|
||||
|
||||
**接口代码**:
|
||||
```rust
|
||||
// P1a 提供
|
||||
pub struct BrowserPipeTool {
|
||||
pipe_writer: PipeWriter,
|
||||
mac_policy: MacPolicy,
|
||||
sequence_id: AtomicU64,
|
||||
}
|
||||
|
||||
impl Tool for BrowserPipeTool {
|
||||
async fn execute(&self, input: &str) -> Result<String>;
|
||||
}
|
||||
|
||||
// P1b 使用
|
||||
let browser_tool = BrowserPipeTool::new(...);
|
||||
agent_runtime.register_tool(Box::new(browser_tool));
|
||||
```
|
||||
|
||||
**对接时间**:Day 6
|
||||
|
||||
**验收标准**:
|
||||
- P1b 能注册 P1a 的工具
|
||||
- Agent 能调用浏览器操作
|
||||
|
||||
---
|
||||
|
||||
### 3. P1b ↔ P3 接口
|
||||
|
||||
**Skill 元数据规范**:
|
||||
```javascript
|
||||
/**
|
||||
* @skill erp-monthly-report
|
||||
* @version 1.0.0
|
||||
* @domains erp.example.com
|
||||
* @params { month: string, format: enum }
|
||||
* @signature <ed25519_base64>
|
||||
*/
|
||||
async function execute(params, browserAction) {
|
||||
await browserAction('navigate', {...});
|
||||
await browserAction('click', {...});
|
||||
return { success: true };
|
||||
}
|
||||
```
|
||||
|
||||
**BrowserAction API**:
|
||||
```javascript
|
||||
await browserAction(action, params)
|
||||
// 返回 Promise<result>
|
||||
```
|
||||
|
||||
**对接时间**:Day 6-7
|
||||
|
||||
**验收标准**:
|
||||
- P1b 能扫描并加载 P3 的 Skill
|
||||
- 签名验证通过
|
||||
- Skill 能正常执行
|
||||
|
||||
---
|
||||
|
||||
### 4. P2 ↔ P4 接口
|
||||
|
||||
**FunctionsUI IPC**(Vue ↔ C++):
|
||||
```javascript
|
||||
// P4 调用(Vue)
|
||||
window.superrpa.sgclaw.start()
|
||||
window.superrpa.sgclaw.stop()
|
||||
window.superrpa.sgclaw.sendCommand(text)
|
||||
window.superrpa.sgclaw.listSkills()
|
||||
window.superrpa.sgclaw.toggleSkill(skillId, enabled)
|
||||
|
||||
// P2 回调(C++ → Vue)
|
||||
window.superrpa.sgclaw.onStatusChange((status) => { ... })
|
||||
window.superrpa.sgclaw.onLog((log) => { ... })
|
||||
```
|
||||
|
||||
**对接时间**:Day 4-6
|
||||
|
||||
**验收标准**:
|
||||
- P4 能启动/停止 sgClaw 进程
|
||||
- P4 能接收日志更新
|
||||
- P4 能管理 Skill 列表
|
||||
|
||||
---
|
||||
|
||||
## 四、每日站会议程
|
||||
|
||||
**时间**:每天 10:00,15 分钟
|
||||
|
||||
**Day 1-2 站会重点**:环境搭建进度
|
||||
|
||||
**Day 3-5 站会重点**(关键路径):
|
||||
- P1a + P2 联调进度
|
||||
- 遇到的技术问题
|
||||
- 是否需要其他人支援
|
||||
|
||||
**Day 6-7 站会重点**:
|
||||
- 三组并行集成进度
|
||||
- 接口冲突解决
|
||||
- 安全测试结果
|
||||
|
||||
**Day 8-9 站会重点**:
|
||||
- E2E 测试通过率
|
||||
- Bug 修复优先级
|
||||
- 性能优化方向
|
||||
|
||||
**Day 10 站会**:
|
||||
- 发布 Checklist 确认
|
||||
- 演示视频录制分工
|
||||
|
||||
---
|
||||
|
||||
## 五、风险预案
|
||||
|
||||
### 风险 1:P1a + P2 联调卡住(Day 3-5)
|
||||
|
||||
**影响**:阻塞所有后续工作(极高风险)
|
||||
|
||||
**预案**:
|
||||
- Day 3 晚上如果还没通:P1b 暂停自己的工作,全力支援
|
||||
- Day 4 晚上如果还没通:启动降级方案(HTTP 替代 Pipe)
|
||||
|
||||
---
|
||||
|
||||
### 风险 2:P3 AI 翻译质量不达标(Day 7-9)
|
||||
|
||||
**影响**:Skill 不可用(中风险)
|
||||
|
||||
**预案**:
|
||||
- 准确率 <80%:人工介入修正 Prompt
|
||||
- 准确率 <60%:放弃 AI 翻译,只交付 10 个黄金样本
|
||||
|
||||
---
|
||||
|
||||
### 风险 3:银河麒麟适配问题(Day 9-10)
|
||||
|
||||
**影响**:无法打包 .deb(中风险)
|
||||
|
||||
**预案**:
|
||||
- P4 提前在 Day 7 开始真机测试
|
||||
- 如果 Day 9 还有问题,先发布 Windows 版本
|
||||
|
||||
---
|
||||
|
||||
## 六、交付物 Checklist
|
||||
|
||||
### P1a 交付物(Day 10)
|
||||
- [ ] `src/pipe/` 完整代码
|
||||
- [ ] `src/tool/browser_pipe.rs`
|
||||
- [ ] `src/security/mac_policy.rs`
|
||||
- [ ] 单元测试(覆盖率 >70%)
|
||||
- [ ] API 文档(Rust Doc)
|
||||
|
||||
### P1b 交付物(Day 10)
|
||||
- [ ] `src/skill/` 完整代码
|
||||
- [ ] `src/memory/` 完整代码
|
||||
- [ ] `src/agent/` 完整代码
|
||||
- [ ] 单元测试(覆盖率 >70%)
|
||||
- [ ] Memory 压力测试报告
|
||||
|
||||
### P2 交付物(Day 10)
|
||||
- [ ] `sgclaw_process_host.*`
|
||||
- [ ] `pipe_listener.*`
|
||||
- [ ] `mac_whitelist_check.*`
|
||||
- [ ] `rules.json`
|
||||
- [ ] C++ 单元测试
|
||||
- [ ] 接口文档
|
||||
|
||||
### P3 交付物(Day 10)
|
||||
- [ ] 10-15 个黄金样本
|
||||
- [ ] 400+ AI 生成 Skill
|
||||
- [ ] `prompts/translation-system.txt`
|
||||
- [ ] `README.md`(Skill 开发指南)
|
||||
- [ ] 签名工具脚本
|
||||
|
||||
### P4 交付物(Day 10)
|
||||
- [ ] `AgentControlPanel.vue`
|
||||
- [ ] `SkillManager.vue`
|
||||
- [ ] E2E 测试脚本(6 个场景)
|
||||
- [ ] 测试报告(覆盖率 >70%)
|
||||
- [ ] `.deb` 安装包
|
||||
- [ ] `.exe` 安装包
|
||||
- [ ] `CHANGELOG.md`
|
||||
- [ ] `INSTALL.md`
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**最后更新**:2026-03-04
|
||||
**维护者**:项目经理
|
||||
622
docs/archive/项目管理与排期/协作时间表_printable.md
Normal file
622
docs/archive/项目管理与排期/协作时间表_printable.md
Normal file
@@ -0,0 +1,622 @@
|
||||
# sgClaw 项目协作时间表
|
||||
|
||||
> **💡 提示**:本文档包含完整的甘特图、依赖关系图和详细时间表。建议使用支持 Mermaid 的 Markdown 查看器(如 VS Code、Typora、GitHub)查看。
|
||||
|
||||
## 快速导航
|
||||
|
||||
- [📊 甘特图](#甘特图)
|
||||
- [🔗 依赖关系图](#依赖关系图)
|
||||
- [📅 每日详细里程碑](#二每日详细里程碑按人员)
|
||||
- [🔌 关键接口对接清单](#三关键接口对接清单)
|
||||
- [📢 每日站会议程](#四每日站会议程)
|
||||
- [⚠️ 风险预案](#五风险预案)
|
||||
- [✅ 交付物 Checklist](#六交付物-checklist)
|
||||
|
||||
---
|
||||
|
||||
## 📊 甘特图
|
||||
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>📋 点击查看 Mermaid 源码</summary>
|
||||
|
||||
```mermaid
|
||||
gantt
|
||||
title sgClaw 2周开发计划(关键路径:P1a+P2)
|
||||
dateFormat YYYY-MM-DD
|
||||
axisFormat Day %d
|
||||
|
||||
section 关键路径⭐
|
||||
P1a环境搭建 :p1a1, 2026-03-04, 2d
|
||||
P1a Pipe协议开发 :crit, p1a2, after p1a1, 1d
|
||||
P1a+P2联调Pipe通信 :crit, p1a3, after p1a2, 2d
|
||||
P1a完善15个Action :crit, p1a4, after p1a3, 1d
|
||||
W1里程碑演示 :milestone, m1, after p1a4, 0d
|
||||
P1a+P1b集成Runtime :p1a5, after p1a4, 1d
|
||||
P1a MAC安全策略 :p1a6, after p1a5, 1d
|
||||
P1a bug修复 :p1a7, after p1a6, 2d
|
||||
P1a代码审查交付 :milestone, m2, after p1a7, 1d
|
||||
|
||||
section P2浏览器对接
|
||||
P2环境搭建 :p2a, 2026-03-04, 2d
|
||||
P2 ProcessHost框架 :p2b, after p2a, 1d
|
||||
P2+P1a联调Pipe :crit, p2c, after p2b, 2d
|
||||
P2 CommandRouter对接 :p2d, after p2c, 1d
|
||||
P2 MAC白名单 :p2e, after p2d, 1d
|
||||
P2+P4 UI对接 :p2f, after p2e, 1d
|
||||
P2 bug修复 :p2g, after p2f, 2d
|
||||
P2交付 :milestone, after p2g, 1d
|
||||
|
||||
section P1b业务支持
|
||||
P1b环境搭建 :p1b1, 2026-03-04, 2d
|
||||
P1b SkillLoader开发 :p1b2, after p1b1, 3d
|
||||
P1b Memory开发 :p1b3, after p1b2, 2d
|
||||
P1b+P1a集成Runtime :p1b4, after p1b3, 1d
|
||||
P1b+P3 Skill测试 :p1b5, after p1b4, 1d
|
||||
P1b Critic评估器 :p1b6, after p1b5, 1d
|
||||
P1b bug修复 :p1b7, after p1b6, 1d
|
||||
P1b交付 :milestone, after p1b7, 1d
|
||||
|
||||
section P3业务技能
|
||||
P3场景调研 :p3a, 2026-03-04, 1d
|
||||
P3黄金样本制作 :p3b, after p3a, 3d
|
||||
P3提示词工程 :p3c, after p3b, 1d
|
||||
P3 AI批量翻译 :p3d, after p3c, 3d
|
||||
P3质量抽检 :p3e, after p3d, 2d
|
||||
P3交付Skill仓库 :milestone, after p3e, 0d
|
||||
|
||||
section P4前端发布
|
||||
P4环境搭建 :p4a, 2026-03-04, 2d
|
||||
P4 UI原型设计 :p4b, after p4a, 1d
|
||||
P4 Side Panel开发 :p4c, after p4b, 2d
|
||||
P4 Skill后台开发 :p4d, after p4c, 1d
|
||||
P4+P2 IPC对接 :p4e, after p4d, 1d
|
||||
P4测试框架搭建 :p4f, after p4e, 1d
|
||||
P4 E2E测试 :p4g, after p4f, 2d
|
||||
P4打包发布 :milestone, p4h, after p4g, 1d
|
||||
|
||||
section 全员里程碑
|
||||
环境搭建完成 :milestone, after p1a1 p2a p1b1 p3a p4a, 0d
|
||||
W1里程碑(链路打通) :milestone, m1_all, 2026-03-08, 0d
|
||||
E2E测试周 :active, e2e, 2026-03-11, 2d
|
||||
W2里程碑(正式发布) :milestone, m2_all, 2026-03-14, 0d
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
## 可视化图表
|
||||
|
||||
### 关键路径
|
||||
|
||||
```
|
||||
Day 1-2 ━━━━━━━━━━━━━━━━━━━━━━ 环境搭建(并行)
|
||||
┃
|
||||
Day 3 ━━━━━┻━━━━━━━━━━━━━━━━━ P1a Pipe 协议开发 ⭐
|
||||
┃
|
||||
Day 4-5 ━━━┻━━━━━━━━━━━━━━━━━ P1a + P2 联调 Pipe ⭐⭐⭐
|
||||
┃ (关键路径,阻塞所有人)
|
||||
┃
|
||||
▼
|
||||
【W1 里程碑】链路打通
|
||||
┃
|
||||
Day 6 ━━━━━┻━━━━━━━━━━━━━━━━━ 三组并行集成:
|
||||
├─ P1a + P1b (Runtime)
|
||||
├─ P1b + P3 (Skill)
|
||||
└─ P2 + P4 (UI)
|
||||
┃
|
||||
Day 7 ━━━━━┫ 安全策略 + AI 翻译
|
||||
┃
|
||||
Day 8-9 ━━━┻━━━━━━━━━━━━━━━━━ 全员 E2E 测试
|
||||
┃
|
||||
Day 10 ━━━━▼━━━━━━━━━━━━━━━━━ P4 打包发布
|
||||
【W2 里程碑】正式发布
|
||||
```
|
||||
|
||||
### 并行度分析
|
||||
|
||||
```
|
||||
Day 1-2: ████████████████████ 5 人并行(环境搭建)
|
||||
Day 3: ████ P1a 单人关键路径
|
||||
Day 4-5: ████████ P1a+P2 双人关键路径 ⭐
|
||||
Day 6-7: ████████████████ 4 人并行(P3 独立)
|
||||
Day 8-9: ████████████████████ 5 人并行(E2E 测试)
|
||||
Day 10: ████ P4 单人发布
|
||||
|
||||
关键瓶颈:Day 4-5(P1a + P2 联调)
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🔗 依赖关系图
|
||||
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>📋 点击查看 Mermaid 源码</summary>
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Day 1-2: 环境搭建] --> B[Day 3: P1a Pipe 协议]
|
||||
B --> C[Day 4-5: P1a+P2 联调 Pipe ⭐]
|
||||
C --> D[Day 5 晚: W1 里程碑]
|
||||
|
||||
D --> E1[Day 6: P1a+P1b 集成]
|
||||
D --> E2[Day 6: P1b+P3 Skill]
|
||||
D --> E3[Day 6: P2+P4 UI]
|
||||
|
||||
E1 --> F[Day 7: 安全+AI]
|
||||
E2 --> F
|
||||
E3 --> F
|
||||
|
||||
F --> G[Day 8-9: E2E 测试]
|
||||
G --> H[Day 10: P4 打包发布]
|
||||
|
||||
style C fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
style D fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
style H fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 一、关键依赖关系图
|
||||
|
||||
```
|
||||
Day 1-2: 环境搭建(所有人独立)
|
||||
↓
|
||||
Day 3-5: 【关键路径】P1a + P2 联调打通 Pipe
|
||||
↓ ↓
|
||||
Day 6-7: P1a+P1b 集成 P2+P4 UI 对接
|
||||
↓ ↓
|
||||
P1b+P3 Skill 加载测试
|
||||
↓
|
||||
Day 8-9: 全员 E2E 测试
|
||||
↓
|
||||
Day 10: P4 发布打包
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、每日详细里程碑(按人员)
|
||||
|
||||
### Day 1 - 环境搭建日(并行,无依赖)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a(赵义仑)** | 搭建 Rust 环境,创建项目骨架 | `sgClaw/src/main.rs` + Cargo.toml | `cargo build` 成功 |
|
||||
| **P1b** | 同 P1a,克隆仓库 | 环境就绪 | `cargo test` 通过 |
|
||||
| **P2** | 搭建 Chromium 编译环境 | depot_tools + gn + ninja | 能编译出 Chrome |
|
||||
| **P3** | 调研 agent-vue 现有场景 | 场景清单 Excel(400+ 条) | 分类完成:表单/审批/采集/同步/巡检 |
|
||||
| **P4** | 搭建 Vue 开发环境 | npm install 完成 | `npm run dev` 启动 |
|
||||
|
||||
**晚上站会**:同步进度,确认明天 P1a + P2 联调计划
|
||||
|
||||
---
|
||||
|
||||
### Day 2 - 基础框架日(并行,开始有少量依赖)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 实现 Pipe Protocol 基础结构 | `pipe/protocol.rs`, `pipe/reader.rs`, `pipe/writer.rs` | 单元测试:能序列化/反序列化 JSON Line |
|
||||
| **P1b** | 设计 Skill 元数据格式 | `skill/metadata.rs`, `schema/skill-metadata.json` | JSON Schema 验证通过 |
|
||||
| **P2** | 实现 SgClawProcessHost 基础框架 | `sgclaw_process_host.h`, `.cc` | 能启动 dummy 进程(`echo "hello"`) |
|
||||
| **P3** | 精选 10 个代表性场景 | 10 个场景的业务流程文档 | 覆盖 5 种模式(表单/审批/采集/同步/巡检) |
|
||||
| **P4** | 设计 Side Panel UI 原型 | Figma/手绘原型 | 产品经理审核通过 |
|
||||
|
||||
**晚上站会**:P1a 和 P2 确认明天联调细节(JSON 格式、错误码)
|
||||
|
||||
---
|
||||
|
||||
### Day 3 - 联调开始日(P1a + P2 关键路径)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 实现 STDIN 读取、STDOUT 写入 | Pipe 双向通信代码 | 能收发 JSON 消息 | **→ P2** |
|
||||
| **P1b** | 开始 SkillLoader 开发 | `skill/loader.rs` 初版 | 能扫描目录、读取 .js 文件 | - |
|
||||
| **P2** ⭐ | 实现 PipeListener 异步读取 | `pipe_listener.cc` | 能从 STDOUT 读取 JSON Line | **→ P1a** |
|
||||
| **P3** | 手工编写前 3 个黄金样本 | 3 个 Skill.js 文件 | 代码能手动执行(mock browserAction) | - |
|
||||
| **P4** | 开发 Side Panel UI 框架 | `AgentControlPanel.vue` 初版 | 能渲染基本界面 | - |
|
||||
|
||||
**下午联调**(P1a + P2):
|
||||
1. P1a 启动 Rust 进程,监听 STDIN
|
||||
2. P2 用 C++ 创建子进程,传递 fd
|
||||
3. 互相发送 JSON 消息:`{"action":"ping"}` ↔ `{"status":"pong"}`
|
||||
|
||||
**验收标准**:双向通信成功,能在 Chrome 控制台看到 Rust 日志
|
||||
|
||||
---
|
||||
|
||||
### Day 4 - 核心功能日(P1a + P2 继续打通)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 实现 BrowserPipeTool(3 个 Action) | `tool/browser_pipe.rs` | 支持 click / type / navigate | **→ P2** |
|
||||
| **P1b** | SkillLoader 签名验证 | `skill/signature.rs` | Ed25519 验证通过/失败 | - |
|
||||
| **P2** ⭐ | CommandRouter 对接 | `sgclaw_process_host.cc` 集成 CommandRouter | 能调用现有 70+ 命令 | **→ P1a** |
|
||||
| **P3** | 手工编写剩余 7 个黄金样本 | 10 个 Skill.js 全部完成 | 每个都有详细注释 | - |
|
||||
| **P4** | 开发 Skill 管理后台 | `SkillManager.vue` | 能列表显示 Skill | **→ P2**(IPC 接口确认)|
|
||||
|
||||
**下午联调**(P1a + P2):
|
||||
1. P1a 发送 `{"action":"click", "params":{"selector":"#btn"}}`
|
||||
2. P2 接收后调用 CommandRouter → CdpBridge → Chrome DevTools Protocol
|
||||
3. 浏览器真实执行点击
|
||||
|
||||
**验收标准**:能用 Rust 控制浏览器点击按钮
|
||||
|
||||
---
|
||||
|
||||
### Day 5 - W1 里程碑(Pipe 全链路打通)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** ⭐ | 完善 BrowserPipeTool(15 个 Action) | 完整工具 | 所有 Action 测试通过 | **→ P2** |
|
||||
| **P1b** | Memory 模块开发 | `memory/ring_buffer.rs`, `memory/sqlite_store.rs` | Ring Buffer 存取、SQLite 初始化 | - |
|
||||
| **P2** ⭐ | MAC 白名单检查 | `mac_whitelist_check.cc`, `rules.json` | 白名单校验生效 | **→ P1a** |
|
||||
| **P3** | 设计 System Prompt | `prompts/translation-system.txt` | 在 10 个样本上测试准确率 | - |
|
||||
| **P4** | UI 集成测试 | Vue ↔ C++ IPC 调通 | 能从 UI 启动/停止 sgClaw | **→ P2** |
|
||||
|
||||
**下午全体演示**(W1 里程碑验收):
|
||||
1. P4 打开 Side Panel,输入"点击登录按钮"
|
||||
2. Vue → C++ → Rust → 大模型(mock)→ Rust → C++ → 浏览器
|
||||
3. 浏览器真实执行操作
|
||||
|
||||
**验收标准**:**LLM → Pipe → Browser 链路全通**
|
||||
|
||||
---
|
||||
|
||||
### Day 6 - 并行集成日(三组同时进行)
|
||||
|
||||
#### 组 1:P1a + P1b(集成 AgentRuntime)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 提供 BrowserPipeTool 给 P1b | 完整 Tool trait 实现 | P1b 能注册工具 |
|
||||
| **P1b** | AgentRuntime 集成 | `agent/runtime.rs` | ZeroClaw ReAct Loop 运行 |
|
||||
|
||||
**下午联调**:
|
||||
- P1b 创建 `AgentRuntime`,注册 `BrowserPipeTool`
|
||||
- 模拟 LLM 输出:`{"tool":"browser","action":"click","params":{...}}`
|
||||
- 验证工具调用成功
|
||||
|
||||
#### 组 2:P1b + P3(Skill 加载测试)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1b** | SkillLoader 完善 | JS 沙箱执行 | 能执行 Skill.js |
|
||||
| **P3** | 10 个 Skill 加签名 | 签名完成的 Skill | 验证通过 |
|
||||
|
||||
**下午联调**:
|
||||
- P1b 扫描 `skills/` 目录
|
||||
- 加载 P3 的 10 个 Skill
|
||||
- 执行一个 Skill,调用 `browserAction`
|
||||
|
||||
#### 组 3:P2 + P4(UI 对接)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P2** | 暴露 IPC 接口给 P4 | `window.superrpa.sgclaw.*` | P4 能调用 |
|
||||
| **P4** | 完善 UI + Skill 后台 | 两个 Vue 组件 | 能管理 Skill 启用/禁用 |
|
||||
|
||||
**下午联调**:
|
||||
- P4 调用 `window.superrpa.sgclaw.listSkills()`
|
||||
- P2 返回 Skill 列表
|
||||
- P4 在界面上显示
|
||||
|
||||
---
|
||||
|
||||
### Day 7 - 安全与优化日
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 | 协作对象 |
|
||||
|-----|------|--------|---------|---------|
|
||||
| **P1a** | MAC Policy 集成到 BrowserPipeTool | 安全策略生效 | 非白名单域名被拦截 | **→ P2**(确认拦截反馈)|
|
||||
| **P1b** | Critic 评估器 | `agent/critic.rs` | 能判断成功/失败/重试 | - |
|
||||
| **P2** | Human-in-the-loop 确认弹窗 | C++ 对话框 | 敏感操作弹窗确认 | **→ P1a**(定义敏感操作列表)|
|
||||
| **P3** | 批量 AI 翻译(第 1 批) | 100 个 Skill 候选 | 翻译准确率 >90% | - |
|
||||
| **P4** | 测试框架搭建 | Jest + Puppeteer 配置 | 能运行单元测试 | - |
|
||||
|
||||
**下午安全测试**:
|
||||
- 尝试访问非白名单域名(应被拦截)
|
||||
- 尝试执行敏感操作(应弹窗确认)
|
||||
- 连续失败 10 次触发熔断
|
||||
|
||||
---
|
||||
|
||||
### Day 8 - E2E 测试日(全员参与)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 修复 Pipe 通信 bug | 稳定版本 | 无消息丢失 |
|
||||
| **P1b** | 修复 Memory 存取 bug | 稳定版本 | SQLite 读写正常 |
|
||||
| **P2** | 修复浏览器端 bug | 稳定版本 | 进程不崩溃 |
|
||||
| **P3** | 批量 AI 翻译(第 2-4 批) | 400 个 Skill 全部完成 | 自动检查通过率 >85% |
|
||||
| **P4** | E2E 测试脚本 | 6 个业务场景测试 | 全部通过 |
|
||||
|
||||
**E2E 测试场景**:
|
||||
1. 财务合规:导出 ERP 月度报表
|
||||
2. OA 审批:批量审批 10 个单据
|
||||
3. 风险监测:巡检风险指标
|
||||
4. 人资社保:办理社保增减员
|
||||
5. 营销数据:跨平台采集数据
|
||||
6. 跨系统同步:ERP → 财务数据同步
|
||||
|
||||
**验收标准**:每个场景端到端运行成功,无崩溃
|
||||
|
||||
---
|
||||
|
||||
### Day 9 - 稳定性测试日
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 性能优化 | Pipe 通信延迟 <10ms | 性能达标 |
|
||||
| **P1b** | Memory 压力测试 | L2 存 1000 条记录 | 无内存泄漏 |
|
||||
| **P2** | 长时间运行测试 | 24 小时稳定性 | 进程不崩溃 |
|
||||
| **P3** | Skill 质量抽检 | 抽检 20 个 Skill | 人工验证通过 |
|
||||
| **P4** | 集成测试 + 打包预演 | 测试报告 | 覆盖率 >70% |
|
||||
|
||||
**压力测试**:
|
||||
- 连续执行 100 次操作
|
||||
- 8GB 内存限制下运行
|
||||
- 监控内存占用(sgClaw 应 <10MB)
|
||||
|
||||
---
|
||||
|
||||
### Day 10 - 发布日(W2 里程碑)
|
||||
|
||||
| 角色 | 任务 | 产出物 | 验收标准 |
|
||||
|-----|------|--------|---------|
|
||||
| **P1a** | 代码审查 + 交付 | 完整 Rust 代码 | P2 审查通过 |
|
||||
| **P1b** | 代码审查 + 交付 | 完整 Rust 代码 | P1a 审查通过 |
|
||||
| **P2** | 代码审查 + 交付 | 完整 C++ 代码 | P1a 审查通过 |
|
||||
| **P3** | Skill 仓库交付 | 400+ Skill + 文档 | P1b 审查通过 |
|
||||
| **P4** | **打包发布** | `.deb` + `.exe` 安装包 | 两平台安装成功 |
|
||||
|
||||
**发布物清单**:
|
||||
- `sgclaw-v1.0.0-kylin-v10-amd64.deb` (~456MB)
|
||||
- `sgclaw-v1.0.0-windows-x64.exe` (~460MB)
|
||||
- `CHANGELOG.md`
|
||||
- `INSTALL.md`
|
||||
- 演示视频(6 个场景)
|
||||
|
||||
---
|
||||
|
||||
## 三、关键接口对接清单
|
||||
|
||||
### 1. P1a ↔ P2 接口(最重要)
|
||||
|
||||
**协议**:JSON Line over STDIO Pipe
|
||||
|
||||
**Request 示例**(C++ → Rust):
|
||||
```json
|
||||
{
|
||||
"sequence_id": 1,
|
||||
"action": "click",
|
||||
"params": {
|
||||
"selector": "#submit-button",
|
||||
"button": "left"
|
||||
},
|
||||
"timestamp": 1709499600000
|
||||
}
|
||||
```
|
||||
|
||||
**Response 示例**(Rust → C++):
|
||||
```json
|
||||
{
|
||||
"sequence_id": 1,
|
||||
"status": "success",
|
||||
"result": {
|
||||
"clicked": true
|
||||
},
|
||||
"error": null,
|
||||
"timestamp": 1709499601000
|
||||
}
|
||||
```
|
||||
|
||||
**对接时间**:Day 3-5(关键路径)
|
||||
|
||||
**验收标准**:
|
||||
- Day 3:能互相发送 ping/pong
|
||||
- Day 4:能调用 3 个 Action(click/type/navigate)
|
||||
- Day 5:能调用全部 15 个 Action
|
||||
|
||||
---
|
||||
|
||||
### 2. P1a ↔ P1b 接口
|
||||
|
||||
**模块依赖**:
|
||||
- P1b 的 `AgentRuntime` 依赖 P1a 的 `BrowserPipeTool`
|
||||
|
||||
**接口代码**:
|
||||
```rust
|
||||
// P1a 提供
|
||||
pub struct BrowserPipeTool {
|
||||
pipe_writer: PipeWriter,
|
||||
mac_policy: MacPolicy,
|
||||
sequence_id: AtomicU64,
|
||||
}
|
||||
|
||||
impl Tool for BrowserPipeTool {
|
||||
async fn execute(&self, input: &str) -> Result<String>;
|
||||
}
|
||||
|
||||
// P1b 使用
|
||||
let browser_tool = BrowserPipeTool::new(...);
|
||||
agent_runtime.register_tool(Box::new(browser_tool));
|
||||
```
|
||||
|
||||
**对接时间**:Day 6
|
||||
|
||||
**验收标准**:
|
||||
- P1b 能注册 P1a 的工具
|
||||
- Agent 能调用浏览器操作
|
||||
|
||||
---
|
||||
|
||||
### 3. P1b ↔ P3 接口
|
||||
|
||||
**Skill 元数据规范**:
|
||||
```javascript
|
||||
/**
|
||||
* @skill erp-monthly-report
|
||||
* @version 1.0.0
|
||||
* @domains erp.example.com
|
||||
* @params { month: string, format: enum }
|
||||
* @signature <ed25519_base64>
|
||||
*/
|
||||
async function execute(params, browserAction) {
|
||||
await browserAction('navigate', {...});
|
||||
await browserAction('click', {...});
|
||||
return { success: true };
|
||||
}
|
||||
```
|
||||
|
||||
**BrowserAction API**:
|
||||
```javascript
|
||||
await browserAction(action, params)
|
||||
// 返回 Promise<result>
|
||||
```
|
||||
|
||||
**对接时间**:Day 6-7
|
||||
|
||||
**验收标准**:
|
||||
- P1b 能扫描并加载 P3 的 Skill
|
||||
- 签名验证通过
|
||||
- Skill 能正常执行
|
||||
|
||||
---
|
||||
|
||||
### 4. P2 ↔ P4 接口
|
||||
|
||||
**FunctionsUI IPC**(Vue ↔ C++):
|
||||
```javascript
|
||||
// P4 调用(Vue)
|
||||
window.superrpa.sgclaw.start()
|
||||
window.superrpa.sgclaw.stop()
|
||||
window.superrpa.sgclaw.sendCommand(text)
|
||||
window.superrpa.sgclaw.listSkills()
|
||||
window.superrpa.sgclaw.toggleSkill(skillId, enabled)
|
||||
|
||||
// P2 回调(C++ → Vue)
|
||||
window.superrpa.sgclaw.onStatusChange((status) => { ... })
|
||||
window.superrpa.sgclaw.onLog((log) => { ... })
|
||||
```
|
||||
|
||||
**对接时间**:Day 4-6
|
||||
|
||||
**验收标准**:
|
||||
- P4 能启动/停止 sgClaw 进程
|
||||
- P4 能接收日志更新
|
||||
- P4 能管理 Skill 列表
|
||||
|
||||
---
|
||||
|
||||
## 四、每日站会议程
|
||||
|
||||
**时间**:每天 10:00,15 分钟
|
||||
|
||||
**Day 1-2 站会重点**:环境搭建进度
|
||||
|
||||
**Day 3-5 站会重点**(关键路径):
|
||||
- P1a + P2 联调进度
|
||||
- 遇到的技术问题
|
||||
- 是否需要其他人支援
|
||||
|
||||
**Day 6-7 站会重点**:
|
||||
- 三组并行集成进度
|
||||
- 接口冲突解决
|
||||
- 安全测试结果
|
||||
|
||||
**Day 8-9 站会重点**:
|
||||
- E2E 测试通过率
|
||||
- Bug 修复优先级
|
||||
- 性能优化方向
|
||||
|
||||
**Day 10 站会**:
|
||||
- 发布 Checklist 确认
|
||||
- 演示视频录制分工
|
||||
|
||||
---
|
||||
|
||||
## 五、风险预案
|
||||
|
||||
### 风险 1:P1a + P2 联调卡住(Day 3-5)
|
||||
|
||||
**影响**:阻塞所有后续工作(极高风险)
|
||||
|
||||
**预案**:
|
||||
- Day 3 晚上如果还没通:P1b 暂停自己的工作,全力支援
|
||||
- Day 4 晚上如果还没通:启动降级方案(HTTP 替代 Pipe)
|
||||
|
||||
---
|
||||
|
||||
### 风险 2:P3 AI 翻译质量不达标(Day 7-9)
|
||||
|
||||
**影响**:Skill 不可用(中风险)
|
||||
|
||||
**预案**:
|
||||
- 准确率 <80%:人工介入修正 Prompt
|
||||
- 准确率 <60%:放弃 AI 翻译,只交付 10 个黄金样本
|
||||
|
||||
---
|
||||
|
||||
### 风险 3:银河麒麟适配问题(Day 9-10)
|
||||
|
||||
**影响**:无法打包 .deb(中风险)
|
||||
|
||||
**预案**:
|
||||
- P4 提前在 Day 7 开始真机测试
|
||||
- 如果 Day 9 还有问题,先发布 Windows 版本
|
||||
|
||||
---
|
||||
|
||||
## 六、交付物 Checklist
|
||||
|
||||
### P1a 交付物(Day 10)
|
||||
- [ ] `src/pipe/` 完整代码
|
||||
- [ ] `src/tool/browser_pipe.rs`
|
||||
- [ ] `src/security/mac_policy.rs`
|
||||
- [ ] 单元测试(覆盖率 >70%)
|
||||
- [ ] API 文档(Rust Doc)
|
||||
|
||||
### P1b 交付物(Day 10)
|
||||
- [ ] `src/skill/` 完整代码
|
||||
- [ ] `src/memory/` 完整代码
|
||||
- [ ] `src/agent/` 完整代码
|
||||
- [ ] 单元测试(覆盖率 >70%)
|
||||
- [ ] Memory 压力测试报告
|
||||
|
||||
### P2 交付物(Day 10)
|
||||
- [ ] `sgclaw_process_host.*`
|
||||
- [ ] `pipe_listener.*`
|
||||
- [ ] `mac_whitelist_check.*`
|
||||
- [ ] `rules.json`
|
||||
- [ ] C++ 单元测试
|
||||
- [ ] 接口文档
|
||||
|
||||
### P3 交付物(Day 10)
|
||||
- [ ] 10-15 个黄金样本
|
||||
- [ ] 400+ AI 生成 Skill
|
||||
- [ ] `prompts/translation-system.txt`
|
||||
- [ ] `README.md`(Skill 开发指南)
|
||||
- [ ] 签名工具脚本
|
||||
|
||||
### P4 交付物(Day 10)
|
||||
- [ ] `AgentControlPanel.vue`
|
||||
- [ ] `SkillManager.vue`
|
||||
- [ ] E2E 测试脚本(6 个场景)
|
||||
- [ ] 测试报告(覆盖率 >70%)
|
||||
- [ ] `.deb` 安装包
|
||||
- [ ] `.exe` 安装包
|
||||
- [ ] `CHANGELOG.md`
|
||||
- [ ] `INSTALL.md`
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**最后更新**:2026-03-04
|
||||
**维护者**:项目经理
|
||||
206
docs/archive/项目管理与排期/协作甘特图.md
Normal file
206
docs/archive/项目管理与排期/协作甘特图.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# sgClaw 项目协作甘特图
|
||||
|
||||
## 一、完整时间线(Mermaid 甘特图)
|
||||
|
||||
```mermaid
|
||||
gantt
|
||||
title sgClaw 2周开发计划(关键路径:P1a+P2)
|
||||
dateFormat YYYY-MM-DD
|
||||
axisFormat Day %d
|
||||
|
||||
section 关键路径⭐
|
||||
P1a环境搭建 :p1a1, 2026-03-04, 2d
|
||||
P1a Pipe协议开发 :crit, p1a2, after p1a1, 1d
|
||||
P1a+P2联调Pipe通信 :crit, p1a3, after p1a2, 2d
|
||||
P1a完善15个Action :crit, p1a4, after p1a3, 1d
|
||||
W1里程碑演示 :milestone, m1, after p1a4, 0d
|
||||
P1a+P1b集成Runtime :p1a5, after p1a4, 1d
|
||||
P1a MAC安全策略 :p1a6, after p1a5, 1d
|
||||
P1a bug修复 :p1a7, after p1a6, 2d
|
||||
P1a代码审查交付 :milestone, m2, after p1a7, 1d
|
||||
|
||||
section P2浏览器对接
|
||||
P2环境搭建 :p2a, 2026-03-04, 2d
|
||||
P2 ProcessHost框架 :p2b, after p2a, 1d
|
||||
P2+P1a联调Pipe :crit, p2c, after p2b, 2d
|
||||
P2 CommandRouter对接 :p2d, after p2c, 1d
|
||||
P2 MAC白名单 :p2e, after p2d, 1d
|
||||
P2+P4 UI对接 :p2f, after p2e, 1d
|
||||
P2 bug修复 :p2g, after p2f, 2d
|
||||
P2交付 :milestone, after p2g, 1d
|
||||
|
||||
section P1b业务支持
|
||||
P1b环境搭建 :p1b1, 2026-03-04, 2d
|
||||
P1b SkillLoader开发 :p1b2, after p1b1, 3d
|
||||
P1b Memory开发 :p1b3, after p1b2, 2d
|
||||
P1b+P1a集成Runtime :p1b4, after p1b3, 1d
|
||||
P1b+P3 Skill测试 :p1b5, after p1b4, 1d
|
||||
P1b Critic评估器 :p1b6, after p1b5, 1d
|
||||
P1b bug修复 :p1b7, after p1b6, 1d
|
||||
P1b交付 :milestone, after p1b7, 1d
|
||||
|
||||
section P3业务技能
|
||||
P3场景调研 :p3a, 2026-03-04, 1d
|
||||
P3黄金样本制作 :p3b, after p3a, 3d
|
||||
P3提示词工程 :p3c, after p3b, 1d
|
||||
P3 AI批量翻译 :p3d, after p3c, 3d
|
||||
P3质量抽检 :p3e, after p3d, 2d
|
||||
P3交付Skill仓库 :milestone, after p3e, 0d
|
||||
|
||||
section P4前端发布
|
||||
P4环境搭建 :p4a, 2026-03-04, 2d
|
||||
P4 UI原型设计 :p4b, after p4a, 1d
|
||||
P4 Side Panel开发 :p4c, after p4b, 2d
|
||||
P4 Skill后台开发 :p4d, after p4c, 1d
|
||||
P4+P2 IPC对接 :p4e, after p4d, 1d
|
||||
P4测试框架搭建 :p4f, after p4e, 1d
|
||||
P4 E2E测试 :p4g, after p4f, 2d
|
||||
P4打包发布 :milestone, p4h, after p4g, 1d
|
||||
|
||||
section 全员里程碑
|
||||
环境搭建完成 :milestone, after p1a1 p2a p1b1 p3a p4a, 0d
|
||||
W1里程碑(链路打通) :milestone, m1_all, 2026-03-08, 0d
|
||||
E2E测试周 :active, e2e, 2026-03-11, 2d
|
||||
W2里程碑(正式发布) :milestone, m2_all, 2026-03-14, 0d
|
||||
```
|
||||
|
||||
## 二、关键路径可视化
|
||||
|
||||
```
|
||||
Day 1-2 ━━━━━━━━━━━━━━━━━━━━━━ 环境搭建(并行)
|
||||
┃
|
||||
Day 3 ━━━━━┻━━━━━━━━━━━━━━━━━ P1a Pipe 协议开发 ⭐
|
||||
┃
|
||||
Day 4-5 ━━━┻━━━━━━━━━━━━━━━━━ P1a + P2 联调 Pipe ⭐⭐⭐
|
||||
┃ (关键路径,阻塞所有人)
|
||||
┃
|
||||
▼
|
||||
【W1 里程碑】链路打通
|
||||
┃
|
||||
Day 6 ━━━━━┻━━━━━━━━━━━━━━━━━ 三组并行集成:
|
||||
├─ P1a + P1b (Runtime)
|
||||
├─ P1b + P3 (Skill)
|
||||
└─ P2 + P4 (UI)
|
||||
┃
|
||||
Day 7 ━━━━━┫ 安全策略 + AI 翻译
|
||||
┃
|
||||
Day 8-9 ━━━┻━━━━━━━━━━━━━━━━━ 全员 E2E 测试
|
||||
┃
|
||||
Day 10 ━━━━▼━━━━━━━━━━━━━━━━━ P4 打包发布
|
||||
【W2 里程碑】正式发布
|
||||
```
|
||||
|
||||
## 三、并行度分析
|
||||
|
||||
```
|
||||
Day 1-2: ████████████████████ 5 人并行(环境搭建)
|
||||
Day 3: ████ P1a 单人关键路径
|
||||
Day 4-5: ████████ P1a+P2 双人关键路径 ⭐
|
||||
Day 6-7: ████████████████ 4 人并行(P3 独立)
|
||||
Day 8-9: ████████████████████ 5 人并行(E2E 测试)
|
||||
Day 10: ████ P4 单人发布
|
||||
|
||||
关键瓶颈:Day 4-5(P1a + P2 联调)
|
||||
```
|
||||
|
||||
## 四、依赖关系图
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Day 1-2: 环境搭建] --> B[Day 3: P1a Pipe 协议]
|
||||
B --> C[Day 4-5: P1a+P2 联调 Pipe ⭐]
|
||||
C --> D[Day 5 晚: W1 里程碑]
|
||||
|
||||
D --> E1[Day 6: P1a+P1b 集成]
|
||||
D --> E2[Day 6: P1b+P3 Skill]
|
||||
D --> E3[Day 6: P2+P4 UI]
|
||||
|
||||
E1 --> F[Day 7: 安全+AI]
|
||||
E2 --> F
|
||||
E3 --> F
|
||||
|
||||
F --> G[Day 8-9: E2E 测试]
|
||||
G --> H[Day 10: P4 打包发布]
|
||||
|
||||
style C fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
style D fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
style H fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
```
|
||||
|
||||
## 五、人员负载分析
|
||||
|
||||
| 日期 | P1a(你)| P1b | P2 | P3 | P4 | 总负载 |
|
||||
|-----|---------|-----|----|----|----|----|
|
||||
| Day 1-2 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 5 人 |
|
||||
| Day 3 | 🔴 高 | 🟡 低 | 🟡 低 | 🟢 中 | 🟢 中 | 2 人高负载 |
|
||||
| Day 4-5 | 🔴 极高 | 🟢 中 | 🔴 极高 | 🟢 中 | 🟢 中 | **2 人关键路径** |
|
||||
| Day 6 | 🔴 高 | 🔴 高 | 🟢 中 | 🟢 中 | 🟢 中 | 2 人高负载 |
|
||||
| Day 7 | 🟢 中 | 🔴 高 | 🟢 中 | 🔴 高 | 🟢 中 | 2 人高负载 |
|
||||
| Day 8-9 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 5 人 E2E |
|
||||
| Day 10 | 🟡 低 | 🟡 低 | 🟡 低 | 🟡 低 | 🔴 高 | 1 人高负载 |
|
||||
|
||||
**图例**:🔴 极高/高负载 🟡 低负载 🟢 正常负载
|
||||
|
||||
---
|
||||
|
||||
## 六、风险热力图
|
||||
|
||||
```
|
||||
风险等级
|
||||
时间 │ 低 │ 中 │ 高 │ 极高
|
||||
─────────┼────┼────┼────┼─────
|
||||
Day 1-2 │ ✓ │ │ │
|
||||
Day 3 │ │ ✓ │ │
|
||||
Day 4-5 │ │ │ │ ⭐⭐⭐ ← Pipe 通信不通
|
||||
Day 6 │ │ │ ✓ │
|
||||
Day 7 │ │ ✓ │ │
|
||||
Day 8-9 │ │ ✓ │ │
|
||||
Day 10 │ │ ✓ │ │
|
||||
```
|
||||
|
||||
**极高风险(Day 4-5)**:P1a + P2 联调失败,阻塞所有后续工作
|
||||
|
||||
**预案**:
|
||||
1. Day 4 晚上还没通 → P1b 全力支援
|
||||
2. Day 5 中午还没通 → 启动降级方案(HTTP)
|
||||
|
||||
---
|
||||
|
||||
## 七、里程碑验收清单
|
||||
|
||||
### ✅ W1 里程碑(Day 5 晚上)
|
||||
|
||||
**演示场景**:
|
||||
1. P4 打开 Side Panel UI
|
||||
2. 输入:"点击页面上的登录按钮"
|
||||
3. Vue → C++ → Rust → 大模型(mock)→ Rust → C++ → 浏览器
|
||||
4. 浏览器真实点击按钮
|
||||
|
||||
**验收标准**:
|
||||
- [ ] Pipe 双向通信稳定(无消息丢失)
|
||||
- [ ] 15 个 BrowserAction 全部测试通过
|
||||
- [ ] MAC 白名单生效(非白名单域名被拦截)
|
||||
- [ ] 延迟 < 100ms(从命令到执行完成)
|
||||
|
||||
---
|
||||
|
||||
### ✅ W2 里程碑(Day 10)
|
||||
|
||||
**交付物**:
|
||||
- [ ] `.deb` 安装包(银河麒麟 V10)
|
||||
- [ ] `.exe` 安装包(Windows 10/11)
|
||||
- [ ] 6 个业务场景演示视频
|
||||
- [ ] 完整文档(API + Skill 开发指南 + 部署手册)
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 两平台安装成功
|
||||
- [ ] E2E 测试全部通过
|
||||
- [ ] 单元测试覆盖率 > 70%
|
||||
- [ ] 内存占用 < 10MB(sgClaw 进程)
|
||||
- [ ] 无已知 P0/P1 级 bug
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**最后更新**:2026-03-04
|
||||
**维护者**:项目经理
|
||||
222
docs/archive/项目管理与排期/协作甘特图_printable.md
Normal file
222
docs/archive/项目管理与排期/协作甘特图_printable.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# sgClaw 项目协作甘特图
|
||||
|
||||
## 一、完整时间线(Mermaid 甘特图)
|
||||
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>📋 点击查看 Mermaid 源码</summary>
|
||||
|
||||
```mermaid
|
||||
gantt
|
||||
title sgClaw 2周开发计划(关键路径:P1a+P2)
|
||||
dateFormat YYYY-MM-DD
|
||||
axisFormat Day %d
|
||||
|
||||
section 关键路径⭐
|
||||
P1a环境搭建 :p1a1, 2026-03-04, 2d
|
||||
P1a Pipe协议开发 :crit, p1a2, after p1a1, 1d
|
||||
P1a+P2联调Pipe通信 :crit, p1a3, after p1a2, 2d
|
||||
P1a完善15个Action :crit, p1a4, after p1a3, 1d
|
||||
W1里程碑演示 :milestone, m1, after p1a4, 0d
|
||||
P1a+P1b集成Runtime :p1a5, after p1a4, 1d
|
||||
P1a MAC安全策略 :p1a6, after p1a5, 1d
|
||||
P1a bug修复 :p1a7, after p1a6, 2d
|
||||
P1a代码审查交付 :milestone, m2, after p1a7, 1d
|
||||
|
||||
section P2浏览器对接
|
||||
P2环境搭建 :p2a, 2026-03-04, 2d
|
||||
P2 ProcessHost框架 :p2b, after p2a, 1d
|
||||
P2+P1a联调Pipe :crit, p2c, after p2b, 2d
|
||||
P2 CommandRouter对接 :p2d, after p2c, 1d
|
||||
P2 MAC白名单 :p2e, after p2d, 1d
|
||||
P2+P4 UI对接 :p2f, after p2e, 1d
|
||||
P2 bug修复 :p2g, after p2f, 2d
|
||||
P2交付 :milestone, after p2g, 1d
|
||||
|
||||
section P1b业务支持
|
||||
P1b环境搭建 :p1b1, 2026-03-04, 2d
|
||||
P1b SkillLoader开发 :p1b2, after p1b1, 3d
|
||||
P1b Memory开发 :p1b3, after p1b2, 2d
|
||||
P1b+P1a集成Runtime :p1b4, after p1b3, 1d
|
||||
P1b+P3 Skill测试 :p1b5, after p1b4, 1d
|
||||
P1b Critic评估器 :p1b6, after p1b5, 1d
|
||||
P1b bug修复 :p1b7, after p1b6, 1d
|
||||
P1b交付 :milestone, after p1b7, 1d
|
||||
|
||||
section P3业务技能
|
||||
P3场景调研 :p3a, 2026-03-04, 1d
|
||||
P3黄金样本制作 :p3b, after p3a, 3d
|
||||
P3提示词工程 :p3c, after p3b, 1d
|
||||
P3 AI批量翻译 :p3d, after p3c, 3d
|
||||
P3质量抽检 :p3e, after p3d, 2d
|
||||
P3交付Skill仓库 :milestone, after p3e, 0d
|
||||
|
||||
section P4前端发布
|
||||
P4环境搭建 :p4a, 2026-03-04, 2d
|
||||
P4 UI原型设计 :p4b, after p4a, 1d
|
||||
P4 Side Panel开发 :p4c, after p4b, 2d
|
||||
P4 Skill后台开发 :p4d, after p4c, 1d
|
||||
P4+P2 IPC对接 :p4e, after p4d, 1d
|
||||
P4测试框架搭建 :p4f, after p4e, 1d
|
||||
P4 E2E测试 :p4g, after p4f, 2d
|
||||
P4打包发布 :milestone, p4h, after p4g, 1d
|
||||
|
||||
section 全员里程碑
|
||||
环境搭建完成 :milestone, after p1a1 p2a p1b1 p3a p4a, 0d
|
||||
W1里程碑(链路打通) :milestone, m1_all, 2026-03-08, 0d
|
||||
E2E测试周 :active, e2e, 2026-03-11, 2d
|
||||
W2里程碑(正式发布) :milestone, m2_all, 2026-03-14, 0d
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
## 二、关键路径可视化
|
||||
|
||||
```
|
||||
Day 1-2 ━━━━━━━━━━━━━━━━━━━━━━ 环境搭建(并行)
|
||||
┃
|
||||
Day 3 ━━━━━┻━━━━━━━━━━━━━━━━━ P1a Pipe 协议开发 ⭐
|
||||
┃
|
||||
Day 4-5 ━━━┻━━━━━━━━━━━━━━━━━ P1a + P2 联调 Pipe ⭐⭐⭐
|
||||
┃ (关键路径,阻塞所有人)
|
||||
┃
|
||||
▼
|
||||
【W1 里程碑】链路打通
|
||||
┃
|
||||
Day 6 ━━━━━┻━━━━━━━━━━━━━━━━━ 三组并行集成:
|
||||
├─ P1a + P1b (Runtime)
|
||||
├─ P1b + P3 (Skill)
|
||||
└─ P2 + P4 (UI)
|
||||
┃
|
||||
Day 7 ━━━━━┫ 安全策略 + AI 翻译
|
||||
┃
|
||||
Day 8-9 ━━━┻━━━━━━━━━━━━━━━━━ 全员 E2E 测试
|
||||
┃
|
||||
Day 10 ━━━━▼━━━━━━━━━━━━━━━━━ P4 打包发布
|
||||
【W2 里程碑】正式发布
|
||||
```
|
||||
|
||||
## 三、并行度分析
|
||||
|
||||
```
|
||||
Day 1-2: ████████████████████ 5 人并行(环境搭建)
|
||||
Day 3: ████ P1a 单人关键路径
|
||||
Day 4-5: ████████ P1a+P2 双人关键路径 ⭐
|
||||
Day 6-7: ████████████████ 4 人并行(P3 独立)
|
||||
Day 8-9: ████████████████████ 5 人并行(E2E 测试)
|
||||
Day 10: ████ P4 单人发布
|
||||
|
||||
关键瓶颈:Day 4-5(P1a + P2 联调)
|
||||
```
|
||||
|
||||
## 四、依赖关系图
|
||||
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>📋 点击查看 Mermaid 源码</summary>
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Day 1-2: 环境搭建] --> B[Day 3: P1a Pipe 协议]
|
||||
B --> C[Day 4-5: P1a+P2 联调 Pipe ⭐]
|
||||
C --> D[Day 5 晚: W1 里程碑]
|
||||
|
||||
D --> E1[Day 6: P1a+P1b 集成]
|
||||
D --> E2[Day 6: P1b+P3 Skill]
|
||||
D --> E3[Day 6: P2+P4 UI]
|
||||
|
||||
E1 --> F[Day 7: 安全+AI]
|
||||
E2 --> F
|
||||
E3 --> F
|
||||
|
||||
F --> G[Day 8-9: E2E 测试]
|
||||
G --> H[Day 10: P4 打包发布]
|
||||
|
||||
style C fill:#ff6b6b,stroke:#c92a2a,color:#fff
|
||||
style D fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
style H fill:#51cf66,stroke:#2f9e44,color:#fff
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
## 五、人员负载分析
|
||||
|
||||
| 日期 | P1a(你)| P1b | P2 | P3 | P4 | 总负载 |
|
||||
|-----|---------|-----|----|----|----|----|
|
||||
| Day 1-2 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 5 人 |
|
||||
| Day 3 | 🔴 高 | 🟡 低 | 🟡 低 | 🟢 中 | 🟢 中 | 2 人高负载 |
|
||||
| Day 4-5 | 🔴 极高 | 🟢 中 | 🔴 极高 | 🟢 中 | 🟢 中 | **2 人关键路径** |
|
||||
| Day 6 | 🔴 高 | 🔴 高 | 🟢 中 | 🟢 中 | 🟢 中 | 2 人高负载 |
|
||||
| Day 7 | 🟢 中 | 🔴 高 | 🟢 中 | 🔴 高 | 🟢 中 | 2 人高负载 |
|
||||
| Day 8-9 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 🟢 中 | 5 人 E2E |
|
||||
| Day 10 | 🟡 低 | 🟡 低 | 🟡 低 | 🟡 低 | 🔴 高 | 1 人高负载 |
|
||||
|
||||
**图例**:🔴 极高/高负载 🟡 低负载 🟢 正常负载
|
||||
|
||||
---
|
||||
|
||||
## 六、风险热力图
|
||||
|
||||
```
|
||||
风险等级
|
||||
时间 │ 低 │ 中 │ 高 │ 极高
|
||||
─────────┼────┼────┼────┼─────
|
||||
Day 1-2 │ ✓ │ │ │
|
||||
Day 3 │ │ ✓ │ │
|
||||
Day 4-5 │ │ │ │ ⭐⭐⭐ ← Pipe 通信不通
|
||||
Day 6 │ │ │ ✓ │
|
||||
Day 7 │ │ ✓ │ │
|
||||
Day 8-9 │ │ ✓ │ │
|
||||
Day 10 │ │ ✓ │ │
|
||||
```
|
||||
|
||||
**极高风险(Day 4-5)**:P1a + P2 联调失败,阻塞所有后续工作
|
||||
|
||||
**预案**:
|
||||
1. Day 4 晚上还没通 → P1b 全力支援
|
||||
2. Day 5 中午还没通 → 启动降级方案(HTTP)
|
||||
|
||||
---
|
||||
|
||||
## 七、里程碑验收清单
|
||||
|
||||
### ✅ W1 里程碑(Day 5 晚上)
|
||||
|
||||
**演示场景**:
|
||||
1. P4 打开 Side Panel UI
|
||||
2. 输入:"点击页面上的登录按钮"
|
||||
3. Vue → C++ → Rust → 大模型(mock)→ Rust → C++ → 浏览器
|
||||
4. 浏览器真实点击按钮
|
||||
|
||||
**验收标准**:
|
||||
- [ ] Pipe 双向通信稳定(无消息丢失)
|
||||
- [ ] 15 个 BrowserAction 全部测试通过
|
||||
- [ ] MAC 白名单生效(非白名单域名被拦截)
|
||||
- [ ] 延迟 < 100ms(从命令到执行完成)
|
||||
|
||||
---
|
||||
|
||||
### ✅ W2 里程碑(Day 10)
|
||||
|
||||
**交付物**:
|
||||
- [ ] `.deb` 安装包(银河麒麟 V10)
|
||||
- [ ] `.exe` 安装包(Windows 10/11)
|
||||
- [ ] 6 个业务场景演示视频
|
||||
- [ ] 完整文档(API + Skill 开发指南 + 部署手册)
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 两平台安装成功
|
||||
- [ ] E2E 测试全部通过
|
||||
- [ ] 单元测试覆盖率 > 70%
|
||||
- [ ] 内存占用 < 10MB(sgClaw 进程)
|
||||
- [ ] 无已知 P0/P1 级 bug
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**最后更新**:2026-03-04
|
||||
**维护者**:项目经理
|
||||
1024
docs/archive/项目管理与排期/团队分工.md
Normal file
1024
docs/archive/项目管理与排期/团队分工.md
Normal file
File diff suppressed because it is too large
Load Diff
84
docs/archive/项目管理与排期/团队管理标准.md
Normal file
84
docs/archive/项目管理与排期/团队管理标准.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# sgClaw 团队管理标准(V1.1)
|
||||
|
||||
> 适用范围:P1a、P1b、P2、P3、P4 五角色并行开发。
|
||||
> 管理原则:清单驱动、里程碑验收、接口先行、变更可追溯。
|
||||
|
||||
## 1. 全员统一工作清单
|
||||
|
||||
### 1.1 每日清单(Daily)
|
||||
|
||||
- [ ] 站会前更新:昨日产出、今日计划、阻塞项(各不超过 3 条)
|
||||
- [ ] 当日最少 1 次提交,提交信息带角色前缀(如 `P2: ...`)
|
||||
- [ ] 若存在接口变更,必须同步公告并更新文档
|
||||
- [ ] 下班前完成最小可运行验证(本地或联调环境)
|
||||
|
||||
### 1.2 里程碑清单(DoD)
|
||||
|
||||
- [ ] 代码通过本角色测试(单测/集成)
|
||||
- [ ] 产出物齐全(代码、配置、文档、示例)
|
||||
- [ ] 日志可定位(必须包含 `seq`、`action`、`error.code`)
|
||||
- [ ] 通过上下游联调验收并留存证据
|
||||
|
||||
## 2. 五角色职责清单
|
||||
|
||||
### P1a(核心通信,Rust)
|
||||
|
||||
- [ ] Pipe 协议实现:JSON Line、`seq` 递增、消息上限 1MB
|
||||
- [ ] BrowserPipeTool + MAC/HMAC 校验落地
|
||||
- [ ] command/response 关联能力按 `seq` 保证可追踪
|
||||
- [ ] 提供协议级成功/失败样例
|
||||
|
||||
### P1b(业务支持,Rust)
|
||||
|
||||
- [ ] Skill 加载、签名校验、沙箱执行
|
||||
- [ ] 记忆分层(L0/L1/L2)可读写可检索
|
||||
- [ ] AgentRuntime 与 P1a 工具链路打通
|
||||
- [ ] Critic 与熔断策略生效
|
||||
|
||||
### P2(浏览器对接,Chromium C++)
|
||||
|
||||
- [ ] SgClawProcessHost 生命周期(start/stop/crash)
|
||||
- [ ] PipeListener 收发与 Schema 校验
|
||||
- [ ] MAC 白名单检查与 CommandRouter 映射一致
|
||||
- [ ] 错误码标准化回传(`PIPE_*`/`MAC_*`/`CMD_*`)
|
||||
|
||||
### P3(业务技能,JS)
|
||||
|
||||
- [ ] Skill 元数据、参数 Schema、签名文件齐备
|
||||
- [ ] 每个 skill 提供最小可运行示例
|
||||
- [ ] 关键场景具备降级与异常处理
|
||||
- [ ] 与 P1b 联调加载、执行、回滚路径
|
||||
|
||||
### P4(前端与发布,Vue/DevOps)
|
||||
|
||||
- [ ] 控制面板支持启停、状态、日志展示
|
||||
- [ ] human-in-the-loop 确认链路闭环
|
||||
- [ ] 打包脚本一键产物(deb/exe)
|
||||
- [ ] 发布与回滚文档完整
|
||||
|
||||
## 3. 个人任务卡模板(分配即执行)
|
||||
|
||||
```markdown
|
||||
负责人:
|
||||
角色:P1a / P1b / P2 / P3 / P4
|
||||
|
||||
本周必须交付:
|
||||
1)
|
||||
2)
|
||||
3)
|
||||
|
||||
联调对象:
|
||||
阻塞项:
|
||||
|
||||
验收证据(必填):
|
||||
- 提交记录:
|
||||
- 测试结果:
|
||||
- 日志/截图:
|
||||
```
|
||||
|
||||
## 4. 接口标准与变更管理
|
||||
|
||||
- 浏览器联调标准统一使用:`docs/浏览器对接标准.md`。
|
||||
- 任何接口字段变更必须提交 RFC(影响面、兼容策略、回滚方案)。
|
||||
- 合并门槛:P1a + P2 + 管理者三方评审通过。
|
||||
- 文档更新顺序:先改接口文档,再改实现代码,最后改测试与演示资料。
|
||||
9667
docs/archive/项目管理与排期/团队管理标准.pdf
Normal file
9667
docs/archive/项目管理与排期/团队管理标准.pdf
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user