superlocalmemory 2.7.6 → 2.8.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.
Files changed (170) hide show
  1. package/CHANGELOG.md +120 -155
  2. package/README.md +115 -89
  3. package/api_server.py +2 -12
  4. package/docs/PATTERN-LEARNING.md +64 -199
  5. package/docs/example_graph_usage.py +4 -6
  6. package/install.sh +59 -0
  7. package/mcp_server.py +83 -7
  8. package/package.json +1 -8
  9. package/scripts/generate-thumbnails.py +3 -5
  10. package/skills/slm-build-graph/SKILL.md +1 -1
  11. package/skills/slm-list-recent/SKILL.md +1 -1
  12. package/skills/slm-recall/SKILL.md +1 -1
  13. package/skills/slm-remember/SKILL.md +1 -1
  14. package/skills/slm-show-patterns/SKILL.md +1 -1
  15. package/skills/slm-status/SKILL.md +1 -1
  16. package/skills/slm-switch-profile/SKILL.md +1 -1
  17. package/src/agent_registry.py +7 -18
  18. package/src/auth_middleware.py +3 -5
  19. package/src/auto_backup.py +3 -7
  20. package/src/behavioral/__init__.py +49 -0
  21. package/src/behavioral/behavioral_listener.py +203 -0
  22. package/src/behavioral/behavioral_patterns.py +275 -0
  23. package/src/behavioral/cross_project_transfer.py +206 -0
  24. package/src/behavioral/outcome_inference.py +194 -0
  25. package/src/behavioral/outcome_tracker.py +193 -0
  26. package/src/behavioral/tests/__init__.py +4 -0
  27. package/src/behavioral/tests/test_behavioral_integration.py +108 -0
  28. package/src/behavioral/tests/test_behavioral_patterns.py +150 -0
  29. package/src/behavioral/tests/test_cross_project_transfer.py +142 -0
  30. package/src/behavioral/tests/test_mcp_behavioral.py +139 -0
  31. package/src/behavioral/tests/test_mcp_report_outcome.py +117 -0
  32. package/src/behavioral/tests/test_outcome_inference.py +107 -0
  33. package/src/behavioral/tests/test_outcome_tracker.py +96 -0
  34. package/src/cache_manager.py +4 -6
  35. package/src/compliance/__init__.py +48 -0
  36. package/src/compliance/abac_engine.py +149 -0
  37. package/src/compliance/abac_middleware.py +116 -0
  38. package/src/compliance/audit_db.py +215 -0
  39. package/src/compliance/audit_logger.py +148 -0
  40. package/src/compliance/retention_manager.py +289 -0
  41. package/src/compliance/retention_scheduler.py +186 -0
  42. package/src/compliance/tests/__init__.py +4 -0
  43. package/src/compliance/tests/test_abac_enforcement.py +95 -0
  44. package/src/compliance/tests/test_abac_engine.py +124 -0
  45. package/src/compliance/tests/test_abac_mcp_integration.py +118 -0
  46. package/src/compliance/tests/test_audit_db.py +123 -0
  47. package/src/compliance/tests/test_audit_logger.py +98 -0
  48. package/src/compliance/tests/test_mcp_audit.py +128 -0
  49. package/src/compliance/tests/test_mcp_retention_policy.py +125 -0
  50. package/src/compliance/tests/test_retention_manager.py +131 -0
  51. package/src/compliance/tests/test_retention_scheduler.py +99 -0
  52. package/src/db_connection_manager.py +2 -12
  53. package/src/embedding_engine.py +61 -669
  54. package/src/embeddings/__init__.py +47 -0
  55. package/src/embeddings/cache.py +70 -0
  56. package/src/embeddings/cli.py +113 -0
  57. package/src/embeddings/constants.py +47 -0
  58. package/src/embeddings/database.py +91 -0
  59. package/src/embeddings/engine.py +247 -0
  60. package/src/embeddings/model_loader.py +145 -0
  61. package/src/event_bus.py +3 -13
  62. package/src/graph/__init__.py +36 -0
  63. package/src/graph/build_helpers.py +74 -0
  64. package/src/graph/cli.py +87 -0
  65. package/src/graph/cluster_builder.py +188 -0
  66. package/src/graph/cluster_summary.py +148 -0
  67. package/src/graph/constants.py +47 -0
  68. package/src/graph/edge_builder.py +162 -0
  69. package/src/graph/entity_extractor.py +95 -0
  70. package/src/graph/graph_core.py +226 -0
  71. package/src/graph/graph_search.py +231 -0
  72. package/src/graph/hierarchical.py +207 -0
  73. package/src/graph/schema.py +99 -0
  74. package/src/graph_engine.py +45 -1451
  75. package/src/hnsw_index.py +3 -7
  76. package/src/hybrid_search.py +36 -683
  77. package/src/learning/__init__.py +27 -12
  78. package/src/learning/adaptive_ranker.py +50 -12
  79. package/src/learning/cross_project_aggregator.py +2 -12
  80. package/src/learning/engagement_tracker.py +2 -12
  81. package/src/learning/feature_extractor.py +175 -43
  82. package/src/learning/feedback_collector.py +7 -12
  83. package/src/learning/learning_db.py +180 -12
  84. package/src/learning/project_context_manager.py +2 -12
  85. package/src/learning/source_quality_scorer.py +2 -12
  86. package/src/learning/synthetic_bootstrap.py +2 -12
  87. package/src/learning/tests/__init__.py +2 -0
  88. package/src/learning/tests/test_adaptive_ranker.py +2 -6
  89. package/src/learning/tests/test_adaptive_ranker_v28.py +60 -0
  90. package/src/learning/tests/test_aggregator.py +2 -6
  91. package/src/learning/tests/test_auto_retrain_v28.py +35 -0
  92. package/src/learning/tests/test_e2e_ranking_v28.py +82 -0
  93. package/src/learning/tests/test_feature_extractor_v28.py +93 -0
  94. package/src/learning/tests/test_feedback_collector.py +2 -6
  95. package/src/learning/tests/test_learning_db.py +2 -6
  96. package/src/learning/tests/test_learning_db_v28.py +110 -0
  97. package/src/learning/tests/test_learning_init_v28.py +48 -0
  98. package/src/learning/tests/test_outcome_signals.py +48 -0
  99. package/src/learning/tests/test_project_context.py +2 -6
  100. package/src/learning/tests/test_schema_migration.py +319 -0
  101. package/src/learning/tests/test_signal_inference.py +11 -13
  102. package/src/learning/tests/test_source_quality.py +2 -6
  103. package/src/learning/tests/test_synthetic_bootstrap.py +3 -7
  104. package/src/learning/tests/test_workflow_miner.py +2 -6
  105. package/src/learning/workflow_pattern_miner.py +2 -12
  106. package/src/lifecycle/__init__.py +54 -0
  107. package/src/lifecycle/bounded_growth.py +239 -0
  108. package/src/lifecycle/compaction_engine.py +226 -0
  109. package/src/lifecycle/lifecycle_engine.py +302 -0
  110. package/src/lifecycle/lifecycle_evaluator.py +225 -0
  111. package/src/lifecycle/lifecycle_scheduler.py +130 -0
  112. package/src/lifecycle/retention_policy.py +285 -0
  113. package/src/lifecycle/tests/__init__.py +4 -0
  114. package/src/lifecycle/tests/test_bounded_growth.py +193 -0
  115. package/src/lifecycle/tests/test_compaction.py +179 -0
  116. package/src/lifecycle/tests/test_lifecycle_engine.py +137 -0
  117. package/src/lifecycle/tests/test_lifecycle_evaluation.py +177 -0
  118. package/src/lifecycle/tests/test_lifecycle_scheduler.py +127 -0
  119. package/src/lifecycle/tests/test_lifecycle_search.py +109 -0
  120. package/src/lifecycle/tests/test_mcp_compact.py +149 -0
  121. package/src/lifecycle/tests/test_mcp_lifecycle_status.py +114 -0
  122. package/src/lifecycle/tests/test_retention_policy.py +162 -0
  123. package/src/mcp_tools_v28.py +280 -0
  124. package/src/memory-profiles.py +2 -12
  125. package/src/memory-reset.py +2 -12
  126. package/src/memory_compression.py +2 -12
  127. package/src/memory_store_v2.py +76 -20
  128. package/src/migrate_v1_to_v2.py +2 -12
  129. package/src/pattern_learner.py +29 -975
  130. package/src/patterns/__init__.py +24 -0
  131. package/src/patterns/analyzers.py +247 -0
  132. package/src/patterns/learner.py +267 -0
  133. package/src/patterns/scoring.py +167 -0
  134. package/src/patterns/store.py +223 -0
  135. package/src/patterns/terminology.py +138 -0
  136. package/src/provenance_tracker.py +4 -14
  137. package/src/query_optimizer.py +4 -6
  138. package/src/rate_limiter.py +2 -6
  139. package/src/search/__init__.py +20 -0
  140. package/src/search/cli.py +77 -0
  141. package/src/search/constants.py +26 -0
  142. package/src/search/engine.py +239 -0
  143. package/src/search/fusion.py +122 -0
  144. package/src/search/index_loader.py +112 -0
  145. package/src/search/methods.py +162 -0
  146. package/src/search_engine_v2.py +4 -6
  147. package/src/setup_validator.py +7 -13
  148. package/src/subscription_manager.py +2 -12
  149. package/src/tree/__init__.py +59 -0
  150. package/src/tree/builder.py +183 -0
  151. package/src/tree/nodes.py +196 -0
  152. package/src/tree/queries.py +252 -0
  153. package/src/tree/schema.py +76 -0
  154. package/src/tree_manager.py +10 -711
  155. package/src/trust/__init__.py +45 -0
  156. package/src/trust/constants.py +66 -0
  157. package/src/trust/queries.py +157 -0
  158. package/src/trust/schema.py +95 -0
  159. package/src/trust/scorer.py +299 -0
  160. package/src/trust/signals.py +95 -0
  161. package/src/trust_scorer.py +39 -697
  162. package/src/webhook_dispatcher.py +2 -12
  163. package/ui/app.js +1 -1
  164. package/ui/js/agents.js +1 -1
  165. package/ui_server.py +2 -14
  166. package/ATTRIBUTION.md +0 -140
  167. package/docs/ARCHITECTURE-V2.5.md +0 -190
  168. package/docs/GRAPH-ENGINE.md +0 -503
  169. package/docs/architecture-diagram.drawio +0 -405
  170. package/docs/plans/2026-02-13-benchmark-suite.md +0 -1349
@@ -1,405 +0,0 @@
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>