feat: refactor sgclaw around zeroclaw compat runtime
This commit is contained in:
134
docs/plans/2026-03-26-deepseek-browser-smoke-plan.md
Normal file
134
docs/plans/2026-03-26-deepseek-browser-smoke-plan.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# DeepSeek Browser Smoke Implementation Plan
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**Goal:** Add a repo-local verification path that exercises the browser-delivered `sgclaw` binary through the ZeroClaw/DeepSeek compat runtime without requiring a real DeepSeek account.
|
||||
|
||||
**Architecture:** Keep the existing SuperRPA browser smoke script unchanged. Add a small sgClaw-owned helper module that behaves like a fake OpenAI-compatible DeepSeek server and a runner script that starts that server, injects `DEEPSEEK_*` into the browser process environment, and delegates the actual browser/UI verification to the existing `sgclaw_chat_smoke.mjs`.
|
||||
|
||||
**Tech Stack:** Node.js ESM, Node built-in `node:test`, local HTTP server, Chromium `build_sgclaw.py`, existing SuperRPA `sgclaw_chat_smoke.mjs`.
|
||||
|
||||
### Task 1: Add Fake DeepSeek Response Planner
|
||||
|
||||
**Files:**
|
||||
- Create: `/home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/tools/browser_smoke/fake_deepseek_server.mjs`
|
||||
- Test: `/home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/tools/browser_smoke/fake_deepseek_server.test.mjs`
|
||||
|
||||
**Step 1: Write the failing test**
|
||||
|
||||
Add `node:test` coverage that proves the fake server planner:
|
||||
- returns Baidu tool calls for `打开百度搜索天气`
|
||||
- returns Zhihu navigate tool calls for `打开知乎搜索天气`
|
||||
- returns final summaries matching the existing smoke script expectations
|
||||
- rejects unsupported instructions clearly
|
||||
|
||||
**Step 2: Run test to verify it fails**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
node --test tools/browser_smoke/fake_deepseek_server.test.mjs
|
||||
```
|
||||
|
||||
Expected: FAIL because the helper module does not exist yet.
|
||||
|
||||
**Step 3: Implement the minimal helper**
|
||||
|
||||
The helper should:
|
||||
- inspect the latest user message / tool-result phase
|
||||
- emit OpenAI-compatible `choices[0].message.tool_calls` for the first round
|
||||
- emit `choices[0].message.content` for the second round
|
||||
- keep summaries identical to the current smoke assertions
|
||||
|
||||
**Step 4: Run test to verify it passes**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
node --test tools/browser_smoke/fake_deepseek_server.test.mjs
|
||||
```
|
||||
|
||||
Expected: PASS
|
||||
|
||||
### Task 2: Add DeepSeek Smoke Wrapper Script
|
||||
|
||||
**Files:**
|
||||
- Create: `/home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/tools/browser_smoke/run_deepseek_browser_smoke.mjs`
|
||||
- Modify: `/home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/README.md`
|
||||
|
||||
**Step 1: Write the failing wrapper expectation**
|
||||
|
||||
Add a small test or dry-run seam in the helper test that proves the wrapper environment includes:
|
||||
- `DEEPSEEK_API_KEY`
|
||||
- `DEEPSEEK_BASE_URL`
|
||||
- `DEEPSEEK_MODEL`
|
||||
|
||||
and points at the fake local server.
|
||||
|
||||
**Step 2: Run the targeted test to verify it fails**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
node --test tools/browser_smoke/fake_deepseek_server.test.mjs
|
||||
```
|
||||
|
||||
Expected: FAIL because no wrapper/env builder exists yet.
|
||||
|
||||
**Step 3: Implement the wrapper**
|
||||
|
||||
The wrapper should:
|
||||
- start the fake DeepSeek server
|
||||
- invoke:
|
||||
```bash
|
||||
node /home/zyl/projects/superRpa/src/chrome/browser/superrpa/sgclaw/sgclaw_chat_smoke.mjs
|
||||
```
|
||||
- inject `DEEPSEEK_*` into the child environment
|
||||
- print the child stdout/stderr through
|
||||
- stop the fake server on exit
|
||||
|
||||
**Step 4: Run the targeted test to verify it passes**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
node --test tools/browser_smoke/fake_deepseek_server.test.mjs
|
||||
```
|
||||
|
||||
Expected: PASS
|
||||
|
||||
### Task 3: Verify the Browser-Delivered DeepSeek Path
|
||||
|
||||
**Files:**
|
||||
- Verify: `/home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/tools/browser_smoke/*`
|
||||
- Verify: `/home/zyl/projects/superRpa/src/chrome/browser/superrpa/sgclaw/build_sgclaw.py`
|
||||
|
||||
**Step 1: Build the browser-delivered binary from the worktree**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
python3 /home/zyl/projects/superRpa/src/chrome/browser/superrpa/sgclaw/build_sgclaw.py \
|
||||
--manifest-path /home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/Cargo.toml \
|
||||
--out /home/zyl/projects/superRpa/src/out/KylinRelease/sgclaw
|
||||
```
|
||||
|
||||
Expected: PASS
|
||||
|
||||
**Step 2: Run the DeepSeek smoke wrapper**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
node tools/browser_smoke/run_deepseek_browser_smoke.mjs
|
||||
```
|
||||
|
||||
Expected:
|
||||
- existing browser smoke passes
|
||||
- `sgclaw` is forced down the compat runtime path through `DEEPSEEK_*`
|
||||
- Baidu and Zhihu tasks still complete
|
||||
|
||||
**Step 3: Re-run full Rust tests to guard against regressions**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
python3 /home/zyl/projects/superRpa/src/tools/crates/run_cargo.py test \
|
||||
--manifest-path /home/zyl/projects/sgClaw/claw/.worktrees/zeroclaw-core-refactor/Cargo.toml \
|
||||
--tests
|
||||
```
|
||||
|
||||
Expected: PASS
|
||||
Reference in New Issue
Block a user