grimoire-wizard 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -18
- package/dist/cli.js +503 -97
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +107 -3
- package/dist/index.js +832 -367
- package/dist/index.js.map +1 -1
- package/examples/json/all-features.json +66 -0
- package/examples/json/appstore-screenshot-wizard.json +362 -0
- package/examples/json/appstore-upload.json +104 -0
- package/examples/json/basic.json +72 -0
- package/examples/json/batch-generate.json +186 -0
- package/examples/json/brief-builder.json +519 -0
- package/examples/json/conditional.json +155 -0
- package/examples/json/cost-analyzer.json +83 -0
- package/examples/json/demo.json +130 -0
- package/examples/json/scraper-selector.json +63 -0
- package/examples/json/themed-catppuccin.json +39 -0
- package/examples/json/themed.json +103 -0
- package/examples/json/with-checks.json +47 -0
- package/examples/yaml/appstore-screenshot-wizard.yaml +321 -0
- package/examples/yaml/appstore-upload.yaml +84 -0
- package/examples/yaml/batch-generate.yaml +156 -0
- package/examples/yaml/brief-builder.yaml +429 -0
- package/examples/yaml/cost-analyzer.yaml +69 -0
- package/examples/yaml/pipeline.yaml +35 -0
- package/examples/yaml/scraper-selector.yaml +52 -0
- package/examples/yaml/themed-catppuccin.yaml +31 -0
- package/package.json +5 -1
- /package/examples/{all-features.yaml → yaml/all-features.yaml} +0 -0
- /package/examples/{base.yaml → yaml/base.yaml} +0 -0
- /package/examples/{basic.yaml → yaml/basic.yaml} +0 -0
- /package/examples/{conditional.yaml → yaml/conditional.yaml} +0 -0
- /package/examples/{demo.yaml → yaml/demo.yaml} +0 -0
- /package/examples/{ebay-mcp-setup.yaml → yaml/ebay-mcp-setup.yaml} +0 -0
- /package/examples/{extended.yaml → yaml/extended.yaml} +0 -0
- /package/examples/{themed.yaml → yaml/themed.yaml} +0 -0
- /package/examples/{with-checks.yaml → yaml/with-checks.yaml} +0 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
name: "Concept Brief Builder"
|
|
3
|
+
description: "Create a design concept brief for AI-powered screenshot generation"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
review: true
|
|
6
|
+
|
|
7
|
+
theme:
|
|
8
|
+
preset: dracula
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
# ── Platform ──────────────────────────────────────────────
|
|
12
|
+
- id: platform
|
|
13
|
+
type: select
|
|
14
|
+
group: "Platform"
|
|
15
|
+
message: "Platform type"
|
|
16
|
+
options:
|
|
17
|
+
- { value: mobile-ios, label: "iOS App", hint: "iPhone and iPad" }
|
|
18
|
+
- { value: mobile-android, label: "Android App", hint: "Android phone and tablet" }
|
|
19
|
+
- { value: mobile-game, label: "Mobile Game", hint: "iOS or Android game" }
|
|
20
|
+
- { value: web-saas, label: "Web SaaS", hint: "Web application / SaaS" }
|
|
21
|
+
- { value: landing-page, label: "Landing Page", hint: "Marketing landing page" }
|
|
22
|
+
- { value: desktop-app, label: "Desktop App", hint: "macOS or Windows app" }
|
|
23
|
+
|
|
24
|
+
# ── Product Info ──────────────────────────────────────────
|
|
25
|
+
- id: product-name
|
|
26
|
+
type: text
|
|
27
|
+
group: "Product Info"
|
|
28
|
+
message: "Product name"
|
|
29
|
+
validate:
|
|
30
|
+
- rule: required
|
|
31
|
+
|
|
32
|
+
- id: product-description
|
|
33
|
+
type: text
|
|
34
|
+
group: "Product Info"
|
|
35
|
+
message: "Product description"
|
|
36
|
+
validate:
|
|
37
|
+
- rule: required
|
|
38
|
+
- rule: minLength
|
|
39
|
+
value: 10
|
|
40
|
+
|
|
41
|
+
# ── Target Dimensions ────────────────────────────────────
|
|
42
|
+
- id: targets-ios
|
|
43
|
+
type: multiselect
|
|
44
|
+
group: "Target Dimensions"
|
|
45
|
+
message: "Target dimensions"
|
|
46
|
+
when:
|
|
47
|
+
field: platform
|
|
48
|
+
equals: mobile-ios
|
|
49
|
+
options:
|
|
50
|
+
- { value: iphone-6.7, label: 'iPhone 6.7"' }
|
|
51
|
+
- { value: ipad-pro, label: "iPad Pro" }
|
|
52
|
+
min: 1
|
|
53
|
+
|
|
54
|
+
- id: targets-android
|
|
55
|
+
type: multiselect
|
|
56
|
+
group: "Target Dimensions"
|
|
57
|
+
message: "Target dimensions"
|
|
58
|
+
when:
|
|
59
|
+
field: platform
|
|
60
|
+
equals: mobile-android
|
|
61
|
+
options:
|
|
62
|
+
- { value: android-phone, label: "Android Phone" }
|
|
63
|
+
- { value: android-7-tablet, label: 'Android 7" Tablet' }
|
|
64
|
+
- { value: android-10-tablet, label: 'Android 10" Tablet' }
|
|
65
|
+
min: 1
|
|
66
|
+
|
|
67
|
+
- id: targets-game
|
|
68
|
+
type: multiselect
|
|
69
|
+
group: "Target Dimensions"
|
|
70
|
+
message: "Target dimensions"
|
|
71
|
+
when:
|
|
72
|
+
field: platform
|
|
73
|
+
equals: mobile-game
|
|
74
|
+
options:
|
|
75
|
+
- { value: iphone-6.7, label: 'iPhone 6.7"' }
|
|
76
|
+
- { value: ipad-pro, label: "iPad Pro" }
|
|
77
|
+
- { value: android-phone, label: "Android Phone" }
|
|
78
|
+
- { value: android-7-tablet, label: 'Android 7" Tablet' }
|
|
79
|
+
min: 1
|
|
80
|
+
|
|
81
|
+
- id: targets-web
|
|
82
|
+
type: multiselect
|
|
83
|
+
group: "Target Dimensions"
|
|
84
|
+
message: "Target dimensions"
|
|
85
|
+
when:
|
|
86
|
+
any:
|
|
87
|
+
- { field: platform, equals: web-saas }
|
|
88
|
+
- { field: platform, equals: landing-page }
|
|
89
|
+
options:
|
|
90
|
+
- { value: desktop-1920, label: "Desktop 1920px" }
|
|
91
|
+
- { value: tablet-1024, label: "Tablet 1024px" }
|
|
92
|
+
- { value: mobile-390, label: "Mobile 390px" }
|
|
93
|
+
min: 1
|
|
94
|
+
|
|
95
|
+
- id: targets-desktop
|
|
96
|
+
type: multiselect
|
|
97
|
+
group: "Target Dimensions"
|
|
98
|
+
message: "Target dimensions"
|
|
99
|
+
when:
|
|
100
|
+
field: platform
|
|
101
|
+
equals: desktop-app
|
|
102
|
+
options:
|
|
103
|
+
- { value: macos-2880x1800, label: "macOS 2880x1800" }
|
|
104
|
+
- { value: windows-2560x1440, label: "Windows 2560x1440" }
|
|
105
|
+
min: 1
|
|
106
|
+
|
|
107
|
+
# ── Design System ────────────────────────────────────────
|
|
108
|
+
- id: font-family
|
|
109
|
+
type: text
|
|
110
|
+
group: "Design System"
|
|
111
|
+
message: "Font family"
|
|
112
|
+
default: "Inter, system-ui"
|
|
113
|
+
placeholder: "e.g., SF Pro, Roboto, Inter"
|
|
114
|
+
|
|
115
|
+
- id: color-primary
|
|
116
|
+
type: text
|
|
117
|
+
group: "Design System"
|
|
118
|
+
message: "Primary color"
|
|
119
|
+
default: "#6366F1"
|
|
120
|
+
|
|
121
|
+
- id: color-secondary
|
|
122
|
+
type: text
|
|
123
|
+
group: "Design System"
|
|
124
|
+
message: "Secondary color"
|
|
125
|
+
default: "#EC4899"
|
|
126
|
+
|
|
127
|
+
- id: color-accent
|
|
128
|
+
type: text
|
|
129
|
+
group: "Design System"
|
|
130
|
+
message: "Accent color"
|
|
131
|
+
default: "#10B981"
|
|
132
|
+
|
|
133
|
+
- id: color-background
|
|
134
|
+
type: text
|
|
135
|
+
group: "Design System"
|
|
136
|
+
message: "Background color"
|
|
137
|
+
default: "#FAFAFA"
|
|
138
|
+
|
|
139
|
+
- id: color-surface
|
|
140
|
+
type: text
|
|
141
|
+
group: "Design System"
|
|
142
|
+
message: "Surface color"
|
|
143
|
+
default: "#FFFFFF"
|
|
144
|
+
|
|
145
|
+
- id: color-text
|
|
146
|
+
type: text
|
|
147
|
+
group: "Design System"
|
|
148
|
+
message: "Text color"
|
|
149
|
+
default: "#111827"
|
|
150
|
+
|
|
151
|
+
- id: color-text-secondary
|
|
152
|
+
type: text
|
|
153
|
+
group: "Design System"
|
|
154
|
+
message: "Secondary text color"
|
|
155
|
+
default: "#6B7280"
|
|
156
|
+
|
|
157
|
+
- id: corner-radius
|
|
158
|
+
type: select
|
|
159
|
+
group: "Design System"
|
|
160
|
+
message: "Corner radius"
|
|
161
|
+
default: rounded
|
|
162
|
+
options:
|
|
163
|
+
- { value: sharp, label: "Sharp (0-2px)", hint: "Minimal rounding" }
|
|
164
|
+
- { value: rounded, label: "Rounded (8-12px)", hint: "Standard corners" }
|
|
165
|
+
- { value: pill, label: "Pill (999px)", hint: "Fully rounded" }
|
|
166
|
+
|
|
167
|
+
- id: button-style
|
|
168
|
+
type: text
|
|
169
|
+
group: "Design System"
|
|
170
|
+
message: "Button style"
|
|
171
|
+
default: "filled with label"
|
|
172
|
+
|
|
173
|
+
- id: card-style
|
|
174
|
+
type: text
|
|
175
|
+
group: "Design System"
|
|
176
|
+
message: "Card style"
|
|
177
|
+
default: "elevated with shadow"
|
|
178
|
+
|
|
179
|
+
- id: spacing
|
|
180
|
+
type: select
|
|
181
|
+
group: "Design System"
|
|
182
|
+
message: "Spacing"
|
|
183
|
+
default: comfortable
|
|
184
|
+
options:
|
|
185
|
+
- { value: compact, label: "Compact", hint: "Dense layout" }
|
|
186
|
+
- { value: comfortable, label: "Comfortable", hint: "Balanced whitespace" }
|
|
187
|
+
- { value: spacious, label: "Spacious", hint: "Generous whitespace" }
|
|
188
|
+
|
|
189
|
+
# ── Design Direction ─────────────────────────────────────
|
|
190
|
+
- id: mood
|
|
191
|
+
type: text
|
|
192
|
+
group: "Design Direction"
|
|
193
|
+
message: "Design mood"
|
|
194
|
+
placeholder: "e.g., vibrant-competitive, calm-professional"
|
|
195
|
+
validate:
|
|
196
|
+
- rule: required
|
|
197
|
+
|
|
198
|
+
- id: references
|
|
199
|
+
type: text
|
|
200
|
+
group: "Design Direction"
|
|
201
|
+
message: "Style references"
|
|
202
|
+
placeholder: "Comma-separated app names for style inspiration"
|
|
203
|
+
default: ""
|
|
204
|
+
required: false
|
|
205
|
+
|
|
206
|
+
# ── Screens ──────────────────────────────────────────────
|
|
207
|
+
- id: screen-1-name
|
|
208
|
+
type: text
|
|
209
|
+
group: "Screens"
|
|
210
|
+
message: "Screen 1 name"
|
|
211
|
+
validate:
|
|
212
|
+
- rule: required
|
|
213
|
+
|
|
214
|
+
- id: screen-1-description
|
|
215
|
+
type: text
|
|
216
|
+
group: "Screens"
|
|
217
|
+
message: "Screen 1 description"
|
|
218
|
+
validate:
|
|
219
|
+
- rule: required
|
|
220
|
+
- rule: minLength
|
|
221
|
+
value: 5
|
|
222
|
+
|
|
223
|
+
- id: screen-1-elements
|
|
224
|
+
type: text
|
|
225
|
+
group: "Screens"
|
|
226
|
+
message: "Screen 1 UI elements"
|
|
227
|
+
placeholder: "Comma-separated UI elements"
|
|
228
|
+
validate:
|
|
229
|
+
- rule: required
|
|
230
|
+
|
|
231
|
+
- id: screen-2-name
|
|
232
|
+
type: text
|
|
233
|
+
group: "Screens"
|
|
234
|
+
message: "Screen 2 name"
|
|
235
|
+
validate:
|
|
236
|
+
- rule: required
|
|
237
|
+
|
|
238
|
+
- id: screen-2-description
|
|
239
|
+
type: text
|
|
240
|
+
group: "Screens"
|
|
241
|
+
message: "Screen 2 description"
|
|
242
|
+
validate:
|
|
243
|
+
- rule: required
|
|
244
|
+
- rule: minLength
|
|
245
|
+
value: 5
|
|
246
|
+
|
|
247
|
+
- id: screen-2-elements
|
|
248
|
+
type: text
|
|
249
|
+
group: "Screens"
|
|
250
|
+
message: "Screen 2 UI elements"
|
|
251
|
+
placeholder: "Comma-separated UI elements"
|
|
252
|
+
validate:
|
|
253
|
+
- rule: required
|
|
254
|
+
|
|
255
|
+
- id: add-more-screens
|
|
256
|
+
type: confirm
|
|
257
|
+
group: "Screens"
|
|
258
|
+
message: "Add more screen definitions in the output file?"
|
|
259
|
+
default: false
|
|
260
|
+
|
|
261
|
+
# ── Game-Specific ────────────────────────────────────────
|
|
262
|
+
- id: character-1-archetype
|
|
263
|
+
type: text
|
|
264
|
+
group: "Game-Specific"
|
|
265
|
+
message: "Character 1 archetype"
|
|
266
|
+
when:
|
|
267
|
+
field: platform
|
|
268
|
+
equals: mobile-game
|
|
269
|
+
validate:
|
|
270
|
+
- rule: required
|
|
271
|
+
|
|
272
|
+
- id: character-1-traits
|
|
273
|
+
type: text
|
|
274
|
+
group: "Game-Specific"
|
|
275
|
+
message: "Character 1 traits"
|
|
276
|
+
when:
|
|
277
|
+
field: platform
|
|
278
|
+
equals: mobile-game
|
|
279
|
+
validate:
|
|
280
|
+
- rule: required
|
|
281
|
+
|
|
282
|
+
- id: character-1-ability
|
|
283
|
+
type: text
|
|
284
|
+
group: "Game-Specific"
|
|
285
|
+
message: "Character 1 special ability"
|
|
286
|
+
when:
|
|
287
|
+
field: platform
|
|
288
|
+
equals: mobile-game
|
|
289
|
+
validate:
|
|
290
|
+
- rule: required
|
|
291
|
+
|
|
292
|
+
- id: character-1-visual
|
|
293
|
+
type: text
|
|
294
|
+
group: "Game-Specific"
|
|
295
|
+
message: "Character 1 visual description"
|
|
296
|
+
when:
|
|
297
|
+
field: platform
|
|
298
|
+
equals: mobile-game
|
|
299
|
+
validate:
|
|
300
|
+
- rule: required
|
|
301
|
+
|
|
302
|
+
- id: game-stats
|
|
303
|
+
type: text
|
|
304
|
+
group: "Game-Specific"
|
|
305
|
+
message: "Game stats"
|
|
306
|
+
when:
|
|
307
|
+
field: platform
|
|
308
|
+
equals: mobile-game
|
|
309
|
+
placeholder: "Comma-separated stats (e.g., HP, Attack, Defense)"
|
|
310
|
+
validate:
|
|
311
|
+
- rule: required
|
|
312
|
+
|
|
313
|
+
- id: game-obstacles
|
|
314
|
+
type: text
|
|
315
|
+
group: "Game-Specific"
|
|
316
|
+
message: "Obstacles"
|
|
317
|
+
when:
|
|
318
|
+
field: platform
|
|
319
|
+
equals: mobile-game
|
|
320
|
+
placeholder: "Comma-separated obstacles"
|
|
321
|
+
validate:
|
|
322
|
+
- rule: required
|
|
323
|
+
|
|
324
|
+
- id: game-resources
|
|
325
|
+
type: text
|
|
326
|
+
group: "Game-Specific"
|
|
327
|
+
message: "Resources"
|
|
328
|
+
when:
|
|
329
|
+
field: platform
|
|
330
|
+
equals: mobile-game
|
|
331
|
+
placeholder: "Comma-separated resources"
|
|
332
|
+
validate:
|
|
333
|
+
- rule: required
|
|
334
|
+
|
|
335
|
+
- id: game-win-condition
|
|
336
|
+
type: text
|
|
337
|
+
group: "Game-Specific"
|
|
338
|
+
message: "Win condition"
|
|
339
|
+
when:
|
|
340
|
+
field: platform
|
|
341
|
+
equals: mobile-game
|
|
342
|
+
validate:
|
|
343
|
+
- rule: required
|
|
344
|
+
|
|
345
|
+
- id: has-multiplayer
|
|
346
|
+
type: confirm
|
|
347
|
+
group: "Game-Specific"
|
|
348
|
+
message: "Has multiplayer?"
|
|
349
|
+
when:
|
|
350
|
+
field: platform
|
|
351
|
+
equals: mobile-game
|
|
352
|
+
default: false
|
|
353
|
+
|
|
354
|
+
- id: max-players
|
|
355
|
+
type: number
|
|
356
|
+
group: "Game-Specific"
|
|
357
|
+
message: "Max players"
|
|
358
|
+
when:
|
|
359
|
+
all:
|
|
360
|
+
- { field: platform, equals: mobile-game }
|
|
361
|
+
- { field: has-multiplayer, equals: true }
|
|
362
|
+
default: 4
|
|
363
|
+
min: 2
|
|
364
|
+
max: 100
|
|
365
|
+
|
|
366
|
+
- id: multiplayer-mode
|
|
367
|
+
type: text
|
|
368
|
+
group: "Game-Specific"
|
|
369
|
+
message: "Multiplayer mode"
|
|
370
|
+
when:
|
|
371
|
+
all:
|
|
372
|
+
- { field: platform, equals: mobile-game }
|
|
373
|
+
- { field: has-multiplayer, equals: true }
|
|
374
|
+
default: "co-op"
|
|
375
|
+
placeholder: "e.g., co-op, PvP"
|
|
376
|
+
|
|
377
|
+
- id: online-multiplayer
|
|
378
|
+
type: confirm
|
|
379
|
+
group: "Game-Specific"
|
|
380
|
+
message: "Online multiplayer?"
|
|
381
|
+
when:
|
|
382
|
+
all:
|
|
383
|
+
- { field: platform, equals: mobile-game }
|
|
384
|
+
- { field: has-multiplayer, equals: true }
|
|
385
|
+
default: true
|
|
386
|
+
|
|
387
|
+
# ── Web-Specific ─────────────────────────────────────────
|
|
388
|
+
- id: web-layout
|
|
389
|
+
type: text
|
|
390
|
+
group: "Web-Specific"
|
|
391
|
+
message: "Layout"
|
|
392
|
+
when:
|
|
393
|
+
any:
|
|
394
|
+
- { field: platform, equals: web-saas }
|
|
395
|
+
- { field: platform, equals: landing-page }
|
|
396
|
+
placeholder: "e.g., sidebar, top-nav"
|
|
397
|
+
validate:
|
|
398
|
+
- rule: required
|
|
399
|
+
|
|
400
|
+
- id: web-features
|
|
401
|
+
type: text
|
|
402
|
+
group: "Web-Specific"
|
|
403
|
+
message: "Key features"
|
|
404
|
+
when:
|
|
405
|
+
any:
|
|
406
|
+
- { field: platform, equals: web-saas }
|
|
407
|
+
- { field: platform, equals: landing-page }
|
|
408
|
+
placeholder: "Comma-separated features"
|
|
409
|
+
validate:
|
|
410
|
+
- rule: required
|
|
411
|
+
|
|
412
|
+
# ── Save Brief ───────────────────────────────────────────
|
|
413
|
+
- id: brief-name
|
|
414
|
+
type: text
|
|
415
|
+
group: "Save Brief"
|
|
416
|
+
message: "Save brief as"
|
|
417
|
+
placeholder: "my-app-brief"
|
|
418
|
+
validate:
|
|
419
|
+
- rule: required
|
|
420
|
+
|
|
421
|
+
- id: confirm-brief
|
|
422
|
+
type: confirm
|
|
423
|
+
group: "Save Brief"
|
|
424
|
+
message: "Confirm brief?"
|
|
425
|
+
default: true
|
|
426
|
+
|
|
427
|
+
output:
|
|
428
|
+
format: yaml
|
|
429
|
+
path: concept-brief.yaml
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
name: "Cost Analysis Report"
|
|
3
|
+
description: "Configure and view AI generation cost analysis"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
|
|
6
|
+
theme:
|
|
7
|
+
preset: tokyonight
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- id: report-type
|
|
11
|
+
type: select
|
|
12
|
+
group: "Report Type"
|
|
13
|
+
message: "What kind of cost report?"
|
|
14
|
+
options:
|
|
15
|
+
- { value: full, label: "Full Report", hint: "Complete cost breakdown across all runs" }
|
|
16
|
+
- { value: today, label: "Today's Costs", hint: "Filter to today's runs only" }
|
|
17
|
+
- { value: since, label: "Since Date", hint: "Filter runs since a specific date" }
|
|
18
|
+
- { value: single-run, label: "Single Run", hint: "Inspect a specific run by ID" }
|
|
19
|
+
default: full
|
|
20
|
+
|
|
21
|
+
- id: since-date
|
|
22
|
+
type: text
|
|
23
|
+
group: "Report Type"
|
|
24
|
+
message: "Start date"
|
|
25
|
+
placeholder: "YYYY-MM-DD"
|
|
26
|
+
when:
|
|
27
|
+
field: report-type
|
|
28
|
+
equals: since
|
|
29
|
+
validate:
|
|
30
|
+
- rule: required
|
|
31
|
+
- rule: pattern
|
|
32
|
+
value: "^\\d{4}-\\d{2}-\\d{2}$"
|
|
33
|
+
message: "Must be in YYYY-MM-DD format"
|
|
34
|
+
|
|
35
|
+
- id: run-id
|
|
36
|
+
type: text
|
|
37
|
+
group: "Report Type"
|
|
38
|
+
message: "Run ID to inspect"
|
|
39
|
+
when:
|
|
40
|
+
field: report-type
|
|
41
|
+
equals: single-run
|
|
42
|
+
validate:
|
|
43
|
+
- rule: required
|
|
44
|
+
|
|
45
|
+
- id: output-format
|
|
46
|
+
type: select
|
|
47
|
+
group: "Output Options"
|
|
48
|
+
message: "Output format"
|
|
49
|
+
options:
|
|
50
|
+
- { value: interactive, label: "Interactive", hint: "Browse runs and inspect details" }
|
|
51
|
+
- { value: summary, label: "Summary", hint: "Cost analytics overview only" }
|
|
52
|
+
- { value: json, label: "JSON", hint: "Machine-readable JSON output" }
|
|
53
|
+
- { value: markdown, label: "Markdown Report", hint: "Save as docs/costs-report.md" }
|
|
54
|
+
default: interactive
|
|
55
|
+
|
|
56
|
+
- id: save-report
|
|
57
|
+
type: confirm
|
|
58
|
+
group: "Output Options"
|
|
59
|
+
message: "Save report to docs/costs-report.md?"
|
|
60
|
+
default: true
|
|
61
|
+
|
|
62
|
+
- id: confirm-analyze
|
|
63
|
+
type: confirm
|
|
64
|
+
group: "Output Options"
|
|
65
|
+
message: "Run cost analysis?"
|
|
66
|
+
default: true
|
|
67
|
+
|
|
68
|
+
output:
|
|
69
|
+
format: json
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
name: Pipeline Demo
|
|
3
|
+
description: A multi-stage wizard demonstrating the pipeline concept
|
|
4
|
+
|
|
5
|
+
steps:
|
|
6
|
+
- id: stage
|
|
7
|
+
type: note
|
|
8
|
+
message: Stage 1 - Project Setup
|
|
9
|
+
description: First we'll set up your project basics
|
|
10
|
+
|
|
11
|
+
- id: project-name
|
|
12
|
+
type: text
|
|
13
|
+
message: What is your project name?
|
|
14
|
+
validate:
|
|
15
|
+
- rule: required
|
|
16
|
+
|
|
17
|
+
- id: stage2
|
|
18
|
+
type: note
|
|
19
|
+
message: Stage 2 - Configuration
|
|
20
|
+
description: Now let's configure your project
|
|
21
|
+
|
|
22
|
+
- id: language
|
|
23
|
+
type: select
|
|
24
|
+
message: Programming language?
|
|
25
|
+
options:
|
|
26
|
+
- { value: typescript, label: TypeScript }
|
|
27
|
+
- { value: javascript, label: JavaScript }
|
|
28
|
+
|
|
29
|
+
- id: confirm
|
|
30
|
+
type: confirm
|
|
31
|
+
message: Looks good?
|
|
32
|
+
default: true
|
|
33
|
+
|
|
34
|
+
output:
|
|
35
|
+
format: json
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
name: "Web Scraper CLI"
|
|
3
|
+
description: "Choose and run a web scraper for app store data collection"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
|
|
6
|
+
theme:
|
|
7
|
+
preset: catppuccin
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- id: scraper-info
|
|
11
|
+
type: note
|
|
12
|
+
group: "Scraper Selection"
|
|
13
|
+
message: "Available Scrapers"
|
|
14
|
+
description: "Select a scraper to run. Each scraper collects app metadata from its respective platform."
|
|
15
|
+
|
|
16
|
+
- id: scraper
|
|
17
|
+
type: select
|
|
18
|
+
group: "Scraper Selection"
|
|
19
|
+
message: "Pick a scraper"
|
|
20
|
+
options:
|
|
21
|
+
- { value: reelshort, label: "ReelShort", hint: "Scrape all shows from reelshort.com" }
|
|
22
|
+
- { value: dramabox, label: "DramaBox", hint: "Scrape all shows from dramaboxdb.com" }
|
|
23
|
+
- { value: goodshort, label: "GoodShort", hint: "Scrape dramas from goodshort.com" }
|
|
24
|
+
- { value: netshort, label: "NetShort", hint: "Scrape dramas from netshort.com" }
|
|
25
|
+
- { value: shorttv, label: "ShortTV", hint: "Scrape dramas from shorttv.live/ShortMax" }
|
|
26
|
+
- { value: mydrama, label: "MyDrama", hint: "Scrape dramas from my-drama.com" }
|
|
27
|
+
- { value: dribbble, label: "Dribbble Inspirations", hint: "Scrape App Store preview shots from Dribbble" }
|
|
28
|
+
|
|
29
|
+
- id: output-dir
|
|
30
|
+
type: path
|
|
31
|
+
group: "Output Settings"
|
|
32
|
+
message: "Output directory for scraped data"
|
|
33
|
+
default: "./data/scraped"
|
|
34
|
+
placeholder: "./data/scraped"
|
|
35
|
+
|
|
36
|
+
- id: output-format
|
|
37
|
+
type: select
|
|
38
|
+
group: "Output Settings"
|
|
39
|
+
message: "Output format for scraped data"
|
|
40
|
+
options:
|
|
41
|
+
- { value: json, label: "JSON" }
|
|
42
|
+
- { value: csv, label: "CSV" }
|
|
43
|
+
default: json
|
|
44
|
+
|
|
45
|
+
- id: confirm-scrape
|
|
46
|
+
type: confirm
|
|
47
|
+
group: "Confirmation"
|
|
48
|
+
message: "Start scraping?"
|
|
49
|
+
default: true
|
|
50
|
+
|
|
51
|
+
output:
|
|
52
|
+
format: json
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
meta:
|
|
2
|
+
name: Catppuccin Themed Setup
|
|
3
|
+
description: A project setup wizard using the Catppuccin color preset
|
|
4
|
+
|
|
5
|
+
theme:
|
|
6
|
+
preset: catppuccin
|
|
7
|
+
|
|
8
|
+
steps:
|
|
9
|
+
- id: project-name
|
|
10
|
+
type: text
|
|
11
|
+
message: What is your project name?
|
|
12
|
+
validate:
|
|
13
|
+
- rule: required
|
|
14
|
+
- rule: minLength
|
|
15
|
+
value: 2
|
|
16
|
+
|
|
17
|
+
- id: framework
|
|
18
|
+
type: select
|
|
19
|
+
message: Choose a framework
|
|
20
|
+
options:
|
|
21
|
+
- { value: nextjs, label: "Next.js" }
|
|
22
|
+
- { value: remix, label: Remix }
|
|
23
|
+
- { value: astro, label: Astro }
|
|
24
|
+
|
|
25
|
+
- id: confirm
|
|
26
|
+
type: confirm
|
|
27
|
+
message: Create project?
|
|
28
|
+
default: true
|
|
29
|
+
|
|
30
|
+
output:
|
|
31
|
+
format: json
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "grimoire-wizard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Config-driven CLI wizard framework. Define interactive terminal wizards in YAML/JSON with back-navigation, conditional branching, theming, and structured output.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
"inquirer",
|
|
48
48
|
"clack"
|
|
49
49
|
],
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://github.com/YosefHayim/grimoire.git"
|
|
53
|
+
},
|
|
50
54
|
"author": "Yosef Hayim (https://github.com/YosefHayim)",
|
|
51
55
|
"license": "MIT",
|
|
52
56
|
"engines": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|