[{"data":1,"prerenderedAt":1269},["ShallowReactive",2],{"$f2LWyk4cWxA0HkrMK4H5g_lMKecWHIW0IZwStOuumByE":3},{"newThing":4,"project":5,"cycle":9,"sections":22,"threads":1224,"otherDocs":1225,"documents":1226,"images":1227,"archiveItems":1266,"links":1267},"Live qcontrol stream — SSE bridge, MCP actors, tool-call flows from the extended reducer",{"id":6,"label":7,"liveBase":8},"qmap","Qmap",null,{"id":10,"num":11,"dir":12,"name":13,"title":13,"focus":14,"status":15,"statusNote":8,"created":16,"completed":8,"mode":8,"report":8,"recordless":17,"thumbnail":18,"imageCount":19,"artifactCount":20,"lastActivity":21,"hasPickup":17,"hasInitialPrompt":17},"c28",28,"c28.live-qcontrol-stream","live-qcontrol-stream","Live qcontrol event stream → qmap visualization via SSE bridge","archived","2026-05-13",false,"\u002Fcycles\u002Fqmap\u002Fc28-dataflows.png",9,0,"2026-08-15",[23,83,121,151,232,757,836,1184],{"key":24,"title":25,"empty":17,"ast":26},"why","Why",{"type":27,"children":28},"root",[29,37,51,56],{"type":30,"tag":31,"props":32,"children":33},"element","p",{},[34],{"type":35,"value":36},"text","QControl now emits MCP protocol events (request\u002Fresponse\u002Ferror\u002Fnotification\u002Fsession lifecycle) alongside the IO events (file\u002Fexec\u002Fconnection\u002Fhttp) that c22 already handles. These MCP events are fully implemented and documented but invisible to qmap — the c22 reducer ignores them. Meanwhile, the c22 bridge serves reduced sessions via HTTP polling only, meaning the experiment must repeatedly fetch to see updates.",{"type":30,"tag":31,"props":38,"children":39},{},[40,42,49],{"type":35,"value":41},"This cycle proves the live pipeline: ",{"type":30,"tag":43,"props":44,"children":46},"code",{"className":45},[],[47],{"type":35,"value":48},"qcontrol discover --json → bridge → SSE → qmap",{"type":35,"value":50},", with the reducer extended to surface MCP server actors and tool-call flows alongside the existing IO actors.",{"type":30,"tag":31,"props":52,"children":53},{},[54],{"type":35,"value":55},"Adjacent cycles:",{"type":30,"tag":57,"props":58,"children":59},"ul",{},[60,72],{"type":30,"tag":61,"props":62,"children":63},"li",{},[64,70],{"type":30,"tag":43,"props":65,"children":67},{"className":66},[],[68],{"type":35,"value":69},"c22.runtime-session-map",{"type":35,"value":71}," — proved the bridge + reducer pattern for IO events (file, exec, connection, http)",{"type":30,"tag":61,"props":73,"children":74},{},[75,81],{"type":30,"tag":43,"props":76,"children":78},{"className":77},[],[79],{"type":35,"value":80},"c24.synthetic-live-session-replay",{"type":35,"value":82}," — proved the replay\u002Fsubscribe UX with synthetic data",{"key":84,"title":85,"empty":17,"ast":86},"objective","Objective",{"type":27,"children":87},[88,93],{"type":30,"tag":31,"props":89,"children":90},{},[91],{"type":35,"value":92},"One runnable experiment that:",{"type":30,"tag":57,"props":94,"children":95},{},[96,101,106,111,116],{"type":30,"tag":61,"props":97,"children":98},{},[99],{"type":35,"value":100},"Connects to a live qcontrol session bridge via SSE (Server-Sent Events)",{"type":30,"tag":61,"props":102,"children":103},{},[104],{"type":35,"value":105},"Renders MCP servers, tools, files, external hosts, and processes as they appear in real time",{"type":30,"tag":61,"props":107,"children":108},{},[109],{"type":35,"value":110},"Uses an incremental session accumulator (O(1) per event) instead of full re-reduction",{"type":30,"tag":61,"props":112,"children":113},{},[114],{"type":35,"value":115},"Supports fixture mode for offline testing without a running bridge",{"type":30,"tag":61,"props":117,"children":118},{},[119],{"type":35,"value":120},"Supports polling fallback when SSE is unavailable",{"key":122,"title":123,"empty":17,"ast":124},"scope","Scope",{"type":27,"children":125},[126],{"type":30,"tag":57,"props":127,"children":128},{},[129,140],{"type":30,"tag":61,"props":130,"children":131},{},[132,138],{"type":30,"tag":43,"props":133,"children":135},{"className":134},[],[136],{"type":35,"value":137},"dev\u002Fexperiments\u002Fc28.live-qcontrol-stream\u002F",{"type":35,"value":139}," — experiment surface, reducer, SSE source, bridge",{"type":30,"tag":61,"props":141,"children":142},{},[143,149],{"type":30,"tag":43,"props":144,"children":146},{"className":145},[],[147],{"type":35,"value":148},"cycles\u002Fc28.live-qcontrol-stream\u002F",{"type":35,"value":150}," — cycle metadata",{"key":152,"title":153,"empty":17,"ast":154},"extra","Architecture",{"type":27,"children":155},[156,163,176,201,214,220],{"type":30,"tag":157,"props":158,"children":160},"h3",{"id":159},"accumulator-pattern",[161],{"type":35,"value":162},"Accumulator pattern",{"type":30,"tag":31,"props":164,"children":165},{},[166,168,174],{"type":35,"value":167},"The c22 reducer replays all accumulated events on every call — O(n) per event. c28 restructures the same logic into ",{"type":30,"tag":43,"props":169,"children":171},{"className":170},[],[172],{"type":35,"value":173},"createSessionAccumulator()",{"type":35,"value":175},":",{"type":30,"tag":57,"props":177,"children":178},{},[179,190],{"type":30,"tag":61,"props":180,"children":181},{},[182,188],{"type":30,"tag":43,"props":183,"children":185},{"className":184},[],[186],{"type":35,"value":187},"ingest(event)",{"type":35,"value":189}," — O(1) per event (map lookup + update)",{"type":30,"tag":61,"props":191,"children":192},{},[193,199],{"type":30,"tag":43,"props":194,"children":196},{"className":195},[],[197],{"type":35,"value":198},"snapshot()",{"type":35,"value":200}," — O(n actors) on demand, only when the bridge needs to broadcast",{"type":30,"tag":31,"props":202,"children":203},{},[204,206,212],{"type":35,"value":205},"The pure function ",{"type":30,"tag":43,"props":207,"children":209},{"className":208},[],[210],{"type":35,"value":211},"reduceQControlSession(events)",{"type":35,"value":213}," is preserved as a convenience wrapper for fixtures and tests.",{"type":30,"tag":157,"props":215,"children":217},{"id":216},"event-flow",[218],{"type":35,"value":219},"Event flow",{"type":30,"tag":221,"props":222,"children":226},"pre",{"className":223,"code":225,"language":35},[224],"language-text","qcontrol discover --json (JSONL on stdin)\n  → bridge.mjs\n    → accumulator.ingest(event)           O(1) per event\n    → 250ms debounce fires:\n      → accumulator.snapshot()            O(n actors)\n      → broadcast via SSE to all clients\n  → browser EventSource\n    → QMapAgentSession re-renders\n",[227],{"type":30,"tag":43,"props":228,"children":230},{"__ignoreMap":229},"",[231],{"type":35,"value":225},{"key":152,"title":233,"empty":17,"ast":234},"Event coverage",{"type":27,"children":235},[236,752],{"type":30,"tag":237,"props":238,"children":239},"table",{},[240,269],{"type":30,"tag":241,"props":242,"children":243},"thead",{},[244],{"type":30,"tag":245,"props":246,"children":247},"tr",{},[248,254,259,264],{"type":30,"tag":249,"props":250,"children":251},"th",{},[252],{"type":35,"value":253},"Event type",{"type":30,"tag":249,"props":255,"children":256},{},[257],{"type":35,"value":258},"Actor type",{"type":30,"tag":249,"props":260,"children":261},{},[262],{"type":35,"value":263},"Entity type",{"type":30,"tag":249,"props":265,"children":266},{},[267],{"type":35,"value":268},"Notes",{"type":30,"tag":270,"props":271,"children":272},"tbody",{},[273,303,333,358,383,408,433,457,482,513,539,564,589,620,651,677,702,727],{"type":30,"tag":245,"props":274,"children":275},{},[276,286,295,300],{"type":30,"tag":277,"props":278,"children":279},"td",{},[280],{"type":30,"tag":43,"props":281,"children":283},{"className":282},[],[284],{"type":35,"value":285},"mcp.request",{"type":30,"tag":277,"props":287,"children":288},{},[289],{"type":30,"tag":43,"props":290,"children":292},{"className":291},[],[293],{"type":35,"value":294},"mcp-server",{"type":30,"tag":277,"props":296,"children":297},{},[298],{"type":35,"value":299},"MCP Server",{"type":30,"tag":277,"props":301,"children":302},{},[],{"type":30,"tag":245,"props":304,"children":305},{},[306,316,325,330],{"type":30,"tag":277,"props":307,"children":308},{},[309,314],{"type":30,"tag":43,"props":310,"children":312},{"className":311},[],[313],{"type":35,"value":285},{"type":35,"value":315}," (tools\u002Fcall)",{"type":30,"tag":277,"props":317,"children":318},{},[319],{"type":30,"tag":43,"props":320,"children":322},{"className":321},[],[323],{"type":35,"value":324},"skill",{"type":30,"tag":277,"props":326,"children":327},{},[328],{"type":35,"value":329},"Tool",{"type":30,"tag":277,"props":331,"children":332},{},[],{"type":30,"tag":245,"props":334,"children":335},{},[336,345,350,355],{"type":30,"tag":277,"props":337,"children":338},{},[339],{"type":30,"tag":43,"props":340,"children":342},{"className":341},[],[343],{"type":35,"value":344},"mcp.response",{"type":30,"tag":277,"props":346,"children":347},{},[348],{"type":35,"value":349},"(existing server)",{"type":30,"tag":277,"props":351,"children":352},{},[353],{"type":35,"value":354},"—",{"type":30,"tag":277,"props":356,"children":357},{},[],{"type":30,"tag":245,"props":359,"children":360},{},[361,370,374,378],{"type":30,"tag":277,"props":362,"children":363},{},[364],{"type":30,"tag":43,"props":365,"children":367},{"className":366},[],[368],{"type":35,"value":369},"mcp.error",{"type":30,"tag":277,"props":371,"children":372},{},[373],{"type":35,"value":349},{"type":30,"tag":277,"props":375,"children":376},{},[377],{"type":35,"value":354},{"type":30,"tag":277,"props":379,"children":380},{},[381],{"type":35,"value":382},"Notable event",{"type":30,"tag":245,"props":384,"children":385},{},[386,395,399,403],{"type":30,"tag":277,"props":387,"children":388},{},[389],{"type":30,"tag":43,"props":390,"children":392},{"className":391},[],[393],{"type":35,"value":394},"mcp.notification",{"type":30,"tag":277,"props":396,"children":397},{},[398],{"type":35,"value":349},{"type":30,"tag":277,"props":400,"children":401},{},[402],{"type":35,"value":354},{"type":30,"tag":277,"props":404,"children":405},{},[406],{"type":35,"value":407},"Light volume",{"type":30,"tag":245,"props":409,"children":410},{},[411,420,424,428],{"type":30,"tag":277,"props":412,"children":413},{},[414],{"type":30,"tag":43,"props":415,"children":417},{"className":416},[],[418],{"type":35,"value":419},"mcp.session_close",{"type":30,"tag":277,"props":421,"children":422},{},[423],{"type":35,"value":349},{"type":30,"tag":277,"props":425,"children":426},{},[427],{"type":35,"value":354},{"type":30,"tag":277,"props":429,"children":430},{},[431],{"type":35,"value":432},"Tags closed",{"type":30,"tag":245,"props":434,"children":435},{},[436,445,449,453],{"type":30,"tag":277,"props":437,"children":438},{},[439],{"type":30,"tag":43,"props":440,"children":442},{"className":441},[],[443],{"type":35,"value":444},"mcp.diagnostic",{"type":30,"tag":277,"props":446,"children":447},{},[448],{"type":35,"value":349},{"type":30,"tag":277,"props":450,"children":451},{},[452],{"type":35,"value":354},{"type":30,"tag":277,"props":454,"children":455},{},[456],{"type":35,"value":382},{"type":30,"tag":245,"props":458,"children":459},{},[460,469,473,477],{"type":30,"tag":277,"props":461,"children":462},{},[463],{"type":30,"tag":43,"props":464,"children":466},{"className":465},[],[467],{"type":35,"value":468},"mcp.oauth",{"type":30,"tag":277,"props":470,"children":471},{},[472],{"type":35,"value":349},{"type":30,"tag":277,"props":474,"children":475},{},[476],{"type":35,"value":354},{"type":30,"tag":277,"props":478,"children":479},{},[480],{"type":35,"value":481},"Notable on error",{"type":30,"tag":245,"props":483,"children":484},{},[485,494,503,508],{"type":30,"tag":277,"props":486,"children":487},{},[488],{"type":30,"tag":43,"props":489,"children":491},{"className":490},[],[492],{"type":35,"value":493},"llm.request",{"type":30,"tag":277,"props":495,"children":496},{},[497],{"type":30,"tag":43,"props":498,"children":500},{"className":499},[],[501],{"type":35,"value":502},"vendor",{"type":30,"tag":277,"props":504,"children":505},{},[506],{"type":35,"value":507},"LLM Provider",{"type":30,"tag":277,"props":509,"children":510},{},[511],{"type":35,"value":512},"New",{"type":30,"tag":245,"props":514,"children":515},{},[516,525,530,534],{"type":30,"tag":277,"props":517,"children":518},{},[519],{"type":30,"tag":43,"props":520,"children":522},{"className":521},[],[523],{"type":35,"value":524},"llm.response",{"type":30,"tag":277,"props":526,"children":527},{},[528],{"type":35,"value":529},"(existing provider)",{"type":30,"tag":277,"props":531,"children":532},{},[533],{"type":35,"value":354},{"type":30,"tag":277,"props":535,"children":536},{},[537],{"type":35,"value":538},"Token\u002Fcost stats, notable on error",{"type":30,"tag":245,"props":540,"children":541},{},[542,551,555,559],{"type":30,"tag":277,"props":543,"children":544},{},[545],{"type":30,"tag":43,"props":546,"children":548},{"className":547},[],[549],{"type":35,"value":550},"llm.usage",{"type":30,"tag":277,"props":552,"children":553},{},[554],{"type":35,"value":529},{"type":30,"tag":277,"props":556,"children":557},{},[558],{"type":35,"value":354},{"type":30,"tag":277,"props":560,"children":561},{},[562],{"type":35,"value":563},"Context window metadata",{"type":30,"tag":245,"props":565,"children":566},{},[567,576,580,584],{"type":30,"tag":277,"props":568,"children":569},{},[570],{"type":30,"tag":43,"props":571,"children":573},{"className":572},[],[574],{"type":35,"value":575},"llm.rate_limit",{"type":30,"tag":277,"props":577,"children":578},{},[579],{"type":35,"value":529},{"type":30,"tag":277,"props":581,"children":582},{},[583],{"type":35,"value":354},{"type":30,"tag":277,"props":585,"children":586},{},[587],{"type":35,"value":588},"Notable when actively limited",{"type":30,"tag":245,"props":590,"children":591},{},[592,603,611,615],{"type":30,"tag":277,"props":593,"children":594},{},[595,601],{"type":30,"tag":43,"props":596,"children":598},{"className":597},[],[599],{"type":35,"value":600},"agent.tool_call",{"type":35,"value":602}," (mcp)",{"type":30,"tag":277,"props":604,"children":605},{},[606],{"type":30,"tag":43,"props":607,"children":609},{"className":608},[],[610],{"type":35,"value":324},{"type":30,"tag":277,"props":612,"children":613},{},[614],{"type":35,"value":329},{"type":30,"tag":277,"props":616,"children":617},{},[618],{"type":35,"value":619},"Bridges to MCP tool tracking",{"type":30,"tag":245,"props":621,"children":622},{},[623,633,641,646],{"type":30,"tag":277,"props":624,"children":625},{},[626,631],{"type":30,"tag":43,"props":627,"children":629},{"className":628},[],[630],{"type":35,"value":600},{"type":35,"value":632}," (skill)",{"type":30,"tag":277,"props":634,"children":635},{},[636],{"type":30,"tag":43,"props":637,"children":639},{"className":638},[],[640],{"type":35,"value":324},{"type":30,"tag":277,"props":642,"children":643},{},[644],{"type":35,"value":645},"Skill",{"type":30,"tag":277,"props":647,"children":648},{},[649],{"type":35,"value":650},"New actor",{"type":30,"tag":245,"props":652,"children":653},{},[654,664,668,672],{"type":30,"tag":277,"props":655,"children":656},{},[657,662],{"type":30,"tag":43,"props":658,"children":660},{"className":659},[],[661],{"type":35,"value":600},{"type":35,"value":663}," (builtin)",{"type":30,"tag":277,"props":665,"children":666},{},[667],{"type":35,"value":354},{"type":30,"tag":277,"props":669,"children":670},{},[671],{"type":35,"value":354},{"type":30,"tag":277,"props":673,"children":674},{},[675],{"type":35,"value":676},"Stats on root actor",{"type":30,"tag":245,"props":678,"children":679},{},[680,689,693,697],{"type":30,"tag":277,"props":681,"children":682},{},[683],{"type":30,"tag":43,"props":684,"children":686},{"className":685},[],[687],{"type":35,"value":688},"agent.tool_decision",{"type":30,"tag":277,"props":690,"children":691},{},[692],{"type":35,"value":354},{"type":30,"tag":277,"props":694,"children":695},{},[696],{"type":35,"value":354},{"type":30,"tag":277,"props":698,"children":699},{},[700],{"type":35,"value":701},"Notable on denial",{"type":30,"tag":245,"props":703,"children":704},{},[705,714,718,722],{"type":30,"tag":277,"props":706,"children":707},{},[708],{"type":30,"tag":43,"props":709,"children":711},{"className":710},[],[712],{"type":35,"value":713},"agent.tool_result",{"type":30,"tag":277,"props":715,"children":716},{},[717],{"type":35,"value":354},{"type":30,"tag":277,"props":719,"children":720},{},[721],{"type":35,"value":354},{"type":30,"tag":277,"props":723,"children":724},{},[725],{"type":35,"value":726},"Notable on failure",{"type":30,"tag":245,"props":728,"children":729},{},[730,739,743,747],{"type":30,"tag":277,"props":731,"children":732},{},[733],{"type":30,"tag":43,"props":734,"children":736},{"className":735},[],[737],{"type":35,"value":738},"process.snapshot",{"type":30,"tag":277,"props":740,"children":741},{},[742],{"type":35,"value":354},{"type":30,"tag":277,"props":744,"children":745},{},[746],{"type":35,"value":354},{"type":30,"tag":277,"props":748,"children":749},{},[750],{"type":35,"value":751},"Bootstraps root actor",{"type":30,"tag":31,"props":753,"children":754},{},[755],{"type":35,"value":756},"IO events (file.read\u002Fwrite, exec.spawn, connection.*, http.request) carry forward from c22 unchanged.",{"key":152,"title":758,"empty":17,"ast":759},"Non-goals",{"type":27,"children":760},[761],{"type":30,"tag":57,"props":762,"children":763},{},[764,775,808,813,826,831],{"type":30,"tag":61,"props":765,"children":766},{},[767,773],{"type":30,"tag":43,"props":768,"children":770},{"className":769},[],[771],{"type":35,"value":772},"agent.message",{"type":35,"value":774}," — conversation turns (no actor\u002Fflow mapping; future timeline feature)",{"type":30,"tag":61,"props":776,"children":777},{},[778,784,786,792,793,799,800,806],{"type":30,"tag":43,"props":779,"children":781},{"className":780},[],[782],{"type":35,"value":783},"file.open\u002Fclose",{"type":35,"value":785},", ",{"type":30,"tag":43,"props":787,"children":789},{"className":788},[],[790],{"type":35,"value":791},"connection.close",{"type":35,"value":785},{"type":30,"tag":43,"props":794,"children":796},{"className":795},[],[797],{"type":35,"value":798},"sse.*",{"type":35,"value":785},{"type":30,"tag":43,"props":801,"children":803},{"className":802},[],[804],{"type":35,"value":805},"websocket.*",{"type":35,"value":807}," — lifecycle bookends already covered by higher-level events",{"type":30,"tag":61,"props":809,"children":810},{},[811],{"type":35,"value":812},"Production-grade error recovery or reconnection UX",{"type":30,"tag":61,"props":814,"children":815},{},[816,818,824],{"type":35,"value":817},"Promoting anything to ",{"type":30,"tag":43,"props":819,"children":821},{"className":820},[],[822],{"type":35,"value":823},"src\u002F",{"type":35,"value":825}," — this stays experiment-local",{"type":30,"tag":61,"props":827,"children":828},{},[829],{"type":35,"value":830},"Real-time session switching (single-session focus is fine)",{"type":30,"tag":61,"props":832,"children":833},{},[834],{"type":35,"value":835},"Diff-aware SSE (full snapshots are fine at current scale)",{"key":152,"title":837,"empty":17,"ast":838},"Progress",{"type":27,"children":839},[840,846,855,953,961,1045,1053,1075,1083,1131,1139,1162,1168,1179],{"type":30,"tag":157,"props":841,"children":843},{"id":842},"_2026-05-13-pipeline-working-mcp-events-flowing",[844],{"type":35,"value":845},"2026-05-13: Pipeline working, MCP events flowing",{"type":30,"tag":31,"props":847,"children":848},{},[849],{"type":30,"tag":850,"props":851,"children":852},"strong",{},[853],{"type":35,"value":854},"Bridge + discover pipeline:",{"type":30,"tag":57,"props":856,"children":857},{},[858,919,924],{"type":30,"tag":61,"props":859,"children":860},{},[861,863,869,871,877,879,885,887,893,895,901,903,909,911,917],{"type":35,"value":862},"Fixed event format mismatch: discover outputs ",{"type":30,"tag":43,"props":864,"children":866},{"className":865},[],[867],{"type":35,"value":868},"{ type, payload, process }",{"type":35,"value":870}," (no ",{"type":30,"tag":43,"props":872,"children":874},{"className":873},[],[875],{"type":35,"value":876},"event",{"type":35,"value":878}," wrapper field). Updated both ",{"type":30,"tag":43,"props":880,"children":882},{"className":881},[],[883],{"type":35,"value":884},"bridge.mjs",{"type":35,"value":886}," ",{"type":30,"tag":43,"props":888,"children":890},{"className":889},[],[891],{"type":35,"value":892},"ingestEvent()",{"type":35,"value":894}," and accumulator ",{"type":30,"tag":43,"props":896,"children":898},{"className":897},[],[899],{"type":35,"value":900},"ingest()",{"type":35,"value":902}," to accept both legacy (",{"type":30,"tag":43,"props":904,"children":906},{"className":905},[],[907],{"type":35,"value":908},"event.event === \"process.log\"",{"type":35,"value":910},") and current (bare ",{"type":30,"tag":43,"props":912,"children":914},{"className":913},[],[915],{"type":35,"value":916},"type",{"type":35,"value":918},") formats.",{"type":30,"tag":61,"props":920,"children":921},{},[922],{"type":35,"value":923},"Fixed SSE session flicker: bridge was re-evaluating \"newest session\" on every broadcast, causing actors to appear\u002Fdisappear as events alternated between PIDs. Fixed by locking SSE clients to a session at connect time.",{"type":30,"tag":61,"props":925,"children":926},{},[927,929,935,937,943,945,951],{"type":35,"value":928},"Upgraded to multi-session SSE: bridge now broadcasts all sessions (event: ",{"type":30,"tag":43,"props":930,"children":932},{"className":931},[],[933],{"type":35,"value":934},"\"sessions\"",{"type":35,"value":936},") to unfiltered clients, single session (event: ",{"type":30,"tag":43,"props":938,"children":940},{"className":939},[],[941],{"type":35,"value":942},"\"snapshot\"",{"type":35,"value":944},") to ",{"type":30,"tag":43,"props":946,"children":948},{"className":947},[],[949],{"type":35,"value":950},"?pid=",{"type":35,"value":952}," clients. Frontend decides how to merge\u002Fgroup.",{"type":30,"tag":31,"props":954,"children":955},{},[956],{"type":30,"tag":850,"props":957,"children":958},{},[959],{"type":35,"value":960},"MCP event normalization:",{"type":30,"tag":57,"props":962,"children":963},{},[964,1008],{"type":30,"tag":61,"props":965,"children":966},{},[967,969,975,977,983,985,991,993,998,1000,1006],{"type":35,"value":968},"MCP payload schema changed: old format nested under ",{"type":30,"tag":43,"props":970,"children":972},{"className":971},[],[973],{"type":35,"value":974},"data.mcp",{"type":35,"value":976},", new format puts fields directly under ",{"type":30,"tag":43,"props":978,"children":980},{"className":979},[],[981],{"type":35,"value":982},"payload",{"type":35,"value":984}," with ",{"type":30,"tag":43,"props":986,"children":988},{"className":987},[],[989],{"type":35,"value":990},"session: { host, transport }",{"type":35,"value":992}," sub-object. Added normalizer in ",{"type":30,"tag":43,"props":994,"children":996},{"className":995},[],[997],{"type":35,"value":900},{"type":35,"value":999}," that flattens both shapes into a single ",{"type":30,"tag":43,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":35,"value":1005},"mcp",{"type":35,"value":1007}," object.",{"type":30,"tag":61,"props":1009,"children":1010},{},[1011,1013,1019,1021,1027,1029,1035,1037,1043],{"type":35,"value":1012},"Required ",{"type":30,"tag":43,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":35,"value":1018},"--plugins core-tools",{"type":35,"value":1020}," (from qcontrol ",{"type":30,"tag":43,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":35,"value":1026},"plugin-core-tools",{"type":35,"value":1028}," branch) plus ",{"type":30,"tag":43,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":35,"value":1034},"inject_mcp_server = true",{"type":35,"value":1036}," in ",{"type":30,"tag":43,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":35,"value":1042},"~\u002F.config\u002Fqcontrol\u002Frun.toml",{"type":35,"value":1044},".",{"type":30,"tag":31,"props":1046,"children":1047},{},[1048],{"type":30,"tag":850,"props":1049,"children":1050},{},[1051],{"type":35,"value":1052},"Root actor labeling:",{"type":30,"tag":57,"props":1054,"children":1055},{},[1056],{"type":30,"tag":61,"props":1057,"children":1058},{},[1059,1065,1067,1073],{"type":30,"tag":43,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":35,"value":1064},"classifyRoot()",{"type":35,"value":1066}," now recognizes ",{"type":30,"tag":43,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":35,"value":1072},"~\u002F.local\u002Fshare\u002Fclaude\u002Fversions\u002F\u003Cver>",{"type":35,"value":1074}," path pattern → label becomes \"Claude Code (2.1.107)\" instead of raw version number.",{"type":30,"tag":31,"props":1076,"children":1077},{},[1078],{"type":30,"tag":850,"props":1079,"children":1080},{},[1081],{"type":35,"value":1082},"QMapLiveStream wrapper component:",{"type":30,"tag":57,"props":1084,"children":1085},{},[1086,1107,1118],{"type":30,"tag":61,"props":1087,"children":1088},{},[1089,1091,1097,1099,1105],{"type":35,"value":1090},"New ",{"type":30,"tag":43,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":35,"value":1096},"src\u002Fcomponents\u002FQMapLiveStream.vue",{"type":35,"value":1098}," — takes ",{"type":30,"tag":43,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":35,"value":1104},"sessions",{"type":35,"value":1106}," array, merges actors\u002Fflows internally, deduplicates by ID, sums flow volumes.",{"type":30,"tag":61,"props":1108,"children":1109},{},[1110,1116],{"type":30,"tag":43,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":35,"value":1115},"QMapLiveStreamDefaults.js",{"type":35,"value":1117}," — all dataflows highlighted, solid lines, distributed arrows (3 count, 2.5 size, 0.5 speed, 0.9 opacity).",{"type":30,"tag":61,"props":1119,"children":1120},{},[1121,1123,1129],{"type":35,"value":1122},"Supports ",{"type":30,"tag":43,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":35,"value":1128},"groupBy: { level1: \"session\" }",{"type":35,"value":1130}," to rug actors by their agent session.",{"type":30,"tag":31,"props":1132,"children":1133},{},[1134],{"type":30,"tag":850,"props":1135,"children":1136},{},[1137],{"type":35,"value":1138},"View modes:",{"type":30,"tag":57,"props":1140,"children":1141},{},[1142,1147,1152,1157],{"type":30,"tag":61,"props":1143,"children":1144},{},[1145],{"type":35,"value":1146},"Entity Type: all sessions merged, grouped by entity type (Agent, MCP Server, External Host)",{"type":30,"tag":61,"props":1148,"children":1149},{},[1150],{"type":35,"value":1151},"Session: each agent session gets its own rug with entity type subdivisions",{"type":30,"tag":61,"props":1153,"children":1154},{},[1155],{"type":35,"value":1156},"Flat: no grouping",{"type":30,"tag":61,"props":1158,"children":1159},{},[1160],{"type":35,"value":1161},"Defaults to Live SSE + Session view.",{"type":30,"tag":157,"props":1163,"children":1165},{"id":1164},"qcontrol-setup-for-reference",[1166],{"type":35,"value":1167},"qcontrol setup (for reference)",{"type":30,"tag":221,"props":1169,"children":1174},{"className":1170,"code":1171,"language":1172,"meta":229,"style":1173},"language-bash","# Build from plugin-core-tools branch\ncd ~\u002Fweb\u002Fqpoint\u002Fqcontrol\ngit checkout plugin-core-tools\nmake\n\n# Configure\n# ~\u002F.config\u002Fqcontrol\u002Frun.toml:\n#   [features]\n#   inject_mcp_server = true\n\n# Claude shim (~\u002F.local\u002Fbin\u002Fclaude) points to local build:\n#   __qc_qctrl=\u002FUsers\u002Fmark\u002Fweb\u002Fqpoint\u002Fqcontrol\u002Fbin\u002Fqcontrol\n#   exec \"$__qc_qctrl\" run --plugins io-events,core-tools -- \"$__qc_target\" \"$@\"\n\n# Pipeline\n~\u002Fweb\u002Fqpoint\u002Fqcontrol\u002Fbin\u002Fqcontrol discover --socket --json 2>\u002Fdev\u002Fnull | node dev\u002Fexperiments\u002Fc28.live-qcontrol-stream\u002Fbridge\u002Fbridge.mjs\n","bash","undefined",[1175],{"type":30,"tag":43,"props":1176,"children":1177},{"__ignoreMap":229},[1178],{"type":35,"value":1171},{"type":30,"tag":1180,"props":1181,"children":1182},"style",{},[1183],{"type":35,"value":229},{"key":152,"title":1185,"empty":17,"ast":1186},"Success Criteria",{"type":27,"children":1187},[1188],{"type":30,"tag":57,"props":1189,"children":1190},{},[1191,1204,1209,1214,1219],{"type":30,"tag":61,"props":1192,"children":1193},{},[1194,1196,1202],{"type":35,"value":1195},"Live pipeline works end-to-end: ",{"type":30,"tag":43,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":35,"value":1201},"qcontrol discover --json | node bridge.mjs",{"type":35,"value":1203}," → browser shows actors appearing in real time",{"type":30,"tag":61,"props":1205,"children":1206},{},[1207],{"type":35,"value":1208},"MCP server and tool actors appear with correct types, labels, and flows",{"type":30,"tag":61,"props":1210,"children":1211},{},[1212],{"type":35,"value":1213},"Fixture mode loads and renders without a running bridge",{"type":30,"tag":61,"props":1215,"children":1216},{},[1217],{"type":35,"value":1218},"Bridge SSE endpoint delivers snapshot-on-connect + debounced updates",{"type":30,"tag":61,"props":1220,"children":1221},{},[1222],{"type":35,"value":1223},"Code is generously commented for cross-project readability",[],[],[],[1228,1235,1239,1243,1246,1250,1254,1258,1262],{"src":1229,"kind":1230,"order":1231,"caption":1232,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-fixture-session.png","hero",102,"Fixture session, session grouping","2026-08-15T23:43:05.086Z","\u002Fexperiments\u002Fc28.live-qcontrol-stream\u002F",{"src":1236,"kind":1230,"order":1237,"caption":1238,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-entity-type.png",103,"Entity-type grouping",{"src":1240,"kind":1230,"order":1241,"caption":1242,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-flat.png",104,"Flat — the ungrouped event field",{"src":18,"kind":1230,"order":1244,"caption":1245,"capturedAt":1233,"route":1234},105,"Dataflows on — sliding arrows and mountain pulses",{"src":1247,"kind":1230,"order":1248,"caption":1249,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-events.png",106,"Event markers over the flows",{"src":1251,"kind":1230,"order":1252,"caption":1253,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-event-focus.png",107,"Event Focus — attention narrowed to the active edge",{"src":1255,"kind":1230,"order":1256,"caption":1257,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-topdown.png",108,"The stream from above",{"src":1259,"kind":1230,"order":1260,"caption":1261,"capturedAt":1233,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-dramatic.png",109,"Dramatic lighting on the session",{"src":1263,"kind":1230,"order":1264,"capturedAt":1265,"route":1234},"\u002Fcycles\u002Fqmap\u002Fc28-live-qcontrol-stream.png",4999,"2026-08-15T16:38:45.880Z",[],[1268],{"route":1234,"href":8},1794599355660]