设计哲学:用文件系统替代状态机,把浏览器的状态和操作抽象为文件系统和 CLI 命令的一种 Skill 设计模式。
将任意网站的浏览器操作抽象为三个 CLI 命令的 Skill。
核心抽象:三个动词
$ websim auth-probe → "我还能用吗?"
$ websim discover → "这个网站怎么交互?"
$ websim request → "帮我做这件事。"
传统浏览器自动化里,登录态是一个隐式的、易丢失的状态——关掉浏览器就没了。
Web-Simulator 把状态物化为文件:
# 登录一次,生成文件
~/.web-simulator/.session/sites/bigmodel.cn/default/
├── cookies.json # "这是我的身份"
└── meta.json # "这是关于身份的说明"
# 之后所有命令自动读取这些文件
# 用户不需要关心 "怎么带着 cookie"——CLI 替你管了
这和 Git 的 .git/ 目录、Docker 的 docker volume 是一样的思想——把易失的状态固化为可复用的文件,然后用 CLI 操作这些文件。
工作流演进的三个台阶:
台阶 1: 点来点去
┌─────────────┐
│ 打开浏览器 │ ← 人在操作,不可复现
│ 登录、导航、点击 │
└─────────────┘
台阶 2: 浏览器脚本化 (Playwright)
┌─────────────┐
│ page.click() │ ← 程序操作,可复现
│ page.fill() │ 但依赖 DOM,一改就崩
└─────────────┘
台阶 3: CLI 化 (web-simulator 定位)
┌─────────────┐
│ websim check │ ← 命令操作,不依赖 DOM
│ websim buy │ 登录态透明、API 优先、可调度
└─────────────┘
关键设计原则
三层架构:
┌────────────────────────────────────────────────┐
│ SKILL.md(声明层) │
│ 触发条件 · 输入规范 · 安全红线 · Gotchas │
├────────────────────────────────────────────────┤
│ scripts/websim_router.js(路由层) │
│ 统一入口 → 分发到具体脚本 → 失败回退到浏览器 │
├──────────┬──────────┬──────────┬───────────────┤
│ auth │ discover │ request │ lib/(基础设施)│
│ _probe │ _flow │ _api │ │
│ .js │ .js │ .js │ │
└──────────┴──────────┴──────────┴───────────────┘
基础设施(lib/):
| 模块 | 职责 | 关键能力 |
| ------------------ | ---------- | -------------------------------------- |
| constants.js | 全局常量 | AUTH_STATES、DATA_ROOT、站点配置 |
| session-store.js | 会话存储 | 按 <domain>/<env> 读写 cookies.json |
| api-session.js | API 会话 | 加载/验证/刷新登录态,自动 CDP 恢复 |
| cdp-session.js | CDP 连接 | 启动隔离 Chrome、连接调试端口、导航/读 cookie |
| web-api.js | HTTP 客户端 | 带 cookie/auth 的 GET/POST,支持 auth-probe |
| wrapper-store.js | Wrapper 存储 | 按 workflow 管理 api-discovery.json 等 |
| args.js | 参数解析 | --base-url / --auth-probe / --env 等 |
| fallback-policy.js | 降级策略 | API 失败 → 浏览器兜底(当前注册表为空) |
session生命周期:
┌──────────┐
│ 加载存储 │
│ cookies │
└────┬─────┘
▼
┌───────────────┐
│ auth-probe │ ← 调 /api/me 验证
│ 返回状态 │
└───┬───┬───┬───┘
│ │ │
authenticated expired sso_required
│ │ │
▼ ▼ ▼
直接用 CDP刷新 启动Chrome
│ 手动登录
▼ │
保存cookies ─┘