superlocalmemory 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,405 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="app.diagrams.net" modified="2026-02-13T00:00:00.000Z" agent="SuperLocalMemory V2" version="24.0.0" type="device">
3
+ <diagram id="slm-v2-architecture" name="10-Layer Architecture">
4
+ <mxGraphModel dx="1422" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="900" background="#0A0E1A" math="0" shadow="0">
5
+ <root>
6
+ <mxCell id="0" />
7
+ <mxCell id="1" parent="0" />
8
+
9
+ <!-- ============================================================ -->
10
+ <!-- TITLE AND SUBTITLE -->
11
+ <!-- ============================================================ -->
12
+ <mxCell id="title" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:22px;font-weight:bold;&#39;&gt;SuperLocalMemory V2 &amp;mdash; 10-Layer Architecture&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
13
+ <mxGeometry x="250" y="15" width="700" height="35" as="geometry" />
14
+ </mxCell>
15
+ <mxCell id="subtitle" value="&lt;font color=&#39;#94A3B8&#39; style=&#39;font-size:13px;&#39;&gt;MCP + A2A Dual Protocol &amp;bull; Local-First &amp;bull; Privacy-First &amp;bull; Zero Cloud Dependencies&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
16
+ <mxGeometry x="310" y="48" width="580" height="25" as="geometry" />
17
+ </mxCell>
18
+
19
+ <!-- ============================================================ -->
20
+ <!-- 10-LAYER STACK (bottom to top, positioned from y=780 upward) -->
21
+ <!-- Each layer: 520w x 55h, centered at x=340 -->
22
+ <!-- ============================================================ -->
23
+
24
+ <!-- Layer 1: Raw Storage -->
25
+ <mxCell id="L1" value="&lt;b&gt;Layer 1: Raw Storage&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#FEFCE8;&#39;&gt;src/memory_store_v2.py &amp;mdash; SQLite + FTS5 + TF-IDF vectors&lt;br&gt;DB: ~/.claude-memory/memory.db&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F59E0B;fontColor=#1E1B0F;strokeColor=#D97706;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
26
+ <mxGeometry x="340" y="750" width="520" height="58" as="geometry" />
27
+ </mxCell>
28
+
29
+ <!-- Layer 2: Hierarchical Index -->
30
+ <mxCell id="L2" value="&lt;b&gt;Layer 2: Hierarchical Index&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#FFF7ED;&#39;&gt;src/tree_manager.py &amp;mdash; Parent-child relationships, breadcrumb navigation&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F97316;fontColor=#1E1B0F;strokeColor=#EA580C;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
31
+ <mxGeometry x="340" y="685" width="520" height="55" as="geometry" />
32
+ </mxCell>
33
+
34
+ <!-- Layer 3: Knowledge Graph -->
35
+ <mxCell id="L3" value="&lt;b&gt;Layer 3: Knowledge Graph&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#FFF1F2;&#39;&gt;src/graph_engine.py &amp;mdash; TF-IDF entity extraction, hierarchical Leiden clustering, community summaries&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EF4444;fontColor=#1E1B0F;strokeColor=#DC2626;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
36
+ <mxGeometry x="340" y="620" width="520" height="55" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- Layer 4: Pattern Learning -->
40
+ <mxCell id="L4" value="&lt;b&gt;Layer 4: Pattern Learning&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#FDF2F8;&#39;&gt;src/pattern_learner.py &amp;mdash; MACLA Beta-Binomial Bayesian confidence scoring&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EC4899;fontColor=#1E1B0F;strokeColor=#DB2777;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
41
+ <mxGeometry x="340" y="555" width="520" height="55" as="geometry" />
42
+ </mxCell>
43
+
44
+ <!-- Layer 5: Skills Layer -->
45
+ <mxCell id="L5" value="&lt;b&gt;Layer 5: Skills Layer&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#FAF5FF;&#39;&gt;skills/* &amp;mdash; 6 slash-command skills (Claude Code, Continue.dev, Cody)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A855F7;fontColor=#FFFFFF;strokeColor=#9333EA;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
46
+ <mxGeometry x="340" y="490" width="520" height="55" as="geometry" />
47
+ </mxCell>
48
+
49
+ <!-- Layer 6: MCP Integration -->
50
+ <mxCell id="L6" value="&lt;b&gt;Layer 6: MCP Integration&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#EDE9FE;&#39;&gt;mcp_server.py &amp;mdash; 6 tools, 4 resources, 2 prompts via Model Context Protocol&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#8B5CF6;fontColor=#FFFFFF;strokeColor=#7C3AED;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
51
+ <mxGeometry x="340" y="425" width="520" height="55" as="geometry" />
52
+ </mxCell>
53
+
54
+ <!-- Layer 7: Universal Access -->
55
+ <mxCell id="L7" value="&lt;b&gt;Layer 7: Universal Access&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#EEF2FF;&#39;&gt;MCP + Skills + CLI &amp;mdash; 3 access methods, 16+ IDE integrations&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6366F1;fontColor=#FFFFFF;strokeColor=#4F46E5;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
56
+ <mxGeometry x="340" y="360" width="520" height="55" as="geometry" />
57
+ </mxCell>
58
+
59
+ <!-- Layer 8: Hybrid Search -->
60
+ <mxCell id="L8" value="&lt;b&gt;Layer 8: Hybrid Search&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#EFF6FF;&#39;&gt;src/hybrid_search.py &amp;mdash; Semantic + FTS5 + Graph combined retrieval&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3B82F6;fontColor=#FFFFFF;strokeColor=#2563EB;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
61
+ <mxGeometry x="340" y="295" width="520" height="55" as="geometry" />
62
+ </mxCell>
63
+
64
+ <!-- Layer 9: Visualization -->
65
+ <mxCell id="L9" value="&lt;b&gt;Layer 9: Visualization&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#ECFEFF;&#39;&gt;ui_server.py &amp;mdash; Interactive web dashboard, timeline, graph explorer&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#06B6D4;fontColor=#FFFFFF;strokeColor=#0891B2;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1">
66
+ <mxGeometry x="340" y="230" width="520" height="55" as="geometry" />
67
+ </mxCell>
68
+
69
+ <!-- Layer 10: A2A Agent Collaboration -->
70
+ <mxCell id="L10" value="&lt;b&gt;Layer 10: A2A Agent Collaboration&lt;/b&gt;&lt;br&gt;&lt;font style=&#39;font-size:10px;color:#ECFDF5;&#39;&gt;src/a2a_server.py (PLANNED v2.7) &amp;mdash; Agent-to-Agent Protocol (Google/Linux Foundation)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#10B981;fontColor=#FFFFFF;strokeColor=#059669;arcSize=8;fontSize=12;align=center;verticalAlign=middle;shadow=1;dashed=1;dashPattern=8 4;" vertex="1" parent="1">
71
+ <mxGeometry x="340" y="165" width="520" height="55" as="geometry" />
72
+ </mxCell>
73
+
74
+ <!-- ============================================================ -->
75
+ <!-- INTER-LAYER ARROWS (data flow upward) -->
76
+ <!-- ============================================================ -->
77
+ <mxCell id="arrow_L1_L2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L1" target="L2" parent="1">
78
+ <mxGeometry relative="1" as="geometry" />
79
+ </mxCell>
80
+ <mxCell id="arrow_L2_L3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L2" target="L3" parent="1">
81
+ <mxGeometry relative="1" as="geometry" />
82
+ </mxCell>
83
+ <mxCell id="arrow_L3_L4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L3" target="L4" parent="1">
84
+ <mxGeometry relative="1" as="geometry" />
85
+ </mxCell>
86
+ <mxCell id="arrow_L4_L5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L4" target="L5" parent="1">
87
+ <mxGeometry relative="1" as="geometry" />
88
+ </mxCell>
89
+ <mxCell id="arrow_L5_L6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L5" target="L6" parent="1">
90
+ <mxGeometry relative="1" as="geometry" />
91
+ </mxCell>
92
+ <mxCell id="arrow_L6_L7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L6" target="L7" parent="1">
93
+ <mxGeometry relative="1" as="geometry" />
94
+ </mxCell>
95
+ <mxCell id="arrow_L7_L8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L7" target="L8" parent="1">
96
+ <mxGeometry relative="1" as="geometry" />
97
+ </mxCell>
98
+ <mxCell id="arrow_L8_L9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;" edge="1" source="L8" target="L9" parent="1">
99
+ <mxGeometry relative="1" as="geometry" />
100
+ </mxCell>
101
+ <mxCell id="arrow_L9_L10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#475569;strokeWidth=1;endArrow=block;endFill=1;opacity=40;dashed=1;dashPattern=8 4;" edge="1" source="L9" target="L10" parent="1">
102
+ <mxGeometry relative="1" as="geometry" />
103
+ </mxCell>
104
+
105
+ <!-- ============================================================ -->
106
+ <!-- LEFT SIDE: MCP PROTOCOL PATH (Agent -> Tool) — LIVE -->
107
+ <!-- ============================================================ -->
108
+
109
+ <!-- MCP Path Vertical Bar -->
110
+ <mxCell id="mcp_path" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#8B5CF6;strokeColor=#7C3AED;opacity=20;arcSize=12;" vertex="1" parent="1">
111
+ <mxGeometry x="55" y="165" width="255" height="660" as="geometry" />
112
+ </mxCell>
113
+
114
+ <!-- MCP Path Label -->
115
+ <mxCell id="mcp_label" value="&lt;font color=&#39;#C4B5FD&#39; style=&#39;font-size:14px;font-weight:bold;&#39;&gt;MCP Protocol&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#A78BFA&#39; style=&#39;font-size:11px;&#39;&gt;Agent &amp;rarr; Tool&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#22C55E&#39; style=&#39;font-size:10px;font-weight:bold;&#39;&gt;LIVE&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
116
+ <mxGeometry x="110" y="172" width="140" height="60" as="geometry" />
117
+ </mxCell>
118
+
119
+ <!-- MCP Connected IDEs -->
120
+ <mxCell id="mcp_ide1" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Claude Desktop&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
121
+ <mxGeometry x="70" y="245" width="110" height="30" as="geometry" />
122
+ </mxCell>
123
+ <mxCell id="mcp_ide2" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Cursor&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
124
+ <mxGeometry x="190" y="245" width="110" height="30" as="geometry" />
125
+ </mxCell>
126
+ <mxCell id="mcp_ide3" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Windsurf&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
127
+ <mxGeometry x="70" y="285" width="110" height="30" as="geometry" />
128
+ </mxCell>
129
+ <mxCell id="mcp_ide4" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;VS Code / Copilot&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
130
+ <mxGeometry x="190" y="285" width="110" height="30" as="geometry" />
131
+ </mxCell>
132
+ <mxCell id="mcp_ide5" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Continue.dev&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
133
+ <mxGeometry x="70" y="325" width="110" height="30" as="geometry" />
134
+ </mxCell>
135
+ <mxCell id="mcp_ide6" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Zed&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#6D28D9;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
136
+ <mxGeometry x="190" y="325" width="110" height="30" as="geometry" />
137
+ </mxCell>
138
+ <mxCell id="mcp_ide_more" value="&lt;font style=&#39;font-size:10px;color:#94A3B8;&#39;&gt;+ 10 more IDEs...&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
139
+ <mxGeometry x="115" y="360" width="120" height="25" as="geometry" />
140
+ </mxCell>
141
+
142
+ <!-- MCP Tools Detail -->
143
+ <mxCell id="mcp_tools" value="&lt;font color=&#39;#C4B5FD&#39; style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;MCP Capabilities:&lt;/b&gt;&lt;br&gt;6 Tools: remember, recall, search,&lt;br&gt;forget, list, build-graph&lt;br&gt;4 Resources: status, recent, stats, graph&lt;br&gt;2 Prompts: context, summary&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#4C1D95;arcSize=10;fontSize=10;align=left;spacingLeft=10;" vertex="1" parent="1">
144
+ <mxGeometry x="70" y="395" width="230" height="80" as="geometry" />
145
+ </mxCell>
146
+
147
+ <!-- MCP CLI & Skills -->
148
+ <mxCell id="mcp_cli" value="&lt;font color=&#39;#C4B5FD&#39; style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;CLI:&lt;/b&gt; slm remember | recall | status&lt;br&gt;&lt;b&gt;Skills:&lt;/b&gt; /superlocalmemoryv2:*&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1B4B;fontColor=#C4B5FD;strokeColor=#4C1D95;arcSize=10;fontSize=10;align=left;spacingLeft=10;" vertex="1" parent="1">
149
+ <mxGeometry x="70" y="485" width="230" height="45" as="geometry" />
150
+ </mxCell>
151
+
152
+ <!-- MCP Arrow to Layer 6 -->
153
+ <mxCell id="mcp_arrow_to_stack" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#8B5CF6;strokeWidth=2;rounded=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" source="mcp_tools" target="L6" parent="1">
154
+ <mxGeometry relative="1" as="geometry" />
155
+ </mxCell>
156
+ <mxCell id="mcp_arrow_to_L7" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#8B5CF6;strokeWidth=2;rounded=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" source="mcp_cli" target="L7" parent="1">
157
+ <mxGeometry relative="1" as="geometry" />
158
+ </mxCell>
159
+
160
+ <!-- MCP Arrow to Layer 5 (Skills) -->
161
+ <mxCell id="mcp_arrow_to_L5" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#8B5CF6;strokeWidth=1.5;rounded=1;exitX=1;exitY=0.8;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=0;" edge="1" source="mcp_cli" target="L5" parent="1">
162
+ <mxGeometry relative="1" as="geometry" />
163
+ </mxCell>
164
+
165
+ <!-- Database icon at bottom left -->
166
+ <mxCell id="db_icon" value="&lt;font color=&#39;#F59E0B&#39; style=&#39;font-size:11px;font-weight:bold;&#39;&gt;SQLite DB&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#94A3B8&#39; style=&#39;font-size:9px;&#39;&gt;~/.claude-memory/&lt;br&gt;memory.db&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=6;fillColor=#1C1917;strokeColor=#F59E0B;fontColor=#F59E0B;arcSize=8;shadow=1;" vertex="1" parent="1">
167
+ <mxGeometry x="115" y="710" width="130" height="70" as="geometry" />
168
+ </mxCell>
169
+ <!-- DB Arrow to Layer 1 -->
170
+ <mxCell id="db_arrow" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#F59E0B;strokeWidth=2;rounded=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" source="db_icon" target="L1" parent="1">
171
+ <mxGeometry relative="1" as="geometry" />
172
+ </mxCell>
173
+
174
+ <!-- ============================================================ -->
175
+ <!-- RIGHT SIDE: A2A PROTOCOL PATH (Agent <-> Agent) — PLANNED -->
176
+ <!-- ============================================================ -->
177
+
178
+ <!-- A2A Path Vertical Bar -->
179
+ <mxCell id="a2a_path" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#10B981;strokeColor=#059669;opacity=15;arcSize=12;dashed=1;dashPattern=12 6;" vertex="1" parent="1">
180
+ <mxGeometry x="890" y="165" width="280" height="430" as="geometry" />
181
+ </mxCell>
182
+
183
+ <!-- A2A Path Label -->
184
+ <mxCell id="a2a_label" value="&lt;font color=&#39;#6EE7B7&#39; style=&#39;font-size:14px;font-weight:bold;&#39;&gt;A2A Protocol&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#34D399&#39; style=&#39;font-size:11px;&#39;&gt;Agent &amp;harr; Agent&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#FBBF24&#39; style=&#39;font-size:10px;font-weight:bold;&#39;&gt;PLANNED v2.7&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
185
+ <mxGeometry x="960" y="172" width="140" height="60" as="geometry" />
186
+ </mxCell>
187
+
188
+ <!-- A2A Connected Agents -->
189
+ <mxCell id="a2a_agent1" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Research Agent&lt;/b&gt;&lt;br&gt;(Perplexity)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#064E3B;fontColor=#6EE7B7;strokeColor=#059669;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
190
+ <mxGeometry x="905" y="245" width="120" height="40" as="geometry" />
191
+ </mxCell>
192
+ <mxCell id="a2a_agent2" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Coding Agent&lt;/b&gt;&lt;br&gt;(Claude Code)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#064E3B;fontColor=#6EE7B7;strokeColor=#059669;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
193
+ <mxGeometry x="1035" y="245" width="120" height="40" as="geometry" />
194
+ </mxCell>
195
+ <mxCell id="a2a_agent3" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Testing Agent&lt;/b&gt;&lt;br&gt;(Codex)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#064E3B;fontColor=#6EE7B7;strokeColor=#059669;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
196
+ <mxGeometry x="905" y="295" width="120" height="40" as="geometry" />
197
+ </mxCell>
198
+ <mxCell id="a2a_agent4" value="&lt;font style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;Review Agent&lt;/b&gt;&lt;br&gt;(Custom)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#064E3B;fontColor=#6EE7B7;strokeColor=#059669;arcSize=14;fontSize=10;shadow=1;" vertex="1" parent="1">
199
+ <mxGeometry x="1035" y="295" width="120" height="40" as="geometry" />
200
+ </mxCell>
201
+
202
+ <!-- A2A Protocol Details -->
203
+ <mxCell id="a2a_details" value="&lt;font color=&#39;#6EE7B7&#39; style=&#39;font-size:10px;&#39;&gt;&lt;b&gt;A2A Capabilities:&lt;/b&gt;&lt;br&gt;JSON-RPC 2.0 + SSE Streaming&lt;br&gt;Agent Card Discovery&lt;br&gt;gRPC + JSON-RPC Dual Transport&lt;br&gt;Ed25519 Signed Security Cards&lt;br&gt;150+ orgs (Google, MS, AWS, IBM)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#064E3B;fontColor=#6EE7B7;strokeColor=#065F46;arcSize=10;fontSize=10;align=left;spacingLeft=10;" vertex="1" parent="1">
204
+ <mxGeometry x="910" y="350" width="245" height="90" as="geometry" />
205
+ </mxCell>
206
+
207
+ <!-- A2A Key Insight -->
208
+ <mxCell id="a2a_insight" value="&lt;font color=&#39;#FBBF24&#39; style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;Key Insight:&lt;/b&gt; A2A has NO shared memory.&lt;br&gt;SLM fills this gap as the universal&lt;br&gt;memory layer for all agents.&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#422006;fontColor=#FBBF24;strokeColor=#92400E;arcSize=10;fontSize=9;align=center;dashed=1;dashPattern=4 4;" vertex="1" parent="1">
209
+ <mxGeometry x="920" y="455" width="225" height="50" as="geometry" />
210
+ </mxCell>
211
+
212
+ <!-- A2A Arrow to Layer 10 -->
213
+ <mxCell id="a2a_arrow_to_L10" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#10B981;strokeWidth=2;rounded=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;dashPattern=8 4;" edge="1" source="a2a_details" target="L10" parent="1">
214
+ <mxGeometry relative="1" as="geometry" />
215
+ </mxCell>
216
+
217
+ <!-- Bidirectional arrow showing A2A is bidirectional -->
218
+ <mxCell id="a2a_bidir" value="" style="endArrow=block;startArrow=block;endFill=1;startFill=1;html=1;strokeColor=#10B981;strokeWidth=1.5;rounded=1;dashed=1;dashPattern=6 3;" edge="1" source="a2a_agent1" target="a2a_agent2" parent="1">
219
+ <mxGeometry relative="1" as="geometry" />
220
+ </mxCell>
221
+
222
+ <!-- ============================================================ -->
223
+ <!-- v2.5 COMPONENTS GROUP (right side, below A2A) -->
224
+ <!-- ============================================================ -->
225
+
226
+ <!-- v2.5 Group Container -->
227
+ <mxCell id="v25_group" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#F59E0B;arcSize=6;dashed=1;dashPattern=8 4;strokeWidth=2;opacity=80;" vertex="1" parent="1">
228
+ <mxGeometry x="890" y="610" width="280" height="210" as="geometry" />
229
+ </mxCell>
230
+
231
+ <!-- v2.5 Group Title -->
232
+ <mxCell id="v25_title" value="&lt;font color=&#39;#F59E0B&#39; style=&#39;font-size:12px;font-weight:bold;&#39;&gt;v2.5 Components&lt;/font&gt;&lt;br&gt;&lt;font color=&#39;#FBBF24&#39; style=&#39;font-size:9px;&#39;&gt;IN DEVELOPMENT&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
233
+ <mxGeometry x="960" y="615" width="140" height="38" as="geometry" />
234
+ </mxCell>
235
+
236
+ <!-- v2.5: db_connection_manager (PREREQUISITE) -->
237
+ <mxCell id="v25_db" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;db_connection_manager.py&lt;/b&gt;&lt;br&gt;WAL mode, pool, write queue&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#F59E0B;arcSize=12;fontSize=9;shadow=1;" vertex="1" parent="1">
238
+ <mxGeometry x="900" y="655" width="125" height="36" as="geometry" />
239
+ </mxCell>
240
+ <mxCell id="v25_prereq_badge" value="&lt;font color=&#39;#FEF3C7&#39; style=&#39;font-size:7px;font-weight:bold;&#39;&gt;PREREQUISITE&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DC2626;fontColor=#FEF3C7;strokeColor=#DC2626;arcSize=20;fontSize=7;" vertex="1" parent="1">
241
+ <mxGeometry x="1030" y="655" width="70" height="16" as="geometry" />
242
+ </mxCell>
243
+
244
+ <!-- v2.5: event_bus -->
245
+ <mxCell id="v25_eventbus" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;event_bus.py&lt;/b&gt;&lt;br&gt;SSE/WebSocket/Webhook&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
246
+ <mxGeometry x="1035" y="675" width="125" height="36" as="geometry" />
247
+ </mxCell>
248
+
249
+ <!-- v2.5: subscription_manager -->
250
+ <mxCell id="v25_sub" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;subscription_manager.py&lt;/b&gt;&lt;br&gt;Durable/ephemeral subs&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
251
+ <mxGeometry x="900" y="697" width="125" height="36" as="geometry" />
252
+ </mxCell>
253
+
254
+ <!-- v2.5: webhook_dispatcher -->
255
+ <mxCell id="v25_webhook" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;webhook_dispatcher.py&lt;/b&gt;&lt;br&gt;HTTP POST events&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
256
+ <mxGeometry x="1035" y="717" width="125" height="36" as="geometry" />
257
+ </mxCell>
258
+
259
+ <!-- v2.5: agent_registry -->
260
+ <mxCell id="v25_registry" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;agent_registry.py&lt;/b&gt;&lt;br&gt;Agent tracking, protocols, stats&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
261
+ <mxGeometry x="900" y="739" width="125" height="36" as="geometry" />
262
+ </mxCell>
263
+
264
+ <!-- v2.5: provenance_tracker -->
265
+ <mxCell id="v25_provenance" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;provenance_tracker.py&lt;/b&gt;&lt;br&gt;Memory origin, lineage&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
266
+ <mxGeometry x="1035" y="759" width="125" height="36" as="geometry" />
267
+ </mxCell>
268
+
269
+ <!-- v2.5: trust_scorer -->
270
+ <mxCell id="v25_trust" value="&lt;font style=&#39;font-size:9px;&#39;&gt;&lt;b&gt;trust_scorer.py&lt;/b&gt;&lt;br&gt;Bayesian trust (MACLA)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#78350F;fontColor=#FDE68A;strokeColor=#B45309;arcSize=12;fontSize=9;" vertex="1" parent="1">
271
+ <mxGeometry x="965" y="781" width="125" height="36" as="geometry" />
272
+ </mxCell>
273
+
274
+ <!-- v2.5 Arrow to main stack (db_connection_manager -> Layer 1) -->
275
+ <mxCell id="v25_arrow_db" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#F59E0B;strokeWidth=1.5;rounded=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.7;entryDx=0;entryDy=0;dashed=1;dashPattern=6 3;" edge="1" source="v25_db" target="L1" parent="1">
276
+ <mxGeometry relative="1" as="geometry" />
277
+ </mxCell>
278
+
279
+ <!-- v2.5 Arrow: event_bus -> Layer 9 (dashboard) -->
280
+ <mxCell id="v25_arrow_eventbus" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#F59E0B;strokeWidth=1.5;rounded=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;dashPattern=6 3;" edge="1" target="L9" parent="1">
281
+ <mxGeometry relative="1" as="geometry">
282
+ <mxPoint x="1035" y="693" as="sourcePoint" />
283
+ <Array as="points">
284
+ <mxPoint x="880" y="693" />
285
+ <mxPoint x="880" y="258" />
286
+ </Array>
287
+ </mxGeometry>
288
+ </mxCell>
289
+
290
+ <!-- v2.5 Arrow: agent_registry -> Layer 10 (A2A) -->
291
+ <mxCell id="v25_arrow_registry" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#F59E0B;strokeWidth=1.5;rounded=1;entryX=1;entryY=0.8;entryDx=0;entryDy=0;dashed=1;dashPattern=6 3;" edge="1" target="L10" parent="1">
292
+ <mxGeometry relative="1" as="geometry">
293
+ <mxPoint x="900" y="757" as="sourcePoint" />
294
+ <Array as="points">
295
+ <mxPoint x="875" y="757" />
296
+ <mxPoint x="875" y="209" />
297
+ </Array>
298
+ </mxGeometry>
299
+ </mxCell>
300
+
301
+ <!-- ============================================================ -->
302
+ <!-- LEGEND -->
303
+ <!-- ============================================================ -->
304
+ <mxCell id="legend_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#374151;arcSize=10;opacity=90;" vertex="1" parent="1">
305
+ <mxGeometry x="70" y="570" width="230" height="115" as="geometry" />
306
+ </mxCell>
307
+ <mxCell id="legend_title" value="&lt;font color=&#39;#E5E7EB&#39; style=&#39;font-size:11px;font-weight:bold;&#39;&gt;Legend&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
308
+ <mxGeometry x="82" y="575" width="60" height="25" as="geometry" />
309
+ </mxCell>
310
+
311
+ <!-- Legend: Live -->
312
+ <mxCell id="legend_live_box" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#22C55E;strokeColor=#16A34A;arcSize=30;" vertex="1" parent="1">
313
+ <mxGeometry x="85" y="605" width="14" height="14" as="geometry" />
314
+ </mxCell>
315
+ <mxCell id="legend_live_text" value="&lt;font color=&#39;#D1D5DB&#39; style=&#39;font-size:10px;&#39;&gt;Live (Production)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
316
+ <mxGeometry x="105" y="600" width="110" height="25" as="geometry" />
317
+ </mxCell>
318
+
319
+ <!-- Legend: Planned v2.7 -->
320
+ <mxCell id="legend_planned_box" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#10B981;strokeColor=#059669;arcSize=30;dashed=1;dashPattern=4 2;" vertex="1" parent="1">
321
+ <mxGeometry x="85" y="628" width="14" height="14" as="geometry" />
322
+ </mxCell>
323
+ <mxCell id="legend_planned_text" value="&lt;font color=&#39;#D1D5DB&#39; style=&#39;font-size:10px;&#39;&gt;Planned v2.7 (A2A)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
324
+ <mxGeometry x="105" y="623" width="120" height="25" as="geometry" />
325
+ </mxCell>
326
+
327
+ <!-- Legend: v2.5 In Development -->
328
+ <mxCell id="legend_dev_box" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F59E0B;strokeColor=#D97706;arcSize=30;dashed=1;dashPattern=4 2;" vertex="1" parent="1">
329
+ <mxGeometry x="85" y="651" width="14" height="14" as="geometry" />
330
+ </mxCell>
331
+ <mxCell id="legend_dev_text" value="&lt;font color=&#39;#D1D5DB&#39; style=&#39;font-size:10px;&#39;&gt;v2.5 In Development&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
332
+ <mxGeometry x="105" y="646" width="130" height="25" as="geometry" />
333
+ </mxCell>
334
+
335
+ <!-- Legend: MCP Protocol -->
336
+ <mxCell id="legend_mcp_line" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#8B5CF6;strokeWidth=2;rounded=0;" edge="1" parent="1">
337
+ <mxGeometry relative="1" as="geometry">
338
+ <mxPoint x="85" y="679" as="sourcePoint" />
339
+ <mxPoint x="99" y="679" as="targetPoint" />
340
+ </mxGeometry>
341
+ </mxCell>
342
+ <mxCell id="legend_mcp_text" value="&lt;font color=&#39;#C4B5FD&#39; style=&#39;font-size:10px;&#39;&gt;MCP Protocol (Violet)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
343
+ <mxGeometry x="105" y="669" width="130" height="25" as="geometry" />
344
+ </mxCell>
345
+
346
+ <!-- ============================================================ -->
347
+ <!-- LAYER NUMBER BADGES (left side of each layer) -->
348
+ <!-- ============================================================ -->
349
+ <mxCell id="badge_L1" value="&lt;font color=&#39;#0A0E1A&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L1&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#F59E0B;strokeColor=#D97706;aspect=fixed;" vertex="1" parent="1">
350
+ <mxGeometry x="345" y="753" width="24" height="24" as="geometry" />
351
+ </mxCell>
352
+ <mxCell id="badge_L2" value="&lt;font color=&#39;#0A0E1A&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L2&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#F97316;strokeColor=#EA580C;aspect=fixed;" vertex="1" parent="1">
353
+ <mxGeometry x="345" y="700" width="24" height="24" as="geometry" />
354
+ </mxCell>
355
+ <mxCell id="badge_L3" value="&lt;font color=&#39;#0A0E1A&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L3&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#EF4444;strokeColor=#DC2626;aspect=fixed;" vertex="1" parent="1">
356
+ <mxGeometry x="345" y="636" width="24" height="24" as="geometry" />
357
+ </mxCell>
358
+ <mxCell id="badge_L4" value="&lt;font color=&#39;#0A0E1A&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L4&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#EC4899;strokeColor=#DB2777;aspect=fixed;" vertex="1" parent="1">
359
+ <mxGeometry x="345" y="571" width="24" height="24" as="geometry" />
360
+ </mxCell>
361
+ <mxCell id="badge_L5" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L5&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#A855F7;strokeColor=#9333EA;aspect=fixed;" vertex="1" parent="1">
362
+ <mxGeometry x="345" y="506" width="24" height="24" as="geometry" />
363
+ </mxCell>
364
+ <mxCell id="badge_L6" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L6&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#8B5CF6;strokeColor=#7C3AED;aspect=fixed;" vertex="1" parent="1">
365
+ <mxGeometry x="345" y="441" width="24" height="24" as="geometry" />
366
+ </mxCell>
367
+ <mxCell id="badge_L7" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L7&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#6366F1;strokeColor=#4F46E5;aspect=fixed;" vertex="1" parent="1">
368
+ <mxGeometry x="345" y="376" width="24" height="24" as="geometry" />
369
+ </mxCell>
370
+ <mxCell id="badge_L8" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L8&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#3B82F6;strokeColor=#2563EB;aspect=fixed;" vertex="1" parent="1">
371
+ <mxGeometry x="345" y="311" width="24" height="24" as="geometry" />
372
+ </mxCell>
373
+ <mxCell id="badge_L9" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L9&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#06B6D4;strokeColor=#0891B2;aspect=fixed;" vertex="1" parent="1">
374
+ <mxGeometry x="345" y="246" width="24" height="24" as="geometry" />
375
+ </mxCell>
376
+ <mxCell id="badge_L10" value="&lt;font color=&#39;#FFFFFF&#39; style=&#39;font-size:9px;font-weight:bold;&#39;&gt;L10&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#10B981;strokeColor=#059669;aspect=fixed;" vertex="1" parent="1">
377
+ <mxGeometry x="345" y="178" width="24" height="24" as="geometry" />
378
+ </mxCell>
379
+
380
+ <!-- ============================================================ -->
381
+ <!-- DATA FLOW ANNOTATION -->
382
+ <!-- ============================================================ -->
383
+ <mxCell id="dataflow_label" value="&lt;font color=&#39;#64748B&#39; style=&#39;font-size:10px;font-style:italic;&#39;&gt;Data flows upward through&lt;br&gt;additive enhancement layers&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
384
+ <mxGeometry x="75" y="835" width="170" height="40" as="geometry" />
385
+ </mxCell>
386
+
387
+ <!-- Upward arrow for data flow annotation -->
388
+ <mxCell id="dataflow_arrow" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#475569;strokeWidth=1.5;rounded=0;" edge="1" parent="1">
389
+ <mxGeometry relative="1" as="geometry">
390
+ <mxPoint x="160" y="837" as="sourcePoint" />
391
+ <mxPoint x="160" y="815" as="targetPoint" />
392
+ </mxGeometry>
393
+ </mxCell>
394
+
395
+ <!-- ============================================================ -->
396
+ <!-- FOOTER — Attribution -->
397
+ <!-- ============================================================ -->
398
+ <mxCell id="footer" value="&lt;font color=&#39;#475569&#39; style=&#39;font-size:9px;&#39;&gt;SuperLocalMemory V2 &amp;copy; 2026 Varun Pratap Bhardwaj &amp;bull; MIT License &amp;bull; github.com/varun369/SuperLocalMemoryV2&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
399
+ <mxGeometry x="310" y="860" width="560" height="25" as="geometry" />
400
+ </mxCell>
401
+
402
+ </root>
403
+ </mxGraphModel>
404
+ </diagram>
405
+ </mxfile>