背景
bb-browser provider 作为 Edge Clip Provider 部署在 Mac Mini 上,通过 launchd 管理。当前存在以下问题:
- daemon 不会自动启动 Chrome:
daemon.js 期望 Chrome CDP 已经在运行,如果没有就直接 exit 1
- provider 不会启动 Chrome:provider 只 spawn daemon,不管 Chrome
- Chrome 启动缺少 PATH:launchd 环境没有 nvm 的 PATH,导致 site adapter 调用
node 失败(spawn node ENOENT)
- 需要外部启动脚本:目前靠
bin/start-provider.sh 手动串联 Chrome → daemon → provider
目标
provider 启动时能自动完成:
- 检测/启动 Chrome(带
--remote-debugging-port + --user-data-dir)
- 等 CDP ready 后启动 daemon
- 自身连接 hub 注册 clips
不需要外部启动脚本,launchd plist 直接指向 node dist/provider.js。
具体改动
方案:provider 集成 Chrome 启动逻辑
- 将
packages/cli/src/cdp-discovery.ts 中的 launchManagedBrowser() + discoverCdpPort() 抽到 packages/shared/ 供 provider 复用
ensureDaemon() 之前先调 discoverCdpPort(),确保 Chrome CDP 可用
- daemon 启动时传
--cdp-port 参数(已支持)
- provider 的
runSiteCli() 用 process.execPath 替代硬编码 node,避免 PATH 问题
Chrome 启动参数
--remote-debugging-port=19825
--user-data-dir=~/.bb-browser/browser/user-data
--no-first-run --no-default-browser-check
--disable-sync --disable-background-networking
--disable-component-update
--disable-features=Translate,MediaRouter
--disable-session-crashed-bubble --hide-crash-restore-bubble
注意事项
--user-data-dir 必须使用固定路径(~/.bb-browser/browser/user-data),这样 cookie/登录态跨重启保留
- macOS 上通过 SSH 启动 Chrome 无法绑定 CDP 端口,需要通过 launchd 或 GUI session 启动
- 用默认 Chrome 数据目录 +
--profile-directory 时 Chrome 会忽略 --remote-debugging-port,必须用独立 --user-data-dir
验证
- launchd plist 直接指向
node dist/provider.js --hub-url https://hub.pinix.ai(不需要 wrapper script)
launchctl kickstart -k 后 Chrome + daemon + provider 全部自动启动
pinix invoke google search '{"query":"test"}' 返回结果
- kill Chrome 后 provider 能自动重新启动 Chrome + daemon
背景
bb-browser provider 作为 Edge Clip Provider 部署在 Mac Mini 上,通过 launchd 管理。当前存在以下问题:
daemon.js期望 Chrome CDP 已经在运行,如果没有就直接 exit 1node失败(spawn node ENOENT)bin/start-provider.sh手动串联 Chrome → daemon → provider目标
provider 启动时能自动完成:
--remote-debugging-port+--user-data-dir)不需要外部启动脚本,launchd plist 直接指向
node dist/provider.js。具体改动
方案:provider 集成 Chrome 启动逻辑
packages/cli/src/cdp-discovery.ts中的launchManagedBrowser()+discoverCdpPort()抽到packages/shared/供 provider 复用ensureDaemon()之前先调discoverCdpPort(),确保 Chrome CDP 可用--cdp-port参数(已支持)runSiteCli()用process.execPath替代硬编码node,避免 PATH 问题Chrome 启动参数
注意事项
--user-data-dir必须使用固定路径(~/.bb-browser/browser/user-data),这样 cookie/登录态跨重启保留--profile-directory时 Chrome 会忽略--remote-debugging-port,必须用独立--user-data-dir验证
node dist/provider.js --hub-url https://hub.pinix.ai(不需要 wrapper script)launchctl kickstart -k后 Chrome + daemon + provider 全部自动启动pinix invoke google search '{"query":"test"}'返回结果