feat: improve remote browser tree routing
Testing / remote-protocol-compat (0.9.3) (push) Successful in 43s
Testing / test (push) Successful in 1m1s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 39s
Build & Publish Package / publish (push) Successful in 58s
Package Extension / package-extension (push) Successful in 1m15s
Testing / remote-protocol-compat (0.9.3) (push) Successful in 43s
Testing / test (push) Successful in 1m1s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 39s
Build & Publish Package / publish (push) Successful in 58s
Package Extension / package-extension (push) Successful in 1m15s
- Allow remote host aliases passed via --browser to fan out for read-only multi-browser SDK paths while preserving strict routing for mutating commands. - Add remote host grouping and scoped profile labels to tabs tree output so global views avoid repeated host prefixes. - Carry browser family metadata through remote targets, tabs, and groups and style tree browser labels by family. - Split CLI rendering helpers into a typed rendering package with dedicated common, label, tabs-tree, and windows-tree modules. - Bump browser-cli and extension versions to 0.15.5. - Cover the new routing and rendering behavior with unit and CLI tests.
This commit is contained in:
@@ -37,6 +37,20 @@ _UNSET = object()
|
||||
def _browser_cli_package():
|
||||
return sys.modules.get("browser_cli") or importlib.import_module("browser_cli")
|
||||
|
||||
def _with_profile_display(targets: list[BrowserTarget]) -> list[BrowserTarget]:
|
||||
"""Use profile-only labels when a command is already scoped to one remote."""
|
||||
return [
|
||||
BrowserTarget(
|
||||
profile=target.profile,
|
||||
display_name=target.profile if target.remote else target.display_name,
|
||||
socket_path=target.socket_path,
|
||||
remote=target.remote,
|
||||
browser_name=target.browser_name,
|
||||
display_group=None,
|
||||
)
|
||||
for target in targets
|
||||
]
|
||||
|
||||
class RoutingMixin:
|
||||
"""Fan-out + aggregation across active browsers, mixed into ``BrowserCLI``.
|
||||
|
||||
@@ -51,10 +65,15 @@ class RoutingMixin:
|
||||
def _multi_browser_targets(self) -> list[BrowserTarget]:
|
||||
client = self._client
|
||||
package = _browser_cli_package()
|
||||
if client._browser is not None:
|
||||
if client._browser is not None and not client._remote:
|
||||
targets = package.remote_targets_for_alias(client._browser, key=client._key)
|
||||
if len(targets) <= 1:
|
||||
return []
|
||||
targets = _with_profile_display(targets)
|
||||
elif client._browser is not None:
|
||||
return []
|
||||
if client._remote:
|
||||
targets = package.remote_browser_targets(client._remote, key=client._key)
|
||||
elif client._remote:
|
||||
targets = _with_profile_display(package.remote_browser_targets(client._remote, key=client._key))
|
||||
else:
|
||||
targets = package.active_browser_targets()
|
||||
if len(targets) <= 1 and not any(target.remote for target in targets):
|
||||
|
||||
Reference in New Issue
Block a user