@haposoft/cafekit 0.13.4 → 0.14.0
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 +2 -23
- package/bin/lib/i18n.js +2 -2
- package/bin/lib/manifest.js +15 -0
- package/bin/lib/opencode-install.js +0 -14
- package/bin/phases/claude-runtime.js +4 -1
- package/bin/phases/claude-settings.js +38 -7
- package/bin/phases/root-config.js +5 -24
- package/package.json +1 -1
- package/src/claude/agents/ui-ux-designer.md +4 -4
- package/src/claude/gitignore +4 -11
- package/src/claude/hooks/__tests__/privacy-block.test.js +79 -0
- package/src/claude/hooks/__tests__/session-writeenv.test.js +68 -0
- package/src/claude/hooks/__tests__/spec-gate.test.js +270 -0
- package/src/claude/hooks/privacy-block.cjs +22 -2
- package/src/claude/hooks/session.cjs +5 -1
- package/src/claude/hooks/spec-gate.cjs +173 -0
- package/src/claude/hooks/spec-state.cjs +10 -17
- package/src/claude/hooks/task-scaffold-guard.cjs +4 -2
- package/src/claude/migration-manifest.json +5 -5
- package/src/claude/rules/skill-domain-routing.md +2 -3
- package/src/claude/rules/skill-workflow-routing.md +2 -11
- package/src/claude/rules/state-sync.md +4 -0
- package/src/claude/runtime.json +4 -0
- package/src/claude/scripts/validate-docs.cjs +4 -7
- package/src/claude/scripts/validate-spec-output.cjs +29 -9
- package/src/claude/settings/settings.json +4 -0
- package/src/claude/skills/ai-multimodal/.env.example +11 -13
- package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
- package/src/claude/skills/ai-multimodal/references/audio-processing.md +25 -27
- package/src/claude/skills/ai-multimodal/references/video-analysis.md +23 -27
- package/src/claude/skills/ai-multimodal/references/vision-understanding.md +26 -26
- package/src/claude/skills/ai-multimodal/scripts/check_setup.py +1 -1
- package/src/claude/skills/ai-multimodal/scripts/gemini_batch_process.py +7 -9
- package/src/claude/skills/brainstorm/SKILL.md +1 -2
- package/src/claude/skills/docx/SKILL.md +1 -1
- package/src/claude/skills/frontend-design/SKILL.md +1 -1
- package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +4 -4
- package/src/claude/skills/frontend-design/references/analysis-techniques.md +3 -3
- package/src/claude/skills/frontend-design/references/asset-generation.md +2 -2
- package/src/claude/skills/frontend-design/references/design-extraction-overview.md +4 -4
- package/src/claude/skills/frontend-design/references/extraction-best-practices.md +3 -3
- package/src/claude/skills/frontend-design/references/technical-accessibility.md +1 -1
- package/src/claude/skills/frontend-design/references/technical-optimization.md +1 -1
- package/src/claude/skills/frontend-design/references/technical-overview.md +2 -2
- package/src/claude/skills/frontend-design/references/technical-workflows.md +6 -6
- package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +3 -3
- package/src/claude/skills/inspect/SKILL.md +3 -3
- package/src/claude/skills/inspect/references/external-gemini-inspection.md +9 -9
- package/src/claude/skills/pdf/SKILL.md +1 -1
- package/src/claude/skills/pptx/SKILL.md +1 -1
- package/src/claude/skills/specs/SKILL.md +1 -1
- package/src/claude/skills/xlsx/SKILL.md +1 -1
- package/src/opencode/AGENTS.md +1 -2
- package/src/opencode/plugins/session.ts +2 -2
- package/src/opencode/plugins/spec-state.ts +244 -0
- package/src/opencode/plugins/task-scaffold-guard.ts +161 -0
- package/src/claude/scripts/browser-tool.cjs +0 -138
- package/src/claude/skills/delegate/SKILL.md +0 -124
- package/src/claude/skills/delegate/references/codex-delegation.md +0 -71
- package/src/claude/skills/delegate/references/grok-delegation.md +0 -84
- package/src/claude/skills/generate-graph/LICENSE +0 -21
- package/src/claude/skills/generate-graph/README.md +0 -523
- package/src/claude/skills/generate-graph/SKILL.md +0 -429
- package/src/claude/skills/generate-graph/agentloop-core.svg +0 -101
- package/src/claude/skills/generate-graph/agents/openai.yaml +0 -4
- 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 +0 -181
- package/src/claude/skills/generate-graph/fixtures/api-flow-style7.json +0 -40
- package/src/claude/skills/generate-graph/fixtures/mem0-style1.json +0 -297
- package/src/claude/skills/generate-graph/fixtures/microservices-style3.json +0 -64
- package/src/claude/skills/generate-graph/fixtures/multi-agent-style5.json +0 -45
- package/src/claude/skills/generate-graph/fixtures/system-architecture-style6.json +0 -48
- package/src/claude/skills/generate-graph/fixtures/tool-call-style2.json +0 -182
- package/src/claude/skills/generate-graph/package.json +0 -42
- package/src/claude/skills/generate-graph/references/icons.md +0 -281
- package/src/claude/skills/generate-graph/references/style-1-flat-icon.md +0 -108
- package/src/claude/skills/generate-graph/references/style-2-dark-terminal.md +0 -107
- package/src/claude/skills/generate-graph/references/style-3-blueprint.md +0 -113
- package/src/claude/skills/generate-graph/references/style-4-notion-clean.md +0 -94
- package/src/claude/skills/generate-graph/references/style-5-glassmorphism.md +0 -125
- package/src/claude/skills/generate-graph/references/style-6-claude-official.md +0 -209
- package/src/claude/skills/generate-graph/references/style-7-openai.md +0 -215
- package/src/claude/skills/generate-graph/references/style-diagram-matrix.md +0 -135
- package/src/claude/skills/generate-graph/references/svg-layout-best-practices.md +0 -100
- package/src/claude/skills/generate-graph/scripts/generate-diagram.sh +0 -157
- package/src/claude/skills/generate-graph/scripts/generate-from-template.py +0 -1556
- package/src/claude/skills/generate-graph/scripts/test-all-styles.sh +0 -135
- package/src/claude/skills/generate-graph/scripts/validate-svg.sh +0 -292
- package/src/claude/skills/generate-graph/templates/agent-architecture.svg +0 -28
- package/src/claude/skills/generate-graph/templates/architecture.svg +0 -23
- package/src/claude/skills/generate-graph/templates/comparison-matrix.svg +0 -14
- package/src/claude/skills/generate-graph/templates/data-flow.svg +0 -28
- package/src/claude/skills/generate-graph/templates/er-diagram.svg +0 -21
- package/src/claude/skills/generate-graph/templates/flowchart.svg +0 -21
- package/src/claude/skills/generate-graph/templates/sequence.svg +0 -20
- package/src/claude/skills/generate-graph/templates/state-machine.svg +0 -20
- package/src/claude/skills/generate-graph/templates/timeline.svg +0 -19
- package/src/claude/skills/generate-graph/templates/use-case.svg +0 -21
- package/src/claude/skills/impact-analysis/SKILL.md +0 -276
- package/src/claude/skills/impact-analysis/references/change-detection.md +0 -270
- package/src/claude/skills/impact-analysis/references/dependency-scouting.md +0 -338
- package/src/claude/skills/impact-analysis/references/edge-case-identification.md +0 -439
- package/src/claude/skills/impact-analysis/references/industry-techniques.md +0 -695
- package/src/claude/skills/impact-analysis/references/practical-techniques-guide.md +0 -753
- package/src/claude/skills/impact-analysis/references/project-detection.md +0 -704
- package/src/claude/skills/impact-analysis/references/react-native-customization.md +0 -508
- package/src/claude/skills/impact-analysis/references/report-template.md +0 -604
- package/src/claude/skills/impact-analysis/references/test-scenario-generation.md +0 -459
- package/src/claude/skills/impact-analysis/scripts/README.md +0 -476
- package/src/claude/skills/impact-analysis/scripts/ast-analyze.js +0 -403
- package/src/claude/skills/impact-analysis/scripts/calculate-risk.js +0 -475
- package/src/claude/skills/impact-analysis/scripts/find-dependencies.sh +0 -202
- package/src/claude/skills/impact-analysis/scripts/run-analysis.sh +0 -312
|
@@ -1,48 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,182 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,281 +0,0 @@
|
|
|
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
|
-
```
|
|
@@ -1,108 +0,0 @@
|
|
|
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
|
-
```
|