Files
nova/docs/graphs/efhas_agent.svg

246 lines
16 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.2 (0)
-->
<!-- Title: efhas_agent Pages: 1 -->
<svg style="background:#0a0e17" width="1392pt" height="1864pt"
viewBox="0.00 0.00 1392.00 1864.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(2 2) rotate(0) translate(4 927.94)">
<title>efhas_agent</title>
<polygon fill="#0a0e17" stroke="none" points="-4,4 -4,-927.94 691.94,-927.94 691.94,4 -4,4"/>
<text xml:space="preserve" text-anchor="middle" x="343.97" y="-906.64" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#0066ff">FCE Agent — Behind Every Departure</text>
<g id="clust1" class="cluster">
<title>cluster_triage</title>
<polygon fill="#0a0e17" stroke="#1e2a4a" points="181.94,-715.9 181.94,-815.4 319.94,-815.4 319.94,-715.9 181.94,-715.9"/>
<text xml:space="preserve" text-anchor="middle" x="250.94" y="-798.1" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#8892a8">Node: triage</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_gather</title>
<polygon fill="#0a0e17" stroke="#0066ff" points="147.94,-414.28 147.94,-640.33 679.94,-640.33 679.94,-414.28 147.94,-414.28"/>
<text xml:space="preserve" text-anchor="middle" x="413.94" y="-623.03" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#0066ff">Node: gather_context &#160;(parallel)</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_gather_tools</title>
<polygon fill="#0a0e17" stroke="#0066ff" points="155.94,-422.28 155.94,-509.78 671.94,-509.78 671.94,-422.28 155.94,-422.28"/>
<text xml:space="preserve" text-anchor="middle" x="413.94" y="-492.48" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#0066ff">Node: gather_context &#160;(parallel)</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_synth</title>
<polygon fill="#0a0e17" stroke="#1e2a4a" points="321.94,-285.03 321.94,-397.28 491.94,-397.28 491.94,-285.03 321.94,-285.03"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-379.98" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#8892a8">Node: synthesize</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_format</title>
<polygon fill="#0a0e17" stroke="#1e2a4a" points="325.94,-178.53 325.94,-266.03 487.94,-266.03 487.94,-178.53 325.94,-178.53"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-248.73" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#8892a8">Node: format_output</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_review</title>
<polygon fill="#0a0e17" stroke="#1e2a4a" points="325.94,-82.28 325.94,-159.53 487.94,-159.53 487.94,-82.28 325.94,-82.28"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-142.23" font-family="Helvetica,sans-Serif" font-size="14.00" fill="#8892a8">Node: human_review</text>
</g>
<!-- start -->
<g id="node1" class="node">
<title>start</title>
<ellipse fill="#0066ff" stroke="#1e2a4a" cx="250.94" cy="-870.55" rx="28.15" ry="28.15"/>
<text xml:space="preserve" text-anchor="middle" x="250.94" y="-867.42" font-family="Helvetica,sans-Serif" font-size="10.00" fill="white">START</text>
</g>
<!-- triage -->
<g id="node4" class="node">
<title>triage</title>
<polygon fill="#121829" stroke="#1e2a4a" points="312.19,-782.15 189.69,-782.15 189.69,-723.9 312.19,-723.9 312.19,-782.15"/>
<text xml:space="preserve" text-anchor="middle" x="250.94" y="-768.65" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">get_flight_status()</text>
<text xml:space="preserve" text-anchor="middle" x="250.94" y="-743.9" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">delay &lt; 10min → skip</text>
<text xml:space="preserve" text-anchor="middle" x="250.94" y="-731.15" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">ON_TIME → skip</text>
</g>
<!-- start&#45;&gt;triage -->
<g id="edge1" class="edge">
<title>start&#45;&gt;triage</title>
<path fill="none" stroke="#4a5568" d="M250.94,-842.17C250.94,-827.68 250.94,-809.61 250.94,-793.62"/>
<polygon fill="#4a5568" stroke="#4a5568" points="254.44,-793.93 250.94,-783.93 247.44,-793.93 254.44,-793.93"/>
</g>
<!-- end_skip -->
<g id="node2" class="node">
<title>end_skip</title>
<ellipse fill="#4a5568" stroke="#1e2a4a" cx="69.94" cy="-606.72" rx="65.94" ry="65.94"/>
<ellipse fill="none" stroke="#1e2a4a" cx="69.94" cy="-606.72" rx="69.94" ry="69.94"/>
<text xml:space="preserve" text-anchor="middle" x="69.94" y="-609.97" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">END</text>
<text xml:space="preserve" text-anchor="middle" x="69.94" y="-597.22" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">(no notification)</text>
</g>
<!-- end_done -->
<g id="node3" class="node">
<title>end_done</title>
<ellipse fill="#00c853" stroke="#1e2a4a" cx="406.94" cy="-26.64" rx="22.64" ry="22.64"/>
<ellipse fill="none" stroke="#1e2a4a" cx="406.94" cy="-26.64" rx="26.64" ry="26.64"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-23.51" font-family="Helvetica,sans-Serif" font-size="10.00" fill="white">END</text>
</g>
<!-- triage&#45;&gt;end_skip -->
<g id="edge2" class="edge">
<title>triage&#45;&gt;end_skip</title>
<path fill="none" stroke="#ff3d00" stroke-dasharray="5,2" d="M210.23,-723.52C201.94,-717.7 193.28,-711.61 185.19,-705.9 166.82,-692.95 161.37,-690.84 143.94,-676.65 138.88,-672.53 133.73,-668.16 128.62,-663.69"/>
<polygon fill="#ff3d00" stroke="#ff3d00" points="131.02,-661.14 121.22,-657.11 126.37,-666.37 131.02,-661.14"/>
<text xml:space="preserve" text-anchor="middle" x="232.06" y="-697.35" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#ff3d00">should_notify = false</text>
</g>
<!-- gather_label -->
<g id="node5" class="node">
<title>gather_label</title>
<ellipse fill="#1e2a4a" stroke="#1e2a4a" cx="350.94" cy="-606.72" rx="0.36" ry="0.36"/>
</g>
<!-- triage&#45;&gt;gather_label -->
<g id="edge3" class="edge">
<title>triage&#45;&gt;gather_label</title>
<path fill="none" stroke="#4a5568" d="M270.69,-723.52C293.55,-690.53 329.93,-638.04 344.55,-616.94"/>
<polygon fill="#4a5568" stroke="#4a5568" points="347.22,-619.23 350.04,-609.01 341.47,-615.24 347.22,-619.23"/>
<text xml:space="preserve" text-anchor="middle" x="335.17" y="-697.35" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">should_notify = true</text>
</g>
<!-- g1 -->
<g id="node6" class="node">
<title>g1</title>
<polygon fill="#0d1a33" stroke="#1e2a4a" points="231.44,-476.53 164.44,-476.53 164.44,-430.28 231.44,-430.28 231.44,-476.53"/>
<text xml:space="preserve" text-anchor="middle" x="197.94" y="-463.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">get_flight_</text>
<text xml:space="preserve" text-anchor="middle" x="197.94" y="-450.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">details</text>
<text xml:space="preserve" text-anchor="middle" x="197.94" y="-437.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">[shared]</text>
</g>
<!-- gather_label&#45;&gt;g1 -->
<g id="edge4" class="edge">
<title>gather_label&#45;&gt;g1</title>
<path fill="none" stroke="#0066ff" d="M350.89,-605.68C348.9,-604.19 284.79,-556.2 240.94,-509.78 233.97,-502.4 226.98,-493.95 220.72,-485.92"/>
<polygon fill="#0066ff" stroke="#0066ff" points="223.51,-483.81 214.67,-477.97 217.94,-488.05 223.51,-483.81"/>
</g>
<!-- g2 -->
<g id="node7" class="node">
<title>g2</title>
<polygon fill="#0d2a0d" stroke="#1e2a4a" points="342.19,-476.53 249.69,-476.53 249.69,-430.28 342.19,-430.28 342.19,-476.53"/>
<text xml:space="preserve" text-anchor="middle" x="295.94" y="-463.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">get_route_</text>
<text xml:space="preserve" text-anchor="middle" x="295.94" y="-450.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">weather</text>
<text xml:space="preserve" text-anchor="middle" x="295.94" y="-437.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">[shared] ★ LIVE</text>
</g>
<!-- gather_label&#45;&gt;g2 -->
<g id="edge5" class="edge">
<title>gather_label&#45;&gt;g2</title>
<path fill="none" stroke="#0066ff" d="M350.9,-605.61C349.74,-602.43 323.75,-530.93 307.93,-487.41"/>
<polygon fill="#0066ff" stroke="#0066ff" points="311.28,-486.36 304.57,-478.16 304.7,-488.76 311.28,-486.36"/>
</g>
<!-- g3 -->
<g id="node8" class="node">
<title>g3</title>
<polygon fill="#0d2a0d" stroke="#1e2a4a" points="453.19,-476.53 360.69,-476.53 360.69,-430.28 453.19,-430.28 453.19,-476.53"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-463.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">get_airport_</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-450.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">status</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-437.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#00c853">[shared] ★ LIVE</text>
</g>
<!-- gather_label&#45;&gt;g3 -->
<g id="edge6" class="edge">
<title>gather_label&#45;&gt;g3</title>
<path fill="none" stroke="#0066ff" d="M350.98,-605.61C352.15,-602.43 378.62,-530.93 394.72,-487.41"/>
<polygon fill="#0066ff" stroke="#0066ff" points="397.96,-488.75 398.15,-478.16 391.39,-486.32 397.96,-488.75"/>
</g>
<!-- g4 -->
<g id="node9" class="node">
<title>g4</title>
<polygon fill="#0d2a0d" stroke="#1e2a4a" points="580.44,-476.53 471.44,-476.53 471.44,-430.28 580.44,-430.28 580.44,-476.53"/>
<text xml:space="preserve" text-anchor="middle" x="525.94" y="-463.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#ffc107">get_airport_</text>
<text xml:space="preserve" text-anchor="middle" x="525.94" y="-450.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#ffc107">congestion</text>
<text xml:space="preserve" text-anchor="middle" x="525.94" y="-437.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#ffc107">[shared] ★ HYBRID</text>
</g>
<!-- gather_label&#45;&gt;g4 -->
<g id="edge7" class="edge">
<title>gather_label&#45;&gt;g4</title>
<path fill="none" stroke="#0066ff" d="M350.98,-605.68C352.86,-604.05 413.39,-551.76 461.94,-509.78 471.55,-501.46 481.98,-492.44 491.57,-484.15"/>
<polygon fill="#0066ff" stroke="#0066ff" points="493.68,-486.95 498.95,-477.76 489.1,-481.66 493.68,-486.95"/>
</g>
<!-- g5 -->
<g id="node10" class="node">
<title>g5</title>
<polygon fill="#0d1a33" stroke="#1e2a4a" points="663.69,-476.53 598.19,-476.53 598.19,-430.28 663.69,-430.28 663.69,-476.53"/>
<text xml:space="preserve" text-anchor="middle" x="630.94" y="-463.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">get_crew_</text>
<text xml:space="preserve" text-anchor="middle" x="630.94" y="-450.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">notes</text>
<text xml:space="preserve" text-anchor="middle" x="630.94" y="-437.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">[ops]</text>
</g>
<!-- gather_label&#45;&gt;g5 -->
<g id="edge8" class="edge">
<title>gather_label&#45;&gt;g5</title>
<path fill="none" stroke="#0066ff" d="M351.05,-605.7C355.56,-604.89 500.76,-578.64 589.94,-509.78 598.26,-503.35 605.7,-494.81 611.89,-486.36"/>
<polygon fill="#0066ff" stroke="#0066ff" points="614.69,-488.45 617.46,-478.23 608.92,-484.5 614.69,-488.45"/>
</g>
<!-- synth -->
<g id="node11" class="node">
<title>synth</title>
<polygon fill="#121829" stroke="#1e2a4a" points="483.56,-364.03 330.31,-364.03 330.31,-293.03 483.56,-293.03 483.56,-364.03"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-350.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">generate_notification()</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-337.78" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">[passenger server]</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-313.03" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Context → empathetic text</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-300.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Missing data → omit section</text>
</g>
<!-- g1&#45;&gt;synth -->
<!-- g1&#45;&gt;synth -->
<g id="edge14" class="edge">
<title>g1&#45;&gt;synth</title>
<path fill="none" stroke="#4a5568" d="M229.87,-429.9C236.34,-424.46 243.18,-418.89 249.94,-414.28 274.01,-397.86 301.68,-382.5 327.06,-369.5"/>
<polygon fill="#4a5568" stroke="#4a5568" points="328.34,-372.77 335.68,-365.13 325.17,-366.53 328.34,-372.77"/>
</g>
<!-- g2&#45;&gt;synth -->
<!-- g2&#45;&gt;synth -->
<g id="edge15" class="edge">
<title>g2&#45;&gt;synth</title>
<path fill="none" stroke="#4a5568" d="M321.66,-429.87C337.31,-414 357.33,-392.27 374.09,-373.08"/>
<polygon fill="#4a5568" stroke="#4a5568" points="376.64,-375.47 380.54,-365.62 371.35,-370.89 376.64,-375.47"/>
</g>
<!-- g3&#45;&gt;synth -->
<!-- g3&#45;&gt;synth -->
<g id="edge16" class="edge">
<title>g3&#45;&gt;synth</title>
<path fill="none" stroke="#4a5568" d="M412.3,-429.87C413.56,-414.79 413.96,-394.41 413.51,-375.95"/>
<polygon fill="#4a5568" stroke="#4a5568" points="417,-375.85 413.15,-365.98 410.01,-376.1 417,-375.85"/>
</g>
<!-- g4&#45;&gt;synth -->
<!-- g4&#45;&gt;synth -->
<g id="edge17" class="edge">
<title>g4&#45;&gt;synth</title>
<path fill="none" stroke="#4a5568" d="M509.48,-429.87C495.31,-413.86 474.39,-391.87 455.09,-372.56"/>
<polygon fill="#4a5568" stroke="#4a5568" points="457.57,-370.1 448.01,-365.54 452.64,-375.07 457.57,-370.1"/>
</g>
<!-- g5&#45;&gt;synth -->
<!-- g5&#45;&gt;synth -->
<g id="edge18" class="edge">
<title>g5&#45;&gt;synth</title>
<path fill="none" stroke="#4a5568" d="M618.14,-430.06C612.46,-424.5 605.72,-418.83 598.94,-414.28 566.8,-392.7 528.29,-373.95 494.18,-359.61"/>
<polygon fill="#4a5568" stroke="#4a5568" points="495.72,-356.46 485.14,-355.88 493.05,-362.93 495.72,-356.46"/>
</g>
<!-- format -->
<g id="node12" class="node">
<title>format</title>
<polygon fill="#121829" stroke="#1e2a4a" points="479.44,-232.78 334.44,-232.78 334.44,-186.53 479.44,-186.53 479.44,-232.78"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-219.28" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Structure notification JSON</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-206.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Attach data sources</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-193.78" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Record timing</text>
</g>
<!-- synth&#45;&gt;format -->
<g id="edge19" class="edge">
<title>synth&#45;&gt;format</title>
<path fill="none" stroke="#4a5568" d="M406.94,-292.78C406.94,-277.49 406.94,-259.59 406.94,-244.41"/>
<polygon fill="#4a5568" stroke="#4a5568" points="410.44,-244.44 406.94,-234.44 403.44,-244.44 410.44,-244.44"/>
</g>
<!-- review -->
<g id="node13" class="node">
<title>review</title>
<polygon fill="#121829" stroke="#1e2a4a" points="472.69,-126.28 341.19,-126.28 341.19,-90.28 472.69,-90.28 472.69,-126.28"/>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-111.53" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">Human approval gate</text>
<text xml:space="preserve" text-anchor="middle" x="406.94" y="-98.78" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e8eaf0">(auto&#45;approve in demo)</text>
</g>
<!-- format&#45;&gt;review -->
<g id="edge20" class="edge">
<title>format&#45;&gt;review</title>
<path fill="none" stroke="#4a5568" d="M406.94,-186.1C406.94,-171.82 406.94,-153.23 406.94,-137.92"/>
<polygon fill="#4a5568" stroke="#4a5568" points="410.44,-137.99 406.94,-127.99 403.44,-137.99 410.44,-137.99"/>
</g>
<!-- review&#45;&gt;end_done -->
<g id="edge21" class="edge">
<title>review&#45;&gt;end_done</title>
<path fill="none" stroke="#4a5568" d="M406.94,-90C406.94,-82.62 406.94,-73.7 406.94,-64.94"/>
<polygon fill="#4a5568" stroke="#4a5568" points="410.44,-65.18 406.94,-55.18 403.44,-65.18 410.44,-65.18"/>
</g>
</g>
</svg>