拆解dots源码:一个入口如何精确pin住invisible-playwright-mcp?命令组与.env的工程细节
拆解dots源码一个入口如何精确pin住invisible-playwright-mcp命令组与.env的工程细节【免费下载链接】dotsOpen-source dots for the web: an AI agent with its own browser, one that does not get blocked.项目地址: https://gitcode.com/gh_mirrors/dots140/dotsdots 是一个自带浏览器的开源 AI agent浏览器Agent浏览器引擎在 C 层打过补丁页面上找不到任何自动化痕迹因此很难被网站拦截。更特别的是它的全部产品逻辑只有 20 行不到的入口代码核心工作是把invisible-playwright-mcp精确 pin 在0.70.2。本文拆解 src/dots/cli.py 的每一行回答两个问题为什么是精确版本锁定exact pin而不是以及为什么必须走命令组而不能直接调ui命令。项目全貌一个20行入口的浏览器Agent 整个仓库只有一个极小的包每个文件各司其职文件作用src/dots/init.py一句话定位dots 是 invisible-playwright-mcp 的界面只是用了人们会搜的那个名字src/dots/main.py支持python -m dots启动仅 2 行src/dots/cli.py唯一的真入口main()函数体只有 4 行tests/test_entry.py4 个测试是pin 升级的验收关卡pyproject.toml版本 pin、命令注册、pre-push 检查配置安装后dots是一条指向main()的可执行命令注册在 pyproject.toml[project.scripts] dots dots.cli:main精确pin依赖为什么写0.70.2而不是0.70.2pyproject.toml 的依赖行上有一段毫不留情的注释⛔ THE WHOLE PRODUCT IS THIS LINE.dots是 invisible-playwright-mcp 换了名字的界面。关键在于cli.py用的不是invisible-playwright-mcp的公开 API而是直接调用了它的命令组command group——那并不是一个发布出来的稳定接口。由此推出两条工程结论若写0.70.2上游某天发布 0.70.3 并改了命令组形态所有新装环境会静默拉到新版dots直接崩写0.70.2精确 pin 后解析器永远不会替你捡新版本。升级 pin 是一次有意识的人工动作改版本号 → 跑 tests/test_entry.py → 全绿再合入。一句话总结精确 pin 买的是升级时机由我决定的契约权。命令组 vs ui命令.env 到底在哪里被读取 cli.py 的main()函数体只有 4 行SUBCOMMAND ui def main(argvNone): from invisible_playwright_mcp.cli import main as group args list(sys.argv[1:] if argv is None else argv) group(args[SUBCOMMAND, *args], prog_namedots)里面藏着两个容易踩坑的细节参数头部强制插一个ui。dots 本质上就是invisible-playwright-mcp ui别无其他后面的所有选项都属于界面本身所以dots --help列出的选项与ui --help完全一致。调的是命令组不是命令。模块 docstring 说得很直白.env文件的读取、以及旧 session 目录的迁移都发生在命令组这一层。如果绕过组直接调ui这两步全被跳过——写在.env里的 OpenRouter key 会悄悄找不到程序看起来没配置。prog_namedots同样讲究帮助信息的用法行显示Usage: dots而不是内部包名对外品牌与内部实现解耦。四道测试关卡升级pin时的验收清单 ✅tests/test_entry.py 的 4 个测试就是命令组哪天变了形状必有一个变红的判据测试级别守护什么group 被带着 ui 调用unitmock 掉命令组断言参数恰为[ui, --port, 9000, --headed]且prog_name是dots。若有人把 dots 改成直调ui其余测试仍会全绿唯独这个能抓住.env永远读不到的隐患help 就是界面的 helpintegration真实子进程跑python -m dots --help断言Usage: dots与--openrouter-key、--model、--proxy、--seed、--profile-dir五个核心选项都在没有 key 就拒跑integration环境中抹掉 API key 后启动断言非零退出且提示 OpenRouter——在启动任何浏览器、子进程之前就失败安装的包就是被 pin 的那个unit从pyproject.toml读出 pin 版本号与已安装包版本逐一比对防止隔壁仓库的 editable 安装让前面所有测试在考错的代码最后一个测试最值得细看它规定了测试判卷的依据是pyproject.toml里的版本号而不是你手头任何 checkout——这正是pin 升级流程里改 pin 前先确认装的确实是被 pin 版本的自动化保证。快速上手一行命令启动 dots git clone https://gitcode.com/gh_mirrors/dots140/dots cd dots pip install . dots --openrouter-key sk-or-...随后打开http://127.0.0.1:8765左边是对话右边是浏览器实时联动。模型用--model一个开关即可切换OpenRouter 上任意模型全部选项以dots --help为准。小结小项目的三个工程姿势精确 pin 胜过地板版本调用的是别人未承诺稳定的接口版本就是契约契约必须写死走命令组、别走命令配置.env读取逻辑住在组里绕过组等于绕过配置测试考的是 pin不只是代码四个测试构成依赖升级的验收线其中已装版本 被 pin 版本一道堵死了环境漂移的后门。更多浏览器指纹细节--seed复现同一身份、--profile-dir跨次保留登录态、--proxy让时区与语言跟随出口以及把同一个浏览器作为 MCP server 接入 Claude Code、Codex、Gemini CLI 的用法见 README.md。【免费下载链接】dotsOpen-source dots for the web: an AI agent with its own browser, one that does not get blocked.项目地址: https://gitcode.com/gh_mirrors/dots140/dots创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

