# autowonder

AutoWonder 本地 agent runtime。安装后启动 daemon，持续轮询本地 assignment 队列并执行任务包。

## 连接 AutoWonder 服务

```bash
# Qoder CLI（模型使用 provider model ID；Context Window 使用固定档位）
npx -y autowonder@0.2.130 connect --ws-url <wss-endpoint> --token <executor-token> --executor-id <executor-id> --provider qoder --model qmodel_latest --reasoning-effort medium --context-window 260000

# Claude Code
npx -y autowonder@0.2.130 connect --ws-url <wss-endpoint> --token <executor-token> --executor-id <executor-id> --provider claude

# Codex CLI
npx -y autowonder@0.2.130 connect --ws-url <wss-endpoint> --token <executor-token> --executor-id <executor-id> --provider codex --model gpt-5.5 --reasoning-effort medium
```

`connect` 会安装当前 npm 包内置的 daemon，并使用页面生成的 WebSocket endpoint、Token 和执行器 ID 建立连接。选择 Qoder 时需要 Node.js 20+；runtime 会在缺少 `qodercli` 时自动通过 npm 安装，并在尚未登录时打开 Qoder 浏览器登录。Claude Code 和 Codex CLI 仍需提前安装并登录。runtime 会继承当前用户的 HOME、环境变量和 CLI 登录状态。

Qoder 的 Context Window 只能使用 `1000000`、`400000` 或 `260000`，Reasoning Effort 只能使用 `none`、`low`、`medium`、`high`、`xhigh` 或 `max`。建议直接复制 AutoWonder 执行器页面生成的命令，避免把模型展示名称误当成 provider model ID。

## 自动更新

安装首个支持自动更新的正式版本后，daemon 会直接查询 npm 的 `autowonder/latest`。首次检查会随机分散在启动后的 30～90 秒，之后约每 5 分钟检查一次并加入随机抖动；npm 临时错误会指数退避，HTTP 429/503 的 `Retry-After` 会被遵循。发现更高的稳定版本时，它会在后台下载 npm tarball，校验 SHA-512 SRI、包版本和平台二进制；只有在没有运行/恢复任务且结果 outbox 已收到服务端确认时，才会暂停接单、原子切换二进制并自动重启。启动失败会恢复上一个二进制。

用户不需要再次手工 stop、install 和 start。源码构建、开发版本、预发布版本和 Windows 默认不自动更新。

```bash
# 禁用自动更新
AUTOWONDER_AUTO_UPDATE=false npx -y autowonder@latest connect ...

# 调整检查周期或使用兼容的 npm registry
AUTOWONDER_AUTO_UPDATE_INTERVAL=1h \
AUTOWONDER_NPM_REGISTRY=https://registry.npmjs.org \
npx -y autowonder@latest connect ...
```

候选版本缓存在 `~/.autowonder/updates/`；当前二进制和单个回滚副本位于 `~/.autowonder/bin/`。`GET /health` 会返回 `daemonVersion`、`updateState`、`updateTarget` 和 `updateError`。

## 发布构建

`npm run build` 和发布脚本只接受没有已跟踪或未跟踪改动的 Git worktree。脚本会把准确的 release commit 克隆到仓库外的 detached checkout，再从该目录构建四个平台的 daemon。

每个产物都必须在 Go BuildInfo 中报告相同的完整 commit、`vcs.modified=false` 和目标平台；本机产物的 `--self-check` 还必须与 npm 包版本、短 commit 和平台一致。任一检查失败都会在替换 `vendor` 或执行 `npm publish` 前终止。

## 提交 assignment

daemon 默认轮询 `~/autowonder_workspaces/assignments/*.json`。队列里放 assignment JSON，不放 package zip；JSON 的 `taskPackageRef.downloadUrl` 应指向可下载的 OSS、HTTP 或本地 package 地址。

```bash
queue="$HOME/autowonder_workspaces/assignments"
mkdir -p "$queue"
cp ./assignment.json "$queue/.assignment.tmp"
mv "$queue/.assignment.tmp" "$queue/assignment.json"
```

也可以直接提交到本地 API：

```bash
npx -y autowonder@0.2.130 dispatch ./assignment.json
```

## 管理 daemon

```bash
npx -y autowonder@0.2.130 status
npx -y autowonder@0.2.130 stop
```

默认 API 是 `http://127.0.0.1:34989`，日志位于 `~/.autowonder/daemon.log`。npm 包不包含任何 agent、MCP 或服务端凭证。
