Adding design document and diagrams.

This commit is contained in:
2025-04-21 13:21:48 -04:00
parent 78158bd3b2
commit a46ee0d562
8 changed files with 684 additions and 0 deletions

98
DESIGN.md Normal file
View File

@@ -0,0 +1,98 @@
# System Design
This document contains a systems design for a product capable of helping software engineers by accepting prompts
from a variety of sources (Github, Jira, IDEs, etc) and autonomously retrieving context, creating a plan to solve the
prompt, executing the plan, verifying the results, and then pushing the results back to the most appropriate tool.
At a very high level the system looks like this: \
![arch-diagram](diagrams/arch-diagram.png)
Components:
* API - A REST based API capable of accepting incoming webhooks from a variety of tools. The webhooks will generate
tasks that will require context gathering, planning, execution, and testing to resolve. These get passed to the
indexer to gather context.
* Indexer - An event based processor that accepts tasks from the API and gathers context (e.g. Git files / commits, Jira
ticket status, etc) that will need to be indexed and stored for efficient retrieval by later stages.
* Agent Runner - Takes the task and associated context generated by the Indexer and generates an execution plan. Works
synchronously with the task executor to execute the plan. As tasks are executed the plan should be adjusted to ensure
the task is accomplished.
* Task Executor - A protected process running with [gVisor](https://gvisor.dev/) (a container security orchestration
mechanism) that has a set of tools available to it that the agent runner can execute to perform its task. The executor
will have a Network Policy applied such that network access is restricted the bare minimum required to use the
tools. \
Example tools include:
* Code Context - Select appropriate context for code generators.
* Code Generators - Generate code for given tasks.
* Compilers - Ensure code compiles.
* Linters - Ensure code is well formatted and doesn't violate any defined coding standards.
* Run Tests - Ensure tests (unit, integration, system) continue to pass after making changes, make sure new tests
pass.
* Result Processor - Responsible for receiving the result of a task from the Agent Runner and disseminating it to
interested parties through the API and directly to integrated services.
## System Dependencies
* The solution sits on top of `Amazon Web Services` as an industry standard compute provider. We intentionally will
not use AWS products that do not have good analogs with other compute providers (e.g. Kinesis, Nova, Bedrock, etc) to
avoid vendor lock in.
* The solution is built and deployed on top of `Elastic Kubernetes Service` to provide a flexible orchestration layer
that will allow us to deploy, scale, monitor, and repair the application with relatively low effort. Updates with EKS
can be orchestrated such that they are delivered without downtime to consumers.
* For asynchronous event flows we'll use `Apache Kafka` this will allow us to handle a very large event volume with low
performance overhead. Events can be processed as cluster capacity allows and events will not be dropped in the event
of an application availability issue.
* For observability, we'll use `Prometheus` and `Grafana` in the application to provide metrics. For logs we'll use `Grafana
Loki`. This will allow us to see how the application is performing as well as identify any issues as they arise.
* To provide large language and embedding models we can host `ollama` on top of GPU equipped GKE nodes. Models can be
distributed via persistent volumes and models can be pre-loaded into vRAM with an init container. Autoscalers can be
used to scale up and down specific model versions based on demand. This doesn't preclude using LLM-as-a-service
providers.
* Persistent data storage will be done via `PostgreSQL` hosted on top of `Amazon Relational Database Service`. The
`pgvector`
extension will be used to provide efficient vector searches for searching embeddings.
## Scaling Considerations
The system can dynamically scale based on load. A horizontal pod autoscaler can be used on each component of the system
to allow the system to scale up or down based on the current load. For "compute" instances CPU utilization can be used
to determine when to scale. For "gpu" instances an external metric measuring GPU utilization can be used to determine
when scaling operations are appropriate. For efficient usage of GPU vRAM and load spreading, models can be packaged
together such that they saturate most of the available vRAM, they can be scaled independently.
In order to accommodate load bursts the system will operate largely asynchronously. Boundaries between system components
will be buffered with Kafka to allow the components to only consume what they're able to handle without data getting
lost or the need for complex retry mechanisms. If the number of models gets large a proxy could be developed that can
dynamically route requests to the appropriate backend with the appropriate model pre-loaded.
## Testing / Model Migration Strategy
An essential property of any AI based system is the ability to measure the performance of the system over time. This is
important to ensure that models can be safely migrated as the market evolves and better models are released.
A simple approach to measure performance over time is to create a representative set of example tasks that should be
run when changes are introduced. Performance should be measured against the baseline on a number of different metrics
such as:
* Number of agentic iterations required to solve the task (less is better).
* Amount of code / responses generated (less is better).
* Success rate (more is better).
Over time, as problematic areas are identified, new tasks should be introduced to the set to improve the training data.
## Migrating / Managing Embeddings
One particularly sensitive area for migrating models is around embeddings models. Better models are routinely published
but, it is expensive to re-index data, especially if the volumes are large.
The vector database should store the model that produced each embedding. When new embedding models are introduced the
indexer should use the new embedding model to index new content, but should allow old content to be searched using old
models. If models are permanently retired the content should be re-indexed with a supported embeddings model. The vector
database should allow the same content to be indexed with multiple models at the same time.
## Data Flow
![dataflow-diagram](diagrams/dataflow-diagram.png)
## Sequence Diagram
![sequence-diagram](diagrams/sequence-diagram.png)

