TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 570 subscribers
Post #1318 6
safari-mcp 索引钳位 Bug:我猜错了根因

safari-mcp 作者三天前提交了一个严重 issue:用户的两个标签页被 AI 代理误导航,滚动位置、页面状态丢失。他自信地分析了根因——位置句柄导致标签归属丢失——并提议用注入 window.__mcpTabMarker 的稳定标识方案。

实际打开源代码后,他发现:这个哨兵方案早在 v2.8.3(April 14)就已经实现了。真正的 bug 藏在其下方四行:当标签索引超过窗口标签数时,代码不是丢弃索引(fail closed),而是将索引“钳位”(clamp)到 tabCount——即指向窗口最后一个标签,一个从未打开的、属于用户的标签。这个“proactive fix”代码段被日志装饰成“修复”,实质是猜答案。

这条 clamp 分支(Mar 31)比哨兵方案(Apr 14)更早,属于遗留启发式。哨兵方案添加时正确连入了两条 fail closed 分支,但这条“输入校验”样式的 clamp 被遗留了。作者总结:当添加更好机制时,旧启发式不会自动删除。任何将“我不知道”转换成合理值的代码,都是披着修复外衣的 fail open。

最终修复只是删除那几行钳位代码,改为 activeTabIndex = null; return null;——就像它上下两条分支一样。错误提示引导用户重新运行 safari_new_tab 来恢复。代价是那些此前“侥幸”成功的 session 会抛出异常,但作者认为:对于“绝不碰用户标签”的承诺,报错是正确答案,猜不是。


修复只是一行删除。作者把错误的根因分析留在 issue 里当警示,并提醒:如果你把同一个 bug 交给 AI 代理,它可能会执行你提出的早已过时的方案,而真 bug 依然存在。

#开发者 #工具 #safarimcp #MCP #Safari #AI #Bug #Javascript #macOS
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 30, 2026AMSI 绕过技术 2026 开发者指南 AMSI(Antivirus Malware Scan Interface)是 Windows 的恶意脚本扫描接口,覆盖 PowerShe…
  2. Sep 30, 2026AI Agent 为什么记不住事 和 AI Agent 协作时最容易注意到的一点是:它们很擅长回答问题,却不擅长记住昨天发生过什么。你可以和它长聊一轮,做出一堆决定、说明偏好、一起…
  3. Sep 30, 2026wpipe:面向 Python 开发者的轻量编排库 wpipe 是一个纯 Python 可嵌入的编排库,目标是让数据管道的开发回到「编辑—运行—调试」的快速循环,而不必为验证业务逻…
  4. Sep 29, 20262,916 个 AI 网站 8 月流量:转录与图生 3D 起飞 Anjin Radar 追踪了 2,916 个 AI 网站的月度访问量,数据截至 2026 年 9 月 28 日。访…
  5. Sep 29, 2026Python 虚拟环境其实是个软链接 在 Linux 和 macOS 上执行 python3 -m venv .venv,并不会复制一份 Python。venv 里的 python…
  6. Sep 29, 2026Will It Focus:相机自动对焦兼容性查询 Agent 这是一个面向摄影器材的自动对焦兼容性查询工具,但它真正的看点在于工程实现:如何让模型引用厂商原文时,保证引用的确实是…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →