25771a0c33
ci / JVM build + tests (push) Failing after 1m57s
PlantUML diagrams for future agent architecture (Android, multi-user chat, sub-agents, A2A): - 01-module-layers.md — целевая модульная структура - 02-agent-composition.md — AgentBuilder DSL + MemoryBackend.exposesTools() - 03-multi-user-chat.md — mention-detection sequence - 04-sub-agents.md — spawnChild + Flow<SubAgentEvent> + A2A - 05-android-stack.md — что меняется на Android vs Standalone Каждый .md включает пред-рендеренный SVG (показывается во всех markdown viewers без PlantUML plugin) + PlantUML source в code block (для редактирования). SVG нужен потому что PlantUML требует Graphviz dot для рендеринга — без него IntelliJ/VSCode выдают ошибку. Регенерация SVG после правки PlantUML-source: docker run --rm -v "$PWD:/work" plantuml/plantuml -tsvg /work/docs/diagrams/*.md
1 line
25 KiB
XML
1 line
25 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" data-diagram-type="DESCRIPTION" style="width:2325px;height:659px;background:#FFFFFF;" width="2325px" height="659px" viewBox="0 0 2325 659" zoomAndPan="magnify" preserveAspectRatio="none" contentStyleType="text/css"><?plantuml 1.2026.8?><defs/><g font-family="sans-serif" lengthAdjust="spacing"><g class="title" data-source-line="8"><text x="954.13" y="22.995" fill="#000" font-size="14" textLength="409.965" font-weight="700">Android Agent Stack — что меняется vs Standalone</text></g><!--cluster Android Application--><g class="cluster" data-qualified-name="Android Application" id="ent0001" data-source-line="11"><path d="M487.5,43.297 L644.838,43.297 A3.75,3.75 0 0 1 647.338,45.797 L654.338,65.594 L706.5,65.594 A2.5,2.5 0 0 1 709,68.094 L709,353.287 A2.5,2.5 0 0 1 706.5,355.787 L487.5,355.787 A2.5,2.5 0 0 1 485,353.287 L485,45.797 A2.5,2.5 0 0 1 487.5,43.297" style="stroke:#000;stroke-width:1.5;" fill="none"/><line x1="485" y1="65.594" x2="654.338" y2="65.594" style="stroke:#000;stroke-width:1.5;"/><text x="489" y="58.292" fill="#000" font-size="14" textLength="156.338" font-weight="700">Android Application</text></g><!--cluster Android-specific impls--><g class="cluster" data-qualified-name="Android-specific impls" id="ent0005" data-source-line="17"><path d="M8.5,396.447 L185.026,396.447 A3.75,3.75 0 0 1 187.526,398.947 L194.526,418.744 L971.5,418.744 A2.5,2.5 0 0 1 974,421.244 L974,497.547 A2.5,2.5 0 0 1 971.5,500.047 L8.5,500.047 A2.5,2.5 0 0 1 6,497.547 L6,398.947 A2.5,2.5 0 0 1 8.5,396.447" style="stroke:#000;stroke-width:1.5;" fill="none"/><line x1="6" y1="418.744" x2="194.526" y2="418.744" style="stroke:#000;stroke-width:1.5;"/><text x="10" y="411.442" fill="#000" font-size="14" textLength="175.526" font-weight="700">Android-specific impls</text></g><!--cluster Agent Runtime (shared)--><g class="cluster" data-qualified-name="Agent Runtime .shared." id="ent0011" data-source-line="26"><path d="M1000.5,396.447 L1191.512,396.447 A3.75,3.75 0 0 1 1194.012,398.947 L1201.012,418.744 L1268.5,418.744 A2.5,2.5 0 0 1 1271,421.244 L1271,497.547 A2.5,2.5 0 0 1 1268.5,500.047 L1000.5,500.047 A2.5,2.5 0 0 1 998,497.547 L998,398.947 A2.5,2.5 0 0 1 1000.5,396.447" style="stroke:#000;stroke-width:1.5;" fill="none"/><line x1="998" y1="418.744" x2="1201.012" y2="418.744" style="stroke:#000;stroke-width:1.5;"/><text x="1002" y="411.442" fill="#000" font-size="14" textLength="190.012" font-weight="700">Agent Runtime (shared)</text></g><!--cluster Domain (shared)--><g class="cluster" data-qualified-name="Domain .shared." id="ent0014" data-source-line="31"><path d="M665.5,540.717 L798.379,540.717 A3.75,3.75 0 0 1 800.879,543.217 L807.879,563.014 L1271.5,563.014 A2.5,2.5 0 0 1 1274,565.514 L1274,641.807 A2.5,2.5 0 0 1 1271.5,644.307 L665.5,644.307 A2.5,2.5 0 0 1 663,641.807 L663,543.217 A2.5,2.5 0 0 1 665.5,540.717" style="stroke:#000;stroke-width:1.5;" fill="none"/><line x1="663" y1="563.014" x2="807.879" y2="563.014" style="stroke:#000;stroke-width:1.5;"/><text x="667" y="555.712" fill="#000" font-size="14" textLength="131.879" font-weight="700">Domain (shared)</text></g><!--cluster Memory (shared impl)--><g class="cluster" data-qualified-name="Memory .shared impl." id="ent0019" data-source-line="38"><path d="M1300.5,540.717 L1476.083,540.717 A3.75,3.75 0 0 1 1478.583,543.217 L1485.583,563.014 L1587.5,563.014 A2.5,2.5 0 0 1 1590,565.514 L1590,641.807 A2.5,2.5 0 0 1 1587.5,644.307 L1300.5,644.307 A2.5,2.5 0 0 1 1298,641.807 L1298,543.217 A2.5,2.5 0 0 1 1300.5,540.717" style="stroke:#000;stroke-width:1.5;" fill="none"/><line x1="1298" y1="563.014" x2="1485.583" y2="563.014" style="stroke:#000;stroke-width:1.5;"/><text x="1302" y="555.712" fill="#000" font-size="14" textLength="174.583" font-weight="700">Memory (shared impl)</text></g><!--entity Activity--><g class="entity" data-qualified-name="Android Application.Activity" id="ent0002" data-source-line="12"><rect x="543.99" y="78.297" width="106.023" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="553.99" y="101.292" fill="#000" font-size="14" textLength="86.023">MainActivity</text><text x="553.99" y="117.589" fill="#000" font-size="14" textLength="76.262">(Compose)</text></g><!--entity Runner--><g class="entity" data-qualified-name="Android Application.Runner" id="ent0003" data-source-line="13"><rect x="501.25" y="190.897" width="191.493" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="511.25" y="213.892" fill="#000" font-size="14" textLength="146.59">AndroidAgentRunner</text><text x="511.25" y="230.189" fill="#000" font-size="14" textLength="171.493">(workmanager / service)</text></g><!--entity AndroidBuilder--><g class="entity" data-qualified-name="Android Application.AndroidBuilder" id="ent0004" data-source-line="14"><rect x="514.31" y="303.487" width="165.387" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="524.31" y="326.482" fill="#000" font-size="14" textLength="145.387">AndroidAgentBuilder</text></g><!--entity StorageA--><g class="entity" data-qualified-name="Android-specific impls.StorageA" id="ent0006" data-source-line="18"><rect x="196.57" y="431.447" width="168.866" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="206.57" y="454.442" fill="#000" font-size="14" textLength="148.866">StorageSqliteAndroid</text><text x="206.57" y="470.739" fill="#000" font-size="14" textLength="94.199">(Room/sqlite)</text></g><!--entity MemVecA--><g class="entity" data-qualified-name="Android-specific impls.MemVecA" id="ent0007" data-source-line="19"><rect x="400.39" y="431.447" width="183.215" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="410.39" y="454.442" fill="#000" font-size="14" textLength="157.069">MemoryVectorAndroid</text><text x="410.39" y="470.739" fill="#000" font-size="14" textLength="163.215">(ONNX runtime + ANN)</text></g><!--entity LitertA--><g class="entity" data-qualified-name="Android-specific impls.LitertA" id="ent0008" data-source-line="20"><rect x="21.98" y="431.447" width="140.039" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="31.98" y="454.442" fill="#000" font-size="14" textLength="91.472">LitertAndroid</text><text x="31.98" y="470.739" fill="#000" font-size="14" textLength="120.039">(NNAPI delegate)</text></g><!--entity SoulA--><g class="entity" data-qualified-name="Android-specific impls.SoulA" id="ent0009" data-source-line="21"><rect x="820.29" y="431.447" width="137.428" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="830.29" y="454.442" fill="#000" font-size="14" textLength="109.095">SoulFileAndroid</text><text x="830.29" y="470.739" fill="#000" font-size="14" textLength="117.428">(context.filesDir)</text></g><!--entity McpA--><g class="entity" data-qualified-name="Android-specific impls.McpA" id="ent0010" data-source-line="22"><rect x="618.77" y="431.447" width="166.467" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="628.77" y="454.442" fill="#000" font-size="14" textLength="86.604">McpRegistry</text><text x="628.77" y="470.739" fill="#000" font-size="14" textLength="146.467">stdio: ProcessBuilder</text></g><!--entity AgentCore--><g class="entity" data-qualified-name="Agent Runtime .shared..AgentCore" id="ent0012" data-source-line="27"><rect x="1014.23" y="431.447" width="95.53" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1024.23" y="454.442" fill="#000" font-size="14" textLength="74.149">AgentCore</text><text x="1024.23" y="470.739" fill="#000" font-size="14" textLength="75.53">BaseAgent</text></g><!--entity Builder--><g class="entity" data-qualified-name="Agent Runtime .shared..Builder" id="ent0013" data-source-line="28"><rect x="1144.52" y="439.597" width="110.952" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1154.52" y="462.592" fill="#000" font-size="14" textLength="90.952">AgentBuilder</text></g><!--entity LlmT--><g class="entity" data-qualified-name="Domain .shared..LlmT" id="ent0015" data-source-line="32"><rect x="678.8" y="575.717" width="114.397" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="688.8" y="598.712" fill="#000" font-size="14" textLength="62.193">LlmTools</text><text x="688.8" y="615.009" fill="#000" font-size="14" textLength="94.397">commonMain</text></g><!--entity Ev--><g class="entity" data-qualified-name="Domain .shared..Ev" id="ent0016" data-source-line="33"><rect x="828.39" y="575.717" width="151.229" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="838.39" y="598.712" fill="#000" font-size="14" textLength="131.229">BackgroundEvents</text><text x="838.39" y="615.009" fill="#000" font-size="14" textLength="94.397">commonMain</text></g><!--entity McpB--><g class="entity" data-qualified-name="Domain .shared..McpB" id="ent0017" data-source-line="34"><rect x="1014.85" y="575.717" width="94.3" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1024.85" y="598.712" fill="#000" font-size="14" textLength="74.3">McpBridge</text><text x="1024.85" y="615.009" fill="#000" font-size="14" textLength="59.233">jvmMain</text></g><!--entity Skills--><g class="entity" data-qualified-name="Domain .shared..Skills" id="ent0018" data-source-line="35"><rect x="1143.8" y="575.717" width="114.397" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1153.8" y="598.712" fill="#000" font-size="14" textLength="35.957">Skills</text><text x="1153.8" y="615.009" fill="#000" font-size="14" textLength="94.397">commonMain</text></g><!--entity MemMd--><g class="entity" data-qualified-name="Memory .shared impl..MemMd" id="ent0020" data-source-line="39"><rect x="1314.34" y="575.717" width="125.321" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1324.34" y="598.712" fill="#000" font-size="14" textLength="77.902">MemoryMd</text><text x="1324.34" y="615.009" fill="#000" font-size="14" textLength="105.321">(commonMain)</text></g><!--entity MemApi--><g class="entity" data-qualified-name="Memory .shared impl..MemApi" id="ent0021" data-source-line="40"><rect x="1474.35" y="575.717" width="99.29" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1484.35" y="598.712" fill="#000" font-size="14" textLength="79.29">MemoryApi</text><text x="1484.35" y="615.009" fill="#000" font-size="14" textLength="69.733">interfaces</text></g><g class="entity" data-qualified-name="GMN35" id="ent0036" data-source-line="62"><path d="M1290.93,399.787 L1290.93,515.717 L1527.065,515.717 L1527.065,409.787 L1517.065,399.787 L1290.93,399.787" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M1517.065,399.787 L1517.065,409.787 L1527.065,409.787 L1517.065,399.787" style="stroke:#181818;stroke-width:1;" fill="#FEFFDD"/><text x="1296.93" y="416.854" fill="#000" font-size="13" textLength="135.281">On-device inference.</text><text x="1296.93" y="431.987" fill="#000" font-size="13" textLength="172.682">LiteRT с NNAPI delegate →</text><text x="1296.93" y="447.119" fill="#000" font-size="13" textLength="177.728">работает на CPU/GPU/NPU</text><text x="1296.93" y="462.252" fill="#000" font-size="13" textLength="215.135">прямо на устройстве, без сети.</text><text x="1296.93" y="477.385" fill="#000" font-size="13"> </text><text x="1296.93" y="492.518" fill="#000" font-size="13" textLength="166.372">vs Standalone: HTTP-only</text><text x="1296.93" y="507.651" fill="#000" font-size="13" textLength="138.969">(OpenAI-compatible).</text></g><g class="entity" data-qualified-name="GMN38" id="ent0039" data-source-line="72"><path d="M1562.03,407.347 L1562.03,508.144 L1767.975,508.144 L1767.975,417.347 L1757.975,407.347 L1562.03,407.347" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M1757.975,407.347 L1757.975,417.347 L1767.975,417.347 L1757.975,407.347" style="stroke:#181818;stroke-width:1;" fill="#FEFFDD"/><text x="1568.03" y="424.414" fill="#000" font-size="13" textLength="153.499">android.database.sqlite</text><text x="1568.03" y="439.547" fill="#000" font-size="13" textLength="184.945">через Room или сырой API.</text><text x="1568.03" y="454.679" fill="#000" font-size="13"> </text><text x="1568.03" y="469.812" fill="#000" font-size="13" textLength="147.551">vs Standalone: JDBC +</text><text x="1568.03" y="484.945" fill="#000" font-size="13" textLength="115.73">Sqlite-JDBC driver</text><text x="1568.03" y="500.078" fill="#000" font-size="13" textLength="89.654">(только JVM).</text></g><g class="entity" data-qualified-name="GMN41" id="ent0042" data-source-line="81"><path d="M1803.08,399.787 L1803.08,515.717 L2034.911,515.717 L2034.911,409.787 L2024.911,399.787 L1803.08,399.787" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M2024.911,399.787 L2024.911,409.787 L2034.911,409.787 L2024.911,399.787" style="stroke:#181818;stroke-width:1;" fill="#FEFFDD"/><text x="1809.08" y="416.854" fill="#000" font-size="13" textLength="187.218">JVector JVM-only. На Android</text><text x="1809.08" y="431.987" fill="#000" font-size="13" textLength="161.51">нужна альтернатива —</text><text x="1809.08" y="447.119" fill="#000" font-size="13" textLength="210.831">ONNX Runtime + какой-нибудь</text><text x="1809.08" y="462.252" fill="#000" font-size="13" textLength="132.755">ANN (Annoy/HNSW).</text><text x="1809.08" y="477.385" fill="#000" font-size="13"> </text><text x="1809.08" y="492.518" fill="#000" font-size="13" textLength="197.895">Или пока без vector memory,</text><text x="1809.08" y="507.651" fill="#000" font-size="13" textLength="127.905">только MemoryMd.</text></g><g class="entity" data-qualified-name="GMN44" id="ent0045" data-source-line="91"><path d="M2069.78,414.917 L2069.78,500.581 L2310.225,500.581 L2310.225,424.917 L2300.225,414.917 L2069.78,414.917" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M2300.225,414.917 L2300.225,424.917 L2310.225,424.917 L2300.225,414.917" style="stroke:#181818;stroke-width:1;" fill="#FEFFDD"/><text x="2075.78" y="431.984" fill="#000" font-size="13" textLength="171.044">MCP через ProcessBuilder</text><text x="2075.78" y="447.117" fill="#000" font-size="13" textLength="163.293">на Android работает, но</text><text x="2075.78" y="462.249" fill="#000" font-size="13" textLength="131.035">subprocess lifecycle</text><text x="2075.78" y="477.382" fill="#000" font-size="13" textLength="191.674">сложнее (foreground service</text><text x="2075.78" y="492.515" fill="#000" font-size="13" textLength="219.445">нужен для долгого subprocess).</text></g><!--link Activity to Runner--><g class="link" data-entity-1="ent0002" data-entity-2="ent0003" id="lnk22" data-source-line="44" data-link-type="dependency"><path d="M597,131.247 C597,149.117 597,167.847 597,185.677" style="stroke:#181818;stroke-width:1;" fill="none" id="Activity-to-Runner"/><polygon points="597,190.677,601,181.677,597,185.677,593,181.677,597,190.677" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Runner to AndroidBuilder--><g class="link" data-entity-1="ent0003" data-entity-2="ent0004" id="lnk23" data-source-line="45" data-link-type="dependency"><path d="M597,243.777 C597,262.267 597,281.767 597,298.077" style="stroke:#181818;stroke-width:1;" fill="none" id="Runner-to-AndroidBuilder"/><polygon points="597,303.077,601,294.077,597,298.077,593,294.077,597,303.077" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to AgentCore--><g class="link" data-entity-1="ent0004" data-entity-2="ent0012" id="lnk24" data-source-line="46" data-link-type="dependency"><path d="M680.11,325.647 C758.8,331.107 878.75,346.327 974,388.447 C997.17,398.697 1015.951,413.005 1032.401,427.785" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-AgentCore"/><polygon points="1036.12,431.127,1032.099,422.136,1032.401,427.785,1026.752,428.087,1036.12,431.127" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to StorageA--><g class="link" data-entity-1="ent0004" data-entity-2="ent0006" id="lnk25" data-source-line="48" data-link-type="dependency"><path d="M520.95,340.227 C479.13,351.327 426.96,367.527 383,388.447 C358.56,400.087 337.309,414.029 318.019,428.109" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-StorageA"/><polygon points="313.98,431.057,323.608,428.982,318.019,428.109,318.891,422.52,313.98,431.057" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to MemVecA--><g class="link" data-entity-1="ent0004" data-entity-2="ent0007" id="lnk26" data-source-line="49" data-link-type="dependency"><path d="M583.27,340.167 C565.04,363.457 535.792,400.809 514.912,427.489" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-MemVecA"/><polygon points="511.83,431.427,520.527,426.805,514.912,427.489,514.227,421.874,511.83,431.427" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to LitertA--><g class="link" data-entity-1="ent0004" data-entity-2="ent0008" id="lnk27" data-source-line="50" data-link-type="dependency"><path d="M513.85,323.497 C426.94,327.147 288.28,340.847 179,388.447 C155.94,398.497 137.389,412.772 121.169,427.612" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-LitertA"/><polygon points="117.48,430.987,126.82,427.863,121.169,427.612,121.42,421.96,117.48,430.987" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to SoulA--><g class="link" data-entity-1="ent0004" data-entity-2="ent0009" id="lnk28" data-source-line="51" data-link-type="dependency"><path d="M674.51,340.267 C714.31,351.057 762.75,366.977 803,388.447 C824.53,399.937 842.278,413.712 858.398,427.912" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-SoulA"/><polygon points="862.15,431.217,858.041,422.266,858.398,427.912,852.753,428.269,862.15,431.217" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AndroidBuilder to McpA--><g class="link" data-entity-1="ent0004" data-entity-2="ent0010" id="lnk29" data-source-line="52" data-link-type="dependency"><path d="M610.73,340.167 C628.96,363.457 658.208,400.809 679.088,427.489" style="stroke:#181818;stroke-width:1;" fill="none" id="AndroidBuilder-to-McpA"/><polygon points="682.17,431.427,679.773,421.874,679.088,427.489,673.473,426.805,682.17,431.427" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AgentCore to LlmT--><g class="link" data-entity-1="ent0012" data-entity-2="ent0015" id="lnk30" data-source-line="54" data-link-type="dependency"><path d="M1030.51,484.337 C1014.53,495.907 994.25,508.567 974,515.717 C905.31,539.947 877.47,502.927 811,532.717 C789.63,542.287 773.576,556.641 759.856,571.791" style="stroke:#181818;stroke-width:1;" fill="none" id="AgentCore-to-LlmT"/><polygon points="756.5,575.497,765.506,571.511,759.856,571.791,759.576,566.141,756.5,575.497" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AgentCore to Ev--><g class="link" data-entity-1="ent0012" data-entity-2="ent0016" id="lnk31" data-source-line="55" data-link-type="dependency"><path d="M1033.39,484.507 C1004.75,510.297 964.676,546.382 936.116,572.092" style="stroke:#181818;stroke-width:1;" fill="none" id="AgentCore-to-Ev"/><polygon points="932.4,575.437,941.765,572.388,936.116,572.092,936.413,566.443,932.4,575.437" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AgentCore to McpB--><g class="link" data-entity-1="ent0012" data-entity-2="ent0017" id="lnk32" data-source-line="56" data-link-type="dependency"><path d="M1062,484.507 C1062,510.297 1062,544.727 1062,570.437" style="stroke:#181818;stroke-width:1;" fill="none" id="AgentCore-to-McpB"/><polygon points="1062,575.437,1066,566.437,1062,570.437,1058,566.437,1062,575.437" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AgentCore to Skills--><g class="link" data-entity-1="ent0012" data-entity-2="ent0018" id="lnk33" data-source-line="57" data-link-type="dependency"><path d="M1087.17,484.507 C1112.36,510.297 1147.395,546.151 1172.525,571.861" style="stroke:#181818;stroke-width:1;" fill="none" id="AgentCore-to-Skills"/><polygon points="1176.02,575.437,1172.59,566.205,1172.525,571.861,1166.869,571.797,1176.02,575.437" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link AgentCore to MemMd--><g class="link" data-entity-1="ent0012" data-entity-2="ent0020" id="lnk34" data-source-line="58" data-link-type="dependency"><path d="M1084.19,484.307 C1095.74,495.877 1110.81,508.537 1127,515.717 C1187.12,542.377 1212.23,510.137 1274,532.717 C1300.6,542.437 1323.19,557.235 1342.68,572.255" style="stroke:#181818;stroke-width:1;" fill="none" id="AgentCore-to-MemMd"/><polygon points="1346.64,575.307,1341.953,566.645,1342.68,572.255,1337.07,572.981,1346.64,575.307" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link LitertA to GMN35--><g class="link" data-entity-1="ent0008" data-entity-2="ent0036" id="lnk37" data-source-line="62" data-link-type="association"><path d="M115.55,431.107 C134.98,411.397 164.46,386.277 196.5,376.117 C252.48,358.377 1196.48,362.057 1253.5,376.117 C1274.37,381.267 1295.54,389.767 1315.26,399.387" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;" fill="none" id="LitertA-GMN35"/></g><!--link StorageA to GMN38--><g class="link" data-entity-1="ent0006" data-entity-2="ent0039" id="lnk40" data-source-line="72" data-link-type="association"><path d="M309.28,431.077 C331.98,411.627 365.69,386.867 400.5,376.117 C430.41,366.877 1497.31,367.827 1527.5,376.117 C1551.19,382.617 1574.94,394.387 1595.87,406.987" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;" fill="none" id="StorageA-GMN38"/></g><!--link MemVecA to GMN41--><g class="link" data-entity-1="ent0007" data-entity-2="ent0042" id="lnk43" data-source-line="81" data-link-type="association"><path d="M522.22,431.057 C546.39,411.597 582.15,386.827 618.5,376.117 C649.12,367.097 1736.55,368.307 1767.5,376.117 C1787.92,381.267 1808.59,389.777 1827.81,399.397" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;" fill="none" id="MemVecA-GMN41"/></g><!--link McpA to GMN44--><g class="link" data-entity-1="ent0010" data-entity-2="ent0045" id="lnk46" data-source-line="91" data-link-type="association"><path d="M730.01,431.087 C752.49,411.637 785.91,386.877 820.5,376.117 C852.7,366.097 2001.76,368.047 2034.5,376.117 C2065.88,383.857 2097.93,399.177 2124.72,414.477" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;" fill="none" id="McpA-GMN44"/></g><?plantuml-src VLRDRjj64BxpAGQvH49C-Pv30KfEchYHB4XEMY3kWIPNojRaBhjSgHM20hO3r8S4C904Q2zz1oMDMkN7oYiiNo5FqjbTaY8jDG8eWRFVpdpppUoiqXFA4b_uCGGyJZWZJ0xbB28WI21zDew8uqWgqU2nK70QWZT630ob7vp0bzFNa5ravse5wfDQgAliKYsoy-mikuHfga4iz2FqwZWtmNNTqabAGw8DJe9k_3616wNx98beu4lAsGruwW1-7dTzohn0qYcLioFMw6YcAMd-27uAXTqYSo-6us326168_uMBazXd64R0BgH4J6cGxxQOpRtj2Or28cm4QyzDpc_E1catJKX0HpG06YTHMl8UIYuGD_mvefBaMEGpu3pUJOtHiiXnNfujYRcOFKBzkLXlEkZrVW0nOPB616w1r-lPlOX6QBxr0ReKShsfr_Fwzo4a4HdxHR0SapFaa-WkZIha0iua-LMsHcXDzwZ86IAke1Sa0pAcgHHOYrI6bD-6lk01ITEgQWZpj5QsxiCdlY0XDBxhzflNwcxQQP0draWDi5bAQ9OxN90ZrlPJObvjLOg52guQVrkvzdYCdRGPv44K7t8UfKSC3q7CcUutgnKkM4WRVOm5dx3mpXGZRKBlJ4jvseA6OoJyqpGkbxKvb_o4Hbj2MNEDhcs4WgxfhJLdkzYr9IiybItH3QieBw57Z69TnSZ7EXKWDAyhfFvGS_LMBRCpjSIplC8pVAwMfbR54SENRueJOt-CvThvgBzQH5chRQjbzszPAxfxorBHnziyccxTvautfLFIiNvqZUich6NTOAfND-NrkeOpoXUAlb8VZQPNsNEr09Jq70tBx0AVI_DQ6P16QCOb3buwVYA1Zse7zO2v8T5Z2oWR4K5OG5fcGOC6Xv2TGVsimvVVNnf0TeeStfZWSpsRGLsfENJw3tU_nQVNVsXGwdDsYhFxanxaUZrxfkkFUrVglUc4jsgn0-XdeVx5ODgHMbe6vgisx6_3lSF3lijPPATouo0XpBllwXi61_jnH9ejXx0GTBxEjQnhiz2t9Mo5llIFyVYtxDIqYLqWYrD3I0zKmBP5TP5Szjpo1jJZ_odkxxKxSCkisFdi6aiew3I_41hwNbCVinVg0ygo_wZx5TRLARnlHxVUOJHeWVeB9StRqSfzbJrJ_nYbiIeO0aFfPD2WXKMrv_fkjQNNWtzG3duaCzU4r7iNuKlr1ZszoruOA5uAqF0OuxFTUxtXzyrAzkfFeuxwZ3i_wB2sb5DBDJPZOiVgMiswc39VoLmVARsls-bNQrA_4lAirp9izEMENbuPN3evJknkYEY81BCWoaj-XaciZ70BF56D4PuxEvIBMxsgBluT0VKEKxdKFvYJ-Xk_yQa4g9RqFm00?></g></svg> |