Files
openclaw-zero-token/ARCHITECTURE.md
sjhu 3585d40cd3 fix(web-providers): fix 13 web models + add E2E test suite + simplify UI
Web model fixes:
- ChatGPT: update send button selectors for 2026 UI
- Gemini: use innerText instead of textContent, tighten response selectors
- Kimi: fix Connect binary protocol parser (only accept append/set ops)
- Qwen CN: add credentials:"include" to fix 403 signature error
- Perplexity: rewrite client with Playwright native keyboard API,
  only send last user message instead of full system prompt
- DeepSeek: fix tool_call regex, add data.v array handling,
  XML argument fallback, JUNK_TOKENS Unicode variants

E2E test suite (scripts/):
- Two-phase runner: TUI first (L2 HTTP + L3 WebSocket), then WebUI (L5 Playwright)
- Anti-ban: adaptive delay with provider interleaving
- Message pool: 20 natural CN/EN messages, random selection
- HTML report output to reports/

Other:
- Simplify chat UI: remove session/agent selector, keep only model selector
- onboard webauth: auto-exit after auth completes (process.exit)
- Move vitest config to scripts/ directory

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 05:17:30 +08:00

3.6 KiB
Raw Permalink Blame History

OpenClaw / openclaw-zero-token CLI 架构流程

本文档描述本仓库中 命令行入口子命令执行 的主路径,便于对照源码(openclaw.mjsentry.tscli/)。与上游 OpenClaw 大架构说明见根目录 ARCHITECTURE.md

图表说明

  • 实线:主流程;虚线:按需加载(懒注册子命令)或异步分支。
  • 退出码0 成功;1 一般错误(校验失败、运行失败);2 根级参数解析错误(如 --container / --profile 组合非法Node 版本过低时 openclaw.mjs 直接 exit(1)
  • Zero Tokenonboard / configure 等流程可触发 src/zero-token/providers/* 与 Playwright/CDP向各厂商 网页 API 发起请求;凭证落盘于状态目录下的 auth.json 等(勿提交版本库)。
flowchart TD
  subgraph Entry["入口"]
    A["openclaw.mjs<br/>校验 Node >= 22.12"] --> B{"dist/entry.(m)js 存在?"}
    B -->|否| E1["报错: missing dist/entry<br/>exit 1"]
    B -->|是| C["entry.js: normalize argv<br/>可选 respawn 子进程"]
  end

  C --> D{"容器模式<br/>--container?"}
  D -->|解析失败| X2["stderr 提示<br/>exit 2"]
  D -->|是| DC["Podman/Docker 内<br/>再执行 CLI"]
  D -->|否| P{"--profile / --dev?"}
  P -->|解析失败| X2
  P -->|是| PE["写入 profile 隔离<br/>STATE/CONFIG 环境变量"]
  P -->|否| V{"仅 --version / -V / -v ?"}
  V -->|是| VF["输出版本 + 可选 commit<br/>exit 0"]
  V -->|否| H{"仅 --help / -h ?"}
  H -->|是| HF["outputRootHelp<br/>exit 0"]
  H -->|否| R["runCli: Commander 程序"]

  subgraph Run["runCli / Commander"]
    R --> PL["插件发现与注册<br/>extensions / plugins.allow"]
    PL --> REG["registerProgramCommands<br/>核心命令占位 + 懒加载"]
    REG --> DISPATCH{"匹配子命令"}
  end

  DISPATCH -->|onboard / configure / setup| WZ["向导 + 配置写入<br/>openclaw.json / auth"]
  DISPATCH -->|gateway / daemon| GW["网关进程 / RPC<br/>WebSocket + HTTP"]
  DISPATCH -->|agent / tui| AG["经 Gateway 或 TUI<br/>调用模型与工具"]
  DISPATCH -->|models / channels / ...| SUB["各 cli/* 模块<br/>读配置 / 调服务"]
  DISPATCH -->|doctor| DOC["健康检查与修复建议<br/>可 exit 0 但含告警"]
  DISPATCH -->|未知或参数错误| ERR["Commander 错误信息<br/>通常 exit 1"]

  WZ --> BROWSER["Playwright / Chrome CDP<br/>Zero Token 网页登录)"]
  WZ --> FS1["文件 I/O: 配置与 auth 存储"]
  GW --> NET["本机端口 / 对外 HTTP"]
  AG --> NET
  AG --> API["Provider: 网页 API 或<br/>OpenAI 兼容 / 本地 Ollama 等"]
  SUB --> FS2["读写配置与状态目录"]
  SUB --> NET

  style E1 fill:#f99
  style X2 fill:#f99
  style ERR fill:#f99
  style VF fill:#9f9
  style HF fill:#9f9

与源码的对应关系

阶段 主要文件
引导包装 openclaw.mjs
进程入口、版本/帮助快路径 entry.ts
CLI 主循环 cli/run-main.tscli/program/*
核心子命令注册 cli/program/command-registry.ts
扩展子命令 cli/program/register.subclis.tscli/program/subcli-descriptors.ts
Zero Token 网页侧 src/zero-token/providers/src/zero-token/streams/