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
24 KiB
XML
1 line
24 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:3995px;height:518px;background:#FFFFFF;" width="3995px" height="518px" viewBox="0 0 3995 518" 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="1821.57" y="22.995" fill="#000" font-size="14" textLength="345.707" font-weight="700">Agent Builder — композиция (целевое API)</text></g><!--cluster Builder--><g class="cluster" data-qualified-name="Builder" id="ent0001" data-source-line="11"><rect x="901.848" y="44.297" width="2593" height="238.23" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="2146.514" y="59.292" fill="#000" font-size="14" textLength="103.667" font-weight="700">AgentBuilder</text></g><!--cluster MdMem--><g class="cluster" data-qualified-name="MdMem" id="ent0009" data-source-line="22"><rect x="36.848" y="194.017" width="484" height="303.77" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="235.04" y="209.012" fill="#000" font-size="14" textLength="87.616" font-weight="700">MemoryMd</text></g><!--cluster McpReg--><g class="cluster" data-qualified-name="McpReg" id="ent0015" data-source-line="32"><rect x="560.848" y="194.017" width="301" height="302.47" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="662.146" y="209.012" fill="#000" font-size="14" textLength="98.403" font-weight="700">McpRegistry</text></g><!--cluster Events--><g class="cluster" data-qualified-name="Events" id="ent0020" data-source-line="41"><rect x="2179.848" y="347.527" width="315" height="156.53" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="2263.646" y="362.522" fill="#000" font-size="14" textLength="147.403" font-weight="700">BackgroundEvents</text></g><!--cluster Sched--><g class="cluster" data-qualified-name="Sched" id="ent0025" data-source-line="51"><rect x="1816.848" y="362.657" width="323" height="126.27" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="1891.719" y="377.652" fill="#000" font-size="14" textLength="173.257" font-weight="700">BackgroundScheduler</text></g><!--cluster Agent--><g class="cluster" data-qualified-name="Agent" id="ent0030" data-source-line="60"><rect x="3534.848" y="162.017" width="447" height="333.07" fill="none" style="stroke:#181818;stroke-width:1;" rx="2.5" ry="2.5"/><text x="3715.869" y="177.012" fill="#000" font-size="14" textLength="84.957" font-weight="700">BaseAgent</text><text x="3658.399" y="193.309" fill="#000" font-size="14" textLength="199.896" font-weight="700">(impl: ConversationLoop)</text></g><!--entity Llm--><g class="entity" data-qualified-name="Builder.Llm" id="ent0002" data-source-line="12"><rect x="2931.648" y="222.227" width="210.408" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="2941.648" y="245.222" fill="#000" font-size="14" textLength="190.408">llm: LiteLlm (обязательно)</text></g><!--entity Storage--><g class="entity" data-qualified-name="Builder.Storage" id="ent0003" data-source-line="13"><rect x="3176.558" y="222.227" width="294.572" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="3186.558" y="245.222" fill="#000" font-size="14" textLength="274.572">storage: StorageBundle (обязательно)</text></g><!--entity Mem--><g class="entity" data-qualified-name="Builder.Mem" id="ent0004" data-source-line="14"><rect x="1030.098" y="222.227" width="305.51" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1040.098" y="245.222" fill="#000" font-size="14" textLength="285.51">memory: MemorySystem (обязательно)</text></g><!--entity Soul--><g class="entity" data-qualified-name="Builder.Soul" id="ent0005" data-source-line="15"><rect x="1370.858" y="222.227" width="281.987" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1380.858" y="245.222" fill="#000" font-size="14" textLength="261.987">soul: SoulProvider (default NoopSoul)</text></g><!--entity Tools--><g class="entity" data-qualified-name="Builder.Tools" id="ent0006" data-source-line="16"><rect x="1687.928" y="222.227" width="387.842" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="1697.928" y="245.222" fill="#000" font-size="14" textLength="367.842">tools: List<NamedTool> (авто-сборка из backends)</text></g><!--entity Bg--><g class="entity" data-qualified-name="Builder.Bg" id="ent0007" data-source-line="17"><rect x="2110.978" y="222.227" width="373.746" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="2120.978" y="245.222" fill="#000" font-size="14" textLength="353.746">background: BackgroundConfig (default EmptyBg)</text></g><!--entity Ts--><g class="entity" data-qualified-name="Builder.Ts" id="ent0008" data-source-line="18"><rect x="2519.398" y="222.227" width="376.897" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="2529.398" y="245.222" fill="#000" font-size="14" textLength="356.897">toolset: List<ToolsetContribution> (default empty)</text></g><!--entity MemSys--><g class="entity" data-qualified-name="MdMem.MemSys" id="ent0010" data-source-line="23"><ellipse cx="434.848" cy="444.787" rx="8" ry="8" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><text x="380.276" y="474.782" fill="#000" font-size="14" textLength="109.143">MemorySystem</text></g><!--entity MdTools--><g class="entity" data-qualified-name="MdMem.MdTools" id="ent0011" data-source-line="24"><ellipse cx="69.848" cy="444.787" rx="8" ry="8" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><text x="6" y="474.782" fill="#000" font-size="14" textLength="127.695">List<NamedTool></text></g><g class="entity" data-qualified-name="MdMem.GMN12" id="ent0013" data-source-line="26"><path d="M113.958,417.097 L113.958,440.787 L79.298,444.787 L113.958,448.787 L113.958,472.495 A0,0 0 0 0 113.958,472.495 L337.74,472.495 A0,0 0 0 0 337.74,472.495 L337.74,427.097 L327.74,417.097 L113.958,417.097 A0,0 0 0 0 113.958,417.097" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M327.74,417.097 L327.74,427.097 L337.74,427.097 L327.74,417.097" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><text x="119.958" y="434.164" fill="#000" font-size="13" textLength="189.313">MemoryMd.exposesTools() →</text><text x="119.958" y="449.297" fill="#000" font-size="13" textLength="202.782">memory_save / memory_read /</text><text x="119.958" y="464.429" fill="#000" font-size="13" textLength="194.327">memory_list / memory_delete</text></g><!--entity McpTools--><g class="entity" data-qualified-name="McpReg.McpTools" id="ent0016" data-source-line="33"><ellipse cx="593.848" cy="444.787" rx="8" ry="8" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><text x="530" y="474.782" fill="#000" font-size="14" textLength="127.695">List<NamedTool></text></g><g class="entity" data-qualified-name="McpReg.GMN17" id="ent0018" data-source-line="35"><path d="M637.888,417.097 L637.888,440.787 L603.128,444.787 L637.888,448.787 L637.888,472.495 A0,0 0 0 0 637.888,472.495 L837.815,472.495 A0,0 0 0 0 837.815,472.495 L837.815,427.097 L827.815,417.097 L637.888,417.097 A0,0 0 0 0 637.888,417.097" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M827.815,417.097 L827.815,427.097 L837.815,427.097 L827.815,417.097" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><text x="643.888" y="434.164" fill="#000" font-size="13" textLength="178.928">McpRegistry.namedTools →</text><text x="643.888" y="449.297" fill="#000" font-size="13" textLength="41.152">server</text><text x="685.04" y="449.297" fill="#000" font-size="13" textLength="82.304" text-decoration="underline">tool1, server</text><text x="767.343" y="449.297" fill="#000" font-size="13" textLength="37.02">tool2,</text><text x="643.888" y="464.429" fill="#000" font-size="13" textLength="12.397">...</text></g><!--entity Flow--><g class="entity" data-qualified-name="Events.Flow" id="ent0021" data-source-line="42"><ellipse cx="2212.848" cy="444.787" rx="8" ry="8" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><text x="1966.72" y="474.782" fill="#000" font-size="14" textLength="492.256">MutableSharedFlow<CompactionEvent|ToolCallEvent|LifecycleEvent></text></g><g class="entity" data-qualified-name="Events.GMN22" id="ent0023" data-source-line="44"><path d="M2256.378,409.527 L2256.378,440.787 L2222.208,444.787 L2256.378,448.787 L2256.378,480.058 A0,0 0 0 0 2256.378,480.058 L2451.31,480.058 A0,0 0 0 0 2451.31,480.058 L2451.31,419.527 L2441.31,409.527 L2256.378,409.527 A0,0 0 0 0 2256.378,409.527" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M2441.31,409.527 L2441.31,419.527 L2451.31,419.527 L2441.31,409.527" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><text x="2262.378" y="426.594" fill="#000" font-size="13" textLength="89.769">Эмитится из:</text><text x="2262.378" y="441.727" fill="#000" font-size="13" textLength="163.579">- CompactionCoordinator</text><text x="2262.378" y="456.859" fill="#000" font-size="13" textLength="106.723">- ToolDispatcher</text><text x="2262.378" y="471.992" fill="#000" font-size="13" textLength="173.932">- ConversationLoop.close()</text></g><!--entity Policy--><g class="entity" data-qualified-name="Sched.Policy" id="ent0026" data-source-line="52"><ellipse cx="1849.848" cy="444.787" rx="8" ry="8" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><text x="1756.199" y="474.782" fill="#000" font-size="14" textLength="187.298">policy: trigger + debounce</text></g><g class="entity" data-qualified-name="Sched.GMN27" id="ent0028" data-source-line="54"><path d="M1893.698,424.657 L1893.698,440.787 L1859.198,444.787 L1893.698,448.787 L1893.698,464.923 A0,0 0 0 0 1893.698,464.923 L2095.993,464.923 A0,0 0 0 0 2095.993,464.923 L2095.993,434.657 L2085.993,424.657 L1893.698,424.657 A0,0 0 0 0 1893.698,424.657" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><path d="M2085.993,424.657 L2085.993,434.657 L2095.993,434.657 L2085.993,424.657" style="stroke:#181818;stroke-width:0.5;" fill="#FEFFDD"/><text x="1899.698" y="441.724" fill="#000" font-size="13" textLength="140.156">Подписан на Events.</text><text x="1899.698" y="456.857" fill="#000" font-size="13" textLength="181.295">НИКАКОГО interval-polling.</text></g><!--entity API--><g class="entity" data-qualified-name="Agent.API" id="ent0031" data-source-line="61"><rect x="3558.998" y="426.647" width="189.695" height="36.297" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="3568.998" y="449.642" fill="#000" font-size="14" textLength="169.695">send / interrupt / events</text></g><!--entity Sub--><g class="entity" data-qualified-name="Agent.Sub" id="ent0032" data-source-line="62"><rect x="3783.888" y="418.497" width="173.918" height="52.594" fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;" rx="2.5" ry="2.5"/><text x="3793.888" y="441.492" fill="#000" font-size="14" textLength="153.918">BackgroundScheduler</text><text x="3793.888" y="457.789" fill="#000" font-size="14" textLength="70.383">подписка</text></g><!--link Builder to Llm--><g class="link" data-entity-1="ent0001" data-entity-2="ent0002" id="lnk33" data-source-line="66" data-link-type="dependency"><path d="M2503.378,91.047 C2517.988,91.957 2830.658,111.707 2913.848,146.017 C2956.728,163.697 2994.251,196.613 3016.401,218.373" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Llm"/><polygon points="3019.968,221.877,3016.351,212.716,3016.401,218.373,3010.744,218.423,3019.968,221.877" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Storage--><g class="link" data-entity-1="ent0001" data-entity-2="ent0003" id="lnk34" data-source-line="67" data-link-type="dependency"><path d="M2503.228,91.027 C2518.918,91.387 3022.088,103.327 3159.848,146.017 C3214.148,162.847 3266.115,196.818 3296.595,218.848" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Storage"/><polygon points="3300.648,221.777,3295.697,213.263,3296.595,218.848,3291.01,219.747,3300.648,221.777" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Mem--><g class="link" data-entity-1="ent0001" data-entity-2="ent0004" id="lnk35" data-source-line="68" data-link-type="dependency"><path d="M2502.208,91.017 C2466.588,90.987 946.368,89.917 915.848,121.017 C864.088,173.767 952.894,203.894 1043.224,220.854" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Mem"/><polygon points="1048.138,221.777,1040.03,216.185,1043.224,220.854,1038.554,224.047,1048.138,221.777" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Soul--><g class="link" data-entity-1="ent0001" data-entity-2="ent0005" id="lnk36" data-source-line="69" data-link-type="dependency"><path d="M2502.108,91.017 C2477.448,91.057 1844.488,92.597 1670.848,146.017 C1617.608,162.397 1567.276,196.622 1537.936,218.802" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Soul"/><polygon points="1533.948,221.817,1543.539,219.58,1537.936,218.802,1538.715,213.199,1533.948,221.817" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Tools--><g class="link" data-entity-1="ent0001" data-entity-2="ent0006" id="lnk37" data-source-line="70" data-link-type="dependency"><path d="M2502.178,91.037 C2488.378,91.397 2264.888,97.897 2093.848,146.017 C2027.258,164.747 1958.871,198.125 1918.261,219.535" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Tools"/><polygon points="1913.838,221.867,1923.664,221.208,1918.261,219.535,1919.934,214.131,1913.838,221.867" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Bg--><g class="link" data-entity-1="ent0001" data-entity-2="ent0007" id="lnk38" data-source-line="71" data-link-type="dependency"><path d="M2502.698,91.127 C2497.838,94.647 2378.988,180.656 2325.918,219.056" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Bg"/><polygon points="2321.868,221.987,2331.504,219.952,2325.918,219.056,2326.814,213.47,2321.868,221.987" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Builder to Ts--><g class="link" data-entity-1="ent0001" data-entity-2="ent0008" id="lnk39" data-source-line="72" data-link-type="dependency"><path d="M2502.998,91.127 C2507.858,94.647 2626.707,180.656 2679.777,219.056" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Ts"/><polygon points="2683.828,221.987,2678.881,213.47,2679.777,219.056,2674.191,219.952,2683.828,221.987" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link MdMem to Mem--><g class="link" data-entity-1="ent0009" data-entity-2="ent0004" id="lnk40" data-source-line="74" data-link-type="dependency"><path d="M520.881,194.634 C520.929,194.48 520.977,194.326 521.026,194.172 C521.123,193.864 521.221,193.556 521.32,193.247 C521.519,192.63 521.722,192.012 521.93,191.393 C522.761,188.918 523.669,186.435 524.658,183.967 C526.638,179.03 528.947,174.151 531.64,169.512 C537.026,160.234 543.95,151.917 552.848,146.017 C593.778,118.877 947.068,134.157 994.848,145.527 C1056.548,160.217 1116.796,195.801 1151.906,218.991" style="stroke:#181818;stroke-width:1;" fill="none" id="MdMem-to-Mem"/><polygon points="1156.078,221.747,1150.772,213.449,1151.906,218.991,1146.363,220.124,1156.078,221.747" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="917.848" y="134.084" fill="#000" font-size="13" textLength="76.908">implements</text></g><!--link MdMem to MdTools--><g class="link" data-entity-1="ent0009" data-entity-2="ent0011" id="lnk41" data-source-line="75" data-link-type="dependency"><path d="M512.788,241.377 C507.418,241.757 163.958,265.917 96.848,331.527 C67.608,360.117 67.519,409.436 68.809,430.326" style="stroke:#181818;stroke-width:1;" fill="none" id="MdMem-to-MdTools"/><polygon points="69.118,435.317,72.555,426.087,68.809,430.326,64.571,426.581,69.118,435.317" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="133.238" y="319.594" fill="#000" font-size="13" textLength="53.441">exposes</text></g><!--link McpReg to McpTools--><g class="link" data-entity-1="ent0015" data-entity-2="ent0016" id="lnk42" data-source-line="77" data-link-type="dependency"><path d="M603.838,241.527 C603.578,246.887 596.375,392.733 594.515,430.353" style="stroke:#181818;stroke-width:1;" fill="none" id="McpReg-to-McpTools"/><polygon points="594.268,435.347,598.707,426.555,594.515,430.353,590.717,426.16,594.268,435.347" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="601.618" y="319.594" fill="#000" font-size="13" textLength="53.441">exposes</text></g><!--link Bg to Events--><g class="link" data-entity-1="ent0007" data-entity-2="ent0020" id="lnk43" data-source-line="79" data-link-type="dependency"><path d="M2358.978,258.877 C2395.908,272.647 2440.748,295.617 2466.848,331.527 C2468.681,334.049 2470.364,336.685 2471.909,339.413 C2472.681,340.776 2473.419,342.163 2474.124,343.569 C2474.476,344.272 2474.821,344.98 2475.157,345.693 C2475.324,346.049 2475.49,346.407 2475.654,346.765 C2475.736,346.945 2473.765,342.565 2473.846,342.745" style="stroke:#181818;stroke-width:1;" fill="none" id="Bg-to-Events"/><polygon points="2475.899,347.304,2475.851,337.455,2473.846,342.745,2468.556,340.74,2475.899,347.304" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="2461.528" y="319.594" fill="#000" font-size="13" textLength="86.906">subscribes-to</text></g><!--link Bg to Sched--><g class="link" data-entity-1="ent0007" data-entity-2="ent0025" id="lnk44" data-source-line="80" data-link-type="dependency"><path d="M2270.668,258.747 C2246.558,275.217 2211.568,301.807 2187.848,331.527 C2170.733,352.977 2156.9,380.507 2147.265,402.936 C2144.856,408.543 2142.71,413.831 2140.84,418.626 C2140.607,419.225 2140.377,419.817 2140.152,420.401 C2140.096,420.546 2141.835,416.025 2141.779,416.17" style="stroke:#181818;stroke-width:1;" fill="none" id="Bg-to-Sched"/><polygon points="2139.984,420.837,2146.948,413.872,2141.779,416.17,2139.481,411.001,2139.984,420.837" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="2209.748" y="319.594" fill="#000" font-size="13" textLength="34.83">holds</text></g><!--reverse link Tools to MdTools--><g class="link" data-entity-1="ent0006" data-entity-2="ent0011" id="lnk45" data-source-line="82" data-link-type="dependency"><path d="M1825.536,260.522 C1783.056,274.132 1725.678,290.447 1669.848,298.527 C1597.028,309.067 1412.388,304.307 1338.848,306.527 C1130.358,312.827 1078.368,318.667 869.848,323.527 C859.118,323.777 105.248,324.837 96.848,331.527 C64.548,357.257 66.748,414.267 68.838,435.557" style="stroke:#181818;stroke-width:1;" fill="none" id="Tools-backto-MdTools"/><polygon points="1830.298,258.997,1820.506,257.934,1825.536,260.522,1822.947,265.552,1830.298,258.997" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="1339.848" y="319.594" fill="#000" font-size="13" textLength="76.204">auto-merge</text></g><!--reverse link Tools to McpTools--><g class="link" data-entity-1="ent0006" data-entity-2="ent0016" id="lnk46" data-source-line="83" data-link-type="dependency"><path d="M1821.831,260.343 C1779.371,273.173 1723.828,288.567 1669.848,298.527 C1562.208,318.387 1534.128,317.417 1424.848,323.527 C1413.698,324.147 629.588,324.567 620.848,331.527 C588.538,357.247 590.748,414.267 592.838,435.557" style="stroke:#181818;stroke-width:1;" fill="none" id="Tools-backto-McpTools"/><polygon points="1826.618,258.897,1816.845,257.671,1821.831,260.343,1819.159,265.329,1826.618,258.897" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="1624.638" y="319.594" fill="#000" font-size="13" textLength="76.204">auto-merge</text></g><!--link Builder to Agent--><g class="link" data-entity-1="ent0001" data-entity-2="ent0030" id="lnk47" data-source-line="85" data-link-type="dependency"><path d="M3495.328,148.662 C3495.642,148.766 3495.957,148.87 3496.271,148.975 C3496.9,149.185 3497.528,149.397 3498.157,149.612 C3499.414,150.041 3500.672,150.48 3501.928,150.927 C3506.956,152.719 3511.977,154.655 3516.972,156.71 C3521.966,158.765 3526.933,160.938 3531.852,163.203 C3532.467,163.486 3533.081,163.771 3533.695,164.057 C3534.001,164.2 3534.308,164.343 3534.614,164.487 C3534.691,164.523 3530.242,162.433 3530.318,162.469" style="stroke:#181818;stroke-width:1;" fill="none" id="Builder-to-Agent"/><polygon points="3534.844,164.595,3528.399,157.148,3530.318,162.469,3524.997,164.389,3534.844,164.595" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text x="3444.228" y="134.084" fill="#000" font-size="13" textLength="42.11">build()</text></g><!--link Agent to API--><g class="link" data-entity-1="ent0030" data-entity-2="ent0031" id="lnk48" data-source-line="86" data-link-type="dependency"><path d="M3653.848,241.527 C3653.848,246.527 3653.848,373.177 3653.848,421.347" style="stroke:#181818;stroke-width:1;" fill="none" id="Agent-to-API"/><polygon points="3653.848,426.347,3657.848,417.347,3653.848,421.347,3649.848,417.347,3653.848,426.347" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><!--link Agent to Sub--><g class="link" data-entity-1="ent0030" data-entity-2="ent0032" id="lnk49" data-source-line="87" data-link-type="dependency"><path d="M3653.898,241.407 C3655.878,242.837 3719.748,288.727 3765.848,331.527 C3796.158,359.667 3824.954,391.134 3845.564,414.544" style="stroke:#181818;stroke-width:1;" fill="none" id="Agent-to-Sub"/><polygon points="3848.868,418.297,3845.923,408.899,3845.564,414.544,3839.918,414.185,3848.868,418.297" fill="#181818" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/></g><?plantuml-src ZLLVYzj647_tfnZoKX-DVBIFuZY8hoaKBk6eynWurj9O5bbfnUxAgMaBbnRIXnPIsZwKGbFw0GfEw17dd_iLLbyXdwIpkx8aovTh3R8qE_zdPtwZ7gHvmIJB819P8NBCzKGlEOB4IBCyuJWOw5JJmQs4U30kKnwZX7SNlu1vPJRcZVc7_b-OTVMOdYSmfFUbUKtFSpg_X5jddnqC1Xz040IDCdqF6ljmmrckUJU0gKRkom7GhoF9UHR2QQhnb6Sm9FlFgYVaUrLzOtrMFvYtPdFWJ910Nrbf8Lc28KpynxZCOpg_ramjsZULOIRaCeGxxZrPAet_4Gz9xiKZIax1qF-P58lK9ZoCSSPAhk6k48Nbr57GLrzR2y6LBORIHtTPXl4zEZYc85RcERdV1DKZyynigWkwfHMOjNa1KnOzm3nMtgYLLtshLYIHWYeJmhZvFX7vB4tQw6vdXLwE4szdd5mP6kewk7kU8XjQfjDIfo8_RasXDLK7f0PVDvrIXmeFKpq7FSTKWZKBYkeKu6n6tbI_Z_njt8bzmMCYwmvASurong96nj_OzcA8welrobfRR4kM2qqZaYPpxKZxsteVuHU5KAYSyF00tZt-gP7nVNEks0BXS4j9P34SzcKuHT3AnCXH-pQaiZZtjbZTvAFYSqn8IIvzj8xUBy2LcKN5zQcrjaVvLbNjPAPGBb2UdzjB-kZc3ldnpKPgD1fTbqFRSRSN10dA1US_hxZ9KhCfnycSIOm_vUBXqGaX68jiWpcThsoK9unpJvscr3JBYACZVU9MxNr9cxy8szOqIlHKZmZPx0o53Jk0rjs9439ESqPWqU5Rzv-agc0wcgFSKSofE8fPrLCQz574gM661_-lD1Eo5fUyXaf7xHUd43oD2A1ev9A4WEL3Y75AsX4whJF7Vc_cVn2I_KsulYOCMPctG32sgkzXr4hzRdurlvaVwNbgVZPFlVi5um4vvscUx5-rdsrd_dNrRVKT6RyqRwhlpSjwk_G6UimKEiRzV9Xc1Q5bltGUERpothPGrlUXZqkMXHqdRFkA5bDVuOeYty_TVjjMWx3KbxsSTXBwaphamcszLsODTW7GyhFYQsgX3JMFNGSlNNRj2ZnsEwfBRvTDzypkZHqPkmgw1tvmkoS4o3i2QZ3mO5ZRWn1iCJ6pfUYowh4EeKOmqlCWuhWrHdJPOy-g9pG4LKvLH22FAj1Yo_KT6i9Sy9Xql94ZAblhZvLQ11bAoht3RXrs-3kf-NiFOMhFQ7wsJNJiBhUbx6tz2m00?></g></svg> |