v0.9.91 — MCP Session Replay, Task Outcomes & Signed-In Google Sheets#105
Open
LakshmanTurlapati wants to merge 27 commits into
Open
v0.9.91 — MCP Session Replay, Task Outcomes & Signed-In Google Sheets#105LakshmanTurlapati wants to merge 27 commits into
LakshmanTurlapati wants to merge 27 commits into
Conversation
added 26 commits
July 7, 2026 05:58
…eplay/memory - new extension/utils/mcp-session-recorder.js: sessions keyed agentId+tabId, birthed by the visualSession sidecar, closed on isFinal or 60s sliding idle, persisted via direct automationLogger.saveSession + extractAndStoreMemories globals with mode 'mcp-agent' and replay-shape actionHistory - sibling recordDispatch hooks in BOTH dispatcher finally blocks (message route gated by !_mcpMetricsSuppressInner; metrics Test 9 pins undisturbed) - eviction survival via versioned fsbMcpSessionBuffer chrome.storage.session envelope; key-targeted sensitive-param redaction, replay values raw - run_task and pure read-only bursts never recorded - automation-logger carries mode + mcpClient through saveSession and the session index; sidepanel history badge (MCP vs Autopilot) - lattice importScripts tally bumped 309->310 mentions / 305->306 call sites - tests/mcp-session-recorder.test.js: 10 locked cases + eviction restore + source-pin guards (94 assertions)
… replay, and memory like autopilot runs
… resolved tab ids and replay-compatible names Review findings on 721e282 plus the root defect beneath them: - content/cdp-routed action tools (click, type, pressEnter, ...) never reached the dispatcher choke points, so the recorder only ever saw background-routed actions. New MCPBridgeClient._recordMcpSessionAction tap fires from all three _handleExecuteAction branches (main path, open_tab/switch_tab bootstrap, navigate NO_OWNED_TAB recovery) with the ownership-resolved tabId; the dispatcher tool-route session hook is removed (its action traffic all originates in _handleExecuteAction -- keeping it would double-count background actions). The message-route join hook and both metrics hooks are untouched. - finding #1: session keying read only params.tabId while wire params carry snake_case tab_id -- multi-tab agents collapsed onto agentId::none. Keying now prefers the explicit resolved tabId, then params.tab_id, then params.tabId (resolveAgentTabOrError order). - finding #2: stored tool names must satisfy the replay whitelist. Wire verbs are already replay-compatible for content tools; the two real mismatches map at append time (go_back->goBack, go_forward->goForward); non-replayable verbs store verbatim. - resolveMcpClientLabel exported to globalThis so the bridge tap resolves the canonical client label. - test fixtures now simulate the production shapes (bridge recordAction with wire verbs + resolved tabId); pins updated (1 dispatcher session site inside the suppression gate, 1 bridge recordAction site, 3 tap invocations, metrics still exactly 2, resolver within 4500 chars of _handleExecuteAction); new cases for tab_id keying/no-collapse, bootstrap birth, name mapping, and failure/sidecar-less semantics (125 assertions).
… script tests/mcp-session-recorder.test.js landed in the prior mcp-session-recorder commits but was never added to the npm test script, so it wasn't running.
Mirrors the history-source-badge sidepanel.js already renders for MCP agent vs autopilot sessions, so the control panel's session list carries the same source indicator.
…ngs cards .settings-card clips overflow for its rounded-card styling, which cut off the custom .fsb-select dropdown menu whenever it opened near a card edge. Toggle a .settings-card--select-open class (overflow: visible, elevated z-index) on the host card for as long as its select is open, routed through shared setFsbSelectCardOpen/closeFsbSelect helpers so every close path (option pick, outside click, sibling open) clears it consistently.
html/body could grow taller than the viewport and scroll as a second scroller alongside .dashboard-content, and flex children without min-height: 0 wouldn't shrink to fit, letting page-level scroll fight the intended single scroll pane. Pin html/body/.dashboard-container to 100vh with overflow: hidden, let .dashboard-main/.dashboard-content shrink via min-height: 0, and add overscroll-behavior: contain so .dashboard-content stays the one scroller and doesn't chain scroll past its own edges.
…pandable detail Overview now renders one node per category instead of flattening straight to individual sites, with Full Detail (relabeled "Expanded" in the UI) branching each category out to its sites in a cap around the category's outward direction so they visibly fan off their parent. Adds animated zoom-to-fit when switching detail levels, stronger highlight emphasis (glow ring, bolder label, thicker link) on search matches, and drops the now-redundant third detail tier and unused learned-pattern aggregation from task-memory sites.
… list CATEGORY_ORDER only listed 6 of the built-in site-guide categories, so the showcase demo undercounted what the extension's knowledge graph actually covers. Add the missing categories and drop the stale hardcoded 9-categories/43+-sites figure from the header comment.
…visual-session token finalization
LakshmanTurlapati
marked this pull request as ready for review
July 21, 2026 11:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ships FSB extension v0.9.91 and fsb-mcp-server v0.11.0. This release brings MCP-run browser sessions into the same local history, replay, and memory pipeline as Autopilot; adds an ordered terminal task-outcome handoff; and exposes bounded Google Sheets capabilities through the user's already signed-in, agent-owned spreadsheet tab.
0.9.910.11.0What changed
MCP session history, replay, and memory
MCP · <client>andAutopilotsource badges to session-history surfaces.Terminal task outcomes in MCP v0.11.0
mcp:task-statusbridge contract forcomplete_task,partial_task, andfail_task.Signed-in Google Sheets capabilities
gsheets.get_spreadsheet,gsheets.get_values,gsheets.update_values,gsheets.append_values, andgsheets.clear_values.docs.google.com/spreadsheets/d/<id>tab and rejects spreadsheet-ID mismatches.Activation note: the two read capabilities are implemented and verified. The three mutation capabilities remain
guarded-fail-closeduntil disposable-sheet live UAT and readback evidence pass.UI, showcase, and repository refinements
Compatibility
fsb-mcp-server@0.11.0requires extension v0.9.91 or newer for the new terminal task-status route.Test plan
npm run ciafter merging currentorigin/mainall-greenjobsupdate_values,append_values, orclear_values