View File

@@ -20,6 +20,8 @@ work.
The reason this approach was taken was that it could be implemented quickly and produces reasonable looking results
while being a solid platform for further iteration.
A design for a more full-featured and robust implementation can be found in [DESIGN.md](DESIGN.md).
## Code Structure
| Package | Description |

View File

@@ -0,0 +1,174 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0" version="26.2.13">
<diagram name="Page-1" id="HUvZW4rwKInUA1yDHv0p">
<mxGraphModel dx="792" dy="557" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="xK0QtsmecTMva1r89ds2-68" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry y="250" width="120" height="180" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-2" target="xK0QtsmecTMva1r89ds2-15">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-2" value="&lt;div&gt;Jira&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="10" y="310" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-3" target="xK0QtsmecTMva1r89ds2-15">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-3" value="Github" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="10" y="350" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-5" value="Amazon Web Services" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="220" y="180" width="570" height="430" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-6" value="&amp;nbsp;Elastic Kubernetes Service" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="290" y="270" width="450" height="320" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-9" value="&amp;nbsp;&lt;font style=&quot;font-size: 10px;&quot;&gt;GPU Equipped Node Pool&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="580" y="505" width="150" height="70" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-42" value="&amp;nbsp;gVisor Enabled Node Pool" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="580" y="430" width="150" height="70" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-10" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Standard Compute Node Pool&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="300" y="300" width="430" height="120" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-58" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-8" target="xK0QtsmecTMva1r89ds2-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-8" value="Task Executor" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="610" y="460" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-11" value="ollama" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="605" y="535" width="115" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-12" target="xK0QtsmecTMva1r89ds2-47">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-12" value="API" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="330" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-15" target="xK0QtsmecTMva1r89ds2-12">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-15" value="Elastic Load Balancer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="330" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-20" value="Kafka Cluster" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="490" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-22" target="xK0QtsmecTMva1r89ds2-8">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="760" y="350" />
<mxPoint x="760" y="475" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-22" target="xK0QtsmecTMva1r89ds2-11">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="770" y="340" />
<mxPoint x="770" y="550" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-63" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-22" target="xK0QtsmecTMva1r89ds2-62">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="640" y="395" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-22" value="Agent Runner" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="610" y="330" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-43" value="Grafana / Loki" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="535" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-44" value="&amp;nbsp;Relational Database Service" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="445" y="200" width="170" height="60" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#FF8000;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-45" target="xK0QtsmecTMva1r89ds2-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-83" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;strokeColor=#FF8000;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-45" target="xK0QtsmecTMva1r89ds2-62">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-45" value="Database" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="475" y="220" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeColor=#FF8000;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-47" target="xK0QtsmecTMva1r89ds2-45">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#00994D;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-47" target="xK0QtsmecTMva1r89ds2-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-47" value="Indexer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="475" y="330" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-54" value="Tool&lt;br&gt;APIs / Services" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="80" y="435" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.917;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-8" target="xK0QtsmecTMva1r89ds2-54">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-56" target="xK0QtsmecTMva1r89ds2-15">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-56" value="IDEs" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="10" y="270" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-60" target="xK0QtsmecTMva1r89ds2-15">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-60" value="Other Tools" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="10" y="390" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-66" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-62" target="xK0QtsmecTMva1r89ds2-12">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-62" value="Result Processor" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="380" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-69" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.806;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#007FFF;" edge="1" parent="1" source="xK0QtsmecTMva1r89ds2-62" target="xK0QtsmecTMva1r89ds2-68">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-71" value="&lt;div align=&quot;left&quot;&gt;Legend&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="50" y="540" width="120" height="90" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-72" value="" style="edgeStyle=none;orthogonalLoop=1;jettySize=auto;html=1;rounded=0;strokeColor=#007FFF;" edge="1" parent="1">
<mxGeometry width="100" relative="1" as="geometry">
<mxPoint x="60" y="574.74" as="sourcePoint" />
<mxPoint x="90" y="574.74" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-73" value="" style="edgeStyle=none;orthogonalLoop=1;jettySize=auto;html=1;rounded=0;strokeColor=#00994D;" edge="1" parent="1">
<mxGeometry width="100" relative="1" as="geometry">
<mxPoint x="60" y="594.74" as="sourcePoint" />
<mxPoint x="90" y="594.74" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-75" value="&lt;div align=&quot;left&quot;&gt;HTTPS&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="95" y="560" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-76" value="&lt;div align=&quot;left&quot;&gt;Event&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="95" y="580" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-77" value="" style="edgeStyle=none;orthogonalLoop=1;jettySize=auto;html=1;rounded=0;strokeColor=#FF8000;" edge="1" parent="1">
<mxGeometry width="100" relative="1" as="geometry">
<mxPoint x="60" y="614.74" as="sourcePoint" />
<mxPoint x="90" y="614.74" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="xK0QtsmecTMva1r89ds2-78" value="&lt;div align=&quot;left&quot;&gt;Database&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="95" y="600" width="70" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
diagrams/arch-diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -0,0 +1,193 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0" version="26.2.13">
<diagram name="Page-1" id="RQNN4LVJ7GCKde5oFDnz">
<mxGraphModel dx="754" dy="530" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="N4d1pdWUKStJnXA2dGwQ-2" value="Gather Context" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="270" y="145" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-3" target="N4d1pdWUKStJnXA2dGwQ-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-26" value="Context" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-25">
<mxGeometry x="-0.194" y="-8" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.855;exitY=1;exitDx=0;exitDy=-4.35;exitPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-3" target="N4d1pdWUKStJnXA2dGwQ-27">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="476" y="310" />
<mxPoint x="540" y="310" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-32" value="Context" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-31">
<mxGeometry x="0.0935" y="9" relative="1" as="geometry">
<mxPoint x="25" y="3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-3" value="Context Database" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
<mxGeometry x="425" y="110" width="60" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-4" target="N4d1pdWUKStJnXA2dGwQ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-10" value="Ticket / History" style="edgeLabel;html=1;align=center;verticalAlign=bottom;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-5">
<mxGeometry x="-0.2111" y="2" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=1;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-4" target="N4d1pdWUKStJnXA2dGwQ-11">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="160" y="185" />
<mxPoint x="160" y="338" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-16" value="Ticket Update" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-14">
<mxGeometry x="-0.0337" y="4" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-4" value="Jira Ticket" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="170" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-6" target="N4d1pdWUKStJnXA2dGwQ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-8" value="Files / History" style="edgeLabel;html=1;align=center;verticalAlign=bottom;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-7">
<mxGeometry x="-0.4656" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.081;entryY=0.22;entryDx=0;entryDy=0;curved=1;entryPerimeter=0;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-6" target="N4d1pdWUKStJnXA2dGwQ-11">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="200" y="130" />
<mxPoint x="200" y="288" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-17" value="PR Update" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-15">
<mxGeometry x="0.2775" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-6" value="Github Repo" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="115" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-11" target="N4d1pdWUKStJnXA2dGwQ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-21" value="Task Context" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-20">
<mxGeometry x="0.1889" y="2" relative="1" as="geometry">
<mxPoint x="-12" y="4" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-11" value="Accept Task" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="240" y="270" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-2" target="N4d1pdWUKStJnXA2dGwQ-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-13" value="Repo / Ticket&lt;br&gt;Context" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-12">
<mxGeometry x="-0.1141" y="-1" relative="1" as="geometry">
<mxPoint x="-9" y="-34" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-11" target="N4d1pdWUKStJnXA2dGwQ-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-19" value="Task Context" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-18">
<mxGeometry x="0.0377" y="31" relative="1" as="geometry">
<mxPoint x="-27" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-22" target="N4d1pdWUKStJnXA2dGwQ-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-29" value="Task" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-28">
<mxGeometry x="-0.0498" y="-1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;curved=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-22" target="N4d1pdWUKStJnXA2dGwQ-30">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="620" y="222" />
<mxPoint x="620" y="50" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-37" value="Plan Results" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-36">
<mxGeometry x="-0.0015" relative="1" as="geometry">
<mxPoint x="-32" y="20" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-22" value="Create / Execute Plan" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="540" y="210" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.035;entryY=0.485;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-2" target="N4d1pdWUKStJnXA2dGwQ-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-24" value="Execute Task" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-23">
<mxGeometry x="-0.0058" relative="1" as="geometry">
<mxPoint x="-35" y="-5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-27" target="N4d1pdWUKStJnXA2dGwQ-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-35" value="Task Results" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-34">
<mxGeometry x="0.208" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-27" value="Task Executor" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="530" y="330" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-30" target="N4d1pdWUKStJnXA2dGwQ-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-39" value="Pull Request" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-38">
<mxGeometry x="-0.2344" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;exitX=0;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-30" target="N4d1pdWUKStJnXA2dGwQ-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-47" value="Ticket Update" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-46">
<mxGeometry x="-0.494" y="3" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-30" value="Accept Results" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="320" y="10" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-40" value="LLM" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
<mxGeometry x="720" y="280" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.971;entryY=0.335;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-40" target="N4d1pdWUKStJnXA2dGwQ-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-43" value="&lt;div&gt;Plan /&lt;/div&gt;&lt;div&gt;Plan Steps&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-41">
<mxGeometry x="0.1773" y="3" relative="1" as="geometry">
<mxPoint x="13" y="10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.987;entryY=0.561;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" edge="1" parent="1" source="N4d1pdWUKStJnXA2dGwQ-40" target="N4d1pdWUKStJnXA2dGwQ-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="N4d1pdWUKStJnXA2dGwQ-44" value="&lt;div&gt;Task Specific&lt;/div&gt;&lt;div&gt;Information&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="N4d1pdWUKStJnXA2dGwQ-42">
<mxGeometry x="-0.0062" y="-1" relative="1" as="geometry">
<mxPoint x="16" y="5" as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@@ -0,0 +1,217 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0" version="26.2.13">
<diagram name="Page-1" id="2YBvvXClWsGukQMizWep">
<mxGraphModel dx="1494" dy="453" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="R9xhgmwoiYYisnBT6Gz--27" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="230" y="150" width="160" height="50" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--23" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="480" y="220" width="160" height="90" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--15" value="dataResponse" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1" source="R9xhgmwoiYYisnBT6Gz--33">
<mxGeometry x="0.5556" relative="1" as="geometry">
<mxPoint x="100" y="190" as="sourcePoint" />
<Array as="points">
<mxPoint x="190" y="190" />
</Array>
<mxPoint x="370" y="190" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-1" value="Jira / Github / IDE" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="40" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="aM9ryv3xv72pqoxQDRHE-1" vertex="1">
<mxGeometry x="45" y="60" width="10" height="30" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-3" value="update" style="html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" parent="aM9ryv3xv72pqoxQDRHE-1" target="aM9ryv3xv72pqoxQDRHE-2" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-40" y="70" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--33" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="aM9ryv3xv72pqoxQDRHE-1">
<mxGeometry x="45" y="120" width="10" height="40" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--34" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="aM9ryv3xv72pqoxQDRHE-1">
<mxGeometry x="45" y="350" width="10" height="90" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--14" value="dataRequest" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1" target="R9xhgmwoiYYisnBT6Gz--33">
<mxGeometry x="-0.6923" relative="1" as="geometry">
<mxPoint x="250" y="170" as="sourcePoint" />
<Array as="points">
<mxPoint x="370" y="170" />
</Array>
<mxPoint x="100" y="170" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-5" value="API" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="190" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="aM9ryv3xv72pqoxQDRHE-5" vertex="1">
<mxGeometry x="45" y="80" width="10" height="90" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--35" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="aM9ryv3xv72pqoxQDRHE-5">
<mxGeometry x="45" y="320" width="10" height="20" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--41" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="aM9ryv3xv72pqoxQDRHE-5">
<mxGeometry x="45" y="370" width="10" height="50" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--20" value="planComplete" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;" edge="1" parent="1">
<mxGeometry x="-0.5217" relative="1" as="geometry">
<mxPoint x="504.9999999999998" y="340" as="sourcePoint" />
<Array as="points">
<mxPoint x="595" y="340" />
</Array>
<mxPoint x="735" y="340" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-7" value="webhook" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" parent="1" source="aM9ryv3xv72pqoxQDRHE-2" target="aM9ryv3xv72pqoxQDRHE-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="195" y="130" as="sourcePoint" />
<Array as="points">
<mxPoint x="180" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--1" value="Task Executor" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxGeometry x="570" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="R9xhgmwoiYYisnBT6Gz--1">
<mxGeometry x="45" y="170" width="10" height="110" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--3" value="Indexer" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxGeometry x="325" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="R9xhgmwoiYYisnBT6Gz--3">
<mxGeometry x="45" y="80" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--21" value="getTaskContext" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1">
<mxGeometry x="-0.5319" relative="1" as="geometry">
<mxPoint x="615" y="260" as="sourcePoint" />
<Array as="points">
<mxPoint x="595" y="260" />
<mxPoint x="615" y="240" />
</Array>
<mxPoint x="379.9999999999998" y="260" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--5" value="Result Processor" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxGeometry x="690" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="R9xhgmwoiYYisnBT6Gz--5">
<mxGeometry x="45" y="290" width="10" height="100" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--22" value="taskContext" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1">
<mxGeometry x="0.5319" relative="1" as="geometry">
<mxPoint x="380" y="280" as="sourcePoint" />
<Array as="points">
<mxPoint x="470" y="280" />
</Array>
<mxPoint x="615" y="280" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--7" value="Agent Runner" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxGeometry x="450" y="40" width="100" height="440" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--8" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="R9xhgmwoiYYisnBT6Gz--7">
<mxGeometry x="45" y="140" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--13" value="indexRequest" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;" edge="1" parent="1" source="aM9ryv3xv72pqoxQDRHE-6">
<mxGeometry relative="1" as="geometry">
<mxPoint x="250" y="130" as="sourcePoint" />
<Array as="points">
<mxPoint x="335" y="130" />
</Array>
<mxPoint x="370" y="130" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--16" value="planExecuteTasks" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="380" y="209.78" as="sourcePoint" />
<Array as="points">
<mxPoint x="470" y="209.78" />
</Array>
<mxPoint x="494.9999999999998" y="209.77999999999997" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--17" value="executeTask" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="504.9999999999998" y="240" as="sourcePoint" />
<Array as="points">
<mxPoint x="600" y="240" />
</Array>
<mxPoint x="615" y="240" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--19" value="taskResponse" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="615" y="300" as="sourcePoint" />
<Array as="points">
<mxPoint x="590" y="300" />
<mxPoint x="610" y="280" />
</Array>
<mxPoint x="504.9999999999998" y="300" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--25" value="&lt;div align=&quot;center&quot;&gt;Until task complete&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="480" y="210" width="160" height="10" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--28" value="Until content indexed" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="230" y="140" width="160" height="10" as="geometry" />
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--36" value="completedTask" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1" target="R9xhgmwoiYYisnBT6Gz--35">
<mxGeometry x="-0.7755" relative="1" as="geometry">
<mxPoint x="735" y="370" as="sourcePoint" />
<Array as="points">
<mxPoint x="715" y="370" />
<mxPoint x="735" y="350" />
</Array>
<mxPoint x="270" y="370" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--39" value="taskCompleteNotify" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;dashed=1;" edge="1" parent="1" source="R9xhgmwoiYYisnBT6Gz--6" target="R9xhgmwoiYYisnBT6Gz--34">
<mxGeometry x="-0.8281" relative="1" as="geometry">
<mxPoint x="730" y="400" as="sourcePoint" />
<Array as="points">
<mxPoint x="710" y="400" />
<mxPoint x="730" y="380" />
</Array>
<mxPoint x="240" y="400" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--40" value="result" style="html=1;verticalAlign=bottom;startArrow=block;endArrow=none;startSize=8;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startFill=1;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint y="470.15999999999997" as="sourcePoint" />
<mxPoint x="85" y="469.9966666666667" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--42" value="resultRequest" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1" source="R9xhgmwoiYYisnBT6Gz--34" target="R9xhgmwoiYYisnBT6Gz--41">
<mxGeometry relative="1" as="geometry">
<mxPoint x="105" y="420" as="sourcePoint" />
<Array as="points">
<mxPoint x="190" y="420" />
</Array>
<mxPoint x="210" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="R9xhgmwoiYYisnBT6Gz--43" value="resultResponse" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;" edge="1" parent="1">
<mxGeometry x="0.0339" relative="1" as="geometry">
<mxPoint x="234.99999999999977" y="449.9966666666667" as="sourcePoint" />
<Array as="points" />
<mxPoint x="95" y="449.9966666666667" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB