Skip to content

[Feature] Provider 应自动管理 Chrome 生命周期 + daemon 启动 #192

Description

@yan5xu

背景

bb-browser provider 作为 Edge Clip Provider 部署在 Mac Mini 上,通过 launchd 管理。当前存在以下问题:

  1. daemon 不会自动启动 Chromedaemon.js 期望 Chrome CDP 已经在运行,如果没有就直接 exit 1
  2. provider 不会启动 Chrome:provider 只 spawn daemon,不管 Chrome
  3. Chrome 启动缺少 PATH:launchd 环境没有 nvm 的 PATH,导致 site adapter 调用 node 失败(spawn node ENOENT
  4. 需要外部启动脚本:目前靠 bin/start-provider.sh 手动串联 Chrome → daemon → provider

目标

provider 启动时能自动完成:

  1. 检测/启动 Chrome(带 --remote-debugging-port + --user-data-dir
  2. 等 CDP ready 后启动 daemon
  3. 自身连接 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions