ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

grok-build 0.2.77 版本详解:wrap 图片粘贴、等待状态可视化、双击选词与信用额度提示

grok-build 0.2.77 版本详解:wrap 图片粘贴、等待状态可视化、双击选词与信用额度提示 grok-build 0.2.77 版本详解wrap 图片粘贴、等待状态可视化、双击选词与信用额度提示【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-buildgrok-build 是 SpaceXAI 推出的编程智能体终端TUI以全屏、鼠标交互和可扩展性为设计目标。本文基于仓库内 0.2.77 变更日志逐条拆解该版本引入的三项新能力与一项错误处理优化并结合xai-grok-pagerTUI 主程序与xai-grok-shell的源码实现说明每一项功能背后的工作机制、配置方式和底层原理。读完本文你将掌握grok wrap远程会话中如何粘贴宿主剪贴板图片、回合状态转圈如何精确表达 agent 正在等待什么、双击选词功能如何开启与使用以及信用额度用尽时界面如何按计费模式给出不同的升级引导。版本概览0.2.77 改了什么0.2.772026-06-30共包含 4 项变更其中 3 项为功能增强、1 项为缺陷修复类别变更内容涉及模块Feature通过grok wrap运行命令时支持从本地剪贴板粘贴图片wrap 粘贴通道wrap_clipboard_image.rsFeature回合状态转圈turn status spinner现在显示 agent 正在等待什么响应、子代理、任务输出等回合状态行turn_status.rs、tracker.rsFeature双击选词成为“Text selection”设置中可发现的可选项并与高亮行为保持同步文本选择设置与提示settings/defs.rs、word_select.rsBug Fix信用额度错误现在根据计费类型显示更清晰的升级或购买积分引导文案计费分发billing.rs、credit_limit.rs下面分别深入解读每一项。通过 grok wrap 从本地剪贴板粘贴图片背景远程会话中的剪贴板困境在grok wrap包装的远程会话里剪贴板被分为“宿主侧”和“远程侧”。当远程grok进程尝试粘贴时如果本地剪贴板中既没有图片、也没有文本或文件 URL即一次“完整远程粘贴 miss”宿主侧即使有图片也无法直接送达远程。0.2.77 之前这条路径是断的而本次更新让“运行在grok wrap之下的命令”也能把本地剪贴板图片贴进会话。核心实现位于 wrap_clipboard_image.rs共 333 行含完整单元测试文档注释明确描述了这条通道的定位grok wrap模式下由 wrap 进程在 PTY 上代为中转宿主剪贴板图片。工作机制私有 OSC 请求 bracketed paste 注入整条通道分三步源码注释给出了清晰的调用链远程发起请求当远程侧发生“完整粘贴 miss”本地无图片、无文本、无文件 URL且 OSC 52 接收端处于激活状态osc52_sink_active()即 wrap 已设置GROK_OSC52_SINK/LC_GROK_OSC52_SINK环境变量时远程 pager 会在 stderr 上写出一条私有 OSC 序列ESC ] 999;GrokWrapClipboardImage? BEL对应代码中的REQUEST_BODY b999;GrokWrapClipboardImage?与request_osc_bytes()wrap_clipboard_image.rs。wrap 应答宿主剪贴板wrap 进程收到该私有 OSC 后读取宿主剪贴板图片将其编码进一个bracketed paste 帧ESC [ 200~...ESC [ 201~写入 PTY 的 stdin走正常的“粘贴芯片”paste-chip路径送达远程。远程解码远程侧通过try_decode_wrap_host_image_paste()解析帧内容得到WrapImagePaste::Image(ImageData)或WrapImagePaste::NoImage。帧格式与魔数宿主图片帧与无图片帧各有一个魔数前缀均包裹在 bracketed paste 帧内# 成功携带图片mime 为 MIME 类型base64 为图片数据的 Base64 编码 ESC [ 200~ GROK_WRAP_IMG \n mime \n base64 ESC [ 201~ # 宿主剪贴板没有图片 ESC [ 200~ GROK_WRAP_NONE ESC [ 201~对应常量wrap_clipboard_image.rsMAGIC_IMG GROK_WRAP_IMG成功携带图片MAGIC_NONE GROK_WRAP_NONE宿主无图片必须被当作“无图”处理绝不能作为文本插入解码上限MAX_WRAP_IMAGE_BYTES 20 MiB注释说明Retina 截图常有数 MB此前 4 MiB 过小会导致图片静默退化为MAGIC_NONE20 MiB 可覆盖典型截图。解码前会先按 Base64 长度估算解码后体积做大小检查approx_decoded b64.len() * 3 / 4超限直接返回NoImage避免先分配再解码。单元测试oversized_b64_rejected_before_decode验证了这一提前拒绝逻辑。大小限制与降级策略当宿主图片超过 20 MiB 预算时fit_image_for_wrap()wrap_clipboard_image.rs会执行两阶段降级保证截图仍然送达而不是静默失败JPEG 质量阶梯重压缩依次尝试质量 85 → 70 → 55 → 40 → 25 的 JPEG 编码只要某一档结果不超过预算即返回image/jpeg半分辨率兜底若质量压缩仍超限将图片缩放到一半宽高后以质量 60 的 JPEG 编码作为最后手段。解码端设置了防护MAX_WRAP_DECODE_PIXELS 48 MP作为像素面积上限约 48MP足以容纳 Retina 截图同时避免解压炸弹image::Limits同时限制最大宽高 16384 与最大分配内存。测试oversized_image_encodes_as_none验证了“随机字节无法 JPEG 压缩 → 输出MAGIC_NONE帧”的兜底行为。信任模型与安全边界源码头部注释明确说明了该通道的信任假设应答私有请求 OSC 等价于对包装会话执行一次剪贴板图片读取——任何能向 PTY 写内容的进程包括内层grok之外的进程都可能请求宿主粘贴板。这在grok wrap场景下是可接受的因为用户在自己主机上主动选择了 wrap应答内容只留在自己的会话内且远程只在osc52_sink_active()wrap 已设置 OSC 52 接收端时才发起请求。注释同时警告不要把这一模式推广到不受信任的多路复用器除非显式加入白名单。测试验证wrap_clipboard_image.rs 内置 10 个单元测试覆盖图片帧编解码往返encode_decode_roundtrip_image、无图帧往返、魔数字面量识别、普通文本/空串/前缀残缺帧不被误判garbage_is_not_wrap_paste、畸形帧被消费为NoImage而非文本、超大 Base64 解码前拒绝、超大图片退化为NONE、请求 OSC 字节结构ESC ] body BEL、以及“禁用 sink 时不写请求”等负例。回合状态转圈agent 正在等待什么一目了然0.2.77 之前回合状态转圈turn status spinner只表达“忙”与“不忙”本次更新让转圈直接说出 agent 在等什么。对应实现集中在 turn_status.rs回合状态行渲染约 1745 行含测试与 tracker.rs等待原因解析。等待原因分类核心是WaitingReason枚举tracker.rs它把“阻塞在什么上”显式建模为五种原因变体含义典型场景Model等待模型重新开始流式响应prompt 发出后等首个 token或工具完成后等待下一次推理Subagent阻塞在前台子代理上task/spawn_subagent运行中TaskOutput阻塞在轮询/等待后台任务输出上get_command_or_subagent_output/get_task_outputTasksComplete等待一个或多个后台任务全部结束wait_commands_or_subagents/wait_tasksSleep显式睡眠/等待Await/Sleep …注意Subagent与TaskOutput的差异Subagent.display是已组装好的 spinner 短语如Subagent (desc): activity由视图层从子代理注册表解析而TaskOutput.subject只是裸主题词由label()统一装饰。转圈文案与遥测标签每种等待原因都有对应的用户可见文案与稳定的遥测标签WaitingReason::label()与as_telemetry_label()tracker.rs等待原因转圈文案遥测标签ModelWaiting for response…waiting_modelSubagentWaiting on subagent…或子代理描述 …waiting_subagentTaskOutput无主题Waiting on task output…waiting_task_outputTaskOutput有主题{subject}…如compile release…waiting_task_outputTasksCompleteWaiting on tasks…waiting_tasks_completeSleepSleeping…waiting_sleep主题词会先经clamp_activity_subject()截断MAX_ACTIVITY_SUBJECT_CHARS 40字符保证转圈行不被超长描述撑破。单测waiting_reason_renders_specific_labelturn_status.rs逐一断言了上表全部文案。可发送等待sendable wait转圈状态下的输入语义转圈不仅“告诉”用户等待内容还影响输入行为is_sendable_wait()turn_status.rs判定当前等待是否属于“shell 会在用户发消息时立即中止”的阻塞等待。TaskOutputtimeout_ms 0的阻塞调用、TasksComplete、Sleep、前台Subagent等待都属于可发送等待——此时回车能立刻打断旧回合并处理新消息而Model等待被排除在外因为模型正在产出回合此时输入只能排队。Watchers空闲期间仍在后台运行的工作等待可视化还覆盖了“agent 空闲但后台仍有活”的场景。Watchers结构turn_status.rs统计五类能唤醒 agent 的后台工作后台命令commands、monitor任务、定时/loop任务、后台子代理subagents与工作流workflows。渲染时生成形如1 command · 2 monitors · 1 loop · 1 subagent still running的常驻提示still_running_label()让“做完一轮但还有后续”的状态在视觉上一眼可读。awaitable_work()进一步区分哪些工作可被wait_tasks/get_task_output类阻塞等待消解命令、监视器、子代理/loop与工作流不算。双击选词成为可发现、可配置的选项三种选择保持模式双击选词能力挂在keep_text_selection设置下定义见 settings/defs.rs这是一个由 shell 持有SettingOwner::Shell、归类在 Mouse 下的枚举设置三种取值取值行为flash应用内选区短暂闪现后消失编译期默认值hold应用内选区保持显示word_select双击对话文本时选中并复制一个单词设置描述原文点明了核心语义“应用内选区在屏幕上保留多久以及双击做什么折叠 vs. 选中并复制一个单词”同时提醒对于终端或多路复用器自身的选区按住 Shift 拖拽走原生复制。这正是 0.2.77 中“双击选词与高亮行为保持同步”所指——word_select模式下双击行为与高亮选中行为绑定为同一动作而不是各说各话。双击后的引导提示可发现性为了让用户发现这个新选项word_select.rs 实现了一个临时提示ephemeral tip当用户以默认的flash/hold模式双击文本、走了 fold/nav 路径时提示会在转圈区域附近出现——Want double-click to select?/settings→ Text selection ·CtrlY: enable now提示细节源码常量可证接受和弦为CtrlYWORD_SELECT_ACCEPT_CHORD在提示存活期内按下会直接翻转keep_text_selection为word_select提示消失后 CtrlY 恢复为常规语义prompt yank且任何 prompt 编辑都会提前撤回提示避免长 TTL 遮蔽 kill→yank 序列提示寿命约 600 tickWORD_SELECT_TIP_TICKS按 30fps 动画节奏约 20 秒对比默认约 3 秒的短提示因为它是一则“读 → 决定 → 按键”的行动号召每个会话内最多显示 3 次WORD_SELECT_TIP_SEEN_CAP内存计数。相关上下文提示开关与之配套的还有contextual_hints.word_select设置settings/defs.rs默认取ui_default.contextual_hints.word_select未配置时为 true用于控制该双击选词提示的显示。信用额度错误按计费类型给出清晰引导错误识别402 与 403 的判定0.2.77 修复的核心是“信用额度错误提示不清晰”。识别函数is_credit_limit_error()billing.rs的判定规则HTTP 402Payment Required在该界面上一律视为信用/额度封锁不做消息过滤HTTP 403仅当响应体包含run out of credits旧版计费的措辞时才算额度错误其他 403内容安全、ZDR 等被排除无独立状态码如重试通知把status 402/status 403内嵌在消息体里按消息体中的status 402或status 403 旧措辞匹配。计费模式与升级文案命中额度错误后提示文案由计费模式决定。credit_limit_upsell_mode()billing.rs优先取显式的is_unified_billing_user字段模式判定条件引导动作UnifiedCredits统一积分池is_unified_billing_user Some(true)或字段缺失且非 PAYG购买预付费积分Buy more creditsLegacyPayg { enabled: true }显式 legacy或pay_as_you_go为真存在按需消费上限提高 PAYG 消费上限Increase limitLegacyPayg { enabled: false }显式 legacy 且未启用按需消费开启按需付费Enable pay-as-you-go文案示例billing.rs统一积分模式显示You hit your weekly limit.Buy more credits“Purchase credits to keep using Grok Build”PAYG 已启用显示Youve hit your spending cap.Increase limit。升级引导页 URL 也按场景区分升级订阅走https://grok.com/supergrok?referrergrok-build管理按需消费/购买积分走https://grok.com?_susage常量UPSELL_URL_UPGRADE/UPSELL_URL_PAYG。最高档位用户的“内联卡片”分支对于已处于最高档位SuperGrok Heavy的用户继续弹“升级档位”就没有意义了。is_max_tier()billing.rs将订阅档位归一化小写 空格转下划线后与supergrok_heavy精确匹配未知档位一律按非 max-tier 处理保证低档位用户始终能看到升级选项。分支行为open_credit_limit_upsell()billing.rs非 max-tier弹出 QA 问题弹窗给出两个选项“Upgrade tier” 购买积分或 PAYG每个选项的id携带目标 URL提交处理与位置无关max-tier不再弹窗改为在滚动回放scrollback中推送内联卡片CreditLimitBlockcredit_limit.rs。卡片包含加粗警示色标题、按计费模式定制的正文IncreasePaygLimit→ “You can continue by increasing your spending limit.”EnablePayg→ “You can continue by enabling pay-as-you-go usage.”PurchaseCredits→ “You can continue by purchasing more credits.”以及指向 usage/billing 页的可点击链接。同时每次展示都会通过xai_grok_telemetry记录CreditLimitUpsellShown含surface字段区分InlineCard/QuestionModal与用户选择的CreditLimitChoice便于追踪不同计费模式的转化。状态栏里的信用实时视图与错误提示配套的是状态栏信用显示。credit_bar.rscredit_bar.rs从x.ai/billingagent 扩展拉取真实数据CreditBalance携带pay_as_you_go、剩余预付费积分以“美分”为单位的符号数账单侧用负值记账与is_unified_billing_user等字段。信用条始终显示用量百分比与已知的下次重置时间积分余额已知时展示剩余额度并依据计费模型给出低余额警告积分模式在余额低于阈值、未开自动充值、且积分确实在被消耗用量 100% 时不告警等组合条件下提示Credits left: $X测试集credit_bar.rs 内嵌约 20 个用例逐项覆盖了“无余额隐藏积分块”“自动充值无上限永不警告”“负数美分处理”“积分警告优先于用量警告”等边界。小结grok-build 0.2.77 是一次聚焦“可感知性”的迭代grok wrap图片粘贴打通了远程会话与宿主剪贴板的图片通道私有 OSC 请求 bracketed paste 帧 20 MiB 预算与 JPEG 降级回合状态转圈从“忙/闲”升级为精确描述等待对象Model/Subagent/TaskOutput/TasksComplete/Sleep五种原因各有文案与遥测标签双击选词作为keep_text_selection word_select的可发现选项与高亮行为同步并提供 CtrlY 一键启用提示信用额度错误则按统一积分 / 传统 PAYG / 最高档位三种计费形态分别给出“购买积分”“提高上限”“开启按需付费”乃至内联卡片的差异化引导。以上能力在 wrap_clipboard_image.rs、turn_status.rs、tracker.rs、settings/defs.rs、billing.rs 等源码中均有完整实现与测试可查感兴趣的读者可直接在仓库中继续深入。【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表