fix: propagate key through remote discovery; auto-persist key per remote

- remote_browser_targets(), _auto_route_remote(), active_browser_targets()
  now accept and forward the key parameter so pubkey auth works during
  the initial browser-cli.targets discovery call
- _multi_browser_targets() in tabs/groups/windows/session commands now
  reads key from ctx.obj and passes it through
- send_command() auto-saves the key spec (e.g. "agent") to remotes.json
  on first explicit use; subsequent calls to the same remote reuse it
  without requiring --key every time
- Added save_remote_key() / key_for_remote() helpers (mirrors token helpers)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-02 19:50:51 +02:00
parent 4b2abbbfc5
commit 8593916e5a
6 changed files with 95 additions and 20 deletions
+3 -2
View File
@@ -31,10 +31,11 @@ def _multi_browser_targets():
if root.obj.get("browser_explicit"):
return []
remote = root.obj.get("remote")
key = root.obj.get("key")
if remote:
targets = remote_browser_targets(remote, root.obj.get("token"))
targets = remote_browser_targets(remote, root.obj.get("token"), key=key)
else:
targets = active_browser_targets()
targets = active_browser_targets(key=key)
if len(targets) <= 1 and not any(target.remote for target in targets):
return []
return targets
+3 -2
View File
@@ -30,10 +30,11 @@ def _multi_browser_targets():
if root.obj.get("browser_explicit"):
return []
remote = root.obj.get("remote")
key = root.obj.get("key")
if remote:
targets = remote_browser_targets(remote, root.obj.get("token"))
targets = remote_browser_targets(remote, root.obj.get("token"), key=key)
else:
targets = active_browser_targets()
targets = active_browser_targets(key=key)
if len(targets) <= 1 and not any(target.remote for target in targets):
return []
return targets
+3 -2
View File
@@ -33,10 +33,11 @@ def _multi_browser_targets():
if root.obj.get("browser_explicit"):
return []
remote = root.obj.get("remote")
key = root.obj.get("key")
if remote:
targets = remote_browser_targets(remote, root.obj.get("token"))
targets = remote_browser_targets(remote, root.obj.get("token"), key=key)
else:
targets = active_browser_targets()
targets = active_browser_targets(key=key)
if len(targets) <= 1 and not any(target.remote for target in targets):
return []
return targets
+3 -2
View File
@@ -31,10 +31,11 @@ def _multi_browser_targets():
if root.obj.get("browser_explicit"):
return []
remote = root.obj.get("remote")
key = root.obj.get("key")
if remote:
targets = remote_browser_targets(remote, root.obj.get("token"))
targets = remote_browser_targets(remote, root.obj.get("token"), key=key)
else:
targets = active_browser_targets()
targets = active_browser_targets(key=key)
if len(targets) <= 1 and not any(target.remote for target in targets):
return []
return targets