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,19 @@
1
+ interface:
2
+ display_name: "Draw.io Diagrams"
3
+ short_description: "Generate draw.io diagrams from natural language and export to PNG/SVG/PDF/JPG with self-check and iterative refinement"
4
+ brand_color: "#F08705"
5
+
6
+ policy:
7
+ allow_implicit_invocation: true
8
+
9
+ capabilities:
10
+ - Generate .drawio XML from natural language descriptions
11
+ - Export to PNG, SVG, PDF, JPG via draw.io desktop CLI
12
+ - 6 diagram presets (ERD, UML Class, Sequence, Architecture, ML/DL, Flowchart)
13
+ - Self-check exported images and auto-fix layout issues
14
+ - Iterative review loop with targeted XML edits
15
+ - Browser fallback via diagrams.net URL when CLI unavailable
16
+ - Animated connectors for data-flow diagrams
17
+
18
+ prerequisites:
19
+ - draw.io desktop app (macOS/Linux/Windows)
@@ -0,0 +1,84 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="drawio" version="26.0.0">
3
+ <diagram name="Page-1">
4
+ <mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
5
+ <root>
6
+ <mxCell id="0" />
7
+ <mxCell id="1" parent="0" />
8
+
9
+ <!-- Users Table -->
10
+ <mxCell id="2" value="Users" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;strokeColor=#6c8ebf;fillColor=#dae8fc;html=1;" vertex="1" parent="1">
11
+ <mxGeometry x="40" y="40" width="220" height="150" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="id PK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;fontStyle=1;html=1;" vertex="1" parent="2">
14
+ <mxGeometry y="30" width="220" height="30" as="geometry" />
15
+ </mxCell>
16
+ <mxCell id="4" value="username" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="2">
17
+ <mxGeometry y="60" width="220" height="30" as="geometry" />
18
+ </mxCell>
19
+ <mxCell id="5" value="email" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="2">
20
+ <mxGeometry y="90" width="220" height="30" as="geometry" />
21
+ </mxCell>
22
+ <mxCell id="6" value="created_at" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="2">
23
+ <mxGeometry y="120" width="220" height="30" as="geometry" />
24
+ </mxCell>
25
+
26
+ <!-- Posts Table -->
27
+ <mxCell id="7" value="Posts" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;strokeColor=#6c8ebf;fillColor=#dae8fc;html=1;" vertex="1" parent="1">
28
+ <mxGeometry x="340" y="40" width="220" height="180" as="geometry" />
29
+ </mxCell>
30
+ <mxCell id="8" value="id PK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;fontStyle=1;html=1;" vertex="1" parent="7">
31
+ <mxGeometry y="30" width="220" height="30" as="geometry" />
32
+ </mxCell>
33
+ <mxCell id="9" value="title" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="7">
34
+ <mxGeometry y="60" width="220" height="30" as="geometry" />
35
+ </mxCell>
36
+ <mxCell id="10" value="content" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="7">
37
+ <mxGeometry y="90" width="220" height="30" as="geometry" />
38
+ </mxCell>
39
+ <mxCell id="11" value="user_id FK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="7">
40
+ <mxGeometry y="120" width="220" height="30" as="geometry" />
41
+ </mxCell>
42
+ <mxCell id="12" value="created_at" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="7">
43
+ <mxGeometry y="150" width="220" height="30" as="geometry" />
44
+ </mxCell>
45
+
46
+ <!-- Comments Table -->
47
+ <mxCell id="13" value="Comments" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;strokeColor=#6c8ebf;fillColor=#dae8fc;html=1;" vertex="1" parent="1">
48
+ <mxGeometry x="640" y="40" width="220" height="180" as="geometry" />
49
+ </mxCell>
50
+ <mxCell id="14" value="id PK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;fontStyle=1;html=1;" vertex="1" parent="13">
51
+ <mxGeometry y="30" width="220" height="30" as="geometry" />
52
+ </mxCell>
53
+ <mxCell id="15" value="body" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="13">
54
+ <mxGeometry y="60" width="220" height="30" as="geometry" />
55
+ </mxCell>
56
+ <mxCell id="16" value="post_id FK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="13">
57
+ <mxGeometry y="90" width="220" height="30" as="geometry" />
58
+ </mxCell>
59
+ <mxCell id="17" value="user_id FK" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="13">
60
+ <mxGeometry y="120" width="220" height="30" as="geometry" />
61
+ </mxCell>
62
+ <mxCell id="18" value="created_at" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;html=1;" vertex="1" parent="13">
63
+ <mxGeometry y="150" width="220" height="30" as="geometry" />
64
+ </mxCell>
65
+
66
+ <!-- FK: Posts.user_id -> Users.id -->
67
+ <mxCell id="19" value="" style="dashed=1;endArrow=ERmandOne;startArrow=ERmandOne;edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="11" target="3">
68
+ <mxGeometry relative="1" as="geometry" />
69
+ </mxCell>
70
+
71
+ <!-- FK: Comments.post_id -> Posts.id -->
72
+ <mxCell id="20" value="" style="dashed=1;endArrow=ERmandOne;startArrow=ERmandOne;edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="16" target="8">
73
+ <mxGeometry relative="1" as="geometry" />
74
+ </mxCell>
75
+
76
+ <!-- FK: Comments.user_id -> Users.id -->
77
+ <mxCell id="21" value="" style="dashed=1;endArrow=ERmandOne;startArrow=ERmandOne;edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="17" target="3">
78
+ <mxGeometry relative="1" as="geometry" />
79
+ </mxCell>
80
+
81
+ </root>
82
+ </mxGraphModel>
83
+ </diagram>
84
+ </mxfile>
@@ -0,0 +1,91 @@
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
+ <!-- Tier 1: 客户端 -->
10
+ <mxCell id="2" value="浏览器" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
11
+ <mxGeometry x="220" y="40" width="140" height="50" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="移动端 App" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
14
+ <mxGeometry x="500" y="40" width="140" height="50" as="geometry" />
15
+ </mxCell>
16
+
17
+ <!-- Tier 2: API 网关 -->
18
+ <mxCell id="4" value="API 网关" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=14;" vertex="1" parent="1">
19
+ <mxGeometry x="320" y="220" width="180" height="60" as="geometry" />
20
+ </mxCell>
21
+
22
+ <!-- Tier 3: 服务层 -->
23
+ <mxCell id="5" value="认证服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
24
+ <mxGeometry x="60" y="430" width="150" height="60" as="geometry" />
25
+ </mxCell>
26
+ <mxCell id="6" value="商品服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
27
+ <mxGeometry x="340" y="430" width="160" height="60" as="geometry" />
28
+ </mxCell>
29
+ <mxCell id="7" value="订单服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
30
+ <mxGeometry x="640" y="430" width="160" height="60" as="geometry" />
31
+ </mxCell>
32
+
33
+ <!-- Tier 4: 数据层 -->
34
+ <mxCell id="8" value="用户 DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
35
+ <mxGeometry x="75" y="650" width="120" height="80" as="geometry" />
36
+ </mxCell>
37
+ <mxCell id="9" value="商品 DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
38
+ <mxGeometry x="300" y="650" width="120" height="80" as="geometry" />
39
+ </mxCell>
40
+ <mxCell id="10" value="Redis 缓存" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
41
+ <mxGeometry x="490" y="660" width="120" height="60" as="geometry" />
42
+ </mxCell>
43
+ <mxCell id="11" value="订单 DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
44
+ <mxGeometry x="660" y="650" width="120" height="80" as="geometry" />
45
+ </mxCell>
46
+
47
+ <!-- Edges -->
48
+ <mxCell id="30" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="4">
49
+ <mxGeometry relative="1" as="geometry" />
50
+ </mxCell>
51
+ <mxCell id="31" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="4">
52
+ <mxGeometry relative="1" as="geometry" />
53
+ </mxCell>
54
+ <mxCell id="32" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="5">
55
+ <mxGeometry relative="1" as="geometry" />
56
+ </mxCell>
57
+ <mxCell id="33" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="6">
58
+ <mxGeometry relative="1" as="geometry" />
59
+ </mxCell>
60
+ <mxCell id="34" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="7">
61
+ <mxGeometry relative="1" as="geometry" />
62
+ </mxCell>
63
+ <mxCell id="35" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="8">
64
+ <mxGeometry relative="1" as="geometry" />
65
+ </mxCell>
66
+ <mxCell id="36" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="9">
67
+ <mxGeometry relative="1" as="geometry" />
68
+ </mxCell>
69
+ <mxCell id="37" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="10">
70
+ <mxGeometry relative="1" as="geometry" />
71
+ </mxCell>
72
+ <mxCell id="38" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="11">
73
+ <mxGeometry relative="1" as="geometry" />
74
+ </mxCell>
75
+ <!-- CROSS: 订单→商品 (check stock) -->
76
+ <mxCell id="39" value="查库存" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="7" target="6">
77
+ <mxGeometry relative="1" as="geometry" />
78
+ </mxCell>
79
+ <!-- CROSS: 认证→Redis (session) -->
80
+ <mxCell id="40" value="会话缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="10">
81
+ <mxGeometry relative="1" as="geometry">
82
+ <Array as="points">
83
+ <mxPoint x="173" y="590" />
84
+ <mxPoint x="550" y="590" />
85
+ </Array>
86
+ </mxGeometry>
87
+ </mxCell>
88
+ </root>
89
+ </mxGraphModel>
90
+ </diagram>
91
+ </mxfile>
@@ -0,0 +1,112 @@
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
+ <!-- Tier 1 (y=40): Clients -->
10
+ <mxCell id="2" value="Browser" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
11
+ <mxGeometry x="220" y="40" width="140" height="50" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="Mobile App" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
14
+ <mxGeometry x="500" y="40" width="140" height="50" as="geometry" />
15
+ </mxCell>
16
+
17
+ <!-- Tier 2 (y=240): API Gateway -->
18
+ <mxCell id="4" value="API Gateway" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=14;" vertex="1" parent="1">
19
+ <mxGeometry x="320" y="220" width="180" height="60" as="geometry" />
20
+ </mxCell>
21
+
22
+ <!-- Tier 3 (y=440): Services -->
23
+ <mxCell id="5" value="Auth Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
24
+ <mxGeometry x="60" y="430" width="150" height="60" as="geometry" />
25
+ </mxCell>
26
+ <mxCell id="6" value="Product Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
27
+ <mxGeometry x="340" y="430" width="160" height="60" as="geometry" />
28
+ </mxCell>
29
+ <mxCell id="7" value="Order Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
30
+ <mxGeometry x="640" y="430" width="160" height="60" as="geometry" />
31
+ </mxCell>
32
+
33
+ <!-- Tier 4 (y=650): Data stores -->
34
+ <mxCell id="8" value="User DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
35
+ <mxGeometry x="75" y="650" width="120" height="80" as="geometry" />
36
+ </mxCell>
37
+ <mxCell id="9" value="Product DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
38
+ <mxGeometry x="300" y="650" width="120" height="80" as="geometry" />
39
+ </mxCell>
40
+ <mxCell id="10" value="Redis Cache" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
41
+ <mxGeometry x="490" y="660" width="120" height="60" as="geometry" />
42
+ </mxCell>
43
+ <mxCell id="11" value="Order DB" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
44
+ <mxGeometry x="660" y="650" width="120" height="80" as="geometry" />
45
+ </mxCell>
46
+
47
+ <!-- === EDGES === -->
48
+
49
+ <!-- Browser → API Gateway -->
50
+ <mxCell id="30" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="4">
51
+ <mxGeometry relative="1" as="geometry" />
52
+ </mxCell>
53
+
54
+ <!-- Mobile → API Gateway -->
55
+ <mxCell id="31" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="4">
56
+ <mxGeometry relative="1" as="geometry" />
57
+ </mxCell>
58
+
59
+ <!-- API Gateway → Auth -->
60
+ <mxCell id="32" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="5">
61
+ <mxGeometry relative="1" as="geometry" />
62
+ </mxCell>
63
+
64
+ <!-- API Gateway → Product Svc -->
65
+ <mxCell id="33" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="6">
66
+ <mxGeometry relative="1" as="geometry" />
67
+ </mxCell>
68
+
69
+ <!-- API Gateway → Order Svc -->
70
+ <mxCell id="34" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="7">
71
+ <mxGeometry relative="1" as="geometry" />
72
+ </mxCell>
73
+
74
+ <!-- Auth → User DB (straight down) -->
75
+ <mxCell id="35" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="8">
76
+ <mxGeometry relative="1" as="geometry" />
77
+ </mxCell>
78
+
79
+ <!-- Product Svc → Product DB -->
80
+ <mxCell id="36" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="9">
81
+ <mxGeometry relative="1" as="geometry" />
82
+ </mxCell>
83
+
84
+ <!-- Product Svc → Redis Cache -->
85
+ <mxCell id="37" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="10">
86
+ <mxGeometry relative="1" as="geometry" />
87
+ </mxCell>
88
+
89
+ <!-- Order Svc → Order DB (straight down) -->
90
+ <mxCell id="38" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="11">
91
+ <mxGeometry relative="1" as="geometry" />
92
+ </mxCell>
93
+
94
+ <!-- CROSS: Order Svc → Product Svc (same tier, horizontal) -->
95
+ <mxCell id="39" value="check stock" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="7" target="6">
96
+ <mxGeometry relative="1" as="geometry" />
97
+ </mxCell>
98
+
99
+ <!-- CROSS: Auth → Redis (diagonal, waypoint through corridor) -->
100
+ <mxCell id="40" value="session" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="10">
101
+ <mxGeometry relative="1" as="geometry">
102
+ <Array as="points">
103
+ <mxPoint x="173" y="590" />
104
+ <mxPoint x="550" y="590" />
105
+ </Array>
106
+ </mxGeometry>
107
+ </mxCell>
108
+
109
+ </root>
110
+ </mxGraphModel>
111
+ </diagram>
112
+ </mxfile>
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="draw.io" type="device">
3
+ <diagram name="CNN Architecture" id="cnn-arch">
4
+ <mxGraphModel dx="1200" dy="1400" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="800" pageHeight="1600" math="0" shadow="0">
5
+ <root>
6
+ <mxCell id="0" />
7
+ <mxCell id="1" parent="0" />
8
+
9
+ <!-- Input Image -->
10
+ <mxCell id="10" value="Input Image&#xa;(B, 3, 224, 224)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;" vertex="1" parent="1">
11
+ <mxGeometry x="320" y="40" width="160" height="60" as="geometry" />
12
+ </mxCell>
13
+
14
+ <!-- Conv2D + ReLU (1) -->
15
+ <mxCell id="20" value="Conv2D + ReLU&#xa;(B, 64, 112, 112)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;" vertex="1" parent="1">
16
+ <mxGeometry x="320" y="190" width="160" height="60" as="geometry" />
17
+ </mxCell>
18
+
19
+ <!-- MaxPool (1) -->
20
+ <mxCell id="30" value="MaxPool 2x2&#xa;(B, 64, 56, 56)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
21
+ <mxGeometry x="320" y="340" width="160" height="60" as="geometry" />
22
+ </mxCell>
23
+
24
+ <!-- Conv2D + ReLU (2) -->
25
+ <mxCell id="40" value="Conv2D + ReLU&#xa;(B, 128, 56, 56)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;" vertex="1" parent="1">
26
+ <mxGeometry x="320" y="490" width="160" height="60" as="geometry" />
27
+ </mxCell>
28
+
29
+ <!-- MaxPool (2) -->
30
+ <mxCell id="50" value="MaxPool 2x2&#xa;(B, 128, 28, 28)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
31
+ <mxGeometry x="320" y="640" width="160" height="60" as="geometry" />
32
+ </mxCell>
33
+
34
+ <!-- Flatten -->
35
+ <mxCell id="60" value="Flatten&#xa;(B, 100352)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
36
+ <mxGeometry x="320" y="790" width="160" height="60" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- FC (512) -->
40
+ <mxCell id="70" value="FC + ReLU&#xa;(B, 512)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;" vertex="1" parent="1">
41
+ <mxGeometry x="320" y="940" width="160" height="60" as="geometry" />
42
+ </mxCell>
43
+
44
+ <!-- FC (10) -->
45
+ <mxCell id="80" value="FC&#xa;(B, 10)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;" vertex="1" parent="1">
46
+ <mxGeometry x="320" y="1090" width="160" height="60" as="geometry" />
47
+ </mxCell>
48
+
49
+ <!-- Softmax Output -->
50
+ <mxCell id="90" value="Softmax Output&#xa;(B, 10)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;" vertex="1" parent="1">
51
+ <mxGeometry x="320" y="1240" width="160" height="60" as="geometry" />
52
+ </mxCell>
53
+
54
+ <!-- Arrows -->
55
+ <mxCell id="101" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="10" target="20">
56
+ <mxGeometry relative="1" as="geometry" />
57
+ </mxCell>
58
+
59
+ <mxCell id="102" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="20" target="30">
60
+ <mxGeometry relative="1" as="geometry" />
61
+ </mxCell>
62
+
63
+ <mxCell id="103" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="30" target="40">
64
+ <mxGeometry relative="1" as="geometry" />
65
+ </mxCell>
66
+
67
+ <mxCell id="104" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="40" target="50">
68
+ <mxGeometry relative="1" as="geometry" />
69
+ </mxCell>
70
+
71
+ <mxCell id="105" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="50" target="60">
72
+ <mxGeometry relative="1" as="geometry" />
73
+ </mxCell>
74
+
75
+ <mxCell id="106" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="60" target="70">
76
+ <mxGeometry relative="1" as="geometry" />
77
+ </mxCell>
78
+
79
+ <mxCell id="107" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="70" target="80">
80
+ <mxGeometry relative="1" as="geometry" />
81
+ </mxCell>
82
+
83
+ <mxCell id="108" style="endArrow=block;endFill=1;html=1;" edge="1" parent="1" source="80" target="90">
84
+ <mxGeometry relative="1" as="geometry" />
85
+ </mxCell>
86
+
87
+ </root>
88
+ </mxGraphModel>
89
+ </diagram>
90
+ </mxfile>
@@ -0,0 +1,68 @@
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
+ <!-- Ring top row -->
10
+ <mxCell id="2" value="规划" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;" vertex="1" parent="1">
11
+ <mxGeometry x="100" y="80" width="140" height="60" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="编码" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
14
+ <mxGeometry x="380" y="80" width="140" height="60" as="geometry" />
15
+ </mxCell>
16
+ <mxCell id="4" value="构建" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
17
+ <mxGeometry x="660" y="80" width="140" height="60" as="geometry" />
18
+ </mxCell>
19
+
20
+ <!-- Ring bottom row -->
21
+ <mxCell id="5" value="测试" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
22
+ <mxGeometry x="660" y="360" width="140" height="60" as="geometry" />
23
+ </mxCell>
24
+ <mxCell id="6" value="部署" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;" vertex="1" parent="1">
25
+ <mxGeometry x="380" y="360" width="140" height="60" as="geometry" />
26
+ </mxCell>
27
+ <mxCell id="7" value="监控" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
28
+ <mxGeometry x="100" y="360" width="140" height="60" as="geometry" />
29
+ </mxCell>
30
+
31
+ <!-- Spurs -->
32
+ <mxCell id="8" value="制品仓库" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
33
+ <mxGeometry x="910" y="190" width="120" height="80" as="geometry" />
34
+ </mxCell>
35
+ <mxCell id="9" value="告警 &amp; 仪表盘" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
36
+ <mxGeometry x="80" y="540" width="180" height="60" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- Ring edges -->
40
+ <mxCell id="20" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="2" target="3">
41
+ <mxGeometry relative="1" as="geometry" />
42
+ </mxCell>
43
+ <mxCell id="21" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="3" target="4">
44
+ <mxGeometry relative="1" as="geometry" />
45
+ </mxCell>
46
+ <mxCell id="22" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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">
47
+ <mxGeometry relative="1" as="geometry" />
48
+ </mxCell>
49
+ <mxCell id="23" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="5" target="6">
50
+ <mxGeometry relative="1" as="geometry" />
51
+ </mxCell>
52
+ <mxCell id="24" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="6" target="7">
53
+ <mxGeometry relative="1" as="geometry" />
54
+ </mxCell>
55
+ <mxCell id="25" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="7" target="2">
56
+ <mxGeometry relative="1" as="geometry" />
57
+ </mxCell>
58
+ <!-- Spur edges -->
59
+ <mxCell id="26" value="发布" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="8">
60
+ <mxGeometry relative="1" as="geometry" />
61
+ </mxCell>
62
+ <mxCell id="27" value="触发" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=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="9">
63
+ <mxGeometry relative="1" as="geometry" />
64
+ </mxCell>
65
+ </root>
66
+ </mxGraphModel>
67
+ </diagram>
68
+ </mxfile>
@@ -0,0 +1,86 @@
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
+ <!-- Ring top row (y=80): Plan → Code → Build -->
10
+ <mxCell id="2" value="Plan" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;" vertex="1" parent="1">
11
+ <mxGeometry x="100" y="80" width="140" height="60" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="Code" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
14
+ <mxGeometry x="380" y="80" width="140" height="60" as="geometry" />
15
+ </mxCell>
16
+ <mxCell id="4" value="Build" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
17
+ <mxGeometry x="660" y="80" width="140" height="60" as="geometry" />
18
+ </mxCell>
19
+
20
+ <!-- Ring bottom row (y=360): Monitor ← Deploy ← Test -->
21
+ <mxCell id="5" value="Test" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
22
+ <mxGeometry x="660" y="360" width="140" height="60" as="geometry" />
23
+ </mxCell>
24
+ <mxCell id="6" value="Deploy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;" vertex="1" parent="1">
25
+ <mxGeometry x="380" y="360" width="140" height="60" as="geometry" />
26
+ </mxCell>
27
+ <mxCell id="7" value="Monitor" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
28
+ <mxGeometry x="100" y="360" width="140" height="60" as="geometry" />
29
+ </mxCell>
30
+
31
+ <!-- Spurs -->
32
+ <mxCell id="8" value="Artifacts" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
33
+ <mxGeometry x="910" y="190" width="120" height="80" as="geometry" />
34
+ </mxCell>
35
+ <mxCell id="9" value="Alerts &amp; Dashboard" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
36
+ <mxGeometry x="80" y="540" width="180" height="60" as="geometry" />
37
+ </mxCell>
38
+
39
+ <!-- === RING EDGES (clockwise) === -->
40
+
41
+ <!-- Plan → Code (right) -->
42
+ <mxCell id="20" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="2" target="3">
43
+ <mxGeometry relative="1" as="geometry" />
44
+ </mxCell>
45
+
46
+ <!-- Code → Build (right) -->
47
+ <mxCell id="21" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="3" target="4">
48
+ <mxGeometry relative="1" as="geometry" />
49
+ </mxCell>
50
+
51
+ <!-- Build → Test (down) -->
52
+ <mxCell id="22" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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">
53
+ <mxGeometry relative="1" as="geometry" />
54
+ </mxCell>
55
+
56
+ <!-- Test → Deploy (left) -->
57
+ <mxCell id="23" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="5" target="6">
58
+ <mxGeometry relative="1" as="geometry" />
59
+ </mxCell>
60
+
61
+ <!-- Deploy → Monitor (left) -->
62
+ <mxCell id="24" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="6" target="7">
63
+ <mxGeometry relative="1" as="geometry" />
64
+ </mxCell>
65
+
66
+ <!-- Monitor → Plan (up) -->
67
+ <mxCell id="25" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;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="7" target="2">
68
+ <mxGeometry relative="1" as="geometry" />
69
+ </mxCell>
70
+
71
+ <!-- === SPUR EDGES === -->
72
+
73
+ <!-- Test → Artifacts (right-up) -->
74
+ <mxCell id="26" value="publish" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="8">
75
+ <mxGeometry relative="1" as="geometry" />
76
+ </mxCell>
77
+
78
+ <!-- Monitor → Alerts (down) -->
79
+ <mxCell id="27" value="trigger" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;dashed=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="9">
80
+ <mxGeometry relative="1" as="geometry" />
81
+ </mxCell>
82
+
83
+ </root>
84
+ </mxGraphModel>
85
+ </diagram>
86
+ </mxfile>