ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

grok-build 0.2.26 变更解析:粘贴、认证、压缩与 web_fetch 的五项关键修复

2026/9/20 22:23:11 拓冰建站 浏览量
grok-build 0.2.26 变更解析:粘贴、认证、压缩与 web_fetch 的五项关键修复 人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clients【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址https://gitcode.com/gh_mirrors/gr/grok-build点击查看免费下载导读本文基于 grok-buildSpaceXAI 的 coding agent harness 与 TUI支持全屏、鼠标交互与扩展官方变更日志 0.2.26.md逐条解析该版本 Bug Fixes 中五项修复的技术背景、实现原理与影响面。读者将理解大段粘贴如何与压缩compaction及内存刷新memory flush协同避免上下文窗口错误API-key 用户运行grok agent --leader的认证路径压缩失败抑制suppression机制如何避免无限重试Windows 下命令被误拒绝的成因以及 web_fetch 在 HTML 清洗HTML cleaning时对根元素的保护逻辑。一、版本定位0.2.26 的修复清单概览0.2.26 是一个纯 Bug Fixes 版本全部变更标记为breaking_change: false见 0.2.26.json即不破坏既有配置与接口可安全升级。五项修复分别覆盖五个不同子系统编号修复主题所属子系统1大型粘贴内容不再触发上下文窗口错误或破坏压缩与内存刷新输入管线 / 上下文管理2API-key 用户可运行grok agent --leader不再被强制交互登录或超时认证 / Agent 生命周期3压缩在信用credit、大小size、认证auth失败时不再无限重试而是给出清晰消息压缩compaction4Windows PowerShell 与 cmd.exe 不再误拒绝包含的命令终端命令执行Windows5web_fetch 不再在页面根元素匹配清洗选择器时崩溃 CLI工具web_fetch下文按照修复背景 → 实现细节 → 验证方式的顺序逐条展开。二、大型粘贴内容保护上下文窗口与压缩/内存刷新链路2.1 修复背景此前用户向会话粘贴大量文本时如果内容体积超出模型上下文窗口预算会触发上下文窗口context-window错误更严重的是这种异常会干扰后续的自动压缩与压缩前内存刷新pre-compaction memory flush流程导致会话状态不可恢复。2.2 底层机制压缩前内存刷新从源码结构看压缩与内存刷新是一条被刻意编排的链路。在 compaction.rs 中SessionActor::maybe_pre_compaction_flush在压缩计数递增后会判断当前 token 总量是否满足刷新阈值再调用xai_grok_memory::flush::should_flush决定是否发起异步的内存快照刷新let compaction_count self.compaction.count.fetch_add(1, ...) 1; if !self.agent.borrow().compaction_policy().memory_flush_enabled { return; } let last_flush self.memory.last_flush_compaction.load(...); if xai_grok_memory::flush::should_flush( total_tokens, context_window, self.compaction.threshold_percent.get(), self.memory.flush_config, last_flush, compaction_count, ) { let snapshot self.snapshot_memory_flush_state().await; tokio::task::spawn_local({ ... }); }这段逻辑依赖total_tokens与context_window的准确估算。当粘贴内容异常庞大时若估算被破坏或触发路径未做防御压缩与刷新就可能中途失败。0.2.26 的修复即是从输入管线侧保证无论粘贴内容多大都先完成上下文预算的规整处理再进入压缩决策从而不再破坏压缩与内存刷新链路。2.3 对用户的影响向会话粘贴长日志、长配置文件或整段代码时不再报上下文窗口超限错误后卡死。压缩与内存刷新仍能按既有策略如threshold_percent正常工作。大型粘贴不再成为会话状态损坏的诱因。三、API-key 用户与grok agent --leader认证路径修复3.1 修复背景grok agent --leader用于启动 leader 模式的 agent 进程。此前 API-key--api-key用户启动该模式时会被强制要求交互式登录或者遭遇认证超时——即使他们已经提供了 API key。这是认证模式判断与 leader 进程生命周期之间的协调问题。3.2 认证模式与缺失会话告警从 auth_provider.rs 可以看到认证模式的区分/// Bearer token. None when no auth is configured (CI / --api-key headless). pub bearer: OptionString, /// uuidv5(NAMESPACE_OID, api_key), set only for AuthMode::ApiKey. pub api_key_id: OptionString,即 API-key 模式AuthMode::ApiKey下没有 bearer token也不存在交互登录会话。相应地在 agent_ops.rs 中会话缺失missing session的告警逻辑专门对 API-key 主机做了豁免struct MissingSessionCtx { has_session_key: bool, has_own_credentials: bool, is_session_based_auth: bool, preferred: OptionPreferredAuthMethod, } /// Warn only when a missing session is a real failure, not on API-key hosts. fn should_warn_missing_session(ctx: MissingSessionCtx) - bool { ... }注释明确指出仅在缺失会话是真正的失败时才告警API-key 主机不算Warn only when a missing session is a real failure, not on API-key hosts。这与 0.2.26 的修复方向一致API-key 用户携带自己的凭据BYOKbyok_from_models会选择带自有凭据的模型不应被强制拉入交互式登录流程。3.3 对用户的影响使用grok --api-key KEY agent --leader启动 leader 模式时不再弹出交互式登录引导。不再因等待登录而超时API-key 模式下凭据即 key无需额外会话。CI/无头headless环境下运行 leader 模式成为可能。四、压缩失败抑制告别信用/大小/认证错误的无限重试4.1 修复背景当自动压缩因为账户信用不足credit block上下文过大size认证失败auth等确定性原因失败时旧行为会陷入无限重试每轮对话都尝试压缩每次都失败浪费请求并制造噪音。0.2.26 改为失败后显示清晰消息并停止重试。4.2 实现细节SuppressReason 与抑制状态机这一修复在代码中体现为完善的抑制suppression机制。compaction.rs 定义了确定性失败的枚举pub(crate) enum SuppressReason { CreditBlock, Size, Auth, Schema, Other, }每个原因映射到不同的抑制状态/// - size | schema → SUPPRESS_STICKY: cleared only on a context-budget change. /// - credit_block → SUPPRESS_UNTIL_SUCCESS: wait for a model 200. /// - auth → SUPPRESS_AUTH: clear on login/token refresh (not 200 — over-window deadlock). /// - other → SUPPRESS_TURN: optimistic per-turn retry. fn suppress_state(self) - u8 { match self { SuppressReason::Size | SuppressReason::Schema SUPPRESS_STICKY, SuppressReason::CreditBlock SUPPRESS_UNTIL_SUCCESS, SuppressReason::Auth SUPPRESS_AUTH, SuppressReason::Other SUPPRESS_TURN, } }各抑制语义SUPPRESS_STICKYsize/schema粘性抑制只有上下文预算context-budget变化时才清除。既然会话过大不会自己消失反复重试没有意义。SUPPRESS_UNTIL_SUCCESScredit_block等待一次模型200响应才解除。信用恢复通常以一次成功请求为标志。SUPPRESS_AUTHauth登录或 token 刷新时清除。注释特别提醒不能等 200 响应否则会形成窗口外死锁clear on login/token refresh (not 200 — over-window deadlock)。SUPPRESS_TURNother乐观的单轮抑制每轮仍允许重试用于临时性故障。这些原因字符串credit_block、size、auth等通过as_str()暴露为稳定遥测值供 BQ/OTLP/dashboard 按此建索引因此被注释标记为不要重命名dont rename the strings。4.3 对用户的影响账户信用不足或认证失效时压缩会明确提示失败原因而不是无声地无限重试。会话大小超限时压缩被粘性抑制避免每一轮对话都浪费一次注定失败的压缩请求。登录/token 刷新后压缩能力自动恢复无需重启会话。五、Windows 命令执行不再被误判5.1 修复背景在 Windows 上通过 PowerShell 或 cmd.exe 执行包含的命令如cd /d C:\dir dir或常见的set X1 echo %X%时旧版本会错误地拒绝这些命令。是 Windows 命令解释器的命令分隔符/后台符号被误判会导致本可正常执行的命令无法运行。5.2 相关演进该问题在 0.2.26 中针对PowerShell 与 cmd.exe 不再误拒绝做了收口而在随后版本中继续演进0.2.27 的变更日志见 CHANGELOG.md补充了 Windows commands containingare no longer incorrectly rejected byrun_terminal_cmd 与 Backgroundoperator is now allowed by default in terminal commands说明修复覆盖到run_terminal_cmd工具以及终端命令中的后台运算符默认放行。5.3 对用户的影响在 Windows 下通过 TUI 执行含的命令不再被拒绝。命令分隔与后台执行语义按 PowerShell/cmd.exe 原生规则处理。对跨平台 hook 脚本如 PowerShell 脚本中展开环境变量同样受益。六、web_fetch 崩溃修复HTML 清洗对根元素的保护6.1 修复背景web_fetch是 grok-build 的客户端 URL 抓取工具负责将网页 HTML 转成 Markdown 供模型阅读。它使用scraper库解析 HTML并在转换前执行HTML 清洗HTML cleaning把导航、页眉、页脚、Cookie 横幅、侧边栏、广告等噪音节点从文档树中摘除。旧实现存在一个崩溃场景当页面根元素html自身的 class 或 id 恰好匹配清洗选择器例如html classadvert时清洗逻辑会把根节点也 detach导致文档树失去根元素后续序列化或转换操作崩溃进而拖垮整个 CLI。6.2 修复实现先记住根再清洗修复位于 client.rs 的clean_html函数fn clean_html(html: str) - String { let mut document Html::parse_document(html); // Never detach the root element itself - the broad selectors below can match // attributes on html (e.g. class...advert...), which would leave the // tree with no root element. Looked up fallibly so we never assume one exists. let root_id document.tree.root() .children() .find(|child| child.value().is_element()) .map(|node| node.id()); let selectors: VecSelector [ nav, header, footer, [class*cookie], [class*sidebar], [class*ad-], [class*advert], [id*cookie], [id*sidebar], [id*ad-], [id*advert], ] .iter() .filter_map(|s| Selector::parse(s).ok()) .collect(); selectors.iter().for_each(|selector| { document.select(selector) .map(|e| e.id()) .collect::Vec_() .into_iter() .for_each(|id| { if Some(id) root_id { return; // 根元素匹配选择器时跳过绝不 detach } if let Some(mut node) document.tree.get_mut(id) { node.detach(); } }); }); document.html() }关键点清洗前先通过tree.root().children().find(...)定位文档树的第一个元素节点记下root_id。清洗时若命中节点的 id 等于root_id直接return跳过避免 detach 根元素。根节点查找使用mapfallible lookup不假设根一定存在天然防御畸形 HTML。序列化改为对整个document调用html()而不是root_element()后者在树无根时可能 panic从序列化侧二次兜底。选择器均为宽泛匹配class*/id*子串匹配因此根元素命中选择器并非罕见情况这一保护是必要的。6.3 回归测试验证该修复附带了专门的回归测试同文件#[cfg(test)] mod tests#[test] fn clean_html_keeps_root_when_it_matches_selector() { let html r#html classadvertbodynavMenu/navmainContent/main/body/html#; let cleaned clean_html(html); assert!(cleaned.contains(Content)); assert!(!cleaned.contains(Menu)); }测试构造html classadvert根元素命中[class*advert]选择器的页面断言清洗后正文Content保留、噪音Menu被移除——即既清除了噪音又没有 detach 根元素。同模块还有clean_html_removes_boilerplate_tags与clean_html_removes_noisy_classes_and_ids两个测试覆盖常规清洗行为。6.4 延伸web_fetch 的配置面顺带说明 web_fetch 的可配置参数定义于 config.rs便于读者理解该工具的行为边界参数默认值说明cache_ttl_secs90015 分钟抓取结果缓存 TTLmax_cache_entries128最大缓存页面数timeout_secs60HTTP 请求超时max_content_length10 MB最大响应体字节数max_markdown_length100,000内联 Markdown 输出上限context_window_tokens128,000模型上下文窗口用于限制网页内容不超过 3% 预算allowed_domainsDEFAULT_ALLOWED_DOMAINS允许抓取的域名白名单如docs.python.org、developer.mozilla.org、vercel.com/docs等proxy_endpointNone可选出口代理设置后所有请求经代理转发allow_localfalse是否允许显式 loopbacklocalhost、127.0.0.0/8、::1默认 fail-closed同时工具级硬性安全边界不可配置MAX_URL_LENGTH 2000、MAX_REDIRECTS 10、固定 User-Agent。此外还有 SSRF 防护、base64 data URI 剥离防 token 膨胀等机制共同构成抓取 → 清洗 → 转 Markdown → 预算截断的完整链路。本次根元素保护修复正是这条链路中清洗环节的健壮性补强。七、升级建议与小结0.2.26 的五项修复覆盖了日常使用中最容易踩中的五类问题大段粘贴、API-key 无头运行、压缩失败重试、Windows命令、网页抓取崩溃。建议重度使用粘贴与长会话的用户尽快升级避免上下文窗口错误污染会话状态。CI/脚本化运行grok agent --leader的用户此版本起 API-key 模式可真正无头运行。Windows 用户升级后含的复合命令恢复原生语义。web_fetch 重度使用者此版本消除了根元素匹配清洗选择器的崩溃路径且已有回归测试兜底。若需查看完整变更上下文可对照 0.2.26.md、0.2.26.json 及聚合日志 CHANGELOG.md压缩抑制机制的完整状态机见 compaction.rsweb_fetch 的清洗与测试见 client.rs。赞分享人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clients【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址https://gitcode.com/gh_mirrors/gr/grok-build点击查看免费下载相关推荐QQ空间数据恢复三步把十年说说到Excel本地归档QQ空间数据恢复三步把十年说说到Excel本地归档 QQ空间数据恢复这件事GetQzonehistory 帮你走完全程手机 QQ 扫个码它就把没删掉的历人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clientsgrok-buildxai-grok-shell1.0.1 版本更新解析/rewind 语义变更、grok du 磁盘统计与 40 项修复全景grok buildxai grok shell1.0.1 版本更新解析/rewind 语义变更、grok du 磁盘统计与 40 项修复全景 本文基于人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clientsgrok-build xai-grok-shell 0.2.29 深度解读/rewind 跨压缩边界修复与大会话恢复加速grok build xai grok shell 0.2.29 深度解读 /rewind 跨压缩边界修复与大会话恢复加速 本篇文章基于 grok build人工智能AI 应用AI Agent代码智能体开发工具CLIMCP Clients上一篇Spree GraphQL API现代化数据查询接口设计下一篇Logto SMTP 邮件连接器logto/connector-smtp完全指南配置、模板体系与源码级原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考