Repository navigation
Expand file tree
/
Copy patharchitecture.drawio
More file actions
149 lines (149 loc) · 16.9 KB
/
Copy patharchitecture.drawio
File metadata and controls
149 lines (149 loc) · 16.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="drawio" version="26.0.0">
<diagram name="architecture">
<mxGraphModel dx="1000" dy="700" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="gitmate — AI Git Assistant" style="text;html=1;align=left;verticalAlign=middle;fontStyle=1;fontSize=24;" vertex="1" parent="1">
<mxGeometry x="40" y="30" width="900" height="40" as="geometry"/>
</mxCell>
<mxCell id="subtitle" value="Target architecture (Phases 0–8) · model gemini-3.5-flash-lite · human-in-the-loop · keyring-only secrets" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#555555;" vertex="1" parent="1">
<mxGeometry x="40" y="72" width="1100" height="24" as="geometry"/>
</mxCell>
<mxCell id="local" value="Local host" style="swimlane;startSize=30;html=1;fontStyle=1;fontSize=14;fillColor=#f5f7fa;strokeColor=#8a94a6;" vertex="1" parent="1">
<mxGeometry x="180" y="180" width="960" height="640" as="geometry"/>
</mxCell>
<mxCell id="cli" value="<b>gitmate CLI</b><br/>Typer + Rich" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="local">
<mxGeometry x="60" y="280" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="diffx" value="<b>DiffExtractor</b><br/>subprocess git" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="local">
<mxGeometry x="280" y="280" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="budget" value="<b>TokenBudget</b><br/>truncate / chunk" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="local">
<mxGeometry x="500" y="280" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="provider" value="<b>LLMProvider</b><br/>retry + interface" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="local">
<mxGeometry x="720" y="280" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="config" value="<b>Config + Keyring</b><br/>TOML + OS store" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="local">
<mxGeometry x="60" y="80" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="metrics" value="<b>Metrics</b><br/>sqlite + stats" style="shape=cylinder3;whiteSpace=wrap;html=1;fontSize=13;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="local">
<mxGeometry x="280" y="80" width="140" height="70" as="geometry"/>
</mxCell>
<mxCell id="cache" value="<b>Prompt Cache</b><br/>diskcache sha256" style="shape=cylinder3;whiteSpace=wrap;html=1;fontSize=13;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="local">
<mxGeometry x="500" y="80" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="gitrepo" value="<b>Git Repo</b><br/>review + commit" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="local">
<mxGeometry x="60" y="470" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="fallback" value="<b>Template Fallback</b><br/>offline messages" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="local">
<mxGeometry x="680" y="480" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="cloud" value="LLM APIs (HTTPS)" style="swimlane;startSize=30;html=1;fontStyle=1;fontSize=14;fillColor=#fff8f0;strokeColor=#d79b00;" vertex="1" parent="1">
<mxGeometry x="1180" y="180" width="220" height="640" as="geometry"/>
</mxCell>
<mxCell id="gembadge" value="" style="shape=image;html=1;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;image=data:image/svg+xml,PHN2ZyBoZWlnaHQ9IjI0IiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5HZW1pbmk8L3RpdGxlPjxwYXRoIGQ9Ik0yMC42MTYgMTAuODM1YTE0LjE0NyAxNC4xNDcgMCAwMS00LjQ1LTMuMDAxIDE0LjExMSAxNC4xMTEgMCAwMS0zLjY3OC02LjQ1Mi41MDMuNTAzIDAgMDAtLjk3NSAwIDE0LjEzNCAxNC4xMzQgMCAwMS0zLjY3OSA2LjQ1MiAxNC4xNTUgMTQuMTU1IDAgMDEtNC40NSAzLjAwMWMtLjY1LjI4LTEuMzE4LjUwNS0yLjAwMi42NzhhLjUwMi41MDIgMCAwMDAgLjk3NWMuNjg0LjE3MiAxLjM1LjM5NyAyLjAwMi42NzdhMTQuMTQ3IDE0LjE0NyAwIDAxNC40NSAzLjAwMSAxNC4xMTIgMTQuMTEyIDAgMDEzLjY3OSA2LjQ1My41MDIuNTAyIDAgMDAuOTc1IDBjLjE3Mi0uNjg1LjM5Ny0xLjM1MS42NzctMi4wMDNhMTQuMTQ1IDE0LjE0NSAwIDAxMy4wMDEtNC40NSAxNC4xMTMgMTQuMTEzIDAgMDE2LjQ1My0zLjY3OC41MDMuNTAzIDAgMDAwLS45NzUgMTMuMjQ1IDEzLjI0NSAwIDAxLTIuMDAzLS42Nzh6IiBmaWxsPSIjMzE4NkZGIj48L3BhdGg+PHBhdGggZD0iTTIwLjYxNiAxMC44MzVhMTQuMTQ3IDE0LjE0NyAwIDAxLTQuNDUtMy4wMDEgMTQuMTExIDE0LjExMSAwIDAxLTMuNjc4LTYuNDUyLjUwMy41MDMgMCAwMC0uOTc1IDAgMTQuMTM0IDE0LjEzNCAwIDAxLTMuNjc5IDYuNDUyIDE0LjE1NSAxNC4xNTUgMCAwMS00LjQ1IDMuMDAxYy0uNjUuMjgtMS4zMTguNTA1LTIuMDAyLjY3OGEuNTAyLjUwMiAwIDAwMCAuOTc1Yy42ODQuMTcyIDEuMzUuMzk3IDIuMDAyLjY3N2ExNC4xNDcgMTQuMTQ3IDAgMDE0LjQ1IDMuMDAxIDE0LjExMiAxNC4xMTIgMCAwMTMuNjc5IDYuNDUzLjUwMi41MDIgMCAwMC45NzUgMGMuMTcyLS42ODUuMzk3LTEuMzUxLjY3Ny0yLjAwM2ExNC4xNDUgMTQuMTQ1IDAgMDEzLjAwMS00LjQ1IDE0LjExMyAxNC4xMTMgMCAwMTYuNDUzLTMuNjc4LjUwMy41MDMgMCAwMDAtLjk3NSAxMy4yNDUgMTMuMjQ1IDAgMDEtMi4wMDMtLjY3OHoiIGZpbGw9InVybCgjbG9iZS1pY29ucy1nZW1pbmktMC1fUl8wXykiPjwvcGF0aD48cGF0aCBkPSJNMjAuNjE2IDEwLjgzNWExNC4xNDcgMTQuMTQ3IDAgMDEtNC40NS0zLjAwMSAxNC4xMTEgMTQuMTExIDAgMDEtMy42NzgtNi40NTIuNTAzLjUwMyAwIDAwLS45NzUgMCAxNC4xMzQgMTQuMTM0IDAgMDEtMy42NzkgNi40NTIgMTQuMTU1IDE0LjE1NSAwIDAxLTQuNDUgMy4wMDFjLS42NS4yOC0xLjMxOC41MDUtMi4wMDIuNjc4YS41MDIuNTAyIDAgMDAwIC45NzVjLjY4NC4xNzIgMS4zNS4zOTcgMi4wMDIuNjc3YTE0LjE0NyAxNC4xNDcgMCAwMTQuNDUgMy4wMDEgMTQuMTEyIDE0LjExMiAwIDAxMy42NzkgNi40NTMuNTAyLjUwMiAwIDAwLjk3NSAwYy4xNzItLjY4NS4zOTctMS4zNTEuNjc3LTIuMDAzYTE0LjE0NSAxNC4xNDUgMCAwMTMuMDAxLTQuNDUgMTQuMTEzIDE0LjExMyAwIDAxNi40NTMtMy42NzguNTAzLjUwMyAwIDAwMC0uOTc1IDEzLjI0NSAxMy4yNDUgMCAwMS0yLjAwMy0uNjc4eiIgZmlsbD0idXJsKCNsb2JlLWljb25zLWdlbWluaS0xLV9SXzBfKSI+PC9wYXRoPjxwYXRoIGQ9Ik0yMC42MTYgMTAuODM1YTE0LjE0NyAxNC4xNDcgMCAwMS00LjQ1LTMuMDAxIDE0LjExMSAxNC4xMTEgMCAwMS0zLjY3OC02LjQ1Mi41MDMuNTAzIDAgMDAtLjk3NSAwIDE0LjEzNCAxNC4xMzQgMCAwMS0zLjY3OSA2LjQ1MiAxNC4xNTUgMTQuMTU1IDAgMDEtNC40NSAzLjAwMWMtLjY1LjI4LTEuMzE4LjUwNS0yLjAwMi42NzhhLjUwMi41MDIgMCAwMDAgLjk3NWMuNjg0LjE3MiAxLjM1LjM5NyAyLjAwMi42NzdhMTQuMTQ3IDE0LjE0NyAwIDAxNC40NSAzLjAwMSAxNC4xMTIgMTQuMTEyIDAgMDEzLjY3OSA2LjQ1My41MDIuNTAyIDAgMDAuOTc1IDBjLjE3Mi0uNjg1LjM5Ny0xLjM1MS42NzctMi4wMDNhMTQuMTQ1IDE0LjE0NSAwIDAxMy4wMDEtNC40NSAxNC4xMTMgMTQuMTEzIDAgMDE2LjQ1My0zLjY3OC41MDMuNTAzIDAgMDAwLS45NzUgMTMuMjQ1IDEzLjI0NSAwIDAxLTIuMDAzLS42Nzh6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtZ2VtaW5pLTItX1JfMF8pIj48L3BhdGg+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0ibG9iZS1pY29ucy1nZW1pbmktMC1fUl8wXyIgeDE9IjciIHgyPSIxMSIgeTE9IjE1LjUiIHkyPSIxMiI+PHN0b3Agc3RvcC1jb2xvcj0iIzA4Qjk2MiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4Qjk2MiIgc3RvcC1vcGFjaXR5PSIwIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsb2JlLWljb25zLWdlbWluaS0xLV9SXzBfIiB4MT0iOCIgeDI9IjExLjUiIHkxPSI1LjUiIHkyPSIxMSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NDU0MyI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0Y5NDU0MyIgc3RvcC1vcGFjaXR5PSIwIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsb2JlLWljb25zLWdlbWluaS0yLV9SXzBfIiB4MT0iMy41IiB4Mj0iMTcuNSIgeTE9IjEzLjUiIHkyPSIxMiI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZBQkMxMiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iLjQ2IiBzdG9wLWNvbG9yPSIjRkFCQzEyIiBzdG9wLW9wYWNpdHk9IjAiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=" vertex="1" parent="cloud">
<mxGeometry x="86" y="212" width="48" height="48" as="geometry"/>
</mxCell>
<mxCell id="gemini" value="<b>Gemini 3.5 Flash-Lite</b><br/>default provider" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="cloud">
<mxGeometry x="30" y="280" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="anthropic" value="<b>Anthropic</b><br/>secondary provider" style="rounded=1;whiteSpace=wrap;html=1;fontSize=13;fillColor=#f5f5f5;strokeColor=#666666;dashed=1;" vertex="1" parent="cloud">
<mxGeometry x="30" y="480" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="dev" value="Developer" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="80" y="465" width="30" height="60" as="geometry"/>
</mxCell>
<mxCell id="legend" value="Legend" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#666666;verticalAlign=top;fontStyle=1;fontSize=13;" vertex="1" parent="1">
<mxGeometry x="40" y="866" width="1020" height="80" as="geometry"/>
</mxCell>
<mxCell id="leg1" value="" style="rounded=0;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="legend">
<mxGeometry x="10" y="30" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg1t" value="Service" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="50" y="28" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="leg2" value="" style="rounded=0;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="legend">
<mxGeometry x="350" y="30" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg2t" value="Data store" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="390" y="28" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="leg3" value="" style="rounded=0;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="legend">
<mxGeometry x="690" y="30" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg3t" value="Security" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="730" y="28" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="leg4" value="" style="rounded=0;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="legend">
<mxGeometry x="10" y="54" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg4t" value="LLM API" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="50" y="52" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="leg5" value="" style="rounded=0;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="legend">
<mxGeometry x="350" y="54" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg5t" value="External" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="390" y="52" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="leg6" value="" style="rounded=0;html=1;fillColor=#f5f5f5;strokeColor=#666666;dashed=1;" vertex="1" parent="legend">
<mxGeometry x="690" y="54" width="30" height="16" as="geometry"/>
</mxCell>
<mxCell id="leg6t" value="Secondary / planned" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;" vertex="1" parent="legend">
<mxGeometry x="730" y="52" width="280" height="20" as="geometry"/>
</mxCell>
<mxCell id="e_runs" value="runs" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dev" target="cli">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_diff" value="subprocess git" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="cli" target="diffx">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_filediff" value="FileDiff[]" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="diffx" target="budget">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_prompt" value="prompt" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="budget" target="provider">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_https" value="HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="provider" target="gemini">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_secondary" value="secondary" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;dashed=1;strokeColor=#808080;fontColor=#808080;exitX=1;exitY=0.7;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="provider" target="anthropic">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1150" y="509"/>
<mxPoint x="1150" y="695"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e_cache" value="sha256" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0;exitY=0.3;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="provider" target="cache">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="870" y="481"/>
<mxPoint x="870" y="295"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e_degrade" value="on ProviderUnavailable" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;dashed=1;strokeColor=#b45309;fontColor=#b45309;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.69;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="provider" target="fallback">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_cfg" value="TOML + keyring" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="cli" target="config">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e_metrics" value="latency / cost" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.8;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="cli" target="metrics">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="368" y="380"/>
<mxPoint x="530" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e_commit" value="accept + commit" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;fontSize=12;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cli" target="gitrepo">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>