yycode 0.3.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. agent/__init__.py +33 -0
  2. agent/acp/__init__.py +2 -0
  3. agent/acp/approval_adapter.py +134 -0
  4. agent/acp/content_adapter.py +45 -0
  5. agent/acp/jsonrpc.py +92 -0
  6. agent/acp/server.py +197 -0
  7. agent/acp/session_manager.py +193 -0
  8. agent/acp/update_adapter.py +192 -0
  9. agent/app_paths.py +25 -0
  10. agent/approval.py +169 -0
  11. agent/cancellation.py +52 -0
  12. agent/change_snapshot.py +186 -0
  13. agent/context_compressor.py +116 -0
  14. agent/graph.py +137 -0
  15. agent/llm_retry.py +434 -0
  16. agent/logger.py +97 -0
  17. agent/lsp/__init__.py +13 -0
  18. agent/lsp/client.py +151 -0
  19. agent/lsp/manager.py +234 -0
  20. agent/lsp/types.py +119 -0
  21. agent/message_context_manager.py +322 -0
  22. agent/message_format.py +105 -0
  23. agent/nodes/llm_node.py +58 -0
  24. agent/nodes/state.py +12 -0
  25. agent/nodes/task_guard_node.py +50 -0
  26. agent/nodes/tools_node.py +70 -0
  27. agent/plan_snapshot.py +70 -0
  28. agent/providers/__init__.py +13 -0
  29. agent/providers/anthropic_provider.py +268 -0
  30. agent/providers/base.py +52 -0
  31. agent/providers/openai_provider.py +279 -0
  32. agent/providers/text_tool_calls.py +118 -0
  33. agent/runtime/approval_service.py +184 -0
  34. agent/runtime/context.py +43 -0
  35. agent/runtime/tool_events.py +368 -0
  36. agent/runtime/tool_executor.py +208 -0
  37. agent/runtime/tool_output.py +261 -0
  38. agent/runtime/tool_registry.py +91 -0
  39. agent/runtime/tool_scheduler.py +35 -0
  40. agent/runtime/workflow_guard.py +217 -0
  41. agent/runtime/workspace.py +5 -0
  42. agent/runtime/workspace_tools.py +22 -0
  43. agent/session.py +787 -0
  44. agent/session_replay.py +95 -0
  45. agent/session_store.py +186 -0
  46. agent/skills.py +254 -0
  47. agent/streaming.py +248 -0
  48. agent/subagent.py +634 -0
  49. agent/task_memory.py +340 -0
  50. agent/todo_manager.py +304 -0
  51. agent/tool_retry.py +106 -0
  52. agent/tui/__init__.py +14 -0
  53. agent/tui/app.py +1325 -0
  54. agent/tui/approval.py +53 -0
  55. agent/tui/commands/__init__.py +6 -0
  56. agent/tui/commands/base.py +48 -0
  57. agent/tui/commands/clear.py +37 -0
  58. agent/tui/commands/help.py +27 -0
  59. agent/tui/commands/registry.py +94 -0
  60. agent/tui/help_content.py +108 -0
  61. agent/tui/renderers.py +1961 -0
  62. agent/tui/runner.py +439 -0
  63. agent/tui/state.py +653 -0
  64. main.py +465 -0
  65. tools/__init__.py +50 -0
  66. tools/apply_patch.py +305 -0
  67. tools/bash.py +76 -0
  68. tools/diff_utils.py +139 -0
  69. tools/edit_file.py +40 -0
  70. tools/git_diff.py +72 -0
  71. tools/git_show.py +65 -0
  72. tools/grep.py +149 -0
  73. tools/list_files.py +90 -0
  74. tools/list_skills.py +24 -0
  75. tools/load_skill.py +30 -0
  76. tools/lsp_definition.py +27 -0
  77. tools/lsp_diagnostics.py +32 -0
  78. tools/lsp_document_symbols.py +23 -0
  79. tools/lsp_hover.py +29 -0
  80. tools/lsp_references.py +37 -0
  81. tools/lsp_utils.py +38 -0
  82. tools/lsp_workspace_symbols.py +23 -0
  83. tools/read_file.py +61 -0
  84. tools/read_many_files.py +50 -0
  85. tools/safety.py +50 -0
  86. tools/subagent.py +57 -0
  87. tools/todo.py +89 -0
  88. tools/verify.py +107 -0
  89. tools/web_search.py +250 -0
  90. tools/workspace.py +36 -0
  91. tools/workspace_state.py +60 -0
  92. tools/write_file.py +88 -0
  93. utils/__init__.py +5 -0
  94. utils/retry.py +13 -0
  95. yycode-0.3.2.data/data/skills/code_review.md +61 -0
  96. yycode-0.3.2.data/data/skills/code_workflow.md +404 -0
  97. yycode-0.3.2.data/data/skills/drawio/SKILL.md +636 -0
  98. yycode-0.3.2.data/data/skills/drawio/agents/openai.yaml +19 -0
  99. yycode-0.3.2.data/data/skills/drawio/assets/demo-erd.drawio +84 -0
  100. yycode-0.3.2.data/data/skills/drawio/assets/demo-layered-cn.drawio +91 -0
  101. yycode-0.3.2.data/data/skills/drawio/assets/demo-layered-cn.png +0 -0
  102. yycode-0.3.2.data/data/skills/drawio/assets/demo-layered.drawio +112 -0
  103. yycode-0.3.2.data/data/skills/drawio/assets/demo-layered.png +0 -0
  104. yycode-0.3.2.data/data/skills/drawio/assets/demo-ml.drawio +90 -0
  105. yycode-0.3.2.data/data/skills/drawio/assets/demo-ring-cn.drawio +68 -0
  106. yycode-0.3.2.data/data/skills/drawio/assets/demo-ring-cn.png +0 -0
  107. yycode-0.3.2.data/data/skills/drawio/assets/demo-ring.drawio +86 -0
  108. yycode-0.3.2.data/data/skills/drawio/assets/demo-ring.png +0 -0
  109. yycode-0.3.2.data/data/skills/drawio/assets/demo-sequence.drawio +116 -0
  110. yycode-0.3.2.data/data/skills/drawio/assets/demo-star-cn.drawio +66 -0
  111. yycode-0.3.2.data/data/skills/drawio/assets/demo-star-cn.png +0 -0
  112. yycode-0.3.2.data/data/skills/drawio/assets/demo-star.drawio +79 -0
  113. yycode-0.3.2.data/data/skills/drawio/assets/demo-star.png +0 -0
  114. yycode-0.3.2.data/data/skills/drawio/assets/demo-uml-class.drawio +64 -0
  115. yycode-0.3.2.data/data/skills/drawio/assets/microservices-example.drawio +173 -0
  116. yycode-0.3.2.data/data/skills/drawio/assets/microservices-example.png +0 -0
  117. yycode-0.3.2.data/data/skills/drawio/assets/workflow-cn.drawio +120 -0
  118. yycode-0.3.2.data/data/skills/drawio/assets/workflow-cn.png +0 -0
  119. yycode-0.3.2.data/data/skills/drawio/assets/workflow.drawio +120 -0
  120. yycode-0.3.2.data/data/skills/drawio/assets/workflow.png +0 -0
  121. yycode-0.3.2.data/data/skills/drawio/docs/index.html +469 -0
  122. yycode-0.3.2.data/data/skills/drawio/docs/zh.html +456 -0
  123. yycode-0.3.2.data/data/skills/drawio/references/style-extraction.md +254 -0
  124. yycode-0.3.2.data/data/skills/drawio/styles/schema.json +112 -0
  125. yycode-0.3.2.data/data/skills/plan.md +115 -0
  126. yycode-0.3.2.data/data/skills/ppt/SKILL.md +254 -0
  127. yycode-0.3.2.dist-info/METADATA +12 -0
  128. yycode-0.3.2.dist-info/RECORD +131 -0
  129. yycode-0.3.2.dist-info/WHEEL +5 -0
  130. yycode-0.3.2.dist-info/entry_points.txt +2 -0
  131. yycode-0.3.2.dist-info/top_level.txt +4 -0
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="drawio" version="26.0.0">
3
+ <diagram name="Page-1">
4
+ <mxGraphModel>
5
+ <root>
6
+ <mxCell id="0" />
7
+ <mxCell id="1" parent="0" />
8
+
9
+ <!-- 开始 -->
10
+ <mxCell id="2" value="开始" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
11
+ <mxGeometry x="170" y="20" width="160" height="40" as="geometry" />
12
+ </mxCell>
13
+
14
+ <!-- 1. 检查依赖 -->
15
+ <mxCell id="3" value="1. 检查依赖" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
16
+ <mxGeometry x="140" y="100" width="220" height="50" as="geometry" />
17
+ </mxCell>
18
+
19
+ <!-- 2. 规划图表 -->
20
+ <mxCell id="4" value="2. 规划图表" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
21
+ <mxGeometry x="140" y="190" width="220" height="50" as="geometry" />
22
+ </mxCell>
23
+
24
+ <!-- 3. 生成 XML -->
25
+ <mxCell id="5" value="3. 生成 .drawio XML" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
26
+ <mxGeometry x="140" y="280" width="220" height="50" as="geometry" />
27
+ </mxCell>
28
+
29
+ <!-- 4. 导出草稿 -->
30
+ <mxCell id="6" value="4. 导出草稿 PNG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
31
+ <mxGeometry x="140" y="370" width="220" height="50" as="geometry" />
32
+ </mxCell>
33
+
34
+ <!-- 5. 自检 -->
35
+ <mxCell id="7" value="5. 自检 &amp;amp; 自动修复&lt;br&gt;&lt;i style=&quot;font-size:11px&quot;&gt;(最多 2 轮)&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
36
+ <mxGeometry x="140" y="460" width="220" height="60" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- 6. 展示给用户 -->
40
+ <mxCell id="8" value="6. 展示图片给用户" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
41
+ <mxGeometry x="140" y="570" width="220" height="50" as="geometry" />
42
+ </mxCell>
43
+
44
+ <!-- 满意? -->
45
+ <mxCell id="9" value="满意?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
46
+ <mxGeometry x="160" y="670" width="180" height="80" as="geometry" />
47
+ </mxCell>
48
+
49
+ <!-- 根据反馈编辑 XML -->
50
+ <mxCell id="10" value="根据反馈编辑 XML" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
51
+ <mxGeometry x="440" y="685" width="200" height="50" as="geometry" />
52
+ </mxCell>
53
+
54
+ <!-- 重新导出 PNG -->
55
+ <mxCell id="11" value="重新导出 PNG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
56
+ <mxGeometry x="440" y="570" width="200" height="50" as="geometry" />
57
+ </mxCell>
58
+
59
+ <!-- 7. 最终导出 -->
60
+ <mxCell id="12" value="7. 最终导出" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
61
+ <mxGeometry x="140" y="810" width="220" height="50" as="geometry" />
62
+ </mxCell>
63
+
64
+ <!-- 完成 -->
65
+ <mxCell id="13" value="完成" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
66
+ <mxGeometry x="170" y="910" width="160" height="40" as="geometry" />
67
+ </mxCell>
68
+
69
+ <!-- Edges -->
70
+ <mxCell id="20" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="3">
71
+ <mxGeometry relative="1" as="geometry" />
72
+ </mxCell>
73
+ <mxCell id="21" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="4">
74
+ <mxGeometry relative="1" as="geometry" />
75
+ </mxCell>
76
+ <mxCell id="22" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="5">
77
+ <mxGeometry relative="1" as="geometry" />
78
+ </mxCell>
79
+ <mxCell id="23" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="6">
80
+ <mxGeometry relative="1" as="geometry" />
81
+ </mxCell>
82
+ <mxCell id="24" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="7">
83
+ <mxGeometry relative="1" as="geometry" />
84
+ </mxCell>
85
+ <mxCell id="25" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="7" target="8">
86
+ <mxGeometry relative="1" as="geometry" />
87
+ </mxCell>
88
+ <mxCell id="26" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="8" target="9">
89
+ <mxGeometry relative="1" as="geometry" />
90
+ </mxCell>
91
+
92
+ <!-- 满意 → 是 → 最终导出 -->
93
+ <mxCell id="27" value="是" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="9" target="12">
94
+ <mxGeometry relative="1" as="geometry" />
95
+ </mxCell>
96
+
97
+ <!-- 满意 → 否 → 编辑 XML -->
98
+ <mxCell id="28" value="否" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="9" target="10">
99
+ <mxGeometry relative="1" as="geometry" />
100
+ </mxCell>
101
+
102
+ <!-- 编辑 → 重新导出 -->
103
+ <mxCell id="29" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="10" target="11">
104
+ <mxGeometry relative="1" as="geometry" />
105
+ </mxCell>
106
+
107
+ <!-- 重新导出 → 展示(循环) -->
108
+ <mxCell id="30" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="11" target="8">
109
+ <mxGeometry relative="1" as="geometry" />
110
+ </mxCell>
111
+
112
+ <!-- 最终导出 → 完成 -->
113
+ <mxCell id="31" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="12" target="13">
114
+ <mxGeometry relative="1" as="geometry" />
115
+ </mxCell>
116
+
117
+ </root>
118
+ </mxGraphModel>
119
+ </diagram>
120
+ </mxfile>
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="drawio" version="26.0.0">
3
+ <diagram name="Page-1">
4
+ <mxGraphModel>
5
+ <root>
6
+ <mxCell id="0" />
7
+ <mxCell id="1" parent="0" />
8
+
9
+ <!-- Start -->
10
+ <mxCell id="2" value="Start" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
11
+ <mxGeometry x="170" y="20" width="160" height="40" as="geometry" />
12
+ </mxCell>
13
+
14
+ <!-- 1. Check deps -->
15
+ <mxCell id="3" value="1. Check deps" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
16
+ <mxGeometry x="140" y="100" width="220" height="50" as="geometry" />
17
+ </mxCell>
18
+
19
+ <!-- 2. Plan -->
20
+ <mxCell id="4" value="2. Plan diagram" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
21
+ <mxGeometry x="140" y="190" width="220" height="50" as="geometry" />
22
+ </mxCell>
23
+
24
+ <!-- 3. Generate XML -->
25
+ <mxCell id="5" value="3. Generate .drawio XML" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
26
+ <mxGeometry x="140" y="280" width="220" height="50" as="geometry" />
27
+ </mxCell>
28
+
29
+ <!-- 4. Export PNG -->
30
+ <mxCell id="6" value="4. Export draft PNG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
31
+ <mxGeometry x="140" y="370" width="220" height="50" as="geometry" />
32
+ </mxCell>
33
+
34
+ <!-- 5. Self-check -->
35
+ <mxCell id="7" value="5. Self-check &amp; auto-fix&lt;br&gt;&lt;i style=&quot;font-size:11px&quot;&gt;(max 2 rounds)&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
36
+ <mxGeometry x="140" y="460" width="220" height="60" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- 6. Show to user -->
40
+ <mxCell id="8" value="6. Show image to user" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
41
+ <mxGeometry x="140" y="570" width="220" height="50" as="geometry" />
42
+ </mxCell>
43
+
44
+ <!-- Approved? -->
45
+ <mxCell id="9" value="Approved?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
46
+ <mxGeometry x="160" y="670" width="180" height="80" as="geometry" />
47
+ </mxCell>
48
+
49
+ <!-- Edit XML (side) -->
50
+ <mxCell id="10" value="Edit XML per feedback" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
51
+ <mxGeometry x="440" y="685" width="200" height="50" as="geometry" />
52
+ </mxCell>
53
+
54
+ <!-- Re-export PNG (side) -->
55
+ <mxCell id="11" value="Re-export PNG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
56
+ <mxGeometry x="440" y="570" width="200" height="50" as="geometry" />
57
+ </mxCell>
58
+
59
+ <!-- 7. Final export -->
60
+ <mxCell id="12" value="7. Final export" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
61
+ <mxGeometry x="140" y="810" width="220" height="50" as="geometry" />
62
+ </mxCell>
63
+
64
+ <!-- Done -->
65
+ <mxCell id="13" value="Done" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
66
+ <mxGeometry x="170" y="910" width="160" height="40" as="geometry" />
67
+ </mxCell>
68
+
69
+ <!-- Edges: main flow -->
70
+ <mxCell id="20" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="3">
71
+ <mxGeometry relative="1" as="geometry" />
72
+ </mxCell>
73
+ <mxCell id="21" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="4">
74
+ <mxGeometry relative="1" as="geometry" />
75
+ </mxCell>
76
+ <mxCell id="22" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="5">
77
+ <mxGeometry relative="1" as="geometry" />
78
+ </mxCell>
79
+ <mxCell id="23" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="6">
80
+ <mxGeometry relative="1" as="geometry" />
81
+ </mxCell>
82
+ <mxCell id="24" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="7">
83
+ <mxGeometry relative="1" as="geometry" />
84
+ </mxCell>
85
+ <mxCell id="25" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="7" target="8">
86
+ <mxGeometry relative="1" as="geometry" />
87
+ </mxCell>
88
+ <mxCell id="26" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="8" target="9">
89
+ <mxGeometry relative="1" as="geometry" />
90
+ </mxCell>
91
+
92
+ <!-- Approved? → Yes → Final export -->
93
+ <mxCell id="27" value="Yes" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="9" target="12">
94
+ <mxGeometry relative="1" as="geometry" />
95
+ </mxCell>
96
+
97
+ <!-- Approved? → No → Edit XML -->
98
+ <mxCell id="28" value="No" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="9" target="10">
99
+ <mxGeometry relative="1" as="geometry" />
100
+ </mxCell>
101
+
102
+ <!-- Edit XML → Re-export -->
103
+ <mxCell id="29" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="10" target="11">
104
+ <mxGeometry relative="1" as="geometry" />
105
+ </mxCell>
106
+
107
+ <!-- Re-export → Show (loop back) -->
108
+ <mxCell id="30" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="11" target="8">
109
+ <mxGeometry relative="1" as="geometry" />
110
+ </mxCell>
111
+
112
+ <!-- Final export → Done -->
113
+ <mxCell id="31" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="12" target="13">
114
+ <mxGeometry relative="1" as="geometry" />
115
+ </mxCell>
116
+
117
+ </root>
118
+ </mxGraphModel>
119
+ </diagram>
120
+ </mxfile>