// Package browsercfg 只做两件事:**浏览器能力的配置**与**可用性判定**。它是 // design/28(浏览器与页面截图)B1 的产物,配置源是 // `$DATA_DIR/config/plugins/browser.json`(design/28 §1 M2、§8 B1、design/13 §2.1 // 的插件配置落点),并按「本机 Chrome/Chromium 可执行文件 → 已在跑的容器(CDP 端点)」 // 的优先级探测,给出**可证伪的可用性结论**和「为什么不可用」的**分类原因**。 // // 它是**纯库**:不注册任何工具、不建长连接、不接线(工具面在 B2,闭环在 B3)。 // 除 CheckCDP 会发一次出站 HTTP GET 外,本包不启动进程、不开监听端口。 // // 红线(design/28 §3/§4,AGENTS §9/§10): // // - **不进 `.env`**:一切可调项只从 `browser.json` 读。本包不读任何**配置来源**的 // 环境变量,也不新增任何 env 键;唯一的 getenv 用途是从 `%ProgramFiles%` / // `%LOCALAPPDATA%` 定位本机 Chrome 安装目录(与配置无关的系统环境)。 // - **不新开监听端口**:我们是 CDP 的**出站客户端**,探测只连调用方给的地址 // (默认 `127.0.0.1:9222`)。 // - **不假装可用**:探测不到就返回 `Usable=false` + 分类原因,由上层**如实降级** // (照 web-search `off` 的口径:不注册工具,而不是注册一把抡起来必报错的锤子)。 // - **profile 目录含凭据**(cookie / 登录态)⇒ 目录 0700、文件 0600、**不得位于 // git 工作树内**(见 CheckProfileLocation)、内容**绝不进上下文/长期记忆** // (design/28 §2 三件套之 2、§4)。截图落盘同属敏感面,默认不进长期记忆。 package browsercfg