Skip to content

LakshmanTurlapati/FSB

vextension-v0.9.60 scope: extension Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Summary

AI summary

Broad release touches Post-action change_report, Multi-agent runtime, run_task lifecycle hardening, and UI / observability.

Full changelog

Milestone: Multi-Agent Tab Concurrency

The Chrome extension now hosts a full multi-agent contract on top of the existing single-agent surfaces (popup, sidepanel, autopilot). MCP clients can run concurrently against the same browser without stepping on each other.

What's new

Multi-agent runtime

  • Per-session agent_id minted via crypto.randomUUID(). MCP callers cannot supply IDs; the extension issues them on first dispatch.
  • Configurable concurrency cap (default 8, range 1-64), persisted to chrome.storage.local under fsbAgentCap.
  • Tab-ownership gate on every MCP dispatch with typed errors: TAB_NOT_OWNED, TAB_INCOGNITO_NOT_SUPPORTED, TAB_OUT_OF_SCOPE, AGENT_CAP_REACHED, NO_OWNED_TAB, AMBIGUOUS_TAB.
  • Per-bindTab ownership_token (fresh UUID per binding) defends against Chrome tab-ID reuse.
  • Forced-new-tab pooling via chrome.tabs.onCreated + openerTabId (pool tabs don't count against cap).
  • Lock release on task end, session end, 10s grace after MCP disconnect, or user closes the tab. No idle timeout.
  • Service-worker eviction recovery: registry mirrors to chrome.storage.session; on wake, hydrate() reconciles against chrome.tabs.query() and reaps ghosts before serving any request.

New tools

  • back browser-history tool: ownership-gated, returns { status, resultingUrl, historyDepth } where status is one of ok | no_history | cross_origin | bf_cache | fragment_only. pageshow-based 2s settle verification; cross-origin BF-cache resilience reuses the v0.9.11 path. Background-tab compatible.

run_task lifecycle hardening

  • Returns when automation actually completes (via fsbAutomationLifecycleBus), not at an arbitrary timer ceiling.
  • 600s safety net (was 300s).
  • 30s heartbeat ticks via MCP notifications/progress carrying alive, step, elapsed_ms, current_url, ai_cycles, last_action under params._meta -- MCP host clients no longer hit per-tool timeouts on long tasks.
  • Lifecycle persisted in chrome.storage.session keyed by task_id. On SW eviction, server emits partial_outcome with disposition: 'sw_evicted' if the bridge can't recover.

Post-action change_report

  • Every action tool returns a compact change_report describing what mutated, so the agent doesn't need to follow up with read_page / get_dom_snapshot.
  • Shape: { url: { before, after, changed }, title_changed, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift, mutation_count, settle_ms, truncated }. Cross-origin emits URL-only with cross_origin: true.
  • MutationObserver scoped to the nearest stable ancestor, with noise filters (style-only, animation classes, scroll position, aria-hidden subtrees, sub-3-char text). 2400-byte cap (~600 tokens) with top-N truncation.
  • Read-only/info/wait tools EXCLUDED. scroll, scroll_at, hover, focus opt out.
  • Global toggle: Advanced Settings -> "Return action change reports" (default ON). When OFF the dispatcher skips instrumentation entirely.
  • Performance budget: <5ms observer overhead, <10ms serialization, <25ms p95 added latency.

Agent-scoped tab resolution

  • New extension/utils/agent-tab-resolver.js is the single resolution chokepoint for read tools, visual session, and action tools.
  • Branches: legacy popup/sidepanel/autopilot use active tab. Non-legacy MCP agents resolve via registry: 1 owned tab -> use it, 0 -> NO_OWNED_TAB, 2+ -> AMBIGUOUS_TAB.
  • Resolved tabId folded back into routeParams so the ownership gate fires for every non-creating MCP tool call.
  • Optional tab_id added to all 6 read tools, start_visual_session, and 35 action-tool input schemas.
  • open_tab now defaults to background. Foreground requires explicit active: true.

UI / observability

  • Background-tab badge extended with short agent_id suffix on overlay and dashboard mirror (e.g. Claude / agent_a3f1).
  • Sidepanel + popup show read-only "owned by Agent X" chip on owned tabs.
  • Advanced Settings: Agent Concurrency card (numeric input 1-64, default 8, current-active counter, helper text, Reset button) with 3-layer numeric clamping.

Background-tab execution

  • Audited 25+ tools for chrome.tabs.update({active: true}) and chrome.windows.update({focused: true}). Tools that need focus opt in via _forceForeground. Default false; only switch_tab opts in.
  • webNavigation.onCommitted detects user-initiated navigation on agent-owned tabs and emits a pause signal so in-flight automation doesn't race manual user action.

Install

Available on the Chrome Web Store:
https://chromewebstore.google.com/detail/badgafnfchcihdfnjneklogedcdkmjfk?utm_source=item-share-cp

Or load unpacked: download fsb-extension-v0.9.60.zip below, unzip, and load the extension/ directory via chrome://extensions -> Developer mode -> Load unpacked.

Compatibility

  • Chrome 88+ / Chromium-based browsers (Edge, Brave, Opera, etc.)
  • Pairs with [email protected] (released separately)

Full per-feature changelog: see mcp/CHANGELOG.md.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track LakshmanTurlapati/FSB

Get notified when new releases ship.

Sign up free

About LakshmanTurlapati/FSB

All releases →

Beta — feedback welcome: [email protected]