Files
pi-dashboard/docs/diagrams/pi-dashboard.svg
Sam Rolfe 3b3e63afb9 docs: add architecture diagrams (Mermaid + Archify map) for pi-dashboard
- docs/pi-dashboard.mmd — Mermaid source of truth
- docs/diagrams/pi-dashboard.png|svg — rendered via mmdc (mermaid-cli 11.16.0)
- docs/archify/pi-dashboard.architecture.json — Archify JSON IR
- docs/pi-dashboard-map.html — interactive map (9/9 showcase checks)
- docs/README.md — embedded mermaid + artifact index + regenerate commands
- visual-check screenshots/evidence at 1440x900 + 2048x1320 (light/dark)

Generated by project-diagramming-mermaid + project-diagramming-archify skills.
2026-09-06 11:35:09 +10:00

1 line
25 KiB
XML

<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 2007.42px; background-color: white;" viewBox="0 0 2007.421875 292" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M250.344,79L261.919,79C273.495,79,296.646,79,324.618,79C352.591,79,385.385,79,401.783,79L418.18,79" id="my-svg-L_EXT_SF_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_EXT_SF_0" data-points="W3sieCI6MjUwLjM0Mzc1LCJ5Ijo3OX0seyJ4IjozMTkuNzk2ODc1LCJ5Ijo3OX0seyJ4Ijo0MjIuMTc5Njg3NSwieSI6Nzl9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M625.344,257L642.815,257C660.286,257,695.229,257,735.736,253.785C776.242,250.571,822.312,244.142,845.347,240.927L868.382,237.712" id="my-svg-L_REM_ST_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_REM_ST_0" data-points="W3sieCI6NjI1LjM0Mzc1LCJ5IjoyNTd9LHsieCI6NzMwLjE3MTg3NSwieSI6MjU3fSx7IngiOjg3Mi4zNDM3NSwieSI6MjM3LjE1OTQ4OTEzNjM2MDF9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M592.414,110.698L615.374,119.248C638.333,127.799,684.253,144.899,730.275,161.151C776.298,177.403,822.424,192.806,845.487,200.507L868.55,208.209" id="my-svg-L_SF_ST_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_SF_ST_0" data-points="W3sieCI6NTkyLjQxNDA2MjUsInkiOjExMC42OTgxNTYxOTc0MjAwOH0seyJ4Ijo3MzAuMTcxODc1LCJ5IjoxNjJ9LHsieCI6ODcyLjM0Mzc1LCJ5IjoyMDkuNDc1NTA4MTM3OTk1NX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M989.281,237.019L1006.27,239.35C1023.258,241.68,1057.234,246.34,1087.028,245.019C1116.821,243.699,1142.431,236.398,1155.235,232.747L1168.04,229.097" id="my-svg-L_ST_MAIN_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_ST_MAIN_0" data-points="W3sieCI6OTg5LjI4MTI1LCJ5IjoyMzcuMDE5NDgyNzMzNDI3NX0seyJ4IjoxMDkxLjIxMDkzNzUsInkiOjI1MX0seyJ4IjoxMTcxLjg4NzAzMTI1LCJ5IjoyMjh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1026.625,125L1037.389,125C1048.154,125,1069.682,125,1098.681,132.902C1127.679,140.803,1164.148,156.606,1182.382,164.508L1200.616,172.41" id="my-svg-L_CFG_MAIN_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CFG_MAIN_0" data-points="W3sieCI6MTAyNi42MjUsInkiOjEyNX0seyJ4IjoxMDkxLjIxMDkzNzUsInkiOjEyNX0seyJ4IjoxMjA0LjI4NjY5ODE5MDc4OTQsInkiOjE3NH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1155.797,204.79L1145.033,205.159C1134.268,205.527,1112.74,206.263,1085.647,208.871C1058.555,211.479,1025.9,215.958,1009.572,218.197L993.244,220.437" id="my-svg-L_MAIN_ST_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MAIN_ST_0" data-points="W3sieCI6MTE1NS43OTY4NzUsInkiOjIwNC43OTA0NTgzNzIzMTA1OH0seyJ4IjoxMDkxLjIxMDkzNzUsInkiOjIwN30seyJ4Ijo5ODkuMjgxMjUsInkiOjIyMC45ODA1MTcyNjY1NzI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1377.391,201L1389.156,201C1400.922,201,1424.453,201,1450.289,196.535C1476.124,192.07,1504.264,183.14,1518.334,178.675L1532.404,174.21" id="my-svg-L_MAIN_UI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_MAIN_UI_0" data-points="W3sieCI6MTM3Ny4zOTA2MjUsInkiOjIwMX0seyJ4IjoxNDQ3Ljk4NDM3NSwieSI6MjAxfSx7IngiOjE1MzYuMjE2MTkzMTgxODE4MiwieSI6MTczfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1662.171,173L1679.833,184.667C1697.494,196.333,1732.817,219.667,1757.167,231.333C1781.516,243,1794.891,243,1801.578,243L1808.266,243" id="my-svg-L_UI_AT_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_UI_AT_0" data-points="W3sieCI6MTY2Mi4xNzA5MDg1MDUxNTQ2LCJ5IjoxNzN9LHsieCI6MTc2OC4xNDA2MjUsInkiOjI0M30seyJ4IjoxODEyLjI2NTYyNSwieSI6MjQzfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1724.016,141.103L1731.37,140.753C1738.724,140.402,1753.432,139.701,1773.053,139.351C1792.674,139,1817.208,139,1829.475,139L1841.742,139" id="my-svg-L_UI_HK_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_UI_HK_0" data-points="W3sieCI6MTcyNC4wMTU2MjUsInkiOjE0MS4xMDM0MjYyNjA5MDY2fSx7IngiOjE3NjguMTQwNjI1LCJ5IjoxMzl9LHsieCI6MTg0NS43NDIxODc1LCJ5IjoxMzl9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1657.016,119L1675.536,105C1694.057,91,1731.099,63,1758.156,49C1785.214,35,1802.286,35,1810.823,35L1819.359,35" id="my-svg-L_UI_TX_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_UI_TX_0" data-points="W3sieCI6MTY1Ny4wMTU2MjUsInkiOjExOX0seyJ4IjoxNzY4LjE0MDYyNSwieSI6MzV9LHsieCI6MTgyMy4zNTkzNzUsInkiOjM1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1564.918,119L1545.429,109.667C1525.94,100.333,1486.962,81.667,1437.242,72.333C1387.521,63,1327.057,63,1267.595,63C1208.133,63,1149.672,63,1093.708,63C1037.745,63,984.279,63,924.105,63C863.932,63,797.052,63,741.317,64.601C685.583,66.201,640.993,69.402,618.698,71.003L596.404,72.603" id="my-svg-L_UI_SF_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_UI_SF_0" data-points="W3sieCI6MTU2NC45MTgxMDk5Mzk3NTksInkiOjExOX0seyJ4IjoxNDQ3Ljk4NDM3NSwieSI6NjN9LHsieCI6MTI2Ni41OTM3NSwieSI6NjN9LHsieCI6MTA5MS4yMTA5Mzc1LCJ5Ijo2M30seyJ4Ijo5MzAuODEyNSwieSI6NjN9LHsieCI6NzMwLjE3MTg3NSwieSI6NjN9LHsieCI6NTkyLjQxNDA2MjUsInkiOjcyLjg4OTUxMjA1ODMyODY2fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(319.796875, 79)"><g class="label" data-id="L_EXT_SF_0" transform="translate(-44.453125, -12)"><foreignObject width="88.90625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>writes JSON</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(730.171875, 257)"><g class="label" data-id="L_REM_ST_0" transform="translate(-79.828125, -24)"><foreignObject width="159.65625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>ssh cat *.json<br />5s timeout + cooldown</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(730.171875, 162)"><g class="label" data-id="L_SF_ST_0" transform="translate(-57.8203125, -12)"><foreignObject width="115.640625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>readLocalStates</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1081.80233, 249.70953)"><g class="label" data-id="L_ST_MAIN_0" transform="translate(-39.5859375, -12)"><foreignObject width="79.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>AgentState</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1091.2109375, 125)"><g class="label" data-id="L_CFG_MAIN_0" transform="translate(-38.25, -12)"><foreignObject width="76.5" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>loadConfig</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1072.25824, 209.59952)"><g class="label" data-id="L_MAIN_ST_0" transform="translate(-37.3515625, -12)"><foreignObject width="74.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>2s poll tick</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1447.984375, 201)"><g class="label" data-id="L_MAIN_UI_0" transform="translate(-45.59375, -12)"><foreignObject width="91.1875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>table + detail</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1768.140625, 243)"><g class="label" data-id="L_UI_AT_0" transform="translate(-19.125, -12)"><foreignObject width="38.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Enter</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1768.140625, 139)"><g class="label" data-id="L_UI_HK_0" transform="translate(-4.453125, -12)"><foreignObject width="8.90625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>d</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1768.140625, 35)"><g class="label" data-id="L_UI_TX_0" transform="translate(-12.8984375, -12)"><foreignObject width="25.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Tab</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1091.2109375, 63)"><g class="label" data-id="L_UI_SF_0" transform="translate(-12.0078125, -12)"><foreignObject width="24.015625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Del</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-EXT-0" data-look="classic" transform="translate(129.171875, 79)"><rect class="basic label-container" style="" x="-121.171875" y="-27" width="242.34375" height="54"/><g class="label" style="" transform="translate(-91.171875, -12)"><rect/><foreignObject width="182.34375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>dashboard.ts pi extension</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-SF-1" data-look="classic" transform="translate(507.296875, 79)"><path d="M0,14.415189203492988 a85.1171875,14.415189203492988 0,0,0 170.234375,0 a85.1171875,14.415189203492988 0,0,0 -170.234375,0 l0,77.41518920349299 a85.1171875,14.415189203492988 0,0,0 170.234375,0 l0,-77.41518920349299" class="basic label-container outer-path" style="" transform="translate(-85.1171875, -53.12278380523948)"/><g class="label" style="" transform="translate(-77.6171875, -14)"><rect/><foreignObject width="155.234375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>state files<br />~/.pi/agent/dashboard</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-REM-2" data-look="classic" transform="translate(507.296875, 257)"><rect class="basic label-container" style="" x="-118.046875" y="-27" width="236.09375" height="54"/><g class="label" style="" transform="translate(-88.046875, -12)"><rect/><foreignObject width="176.09375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>remote machines .13 .51</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-ST-3" data-look="classic" transform="translate(930.8125, 229)"><rect class="basic label-container" style="" x="-58.46875" y="-27" width="116.9375" height="54"/><g class="label" style="" transform="translate(-28.46875, -12)"><rect/><foreignObject width="56.9375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>state.go</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-MAIN-7" data-look="classic" transform="translate(1266.59375, 201)"><rect class="basic label-container" style="" x="-110.796875" y="-27" width="221.59375" height="54"/><g class="label" style="" transform="translate(-80.796875, -12)"><rect/><foreignObject width="161.59375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>main.go bubbletea TUI</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-CFG-8" data-look="classic" transform="translate(930.8125, 125)"><rect class="basic label-container" style="" x="-95.8125" y="-27" width="191.625" height="54"/><g class="label" style="" transform="translate(-65.8125, -12)"><rect/><foreignObject width="131.625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>pi-dashboard.yaml</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-UI-13" data-look="classic" transform="translate(1621.296875, 146)"><rect class="basic label-container" style="" x="-102.71875" y="-27" width="205.4375" height="54"/><g class="label" style="" transform="translate(-72.71875, -12)"><rect/><foreignObject width="145.4375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Table + Detail panes</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-AT-15" data-look="classic" transform="translate(1905.84375, 243)"><rect class="basic label-container" style="" x="-93.578125" y="-27" width="187.15625" height="54"/><g class="label" style="" transform="translate(-63.578125, -12)"><rect/><foreignObject width="127.15625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>tmux / zellij attach</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-HK-17" data-look="classic" transform="translate(1905.84375, 139)"><rect class="basic label-container" style="" x="-60.1015625" y="-27" width="120.203125" height="54"/><g class="label" style="" transform="translate(-30.1015625, -12)"><rect/><foreignObject width="60.203125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>hunk diff</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-TX-19" data-look="classic" transform="translate(1905.84375, 35)"><rect class="basic label-container" style="" x="-82.484375" y="-27" width="164.96875" height="54"/><g class="label" style="" transform="translate(-52.484375, -12)"><rect/><foreignObject width="104.96875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>tuxedo todo.txt</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg>