• feat(relay): group-scoped Target.getTargets — restore follow-popup + cross-session adopt under isolation (#40)

    oimwiodev released this 2026-06-17 09:14:13 +00:00 | 10 commits to main since this release

    Move multi-agent isolation from blunt daemon-side filtering to relay-side
    group scoping, so a session can adopt new tabs again (follow-popup, OAuth
    results, cross-session adopt-by-targetId) without ever seeing the user's or
    another agent's tabs.

    Relay (relay.rs): track client->group (announced via new local ABRelay.setGroup,
    or the first createTarget's agentGroup) and target->group (created tabs tagged
    from the createTarget reply; an explicit attachToTarget tags the target into the
    adopter's group = #21; a pop-up inherits its opener's group via openerTargetId).
    Target.getTargets returns ONLY the requesting client's group; a client that never
    announced a group (older daemon) gets the full list — fully backward-compatible.
    +5 unit tests.

    Daemon (browser.rs): announce_group() on connect sets relay_scoped. Adoption in
    discover/resync/adopt_newly_opened is re-enabled ONLY when relay_scoped; without
    it (launch / real CDP / older relay that didn't answer the announce) the daemon
    keeps strict daemon-side isolation. So this can't regress the 125/125 isolation.

    Extension (ab-connect 0.4.10): synthesized Target.attachedToTarget targetInfo now
    carries openerTargetId (pop-ups inherit opener's group) and abGroup (the tab-group
    title, so the relay re-attributes existing tabs after ITS own restart, since
    createTarget tagging won't re-run). tabScopeHints().

    Back-compat verified live: new daemon + OLD relay -> announce fails ->
    relay_scoped=false -> strict fallback, open/eval/url all work. The new extension
    (publish to CWS, strip manifest key) activates follow-popup; relay+daemon ship now.
    861 tests pass.

    Downloads