@haposoft/cafekit 0.7.23 → 0.7.24
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.
- package/README.md +81 -862
- package/bin/install.js +4 -3
- package/package.json +2 -3
- package/src/claude/agents/code-auditor.md +25 -1
- package/src/claude/agents/spec-maker.md +17 -2
- package/src/claude/agents/test-runner.md +22 -3
- package/src/claude/hooks/spec-state.cjs +4 -4
- package/src/claude/migration-manifest.json +1 -1
- package/src/claude/rules/state-sync.md +7 -5
- package/src/claude/skills/code-review/references/spec-compliance-review.md +8 -1
- package/src/claude/skills/develop/SKILL.md +25 -4
- package/src/claude/skills/develop/references/quality-gate.md +23 -13
- package/src/claude/skills/generate-graph/LICENSE +21 -0
- package/src/claude/skills/generate-graph/README.md +523 -0
- package/src/claude/skills/generate-graph/SKILL.md +427 -0
- package/src/claude/skills/generate-graph/agentloop-core.svg +101 -0
- package/src/claude/skills/generate-graph/agents/openai.yaml +4 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style1-flat.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style2-dark.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style3-blueprint.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style4-notion.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style5-glass.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style6-claude.png +0 -0
- package/src/claude/skills/generate-graph/assets/samples/sample-style7-openai.png +0 -0
- package/src/claude/skills/generate-graph/fixtures/agent-memory-types-style4.json +181 -0
- package/src/claude/skills/generate-graph/fixtures/api-flow-style7.json +40 -0
- package/src/claude/skills/generate-graph/fixtures/mem0-style1.json +297 -0
- package/src/claude/skills/generate-graph/fixtures/microservices-style3.json +64 -0
- package/src/claude/skills/generate-graph/fixtures/multi-agent-style5.json +45 -0
- package/src/claude/skills/generate-graph/fixtures/system-architecture-style6.json +48 -0
- package/src/claude/skills/generate-graph/fixtures/tool-call-style2.json +182 -0
- package/src/claude/skills/generate-graph/package.json +42 -0
- package/src/claude/skills/generate-graph/references/icons.md +281 -0
- package/src/claude/skills/generate-graph/references/style-1-flat-icon.md +108 -0
- package/src/claude/skills/generate-graph/references/style-2-dark-terminal.md +107 -0
- package/src/claude/skills/generate-graph/references/style-3-blueprint.md +113 -0
- package/src/claude/skills/generate-graph/references/style-4-notion-clean.md +94 -0
- package/src/claude/skills/generate-graph/references/style-5-glassmorphism.md +125 -0
- package/src/claude/skills/generate-graph/references/style-6-claude-official.md +209 -0
- package/src/claude/skills/generate-graph/references/style-7-openai.md +215 -0
- package/src/claude/skills/generate-graph/references/style-diagram-matrix.md +135 -0
- package/src/claude/skills/generate-graph/references/svg-layout-best-practices.md +100 -0
- package/src/claude/skills/generate-graph/scripts/generate-diagram.sh +157 -0
- package/src/claude/skills/generate-graph/scripts/generate-from-template.py +1556 -0
- package/src/claude/skills/generate-graph/scripts/test-all-styles.sh +135 -0
- package/src/claude/skills/generate-graph/scripts/validate-svg.sh +292 -0
- package/src/claude/skills/generate-graph/templates/agent-architecture.svg +28 -0
- package/src/claude/skills/generate-graph/templates/architecture.svg +23 -0
- package/src/claude/skills/generate-graph/templates/comparison-matrix.svg +14 -0
- package/src/claude/skills/generate-graph/templates/data-flow.svg +28 -0
- package/src/claude/skills/generate-graph/templates/er-diagram.svg +21 -0
- package/src/claude/skills/generate-graph/templates/flowchart.svg +21 -0
- package/src/claude/skills/generate-graph/templates/sequence.svg +20 -0
- package/src/claude/skills/generate-graph/templates/state-machine.svg +20 -0
- package/src/claude/skills/generate-graph/templates/timeline.svg +19 -0
- package/src/claude/skills/generate-graph/templates/use-case.svg +21 -0
- package/src/claude/skills/specs/SKILL.md +35 -5
- package/src/claude/skills/specs/references/review.md +1 -1
- package/src/claude/skills/specs/rules/tasks-generation.md +17 -0
- package/src/claude/skills/specs/templates/design.md +13 -0
- package/src/claude/skills/specs/templates/init.json +4 -1
- package/src/claude/skills/specs/templates/requirements.md +21 -8
- package/src/claude/skills/specs/templates/task.md +16 -3
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"template_type": "architecture",
|
|
3
|
+
"style": 6,
|
|
4
|
+
"width": 1120,
|
|
5
|
+
"height": 700,
|
|
6
|
+
"style_overrides": {
|
|
7
|
+
"title_align": "center"
|
|
8
|
+
},
|
|
9
|
+
"title": "System Architecture",
|
|
10
|
+
"subtitle": "Claude official style with warm structure, restrained hierarchy, and deployment clarity",
|
|
11
|
+
"containers": [
|
|
12
|
+
{ "x": 44, "y": 118, "width": 1032, "height": 110, "label": "", "side_label": "Interface Layer", "side_label_x": 28, "side_label_anchor": "start", "subtitle": "", "stroke": "#ded8cf", "fill": "none" },
|
|
13
|
+
{ "x": 44, "y": 262, "width": 1032, "height": 154, "label": "", "side_label": "Core Layer", "side_label_x": 28, "side_label_anchor": "start", "subtitle": "", "stroke": "#ded8cf", "fill": "none" },
|
|
14
|
+
{ "x": 44, "y": 450, "width": 1032, "height": 178, "label": "", "side_label": "Foundation Layer", "side_label_x": 28, "side_label_anchor": "start", "subtitle": "", "stroke": "#ded8cf", "fill": "none" }
|
|
15
|
+
],
|
|
16
|
+
"nodes": [
|
|
17
|
+
{ "id": "entry", "kind": "rect", "x": 82, "y": 146, "width": 170, "height": 54, "label": "Client Surface", "type_label": "ENTRY", "fill": "#e9f1fb", "stroke": "#8c6f5a", "flat": true },
|
|
18
|
+
{ "id": "gateway", "kind": "double_rect", "x": 340, "y": 142, "width": 196, "height": 62, "label": "Gateway", "type_label": "ROUTER", "fill": "#f7ecda", "stroke": "#d97757" },
|
|
19
|
+
{ "id": "planner", "kind": "rect", "x": 144, "y": 306, "width": 188, "height": 60, "label": "Task Planner", "type_label": "ORCHESTRATION", "fill": "#f7ecda", "stroke": "#d0b893", "flat": true },
|
|
20
|
+
{ "id": "runtime", "kind": "double_rect", "x": 430, "y": 298, "width": 244, "height": 76, "label": "Model Runtime", "type_label": "INFERENCE", "fill": "#c8e4db", "stroke": "#8c6f5a" },
|
|
21
|
+
{ "id": "guard", "kind": "rect", "x": 782, "y": 306, "width": 200, "height": 60, "label": "Policy Guardrails", "type_label": "SAFETY", "fill": "#efe8de", "stroke": "#d0c3b3", "flat": true },
|
|
22
|
+
{ "id": "memory", "kind": "cylinder", "x": 96, "y": 494, "width": 154, "height": 92, "label": "Memory Store", "sublabel": "context + recall", "fill": "#e5e8df", "stroke": "#7b8b5c" },
|
|
23
|
+
{ "id": "tools", "kind": "rect", "x": 382, "y": 510, "width": 184, "height": 60, "label": "Tool Runtime", "type_label": "ACTION", "fill": "#f7ecda", "stroke": "#d0b893", "flat": true },
|
|
24
|
+
{ "id": "obs", "kind": "rect", "x": 688, "y": 510, "width": 184, "height": 60, "label": "Observability", "type_label": "OPS", "fill": "#efe8de", "stroke": "#d0c3b3", "flat": true },
|
|
25
|
+
{ "id": "registry", "kind": "rect", "x": 906, "y": 510, "width": 138, "height": 60, "label": "Registry", "type_label": "ROLL OUT", "fill": "#efe8de", "stroke": "#d0c3b3", "flat": true }
|
|
26
|
+
],
|
|
27
|
+
"arrows": [
|
|
28
|
+
{ "source": "entry", "target": "gateway", "source_port": "right", "target_port": "left", "flow": "read" },
|
|
29
|
+
{ "source": "gateway", "target": "planner", "source_port": "bottom", "target_port": "top", "flow": "control", "label": "decompose", "route_points": [[370,224], [370,336], [332,336]] },
|
|
30
|
+
{ "source": "gateway", "target": "runtime", "source_port": "bottom", "target_port": "top", "flow": "read", "route_points": [[438,224], [552,224], [552,298]] },
|
|
31
|
+
{ "source": "runtime", "target": "guard", "source_port": "right", "target_port": "left", "flow": "data" },
|
|
32
|
+
{ "source": "runtime", "target": "memory", "source_port": "bottom", "target_port": "top", "flow": "write", "dashed": true, "route_points": [[606,432], [218,432], [218,494]] },
|
|
33
|
+
{ "source": "runtime", "target": "tools", "source_port": "bottom", "target_port": "top", "flow": "read" },
|
|
34
|
+
{ "source": "runtime", "target": "obs", "source_port": "bottom", "target_port": "top", "flow": "feedback", "dashed": true, "route_points": [[730,432], [780,432], [780,510]] },
|
|
35
|
+
{ "source": "obs", "target": "registry", "source_port": "right", "target_port": "left", "flow": "control" }
|
|
36
|
+
],
|
|
37
|
+
"legend": [
|
|
38
|
+
{ "flow": "read", "label": "Primary request path" },
|
|
39
|
+
{ "flow": "control", "label": "Planning / rollout control" },
|
|
40
|
+
{ "flow": "write", "label": "Memory writeback" },
|
|
41
|
+
{ "flow": "feedback", "label": "Operational telemetry" }
|
|
42
|
+
],
|
|
43
|
+
"legend_position": "bottom-right",
|
|
44
|
+
"legend_box": true,
|
|
45
|
+
"legend_box_fill": "#fffaf3",
|
|
46
|
+
"legend_y": 596,
|
|
47
|
+
"footer": ""
|
|
48
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
{
|
|
2
|
+
"template_type": "agent",
|
|
3
|
+
"style": 2,
|
|
4
|
+
"width": 1200,
|
|
5
|
+
"height": 700,
|
|
6
|
+
"window_controls": true,
|
|
7
|
+
"meta_center": "AGENT TOOL CALL EXECUTION FLOW · v1.0",
|
|
8
|
+
"meta_right": "style-2-dark-terminal",
|
|
9
|
+
"meta_fill": "#64748b",
|
|
10
|
+
"title": "Tool Call Flow",
|
|
11
|
+
"subtitle": "Dark terminal style with semantic action, retrieval, and execution paths",
|
|
12
|
+
"containers": [
|
|
13
|
+
{
|
|
14
|
+
"x": 36,
|
|
15
|
+
"y": 96,
|
|
16
|
+
"width": 1128,
|
|
17
|
+
"height": 142,
|
|
18
|
+
"label": "REQUEST PATH",
|
|
19
|
+
"subtitle": "",
|
|
20
|
+
"stroke": "#334155",
|
|
21
|
+
"fill": "rgba(15,23,42,0.18)"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"x": 36,
|
|
25
|
+
"y": 280,
|
|
26
|
+
"width": 1128,
|
|
27
|
+
"height": 202,
|
|
28
|
+
"label": "TOOLING FABRIC",
|
|
29
|
+
"subtitle": "",
|
|
30
|
+
"stroke": "#334155",
|
|
31
|
+
"fill": "rgba(15,23,42,0.18)"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"x": 36,
|
|
35
|
+
"y": 522,
|
|
36
|
+
"width": 1128,
|
|
37
|
+
"height": 126,
|
|
38
|
+
"label": "KNOWLEDGE + RESPONSE",
|
|
39
|
+
"subtitle": "",
|
|
40
|
+
"stroke": "#334155",
|
|
41
|
+
"fill": "rgba(15,23,42,0.18)"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"nodes": [
|
|
45
|
+
{
|
|
46
|
+
"id": "query",
|
|
47
|
+
"kind": "speech",
|
|
48
|
+
"x": 64,
|
|
49
|
+
"y": 126,
|
|
50
|
+
"width": 132,
|
|
51
|
+
"height": 62,
|
|
52
|
+
"label": "User query",
|
|
53
|
+
"fill": "#0f172a",
|
|
54
|
+
"stroke": "#38bdf8",
|
|
55
|
+
"flat": true
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "planner",
|
|
59
|
+
"kind": "double_rect",
|
|
60
|
+
"x": 292,
|
|
61
|
+
"y": 122,
|
|
62
|
+
"width": 188,
|
|
63
|
+
"height": 66,
|
|
64
|
+
"label": "Retrieve chunks",
|
|
65
|
+
"fill": "#111827",
|
|
66
|
+
"stroke": "#a855f7",
|
|
67
|
+
"glow": "purple"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "answer",
|
|
71
|
+
"kind": "rect",
|
|
72
|
+
"x": 570,
|
|
73
|
+
"y": 122,
|
|
74
|
+
"width": 208,
|
|
75
|
+
"height": 66,
|
|
76
|
+
"label": "Generate answer",
|
|
77
|
+
"fill": "#111827",
|
|
78
|
+
"stroke": "#f97316"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "kb",
|
|
82
|
+
"kind": "cylinder",
|
|
83
|
+
"x": 948,
|
|
84
|
+
"y": 104,
|
|
85
|
+
"width": 158,
|
|
86
|
+
"height": 122,
|
|
87
|
+
"label": "Knowledge base",
|
|
88
|
+
"sublabel": "embeddings",
|
|
89
|
+
"fill": "#0f172a",
|
|
90
|
+
"stroke": "#38bdf8",
|
|
91
|
+
"glow": "blue"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "agent",
|
|
95
|
+
"kind": "bot",
|
|
96
|
+
"x": 380,
|
|
97
|
+
"y": 316,
|
|
98
|
+
"width": 138,
|
|
99
|
+
"height": 118,
|
|
100
|
+
"label": "Agent",
|
|
101
|
+
"sublabel": "planner + tool policy",
|
|
102
|
+
"accent_fill": "#34d399"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "terminal",
|
|
106
|
+
"kind": "terminal",
|
|
107
|
+
"x": 676,
|
|
108
|
+
"y": 334,
|
|
109
|
+
"width": 178,
|
|
110
|
+
"height": 108,
|
|
111
|
+
"label": "Terminal",
|
|
112
|
+
"fill": "#111111",
|
|
113
|
+
"stroke": "#475569",
|
|
114
|
+
"header_fill": "#222222"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "docs",
|
|
118
|
+
"kind": "folder",
|
|
119
|
+
"x": 962,
|
|
120
|
+
"y": 350,
|
|
121
|
+
"width": 168,
|
|
122
|
+
"height": 96,
|
|
123
|
+
"label": "Source documents",
|
|
124
|
+
"fill": "#3f2a00",
|
|
125
|
+
"stroke": "#f59e0b",
|
|
126
|
+
"line_stroke": "#fcd34d"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "reply",
|
|
130
|
+
"kind": "speech",
|
|
131
|
+
"x": 250,
|
|
132
|
+
"y": 560,
|
|
133
|
+
"width": 172,
|
|
134
|
+
"height": 64,
|
|
135
|
+
"label": "Grounded answer",
|
|
136
|
+
"fill": "#0f172a",
|
|
137
|
+
"stroke": "#34d399",
|
|
138
|
+
"flat": true,
|
|
139
|
+
"glow": "green"
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"arrows": [
|
|
143
|
+
{ "source": "query", "target": "planner", "source_port": "right", "target_port": "left", "flow": "read" },
|
|
144
|
+
{ "source": "planner", "target": "answer", "source_port": "right", "target_port": "left", "flow": "data" },
|
|
145
|
+
{ "source": "planner", "target": "kb", "source_port": "right", "target_port": "left", "flow": "control", "route_points": [[520, 96], [918, 96], [918, 165]] },
|
|
146
|
+
{ "source": "kb", "target": "answer", "source_port": "left", "target_port": "right", "flow": "control" },
|
|
147
|
+
{ "source": "query", "target": "agent", "source_port": "bottom", "target_port": "top", "flow": "read" },
|
|
148
|
+
{ "source": "agent", "target": "terminal", "source_port": "right", "target_port": "left", "flow": "read" },
|
|
149
|
+
{ "source": "terminal", "target": "docs", "source_port": "right", "target_port": "left", "flow": "read", "label": "pdfgrep / rga", "label_dx": -8 },
|
|
150
|
+
{
|
|
151
|
+
"source": "docs",
|
|
152
|
+
"target": "kb",
|
|
153
|
+
"source_port": "top",
|
|
154
|
+
"target_port": "bottom",
|
|
155
|
+
"flow": "feedback",
|
|
156
|
+
"label": "embed",
|
|
157
|
+
"corridor_x": [1090],
|
|
158
|
+
"label_dx": 18,
|
|
159
|
+
"label_dy": -12
|
|
160
|
+
},
|
|
161
|
+
{ "source": "agent", "target": "reply", "source_port": "bottom", "target_port": "top", "flow": "read", "route_points": [[320, 544], [320, 560]] },
|
|
162
|
+
{
|
|
163
|
+
"source": "terminal",
|
|
164
|
+
"target": "agent",
|
|
165
|
+
"source_port": "bottom",
|
|
166
|
+
"target_port": "bottom",
|
|
167
|
+
"flow": "control",
|
|
168
|
+
"route_points": [[760, 464], [760, 488], [456, 488], [456, 434]]
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
"legend": [
|
|
172
|
+
{ "flow": "read", "label": "Agent / tool path" },
|
|
173
|
+
{ "flow": "control", "label": "Planner / retrieval path" },
|
|
174
|
+
{ "flow": "data", "label": "Answer synthesis" },
|
|
175
|
+
{ "flow": "feedback", "label": "Embedding update" }
|
|
176
|
+
],
|
|
177
|
+
"legend_position": "bottom-right",
|
|
178
|
+
"legend_box": true,
|
|
179
|
+
"legend_box_fill": "rgba(15,23,42,0.72)",
|
|
180
|
+
"legend_y": 604,
|
|
181
|
+
"footer": "Agent loop iterates until grounded context is ready"
|
|
182
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@haposoft/generate-graph",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "CafeKit bundled Claude Code skill for generating production-quality SVG technical diagrams with optional PNG export via rsvg-convert.",
|
|
5
|
+
"main": "SKILL.md",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"claude-code",
|
|
8
|
+
"skill",
|
|
9
|
+
"diagram",
|
|
10
|
+
"svg",
|
|
11
|
+
"architecture",
|
|
12
|
+
"flowchart",
|
|
13
|
+
"uml",
|
|
14
|
+
"sequence-diagram",
|
|
15
|
+
"er-diagram",
|
|
16
|
+
"visualization"
|
|
17
|
+
],
|
|
18
|
+
"author": "Haposoft",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/haposoft/cafekit.git",
|
|
23
|
+
"directory": "packages/spec/src/claude/skills/generate-graph"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/haposoft/cafekit/issues"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/haposoft/cafekit/tree/main/packages/spec/src/claude/skills/generate-graph",
|
|
29
|
+
"files": [
|
|
30
|
+
"SKILL.md",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"references/",
|
|
34
|
+
"scripts/",
|
|
35
|
+
"fixtures/",
|
|
36
|
+
"templates/",
|
|
37
|
+
"assets/"
|
|
38
|
+
],
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=14.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Icon Reference
|
|
2
|
+
|
|
3
|
+
## Rules for rsvg-convert Compatibility
|
|
4
|
+
|
|
5
|
+
**Never use** `@import url()` for icon fonts — rsvg-convert does not fetch external resources.
|
|
6
|
+
**Always use** inline SVG `<path>`, `<circle>`, `<rect>`, `<text>` combinations.
|
|
7
|
+
**Font fallback**: embed font-family in `<style>` using system fonts only.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Generic Semantic Shapes (No product — use these first)
|
|
12
|
+
|
|
13
|
+
### Database / Vector Store (cylinder)
|
|
14
|
+
```xml
|
|
15
|
+
<!-- cx=center-x, top=top-y, w=width, h=height -->
|
|
16
|
+
<!-- Typical: w=80, h=70 -->
|
|
17
|
+
<ellipse cx="cx" cy="top" rx="w/2" ry="w/6" fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
18
|
+
<rect x="cx-w/2" y="top" width="w" height="h" fill="fill" stroke="none"/>
|
|
19
|
+
<line x1="cx-w/2" y1="top" x2="cx-w/2" y2="top+h" stroke="stroke" stroke-width="1.5"/>
|
|
20
|
+
<line x1="cx+w/2" y1="top" x2="cx+w/2" y2="top+h" stroke="stroke" stroke-width="1.5"/>
|
|
21
|
+
<!-- Optional inner rings for Vector Store -->
|
|
22
|
+
<ellipse cx="cx" cy="top+h*0.33" rx="w/2" ry="w/6" fill="none" stroke="stroke" stroke-width="0.7" opacity="0.5"/>
|
|
23
|
+
<ellipse cx="cx" cy="top+h*0.66" rx="w/2" ry="w/6" fill="none" stroke="stroke" stroke-width="0.7" opacity="0.5"/>
|
|
24
|
+
<ellipse cx="cx" cy="top+h" rx="w/2" ry="w/6" fill="fill-dark" stroke="stroke" stroke-width="1.5"/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### LLM / Model Node (rounded rect with spark)
|
|
28
|
+
```xml
|
|
29
|
+
<!-- Rounded rect with double border = "intelligent" signal -->
|
|
30
|
+
<rect x="x" y="y" width="w" height="h" rx="10" fill="fill" stroke="stroke-outer" stroke-width="2.5"/>
|
|
31
|
+
<rect x="x+3" y="y+3" width="w-6" height="h-6" rx="8" fill="none" stroke="stroke-inner" stroke-width="0.8" opacity="0.5"/>
|
|
32
|
+
<!-- Spark icon (⚡) as text or small lightning path -->
|
|
33
|
+
<text x="cx" y="cy-6" text-anchor="middle" font-size="14">⚡</text>
|
|
34
|
+
<text x="cx" y="cy+10" text-anchor="middle" fill="text-color" font-size="13" font-weight="600">GPT-4o</text>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Agent / Orchestrator (hexagon)
|
|
38
|
+
```xml
|
|
39
|
+
<!-- r = circumradius, cx/cy = center -->
|
|
40
|
+
<!-- For r=36: points at 36,0 18,31.2 -18,31.2 -36,0 -18,-31.2 18,-31.2 -->
|
|
41
|
+
<polygon points="cx,cy-r cx+r*0.866,cy-r*0.5 cx+r*0.866,cy+r*0.5 cx,cy+r cx-r*0.866,cy+r*0.5 cx-r*0.866,cy-r*0.5"
|
|
42
|
+
fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
43
|
+
<text x="cx" y="cy+5" text-anchor="middle" fill="text" font-size="12" font-weight="600">Agent</text>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Memory Node (short-term, dashed border)
|
|
47
|
+
```xml
|
|
48
|
+
<rect x="x" y="y" width="w" height="h" rx="8"
|
|
49
|
+
fill="fill" stroke="stroke" stroke-width="1.5" stroke-dasharray="6,3"/>
|
|
50
|
+
<text x="cx" y="cy-6" text-anchor="middle" fill="text" font-size="10" opacity="0.7">MEMORY</text>
|
|
51
|
+
<text x="cx" y="cy+8" text-anchor="middle" fill="text" font-size="13">Short-term</text>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Tool / Function Call (rect with gear symbol)
|
|
55
|
+
```xml
|
|
56
|
+
<rect x="x" y="y" width="w" height="h" rx="6" fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
57
|
+
<!-- Gear: simplified as ⚙ unicode or small circle with lines -->
|
|
58
|
+
<text x="cx" y="cy-4" text-anchor="middle" font-size="16">⚙</text>
|
|
59
|
+
<text x="cx" y="cy+12" text-anchor="middle" fill="text" font-size="12">Tool Name</text>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Queue / Stream (horizontal pipe)
|
|
63
|
+
```xml
|
|
64
|
+
<!-- Pipe tube: left cap ellipse + body + right cap ellipse -->
|
|
65
|
+
<ellipse cx="x1" cy="cy" rx="ry*0.6" ry="ry" fill="fill-dark" stroke="stroke" stroke-width="1.5"/>
|
|
66
|
+
<rect x="x1" y="cy-ry" width="x2-x1" height="ry*2" fill="fill" stroke="none"/>
|
|
67
|
+
<line x1="x1" y1="cy-ry" x2="x2" y2="cy-ry" stroke="stroke" stroke-width="1.5"/>
|
|
68
|
+
<line x1="x1" y1="cy+ry" x2="x2" y2="cy+ry" stroke="stroke" stroke-width="1.5"/>
|
|
69
|
+
<ellipse cx="x2" cy="cy" rx="ry*0.6" ry="ry" fill="fill-light" stroke="stroke" stroke-width="1.5"/>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### User / Human Actor
|
|
73
|
+
```xml
|
|
74
|
+
<!-- Head -->
|
|
75
|
+
<circle cx="cx" cy="cy-18" r="10" fill="fill" stroke="stroke" stroke-width="1.2"/>
|
|
76
|
+
<!-- Body / shoulders -->
|
|
77
|
+
<path d="M cx-14,cy+16 Q cx-14,cy-4 cx,cy-4 Q cx+14,cy-4 cx+14,cy+16"
|
|
78
|
+
fill="fill" stroke="stroke" stroke-width="1.2"/>
|
|
79
|
+
<text x="cx" y="cy+30" text-anchor="middle" fill="text" font-size="12">User</text>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### API Gateway (hexagon, single border, smaller)
|
|
83
|
+
```xml
|
|
84
|
+
<polygon points="cx,cy-28 cx+24,cy-14 cx+24,cy+14 cx,cy+28 cx-24,cy+14 cx-24,cy-14"
|
|
85
|
+
fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
86
|
+
<text x="cx" y="cy+5" text-anchor="middle" fill="text" font-size="11">API</text>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Browser / Web Client
|
|
90
|
+
```xml
|
|
91
|
+
<rect x="x" y="y" width="w" height="h" rx="6" fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
92
|
+
<!-- Title bar -->
|
|
93
|
+
<rect x="x" y="y" width="w" height="20" rx="6" fill="fill-dark" stroke="none"/>
|
|
94
|
+
<rect x="x" y="y+14" width="w" height="6" fill="fill-dark"/>
|
|
95
|
+
<!-- Traffic light dots -->
|
|
96
|
+
<circle cx="x+12" cy="y+10" r="4" fill="#ef4444" opacity="0.8"/>
|
|
97
|
+
<circle cx="x+24" cy="y+10" r="4" fill="#f59e0b" opacity="0.8"/>
|
|
98
|
+
<circle cx="x+36" cy="y+10" r="4" fill="#10b981" opacity="0.8"/>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Document / File
|
|
102
|
+
```xml
|
|
103
|
+
<!-- Folded corner rectangle -->
|
|
104
|
+
<path d="M x,y L x+w-12,y L x+w,y+12 L x+w,y+h L x,y+h Z"
|
|
105
|
+
fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
106
|
+
<!-- Fold -->
|
|
107
|
+
<path d="M x+w-12,y L x+w-12,y+12 L x+w,y+12" fill="fill-dark" stroke="stroke" stroke-width="1"/>
|
|
108
|
+
<!-- Lines inside -->
|
|
109
|
+
<line x1="x+8" y1="y+h*0.45" x2="x+w-8" y2="y+h*0.45" stroke="stroke" stroke-width="1" opacity="0.5"/>
|
|
110
|
+
<line x1="x+8" y1="y+h*0.6" x2="x+w-8" y2="y+h*0.6" stroke="stroke" stroke-width="1" opacity="0.5"/>
|
|
111
|
+
<line x1="x+8" y1="y+h*0.75" x2="x+w-16" y2="y+h*0.75" stroke="stroke" stroke-width="1" opacity="0.5"/>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Decision Diamond (flowcharts)
|
|
115
|
+
```xml
|
|
116
|
+
<!-- cx/cy = center, hw = half-width, hh = half-height -->
|
|
117
|
+
<polygon points="cx,cy-hh cx+hw,cy cx,cy+hh cx-hw,cy"
|
|
118
|
+
fill="fill" stroke="stroke" stroke-width="1.5"/>
|
|
119
|
+
<text x="cx" y="cy+5" text-anchor="middle" fill="text" font-size="12">Condition?</text>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Swim Lane Container
|
|
123
|
+
```xml
|
|
124
|
+
<!-- Background band for a layer/group -->
|
|
125
|
+
<rect x="x" y="y" width="w" height="h" rx="6"
|
|
126
|
+
fill="fill" fill-opacity="0.04" stroke="stroke" stroke-width="1" stroke-dasharray="6,4"/>
|
|
127
|
+
<!-- Layer label top-left -->
|
|
128
|
+
<text x="x+12" y="y+16" fill="label-color" font-size="10" font-weight="600" letter-spacing="0.06em">LAYER NAME</text>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Product Icons (Brand Colors + Inline SVG)
|
|
134
|
+
|
|
135
|
+
All use circle badge + text abbreviation pattern. Replace `cx`, `cy` with actual coordinates.
|
|
136
|
+
|
|
137
|
+
### AI / ML Products
|
|
138
|
+
|
|
139
|
+
| Product | Color | Badge Text |
|
|
140
|
+
|---------|-------|-----------|
|
|
141
|
+
| OpenAI / ChatGPT | `#10A37F` | `OAI` |
|
|
142
|
+
| Anthropic / Claude | `#D97757` | `Claude` |
|
|
143
|
+
| Google Gemini | `#4285F4` | `Gemini` |
|
|
144
|
+
| Meta LLaMA | `#0467DF` | `LLaMA` |
|
|
145
|
+
| Mistral | `#FF7000` | `Mistral` |
|
|
146
|
+
| Cohere | `#39594D` | `Cohere` |
|
|
147
|
+
| Groq | `#F55036` | `Groq` |
|
|
148
|
+
| Together AI | `#6366F1` | `Together` |
|
|
149
|
+
| Replicate | `#191919` | `Rep` |
|
|
150
|
+
| Hugging Face | `#FFD21E` (text dark) | `HF` |
|
|
151
|
+
|
|
152
|
+
**Template:**
|
|
153
|
+
```xml
|
|
154
|
+
<circle cx="cx" cy="cy" r="22" fill="BRAND_COLOR"/>
|
|
155
|
+
<text x="cx" y="cy+5" text-anchor="middle" fill="white"
|
|
156
|
+
font-size="10" font-weight="700" font-family="Helvetica">BADGE_TEXT</text>
|
|
157
|
+
<!-- Optional: outer ring for "AI" products -->
|
|
158
|
+
<circle cx="cx" cy="cy" r="24" fill="none" stroke="BRAND_COLOR" stroke-width="1" opacity="0.4"/>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### AI Memory & RAG Products
|
|
162
|
+
|
|
163
|
+
| Product | Color | Badge |
|
|
164
|
+
|---------|-------|-------|
|
|
165
|
+
| Mem0 | `#6366F1` | `mem0` |
|
|
166
|
+
| LangChain | `#1C3C3C` | `🦜` or `LC` |
|
|
167
|
+
| LlamaIndex | `#8B5CF6` | `LI` |
|
|
168
|
+
| LangGraph | `#1C3C3C` | `LG` |
|
|
169
|
+
| CrewAI | `#EF4444` | `Crew` |
|
|
170
|
+
| AutoGen | `#0078D4` | `AG` |
|
|
171
|
+
| Haystack | `#FF6D00` | `🌾` or `HS` |
|
|
172
|
+
| DSPy | `#7C3AED` | `DSPy` |
|
|
173
|
+
|
|
174
|
+
### Vector Databases
|
|
175
|
+
|
|
176
|
+
| Product | Color | Badge |
|
|
177
|
+
|---------|-------|-------|
|
|
178
|
+
| Pinecone | `#1C1C2E` + green | `Pine` |
|
|
179
|
+
| Weaviate | `#FA0050` | `Wea` |
|
|
180
|
+
| Qdrant | `#DC244C` | `Qdrant` |
|
|
181
|
+
| Chroma | `#FF6B35` | `Chr` |
|
|
182
|
+
| Milvus | `#00A1EA` | `Milvus` |
|
|
183
|
+
| pgvector | `#336791` | `pgv` |
|
|
184
|
+
| Faiss | `#0467DF` | `FAISS` |
|
|
185
|
+
|
|
186
|
+
**Vector DB template (cylinder + badge):**
|
|
187
|
+
```xml
|
|
188
|
+
<!-- Cylinder shape -->
|
|
189
|
+
<ellipse cx="cx" cy="top" rx="40" ry="12" fill="FILL" stroke="STROKE" stroke-width="1.5"/>
|
|
190
|
+
<rect x="cx-40" y="top" width="80" height="50" fill="FILL" stroke="none"/>
|
|
191
|
+
<line x1="cx-40" y1="top" x2="cx-40" y2="top+50" stroke="STROKE" stroke-width="1.5"/>
|
|
192
|
+
<line x1="cx+40" y1="top" x2="cx+40" y2="top+50" stroke="STROKE" stroke-width="1.5"/>
|
|
193
|
+
<ellipse cx="cx" cy="top+50" rx="40" ry="12" fill="FILL_DARK" stroke="STROKE" stroke-width="1.5"/>
|
|
194
|
+
<!-- Product name -->
|
|
195
|
+
<text x="cx" y="top+30" text-anchor="middle" fill="white"
|
|
196
|
+
font-size="11" font-weight="700">Pinecone</text>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Classic Databases & Storage
|
|
200
|
+
|
|
201
|
+
| Product | Color |
|
|
202
|
+
|---------|-------|
|
|
203
|
+
| PostgreSQL | `#336791` |
|
|
204
|
+
| MySQL | `#4479A1` |
|
|
205
|
+
| MongoDB | `#47A248` |
|
|
206
|
+
| Redis | `#DC382D` |
|
|
207
|
+
| Elasticsearch | `#005571` |
|
|
208
|
+
| Cassandra | `#1287B1` |
|
|
209
|
+
| Neo4j | `#008CC1` |
|
|
210
|
+
| SQLite | `#003B57` |
|
|
211
|
+
|
|
212
|
+
### Message Queues & Streaming
|
|
213
|
+
|
|
214
|
+
| Product | Color |
|
|
215
|
+
|---------|-------|
|
|
216
|
+
| Apache Kafka | `#231F20` |
|
|
217
|
+
| RabbitMQ | `#FF6600` |
|
|
218
|
+
| AWS SQS | `#FF9900` |
|
|
219
|
+
| NATS | `#27AAE1` |
|
|
220
|
+
| Pulsar | `#188FFF` |
|
|
221
|
+
|
|
222
|
+
### Cloud & Infra
|
|
223
|
+
|
|
224
|
+
| Product | Color |
|
|
225
|
+
|---------|-------|
|
|
226
|
+
| AWS | `#FF9900` |
|
|
227
|
+
| GCP | `#4285F4` |
|
|
228
|
+
| Azure | `#0089D6` |
|
|
229
|
+
| Cloudflare | `#F48120` |
|
|
230
|
+
| Vercel | `#000000` |
|
|
231
|
+
| Docker | `#2496ED` |
|
|
232
|
+
| Kubernetes | `#326CE5` |
|
|
233
|
+
| Terraform | `#7B42BC` |
|
|
234
|
+
| Nginx | `#009639` |
|
|
235
|
+
| FastAPI | `#009688` |
|
|
236
|
+
|
|
237
|
+
### Observability
|
|
238
|
+
|
|
239
|
+
| Product | Color |
|
|
240
|
+
|---------|-------|
|
|
241
|
+
| Grafana | `#F46800` |
|
|
242
|
+
| Prometheus | `#E6522C` |
|
|
243
|
+
| Datadog | `#632CA6` |
|
|
244
|
+
| LangSmith | `#1C3C3C` |
|
|
245
|
+
| Langfuse | `#6366F1` |
|
|
246
|
+
| Arize | `#6B48FF` |
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Icon Sizing Guide
|
|
251
|
+
|
|
252
|
+
| Context | Recommended Size | Padding |
|
|
253
|
+
|---------|-----------------|---------|
|
|
254
|
+
| Node badge (inside box) | 28×28px circle | 10px |
|
|
255
|
+
| Standalone icon node | 40×40px | 16px |
|
|
256
|
+
| Hero / central node | 56×56px | 20px |
|
|
257
|
+
| Small inline indicator | 16×16px | 6px |
|
|
258
|
+
|
|
259
|
+
## Arrow Marker Templates
|
|
260
|
+
|
|
261
|
+
```xml
|
|
262
|
+
<defs>
|
|
263
|
+
<!-- Standard filled arrow -->
|
|
264
|
+
<marker id="arrow-COLORNAME" markerWidth="10" markerHeight="7"
|
|
265
|
+
refX="9" refY="3.5" orient="auto">
|
|
266
|
+
<polygon points="0 0, 10 3.5, 0 7" fill="COLOR"/>
|
|
267
|
+
</marker>
|
|
268
|
+
|
|
269
|
+
<!-- Open arrow (outline only) -->
|
|
270
|
+
<marker id="arrow-open" markerWidth="10" markerHeight="8"
|
|
271
|
+
refX="9" refY="4" orient="auto">
|
|
272
|
+
<path d="M 0 0 L 10 4 L 0 8" fill="none" stroke="COLOR" stroke-width="1.5"/>
|
|
273
|
+
</marker>
|
|
274
|
+
|
|
275
|
+
<!-- Circle dot (for association lines) -->
|
|
276
|
+
<marker id="dot" markerWidth="8" markerHeight="8"
|
|
277
|
+
refX="4" refY="4" orient="auto">
|
|
278
|
+
<circle cx="4" cy="4" r="3" fill="COLOR"/>
|
|
279
|
+
</marker>
|
|
280
|
+
</defs>
|
|
281
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Style 1: Flat Icon (Default)
|
|
2
|
+
|
|
3
|
+
Inspired by draw.io defaults and Apple documentation style.
|
|
4
|
+
|
|
5
|
+
## Colors
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Background: #ffffff
|
|
9
|
+
Box fill: #ffffff
|
|
10
|
+
Box stroke: #d1d5db (gray-300)
|
|
11
|
+
Box radius: 8px
|
|
12
|
+
Text primary: #111827 (gray-900)
|
|
13
|
+
Text secondary: #6b7280 (gray-500)
|
|
14
|
+
|
|
15
|
+
Semantic arrow colors (pick by flow type):
|
|
16
|
+
Flow A (main): #2563eb (blue-600)
|
|
17
|
+
Flow B (alt): #dc2626 (red-600)
|
|
18
|
+
Flow C (data): #16a34a (green-600)
|
|
19
|
+
Flow D (async): #9333ea (purple-600)
|
|
20
|
+
|
|
21
|
+
Icon accent backgrounds:
|
|
22
|
+
Blue tint: #eff6ff / #dbeafe
|
|
23
|
+
Red tint: #fef2f2 / #fee2e2
|
|
24
|
+
Green tint: #f0fdf4 / #dcfce7
|
|
25
|
+
Purple tint: #faf5ff / #ede9fe
|
|
26
|
+
Orange tint: #fff7ed / #fed7aa
|
|
27
|
+
Teal tint: #f0fdfa / #ccfbf1
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Typography
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
font-family: 'Helvetica Neue', Helvetica, Arial, 'PingFang SC',
|
|
34
|
+
'Microsoft YaHei', sans-serif
|
|
35
|
+
font-size: 14px labels, 12px sub-labels, 16px titles
|
|
36
|
+
font-weight: 400 normal, 600 semi-bold for titles
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Box Shapes
|
|
40
|
+
|
|
41
|
+
```xml
|
|
42
|
+
<!-- Standard node box -->
|
|
43
|
+
<rect rx="8" ry="8" fill="#ffffff" stroke="#d1d5db" stroke-width="1.5"/>
|
|
44
|
+
|
|
45
|
+
<!-- Icon accent box (colored background) -->
|
|
46
|
+
<rect rx="8" ry="8" fill="#eff6ff" stroke="#bfdbfe" stroke-width="1.5"/>
|
|
47
|
+
|
|
48
|
+
<!-- Database cylinder (use SVG path) -->
|
|
49
|
+
<!-- Terminal box: rx=4, fill=#111827, stroke=#374151 -->
|
|
50
|
+
<!-- User/actor: circle or rounded rect with icon -->
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Arrows
|
|
54
|
+
|
|
55
|
+
```xml
|
|
56
|
+
<defs>
|
|
57
|
+
<marker id="arrow-blue" markerWidth="10" markerHeight="7"
|
|
58
|
+
refX="9" refY="3.5" orient="auto">
|
|
59
|
+
<polygon points="0 0, 10 3.5, 0 7" fill="#2563eb"/>
|
|
60
|
+
</marker>
|
|
61
|
+
<marker id="arrow-red" markerWidth="10" markerHeight="7"
|
|
62
|
+
refX="9" refY="3.5" orient="auto">
|
|
63
|
+
<polygon points="0 0, 10 3.5, 0 7" fill="#dc2626"/>
|
|
64
|
+
</marker>
|
|
65
|
+
</defs>
|
|
66
|
+
|
|
67
|
+
<!-- Line -->
|
|
68
|
+
<line stroke="#2563eb" stroke-width="1.5" marker-end="url(#arrow-blue)"/>
|
|
69
|
+
<!-- Or path for curved/orthogonal routing -->
|
|
70
|
+
<path stroke="#2563eb" stroke-width="1.5" fill="none" marker-end="url(#arrow-blue)"/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Legend
|
|
74
|
+
|
|
75
|
+
Always include a legend in the bottom-left if multiple arrow colors are used:
|
|
76
|
+
|
|
77
|
+
```xml
|
|
78
|
+
<g transform="translate(20, 560)">
|
|
79
|
+
<line x1="0" y1="8" x2="30" y2="8" stroke="#2563eb" stroke-width="1.5"
|
|
80
|
+
marker-end="url(#arrow-blue)"/>
|
|
81
|
+
<text x="36" y="12" fill="#6b7280" font-size="12">Agent flow</text>
|
|
82
|
+
<line x1="0" y1="24" x2="30" y2="24" stroke="#dc2626" stroke-width="1.5"
|
|
83
|
+
marker-end="url(#arrow-red)"/>
|
|
84
|
+
<text x="36" y="28" fill="#6b7280" font-size="12">RAG flow</text>
|
|
85
|
+
</g>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## SVG Template
|
|
89
|
+
|
|
90
|
+
```xml
|
|
91
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 600"
|
|
92
|
+
width="960" height="600">
|
|
93
|
+
<style>
|
|
94
|
+
/* NO @import — rsvg-convert cannot fetch external URLs */
|
|
95
|
+
text { font-family: 'Helvetica Neue', Helvetica, Arial, 'PingFang SC', 'Microsoft YaHei', sans-serif; }
|
|
96
|
+
</style>
|
|
97
|
+
<defs>
|
|
98
|
+
<!-- arrow markers here -->
|
|
99
|
+
<!-- gradients/filters if needed -->
|
|
100
|
+
</defs>
|
|
101
|
+
<!-- white background -->
|
|
102
|
+
<rect width="960" height="600" fill="#ffffff"/>
|
|
103
|
+
<!-- diagram title (optional) -->
|
|
104
|
+
<!-- nodes -->
|
|
105
|
+
<!-- edges -->
|
|
106
|
+
<!-- legend -->
|
|
107
|
+
</svg>
|
|
108
|
+
```
|