aico-cli 2.0.28 → 2.0.30
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/bin/cli/LICENSE.md +1 -0
- package/bin/cli/cli.js +2920 -2457
- package/bin/cli/package.json +1 -1
- package/bin/cli/sdk-tools.d.ts +1216 -3
- package/dist/chunks/simple-config.mjs +527 -43
- package/dist/cli.mjs +126 -481
- package/dist/index.mjs +1 -0
- package/package.json +11 -3
- package/templates/agents/agent-capability-map.json +598 -0
- package/templates/agents/agent-selector.ts +991 -0
- package/templates/agents/auto-task-executor.ts +222 -0
- package/templates/agents/bonus/studio-coach.md +133 -0
- package/templates/agents/core/code-archaeologist.md +89 -0
- package/templates/agents/core/code-reviewer.md +88 -0
- package/templates/agents/core/documentation-specialist.md +100 -0
- package/templates/agents/core/performance-optimizer.md +67 -0
- package/templates/agents/databases/customer-support.md +34 -0
- package/templates/agents/databases/data-engineer.md +31 -0
- package/templates/agents/databases/data-scientist.md +28 -0
- package/templates/agents/databases/database-admin.md +31 -0
- package/templates/agents/databases/database-optimizer.md +31 -0
- package/templates/agents/deployment/debugger.md +29 -0
- package/templates/agents/deployment/deployment-engineer.md +31 -0
- package/templates/agents/deployment/devops-troubleshooter.md +31 -0
- package/templates/agents/deployment/dx-optimizer.md +62 -0
- package/templates/agents/deployment/error-detective.md +31 -0
- package/templates/agents/deployment/legacy-modernizer.md +31 -0
- package/templates/agents/deployment/network-engineer.md +31 -0
- package/templates/agents/deployment/payment-integration.md +31 -0
- package/templates/agents/deployment/performance-engineer.md +31 -0
- package/templates/agents/deployment/prompt-engineer.md +58 -0
- package/templates/agents/deployment/quant-analyst.md +31 -0
- package/templates/agents/deployment/refactor-agent.md +77 -0
- package/templates/agents/deployment/risk-manager.md +40 -0
- package/templates/agents/deployment/sales-automator.md +34 -0
- package/templates/agents/deployment/search-specialist.md +96 -0
- package/templates/agents/deployment/security-auditor.md +31 -0
- package/templates/agents/design/brand-guardian.md +278 -0
- package/templates/agents/design/frontend-analyst.md +42 -0
- package/templates/agents/design/ui-designer.md +157 -0
- package/templates/agents/design/ui-ux-master.md +568 -0
- package/templates/agents/design/ux-researcher.md +210 -0
- package/templates/agents/design/visual-storyteller.md +271 -0
- package/templates/agents/design/whimsy-injector.md +148 -0
- package/templates/agents/engineering/backend/ai-engineer.md +118 -0
- package/templates/agents/engineering/backend/backend-architect.md +95 -0
- package/templates/agents/engineering/backend/senior-backend-architect.md +554 -0
- package/templates/agents/engineering/frontend/frontend-developer.md +105 -0
- package/templates/agents/engineering/frontend/mobile-app-builder.md +108 -0
- package/templates/agents/engineering/frontend/rapid-prototyper.md +114 -0
- package/templates/agents/engineering/frontend/senior-frontend-architect.md +573 -0
- package/templates/agents/engineering/middlend/api-documenter.md +31 -0
- package/templates/agents/engineering/middlend/architect-review.md +41 -0
- package/templates/agents/engineering/middlend/cloud-architect.md +31 -0
- package/templates/agents/engineering/middlend/code-reviewer.md +28 -0
- package/templates/agents/engineering/middlend/devops-automator.md +118 -0
- package/templates/agents/marketing/app-store-optimizer.md +180 -0
- package/templates/agents/marketing/business-analyst.md +34 -0
- package/templates/agents/marketing/content-creator.md +209 -0
- package/templates/agents/marketing/growth-hacker.md +218 -0
- package/templates/agents/marketing/instagram-curator.md +154 -0
- package/templates/agents/marketing/reddit-community-builder.md +197 -0
- package/templates/agents/marketing/tiktok-strategist.md +151 -0
- package/templates/agents/marketing/twitter-engager.md +175 -0
- package/templates/agents/orchestrators/context-manager.md +63 -0
- package/templates/agents/orchestrators/project-analyst.md +66 -0
- package/templates/agents/orchestrators/team-configurator.md +52 -0
- package/templates/agents/orchestrators/tech-lead-orchestrator.md +103 -0
- package/templates/agents/product/feedback-synthesizer.md +174 -0
- package/templates/agents/product/sprint-prioritizer.md +128 -0
- package/templates/agents/product/trend-researcher.md +133 -0
- package/templates/agents/project-management/experiment-tracker.md +165 -0
- package/templates/agents/project-management/project-shipper.md +190 -0
- package/templates/agents/project-management/studio-producer.md +203 -0
- package/templates/agents/specialist/spec-analyst.md +228 -0
- package/templates/agents/specialist/spec-architect.md +375 -0
- package/templates/agents/specialist/spec-developer.md +544 -0
- package/templates/agents/specialist/spec-orchestrator.md +465 -0
- package/templates/agents/specialist/spec-planner.md +497 -0
- package/templates/agents/specialist/spec-reviewer.md +487 -0
- package/templates/agents/specialist/spec-task-reviewer.md +50 -0
- package/templates/agents/specialist/spec-tester.md +652 -0
- package/templates/agents/specialist/spec-validator.md +441 -0
- package/templates/agents/specialized/C++/cpp-pro.md +37 -0
- package/templates/agents/specialized/Golang/golang-pro.md +31 -0
- package/templates/agents/specialized/JavaScript/javascript-pro.md +34 -0
- package/templates/agents/specialized/Python/python-pro.md +31 -0
- package/templates/agents/specialized/databases/sql-pro.md +34 -0
- package/templates/agents/specialized/django/django-api-developer.md +804 -0
- package/templates/agents/specialized/django/django-backend-expert.md +875 -0
- package/templates/agents/specialized/django/django-orm-expert.md +828 -0
- package/templates/agents/specialized/laravel/laravel-backend-expert.md +174 -0
- package/templates/agents/specialized/laravel/laravel-eloquent-expert.md +75 -0
- package/templates/agents/specialized/rails/rails-activerecord-expert.md +690 -0
- package/templates/agents/specialized/rails/rails-api-developer.md +943 -0
- package/templates/agents/specialized/rails/rails-backend-expert.md +876 -0
- package/templates/agents/specialized/react/react-component-architect.md +41 -0
- package/templates/agents/specialized/react/react-nextjs-expert.md +141 -0
- package/templates/agents/specialized/vue/vue-component-architect.md +98 -0
- package/templates/agents/specialized/vue/vue-nuxt-expert.md +720 -0
- package/templates/agents/specialized/vue/vue-state-manager.md +33 -0
- package/templates/agents/studio-operations/analytics-reporter.md +204 -0
- package/templates/agents/studio-operations/finance-tracker.md +293 -0
- package/templates/agents/studio-operations/infrastructure-maintainer.md +219 -0
- package/templates/agents/studio-operations/legal-compliance-checker.md +259 -0
- package/templates/agents/studio-operations/support-responder.md +166 -0
- package/templates/agents/task-execution-agent.ts +160 -0
- package/templates/agents/testing/api-tester.md +214 -0
- package/templates/agents/testing/integration-test-fixer.md +52 -0
- package/templates/agents/testing/performance-benchmarker.md +277 -0
- package/templates/agents/testing/test-automator.md +31 -0
- package/templates/agents/testing/test-results-analyzer.md +273 -0
- package/templates/agents/testing/test-writer-fixer.md +129 -0
- package/templates/agents/testing/tool-evaluator.md +184 -0
- package/templates/agents/testing/workflow-optimizer.md +239 -0
- package/templates/agents/universal/api-architect.md +84 -0
- package/templates/agents/universal/backend-developer.md +95 -0
- package/templates/agents/universal/frontend-developer.md +66 -0
- package/templates/agents/universal/tailwind-css-expert.md +84 -0
- package/templates/cursor.md +20 -14
- package/templates/hooks/claude-code-hooks.json +13 -9
- package/templates/hooks/hook-wrapper.ts +173 -0
- package/templates/hooks/install-hooks.ts +201 -0
- package/templates/hooks/scripts/Notification/desktop-notifier.ts +268 -0
- package/templates/hooks/scripts/Notification/notification.ts +28 -0
- package/templates/hooks/scripts/PostToolUse/code-formatter.ts +182 -0
- package/templates/hooks/scripts/PostToolUse/post-tool-use.ts +27 -0
- package/templates/hooks/scripts/PreToolUse/command-logger.ts +107 -0
- package/templates/hooks/scripts/PreToolUse/file-protection.ts +109 -0
- package/templates/hooks/scripts/PreToolUse/pre-tool-use.ts +42 -0
- package/templates/hooks/scripts/Stop/session-summary.ts +150 -0
- package/templates/hooks/scripts/Stop/stop.ts +17 -0
- package/templates/hooks/scripts/UserPromptSubmit/input-notifier.ts +139 -0
- package/templates/hooks/scripts/UserPromptSubmit/user-prompt-submit.ts +16 -0
- package/templates/hooks/test-hook.ts +171 -0
- package/templates/hooks/tsconfig.json +27 -0
- package/templates/hooks/utils/execution-utils.ts +176 -0
- package/templates/hooks/utils/file-utils.ts +256 -0
- package/templates/hooks/utils/hook-utils.ts +86 -0
- package/templates/hooks/utils/index.ts +42 -0
- package/templates/personality.md +19 -14
- package/templates/settings.json +27 -4
- package/dist/chunks/run-command.mjs +0 -48
- package/templates/agents/base/frontend-designer.md +0 -193
- package/templates/commands/base//344/270/223/345/256/266/347/273/204/345/210/206/346/236/220/346/231/272/350/203/275/344/275/223.md +0 -82
- package/templates/hooks/scripts/Notification/bash/desktop-notifier.sh +0 -63
- package/templates/hooks/scripts/Notification/powershell/desktop-notifier.ps1 +0 -67
- package/templates/hooks/scripts/PostToolUse/bash/code-formatter.sh +0 -73
- package/templates/hooks/scripts/PostToolUse/powershell/code-formatter.ps1 +0 -90
- package/templates/hooks/scripts/PreToolUse/bash/command-logger.sh +0 -38
- package/templates/hooks/scripts/PreToolUse/bash/file-protection.sh +0 -55
- package/templates/hooks/scripts/PreToolUse/powershell/command-logger.ps1 +0 -34
- package/templates/hooks/scripts/PreToolUse/powershell/file-protection.ps1 +0 -46
- package/templates/hooks/scripts/Stop/bash/session-summary.sh +0 -83
- package/templates/hooks/scripts/Stop/powershell/session-summary.ps1 +0 -125
- package/templates/hooks/scripts/UserPromptSubmit/bash/input-notifier.sh +0 -58
- package/templates/hooks/scripts/UserPromptSubmit/powershell/input-notifier.ps1 +0 -85
- package/templates/skills/slack-gif-creator/LICENSE.txt +0 -202
- package/templates/skills/slack-gif-creator/SKILL.md +0 -646
- package/templates/skills/slack-gif-creator/core/color_palettes.py +0 -302
- package/templates/skills/slack-gif-creator/core/easing.py +0 -230
- package/templates/skills/slack-gif-creator/core/frame_composer.py +0 -469
- package/templates/skills/slack-gif-creator/core/gif_builder.py +0 -246
- package/templates/skills/slack-gif-creator/core/typography.py +0 -357
- package/templates/skills/slack-gif-creator/core/validators.py +0 -264
- package/templates/skills/slack-gif-creator/core/visual_effects.py +0 -494
- package/templates/skills/slack-gif-creator/requirements.txt +0 -4
- package/templates/skills/slack-gif-creator/templates/bounce.py +0 -106
- package/templates/skills/slack-gif-creator/templates/explode.py +0 -331
- package/templates/skills/slack-gif-creator/templates/fade.py +0 -329
- package/templates/skills/slack-gif-creator/templates/flip.py +0 -291
- package/templates/skills/slack-gif-creator/templates/kaleidoscope.py +0 -211
- package/templates/skills/slack-gif-creator/templates/morph.py +0 -329
- package/templates/skills/slack-gif-creator/templates/move.py +0 -293
- package/templates/skills/slack-gif-creator/templates/pulse.py +0 -268
- package/templates/skills/slack-gif-creator/templates/shake.py +0 -127
- package/templates/skills/slack-gif-creator/templates/slide.py +0 -291
- package/templates/skills/slack-gif-creator/templates/spin.py +0 -269
- package/templates/skills/slack-gif-creator/templates/wiggle.py +0 -300
- package/templates/skills/slack-gif-creator/templates/zoom.py +0 -312
- package/templates/skills/swimlane-diagram/README.md +0 -373
- package/templates/skills/swimlane-diagram/SKILL.md +0 -242
- package/templates/skills/swimlane-diagram/examples.md +0 -405
- package/templates/skills/swimlane-diagram/generators.mjs +0 -258
- package/templates/skills/swimlane-diagram/package.json +0 -126
- package/templates/skills/swimlane-diagram/reference.md +0 -368
- package/templates/skills/swimlane-diagram/swimlane-diagram.mjs +0 -215
- package/templates/skills/swimlane-diagram/swimlane-diagram.test.mjs +0 -358
- package/templates/skills/swimlane-diagram/validators.mjs +0 -291
- package/templates/skills/theme-factory/LICENSE.txt +0 -202
- package/templates/skills/theme-factory/SKILL.md +0 -59
- package/templates/skills/theme-factory/theme-showcase.pdf +0 -0
- package/templates/skills/theme-factory/themes/arctic-frost.md +0 -19
- package/templates/skills/theme-factory/themes/botanical-garden.md +0 -19
- package/templates/skills/theme-factory/themes/desert-rose.md +0 -19
- package/templates/skills/theme-factory/themes/forest-canopy.md +0 -19
- package/templates/skills/theme-factory/themes/golden-hour.md +0 -19
- package/templates/skills/theme-factory/themes/midnight-galaxy.md +0 -19
- package/templates/skills/theme-factory/themes/modern-minimalist.md +0 -19
- package/templates/skills/theme-factory/themes/ocean-depths.md +0 -19
- package/templates/skills/theme-factory/themes/sunset-boulevard.md +0 -19
- package/templates/skills/theme-factory/themes/tech-innovation.md +0 -19
- /package/templates/agents/{code//346/240/271/346/234/254/345/216/237/345/233/240/345/210/206/346/236/220/345/270/210.md" → core/root-cause-analyst.md} +0 -0
- /package/templates/agents/{code//346/212/200/346/234/257/346/226/207/346/241/243/345/267/245/347/250/213/345/270/210.md" → core/technical-writer.md} +0 -0
- /package/templates/agents/{code//346/200/247/350/203/275/345/210/206/346/236/220/344/270/223/345/256/266.md" → deployment/performance-analyst.md} +0 -0
- /package/templates/agents/{code//345/256/211/345/205/250/346/274/217/346/264/236/350/257/206/345/210/253/344/270/223/345/256/266.md" → deployment/security-engineer.md} +0 -0
- /package/templates/agents/{code//347/263/273/347/273/237/346/236/266/346/236/204/345/270/210.md" → engineering/middlend/architect.md} +0 -0
- /package/templates/agents/{code/python/345/274/200/345/217/221/344/270/223/345/256/266.md" → specialized/Python/python-expert.md} +0 -0
- /package/templates/agents/{code//350/264/250/351/207/217/350/257/204/344/274/260/345/267/245/347/250/213/345/270/210.md" → testing/quality-engineer.md} +0 -0
- /package/templates/agents/{base → universal}/panel-experts.md +0 -0
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Zoom Animation - Scale objects dramatically for emphasis.
|
|
4
|
-
|
|
5
|
-
Creates zoom in, zoom out, and dramatic scaling effects.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import sys
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
import math
|
|
11
|
-
|
|
12
|
-
sys.path.append(str(Path(__file__).parent.parent))
|
|
13
|
-
|
|
14
|
-
from PIL import Image, ImageFilter
|
|
15
|
-
from core.gif_builder import GIFBuilder
|
|
16
|
-
from core.frame_composer import create_blank_frame, draw_emoji_enhanced
|
|
17
|
-
from core.easing import interpolate
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def create_zoom_animation(
|
|
21
|
-
object_type: str = 'emoji',
|
|
22
|
-
object_data: dict | None = None,
|
|
23
|
-
num_frames: int = 30,
|
|
24
|
-
zoom_type: str = 'in', # 'in', 'out', 'in_out', 'punch'
|
|
25
|
-
scale_range: tuple[float, float] = (0.1, 2.0),
|
|
26
|
-
easing: str = 'ease_out',
|
|
27
|
-
add_motion_blur: bool = False,
|
|
28
|
-
center_pos: tuple[int, int] = (240, 240),
|
|
29
|
-
frame_width: int = 480,
|
|
30
|
-
frame_height: int = 480,
|
|
31
|
-
bg_color: tuple[int, int, int] = (255, 255, 255)
|
|
32
|
-
) -> list[Image.Image]:
|
|
33
|
-
"""
|
|
34
|
-
Create zoom animation.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
object_type: 'emoji', 'text', 'image'
|
|
38
|
-
object_data: Object configuration
|
|
39
|
-
num_frames: Number of frames
|
|
40
|
-
zoom_type: Type of zoom effect
|
|
41
|
-
scale_range: (start_scale, end_scale) tuple
|
|
42
|
-
easing: Easing function
|
|
43
|
-
add_motion_blur: Add blur for speed effect
|
|
44
|
-
center_pos: Center position
|
|
45
|
-
frame_width: Frame width
|
|
46
|
-
frame_height: Frame height
|
|
47
|
-
bg_color: Background color
|
|
48
|
-
|
|
49
|
-
Returns:
|
|
50
|
-
List of frames
|
|
51
|
-
"""
|
|
52
|
-
frames = []
|
|
53
|
-
|
|
54
|
-
# Default object data
|
|
55
|
-
if object_data is None:
|
|
56
|
-
if object_type == 'emoji':
|
|
57
|
-
object_data = {'emoji': '🔍', 'size': 100}
|
|
58
|
-
|
|
59
|
-
base_size = object_data.get('size', 100) if object_type == 'emoji' else object_data.get('font_size', 60)
|
|
60
|
-
start_scale, end_scale = scale_range
|
|
61
|
-
|
|
62
|
-
for i in range(num_frames):
|
|
63
|
-
t = i / (num_frames - 1) if num_frames > 1 else 0
|
|
64
|
-
|
|
65
|
-
# Calculate scale based on zoom type
|
|
66
|
-
if zoom_type == 'in':
|
|
67
|
-
scale = interpolate(start_scale, end_scale, t, easing)
|
|
68
|
-
elif zoom_type == 'out':
|
|
69
|
-
scale = interpolate(end_scale, start_scale, t, easing)
|
|
70
|
-
elif zoom_type == 'in_out':
|
|
71
|
-
if t < 0.5:
|
|
72
|
-
scale = interpolate(start_scale, end_scale, t * 2, easing)
|
|
73
|
-
else:
|
|
74
|
-
scale = interpolate(end_scale, start_scale, (t - 0.5) * 2, easing)
|
|
75
|
-
elif zoom_type == 'punch':
|
|
76
|
-
# Quick zoom in with overshoot then settle
|
|
77
|
-
if t < 0.3:
|
|
78
|
-
scale = interpolate(start_scale, end_scale * 1.2, t / 0.3, 'ease_out')
|
|
79
|
-
else:
|
|
80
|
-
scale = interpolate(end_scale * 1.2, end_scale, (t - 0.3) / 0.7, 'elastic_out')
|
|
81
|
-
else:
|
|
82
|
-
scale = interpolate(start_scale, end_scale, t, easing)
|
|
83
|
-
|
|
84
|
-
# Create frame
|
|
85
|
-
frame = create_blank_frame(frame_width, frame_height, bg_color)
|
|
86
|
-
|
|
87
|
-
if object_type == 'emoji':
|
|
88
|
-
current_size = int(base_size * scale)
|
|
89
|
-
|
|
90
|
-
# Clamp size to reasonable bounds
|
|
91
|
-
current_size = max(12, min(current_size, frame_width * 2))
|
|
92
|
-
|
|
93
|
-
# Create emoji on transparent background
|
|
94
|
-
canvas_size = max(frame_width, frame_height, current_size) * 2
|
|
95
|
-
emoji_canvas = Image.new('RGBA', (canvas_size, canvas_size), (0, 0, 0, 0))
|
|
96
|
-
|
|
97
|
-
draw_emoji_enhanced(
|
|
98
|
-
emoji_canvas,
|
|
99
|
-
emoji=object_data['emoji'],
|
|
100
|
-
position=(canvas_size // 2 - current_size // 2, canvas_size // 2 - current_size // 2),
|
|
101
|
-
size=current_size,
|
|
102
|
-
shadow=False
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
# Optional motion blur for fast zooms
|
|
106
|
-
if add_motion_blur and abs(scale - 1.0) > 0.5:
|
|
107
|
-
blur_amount = min(5, int(abs(scale - 1.0) * 3))
|
|
108
|
-
emoji_canvas = emoji_canvas.filter(ImageFilter.GaussianBlur(blur_amount))
|
|
109
|
-
|
|
110
|
-
# Crop to frame size centered
|
|
111
|
-
left = (canvas_size - frame_width) // 2
|
|
112
|
-
top = (canvas_size - frame_height) // 2
|
|
113
|
-
emoji_cropped = emoji_canvas.crop((left, top, left + frame_width, top + frame_height))
|
|
114
|
-
|
|
115
|
-
# Composite
|
|
116
|
-
frame_rgba = frame.convert('RGBA')
|
|
117
|
-
frame = Image.alpha_composite(frame_rgba, emoji_cropped)
|
|
118
|
-
frame = frame.convert('RGB')
|
|
119
|
-
|
|
120
|
-
elif object_type == 'text':
|
|
121
|
-
from core.typography import draw_text_with_outline
|
|
122
|
-
|
|
123
|
-
current_size = int(base_size * scale)
|
|
124
|
-
current_size = max(10, min(current_size, 500))
|
|
125
|
-
|
|
126
|
-
# Create oversized canvas for large text
|
|
127
|
-
canvas_size = max(frame_width, frame_height, current_size * 10)
|
|
128
|
-
text_canvas = Image.new('RGB', (canvas_size, canvas_size), bg_color)
|
|
129
|
-
|
|
130
|
-
draw_text_with_outline(
|
|
131
|
-
text_canvas,
|
|
132
|
-
text=object_data.get('text', 'ZOOM'),
|
|
133
|
-
position=(canvas_size // 2, canvas_size // 2),
|
|
134
|
-
font_size=current_size,
|
|
135
|
-
text_color=object_data.get('text_color', (0, 0, 0)),
|
|
136
|
-
outline_color=object_data.get('outline_color', (255, 255, 255)),
|
|
137
|
-
outline_width=max(2, int(current_size * 0.05)),
|
|
138
|
-
centered=True
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
# Crop to frame
|
|
142
|
-
left = (canvas_size - frame_width) // 2
|
|
143
|
-
top = (canvas_size - frame_height) // 2
|
|
144
|
-
frame = text_canvas.crop((left, top, left + frame_width, top + frame_height))
|
|
145
|
-
|
|
146
|
-
frames.append(frame)
|
|
147
|
-
|
|
148
|
-
return frames
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
def create_explosion_zoom(
|
|
152
|
-
emoji: str = '💥',
|
|
153
|
-
num_frames: int = 20,
|
|
154
|
-
frame_width: int = 480,
|
|
155
|
-
frame_height: int = 480,
|
|
156
|
-
bg_color: tuple[int, int, int] = (255, 255, 255)
|
|
157
|
-
) -> list[Image.Image]:
|
|
158
|
-
"""
|
|
159
|
-
Create dramatic explosion zoom effect.
|
|
160
|
-
|
|
161
|
-
Args:
|
|
162
|
-
emoji: Emoji to explode
|
|
163
|
-
num_frames: Number of frames
|
|
164
|
-
frame_width: Frame width
|
|
165
|
-
frame_height: Frame height
|
|
166
|
-
bg_color: Background color
|
|
167
|
-
|
|
168
|
-
Returns:
|
|
169
|
-
List of frames
|
|
170
|
-
"""
|
|
171
|
-
frames = []
|
|
172
|
-
|
|
173
|
-
for i in range(num_frames):
|
|
174
|
-
t = i / (num_frames - 1) if num_frames > 1 else 0
|
|
175
|
-
|
|
176
|
-
# Exponential zoom
|
|
177
|
-
scale = 0.1 * math.exp(t * 5)
|
|
178
|
-
|
|
179
|
-
# Add rotation for drama
|
|
180
|
-
angle = t * 360 * 2
|
|
181
|
-
|
|
182
|
-
frame = create_blank_frame(frame_width, frame_height, bg_color)
|
|
183
|
-
|
|
184
|
-
current_size = int(100 * scale)
|
|
185
|
-
current_size = max(12, min(current_size, frame_width * 3))
|
|
186
|
-
|
|
187
|
-
# Create emoji
|
|
188
|
-
canvas_size = max(frame_width, frame_height, current_size) * 2
|
|
189
|
-
emoji_canvas = Image.new('RGBA', (canvas_size, canvas_size), (0, 0, 0, 0))
|
|
190
|
-
|
|
191
|
-
draw_emoji_enhanced(
|
|
192
|
-
emoji_canvas,
|
|
193
|
-
emoji=emoji,
|
|
194
|
-
position=(canvas_size // 2 - current_size // 2, canvas_size // 2 - current_size // 2),
|
|
195
|
-
size=current_size,
|
|
196
|
-
shadow=False
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
# Rotate
|
|
200
|
-
emoji_canvas = emoji_canvas.rotate(angle, center=(canvas_size // 2, canvas_size // 2), resample=Image.BICUBIC)
|
|
201
|
-
|
|
202
|
-
# Add motion blur for later frames
|
|
203
|
-
if t > 0.5:
|
|
204
|
-
blur_amount = int((t - 0.5) * 10)
|
|
205
|
-
emoji_canvas = emoji_canvas.filter(ImageFilter.GaussianBlur(blur_amount))
|
|
206
|
-
|
|
207
|
-
# Crop and composite
|
|
208
|
-
left = (canvas_size - frame_width) // 2
|
|
209
|
-
top = (canvas_size - frame_height) // 2
|
|
210
|
-
emoji_cropped = emoji_canvas.crop((left, top, left + frame_width, top + frame_height))
|
|
211
|
-
|
|
212
|
-
frame_rgba = frame.convert('RGBA')
|
|
213
|
-
frame = Image.alpha_composite(frame_rgba, emoji_cropped)
|
|
214
|
-
frame = frame.convert('RGB')
|
|
215
|
-
|
|
216
|
-
frames.append(frame)
|
|
217
|
-
|
|
218
|
-
return frames
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
def create_mind_blown_zoom(
|
|
222
|
-
emoji: str = '🤯',
|
|
223
|
-
num_frames: int = 30,
|
|
224
|
-
frame_width: int = 480,
|
|
225
|
-
frame_height: int = 480,
|
|
226
|
-
bg_color: tuple[int, int, int] = (255, 255, 255)
|
|
227
|
-
) -> list[Image.Image]:
|
|
228
|
-
"""
|
|
229
|
-
Create "mind blown" dramatic zoom with shake.
|
|
230
|
-
|
|
231
|
-
Args:
|
|
232
|
-
emoji: Emoji to use
|
|
233
|
-
num_frames: Number of frames
|
|
234
|
-
frame_width: Frame width
|
|
235
|
-
frame_height: Frame height
|
|
236
|
-
bg_color: Background color
|
|
237
|
-
|
|
238
|
-
Returns:
|
|
239
|
-
List of frames
|
|
240
|
-
"""
|
|
241
|
-
frames = []
|
|
242
|
-
|
|
243
|
-
for i in range(num_frames):
|
|
244
|
-
t = i / (num_frames - 1) if num_frames > 1 else 0
|
|
245
|
-
|
|
246
|
-
# Zoom in then shake
|
|
247
|
-
if t < 0.5:
|
|
248
|
-
scale = interpolate(0.3, 1.2, t * 2, 'ease_out')
|
|
249
|
-
shake_x = 0
|
|
250
|
-
shake_y = 0
|
|
251
|
-
else:
|
|
252
|
-
scale = 1.2
|
|
253
|
-
# Shake intensifies
|
|
254
|
-
shake_intensity = (t - 0.5) * 40
|
|
255
|
-
shake_x = int(math.sin(t * 50) * shake_intensity)
|
|
256
|
-
shake_y = int(math.cos(t * 45) * shake_intensity)
|
|
257
|
-
|
|
258
|
-
frame = create_blank_frame(frame_width, frame_height, bg_color)
|
|
259
|
-
|
|
260
|
-
current_size = int(100 * scale)
|
|
261
|
-
center_x = frame_width // 2 + shake_x
|
|
262
|
-
center_y = frame_height // 2 + shake_y
|
|
263
|
-
|
|
264
|
-
emoji_canvas = Image.new('RGBA', (frame_width, frame_height), (0, 0, 0, 0))
|
|
265
|
-
draw_emoji_enhanced(
|
|
266
|
-
emoji_canvas,
|
|
267
|
-
emoji=emoji,
|
|
268
|
-
position=(center_x - current_size // 2, center_y - current_size // 2),
|
|
269
|
-
size=current_size,
|
|
270
|
-
shadow=False
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
frame_rgba = frame.convert('RGBA')
|
|
274
|
-
frame = Image.alpha_composite(frame_rgba, emoji_canvas)
|
|
275
|
-
frame = frame.convert('RGB')
|
|
276
|
-
|
|
277
|
-
frames.append(frame)
|
|
278
|
-
|
|
279
|
-
return frames
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
# Example usage
|
|
283
|
-
if __name__ == '__main__':
|
|
284
|
-
print("Creating zoom animations...")
|
|
285
|
-
|
|
286
|
-
builder = GIFBuilder(width=480, height=480, fps=20)
|
|
287
|
-
|
|
288
|
-
# Example 1: Zoom in
|
|
289
|
-
frames = create_zoom_animation(
|
|
290
|
-
object_type='emoji',
|
|
291
|
-
object_data={'emoji': '🔍', 'size': 100},
|
|
292
|
-
num_frames=30,
|
|
293
|
-
zoom_type='in',
|
|
294
|
-
scale_range=(0.1, 1.5),
|
|
295
|
-
easing='ease_out'
|
|
296
|
-
)
|
|
297
|
-
builder.add_frames(frames)
|
|
298
|
-
builder.save('zoom_in.gif', num_colors=128)
|
|
299
|
-
|
|
300
|
-
# Example 2: Explosion zoom
|
|
301
|
-
builder.clear()
|
|
302
|
-
frames = create_explosion_zoom(emoji='💥', num_frames=20)
|
|
303
|
-
builder.add_frames(frames)
|
|
304
|
-
builder.save('zoom_explosion.gif', num_colors=128)
|
|
305
|
-
|
|
306
|
-
# Example 3: Mind blown
|
|
307
|
-
builder.clear()
|
|
308
|
-
frames = create_mind_blown_zoom(emoji='🤯', num_frames=30)
|
|
309
|
-
builder.add_frames(frames)
|
|
310
|
-
builder.save('zoom_mind_blown.gif', num_colors=128)
|
|
311
|
-
|
|
312
|
-
print("Created zoom animations!")
|
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
# 泳道图生成器技能
|
|
2
|
-
|
|
3
|
-
专业生成系统架构和业务流程的泳道图技能,支持用户旅程图和时序图两种真正的泳道图类型。
|
|
4
|
-
|
|
5
|
-
## 🚀 快速开始
|
|
6
|
-
|
|
7
|
-
### 安装
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# 克隆技能仓库
|
|
11
|
-
git clone <repository-url>
|
|
12
|
-
cd swimlane-diagram-skill
|
|
13
|
-
|
|
14
|
-
# 安装依赖(当前无外部依赖)
|
|
15
|
-
npm install
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### 基本使用
|
|
19
|
-
|
|
20
|
-
```javascript
|
|
21
|
-
import SwimlaneDiagramGenerator from './swimlane-diagram.mjs';
|
|
22
|
-
|
|
23
|
-
// 创建生成器实例
|
|
24
|
-
const generator = new SwimlaneDiagramGenerator();
|
|
25
|
-
|
|
26
|
-
// 生成用户旅程图
|
|
27
|
-
const journeyDiagram = generator.generate({
|
|
28
|
-
type: 'journey',
|
|
29
|
-
title: '用户支付流程',
|
|
30
|
-
data: [
|
|
31
|
-
{
|
|
32
|
-
name: '支付准备',
|
|
33
|
-
steps: [
|
|
34
|
-
{ description: '用户打开应用', score: 5, actor: '用户' },
|
|
35
|
-
{ description: '选择商品', score: 4, actor: '用户' }
|
|
36
|
-
]
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
console.log(journeyDiagram);
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 命令行使用
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
# 生成用户旅程图
|
|
48
|
-
node swimlane-diagram.mjs --type journey --title "测试图表" --data journey-data.json
|
|
49
|
-
|
|
50
|
-
# 生成时序图
|
|
51
|
-
node swimlane-diagram.mjs --type sequence --title "API调用流程" --data sequence-data.json
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## 📋 功能特性
|
|
55
|
-
|
|
56
|
-
### 支持的图表类型
|
|
57
|
-
|
|
58
|
-
#### 1. 用户旅程图 (User Journey Diagram)
|
|
59
|
-
- **水平泳道**: 用户在不同阶段的体验流程
|
|
60
|
-
- **情感曲线**: 1-5分评分系统表示用户满意度
|
|
61
|
-
- **多角色协作**: 展示用户与系统的交互过程
|
|
62
|
-
|
|
63
|
-
#### 2. 时序图 (Sequence Diagram)
|
|
64
|
-
- **垂直泳道**: 系统参与者的生命线
|
|
65
|
-
- **消息传递**: 同步/异步消息传递
|
|
66
|
-
- **高级特性**: 激活状态、条件分支、循环结构
|
|
67
|
-
|
|
68
|
-
### 核心功能
|
|
69
|
-
|
|
70
|
-
- ✅ **参数验证**: 完整的输入参数验证和错误处理
|
|
71
|
-
- ✅ **语法生成**: 标准的Mermaid语法输出
|
|
72
|
-
- ✅ **预览功能**: HTML预览页面生成
|
|
73
|
-
- ✅ **导出功能**: Markdown文件导出
|
|
74
|
-
- ✅ **性能优化**: 高效的图表生成算法
|
|
75
|
-
- ✅ **测试覆盖**: 完整的单元测试和集成测试
|
|
76
|
-
|
|
77
|
-
## 📖 API文档
|
|
78
|
-
|
|
79
|
-
### SwimlaneDiagramGenerator 类
|
|
80
|
-
|
|
81
|
-
#### 构造函数
|
|
82
|
-
|
|
83
|
-
```javascript
|
|
84
|
-
const generator = new SwimlaneDiagramGenerator(options);
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
**选项参数:**
|
|
88
|
-
- `theme`: 图表主题 (默认: 'default')
|
|
89
|
-
- `autoValidate`: 自动验证参数 (默认: true)
|
|
90
|
-
|
|
91
|
-
#### 方法
|
|
92
|
-
|
|
93
|
-
##### generate(params)
|
|
94
|
-
生成泳道图
|
|
95
|
-
|
|
96
|
-
**参数:**
|
|
97
|
-
- `type`: 图表类型 ('journey' | 'sequence')
|
|
98
|
-
- `title`: 图表标题
|
|
99
|
-
- `data`: 图表数据
|
|
100
|
-
- `participants`: 时序图参与者列表(仅时序图需要)
|
|
101
|
-
|
|
102
|
-
**返回值:** Mermaid语法字符串
|
|
103
|
-
|
|
104
|
-
##### preview(mermaidCode)
|
|
105
|
-
生成HTML预览页面
|
|
106
|
-
|
|
107
|
-
**参数:** Mermaid代码
|
|
108
|
-
**返回值:** HTML字符串
|
|
109
|
-
|
|
110
|
-
##### exportToMarkdown(mermaidCode, title)
|
|
111
|
-
导出为Markdown文件
|
|
112
|
-
|
|
113
|
-
**参数:**
|
|
114
|
-
- `mermaidCode`: Mermaid代码
|
|
115
|
-
- `title`: 文件标题
|
|
116
|
-
|
|
117
|
-
**返回值:** Markdown内容字符串
|
|
118
|
-
|
|
119
|
-
##### validateSyntax(mermaidCode)
|
|
120
|
-
验证Mermaid语法
|
|
121
|
-
|
|
122
|
-
**参数:** Mermaid代码
|
|
123
|
-
**返回值:** Promise<boolean>
|
|
124
|
-
|
|
125
|
-
### 工具函数
|
|
126
|
-
|
|
127
|
-
#### 解析数据
|
|
128
|
-
|
|
129
|
-
```javascript
|
|
130
|
-
import { utils } from './swimlane-diagram.mjs';
|
|
131
|
-
|
|
132
|
-
// 解析用户旅程图数据
|
|
133
|
-
const journeyData = utils.parseJourneyData(rawData);
|
|
134
|
-
|
|
135
|
-
// 解析时序图数据
|
|
136
|
-
const sequenceData = utils.parseSequenceData(rawData);
|
|
137
|
-
|
|
138
|
-
// 美化Mermaid代码
|
|
139
|
-
const formattedCode = utils.formatMermaidCode(rawCode);
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## 🎯 使用示例
|
|
143
|
-
|
|
144
|
-
### 示例1: 完整的用户旅程图
|
|
145
|
-
|
|
146
|
-
```javascript
|
|
147
|
-
import SwimlaneDiagramGenerator from './swimlane-diagram.mjs';
|
|
148
|
-
|
|
149
|
-
const generator = new SwimlaneDiagramGenerator();
|
|
150
|
-
|
|
151
|
-
const journeyData = [
|
|
152
|
-
{
|
|
153
|
-
name: '设备准备阶段',
|
|
154
|
-
steps: [
|
|
155
|
-
{ description: '用户打开支付宝应用', score: 5, actor: '用户' },
|
|
156
|
-
{ description: 'POS终端设备初始化', score: 4, actor: 'POS终端' },
|
|
157
|
-
{ description: '系统检测设备状态', score: 3, actor: '系统' }
|
|
158
|
-
]
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: '触碰交互阶段',
|
|
162
|
-
steps: [
|
|
163
|
-
{ description: '用户选择碰一碰功能', score: 5, actor: '用户' },
|
|
164
|
-
{ description: '用户触碰POS设备', score: 5, actor: '用户' },
|
|
165
|
-
{ description: 'POS检测触碰信号', score: 4, actor: 'POS终端' }
|
|
166
|
-
]
|
|
167
|
-
}
|
|
168
|
-
];
|
|
169
|
-
|
|
170
|
-
const mermaidCode = generator.generate({
|
|
171
|
-
type: 'journey',
|
|
172
|
-
title: '支付宝碰一碰支付用户旅程',
|
|
173
|
-
data: journeyData
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
console.log(mermaidCode);
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### 示例2: 带激活状态的时序图
|
|
180
|
-
|
|
181
|
-
```javascript
|
|
182
|
-
import { generators } from './generators.mjs';
|
|
183
|
-
|
|
184
|
-
const sequenceData = {
|
|
185
|
-
participants: ['用户', '前端系统', 'API网关', '业务服务'],
|
|
186
|
-
interactions: [
|
|
187
|
-
{ from: '用户', to: '前端系统', message: '提交请求', type: 'sync' },
|
|
188
|
-
{ from: '前端系统', to: 'API网关', message: '转发请求', type: 'sync' },
|
|
189
|
-
{ from: 'API网关', to: '业务服务', message: '处理业务', type: 'sync' }
|
|
190
|
-
],
|
|
191
|
-
activations: [
|
|
192
|
-
{ participant: '前端系统', activate: true },
|
|
193
|
-
{ participant: 'API网关', activate: true },
|
|
194
|
-
{ participant: '业务服务', activate: true, deactivate: true }
|
|
195
|
-
]
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
const mermaidCode = generators.sequenceWithActivations(sequenceData);
|
|
199
|
-
console.log(mermaidCode);
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### 示例3: 预览和导出
|
|
203
|
-
|
|
204
|
-
```javascript
|
|
205
|
-
const generator = new SwimlaneDiagramGenerator();
|
|
206
|
-
|
|
207
|
-
// 生成图表
|
|
208
|
-
const mermaidCode = generator.generate({
|
|
209
|
-
type: 'journey',
|
|
210
|
-
title: '测试图表',
|
|
211
|
-
data: [/* 数据 */]
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// 生成预览HTML
|
|
215
|
-
const htmlPreview = generator.preview(mermaidCode);
|
|
216
|
-
|
|
217
|
-
// 导出为Markdown
|
|
218
|
-
const markdownContent = generator.exportToMarkdown(mermaidCode, '我的泳道图');
|
|
219
|
-
|
|
220
|
-
// 保存到文件
|
|
221
|
-
import { writeFileSync } from 'fs';
|
|
222
|
-
writeFileSync('preview.html', htmlPreview);
|
|
223
|
-
writeFileSync('diagram.md', markdownContent);
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## 🧪 测试
|
|
227
|
-
|
|
228
|
-
### 运行测试
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
# 运行所有测试
|
|
232
|
-
npm test
|
|
233
|
-
|
|
234
|
-
# 开发模式运行测试(监听文件变化)
|
|
235
|
-
npm run test:dev
|
|
236
|
-
|
|
237
|
-
# 运行性能测试
|
|
238
|
-
node swimlane-diagram.test.mjs
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### 测试覆盖范围
|
|
242
|
-
|
|
243
|
-
- ✅ 参数验证测试
|
|
244
|
-
- ✅ 图表生成测试
|
|
245
|
-
- ✅ 错误处理测试
|
|
246
|
-
- ✅ 性能测试
|
|
247
|
-
- ✅ 边界情况测试
|
|
248
|
-
|
|
249
|
-
## 🔧 开发指南
|
|
250
|
-
|
|
251
|
-
### 项目结构
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
swimlane-diagram-skill/
|
|
255
|
-
├── swimlane-diagram.mjs # 核心实现
|
|
256
|
-
├── validators.mjs # 验证器模块
|
|
257
|
-
├── generators.mjs # 生成器模块
|
|
258
|
-
├── swimlane-diagram.test.mjs # 测试文件
|
|
259
|
-
├── package.json # 项目配置
|
|
260
|
-
├── README.md # 使用说明
|
|
261
|
-
├── SKILL.md # 技能定义
|
|
262
|
-
├── reference.md # 参考手册
|
|
263
|
-
└── examples.md # 示例集
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
### 添加新的图表类型
|
|
267
|
-
|
|
268
|
-
1. 在 `validators.mjs` 中添加验证函数
|
|
269
|
-
2. 在 `generators.mjs` 中添加生成函数
|
|
270
|
-
3. 在核心类中注册新的类型处理
|
|
271
|
-
4. 添加相应的测试用例
|
|
272
|
-
|
|
273
|
-
### 扩展功能
|
|
274
|
-
|
|
275
|
-
技能设计支持模块化扩展,可以轻松添加:
|
|
276
|
-
- 新的图表类型
|
|
277
|
-
- 自定义主题
|
|
278
|
-
- 高级布局算法
|
|
279
|
-
- 第三方集成
|
|
280
|
-
|
|
281
|
-
## 🚀 部署和集成
|
|
282
|
-
|
|
283
|
-
### 集成到现有项目
|
|
284
|
-
|
|
285
|
-
```javascript
|
|
286
|
-
// 作为模块导入
|
|
287
|
-
import SwimlaneDiagramGenerator from 'swimlane-diagram-skill';
|
|
288
|
-
|
|
289
|
-
// 或使用CDN
|
|
290
|
-
import('https://cdn.example.com/swimlane-diagram.mjs')
|
|
291
|
-
.then(module => {
|
|
292
|
-
const generator = new module.default();
|
|
293
|
-
});
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
### 命令行工具集成
|
|
297
|
-
|
|
298
|
-
```bash
|
|
299
|
-
# 全局安装
|
|
300
|
-
npm install -g swimlane-diagram-skill
|
|
301
|
-
|
|
302
|
-
# 使用
|
|
303
|
-
swimlane-diagram --type journey --title "我的图表" --data data.json
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## 📊 性能指标
|
|
307
|
-
|
|
308
|
-
- **图表生成速度**: < 10ms(简单图表)
|
|
309
|
-
- **内存使用**: < 10MB
|
|
310
|
-
- **支持的最大参与者**: 10个
|
|
311
|
-
- **支持的最大阶段**: 8个
|
|
312
|
-
- **支持的最大步骤**: 每个阶段5个
|
|
313
|
-
|
|
314
|
-
## 🤝 贡献指南
|
|
315
|
-
|
|
316
|
-
### 报告问题
|
|
317
|
-
|
|
318
|
-
请使用GitHub Issues报告问题,包括:
|
|
319
|
-
- 问题描述
|
|
320
|
-
- 重现步骤
|
|
321
|
-
- 期望行为
|
|
322
|
-
- 实际行为
|
|
323
|
-
- 环境信息
|
|
324
|
-
|
|
325
|
-
### 提交代码
|
|
326
|
-
|
|
327
|
-
1. Fork项目
|
|
328
|
-
2. 创建功能分支
|
|
329
|
-
3. 提交更改
|
|
330
|
-
4. 推送到分支
|
|
331
|
-
5. 创建Pull Request
|
|
332
|
-
|
|
333
|
-
### 代码规范
|
|
334
|
-
|
|
335
|
-
- 使用ES6+语法
|
|
336
|
-
- 添加JSDoc注释
|
|
337
|
-
- 编写单元测试
|
|
338
|
-
- 遵循现有代码风格
|
|
339
|
-
|
|
340
|
-
## 📄 许可证
|
|
341
|
-
|
|
342
|
-
MIT License - 详见 [LICENSE](LICENSE) 文件
|
|
343
|
-
|
|
344
|
-
## 🔗 相关资源
|
|
345
|
-
|
|
346
|
-
- [Mermaid.js 官方文档](https://mermaid.js.org/)
|
|
347
|
-
- [用户旅程图语法参考](reference.md)
|
|
348
|
-
- [时序图语法参考](reference.md)
|
|
349
|
-
- [完整示例集](examples.md)
|
|
350
|
-
|
|
351
|
-
## 🆘 故障排除
|
|
352
|
-
|
|
353
|
-
### 常见问题
|
|
354
|
-
|
|
355
|
-
**Q: 图表无法渲染?**
|
|
356
|
-
A: 确保使用支持Mermaid的环境,或使用预览功能生成HTML。
|
|
357
|
-
|
|
358
|
-
**Q: 参数验证失败?**
|
|
359
|
-
A: 检查参数格式,参考示例确保数据结构正确。
|
|
360
|
-
|
|
361
|
-
**Q: 性能问题?**
|
|
362
|
-
A: 避免生成过于复杂的图表,考虑拆分大型图表。
|
|
363
|
-
|
|
364
|
-
### 获取帮助
|
|
365
|
-
|
|
366
|
-
- 查看 [SKILL.md](SKILL.md) 获取详细技能说明
|
|
367
|
-
- 查看 [reference.md](reference.md) 获取语法参考
|
|
368
|
-
- 查看 [examples.md](examples.md) 获取使用示例
|
|
369
|
-
- 提交GitHub Issue获取技术支持
|
|
370
|
-
|
|
371
|
-
---
|
|
372
|
-
|
|
373
|
-
**泳道图生成器技能** - 让系统架构和业务流程可视化变得简单! 🎯
|