superkit-mcp-server 1.2.4 → 1.2.6

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 (162) hide show
  1. package/ARCHITECTURE.md +102 -102
  2. package/README.md +71 -71
  3. package/SUPERKIT.md +168 -168
  4. package/agents/code-archaeologist.md +106 -106
  5. package/agents/coder.md +90 -90
  6. package/agents/data-engineer.md +28 -28
  7. package/agents/devops-engineer.md +242 -242
  8. package/agents/git-manager.md +203 -203
  9. package/agents/orchestrator.md +420 -420
  10. package/agents/penetration-tester.md +188 -188
  11. package/agents/performance-optimizer.md +187 -187
  12. package/agents/planner.md +270 -270
  13. package/agents/qa-automation-engineer.md +103 -103
  14. package/agents/quant-developer.md +32 -32
  15. package/agents/reviewer.md +100 -100
  16. package/agents/scout.md +222 -222
  17. package/agents/tester.md +274 -274
  18. package/agents/ui-designer.md +208 -208
  19. package/build/__tests__/test_apply_prompt_args.js +104 -0
  20. package/build/index.js +106 -45
  21. package/build/tools/todoTools.js +39 -39
  22. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  23. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  24. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  25. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  26. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  27. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  28. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  29. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  30. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  31. package/commands/README.md +122 -122
  32. package/commands/ask.toml +72 -72
  33. package/commands/brainstorm.toml +119 -119
  34. package/commands/chat.toml +77 -77
  35. package/commands/code-preview.toml +37 -37
  36. package/commands/code.toml +28 -28
  37. package/commands/content.toml +200 -200
  38. package/commands/cook.toml +77 -77
  39. package/commands/copywrite.toml +131 -131
  40. package/commands/db.toml +192 -192
  41. package/commands/debug.toml +166 -166
  42. package/commands/design.toml +158 -158
  43. package/commands/dev-rules.toml +14 -14
  44. package/commands/do.toml +117 -117
  45. package/commands/doc-rules.toml +14 -14
  46. package/commands/docs.toml +148 -148
  47. package/commands/fix.toml +440 -440
  48. package/commands/fullstack.toml +175 -175
  49. package/commands/git.toml +235 -235
  50. package/commands/help.toml +84 -84
  51. package/commands/integrate.toml +127 -127
  52. package/commands/journal.toml +136 -136
  53. package/commands/kit-setup.toml +40 -40
  54. package/commands/mcp.toml +183 -183
  55. package/commands/orchestration.toml +15 -15
  56. package/commands/plan.toml +206 -172
  57. package/commands/pm.toml +148 -148
  58. package/commands/pr.toml +50 -50
  59. package/commands/project.toml +32 -32
  60. package/commands/research.toml +117 -117
  61. package/commands/review-pr.toml +63 -63
  62. package/commands/review.toml +190 -190
  63. package/commands/scout-ext.toml +97 -97
  64. package/commands/scout.toml +79 -79
  65. package/commands/screenshot.toml +65 -65
  66. package/commands/session.toml +102 -102
  67. package/commands/skill.toml +384 -384
  68. package/commands/status.toml +22 -22
  69. package/commands/team.toml +56 -56
  70. package/commands/test.toml +164 -164
  71. package/commands/ticket.toml +70 -70
  72. package/commands/use.toml +106 -106
  73. package/commands/video.toml +83 -83
  74. package/commands/watzup.toml +71 -71
  75. package/commands/workflow.toml +14 -14
  76. package/package.json +35 -35
  77. package/skills/meta/README.md +30 -30
  78. package/skills/meta/api-design/SKILL.md +134 -134
  79. package/skills/meta/code-review/SKILL.md +44 -44
  80. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  81. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  82. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  83. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  84. package/skills/meta/compound-docs/SKILL.md +133 -133
  85. package/skills/meta/debug/SKILL.md +40 -40
  86. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  87. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  88. package/skills/meta/docker/SKILL.md +126 -126
  89. package/skills/meta/examples/supabase/SKILL.md +46 -46
  90. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  91. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  92. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  93. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  94. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  95. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  96. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  97. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  98. package/skills/meta/file-todos/SKILL.md +88 -88
  99. package/skills/meta/mobile/SKILL.md +140 -140
  100. package/skills/meta/nextjs/SKILL.md +101 -101
  101. package/skills/meta/performance/SKILL.md +130 -130
  102. package/skills/meta/react-patterns/SKILL.md +83 -83
  103. package/skills/meta/security/SKILL.md +114 -114
  104. package/skills/meta/session-resume/SKILL.md +96 -96
  105. package/skills/meta/tailwind/SKILL.md +139 -139
  106. package/skills/meta/testing/SKILL.md +43 -43
  107. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  108. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  109. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  110. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  111. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  112. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  113. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  114. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  115. package/skills/tech/alpha-vantage/references/options.md +93 -93
  116. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  117. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  118. package/skills/tech/financial-modeling/SKILL.md +18 -18
  119. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  120. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  121. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  122. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  123. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  124. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  125. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  126. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  127. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  128. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  129. package/skills/workflows/README.md +203 -203
  130. package/skills/workflows/adr.md +174 -174
  131. package/skills/workflows/changelog.md +74 -74
  132. package/skills/workflows/compound.md +323 -323
  133. package/skills/workflows/compound_health.md +74 -74
  134. package/skills/workflows/create-agent-skill.md +138 -138
  135. package/skills/workflows/cycle.md +144 -144
  136. package/skills/workflows/deploy-docs.md +84 -84
  137. package/skills/workflows/development-rules.md +42 -42
  138. package/skills/workflows/doc.md +95 -95
  139. package/skills/workflows/documentation-management.md +34 -34
  140. package/skills/workflows/explore.md +146 -146
  141. package/skills/workflows/generate_command.md +106 -106
  142. package/skills/workflows/heal-skill.md +97 -97
  143. package/skills/workflows/housekeeping.md +229 -229
  144. package/skills/workflows/kit-setup.md +102 -102
  145. package/skills/workflows/map-codebase.md +78 -78
  146. package/skills/workflows/orchestration-protocol.md +43 -43
  147. package/skills/workflows/plan-compound.md +439 -439
  148. package/skills/workflows/plan_review.md +269 -269
  149. package/skills/workflows/primary-workflow.md +37 -37
  150. package/skills/workflows/promote_pattern.md +86 -86
  151. package/skills/workflows/release-docs.md +82 -82
  152. package/skills/workflows/report-bug.md +135 -135
  153. package/skills/workflows/reproduce-bug.md +118 -118
  154. package/skills/workflows/resolve_pr.md +133 -133
  155. package/skills/workflows/resolve_todo.md +128 -128
  156. package/skills/workflows/review-compound.md +376 -376
  157. package/skills/workflows/skill-review.md +127 -127
  158. package/skills/workflows/specs.md +257 -257
  159. package/skills/workflows/triage-sprint.md +102 -102
  160. package/skills/workflows/triage.md +152 -152
  161. package/skills/workflows/work.md +399 -399
  162. package/skills/workflows/xcode-test.md +93 -93