辣知·化智69 西周青铜器何尊的宅兹中国

辣知·化智69 西周青铜器何尊的宅兹中国

读文累的话,请点上方“耳机”或者“听”然后躺个舒服姿势,享受优质音频魅力《辣知化智》不是中国人不尊重知识产权—— 辣知君 著西周青铜器何尊上的宅兹中国一个概念的三千年演变"中国"这两个字,在今天是一个国家的简称。但当我们…

2026/10/2 17:25:42 阅读更多 →
没技术的普通人怎么自己做小程序?手机三步自助制作上线全流程

没技术的普通人怎么自己做小程序?手机三步自助制作上线全流程

作为一个没什么技术的普通人,想做一个自己的小程序,第一反应就是:我行吗?会不会很难?会不会花很多钱?身边也没人懂这行,只能自己瞎琢磨,越想越觉得不现实,索性放弃了。 其…

2026/10/2 17:25:42 阅读更多 →
Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)

Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)

Nginx HTTP模块详解1、动态赋值功能模块1.1、根据浏览器动态赋值1.1.1、旧浏览器标识指令——ancient_browser1.1.2、设置旧浏览器变量值指令——ancient_browser_value1.1.3、新浏览器标识指令——modern_browser1.1.4、设置新浏览器变量值指令——modern_browser_value1.2、根…

2026/10/2 17:25:42 阅读更多 →

最新新闻

16GB显卡跑27B三进制模型:PTQ1_0与PQ2_0部署实测

16GB显卡跑27B三进制模型:PTQ1_0与PQ2_0部署实测

先交代一下背景:我手头这台机器用的是一张 16GB 显存的中高端显卡,之前一直跑 7B、14B 的量化模型,偶尔想碰 27B 都得靠 CPU offload 硬撑,生成速度慢到让人怀疑人生。直到三进制模型 Bonsai 2 27B 出来,社区里一堆人喊…

2026/10/2 17:56:58 阅读更多 →
基于X-AnyLabeling、Grounded-SAM与autodistill的自动标注流水线全解析

基于X-AnyLabeling、Grounded-SAM与autodistill的自动标注流水线全解析

做目标检测和实例分割项目的人,十有八九都经历过标注噩梦。我前年接手一个细分场景的实例分割任务,训练集需要6000张图,每张平均4到5个目标,用多边形逐点抠掩码,熟练标注员一天最多完成80张。算下来纯手工标注要耗掉两…

2026/10/2 17:56:58 阅读更多 →
桥梁缺陷检测数据集构建:从标注规范到YOLO训练参数调优实战

桥梁缺陷检测数据集构建:从标注规范到YOLO训练参数调优实战

简介:这是一份面向桥梁缺陷检测任务的YOLO格式目标检测数据集,适合计算机视觉方向的初学者、算法工程师以及桥梁健康监测项目相关开发者使用。数据集中标注了腐蚀、裂纹、白石灰、泄漏、剥落五类典型桥梁缺陷,并已按YOLO标准格式划分出训练集…

2026/10/2 17:56:58 阅读更多 →
Memoh渠道接入教程:让AI Agent一键连接Telegram、微信、飞书、钉钉等10+平台

Memoh渠道接入教程:让AI Agent一键连接Telegram、微信、飞书、钉钉等10+平台

Memoh渠道接入教程:让AI Agent一键连接Telegram、微信、飞书、钉钉等10平台 【免费下载链接】Memoh ✨ The open-source multi-agent platform. Every agent gets its own computer, desktop, network, and long-term memory. You can bring your own key, or host …

2026/10/2 17:56:58 阅读更多 →
如何理解 ZenNotes 的 Markdown 编辑器:CodeMirror 6 实时预览与图表渲染实现原理

如何理解 ZenNotes 的 Markdown 编辑器:CodeMirror 6 实时预览与图表渲染实现原理

如何理解 ZenNotes 的 Markdown 编辑器:CodeMirror 6 实时预览与图表渲染实现原理 【免费下载链接】zennotes Keyboard-first local Markdown notes with Vim motions, diagrams, and MCP integration. 项目地址: https://gitcode.com/gh_mirrors/zenn/zennotes …

2026/10/2 17:56:58 阅读更多 →
SAP PLM与西门子PLM选型:聚焦BOM与ECN的语义集成

SAP PLM与西门子PLM选型:聚焦BOM与ECN的语义集成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 17:55:57 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →