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.
Files changed (210) hide show
  1. package/bin/cli/LICENSE.md +1 -0
  2. package/bin/cli/cli.js +2920 -2457
  3. package/bin/cli/package.json +1 -1
  4. package/bin/cli/sdk-tools.d.ts +1216 -3
  5. package/dist/chunks/simple-config.mjs +527 -43
  6. package/dist/cli.mjs +126 -481
  7. package/dist/index.mjs +1 -0
  8. package/package.json +11 -3
  9. package/templates/agents/agent-capability-map.json +598 -0
  10. package/templates/agents/agent-selector.ts +991 -0
  11. package/templates/agents/auto-task-executor.ts +222 -0
  12. package/templates/agents/bonus/studio-coach.md +133 -0
  13. package/templates/agents/core/code-archaeologist.md +89 -0
  14. package/templates/agents/core/code-reviewer.md +88 -0
  15. package/templates/agents/core/documentation-specialist.md +100 -0
  16. package/templates/agents/core/performance-optimizer.md +67 -0
  17. package/templates/agents/databases/customer-support.md +34 -0
  18. package/templates/agents/databases/data-engineer.md +31 -0
  19. package/templates/agents/databases/data-scientist.md +28 -0
  20. package/templates/agents/databases/database-admin.md +31 -0
  21. package/templates/agents/databases/database-optimizer.md +31 -0
  22. package/templates/agents/deployment/debugger.md +29 -0
  23. package/templates/agents/deployment/deployment-engineer.md +31 -0
  24. package/templates/agents/deployment/devops-troubleshooter.md +31 -0
  25. package/templates/agents/deployment/dx-optimizer.md +62 -0
  26. package/templates/agents/deployment/error-detective.md +31 -0
  27. package/templates/agents/deployment/legacy-modernizer.md +31 -0
  28. package/templates/agents/deployment/network-engineer.md +31 -0
  29. package/templates/agents/deployment/payment-integration.md +31 -0
  30. package/templates/agents/deployment/performance-engineer.md +31 -0
  31. package/templates/agents/deployment/prompt-engineer.md +58 -0
  32. package/templates/agents/deployment/quant-analyst.md +31 -0
  33. package/templates/agents/deployment/refactor-agent.md +77 -0
  34. package/templates/agents/deployment/risk-manager.md +40 -0
  35. package/templates/agents/deployment/sales-automator.md +34 -0
  36. package/templates/agents/deployment/search-specialist.md +96 -0
  37. package/templates/agents/deployment/security-auditor.md +31 -0
  38. package/templates/agents/design/brand-guardian.md +278 -0
  39. package/templates/agents/design/frontend-analyst.md +42 -0
  40. package/templates/agents/design/ui-designer.md +157 -0
  41. package/templates/agents/design/ui-ux-master.md +568 -0
  42. package/templates/agents/design/ux-researcher.md +210 -0
  43. package/templates/agents/design/visual-storyteller.md +271 -0
  44. package/templates/agents/design/whimsy-injector.md +148 -0
  45. package/templates/agents/engineering/backend/ai-engineer.md +118 -0
  46. package/templates/agents/engineering/backend/backend-architect.md +95 -0
  47. package/templates/agents/engineering/backend/senior-backend-architect.md +554 -0
  48. package/templates/agents/engineering/frontend/frontend-developer.md +105 -0
  49. package/templates/agents/engineering/frontend/mobile-app-builder.md +108 -0
  50. package/templates/agents/engineering/frontend/rapid-prototyper.md +114 -0
  51. package/templates/agents/engineering/frontend/senior-frontend-architect.md +573 -0
  52. package/templates/agents/engineering/middlend/api-documenter.md +31 -0
  53. package/templates/agents/engineering/middlend/architect-review.md +41 -0
  54. package/templates/agents/engineering/middlend/cloud-architect.md +31 -0
  55. package/templates/agents/engineering/middlend/code-reviewer.md +28 -0
  56. package/templates/agents/engineering/middlend/devops-automator.md +118 -0
  57. package/templates/agents/marketing/app-store-optimizer.md +180 -0
  58. package/templates/agents/marketing/business-analyst.md +34 -0
  59. package/templates/agents/marketing/content-creator.md +209 -0
  60. package/templates/agents/marketing/growth-hacker.md +218 -0
  61. package/templates/agents/marketing/instagram-curator.md +154 -0
  62. package/templates/agents/marketing/reddit-community-builder.md +197 -0
  63. package/templates/agents/marketing/tiktok-strategist.md +151 -0
  64. package/templates/agents/marketing/twitter-engager.md +175 -0
  65. package/templates/agents/orchestrators/context-manager.md +63 -0
  66. package/templates/agents/orchestrators/project-analyst.md +66 -0
  67. package/templates/agents/orchestrators/team-configurator.md +52 -0
  68. package/templates/agents/orchestrators/tech-lead-orchestrator.md +103 -0
  69. package/templates/agents/product/feedback-synthesizer.md +174 -0
  70. package/templates/agents/product/sprint-prioritizer.md +128 -0
  71. package/templates/agents/product/trend-researcher.md +133 -0
  72. package/templates/agents/project-management/experiment-tracker.md +165 -0
  73. package/templates/agents/project-management/project-shipper.md +190 -0
  74. package/templates/agents/project-management/studio-producer.md +203 -0
  75. package/templates/agents/specialist/spec-analyst.md +228 -0
  76. package/templates/agents/specialist/spec-architect.md +375 -0
  77. package/templates/agents/specialist/spec-developer.md +544 -0
  78. package/templates/agents/specialist/spec-orchestrator.md +465 -0
  79. package/templates/agents/specialist/spec-planner.md +497 -0
  80. package/templates/agents/specialist/spec-reviewer.md +487 -0
  81. package/templates/agents/specialist/spec-task-reviewer.md +50 -0
  82. package/templates/agents/specialist/spec-tester.md +652 -0
  83. package/templates/agents/specialist/spec-validator.md +441 -0
  84. package/templates/agents/specialized/C++/cpp-pro.md +37 -0
  85. package/templates/agents/specialized/Golang/golang-pro.md +31 -0
  86. package/templates/agents/specialized/JavaScript/javascript-pro.md +34 -0
  87. package/templates/agents/specialized/Python/python-pro.md +31 -0
  88. package/templates/agents/specialized/databases/sql-pro.md +34 -0
  89. package/templates/agents/specialized/django/django-api-developer.md +804 -0
  90. package/templates/agents/specialized/django/django-backend-expert.md +875 -0
  91. package/templates/agents/specialized/django/django-orm-expert.md +828 -0
  92. package/templates/agents/specialized/laravel/laravel-backend-expert.md +174 -0
  93. package/templates/agents/specialized/laravel/laravel-eloquent-expert.md +75 -0
  94. package/templates/agents/specialized/rails/rails-activerecord-expert.md +690 -0
  95. package/templates/agents/specialized/rails/rails-api-developer.md +943 -0
  96. package/templates/agents/specialized/rails/rails-backend-expert.md +876 -0
  97. package/templates/agents/specialized/react/react-component-architect.md +41 -0
  98. package/templates/agents/specialized/react/react-nextjs-expert.md +141 -0
  99. package/templates/agents/specialized/vue/vue-component-architect.md +98 -0
  100. package/templates/agents/specialized/vue/vue-nuxt-expert.md +720 -0
  101. package/templates/agents/specialized/vue/vue-state-manager.md +33 -0
  102. package/templates/agents/studio-operations/analytics-reporter.md +204 -0
  103. package/templates/agents/studio-operations/finance-tracker.md +293 -0
  104. package/templates/agents/studio-operations/infrastructure-maintainer.md +219 -0
  105. package/templates/agents/studio-operations/legal-compliance-checker.md +259 -0
  106. package/templates/agents/studio-operations/support-responder.md +166 -0
  107. package/templates/agents/task-execution-agent.ts +160 -0
  108. package/templates/agents/testing/api-tester.md +214 -0
  109. package/templates/agents/testing/integration-test-fixer.md +52 -0
  110. package/templates/agents/testing/performance-benchmarker.md +277 -0
  111. package/templates/agents/testing/test-automator.md +31 -0
  112. package/templates/agents/testing/test-results-analyzer.md +273 -0
  113. package/templates/agents/testing/test-writer-fixer.md +129 -0
  114. package/templates/agents/testing/tool-evaluator.md +184 -0
  115. package/templates/agents/testing/workflow-optimizer.md +239 -0
  116. package/templates/agents/universal/api-architect.md +84 -0
  117. package/templates/agents/universal/backend-developer.md +95 -0
  118. package/templates/agents/universal/frontend-developer.md +66 -0
  119. package/templates/agents/universal/tailwind-css-expert.md +84 -0
  120. package/templates/cursor.md +20 -14
  121. package/templates/hooks/claude-code-hooks.json +13 -9
  122. package/templates/hooks/hook-wrapper.ts +173 -0
  123. package/templates/hooks/install-hooks.ts +201 -0
  124. package/templates/hooks/scripts/Notification/desktop-notifier.ts +268 -0
  125. package/templates/hooks/scripts/Notification/notification.ts +28 -0
  126. package/templates/hooks/scripts/PostToolUse/code-formatter.ts +182 -0
  127. package/templates/hooks/scripts/PostToolUse/post-tool-use.ts +27 -0
  128. package/templates/hooks/scripts/PreToolUse/command-logger.ts +107 -0
  129. package/templates/hooks/scripts/PreToolUse/file-protection.ts +109 -0
  130. package/templates/hooks/scripts/PreToolUse/pre-tool-use.ts +42 -0
  131. package/templates/hooks/scripts/Stop/session-summary.ts +150 -0
  132. package/templates/hooks/scripts/Stop/stop.ts +17 -0
  133. package/templates/hooks/scripts/UserPromptSubmit/input-notifier.ts +139 -0
  134. package/templates/hooks/scripts/UserPromptSubmit/user-prompt-submit.ts +16 -0
  135. package/templates/hooks/test-hook.ts +171 -0
  136. package/templates/hooks/tsconfig.json +27 -0
  137. package/templates/hooks/utils/execution-utils.ts +176 -0
  138. package/templates/hooks/utils/file-utils.ts +256 -0
  139. package/templates/hooks/utils/hook-utils.ts +86 -0
  140. package/templates/hooks/utils/index.ts +42 -0
  141. package/templates/personality.md +19 -14
  142. package/templates/settings.json +27 -4
  143. package/dist/chunks/run-command.mjs +0 -48
  144. package/templates/agents/base/frontend-designer.md +0 -193
  145. 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
  146. package/templates/hooks/scripts/Notification/bash/desktop-notifier.sh +0 -63
  147. package/templates/hooks/scripts/Notification/powershell/desktop-notifier.ps1 +0 -67
  148. package/templates/hooks/scripts/PostToolUse/bash/code-formatter.sh +0 -73
  149. package/templates/hooks/scripts/PostToolUse/powershell/code-formatter.ps1 +0 -90
  150. package/templates/hooks/scripts/PreToolUse/bash/command-logger.sh +0 -38
  151. package/templates/hooks/scripts/PreToolUse/bash/file-protection.sh +0 -55
  152. package/templates/hooks/scripts/PreToolUse/powershell/command-logger.ps1 +0 -34
  153. package/templates/hooks/scripts/PreToolUse/powershell/file-protection.ps1 +0 -46
  154. package/templates/hooks/scripts/Stop/bash/session-summary.sh +0 -83
  155. package/templates/hooks/scripts/Stop/powershell/session-summary.ps1 +0 -125
  156. package/templates/hooks/scripts/UserPromptSubmit/bash/input-notifier.sh +0 -58
  157. package/templates/hooks/scripts/UserPromptSubmit/powershell/input-notifier.ps1 +0 -85
  158. package/templates/skills/slack-gif-creator/LICENSE.txt +0 -202
  159. package/templates/skills/slack-gif-creator/SKILL.md +0 -646
  160. package/templates/skills/slack-gif-creator/core/color_palettes.py +0 -302
  161. package/templates/skills/slack-gif-creator/core/easing.py +0 -230
  162. package/templates/skills/slack-gif-creator/core/frame_composer.py +0 -469
  163. package/templates/skills/slack-gif-creator/core/gif_builder.py +0 -246
  164. package/templates/skills/slack-gif-creator/core/typography.py +0 -357
  165. package/templates/skills/slack-gif-creator/core/validators.py +0 -264
  166. package/templates/skills/slack-gif-creator/core/visual_effects.py +0 -494
  167. package/templates/skills/slack-gif-creator/requirements.txt +0 -4
  168. package/templates/skills/slack-gif-creator/templates/bounce.py +0 -106
  169. package/templates/skills/slack-gif-creator/templates/explode.py +0 -331
  170. package/templates/skills/slack-gif-creator/templates/fade.py +0 -329
  171. package/templates/skills/slack-gif-creator/templates/flip.py +0 -291
  172. package/templates/skills/slack-gif-creator/templates/kaleidoscope.py +0 -211
  173. package/templates/skills/slack-gif-creator/templates/morph.py +0 -329
  174. package/templates/skills/slack-gif-creator/templates/move.py +0 -293
  175. package/templates/skills/slack-gif-creator/templates/pulse.py +0 -268
  176. package/templates/skills/slack-gif-creator/templates/shake.py +0 -127
  177. package/templates/skills/slack-gif-creator/templates/slide.py +0 -291
  178. package/templates/skills/slack-gif-creator/templates/spin.py +0 -269
  179. package/templates/skills/slack-gif-creator/templates/wiggle.py +0 -300
  180. package/templates/skills/slack-gif-creator/templates/zoom.py +0 -312
  181. package/templates/skills/swimlane-diagram/README.md +0 -373
  182. package/templates/skills/swimlane-diagram/SKILL.md +0 -242
  183. package/templates/skills/swimlane-diagram/examples.md +0 -405
  184. package/templates/skills/swimlane-diagram/generators.mjs +0 -258
  185. package/templates/skills/swimlane-diagram/package.json +0 -126
  186. package/templates/skills/swimlane-diagram/reference.md +0 -368
  187. package/templates/skills/swimlane-diagram/swimlane-diagram.mjs +0 -215
  188. package/templates/skills/swimlane-diagram/swimlane-diagram.test.mjs +0 -358
  189. package/templates/skills/swimlane-diagram/validators.mjs +0 -291
  190. package/templates/skills/theme-factory/LICENSE.txt +0 -202
  191. package/templates/skills/theme-factory/SKILL.md +0 -59
  192. package/templates/skills/theme-factory/theme-showcase.pdf +0 -0
  193. package/templates/skills/theme-factory/themes/arctic-frost.md +0 -19
  194. package/templates/skills/theme-factory/themes/botanical-garden.md +0 -19
  195. package/templates/skills/theme-factory/themes/desert-rose.md +0 -19
  196. package/templates/skills/theme-factory/themes/forest-canopy.md +0 -19
  197. package/templates/skills/theme-factory/themes/golden-hour.md +0 -19
  198. package/templates/skills/theme-factory/themes/midnight-galaxy.md +0 -19
  199. package/templates/skills/theme-factory/themes/modern-minimalist.md +0 -19
  200. package/templates/skills/theme-factory/themes/ocean-depths.md +0 -19
  201. package/templates/skills/theme-factory/themes/sunset-boulevard.md +0 -19
  202. package/templates/skills/theme-factory/themes/tech-innovation.md +0 -19
  203. /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
  204. /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
  205. /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
  206. /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
  207. /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
  208. /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
  209. /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
  210. /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
- **泳道图生成器技能** - 让系统架构和业务流程可视化变得简单! 🎯