FSB v0.9.67: stats overhaul + telemetry attribution + MCP numeric coercion
Highlights
This release rolls everything since v0.9.65 (2026-05-14) into one extension package. Three threads landed in parallel:
Telemetry attribution (mcp_client field)
- PR #57 (
cd07d9b6) — Fixed the WS dispatcher leak that recorded everytelemetry_events.mcp_clientasunknown. The dispatcher was passing the bridge-instance object into the recorder where a string label was expected. Now extracts the canonical client label frompayload.visualSession.client. - PR #59 (
ca95f919) — Closed the second half of the leak: non-action message routes (agent:register,mcp:get-tabs,mcp:get-dom,mcp:get-diagnostics,mcp:read-page) never carry avisualSession.clientsidecar, so they kept writingunknowneven after PR #57. Added a per-agent label cache in the dispatcher so subsequent non-action calls from a known agent inherit its label.
/stats dashboard
- PR #58 (
bde9dcc0) — Replaced 8 chart views with richer visualizations: lollipop (weekly stars), sankey (issues), dual-axis (forks), streamgraph (PRs), punchcard bubble matrix (commits over time), gantt strip (maintenance), radial gauge, sparkline ring buffer, big-number tile. - PR #53 (
3e1f7d16) — Codex P1 follow-ups on PR #50: serializedrecordDispatchr-m-w against concurrent dispatches, strippedattemptsfrom the POST body. - PR #61 (
d587a599) — Moved all GitHub API calls off the Angular client onto a server-side 5-min poller backed by SQLite./statsnow reads from same-origin/api/public-stats/github/:endpoint_id. Stops every visitor's browser from burning the shared 60-req/hr GitHub rate limit; one authenticated server poller can use the 5000-req/hr quota instead. CSP tightened toconnect-src 'self'. - PR #62 (
0bdbfd77) — Lowered the housekeeper k-anonymity floor from5to2so/statsactually surfaces real MCP client names. At single-digit total install counts, no real label could mathematically clear k=5 and the chart stayed atOther (uniq=6)forever. Raise back to5once installs exceed~50.
MCP server (fsb-mcp-server)
- PR #63 (
9c25405b) — Coerced string-encoded numeric tool params (tabId,tab_id,count,limit,topN). Some MCP clients (observed: Claude Code) serialize integers as JSON strings on the wire, which the server's barez.number()rejected withExpected number, received string. Single fix point at thejsonSchemaToZodtranslator plus 7 hand-rolled Zod sites. Note: this fix ships withfsb-mcp-server@0.9.2(release pending).
Plumbing
- PR #51, #52, #54, #55, #56 —
/statsSPA route wiring, CSP for GitHub API (later removed by #61), CI showcase deps, cumulative-commits chart,0.9.65 → 0.9.66version bump.
Install
Download fsb-extension-v0.9.67.zip from the assets below, unzip, and load the unpacked directory at chrome://extensions (Developer mode → Load unpacked).
Validation
node scripts/validate-extension.mjs→ OK (manifest valid, 245 JS files parsed clean)npm test→ all suites green- Manifest V3, name
FSB v0.9.67, version0.9.67, 362 files, 13 MB on disk