Skip to content

feat: add browser_session_sync plugin#396

Open
Omni-NexusAI wants to merge 2 commits into
agent0ai:mainfrom
Omni-NexusAI:add-browser-session-sync
Open

feat: add browser_session_sync plugin#396
Omni-NexusAI wants to merge 2 commits into
agent0ai:mainfrom
Omni-NexusAI:add-browser-session-sync

Conversation

@Omni-NexusAI

Copy link
Copy Markdown

Plugin: Browser Session Sync

Persists native Browser tabs, cookies, and localStorage across container restarts with one-shot startup restore and debounced live-state tracking.

  • GitHub: https://github.com/Omni-NexusAI/a0-plugins
  • Tags: browser, storage, workflow, automation, ui
  • Version: 1.4.1 (includes guard for runtime-start restore so internal errors are logged instead of breaking the Browser UI JSON parse)

Submitted via fork Omni-NexusAI/a0-plugins-android-control branch add-browser-session-sync.

Omni-NexusAI and others added 2 commits July 13, 2026 03:28
* feat: add Tailscale integration for remote device discovery and connection

Auto-discover Android devices on Tailscale tailnet, one-click connect over VPN mesh.

New files:
- helpers/tailscale_discovery.py: Core discovery module
- api/tailscale_status.py: API endpoint (status, connect, refresh, start_daemon)

Modified files:
- helpers/adb_backend.py: Merge Tailscale peers in canonical_devices()
- api/device_status.py: Add tailscale_status to response
- webui/device-panel.html: Tailscale status badge
- webui/config.html: Full Tailscale config section with peer list
- webui/pairing.html: Tailscale quick-connect section
- default_config.yaml: 7 new config fields

* feat: redesign pairing page with connection mode selector

Adds Wireless ADB | Tailscale mode selector. All sections adapt to selected mode.
- Wireless ADB: Original QR pairing and manual flow preserved unchanged
- Tailscale: TS QR with connection JSON, manual adb connect link with copy
  button, peer dropdown, hostname fallback
- Nothing deactivated — mode selector switches which paths are shown

* fix: move Tailscale imports to lazy loading to fix bridge detection bug

Module-level Tailscale imports were crashing the status endpoint, causing
refreshBridgeStatus() to fail and disabling the Wireless ADB QR button.
All Tailscale imports now deferred to try/except blocks.

* fix: skip Tailscale diagnostics when tailscale_enabled=false

Blocking subprocess calls in tailscale_diagnostics() were slowing down
bridge_capabilities() even when Tailscale was disabled. Added config guard.

* feat: post-pairing Tailscale upgrade flow with auth QR + auto-bootstrap

Adds 'Connect with Tailscale?' section that takes an already-connected
device and upgrades it to Tailscale connectivity.

Backend:
- generate_auth_url(): Tailscale login URL via tailscale up --qr
- push_auth_to_device(): Push URL to phone via ADB intent
- enable_tcp_mode(): adb tcpip 5555
- wait_for_tailnet_join(): Poll for new Android peer
- bootstrap_tailscale(): Full orchestrator

UI:
- Removed mode selector (was wrong approach)
- Clean flow: QR → Manual → Connect → Tailscale Upgrade → Devices

* fix: replace module-level imports with lazy _get_adb_backend() helper

Module-level imports caused entire module to fail loading in A0 runtime,
preventing bootstrap_tailscale from being importable. All imports now
deferred to function-level via _get_adb_backend().

* fix: lazy imports + daemon start + dual-path bootstrap

1. Module-level imports → lazy _get_adb_backend() helper
2. generate_auth_url() calls ensure_daemon_running() first
3. bootstrap_tailscale() checks existing tailnet peers before auth
4. Login URL approach - no API key needed

* fix: use non-blocking tailscale status for auth URL generation

tailscale up --qr is a BLOCKING command that hangs. tailscale status
returns the login URL immediately when logged out. Confirmed working
by manual test: daemon + status → URL in <3s.

* fix: publish android control marketplace entry

---------

Co-authored-by: Codex <codex@local>
@a0-bot

a0-bot Bot commented Jul 22, 2026

Copy link
Copy Markdown

Plugin submission validation failed

ERROR: Only files under plugins/ are allowed in plugin PRs: README.md

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant