@demoscript/cli 1.1.4 → 1.1.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.
@@ -0,0 +1,847 @@
1
+ {
2
+ "$id": "https://demoscript.dev/demo.schema.json",
3
+ "title": "DemoScript Configuration",
4
+ "description": "Schema for DemoScript demo YAML files",
5
+ "type": "object",
6
+ "required": ["title", "steps"],
7
+ "properties": {
8
+ "title": {
9
+ "type": "string",
10
+ "description": "Demo title"
11
+ },
12
+ "description": {
13
+ "type": "string",
14
+ "description": "Demo description"
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "description": "Demo version"
19
+ },
20
+ "author": {
21
+ "type": "string",
22
+ "description": "Demo author"
23
+ },
24
+ "tags": {
25
+ "type": "array",
26
+ "items": { "type": "string" },
27
+ "description": "Tags for categorization"
28
+ },
29
+ "metadata": { "$ref": "#/$defs/DemoMetadata" },
30
+ "settings": { "$ref": "#/$defs/DemoSettings" },
31
+ "steps": {
32
+ "type": "array",
33
+ "items": { "$ref": "#/$defs/StepOrGroup" },
34
+ "description": "Array of demo steps or step groups"
35
+ }
36
+ },
37
+ "$defs": {
38
+ "DemoSettings": {
39
+ "type": "object",
40
+ "properties": {
41
+ "base_url": {
42
+ "type": "string",
43
+ "format": "uri",
44
+ "description": "Base URL for REST API calls"
45
+ },
46
+ "openapi": {
47
+ "type": "string",
48
+ "format": "uri",
49
+ "description": "OpenAPI spec URL for auto-generating form fields"
50
+ },
51
+ "theme": { "$ref": "#/$defs/ThemeSettings" },
52
+ "polling": { "$ref": "#/$defs/PollingDefaults" },
53
+ "links": {
54
+ "type": "object",
55
+ "additionalProperties": { "$ref": "#/$defs/LinkHandler" }
56
+ },
57
+ "effects": { "$ref": "#/$defs/EffectsSettings" },
58
+ "auth": { "$ref": "#/$defs/AuthSettings" },
59
+ "dashboard": { "$ref": "#/$defs/DashboardSettings" },
60
+ "sidebar": { "$ref": "#/$defs/SidebarSettings" },
61
+ "diagram": { "$ref": "#/$defs/DiagramSettings" },
62
+ "health_checks": {
63
+ "type": "array",
64
+ "items": { "$ref": "#/$defs/HealthCheck" },
65
+ "description": "Service health check endpoints"
66
+ }
67
+ }
68
+ },
69
+ "EffectsSettings": {
70
+ "type": "object",
71
+ "description": "Visual effects configuration",
72
+ "properties": {
73
+ "confetti": {
74
+ "type": "boolean",
75
+ "description": "Fire confetti on step completion (default: true)"
76
+ },
77
+ "sounds": {
78
+ "type": "boolean",
79
+ "description": "Play success/error sounds (default: true)"
80
+ },
81
+ "transitions": {
82
+ "type": "boolean",
83
+ "description": "Animate step changes (default: true)"
84
+ },
85
+ "counters": {
86
+ "type": "boolean",
87
+ "description": "Animate numeric values (default: true)"
88
+ },
89
+ "neon_glow": {
90
+ "type": "boolean",
91
+ "description": "Neon text effects in dark mode (default: true)"
92
+ },
93
+ "grid_background": {
94
+ "type": "boolean",
95
+ "description": "Animated grid background in dark mode (default: true)"
96
+ },
97
+ "glow_orbs": {
98
+ "type": "boolean",
99
+ "description": "Floating glow orbs in dark mode (default: true)"
100
+ },
101
+ "sound_volume": {
102
+ "type": "number",
103
+ "minimum": 0,
104
+ "maximum": 1,
105
+ "description": "Sound volume (0-1, default: 0.3)"
106
+ }
107
+ }
108
+ },
109
+ "AuthSettings": {
110
+ "type": "object",
111
+ "description": "Authentication settings for protected demos",
112
+ "properties": {
113
+ "enabled": {
114
+ "type": "boolean",
115
+ "description": "Enable password protection (default: false)"
116
+ },
117
+ "password": {
118
+ "type": "string",
119
+ "description": "Password required to view the demo"
120
+ },
121
+ "password_hash": {
122
+ "type": "string",
123
+ "description": "SHA-256 hash of password (for static builds)"
124
+ },
125
+ "message": {
126
+ "type": "string",
127
+ "description": "Custom message on login screen"
128
+ },
129
+ "title": {
130
+ "type": "string",
131
+ "description": "Custom title on login screen"
132
+ }
133
+ }
134
+ },
135
+ "DashboardSettings": {
136
+ "type": "object",
137
+ "description": "Dashboard/overview screen settings",
138
+ "properties": {
139
+ "enabled": {
140
+ "type": "boolean",
141
+ "description": "Show dashboard on demo load (default: false)"
142
+ },
143
+ "show_stats": {
144
+ "type": "boolean",
145
+ "description": "Show step count and duration estimate (default: true)"
146
+ },
147
+ "show_health": {
148
+ "type": "boolean",
149
+ "description": "Show service health status (default: true)"
150
+ },
151
+ "show_description": {
152
+ "type": "boolean",
153
+ "description": "Show demo description (default: true)"
154
+ },
155
+ "data_cards": {
156
+ "type": "array",
157
+ "items": { "$ref": "#/$defs/DataCard" },
158
+ "description": "Live data stat cards"
159
+ },
160
+ "data_lists": {
161
+ "type": "array",
162
+ "items": { "$ref": "#/$defs/DataList" },
163
+ "description": "Data lists (transactions, items)"
164
+ }
165
+ }
166
+ },
167
+ "DataCard": {
168
+ "type": "object",
169
+ "required": ["label"],
170
+ "description": "Dashboard stat card configuration",
171
+ "properties": {
172
+ "label": {
173
+ "type": "string",
174
+ "description": "Card label"
175
+ },
176
+ "url": {
177
+ "type": "string",
178
+ "description": "API endpoint URL (supports ${base_url})"
179
+ },
180
+ "value": {
181
+ "oneOf": [{ "type": "string" }, { "type": "number" }],
182
+ "description": "JSON path to extract value or static value"
183
+ },
184
+ "type": {
185
+ "type": "string",
186
+ "enum": ["number", "text", "currency", "link"],
187
+ "description": "Value display type (default: text)"
188
+ },
189
+ "poll_interval": {
190
+ "type": "integer",
191
+ "minimum": 1000,
192
+ "description": "Polling interval in ms"
193
+ }
194
+ }
195
+ },
196
+ "DataList": {
197
+ "type": "object",
198
+ "required": ["label", "url", "items"],
199
+ "description": "Dashboard data list configuration",
200
+ "properties": {
201
+ "label": {
202
+ "type": "string",
203
+ "description": "List header label"
204
+ },
205
+ "url": {
206
+ "type": "string",
207
+ "description": "API endpoint URL"
208
+ },
209
+ "items": {
210
+ "type": "string",
211
+ "description": "JSON path to array (empty for root)"
212
+ },
213
+ "layout": {
214
+ "type": "string",
215
+ "enum": ["cards", "table"],
216
+ "description": "Display layout (default: cards)"
217
+ },
218
+ "limit": {
219
+ "type": "integer",
220
+ "minimum": 1,
221
+ "description": "Limit number of items"
222
+ },
223
+ "poll_interval": {
224
+ "type": "integer",
225
+ "minimum": 1000,
226
+ "description": "Polling interval in ms"
227
+ },
228
+ "empty_message": {
229
+ "type": "string",
230
+ "description": "Message when list is empty"
231
+ },
232
+ "card": { "$ref": "#/$defs/CardLayoutConfig" },
233
+ "columns": {
234
+ "type": "array",
235
+ "items": { "$ref": "#/$defs/TableColumnConfig" }
236
+ }
237
+ }
238
+ },
239
+ "CardLayoutConfig": {
240
+ "type": "object",
241
+ "required": ["title"],
242
+ "description": "Card layout configuration for data lists",
243
+ "properties": {
244
+ "badges": {
245
+ "type": "array",
246
+ "items": { "$ref": "#/$defs/BadgeConfig" }
247
+ },
248
+ "title": {
249
+ "type": "object",
250
+ "required": ["key"],
251
+ "properties": {
252
+ "key": { "type": "string" },
253
+ "type": {
254
+ "type": "string",
255
+ "enum": ["text", "currency", "number"]
256
+ },
257
+ "prefix_key": { "type": "string" },
258
+ "suffix_key": { "type": "string" }
259
+ }
260
+ },
261
+ "fields": {
262
+ "type": "array",
263
+ "items": { "$ref": "#/$defs/DataListField" }
264
+ }
265
+ }
266
+ },
267
+ "BadgeConfig": {
268
+ "type": "object",
269
+ "required": ["key"],
270
+ "properties": {
271
+ "key": { "type": "string" },
272
+ "label": { "type": "string" },
273
+ "variants": {
274
+ "type": "object",
275
+ "additionalProperties": {
276
+ "type": "string",
277
+ "enum": ["success", "info", "warning", "error", "default"]
278
+ }
279
+ }
280
+ }
281
+ },
282
+ "DataListField": {
283
+ "type": "object",
284
+ "required": ["key"],
285
+ "properties": {
286
+ "key": { "type": "string" },
287
+ "label": { "type": "string" },
288
+ "type": {
289
+ "type": "string",
290
+ "enum": ["text", "ref", "currency", "mono", "relative_time", "link"]
291
+ },
292
+ "link": { "type": "string", "description": "Link handler name (e.g., 'github', 'polygonscan')" },
293
+ "link_key": { "type": "string", "description": "Key within link handler (e.g., 'user', 'address', 'tx')" }
294
+ }
295
+ },
296
+ "TableColumnConfig": {
297
+ "type": "object",
298
+ "required": ["key", "label"],
299
+ "properties": {
300
+ "key": { "type": "string" },
301
+ "label": { "type": "string" },
302
+ "type": {
303
+ "type": "string",
304
+ "enum": ["text", "ref", "currency", "mono", "relative_time", "link"]
305
+ },
306
+ "link": { "type": "string", "description": "Link handler name (e.g., 'github', 'polygonscan')" },
307
+ "link_key": { "type": "string", "description": "Key within link handler (e.g., 'user', 'address', 'tx')" }
308
+ }
309
+ },
310
+ "SidebarSettings": {
311
+ "type": "object",
312
+ "description": "Sidebar navigation settings",
313
+ "properties": {
314
+ "enabled": {
315
+ "type": "boolean",
316
+ "description": "Enable sidebar navigation (default: false)"
317
+ },
318
+ "collapsed": {
319
+ "type": "boolean",
320
+ "description": "Start sidebar collapsed (default: false)"
321
+ },
322
+ "show_status": {
323
+ "type": "boolean",
324
+ "description": "Show step completion status (default: true)"
325
+ }
326
+ }
327
+ },
328
+ "DiagramSettings": {
329
+ "type": "object",
330
+ "description": "Flow diagram configuration",
331
+ "required": ["chart"],
332
+ "properties": {
333
+ "chart": {
334
+ "type": "string",
335
+ "description": "Mermaid flowchart syntax defining the diagram"
336
+ },
337
+ "position": {
338
+ "type": "string",
339
+ "enum": ["sticky", "sidebar", "toggle"],
340
+ "description": "Diagram display position (default: toggle)"
341
+ },
342
+ "height": {
343
+ "type": "integer",
344
+ "minimum": 100,
345
+ "description": "Diagram height in pixels (default: 300)"
346
+ }
347
+ }
348
+ },
349
+ "HealthCheck": {
350
+ "type": "object",
351
+ "required": ["name", "url"],
352
+ "properties": {
353
+ "name": {
354
+ "type": "string",
355
+ "description": "Display name for the service"
356
+ },
357
+ "url": {
358
+ "type": "string",
359
+ "description": "Health check endpoint URL"
360
+ },
361
+ "method": {
362
+ "type": "string",
363
+ "enum": ["GET", "HEAD"],
364
+ "description": "HTTP method (default: GET)"
365
+ },
366
+ "interval": {
367
+ "type": "integer",
368
+ "minimum": 1000,
369
+ "description": "Polling interval in ms (default: 10000)"
370
+ }
371
+ }
372
+ },
373
+ "DemoMetadata": {
374
+ "type": "object",
375
+ "description": "Additional demo metadata for gallery display",
376
+ "properties": {
377
+ "duration": {
378
+ "type": "string",
379
+ "description": "Estimated duration (e.g., '5 minutes')"
380
+ },
381
+ "difficulty": {
382
+ "type": "string",
383
+ "enum": ["beginner", "intermediate", "advanced"],
384
+ "description": "Difficulty level"
385
+ },
386
+ "category": {
387
+ "type": "string",
388
+ "description": "Demo category"
389
+ },
390
+ "thumbnail": {
391
+ "type": "string",
392
+ "description": "Thumbnail image URL or path"
393
+ }
394
+ }
395
+ },
396
+ "ThemeSettings": {
397
+ "type": "object",
398
+ "properties": {
399
+ "logo": { "type": "string" },
400
+ "primary_color": { "type": "string" }
401
+ }
402
+ },
403
+ "PollingDefaults": {
404
+ "type": "object",
405
+ "properties": {
406
+ "interval": { "type": "integer", "minimum": 100 },
407
+ "max_attempts": { "type": "integer", "minimum": 1 }
408
+ }
409
+ },
410
+ "LinkHandler": {
411
+ "type": "object",
412
+ "description": "Link handler with named URL templates. Use {value} as placeholder.",
413
+ "additionalProperties": { "type": "string" }
414
+ },
415
+ "BaseStep": {
416
+ "type": "object",
417
+ "properties": {
418
+ "title": { "type": "string", "description": "Step title" },
419
+ "id": { "type": "string", "description": "Unique identifier for goto targets" },
420
+ "goto": { "type": "string", "description": "Step ID to navigate to after completion" },
421
+ "diagram": { "type": "string", "description": "Diagram path to highlight (e.g., 'NodeA->NodeB' for edge, 'NodeA' for node)" }
422
+ }
423
+ },
424
+ "Choice": {
425
+ "type": "object",
426
+ "required": ["label", "goto"],
427
+ "properties": {
428
+ "label": { "type": "string" },
429
+ "description": { "type": "string" },
430
+ "goto": { "type": "string" }
431
+ }
432
+ },
433
+ "FormField": {
434
+ "type": "object",
435
+ "required": ["name"],
436
+ "properties": {
437
+ "name": { "type": "string" },
438
+ "label": { "type": "string" },
439
+ "type": { "enum": ["text", "number", "select", "textarea", "toggle", "slider"] },
440
+ "default": { "oneOf": [{ "type": "string" }, { "type": "number" }, { "type": "boolean" }] },
441
+ "required": { "type": "boolean" },
442
+ "readonly": { "type": "boolean" },
443
+ "hidden": { "type": "boolean" },
444
+ "placeholder": { "type": "string" },
445
+ "options": {
446
+ "type": "array",
447
+ "items": { "$ref": "#/$defs/SelectOption" }
448
+ },
449
+ "min": { "type": "number", "description": "Minimum value for slider" },
450
+ "max": { "type": "number", "description": "Maximum value for slider" },
451
+ "step": { "type": "number", "description": "Step increment for slider" }
452
+ }
453
+ },
454
+ "SelectOption": {
455
+ "type": "object",
456
+ "required": ["label", "value"],
457
+ "properties": {
458
+ "label": { "type": "string" },
459
+ "value": { "type": "string" }
460
+ }
461
+ },
462
+ "ResultField": {
463
+ "type": "object",
464
+ "description": "Defines how to display a response field. When auto-generated from OpenAPI, type is inferred from schema format and property name.",
465
+ "required": ["key"],
466
+ "properties": {
467
+ "key": { "type": "string", "description": "JSON path to extract value (e.g., 'user.name' or '[0].id')" },
468
+ "label": { "type": "string", "description": "Display label (defaults to formatted key name)" },
469
+ "type": {
470
+ "enum": ["text", "ref", "link", "currency", "code", "table", "json", "mono", "relative_time"],
471
+ "description": "Display type: text (default), ref (truncated identifier with copy button), link, currency, code, table, json (tree view), mono (monospace), relative_time"
472
+ },
473
+ "link": { "type": "string", "description": "Link handler name (e.g., 'github', 'polygonscan')" },
474
+ "link_key": { "type": "string", "description": "Key within link handler (e.g., 'user', 'address', 'tx')" },
475
+ "format": { "type": "string" },
476
+ "columns": {
477
+ "type": "array",
478
+ "items": { "$ref": "#/$defs/TableColumn" },
479
+ "description": "Column definitions for table type"
480
+ },
481
+ "expandedDepth": { "type": "integer", "minimum": 0, "description": "Levels to auto-expand in JSON viewer (default: 2)" }
482
+ }
483
+ },
484
+ "TableColumn": {
485
+ "type": "object",
486
+ "required": ["key", "label"],
487
+ "properties": {
488
+ "key": { "type": "string" },
489
+ "label": { "type": "string" }
490
+ }
491
+ },
492
+ "PollingConfig": {
493
+ "type": "object",
494
+ "required": ["endpoint", "success_when"],
495
+ "properties": {
496
+ "endpoint": { "type": "string" },
497
+ "success_when": { "type": "string" },
498
+ "failure_when": { "type": "string" },
499
+ "interval": { "type": "integer", "minimum": 100 },
500
+ "max_attempts": { "type": "integer", "minimum": 1 },
501
+ "save": {
502
+ "type": "object",
503
+ "additionalProperties": { "type": "string" }
504
+ }
505
+ }
506
+ },
507
+ "StepOrGroup": {
508
+ "oneOf": [
509
+ { "$ref": "#/$defs/StepGroup" },
510
+ { "$ref": "#/$defs/Step" }
511
+ ]
512
+ },
513
+ "StepGroup": {
514
+ "type": "object",
515
+ "required": ["group", "steps"],
516
+ "properties": {
517
+ "group": { "type": "string", "description": "Group name" },
518
+ "description": { "type": "string" },
519
+ "collapsed": { "type": "boolean", "description": "Start collapsed" },
520
+ "steps": {
521
+ "type": "array",
522
+ "items": { "$ref": "#/$defs/Step" }
523
+ }
524
+ }
525
+ },
526
+ "Step": {
527
+ "oneOf": [
528
+ { "$ref": "#/$defs/SlideStep" },
529
+ { "$ref": "#/$defs/SlideStepExplicit" },
530
+ { "$ref": "#/$defs/RestStep" },
531
+ { "$ref": "#/$defs/RestStepExplicit" },
532
+ { "$ref": "#/$defs/ShellStep" },
533
+ { "$ref": "#/$defs/ShellStepExplicit" },
534
+ { "$ref": "#/$defs/BrowserStep" },
535
+ { "$ref": "#/$defs/BrowserStepExplicit" },
536
+ { "$ref": "#/$defs/CodeStep" },
537
+ { "$ref": "#/$defs/CodeStepExplicit" },
538
+ { "$ref": "#/$defs/WaitStep" },
539
+ { "$ref": "#/$defs/WaitStepExplicit" },
540
+ { "$ref": "#/$defs/AssertStep" },
541
+ { "$ref": "#/$defs/AssertStepExplicit" },
542
+ { "$ref": "#/$defs/GraphQLStep" },
543
+ { "$ref": "#/$defs/GraphQLStepExplicit" },
544
+ { "$ref": "#/$defs/DatabaseStep" },
545
+ { "$ref": "#/$defs/DatabaseStepExplicit" }
546
+ ]
547
+ },
548
+ "SlideStep": {
549
+ "type": "object",
550
+ "required": ["slide"],
551
+ "properties": {
552
+ "slide": { "type": "string", "description": "Markdown content" },
553
+ "title": { "type": "string" },
554
+ "id": { "type": "string" },
555
+ "goto": { "type": "string" },
556
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
557
+ "choices": {
558
+ "type": "array",
559
+ "items": { "$ref": "#/$defs/Choice" }
560
+ }
561
+ }
562
+ },
563
+ "SlideStepExplicit": {
564
+ "type": "object",
565
+ "required": ["step", "content"],
566
+ "properties": {
567
+ "step": { "const": "slide" },
568
+ "content": { "type": "string", "description": "Markdown content" },
569
+ "title": { "type": "string" },
570
+ "id": { "type": "string" },
571
+ "goto": { "type": "string" },
572
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
573
+ "choices": {
574
+ "type": "array",
575
+ "items": { "$ref": "#/$defs/Choice" }
576
+ }
577
+ }
578
+ },
579
+ "RestStep": {
580
+ "type": "object",
581
+ "required": ["rest"],
582
+ "properties": {
583
+ "rest": { "type": "string", "description": "HTTP method and endpoint (e.g., 'GET /users')" },
584
+ "title": { "type": "string" },
585
+ "id": { "type": "string" },
586
+ "goto": { "type": "string" },
587
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
588
+ "description": { "type": "string" },
589
+ "base_url": { "type": "string" },
590
+ "openapi": { "type": "string", "format": "uri", "description": "Per-step OpenAPI spec URL override" },
591
+ "headers": { "type": "object", "additionalProperties": { "type": "string" } },
592
+ "body": { "type": "object" },
593
+ "form": { "type": "array", "items": { "$ref": "#/$defs/FormField" } },
594
+ "defaults": { "type": "object", "description": "Default values for OpenAPI-generated form fields" },
595
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
596
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." },
597
+ "wait_for": { "type": "string" },
598
+ "poll": { "$ref": "#/$defs/PollingConfig" },
599
+ "show_curl": { "type": "boolean", "description": "Show curl command for this request (default: false)" }
600
+ }
601
+ },
602
+ "RestStepExplicit": {
603
+ "type": "object",
604
+ "required": ["step", "method", "path"],
605
+ "properties": {
606
+ "step": { "const": "rest" },
607
+ "method": { "enum": ["GET", "POST", "PUT", "PATCH", "DELETE"] },
608
+ "path": { "type": "string", "description": "API endpoint path" },
609
+ "title": { "type": "string" },
610
+ "id": { "type": "string" },
611
+ "goto": { "type": "string" },
612
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
613
+ "description": { "type": "string" },
614
+ "base_url": { "type": "string" },
615
+ "openapi": { "type": "string", "format": "uri", "description": "Per-step OpenAPI spec URL override" },
616
+ "headers": { "type": "object", "additionalProperties": { "type": "string" } },
617
+ "body": { "type": "object" },
618
+ "form": { "type": "array", "items": { "$ref": "#/$defs/FormField" } },
619
+ "defaults": { "type": "object", "description": "Default values for OpenAPI-generated form fields" },
620
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
621
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." },
622
+ "wait_for": { "type": "string" },
623
+ "poll": { "$ref": "#/$defs/PollingConfig" },
624
+ "show_curl": { "type": "boolean", "description": "Show curl command for this request (default: false)" }
625
+ }
626
+ },
627
+ "ShellStep": {
628
+ "type": "object",
629
+ "required": ["shell"],
630
+ "properties": {
631
+ "shell": { "type": "string", "description": "Shell command to execute" },
632
+ "title": { "type": "string" },
633
+ "id": { "type": "string" },
634
+ "goto": { "type": "string" },
635
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
636
+ "description": { "type": "string" },
637
+ "shell_type": { "enum": ["bash", "powershell", "cmd"] },
638
+ "workdir": { "type": "string" },
639
+ "confirm": { "type": "boolean" },
640
+ "env": { "type": "object", "additionalProperties": { "type": "string" } },
641
+ "save": { "type": "object", "additionalProperties": { "type": "string" } }
642
+ }
643
+ },
644
+ "ShellStepExplicit": {
645
+ "type": "object",
646
+ "required": ["step", "command"],
647
+ "properties": {
648
+ "step": { "const": "shell" },
649
+ "command": { "type": "string", "description": "Shell command to execute" },
650
+ "title": { "type": "string" },
651
+ "id": { "type": "string" },
652
+ "goto": { "type": "string" },
653
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
654
+ "description": { "type": "string" },
655
+ "shell_type": { "enum": ["bash", "powershell", "cmd"] },
656
+ "workdir": { "type": "string" },
657
+ "confirm": { "type": "boolean" },
658
+ "env": { "type": "object", "additionalProperties": { "type": "string" } },
659
+ "save": { "type": "object", "additionalProperties": { "type": "string" } }
660
+ }
661
+ },
662
+ "BrowserStep": {
663
+ "type": "object",
664
+ "required": ["browser"],
665
+ "properties": {
666
+ "browser": { "type": "string", "description": "URL to open" },
667
+ "title": { "type": "string" },
668
+ "id": { "type": "string" },
669
+ "goto": { "type": "string" },
670
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
671
+ "description": { "type": "string" },
672
+ "screenshot": { "type": "string" }
673
+ }
674
+ },
675
+ "BrowserStepExplicit": {
676
+ "type": "object",
677
+ "required": ["step", "url"],
678
+ "properties": {
679
+ "step": { "const": "browser" },
680
+ "url": { "type": "string", "description": "URL to open" },
681
+ "title": { "type": "string" },
682
+ "id": { "type": "string" },
683
+ "goto": { "type": "string" },
684
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
685
+ "description": { "type": "string" },
686
+ "screenshot": { "type": "string" }
687
+ }
688
+ },
689
+ "CodeStep": {
690
+ "type": "object",
691
+ "required": ["code"],
692
+ "properties": {
693
+ "code": { "type": "string", "description": "Source code to display" },
694
+ "title": { "type": "string" },
695
+ "id": { "type": "string" },
696
+ "goto": { "type": "string" },
697
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
698
+ "language": { "type": "string" },
699
+ "filename": { "type": "string" },
700
+ "highlight": { "type": "array", "items": { "type": "integer" } }
701
+ }
702
+ },
703
+ "CodeStepExplicit": {
704
+ "type": "object",
705
+ "required": ["step", "source"],
706
+ "properties": {
707
+ "step": { "const": "code" },
708
+ "source": { "type": "string", "description": "Source code to display" },
709
+ "title": { "type": "string" },
710
+ "id": { "type": "string" },
711
+ "goto": { "type": "string" },
712
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
713
+ "language": { "type": "string" },
714
+ "filename": { "type": "string" },
715
+ "highlight": { "type": "array", "items": { "type": "integer" } }
716
+ }
717
+ },
718
+ "WaitStep": {
719
+ "type": "object",
720
+ "required": ["wait"],
721
+ "properties": {
722
+ "wait": { "type": "integer", "minimum": 0, "description": "Duration in milliseconds" },
723
+ "title": { "type": "string" },
724
+ "id": { "type": "string" },
725
+ "goto": { "type": "string" },
726
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
727
+ "message": { "type": "string" }
728
+ }
729
+ },
730
+ "WaitStepExplicit": {
731
+ "type": "object",
732
+ "required": ["step", "duration"],
733
+ "properties": {
734
+ "step": { "const": "wait" },
735
+ "duration": { "type": "integer", "minimum": 0, "description": "Duration in milliseconds" },
736
+ "title": { "type": "string" },
737
+ "id": { "type": "string" },
738
+ "goto": { "type": "string" },
739
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
740
+ "message": { "type": "string" }
741
+ }
742
+ },
743
+ "AssertStep": {
744
+ "type": "object",
745
+ "required": ["assert"],
746
+ "properties": {
747
+ "assert": { "type": "string", "description": "Condition expression (e.g., '$userId == 1')" },
748
+ "title": { "type": "string" },
749
+ "id": { "type": "string" },
750
+ "goto": { "type": "string" },
751
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
752
+ "message": { "type": "string" },
753
+ "description": { "type": "string" }
754
+ }
755
+ },
756
+ "AssertStepExplicit": {
757
+ "type": "object",
758
+ "required": ["step", "condition"],
759
+ "properties": {
760
+ "step": { "const": "assert" },
761
+ "condition": { "type": "string", "description": "Condition expression (e.g., '$userId == 1')" },
762
+ "title": { "type": "string" },
763
+ "id": { "type": "string" },
764
+ "goto": { "type": "string" },
765
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
766
+ "message": { "type": "string" },
767
+ "description": { "type": "string" }
768
+ }
769
+ },
770
+ "GraphQLStep": {
771
+ "type": "object",
772
+ "required": ["graphql"],
773
+ "properties": {
774
+ "graphql": { "type": "string", "description": "GraphQL query or mutation" },
775
+ "title": { "type": "string" },
776
+ "id": { "type": "string" },
777
+ "goto": { "type": "string" },
778
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
779
+ "endpoint": { "type": "string" },
780
+ "variables": { "type": "object" },
781
+ "headers": { "type": "object", "additionalProperties": { "type": "string" } },
782
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
783
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." }
784
+ }
785
+ },
786
+ "GraphQLStepExplicit": {
787
+ "type": "object",
788
+ "required": ["step", "query"],
789
+ "properties": {
790
+ "step": { "const": "graphql" },
791
+ "query": { "type": "string", "description": "GraphQL query or mutation" },
792
+ "title": { "type": "string" },
793
+ "id": { "type": "string" },
794
+ "goto": { "type": "string" },
795
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
796
+ "endpoint": { "type": "string" },
797
+ "variables": { "type": "object" },
798
+ "headers": { "type": "object", "additionalProperties": { "type": "string" } },
799
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
800
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." }
801
+ }
802
+ },
803
+ "DatabaseStep": {
804
+ "type": "object",
805
+ "required": ["db"],
806
+ "properties": {
807
+ "db": { "type": "string", "description": "Database operation (find, findOne, insertOne, updateOne, deleteOne, query)" },
808
+ "title": { "type": "string" },
809
+ "id": { "type": "string" },
810
+ "goto": { "type": "string" },
811
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
812
+ "description": { "type": "string" },
813
+ "type": { "enum": ["mongodb", "postgres", "mysql"] },
814
+ "collection": { "type": "string" },
815
+ "table": { "type": "string" },
816
+ "query": { "oneOf": [{ "type": "object" }, { "type": "string" }] },
817
+ "update": { "type": "object" },
818
+ "document": { "type": "object" },
819
+ "projection": { "type": "object", "additionalProperties": { "type": "integer" } },
820
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
821
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." }
822
+ }
823
+ },
824
+ "DatabaseStepExplicit": {
825
+ "type": "object",
826
+ "required": ["step", "operation"],
827
+ "properties": {
828
+ "step": { "const": "db" },
829
+ "operation": { "type": "string", "description": "Database operation (find, findOne, insertOne, updateOne, deleteOne, query)" },
830
+ "title": { "type": "string" },
831
+ "id": { "type": "string" },
832
+ "goto": { "type": "string" },
833
+ "diagram": { "type": "string", "description": "Diagram path to highlight" },
834
+ "description": { "type": "string" },
835
+ "type": { "enum": ["mongodb", "postgres", "mysql"] },
836
+ "collection": { "type": "string" },
837
+ "table": { "type": "string" },
838
+ "query": { "oneOf": [{ "type": "object" }, { "type": "string" }] },
839
+ "update": { "type": "object" },
840
+ "document": { "type": "object" },
841
+ "projection": { "type": "object", "additionalProperties": { "type": "integer" } },
842
+ "save": { "type": "object", "additionalProperties": { "type": "string" } },
843
+ "results": { "type": "array", "items": { "$ref": "#/$defs/ResultField" }, "description": "Fields to display from response. If omitted and OpenAPI is configured, auto-generated from response schema." }
844
+ }
845
+ }
846
+ }
847
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@demoscript/cli",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "CLI tool for DemoScript - create and present scripted product demonstrations",
5
5
  "type": "module",
6
6
  "bin": {