React 界面收下任务
渲染层只拿到明确开放的桌面能力和 coordinator 端口。
X-Ray · Grok Bot 0.24.0
我检查了 Grok Bot 的桌面包,沿一条用户消息追踪界面、连接服务和云端 Host 的分工。Mac App 处理身份、界面与本机接管,Host 包含 Agent loop、工具和后台任务。本文把 0.16.0 的 source map 分析与本机 0.24.0 的字符串复核分别记录,避免把两个版本当成同一份源码。
grok-4.5。包里已有 Grok 4.6 支持,后端返回的 responseInfo.model 才能说明某一轮实际解析成了哪个模型。
com.anysphere.sand一条消息怎么走
图中按请求经过的组件排列。执行能否在笔记本关闭后继续,需要看云端任务与桌面连接的关系;本机命令的权限则是另一个入口。
渲染层只拿到明确开放的桌面能力和 coordinator 端口。
它处理 Cursor 登录、附件、设置、升级和本机权限。
主进程把一次性 MessagePort 交给界面,连接断开后重新收敛。
后端创建或找到共享云端电脑,再返回网关地址和短期凭据。
Host 组装上下文、工具和模型请求;未被其他设置覆盖时,检查的配置使用 Grok 4.5 作为兜底。
插件、浏览器、文件、终端和获准的本机动作完成实际工作。
执行主体在云端 Host。官方 FAQ 也确认后台 turn 与 routine 不依赖笔记本保持开启。
每个 Bot 有独立角色、会话和屏幕,共享文件、浏览器登录与云端凭据。
云端工具默认可用,本机命令另走反向通道和审批设置,默认应当逐次询问。
本机 0.24.0 补充检查
0.24.0 的第一方 bundle 没有公开源码映射,这次按压缩文件中的稳定字符串和字节位置检查。下面记录模型选择相关的客户端配置,不据此确定某个账号最终调用了哪个服务端模型。
grok-4.5,参数为 effort high、fast true 和 maxMode true。这只说明没有其他配置命中时客户端会请求什么,不能单凭这一行断定你账号里的每次对话都跑在 Grok 4.5。
显式会话模型、环境变量、实验设置与保存的默认值都排在它前面。
兼容分支和模型选择实验都已出现 4.6,内置兜底尚未跟着改成 4.6。
摘要流程可以走独立模型,不应拿它代替主对话模型来判断一次 turn。
电脑操作的后备选择关闭 thinking、使用 low effort。浏览器分支还受功能配置控制。
0.24.0 的周额度界面拿到使用百分比、下次重置时间、是否仍有额度和套餐标签。
当前包里没有记录一个固定的每周 token 总数,也没有把周额度百分比换算成 token 的公式。
GetSandUsageStatusResponse 返回 usage_percent、next_reset_timestamp_utc 与额度状态,没有 raw token 字段。usedCents 和 limitCents,它是金额口径。GetTokenUsage RPC 定义,渲染层没有消费它,也找不到 Grok Bot 周额度的调用链。官方 FAQ 也把这套共享周额度写成百分比。不同产品和任务消耗的计算量不同,因此不能从百分比可靠倒推一个固定 token 数。
SAND_AGENT_MODEL、实验或已保存默认值、内置 Grok 4.5 兜底。请求会带上 requestedModel,响应再给出已解析模型。包内证据位于 host-main.cjs 字节 3,729,286、5,745,415、10,944,249 与 11,698,298 附近。
源码证据层
下面的架构证据来自首次拆解的 0.16.0 安装包。它保留了 source map,因此可以回到源码文件和行号。0.24.0 的模型与额度补充来自当前已签名安装包,证据按压缩 bundle 的字节位置记录。
BrowserWindow 开启 contextIsolation,关闭 nodeIntegration。preload 只向页面公开 desktop 与 coordinatorPort,聊天界面通过 IPC 和 MessagePort 请求能力。
src/electron-main/main.cts 第 693 至 720 行src/electron-preload/preload.cts 第 142 至 161 行、第 806 至 815 行
BrokeredHostConnector 通过 GrokBotService.ensureSandBox 找到或创建云端电脑。返回值包含网关 URL、每 Box bearer、网络路由 token 和 VNC 地址。
src/electron-main/box/box-host-connector.ts 第 1 至 25 行、第 122 至 213 行
Host 网关提供 /api/<method>、/events、/health 等入口。敏感命令和事件流在配置 token 时必须携带 bearer,比较过程使用 timingSafeEqual。本机 shell 与 WebAuthn 反向通道缺少 token 会直接返回 401。
src/host/gateway-server.ts 第 216 至 227 行、第 583 至 725 行
SandHost.start 按依赖顺序启动插件,再装配 roster、runner、审批、MCP、持久会话和后台任务。用户发消息以后,turn-runtime 调用 runner,runner 负责模型流和工具循环。
src/host/sand-host.ts 第 140 至 270 行src/host/extensions/transcript/turn-runtime.ts 第 394 至 512 行
0.16.0 包内的默认选择写成 grok-4.5、maxMode true、effort high 和 fast true。设置、环境变量、实验配置和特定子 Agent 可以改写选择。0.24.0 仍保留同一兜底,也加入了 Grok 4.6 的兼容与选择入口。
src/shared/agents/agent-model.ts 第 10 至 38 行src/host/extensions/inference/cursor-session.ts 第 58 至 86 行、第 166 至 209 行src/shared/node/cursor-backend/cursor-inference.ts 第 413 至 485 行
每个 Agent 的数据目录下有 store.db 和对话 blob。SQLite 使用 WAL,并在快照前检查 checkpoint,避免复制一个落后的主库。根目录可以由运行环境重定位,所以桌面端与云端 Host 可以共用同一套路径规则。
src/host/extensions/session/session-paths.ts 第 10 至 51 行src/host/storage/store-db.ts 第 47 至 109 行
可信边界
我的判断
包内的连接代码和 Host 模块对应一套远程执行结构:桌面端连接 Linux Box,Host 内再组织 runner、工具、会话存储和后台任务。模型选择仍要经过会话配置和后端解析,不能只看兜底字符串。
实际使用时,我会先区分云端共享文件、浏览器登录和本机反向通道。允许某个云端任务运行,不代表也授权它操作本机;一次任务可执行,也不代表所有打包模块都已向该账号开放。
来源
/Applications/Grok Bot.app · 版本 0.24.0 · 主程序 SHA-256 c958d80cdd126cb95f1d60ef6bf451037a7569994a75a6c06b2863ae0781250a · app.asar SHA-256 41f7d5008db4edcb198d9e466c9c1e776bb8a75a7651951257ff9a4f885a4540
本次检查使用 PR #174 head c349718d58d171c8721bbaac12b7ee0a01a51639 的静态应用分析、证据和双层解释规则。