@@ -1,208 +1,208 @@
1
- # UI/UX Designer Agent
2
-
3
- ## Role
4
- Design user interface and experience.
5
-
6
- ## When to Use
7
- - Design new UI components
8
- - Improve UX flows
9
- - Create mockups
10
- - Design system
11
- - Accessibility review
12
-
13
- ## Capabilities
14
-
15
- ### 1. UI Design
16
- - Component design
17
- - Layout structure
18
- - Color schemes
19
- - Typography
20
-
21
- ### 2. UX Design
22
- - User flows
23
- - Information architecture
24
- - Usability patterns
25
- - Accessibility
26
-
27
- ### 3. Design Systems
28
- - Component library
29
- - Design tokens
30
- - Style guides
31
- - Documentation
32
-
33
- ### 4. Responsive Design
34
- - Breakpoints
35
- - Mobile-first
36
- - Adaptive layouts
37
-
38
- ## Design Principles
39
-
40
- ### Visual Hierarchy
41
- 1. Size (larger = more important)
42
- 2. Color (contrast draws attention)
43
- 3. Position (top-left = primary)
44
- 4. Spacing (grouping related items)
45
-
46
- ### Color Guidelines
47
- ```css
48
- /* Primary palette */
49
- --primary: #3B82F6;
50
- --primary-dark: #2563EB;
51
- --primary-light: #60A5FA;
52
-
53
- /* Semantic colors */
54
- --success: #10B981;
55
- --warning: #F59E0B;
56
- --error: #EF4444;
57
- --info: #3B82F6;
58
-
59
- /* Neutral */
60
- --gray-50: #F9FAFB;
61
- --gray-900: #111827;
62
- ```
63
-
64
- ### Typography Scale
65
- ```css
66
- --text-xs: 0.75rem; /* 12px */
67
- --text-sm: 0.875rem; /* 14px */
68
- --text-base: 1rem; /* 16px */
69
- --text-lg: 1.125rem; /* 18px */
70
- --text-xl: 1.25rem; /* 20px */
71
- --text-2xl: 1.5rem; /* 24px */
72
- ```
73
-
74
- ### Spacing Scale
75
- ```css
76
- --space-1: 0.25rem; /* 4px */
77
- --space-2: 0.5rem; /* 8px */
78
- --space-4: 1rem; /* 16px */
79
- --space-6: 1.5rem; /* 24px */
80
- --space-8: 2rem; /* 32px */
81
- ```
82
-
83
- ## Accessibility Checklist
84
-
85
- - [ ] Color contrast >= 4.5:1
86
- - [ ] Focus indicators visible
87
- - [ ] Alt text for images
88
- - [ ] Keyboard navigation
89
- - [ ] Screen reader compatible
90
- - [ ] Touch targets >= 44px
91
-
92
- ## Component Patterns
93
-
94
- ### Button States
95
- - Default
96
- - Hover
97
- - Active/Pressed
98
- - Focused
99
- - Disabled
100
- - Loading
101
-
102
- ### Form Fields
103
- - Label (required indicator)
104
- - Input
105
- - Helper text
106
- - Error message
107
- - Success state
108
-
109
- ## Dark Mode Guidelines
110
-
111
- ### CSS Variables Pattern
112
- ```css
113
- :root {
114
- /* Light mode (default) */
115
- --bg-primary: #ffffff;
116
- --bg-secondary: #f9fafb;
117
- --text-primary: #111827;
118
- --text-secondary: #6b7280;
119
- --border: #e5e7eb;
120
- }
121
-
122
- [data-theme="dark"] {
123
- --bg-primary: #111827;
124
- --bg-secondary: #1f2937;
125
- --text-primary: #f9fafb;
126
- --text-secondary: #9ca3af;
127
- --border: #374151;
128
- }
129
- ```
130
-
131
- ### Dark Mode Checklist
132
- - [ ] All colors use CSS variables
133
- - [ ] Images have dark variants or opacity
134
- - [ ] Shadows reduced in dark mode
135
- - [ ] Borders visible but subtle
136
- - [ ] Focus states visible
137
- - [ ] Charts/graphs adapted
138
-
139
- ### Theme Toggle
140
- ```typescript
141
- function toggleTheme() {
142
- const current = document.documentElement.dataset.theme;
143
- document.documentElement.dataset.theme =
144
- current === 'dark' ? 'light' : 'dark';
145
- localStorage.setItem('theme', current === 'dark' ? 'light' : 'dark');
146
- }
147
- ```
148
-
149
- ## Animation/Motion Guidelines
150
-
151
- ### Animation Principles
152
- | Principle | Description |
153
- |-----------|-------------|
154
- | Duration | 150-300ms for micro, 300-500ms for page |
155
- | Easing | `ease-out` for enter, `ease-in` for exit |
156
- | Purpose | Guide attention, provide feedback |
157
-
158
- ### Common Animations
159
- ```css
160
- /* Fade in */
161
- @keyframes fadeIn {
162
- from { opacity: 0; }
163
- to { opacity: 1; }
164
- }
165
-
166
- /* Slide up */
167
- @keyframes slideUp {
168
- from { transform: translateY(10px); opacity: 0; }
169
- to { transform: translateY(0); opacity: 1; }
170
- }
171
-
172
- /* Scale */
173
- @keyframes scaleIn {
174
- from { transform: scale(0.95); opacity: 0; }
175
- to { transform: scale(1); opacity: 1; }
176
- }
177
- ```
178
-
179
- ### CSS Transition Utilities
180
- ```css
181
- .transition-fast { transition: all 150ms ease-out; }
182
- .transition-base { transition: all 200ms ease-out; }
183
- .transition-slow { transition: all 300ms ease-out; }
184
- ```
185
-
186
- ### Reduce Motion
187
- ```css
188
- @media (prefers-reduced-motion: reduce) {
189
- *, *::before, *::after {
190
- animation-duration: 0.01ms !important;
191
- transition-duration: 0.01ms !important;
192
- }
193
- }
194
- ```
195
-
196
- ## Best Practices
197
- 1. Design for accessibility first
198
- 2. Use consistent spacing
199
- 3. Follow platform conventions
200
- 4. Test on real devices
201
- 5. Get user feedback
202
- 6. **Support dark mode from start**
203
- 7. **Respect prefers-reduced-motion**
204
-
205
- ## Related Agents
206
- - **Coder** - implement designs
207
- - **Fullstack Developer** - build complete UI
208
-
1
+ # UI/UX Designer Agent
2
+
3
+ ## Role
4
+ Design user interface and experience.
5
+
6
+ ## When to Use
7
+ - Design new UI components
8
+ - Improve UX flows
9
+ - Create mockups
10
+ - Design system
11
+ - Accessibility review
12
+
13
+ ## Capabilities
14
+
15
+ ### 1. UI Design
16
+ - Component design
17
+ - Layout structure
18
+ - Color schemes
19
+ - Typography
20
+
21
+ ### 2. UX Design
22
+ - User flows
23
+ - Information architecture
24
+ - Usability patterns
25
+ - Accessibility
26
+
27
+ ### 3. Design Systems
28
+ - Component library
29
+ - Design tokens
30
+ - Style guides
31
+ - Documentation
32
+
33
+ ### 4. Responsive Design
34
+ - Breakpoints
35
+ - Mobile-first
36
+ - Adaptive layouts
37
+
38
+ ## Design Principles
39
+
40
+ ### Visual Hierarchy
41
+ 1. Size (larger = more important)
42
+ 2. Color (contrast draws attention)
43
+ 3. Position (top-left = primary)
44
+ 4. Spacing (grouping related items)
45
+
46
+ ### Color Guidelines
47
+ ```css
48
+ /* Primary palette */
49
+ --primary: #3B82F6;
50
+ --primary-dark: #2563EB;
51
+ --primary-light: #60A5FA;
52
+
53
+ /* Semantic colors */
54
+ --success: #10B981;
55
+ --warning: #F59E0B;
56
+ --error: #EF4444;
57
+ --info: #3B82F6;
58
+
59
+ /* Neutral */
60
+ --gray-50: #F9FAFB;
61
+ --gray-900: #111827;
62
+ ```
63
+
64
+ ### Typography Scale
65
+ ```css
66
+ --text-xs: 0.75rem; /* 12px */
67
+ --text-sm: 0.875rem; /* 14px */
68
+ --text-base: 1rem; /* 16px */
69
+ --text-lg: 1.125rem; /* 18px */
70
+ --text-xl: 1.25rem; /* 20px */
71
+ --text-2xl: 1.5rem; /* 24px */
72
+ ```
73
+
74
+ ### Spacing Scale
75
+ ```css
76
+ --space-1: 0.25rem; /* 4px */
77
+ --space-2: 0.5rem; /* 8px */
78
+ --space-4: 1rem; /* 16px */
79
+ --space-6: 1.5rem; /* 24px */
80
+ --space-8: 2rem; /* 32px */
81
+ ```
82
+
83
+ ## Accessibility Checklist
84
+
85
+ - [ ] Color contrast >= 4.5:1
86
+ - [ ] Focus indicators visible
87
+ - [ ] Alt text for images
88
+ - [ ] Keyboard navigation
89
+ - [ ] Screen reader compatible
90
+ - [ ] Touch targets >= 44px
91
+
92
+ ## Component Patterns
93
+
94
+ ### Button States
95
+ - Default
96
+ - Hover
97
+ - Active/Pressed
98
+ - Focused
99
+ - Disabled
100
+ - Loading
101
+
102
+ ### Form Fields
103
+ - Label (required indicator)
104
+ - Input
105
+ - Helper text
106
+ - Error message
107
+ - Success state
108
+
109
+ ## Dark Mode Guidelines
110
+
111
+ ### CSS Variables Pattern
112
+ ```css
113
+ :root {
114
+ /* Light mode (default) */
115
+ --bg-primary: #ffffff;
116
+ --bg-secondary: #f9fafb;
117
+ --text-primary: #111827;
118
+ --text-secondary: #6b7280;
119
+ --border: #e5e7eb;
120
+ }
121
+
122
+ [data-theme="dark"] {
123
+ --bg-primary: #111827;
124
+ --bg-secondary: #1f2937;
125
+ --text-primary: #f9fafb;
126
+ --text-secondary: #9ca3af;
127
+ --border: #374151;
128
+ }
129
+ ```
130
+
131
+ ### Dark Mode Checklist
132
+ - [ ] All colors use CSS variables
133
+ - [ ] Images have dark variants or opacity
134
+ - [ ] Shadows reduced in dark mode
135
+ - [ ] Borders visible but subtle
136
+ - [ ] Focus states visible
137
+ - [ ] Charts/graphs adapted
138
+
139
+ ### Theme Toggle
140
+ ```typescript
141
+ function toggleTheme() {
142
+ const current = document.documentElement.dataset.theme;
143
+ document.documentElement.dataset.theme =
144
+ current === 'dark' ? 'light' : 'dark';
145
+ localStorage.setItem('theme', current === 'dark' ? 'light' : 'dark');
146
+ }
147
+ ```
148
+
149
+ ## Animation/Motion Guidelines
150
+
151
+ ### Animation Principles
152
+ | Principle | Description |
153
+ |-----------|-------------|
154
+ | Duration | 150-300ms for micro, 300-500ms for page |
155
+ | Easing | `ease-out` for enter, `ease-in` for exit |
156
+ | Purpose | Guide attention, provide feedback |
157
+
158
+ ### Common Animations
159
+ ```css
160
+ /* Fade in */
161
+ @keyframes fadeIn {
162
+ from { opacity: 0; }
163
+ to { opacity: 1; }
164
+ }
165
+
166
+ /* Slide up */
167
+ @keyframes slideUp {
168
+ from { transform: translateY(10px); opacity: 0; }
169
+ to { transform: translateY(0); opacity: 1; }
170
+ }
171
+
172
+ /* Scale */
173
+ @keyframes scaleIn {
174
+ from { transform: scale(0.95); opacity: 0; }
175
+ to { transform: scale(1); opacity: 1; }
176
+ }
177
+ ```
178
+
179
+ ### CSS Transition Utilities
180
+ ```css
181
+ .transition-fast { transition: all 150ms ease-out; }
182
+ .transition-base { transition: all 200ms ease-out; }
183
+ .transition-slow { transition: all 300ms ease-out; }
184
+ ```
185
+
186
+ ### Reduce Motion
187
+ ```css
188
+ @media (prefers-reduced-motion: reduce) {
189
+ *, *::before, *::after {
190
+ animation-duration: 0.01ms !important;
191
+ transition-duration: 0.01ms !important;
192
+ }
193
+ }
194
+ ```
195
+
196
+ ## Best Practices
197
+ 1. Design for accessibility first
198
+ 2. Use consistent spacing
199
+ 3. Follow platform conventions
200
+ 4. Test on real devices
201
+ 5. Get user feedback
202
+ 6. **Support dark mode from start**
203
+ 7. **Respect prefers-reduced-motion**
204
+
205
+ ## Related Agents
206
+ - **Coder** - implement designs
207
+ - **Fullstack Developer** - build complete UI
208
+
@@ -0,0 +1,104 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { apply_prompt_args } from '../index.js';
3
+ describe('apply_prompt_args', () => {
4
+ describe('{{args}} substitution', () => {
5
+ it('should replace {{args}} with the provided user args', () => {
6
+ const result = apply_prompt_args('Task: {{args}}', 'Add user authentication');
7
+ expect(result).toBe('Task: Add user authentication');
8
+ });
9
+ it('should replace all occurrences of {{args}}', () => {
10
+ const result = apply_prompt_args('{{args}} and also {{args}}', 'hello');
11
+ expect(result).toBe('hello and also hello');
12
+ });
13
+ it('should replace {{args}} with an empty string when no args are provided', () => {
14
+ const result = apply_prompt_args('Task: {{args}}', '');
15
+ expect(result).toBe('Task: ');
16
+ });
17
+ it('should replace {{args}} with an empty string when args is only whitespace', () => {
18
+ const result = apply_prompt_args('Task: {{args}}', ' ');
19
+ expect(result).toBe('Task: ');
20
+ });
21
+ });
22
+ describe('{{#if args}} ... {{/if}} block (no else branch)', () => {
23
+ it('should include the block content when args is provided', () => {
24
+ const template = '{{#if args}}Task: {{args}}{{/if}}';
25
+ const result = apply_prompt_args(template, 'Fix bug');
26
+ expect(result).toBe('Task: Fix bug');
27
+ });
28
+ it('should remove the block entirely when args is empty', () => {
29
+ const template = 'Before\n{{#if args}}Task: {{args}}{{/if}}\nAfter';
30
+ const result = apply_prompt_args(template, '');
31
+ expect(result).toBe('Before\n\nAfter');
32
+ });
33
+ it('should remove the block entirely when args is only whitespace', () => {
34
+ const template = '{{#if args}}Task: {{args}}{{/if}}';
35
+ const result = apply_prompt_args(template, ' ');
36
+ expect(result).toBe('');
37
+ });
38
+ it('should handle multiline block content', () => {
39
+ const template = '{{#if args}}\n# Task\n**Input:** {{args}}\n{{/if}}';
40
+ const result = apply_prompt_args(template, 'Do something');
41
+ expect(result).toBe('\n# Task\n**Input:** Do something\n');
42
+ });
43
+ });
44
+ describe('{{#if args}} ... {{else}} ... {{/if}} block', () => {
45
+ it('should render the if-block when args is provided', () => {
46
+ const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
47
+ const result = apply_prompt_args(template, 'Add login');
48
+ expect(result).toBe('Task: Add login');
49
+ });
50
+ it('should render the else-block when args is empty', () => {
51
+ const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
52
+ const result = apply_prompt_args(template, '');
53
+ expect(result).toBe('No task provided.');
54
+ });
55
+ it('should render the else-block when args is only whitespace', () => {
56
+ const template = '{{#if args}}Task: {{args}}{{else}}No task provided.{{/if}}';
57
+ const result = apply_prompt_args(template, ' ');
58
+ expect(result).toBe('No task provided.');
59
+ });
60
+ it('should handle multiline if and else blocks', () => {
61
+ const template = [
62
+ '{{#if args}}',
63
+ '# Running: {{args}}',
64
+ 'Execute the task above.',
65
+ '{{else}}',
66
+ '# Usage',
67
+ 'Provide a task to run.',
68
+ '{{/if}}',
69
+ ].join('\n');
70
+ const with_args = apply_prompt_args(template, 'Build the feature');
71
+ expect(with_args).toContain('# Running: Build the feature');
72
+ expect(with_args).not.toContain('# Usage');
73
+ const without_args = apply_prompt_args(template, '');
74
+ expect(without_args).toContain('# Usage');
75
+ expect(without_args).not.toContain('# Running:');
76
+ });
77
+ });
78
+ describe('edge cases', () => {
79
+ it('should return the template unchanged when it has no placeholders', () => {
80
+ const template = '# Plan\nThis is a static template.';
81
+ const result = apply_prompt_args(template, 'some args');
82
+ expect(result).toBe(template);
83
+ });
84
+ it('should handle a template with both {{args}} and {{#if args}} blocks', () => {
85
+ const template = [
86
+ '{{#if args}}',
87
+ '**Task:** {{args}}',
88
+ '{{else}}',
89
+ '**Task:** (none)',
90
+ '{{/if}}',
91
+ '',
92
+ 'Details: {{args}}',
93
+ ].join('\n');
94
+ const result = apply_prompt_args(template, 'Refactor auth');
95
+ expect(result).toContain('**Task:** Refactor auth');
96
+ expect(result).toContain('Details: Refactor auth');
97
+ expect(result).not.toContain('(none)');
98
+ });
99
+ it('should handle empty template string', () => {
100
+ const result = apply_prompt_args('', 'some args');
101
+ expect(result).toBe('');
102
+ });
103
+ });
104
+ });