Files
picoclaw/cmd/picoclaw-launcher/README.zh.md
T
Guoguo 5e028a847c feat: add picoclaw-launcher with web UI for configuration and gateway management (#904)
A standalone web-based tool for managing picoclaw configuration, OAuth
authentication providers, and gateway process lifecycle. Features include
a sidebar layout with i18n (en/zh) and theme support, real-time gateway
log streaming, startup prerequisites checks, and Windows icon embedding.

Co-authored-by: wj-xiao <meetwenjie@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:38:38 +08:00

5.5 KiB
Raw Blame History

PicoClaw Launcher

Warning

该项目属于临时解决方案,后续会重构并提供完整的 Web 服务,因此该目录下的接口并不稳定。

PicoClaw 的独立启动器,提供可视化 JSON 配置编辑和 OAuth Provider 认证管理。

功能

  • 📝 配置编辑 — 侧边栏式设置 UI,支持模型管理、通道配置表单和原始 JSON 编辑器
  • 🤖 模型管理 — 模型卡片网格,可用性状态显示(无 API Key 时灰色),主模型选择,增删改查,必填/选填字段分离
  • 📡 通道配置 — 12 种通道类型(Telegram、Discord、Slack、企业微信、钉钉、飞书、LINE、WhatsApp、QQ、OneBot、MaixCAM 等)的表单化配置,附带文档链接
  • 🔐 Provider 认证 — 支持 OpenAI (Device Code)、Anthropic (API Token)、Google Antigravity (Browser OAuth) 登录
  • 🌐 嵌入式前端 — 编译为单一二进制文件,无需额外依赖
  • 🌍 国际化 — 中英文切换,首次访问自动检测浏览器语言
  • 🎨 主题 — 亮色 / 暗色 / 跟随系统,偏好保存在 localStorage

快速开始

# 编译
go build -o picoclaw-launcher ./cmd/picoclaw-launcher/

# 运行(使用默认配置路径 ~/.picoclaw/config.json
./picoclaw-launcher

# 指定配置文件
./picoclaw-launcher ./config.json

# 允许局域网访问
./picoclaw-launcher -public

启动后在浏览器中打开 http://localhost:18800

命令行参数

Usage: picoclaw-launcher [options] [config.json]

Arguments:
  config.json    配置文件路径(默认: ~/.picoclaw/config.json

Options:
  -public        监听所有网络接口(0.0.0.0),允许局域网设备访问

API 文档

Base URL: http://localhost:18800

静态文件

GET /

提供嵌入式前端页面(index.html)。


Config API

GET /api/config

读取当前配置文件内容。

Response 200 OK

{
  "config": { ... },
  "path": "/Users/xiao/.picoclaw/config.json"
}

PUT /api/config

保存配置。请求体为完整的 Config JSON。

Request Bodyapplication/json

{
  "agents": { "defaults": { "model_name": "gpt-5.2" } },
  "model_list": [
    {
      "model_name": "gpt-5.2",
      "model": "openai/gpt-5.2",
      "auth_method": "oauth"
    }
  ]
}

Response 200 OK

{ "status": "ok" }

Error 400 Bad Request — 无效 JSON


Auth API

GET /api/auth/status

获取所有 Provider 的认证状态和进行中的 Device Code 登录信息。

Response 200 OK

{
  "providers": [
    {
      "provider": "openai",
      "auth_method": "oauth",
      "status": "active",
      "account_id": "user-xxx",
      "expires_at": "2026-03-01T00:00:00Z"
    }
  ],
  "pending_device": {
    "provider": "openai",
    "status": "pending",
    "device_url": "https://auth.openai.com/activate",
    "user_code": "ABCD-1234"
  }
}

status 可选值: active | expired | needs_refresh

pending_device 仅在有进行中的 Device Code 登录时返回。


POST /api/auth/login

发起 Provider 登录。

Request Bodyapplication/json

{ "provider": "openai" }

支持的 provider 值: openai | anthropic | google-antigravity

OpenAI (Device Code Flow)

返回 Device Code 信息,后台自动轮询认证结果:

{
  "status": "pending",
  "device_url": "https://auth.openai.com/activate",
  "user_code": "ABCD-1234",
  "message": "Open the URL and enter the code to authenticate."
}

用户在浏览器中打开 device_url 并输入 user_code。认证完成后通过 GET /api/auth/statuspending_device.status 变为 success 通知前端。

Anthropic (API Token)

需在请求中附带 token

{ "provider": "anthropic", "token": "sk-ant-xxx" }

Response:

{ "status": "success", "message": "Anthropic token saved" }
Google Antigravity (Browser OAuth)

返回授权 URL,前端打开新标签页:

{
  "status": "redirect",
  "auth_url": "https://accounts.google.com/o/oauth2/auth?...",
  "message": "Open the URL to authenticate with Google."
}

认证完成后 Google 回调至 GET /auth/callback,自动保存凭据并重定向回 picoclaw-config 页面。


POST /api/auth/logout

登出 Provider。

Request Bodyapplication/json

{ "provider": "openai" }

传空字符串或省略 provider 则登出所有 Provider。

Response 200 OK

{ "status": "ok" }

GET /auth/callback

OAuth Browser 回调端点(Google Antigravity 专用),由 OAuth Provider 重定向调用,非前端直接使用

Query Parameters:

  • state — OAuth state 校验
  • code — 授权码

认证成功后重定向到 /#auth

Process API

GET /api/process/status

获取 picoclaw gateway 进程的运行状态。

Response 200 OK (运行中)

{
  "process_status": "running",
  "status": "ok",
  "uptime": "1.010814s"
}

Response 200 OK (未运行)

{
  "process_status": "stopped",
  "error": "Get \"http://localhost:18790/health\": dial tcp [::1]:18790: connect: connection refused"
}

POST /api/process/start

在后台启动 picoclaw gateway 进程。

Response 200 OK

{
  "status": "ok",
  "pid": 12345
}

POST /api/process/stop

停止正在运行的 picoclaw gateway 进程。

Response 200 OK

{
  "status": "ok"
}

测试

go test -v ./cmd/picoclaw-launcher/