Files
agentik/docs/diagrams/05-android-stack.svg
subochev 25771a0c33
ci / JVM build + tests (push) Failing after 1m57s
docs(diagrams): agent architecture overview with pre-rendered SVG
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
2026-09-18 20:02:41 +03:00

1 line
25 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>