bot 在 Cloudflare 上拥有一台属于你的 Linux 电脑:跑脚本、读写文件、导出图表。它算出的交易永远交回对话、由你审批,电脑本身碰不到任何钥匙。依据 docs/bot/computer.md 与 ADR-0254 ~ 0260。
五个阶段都已设计,第一版只交付 ①;/to-tickets 拆的就是这一段。
两个 DO 分工:BotOwner 管人、Run 与额度;BotComputer 管机器。容器出网全部被拦截过滤。
flowchart TB
C["客户端 web / desktop / mobile"]
O["BotOwner DO
所有者 · Run · 线程 · 平台额度"]
M["BotComputer DO(每所有者一个)
机器状态 · snapshot id · 并发计数 · alarm"]
K["容器 standard-1
/workspace · 无任何 key"]
E["出网 Worker
白名单 · 令牌桶 · 拒绝 HL /exchange 与 Berth API"]
R[("R2
工作区备份 · 产物 · 上传")]
S[("镜像仓库
rootfs snapshot 只留最新")]
C -- 线程流 --> O
C -. 查看器实时流(③起) .-> M
O -- "RPC: exec / 文件 / 结算 / reset" --> M
M -- this.ctx.container --> K
K -- 全部出网 --> E
M --> R
M --> S
一个所有者至多一台,名下 bot 共用工作区。只有三态,「没有电脑」不是状态。
stateDiagram-v2
[*] --> 启动中: 首个 computer__* 调用
启动中 --> 运行中: 就绪
运行中 --> 待机: 空闲 5 min,存 snapshot + R2
待机 --> 启动中: 只有 computer__* 调用能唤醒
运行中 --> 待机: 平台意外停机
打开线程、下载产物、上传文件都不唤醒机器。重置云电脑会删 snapshot 与备份,产物保留。
额度、并发、污染、回传都在这一条链上。
computer__exec("python analyze.py")bash -lc 跑命令(缺省 120 s,上限 600 s)脚本出网经出网 Worker:HL /info 放行,/exchange 与 Berth API 硬拦hl__place_orders([...]) → WriteIntent,因已污染 → 恒需审批审批卡加一行「本次对话用过云电脑,请逐项核对」5 个工具全部直出;新效果档 computer_local 只改工作区、不审批。
| 工具 | 做什么 | 效果档 |
|---|---|---|
computer__exec | 单次非交互进程,状态不跨调用,无后台进程 | computer_local |
computer__read_file | 带行号读文本,缺省前 2,000 行 | read |
computer__write_file | 整文件写入 | computer_local |
computer__edit_file | oldText → newText 精确替换 | computer_local |
computer__export_artifact | 复制到 R2,挂消息上供下载 / 预览(≤ 25 MB,每 Run ≤ 10) | computer_local |
上传不是工具:composer 附件 → /workspace/uploads/。③ 起再加 computer__browser_*,对外动作用 computer_effect 走人审。
BERTH_NETWORK、BERTH_ACCOUNT_ADDRESSES,单测断言computer_allowance_exhausted,可透支一条命令computerCircuit,托管聊天不受影响computer_reset / computer_banned规格 §12;/to-tickets 会细化并连阻塞边。
flowchart LR
S1["1 exec 曳光弹
DO + 容器 + 终端卡"] --> S2["2 出网 Worker"]
S1 --> S3["3 待机与恢复"]
S1 --> S4["4 文件工具 + 日志"]
S1 --> S5["5 计费 / 熔断"]
S1 --> S6["6 产物与上传"]
S3 --> S7["7 生命周期边缘
busy · Stop · 重置 · 硬删 · 封禁"]
S5 --> S7
S1 --> S8["8 意图回传
hl__place_orders"]
S4 --> S9["9 mobile 壳"]
S6 --> S9
hl__place_orders 动签名活路径:上生产前 web 与 mobile 各自 testnet QA。/to-spec(补用户故事、确认测试接缝)→ 同会话 /to-tickets。