<mxfile host="app.diagrams.net" modified="2026-07-09T00:00:00.000Z" agent="Codex" version="26.0.0" type="device">
  <diagram id="xopc-system-architecture" name="xopc System Architecture">
    <mxGraphModel dx="1600" dy="1100" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="1200" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="title" value="xopc System Architecture" style="text;html=1;strokeColor=none;fillColor=none;fontSize=24;fontStyle=1;align=left;verticalAlign=middle;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="500" height="40" as="geometry" />
        </mxCell>
        <mxCell id="subtitle" value="Runtime wiring verified from GatewayService, AgentService, Hono routes, ChannelManager, SessionStore, ExtensionLoader, and MCP modules." style="text;html=1;strokeColor=none;fillColor=none;fontSize=12;fontColor=#4b5563;align=left;verticalAlign=middle;" vertex="1" parent="1">
          <mxGeometry x="40" y="55" width="900" height="30" as="geometry" />
        </mxCell>

        <mxCell id="clientsGroup" value="Clients and entry surfaces" style="swimlane;html=1;rounded=0;whiteSpace=wrap;fillColor=#f8fafc;strokeColor=#94a3b8;fontStyle=1;startSize=28;" vertex="1" parent="1">
          <mxGeometry x="40" y="100" width="260" height="720" as="geometry" />
        </mxCell>
        <mxCell id="webConsole" value="Web console SPA&lt;br&gt;React/Vite, hash routes&lt;br&gt;REST + SSE" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#2563eb;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="50" width="200" height="72" as="geometry" />
        </mxCell>
        <mxCell id="mobileApp" value="Mobile app&lt;br&gt;Gateway REST/SSE client" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#2563eb;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="140" width="200" height="58" as="geometry" />
        </mxCell>
        <mxCell id="cliTui" value="CLI / TUI&lt;br&gt;xopc agent, tui, gateway" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f2fe;strokeColor=#0284c7;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="220" width="200" height="64" as="geometry" />
        </mxCell>
        <mxCell id="desktop" value="Electron shell&lt;br&gt;embedded gateway subprocess" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f2fe;strokeColor=#0284c7;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="305" width="200" height="64" as="geometry" />
        </mxCell>
        <mxCell id="externalChannels" value="Messaging platforms&lt;br&gt;Telegram, Weixin, Feishu" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#16a34a;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="395" width="200" height="64" as="geometry" />
        </mxCell>
        <mxCell id="mcpClients" value="External MCP clients&lt;br&gt;stdio MCP bridge" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#d97706;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="480" width="200" height="58" as="geometry" />
        </mxCell>
        <mxCell id="browserExt" value="Browser extension&lt;br&gt;WS bridge on localhost" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fce7f3;strokeColor=#db2777;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="560" width="200" height="58" as="geometry" />
        </mxCell>
        <mxCell id="remoteAccess" value="Remote access wrappers&lt;br&gt;Tailscale, FRP, SSH tunnel" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f1f5f9;strokeColor=#64748b;" vertex="1" parent="clientsGroup">
          <mxGeometry x="30" y="640" width="200" height="58" as="geometry" />
        </mxCell>

        <mxCell id="gatewayGroup" value="Gateway process" style="swimlane;html=1;rounded=0;whiteSpace=wrap;fillColor=#ffffff;strokeColor=#64748b;fontStyle=1;startSize=28;" vertex="1" parent="1">
          <mxGeometry x="340" y="100" width="720" height="720" as="geometry" />
        </mxCell>
        <mxCell id="hono" value="Hono HTTP app&lt;br&gt;auth, CORS/CSRF, body limits, rate limits&lt;br&gt;static Web UI, REST, /api/events SSE, /api/agent SSE" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f2fe;strokeColor=#0284c7;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="40" y="50" width="640" height="78" as="geometry" />
        </mxCell>
        <mxCell id="gatewayService" value="GatewayService&lt;br&gt;composition root and lifecycle&lt;br&gt;config hot reload, readiness, SSE hub" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ede9fe;strokeColor=#7c3aed;fontStyle=1;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="235" y="165" width="250" height="82" as="geometry" />
        </mxCell>
        <mxCell id="messageBus" value="MessageBus&lt;br&gt;inbound queue + outbound queue&lt;br&gt;in-process EventEmitter" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef9c3;strokeColor=#ca8a04;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="40" y="300" width="210" height="78" as="geometry" />
        </mxCell>
        <mxCell id="agentService" value="AgentService&lt;br&gt;turn dispatch, orchestration, prompts,&lt;br&gt;tools, skills, memory, progress, compaction" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#16a34a;fontStyle=1;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="290" y="290" width="390" height="92" as="geometry" />
        </mxCell>
        <mxCell id="channelManager" value="ChannelManager&lt;br&gt;plugin registry, lifecycle supervisor,&lt;br&gt;health, heartbeat, outbound sender/replay" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#16a34a;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="40" y="430" width="280" height="86" as="geometry" />
        </mxCell>
        <mxCell id="extensionLoader" value="ExtensionLoader + Registry&lt;br&gt;activation plan, hooks, tools,&lt;br&gt;channel plugins, gateway methods, UI assets" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fae8ff;strokeColor=#c026d3;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="370" y="430" width="310" height="86" as="geometry" />
        </mxCell>
        <mxCell id="gatewaySidecars" value="Gateway services&lt;br&gt;automations, heartbeat, goals,&lt;br&gt;workflows, notes, projects, marketplace" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f1f5f9;strokeColor=#64748b;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="40" y="560" width="310" height="86" as="geometry" />
        </mxCell>
        <mxCell id="sessionIndex" value="SessionIndex + SessionStore&lt;br&gt;session CRUD, transcript APIs,&lt;br&gt;compaction checkpoints and search" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffedd5;strokeColor=#ea580c;" vertex="1" parent="gatewayGroup">
          <mxGeometry x="390" y="560" width="290" height="86" as="geometry" />
        </mxCell>

        <mxCell id="agentGroup" value="Agent internals" style="swimlane;html=1;rounded=0;whiteSpace=wrap;fillColor=#f8fafc;strokeColor=#94a3b8;fontStyle=1;startSize=28;" vertex="1" parent="1">
          <mxGeometry x="1110" y="100" width="520" height="430" as="geometry" />
        </mxCell>
        <mxCell id="piAgent" value="Embedded pi-agent session&lt;br&gt;AgentManager + session runner&lt;br&gt;runXopcEmbeddedTurn" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#16a34a;fontStyle=1;" vertex="1" parent="agentGroup">
          <mxGeometry x="35" y="55" width="210" height="80" as="geometry" />
        </mxCell>
        <mxCell id="modelManager" value="ModelManager&lt;br&gt;typed roles, overrides,&lt;br&gt;provider/model resolution" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#2563eb;" vertex="1" parent="agentGroup">
          <mxGeometry x="280" y="55" width="205" height="80" as="geometry" />
        </mxCell>
        <mxCell id="toolsRuntime" value="Built-in tools + extension tools&lt;br&gt;filesystem, shell, web, memory,&lt;br&gt;media, session, workflow tools" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef9c3;strokeColor=#ca8a04;" vertex="1" parent="agentGroup">
          <mxGeometry x="35" y="170" width="210" height="92" as="geometry" />
        </mxCell>
        <mxCell id="mcpOutbound" value="Outbound MCP runtime&lt;br&gt;stdio/HTTP transports&lt;br&gt;materialized as agent tools" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#d97706;" vertex="1" parent="agentGroup">
          <mxGeometry x="280" y="175" width="205" height="82" as="geometry" />
        </mxCell>
        <mxCell id="promptMemory" value="Prompt + context&lt;br&gt;agent profile Markdown, skills,&lt;br&gt;memory prefetch, workspace state" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f2fe;strokeColor=#0284c7;" vertex="1" parent="agentGroup">
          <mxGeometry x="35" y="300" width="210" height="82" as="geometry" />
        </mxCell>
        <mxCell id="reliability" value="Turn reliability&lt;br&gt;loop guard, request limiter,&lt;br&gt;self-verify, retries, timeout/abort" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#dc2626;" vertex="1" parent="agentGroup">
          <mxGeometry x="280" y="300" width="205" height="82" as="geometry" />
        </mxCell>

        <mxCell id="stateGroup" value="Local state directory, usually ~/.xopc" style="swimlane;html=1;rounded=0;whiteSpace=wrap;fillColor=#fff7ed;strokeColor=#fb923c;fontStyle=1;startSize=28;" vertex="1" parent="1">
          <mxGeometry x="340" y="860" width="720" height="250" as="geometry" />
        </mxCell>
        <mxCell id="sqlite" value="xopc.db SQLite&lt;br&gt;sessions, transcript rows,&lt;br&gt;FTS, notes, memory records, checkpoints" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffedd5;strokeColor=#ea580c;fontStyle=1;" vertex="1" parent="stateGroup">
          <mxGeometry x="40" y="55" width="210" height="90" as="geometry" />
        </mxCell>
        <mxCell id="config" value="xopc.json + env&lt;br&gt;agents, providers, gateway,&lt;br&gt;channels, MCP, extensions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#d97706;" vertex="1" parent="stateGroup">
          <mxGeometry x="280" y="55" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="filesState" value="Files and directories&lt;br&gt;agents/&lt;id&gt;/profile, skills,&lt;br&gt;workspace, media, logs, extensions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f1f5f9;strokeColor=#64748b;" vertex="1" parent="stateGroup">
          <mxGeometry x="500" y="55" width="180" height="90" as="geometry" />
        </mxCell>

        <mxCell id="externalGroup" value="External systems" style="swimlane;html=1;rounded=0;whiteSpace=wrap;fillColor=#f8fafc;strokeColor=#94a3b8;fontStyle=1;startSize=28;" vertex="1" parent="1">
          <mxGeometry x="1110" y="590" width="520" height="260" as="geometry" />
        </mxCell>
        <mxCell id="providers" value="LLM and model providers&lt;br&gt;@earendil-works/pi-ai&lt;br&gt;OpenAI, Anthropic, Gemini, Ollama, etc." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#2563eb;fontStyle=1;" vertex="1" parent="externalGroup">
          <mxGeometry x="40" y="60" width="210" height="88" as="geometry" />
        </mxCell>
        <mxCell id="mcpServers" value="Configured MCP servers&lt;br&gt;stdio child processes or HTTP servers" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#d97706;" vertex="1" parent="externalGroup">
          <mxGeometry x="285" y="60" width="195" height="72" as="geometry" />
        </mxCell>
        <mxCell id="platformApis" value="Platform APIs&lt;br&gt;Telegram Bot API, Weixin, Feishu,&lt;br&gt;browser extension, remote tunnels" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#16a34a;" vertex="1" parent="externalGroup">
          <mxGeometry x="40" y="165" width="440" height="66" as="geometry" />
        </mxCell>

        <mxCell id="e1" value="HTTP REST + SSE" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563eb;endArrow=block;endFill=1;" edge="1" parent="1" source="webConsole" target="hono">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" value="HTTP REST + SSE" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563eb;endArrow=block;endFill=1;" edge="1" parent="1" source="mobileApp" target="hono">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" value="starts or calls" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0284c7;endArrow=block;endFill=1;" edge="1" parent="1" source="cliTui" target="gatewayService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" value="subprocess" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0284c7;endArrow=block;endFill=1;" edge="1" parent="1" source="desktop" target="gatewayService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" value="channel events" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#16a34a;endArrow=block;endFill=1;" edge="1" parent="1" source="externalChannels" target="channelManager">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e6" value="Gateway REST/SSE bridge" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#d97706;endArrow=block;endFill=1;" edge="1" parent="1" source="mcpClients" target="hono">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" value="WS bridge" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#db2777;endArrow=block;endFill=1;" edge="1" parent="1" source="browserExt" target="gatewayService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e8" value="exposes HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;endArrow=block;endFill=1;" edge="1" parent="1" source="remoteAccess" target="hono">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e9" value="routes call service" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7c3aed;endArrow=block;endFill=1;" edge="1" parent="1" source="hono" target="gatewayService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e10" value="webchat run" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#16a34a;endArrow=block;endFill=1;" edge="1" parent="1" source="gatewayService" target="agentService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e11" value="owns" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#ca8a04;endArrow=block;endFill=1;" edge="1" parent="1" source="gatewayService" target="messageBus">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e12" value="publishInbound / consumeOutbound" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#ca8a04;endArrow=block;endFill=1;startArrow=block;startFill=1;" edge="1" parent="1" source="messageBus" target="agentService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e13" value="send/replay" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#16a34a;endArrow=block;endFill=1;" edge="1" parent="1" source="messageBus" target="channelManager">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e14" value="registers plugins" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#c026d3;endArrow=block;endFill=1;" edge="1" parent="1" source="extensionLoader" target="channelManager">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e15" value="hooks/tools/registry" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#c026d3;endArrow=block;endFill=1;" edge="1" parent="1" source="extensionLoader" target="agentService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e16" value="uses" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;endArrow=block;endFill=1;" edge="1" parent="1" source="gatewaySidecars" target="agentService">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e17" value="session APIs" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#ea580c;endArrow=block;endFill=1;" edge="1" parent="1" source="agentService" target="sessionIndex">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e18" value="run turns" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#16a34a;endArrow=block;endFill=1;" edge="1" parent="1" source="agentService" target="piAgent">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e19" value="select model" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563eb;endArrow=block;endFill=1;" edge="1" parent="1" source="agentService" target="modelManager">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e20" value="tool calls" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#ca8a04;endArrow=block;endFill=1;" edge="1" parent="1" source="piAgent" target="toolsRuntime">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e21" value="MCP tools" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#d97706;endArrow=block;endFill=1;" edge="1" parent="1" source="toolsRuntime" target="mcpOutbound">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e22" value="prompt context" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0284c7;endArrow=block;endFill=1;" edge="1" parent="1" source="promptMemory" target="piAgent">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e23" value="guards" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#dc2626;endArrow=block;endFill=1;" edge="1" parent="1" source="reliability" target="piAgent">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e24" value="SQLite repositories" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#ea580c;endArrow=block;endFill=1;" edge="1" parent="1" source="sessionIndex" target="sqlite">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e25" value="load/save config" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#d97706;endArrow=block;endFill=1;" edge="1" parent="1" source="gatewayService" target="config">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e26" value="profiles, skills, workspace, media" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;endArrow=block;endFill=1;" edge="1" parent="1" source="agentService" target="filesState">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e27" value="model API calls" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563eb;endArrow=block;endFill=1;" edge="1" parent="1" source="modelManager" target="providers">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e28" value="stdio/HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#d97706;endArrow=block;endFill=1;" edge="1" parent="1" source="mcpOutbound" target="mcpServers">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e29" value="platform calls" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#16a34a;endArrow=block;endFill=1;" edge="1" parent="1" source="channelManager" target="platformApis">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
