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,469 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>drawio-skill — From Text to Professional Diagrams</title>
7
+ <meta name="description" content="Claude Code skill for generating professional draw.io diagrams from natural language. 6 diagram presets, ML/DL support, self-check loop, animated connectors.">
8
+ <meta name="theme-color" content="#0d1117">
9
+ <link rel="canonical" href="https://agents365-ai.github.io/drawio-skill/">
10
+ <link rel="alternate" hreflang="zh" href="https://agents365-ai.github.io/drawio-skill/zh.html">
11
+ <link rel="alternate" hreflang="en" href="https://agents365-ai.github.io/drawio-skill/">
12
+ <meta property="og:title" content="drawio-skill — From Text to Professional Diagrams">
13
+ <meta property="og:description" content="Claude Code skill for generating professional draw.io diagrams from natural language. 6 diagram presets, ML/DL support, self-check loop.">
14
+ <meta property="og:type" content="website">
15
+ <meta property="og:url" content="https://agents365-ai.github.io/drawio-skill/">
16
+ <meta property="og:image" content="https://raw.githubusercontent.com/Agents365-ai/drawio-skill/main/assets/demo-star.png">
17
+ <meta name="twitter:card" content="summary_large_image">
18
+ <style>
19
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
20
+
21
+ /* Theme variables */
22
+ [data-theme="dark"] {
23
+ --bg: #0d1117; --bg-card: #161b22; --bg-code: #1c2128;
24
+ --border: #30363d; --text: #e6edf3; --text-muted: #8b949e;
25
+ --accent: #58a6ff; --accent-hover: #79c0ff;
26
+ --green: #3fb950; --red: #f85149;
27
+ }
28
+ [data-theme="light"] {
29
+ --bg: #ffffff; --bg-card: #f6f8fa; --bg-code: #f0f3f6;
30
+ --border: #d0d7de; --text: #1f2328; --text-muted: #656d76;
31
+ --accent: #0969da; --accent-hover: #0550ae;
32
+ --green: #1a7f37; --red: #cf222e;
33
+ }
34
+
35
+ body {
36
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
37
+ background: var(--bg); color: var(--text); line-height: 1.6; overflow-x: hidden;
38
+ transition: background 0.3s, color 0.3s;
39
+ }
40
+ a { color: var(--accent); text-decoration: none; }
41
+ a:hover { color: var(--accent-hover); text-decoration: underline; }
42
+
43
+ /* Nav */
44
+ nav {
45
+ position: sticky; top: 0; z-index: 100;
46
+ background: var(--bg); border-bottom: 1px solid var(--border);
47
+ padding: 12px 24px; display: flex; justify-content: space-between; align-items: center;
48
+ transition: background 0.3s;
49
+ }
50
+ nav .logo { font-weight: 700; font-size: 16px; color: var(--text); }
51
+ nav .logo span { color: var(--accent); }
52
+ nav .nav-right { display: flex; align-items: center; gap: 16px; }
53
+ .lang-switch {
54
+ font-size: 14px; font-weight: 500; color: var(--text-muted);
55
+ padding: 4px 12px; border: 1px solid var(--border); border-radius: 6px;
56
+ transition: all 0.2s;
57
+ }
58
+ .lang-switch:hover { color: var(--text); border-color: var(--text-muted); text-decoration: none; }
59
+ .theme-btn {
60
+ background: none; border: 1px solid var(--border); color: var(--text-muted);
61
+ border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: 16px;
62
+ transition: all 0.2s; line-height: 1;
63
+ }
64
+ .theme-btn:hover { color: var(--text); border-color: var(--text-muted); }
65
+
66
+ /* Layout */
67
+ .container { max-width: 1080px; margin: 0 auto; padding: 0 24px; }
68
+ section { padding: 72px 0; }
69
+ section + section { border-top: 1px solid var(--border); }
70
+
71
+ /* Hero */
72
+ .hero { text-align: center; padding: 96px 0 72px; border-bottom: 1px solid var(--border); }
73
+ .hero-badge {
74
+ display: inline-block; font-size: 13px; color: var(--accent);
75
+ border: 1px solid var(--accent); border-radius: 20px;
76
+ padding: 4px 14px; margin-bottom: 20px; letter-spacing: 0.5px;
77
+ }
78
+ .hero h1 { font-size: 48px; font-weight: 800; margin-bottom: 16px; letter-spacing: -1px; }
79
+ .hero h1 span { color: var(--accent); }
80
+ .hero p { font-size: 20px; color: var(--text-muted); max-width: 600px; margin: 0 auto 32px; }
81
+ .hero-install {
82
+ display: inline-flex; align-items: center; gap: 12px;
83
+ background: var(--bg-code); border: 1px solid var(--border); border-radius: 8px;
84
+ padding: 12px 20px; font-family: 'SF Mono', 'Fira Code', monospace; font-size: 15px;
85
+ margin-bottom: 24px;
86
+ }
87
+ .hero-install code { color: var(--green); }
88
+ .copy-btn {
89
+ background: none; border: 1px solid var(--border); color: var(--text-muted);
90
+ border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: 13px; transition: all 0.2s;
91
+ }
92
+ .copy-btn:hover { color: var(--text); border-color: var(--text-muted); }
93
+ .hero-links { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }
94
+ .btn {
95
+ display: inline-flex; align-items: center; gap: 8px; padding: 10px 24px;
96
+ border-radius: 8px; font-size: 15px; font-weight: 600; transition: all 0.2s;
97
+ }
98
+ .btn-primary { background: var(--accent); color: #fff; }
99
+ [data-theme="light"] .btn-primary { color: #fff; }
100
+ .btn-primary:hover { background: var(--accent-hover); text-decoration: none; }
101
+ .btn-outline { border: 1px solid var(--border); color: var(--text); }
102
+ .btn-outline:hover { border-color: var(--text-muted); text-decoration: none; }
103
+
104
+ /* Section headers */
105
+ .section-title { font-size: 32px; font-weight: 700; margin-bottom: 8px; text-align: center; }
106
+ .section-sub { color: var(--text-muted); font-size: 17px; text-align: center; margin-bottom: 48px; }
107
+
108
+ /* Feature cards */
109
+ .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
110
+ .feature-card {
111
+ background: var(--bg-card); border: 1px solid var(--border);
112
+ border-radius: 12px; padding: 28px; transition: background 0.3s;
113
+ }
114
+ .feature-icon { font-size: 28px; margin-bottom: 12px; }
115
+ .feature-card h3 { font-size: 18px; margin-bottom: 8px; }
116
+ .feature-card p { color: var(--text-muted); font-size: 14px; }
117
+
118
+ /* Demo gallery */
119
+ .demos { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; }
120
+ .demo-item { text-align: center; }
121
+ .demo-item img { width: 100%; border-radius: 10px; border: 1px solid var(--border); margin-bottom: 12px; }
122
+ .demo-item h4 { font-size: 16px; margin-bottom: 4px; }
123
+ .demo-item p { color: var(--text-muted); font-size: 13px; }
124
+
125
+ /* Comparison table */
126
+ .compare-table { width: 100%; border-collapse: collapse; font-size: 15px; }
127
+ .compare-table th, .compare-table td { padding: 12px 16px; text-align: left; border-bottom: 1px solid var(--border); }
128
+ .compare-table th { color: var(--text-muted); font-weight: 600; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px; }
129
+ .compare-table tr:hover { background: var(--bg-card); }
130
+ .check { color: var(--green); font-weight: 700; }
131
+ .cross { color: var(--red); }
132
+
133
+ /* Install tabs */
134
+ .tabs { display: flex; gap: 0; margin-bottom: 0; flex-wrap: wrap; }
135
+ .tab {
136
+ padding: 10px 20px; background: var(--bg-card); border: 1px solid var(--border);
137
+ border-bottom: none; color: var(--text-muted); cursor: pointer;
138
+ font-size: 14px; font-weight: 500; transition: all 0.2s;
139
+ }
140
+ .tab:first-child { border-radius: 8px 0 0 0; }
141
+ .tab:last-child { border-radius: 0 8px 0 0; }
142
+ button.tab { font-family: inherit; }
143
+ .tab.active { background: var(--bg-code); color: var(--text); border-bottom-color: var(--bg-code); }
144
+ .tab-content {
145
+ display: none; background: var(--bg-code); border: 1px solid var(--border);
146
+ border-radius: 0 8px 8px 8px; padding: 20px;
147
+ }
148
+ .tab-content.active { display: block; }
149
+ .tab-content pre {
150
+ font-family: 'SF Mono', 'Fira Code', monospace; font-size: 14px;
151
+ line-height: 1.5; white-space: pre-wrap; color: var(--green);
152
+ }
153
+
154
+ /* Support */
155
+ .support-grid {
156
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
157
+ gap: 20px; max-width: 820px; margin: 0 auto 40px;
158
+ }
159
+ .support-card {
160
+ background: var(--bg-card); border: 1px solid var(--border);
161
+ border-radius: 12px; padding: 20px;
162
+ display: flex; flex-direction: column; align-items: center; text-align: center;
163
+ transition: background 0.3s;
164
+ }
165
+ .support-card img {
166
+ width: 160px; height: 160px; object-fit: contain;
167
+ border-radius: 8px; margin-bottom: 12px; background: #fff;
168
+ }
169
+ .support-card b { font-size: 14px; color: var(--text); }
170
+ .author-block {
171
+ text-align: center; padding-top: 32px; margin-top: 16px;
172
+ border-top: 1px solid var(--border);
173
+ }
174
+ .author-block h3 { font-size: 18px; margin-bottom: 8px; font-weight: 700; }
175
+ .author-block p { color: var(--text-muted); margin-bottom: 12px; }
176
+ .author-links { display: inline-flex; gap: 24px; font-size: 14px; }
177
+
178
+ /* Footer */
179
+ footer {
180
+ border-top: 1px solid var(--border); padding: 32px 0;
181
+ text-align: center; color: var(--text-muted); font-size: 14px;
182
+ }
183
+ footer a { color: var(--text-muted); }
184
+ footer a:hover { color: var(--text); }
185
+
186
+ /* Responsive */
187
+ @media (max-width: 640px) {
188
+ .hero h1 { font-size: 32px; }
189
+ .hero p { font-size: 17px; }
190
+ section { padding: 48px 0; }
191
+ .features-grid { grid-template-columns: 1fr; }
192
+ .hero-install { flex-direction: column; font-size: 13px; }
193
+ }
194
+ .skip-link {
195
+ position: absolute; top: -40px; left: 0; background: var(--accent); color: #fff;
196
+ padding: 8px 16px; z-index: 200; font-size: 14px; transition: top 0.2s;
197
+ }
198
+ .skip-link:focus { top: 0; }
199
+ .table-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; }
200
+ </style>
201
+ </head>
202
+ <body>
203
+ <a href="#main-content" class="skip-link">Skip to main content</a>
204
+
205
+ <nav role="navigation" aria-label="Main">
206
+ <div class="logo">drawio-<span>skill</span></div>
207
+ <div class="nav-right">
208
+ <a href="zh.html" class="lang-switch">中文</a>
209
+ <button class="theme-btn" onclick="toggleTheme()" title="Toggle theme" aria-label="Toggle dark/light theme">&#x1F319;</button>
210
+ </div>
211
+ </nav>
212
+
213
+ <main id="main-content">
214
+ <!-- Hero -->
215
+ <div class="hero">
216
+ <div class="container">
217
+ <div class="hero-badge">v1.4.0 &mdash; Custom Output Directory</div>
218
+ <h1>drawio-<span>skill</span></h1>
219
+ <p>From text to professional diagrams. Generate draw.io files from natural language with self-check, iterative refinement, and ML model support.</p>
220
+ <div class="hero-install">
221
+ <code id="install-cmd">git clone https://github.com/Agents365-ai/drawio-skill.git ~/.claude/skills/drawio-skill</code>
222
+ <button class="copy-btn" onclick="copyInstall()">Copy</button>
223
+ </div>
224
+ <div class="hero-links">
225
+ <a href="https://github.com/Agents365-ai/drawio-skill" class="btn btn-primary">GitHub</a>
226
+ <a href="https://clawhub.ai/agents365-ai/drawio-pro-skill" class="btn btn-outline">ClawHub</a>
227
+ <a href="https://skillsmp.com/skills/agents365-ai-drawio-skill-skill-md" class="btn btn-outline">SkillsMP</a>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <!-- Features -->
233
+ <section>
234
+ <div class="container">
235
+ <h2 class="section-title">Why This Skill</h2>
236
+ <p class="section-sub">The only pure-SKILL.md solution that reads its own output and auto-fixes before showing you.</p>
237
+ <div class="features-grid">
238
+ <div class="feature-card">
239
+ <div class="feature-icon">&#x1F4CB;</div>
240
+ <h3>6 Diagram Presets</h3>
241
+ <p>ERD, UML Class, Sequence, Architecture, ML/Deep Learning, Flowchart &mdash; each with preset shapes, styles, and layout conventions.</p>
242
+ </div>
243
+ <div class="feature-card">
244
+ <div class="feature-icon">&#x1F9E0;</div>
245
+ <h3>ML / Deep Learning</h3>
246
+ <p>Transformer, CNN, LSTM architectures with tensor shape annotations (B, C, H, W). Built for NeurIPS, ICML, ICLR papers.</p>
247
+ </div>
248
+ <div class="feature-card">
249
+ <div class="feature-icon">&#x1F50D;</div>
250
+ <h3>Self-Check Loop</h3>
251
+ <p>Reads the exported PNG, detects 6 issue types (overlaps, clipped labels, stacked edges), and auto-fixes before showing you.</p>
252
+ </div>
253
+ <div class="feature-card">
254
+ <div class="feature-icon">&#x2728;</div>
255
+ <h3>Animated Connectors</h3>
256
+ <p>Add <code>flowAnimation=1</code> for moving dot animations along arrows. Ideal for data-flow and pipeline diagrams in SVG.</p>
257
+ </div>
258
+ <div class="feature-card">
259
+ <div class="feature-icon">&#x1F3A8;</div>
260
+ <h3>Style Presets</h3>
261
+ <p>Teach the skill your visual style from a <code>.drawio</code> file or image. Save by name and apply to future diagrams. 3 built-ins included: <code>default</code>, <code>corporate</code>, <code>handdrawn</code>.</p>
262
+ </div>
263
+ <div class="feature-card">
264
+ <div class="feature-icon">&#x1F310;</div>
265
+ <h3>6 Platforms, Zero Config</h3>
266
+ <p>Claude Code, Opencode, OpenClaw, Hermes, Codex, SkillsMP &mdash; just one SKILL.md file + draw.io desktop. No MCP, no Node.js.</p>
267
+ </div>
268
+ <div class="feature-card">
269
+ <div class="feature-icon">&#x1F4BB;</div>
270
+ <h3>Browser Fallback</h3>
271
+ <p>No desktop CLI? Generates a diagrams.net URL that opens your diagram in the browser for viewing and editing.</p>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ </section>
276
+
277
+ <!-- Demo Gallery -->
278
+ <section>
279
+ <div class="container">
280
+ <h2 class="section-title">Demo Gallery</h2>
281
+ <p class="section-sub">Clean edge routing across different topologies &mdash; no lines crossing through shapes.</p>
282
+ <div class="demos">
283
+ <div class="demo-item">
284
+ <img src="https://raw.githubusercontent.com/Agents365-ai/drawio-skill/main/assets/demo-star.png" alt="Star topology diagram">
285
+ <h4>Star Topology</h4>
286
+ <p>7 nodes &mdash; central broker, 6 services radiating outward</p>
287
+ </div>
288
+ <div class="demo-item">
289
+ <img src="https://raw.githubusercontent.com/Agents365-ai/drawio-skill/main/assets/demo-layered.png" alt="Layered flow diagram">
290
+ <h4>Layered Flow</h4>
291
+ <p>10 nodes, 4 tiers &mdash; with cross-connections routed cleanly</p>
292
+ </div>
293
+ <div class="demo-item">
294
+ <img src="https://raw.githubusercontent.com/Agents365-ai/drawio-skill/main/assets/demo-ring.png" alt="Ring cycle diagram">
295
+ <h4>Ring / Cycle</h4>
296
+ <p>8 nodes &mdash; CI/CD pipeline with closed loop and spur branches</p>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ </section>
301
+
302
+ <!-- Comparison -->
303
+ <section>
304
+ <div class="container">
305
+ <h2 class="section-title">vs Native Agent</h2>
306
+ <p class="section-sub">What you get with the skill vs prompting an LLM directly.</p>
307
+ <div class="table-wrapper">
308
+ <table class="compare-table">
309
+ <thead>
310
+ <tr><th>Feature</th><th>Native Agent</th><th>This Skill</th></tr>
311
+ </thead>
312
+ <tbody>
313
+ <tr><td>Self-check after export</td><td class="cross">&#x2717;</td><td class="check">&#x2713; 2-round auto-fix</td></tr>
314
+ <tr><td>Iterative review loop</td><td class="cross">&#x2717;</td><td class="check">&#x2713; 5-round with targeted edits</td></tr>
315
+ <tr><td>Diagram type presets</td><td class="cross">&#x2717;</td><td class="check">&#x2713; 6 presets (ERD, UML, Seq, Arch, ML, Flow)</td></tr>
316
+ <tr><td>ML model diagrams</td><td class="cross">&#x2717;</td><td class="check">&#x2713; Tensor shapes, layer colors</td></tr>
317
+ <tr><td>Animated connectors</td><td class="cross">&#x2717;</td><td class="check">&#x2713; flowAnimation=1</td></tr>
318
+ <tr><td>Grid-aligned layout</td><td class="cross">&#x2717;</td><td class="check">&#x2713; 10px snap</td></tr>
319
+ <tr><td>Complexity-scaled spacing</td><td class="cross">&#x2717;</td><td class="check">&#x2713; 200&ndash;350px by node count</td></tr>
320
+ <tr><td>Color palette</td><td class="cross">Random</td><td class="check">&#x2713; 7-color semantic system</td></tr>
321
+ <tr><td>Edge routing rules</td><td class="cross">Basic</td><td class="check">&#x2713; Corridors + waypoints + distribution</td></tr>
322
+ <tr><td>Container/group nesting</td><td class="cross">&#x2717;</td><td class="check">&#x2713; Swimlane + group + custom</td></tr>
323
+ <tr><td>Embed diagram in export</td><td class="cross">&#x2717;</td><td class="check">&#x2713; --embed-diagram</td></tr>
324
+ <tr><td>Browser fallback</td><td class="cross">&#x2717;</td><td class="check">&#x2713; diagrams.net URL</td></tr>
325
+ <tr><td>Auto-launch desktop app</td><td class="cross">&#x2717;</td><td class="check">&#x2713; Opens .drawio for fine-tuning</td></tr>
326
+ <tr><td>Style presets</td><td class="cross">&#x2717;</td><td class="check">&#x2713; Learn, save &amp; apply named styles</td></tr>
327
+ </tbody>
328
+ </table>
329
+ </div>
330
+ </div>
331
+ </section>
332
+
333
+ <!-- Install -->
334
+ <section>
335
+ <div class="container">
336
+ <h2 class="section-title">Install</h2>
337
+ <p class="section-sub">Pick your platform. Takes 10 seconds.</p>
338
+ <div class="tabs" role="tablist" aria-label="Installation platforms">
339
+ <button class="tab active" role="tab" aria-selected="true" aria-controls="tab-claude" onclick="switchTab(event, 'tab-claude')">Claude Code</button>
340
+ <button class="tab" role="tab" aria-selected="false" aria-controls="tab-opencode" onclick="switchTab(event, 'tab-opencode')">Opencode</button>
341
+ <button class="tab" role="tab" aria-selected="false" aria-controls="tab-openclaw" onclick="switchTab(event, 'tab-openclaw')">OpenClaw</button>
342
+ <button class="tab" role="tab" aria-selected="false" aria-controls="tab-skillsmp" onclick="switchTab(event, 'tab-skillsmp')">SkillsMP</button>
343
+ <button class="tab" role="tab" aria-selected="false" aria-controls="tab-clawhub" onclick="switchTab(event, 'tab-clawhub')">ClawHub</button>
344
+ <button class="tab" role="tab" aria-selected="false" aria-controls="tab-codex" onclick="switchTab(event, 'tab-codex')">Codex</button>
345
+ </div>
346
+ <div id="tab-claude" class="tab-content active" role="tabpanel">
347
+ <pre># Global install (available in all projects)
348
+ git clone https://github.com/Agents365-ai/drawio-skill.git ~/.claude/skills/drawio-skill
349
+
350
+ # Project-level install
351
+ git clone https://github.com/Agents365-ai/drawio-skill.git .claude/skills/drawio-skill</pre>
352
+ </div>
353
+ <div id="tab-opencode" class="tab-content" role="tabpanel">
354
+ <pre># Global install (Opencode-native path)
355
+ git clone https://github.com/Agents365-ai/drawio-skill.git ~/.config/opencode/skills/drawio-skill
356
+
357
+ # Project-level install
358
+ git clone https://github.com/Agents365-ai/drawio-skill.git .opencode/skills/drawio-skill
359
+
360
+ # Also auto-detected from existing Claude Code install
361
+ # (~/.claude/skills/ and .claude/skills/ are read automatically)</pre>
362
+ </div>
363
+ <div id="tab-openclaw" class="tab-content" role="tabpanel">
364
+ <pre># Via ClawHub registry
365
+ clawhub install drawio-pro-skill
366
+
367
+ # Manual install
368
+ git clone https://github.com/Agents365-ai/drawio-skill.git ~/.openclaw/skills/drawio-skill</pre>
369
+ </div>
370
+ <div id="tab-skillsmp" class="tab-content" role="tabpanel">
371
+ <pre># Via SkillsMP CLI
372
+ skills install drawio-skill</pre>
373
+ </div>
374
+ <div id="tab-clawhub" class="tab-content" role="tabpanel">
375
+ <pre># Via ClawHub CLI
376
+ clawhub install drawio-pro-skill</pre>
377
+ </div>
378
+ <div id="tab-codex" class="tab-content" role="tabpanel">
379
+ <pre># User-level install
380
+ git clone https://github.com/Agents365-ai/drawio-skill.git ~/.agents/skills/drawio-skill
381
+
382
+ # Project-level install
383
+ git clone https://github.com/Agents365-ai/drawio-skill.git .agents/skills/drawio-skill</pre>
384
+ </div>
385
+ </div>
386
+ </section>
387
+
388
+ <!-- Support & Author -->
389
+ <section id="support">
390
+ <div class="container">
391
+ <h2 class="section-title">Support</h2>
392
+ <p class="section-sub">If this skill helps you, consider supporting the author.</p>
393
+ <div class="support-grid">
394
+ <div class="support-card">
395
+ <img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/wechat-pay.png" alt="WeChat Pay" loading="lazy">
396
+ <b>WeChat Pay</b>
397
+ </div>
398
+ <div class="support-card">
399
+ <img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/alipay.png" alt="Alipay" loading="lazy">
400
+ <b>Alipay</b>
401
+ </div>
402
+ <div class="support-card">
403
+ <img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/buymeacoffee.png" alt="Buy Me a Coffee" loading="lazy">
404
+ <b>Buy Me a Coffee</b>
405
+ </div>
406
+ <div class="support-card">
407
+ <img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/awarding/award.gif" alt="Give a Reward" loading="lazy">
408
+ <b>Give a Reward</b>
409
+ </div>
410
+ </div>
411
+ <div class="author-block">
412
+ <h3>Author</h3>
413
+ <p><strong>Agents365-ai</strong></p>
414
+ <div class="author-links">
415
+ <a href="https://github.com/Agents365-ai">GitHub</a>
416
+ <a href="https://space.bilibili.com/441831884">Bilibili</a>
417
+ </div>
418
+ </div>
419
+ </div>
420
+ </section>
421
+
422
+ </main>
423
+
424
+ <!-- Footer -->
425
+ <footer>
426
+ <div class="container">
427
+ <p>
428
+ MIT License &middot;
429
+ <a href="https://github.com/Agents365-ai/drawio-skill">GitHub</a> &middot;
430
+ <a href="https://github.com/Agents365-ai">Agents365-ai</a>
431
+ </p>
432
+ </div>
433
+ </footer>
434
+
435
+ <script>
436
+ function copyInstall() {
437
+ const cmd = document.getElementById('install-cmd').textContent;
438
+ navigator.clipboard.writeText(cmd).then(() => {
439
+ const btn = document.querySelector('.copy-btn');
440
+ btn.textContent = 'Copied!';
441
+ setTimeout(() => btn.textContent = 'Copy', 2000);
442
+ });
443
+ }
444
+ function switchTab(e, id) {
445
+ document.querySelectorAll('.tab').forEach(t => { t.classList.remove('active'); t.setAttribute('aria-selected', 'false'); });
446
+ document.querySelectorAll('.tab-content').forEach(t => t.classList.remove('active'));
447
+ e.target.classList.add('active');
448
+ e.target.setAttribute('aria-selected', 'true');
449
+ document.getElementById(id).classList.add('active');
450
+ }
451
+ function toggleTheme() {
452
+ const html = document.documentElement;
453
+ const current = html.getAttribute('data-theme');
454
+ const next = current === 'dark' ? 'light' : 'dark';
455
+ html.setAttribute('data-theme', next);
456
+ localStorage.setItem('theme', next);
457
+ document.querySelector('.theme-btn').innerHTML = next === 'dark' ? '&#x1F319;' : '&#x2600;&#xFE0F;';
458
+ }
459
+ // Restore saved theme
460
+ (function() {
461
+ const saved = localStorage.getItem('theme');
462
+ if (saved) {
463
+ document.documentElement.setAttribute('data-theme', saved);
464
+ document.querySelector('.theme-btn').innerHTML = saved === 'dark' ? '&#x1F319;' : '&#x2600;&#xFE0F;';
465
+ }
466
+ })();
467
+ </script>
468
+ </body>
469
+ </html>