@underdogai/mesh-event-schemas 0.9.0 → 0.11.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.
Files changed (65) hide show
  1. package/README.md +3 -0
  2. package/card.compact.schema.json +1019 -0
  3. package/card.schema.json +1918 -0
  4. package/dist/apppacks.d.ts +48 -0
  5. package/dist/apppacks.d.ts.map +1 -1
  6. package/dist/blocks.d.ts +34 -0
  7. package/dist/blocks.d.ts.map +1 -1
  8. package/dist/blocks.js +15 -0
  9. package/dist/blocks.js.map +1 -1
  10. package/dist/calendar.d.ts +466 -0
  11. package/dist/calendar.d.ts.map +1 -0
  12. package/dist/calendar.js +169 -0
  13. package/dist/calendar.js.map +1 -0
  14. package/dist/card-json-schema.d.ts +426 -0
  15. package/dist/card-json-schema.d.ts.map +1 -0
  16. package/dist/card-json-schema.js +467 -0
  17. package/dist/card-json-schema.js.map +1 -0
  18. package/dist/events.d.ts +457 -2
  19. package/dist/events.d.ts.map +1 -1
  20. package/dist/events.js +207 -3
  21. package/dist/events.js.map +1 -1
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +5 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/namespace.d.ts +20 -0
  27. package/dist/namespace.d.ts.map +1 -1
  28. package/dist/namespace.js +20 -0
  29. package/dist/namespace.js.map +1 -1
  30. package/dist/power-levels.d.ts +85 -0
  31. package/dist/power-levels.d.ts.map +1 -0
  32. package/dist/power-levels.js +153 -0
  33. package/dist/power-levels.js.map +1 -0
  34. package/dist/profile.d.ts +26 -0
  35. package/dist/profile.d.ts.map +1 -0
  36. package/dist/profile.js +40 -0
  37. package/dist/profile.js.map +1 -0
  38. package/dist/registry.d.ts +5 -0
  39. package/dist/registry.d.ts.map +1 -1
  40. package/dist/registry.js +17 -2
  41. package/dist/registry.js.map +1 -1
  42. package/dist/room-agents.d.ts +271 -0
  43. package/dist/room-agents.d.ts.map +1 -0
  44. package/dist/room-agents.js +119 -0
  45. package/dist/room-agents.js.map +1 -0
  46. package/dist/surfaces.d.ts +265 -1
  47. package/dist/surfaces.d.ts.map +1 -1
  48. package/dist/surfaces.js +1 -1
  49. package/dist/templates.d.ts +40 -0
  50. package/dist/templates.d.ts.map +1 -1
  51. package/dist/templates.js +37 -0
  52. package/dist/templates.js.map +1 -1
  53. package/package.json +9 -4
  54. package/src/blocks.ts +15 -0
  55. package/src/calendar.ts +248 -0
  56. package/src/card-json-schema.ts +520 -0
  57. package/src/events.ts +234 -3
  58. package/src/index.ts +6 -0
  59. package/src/namespace.ts +21 -0
  60. package/src/power-levels.ts +183 -0
  61. package/src/profile.ts +42 -0
  62. package/src/registry.ts +18 -1
  63. package/src/room-agents.ts +100 -0
  64. package/src/surfaces.ts +1 -1
  65. package/src/templates.ts +64 -0
@@ -0,0 +1,1019 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://chatops.theunderdog.ai/schemas/card.compact.schema.json",
4
+ "title": "Mesh 카드 (org.corp.ui)",
5
+ "description": "채팅 타임라인에 그려지는 대화형 카드. 블록(닫힌 집합)을 위에서 아래로 쌓는다. 임의 HTML·코드는 없다. (컴팩트 변형 — 자주 쓰는 블록만)",
6
+ "type": "object",
7
+ "properties": {
8
+ "v": {
9
+ "type": "integer",
10
+ "const": 1,
11
+ "default": 1
12
+ },
13
+ "card_id": {
14
+ "description": "카드 인스턴스 ID(영숫자·하이픈). 버튼 회신·편집이 이 값으로 카드를 가리킨다",
15
+ "type": "string",
16
+ "minLength": 1
17
+ },
18
+ "title": {
19
+ "description": "카드 제목 — 짧게",
20
+ "type": "string"
21
+ },
22
+ "blocks": {
23
+ "description": "위에서 아래로 그릴 블록. 요약을 먼저, 버튼(actions)은 맨 아래",
24
+ "type": "array",
25
+ "items": {
26
+ "$ref": "#/$defs/Block"
27
+ },
28
+ "default": []
29
+ },
30
+ "steps": {
31
+ "description": "여러 단계 폼(마법사). 단계마다 blocks, 마지막에 한 번 제출",
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "properties": {
36
+ "title": {
37
+ "type": "string"
38
+ },
39
+ "blocks": {
40
+ "type": "array",
41
+ "items": {
42
+ "$ref": "#/$defs/Block"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "blocks"
48
+ ],
49
+ "additionalProperties": false
50
+ }
51
+ },
52
+ "fallback": {
53
+ "description": "카드를 못 그리는 클라이언트가 보는 평문 요약(필수)",
54
+ "type": "string"
55
+ },
56
+ "state": {
57
+ "type": "string",
58
+ "enum": [
59
+ "open",
60
+ "submitted",
61
+ "cancelled",
62
+ "expired"
63
+ ]
64
+ },
65
+ "request_event_id": {
66
+ "type": "string"
67
+ },
68
+ "context": {
69
+ "type": "object",
70
+ "properties": {
71
+ "agent": {
72
+ "type": "string"
73
+ },
74
+ "entity": {
75
+ "type": "object",
76
+ "properties": {
77
+ "type": {
78
+ "type": "string"
79
+ },
80
+ "id": {
81
+ "type": "string"
82
+ }
83
+ },
84
+ "required": [
85
+ "type",
86
+ "id"
87
+ ],
88
+ "additionalProperties": false
89
+ }
90
+ },
91
+ "additionalProperties": true
92
+ },
93
+ "expires_at": {
94
+ "description": "epoch ms. 지나면 입력이 잠긴다",
95
+ "type": "integer"
96
+ }
97
+ },
98
+ "required": [
99
+ "card_id",
100
+ "fallback"
101
+ ],
102
+ "additionalProperties": false,
103
+ "$defs": {
104
+ "Block": {
105
+ "anyOf": [
106
+ {
107
+ "$ref": "#/$defs/TextBlock"
108
+ },
109
+ {
110
+ "$ref": "#/$defs/HeadingBlock"
111
+ },
112
+ {
113
+ "$ref": "#/$defs/DividerBlock"
114
+ },
115
+ {
116
+ "$ref": "#/$defs/FieldsBlock"
117
+ },
118
+ {
119
+ "$ref": "#/$defs/ImageBlock"
120
+ },
121
+ {
122
+ "$ref": "#/$defs/ContextBlock"
123
+ },
124
+ {
125
+ "$ref": "#/$defs/BadgeBlock"
126
+ },
127
+ {
128
+ "$ref": "#/$defs/TableBlock"
129
+ },
130
+ {
131
+ "$ref": "#/$defs/ProgressBlock"
132
+ },
133
+ {
134
+ "$ref": "#/$defs/StepsBlock"
135
+ },
136
+ {
137
+ "$ref": "#/$defs/MetricBlock"
138
+ },
139
+ {
140
+ "$ref": "#/$defs/ChartBlock"
141
+ },
142
+ {
143
+ "$ref": "#/$defs/CalloutBlock"
144
+ },
145
+ {
146
+ "$ref": "#/$defs/CodeBlock"
147
+ },
148
+ {
149
+ "$ref": "#/$defs/CollapsibleBlock"
150
+ },
151
+ {
152
+ "$ref": "#/$defs/InputBlock"
153
+ },
154
+ {
155
+ "$ref": "#/$defs/ToggleBlock"
156
+ },
157
+ {
158
+ "$ref": "#/$defs/RadioBlock"
159
+ },
160
+ {
161
+ "$ref": "#/$defs/SelectBlock"
162
+ },
163
+ {
164
+ "$ref": "#/$defs/CheckboxBlock"
165
+ },
166
+ {
167
+ "$ref": "#/$defs/ButtonBlock"
168
+ },
169
+ {
170
+ "$ref": "#/$defs/LinkButtonBlock"
171
+ },
172
+ {
173
+ "$ref": "#/$defs/ActionsBlock"
174
+ }
175
+ ]
176
+ },
177
+ "TextBlock": {
178
+ "description": "문단. markdown:true 면 굵게·목록·링크·코드 등 안전한 마크다운",
179
+ "type": "object",
180
+ "properties": {
181
+ "type": {
182
+ "type": "string",
183
+ "const": "text"
184
+ },
185
+ "text": {
186
+ "type": "string"
187
+ },
188
+ "markdown": {
189
+ "type": "boolean"
190
+ }
191
+ },
192
+ "required": [
193
+ "type",
194
+ "text"
195
+ ],
196
+ "additionalProperties": false
197
+ },
198
+ "HeadingBlock": {
199
+ "description": "소제목(level 1~3)",
200
+ "type": "object",
201
+ "properties": {
202
+ "type": {
203
+ "type": "string",
204
+ "const": "heading"
205
+ },
206
+ "text": {
207
+ "type": "string"
208
+ },
209
+ "level": {
210
+ "type": "integer",
211
+ "enum": [
212
+ 1,
213
+ 2,
214
+ 3
215
+ ]
216
+ }
217
+ },
218
+ "required": [
219
+ "type",
220
+ "text"
221
+ ],
222
+ "additionalProperties": false
223
+ },
224
+ "DividerBlock": {
225
+ "description": "가로 구분선",
226
+ "type": "object",
227
+ "properties": {
228
+ "type": {
229
+ "type": "string",
230
+ "const": "divider"
231
+ }
232
+ },
233
+ "required": [
234
+ "type"
235
+ ],
236
+ "additionalProperties": false
237
+ },
238
+ "FieldsBlock": {
239
+ "description": "라벨:값 목록. short:true 면 2열 그리드, long:true 면 문단 값",
240
+ "type": "object",
241
+ "properties": {
242
+ "type": {
243
+ "type": "string",
244
+ "const": "fields"
245
+ },
246
+ "items": {
247
+ "type": "array",
248
+ "items": {
249
+ "type": "object",
250
+ "properties": {
251
+ "label": {
252
+ "type": "string"
253
+ },
254
+ "value": {
255
+ "type": "string"
256
+ },
257
+ "short": {
258
+ "type": "boolean"
259
+ },
260
+ "long": {
261
+ "type": "boolean"
262
+ }
263
+ },
264
+ "required": [
265
+ "label",
266
+ "value"
267
+ ],
268
+ "additionalProperties": false
269
+ }
270
+ },
271
+ "columns": {
272
+ "enum": [
273
+ 2,
274
+ 3,
275
+ "auto"
276
+ ]
277
+ }
278
+ },
279
+ "required": [
280
+ "type",
281
+ "items"
282
+ ],
283
+ "additionalProperties": false
284
+ },
285
+ "ImageBlock": {
286
+ "description": "본문 그림(https url 또는 mxc)",
287
+ "type": "object",
288
+ "properties": {
289
+ "type": {
290
+ "type": "string",
291
+ "const": "image"
292
+ },
293
+ "url": {
294
+ "type": "string"
295
+ },
296
+ "mxc": {
297
+ "type": "string"
298
+ },
299
+ "alt": {
300
+ "type": "string"
301
+ }
302
+ },
303
+ "required": [
304
+ "type"
305
+ ],
306
+ "additionalProperties": false
307
+ },
308
+ "ContextBlock": {
309
+ "description": "작은 보조 줄(문자열·아이콘 조각)",
310
+ "type": "object",
311
+ "properties": {
312
+ "type": {
313
+ "type": "string",
314
+ "const": "context"
315
+ },
316
+ "elements": {
317
+ "type": "array",
318
+ "items": {
319
+ "anyOf": [
320
+ {
321
+ "type": "string"
322
+ },
323
+ {
324
+ "type": "object",
325
+ "properties": {
326
+ "icon": {
327
+ "type": "string"
328
+ }
329
+ },
330
+ "required": [
331
+ "icon"
332
+ ],
333
+ "additionalProperties": false
334
+ },
335
+ {
336
+ "type": "object",
337
+ "properties": {
338
+ "mxc": {
339
+ "type": "string"
340
+ }
341
+ },
342
+ "required": [
343
+ "mxc"
344
+ ],
345
+ "additionalProperties": false
346
+ }
347
+ ]
348
+ }
349
+ }
350
+ },
351
+ "required": [
352
+ "type",
353
+ "elements"
354
+ ],
355
+ "additionalProperties": false
356
+ },
357
+ "BadgeBlock": {
358
+ "description": "상태 배지(tone 으로 색)",
359
+ "type": "object",
360
+ "properties": {
361
+ "type": {
362
+ "type": "string",
363
+ "const": "badge"
364
+ },
365
+ "text": {
366
+ "type": "string"
367
+ },
368
+ "tone": {
369
+ "$ref": "#/$defs/Tone"
370
+ }
371
+ },
372
+ "required": [
373
+ "type",
374
+ "text"
375
+ ],
376
+ "additionalProperties": false
377
+ },
378
+ "Tone": {
379
+ "type": "string",
380
+ "enum": [
381
+ "neutral",
382
+ "success",
383
+ "warning",
384
+ "danger",
385
+ "info"
386
+ ]
387
+ },
388
+ "TableBlock": {
389
+ "description": "표 — columns 와 같은 길이의 문자열 rows",
390
+ "type": "object",
391
+ "properties": {
392
+ "type": {
393
+ "type": "string",
394
+ "const": "table"
395
+ },
396
+ "columns": {
397
+ "type": "array",
398
+ "items": {
399
+ "type": "string"
400
+ }
401
+ },
402
+ "rows": {
403
+ "type": "array",
404
+ "items": {
405
+ "type": "array",
406
+ "items": {
407
+ "type": "string"
408
+ }
409
+ }
410
+ }
411
+ },
412
+ "required": [
413
+ "type",
414
+ "columns",
415
+ "rows"
416
+ ],
417
+ "additionalProperties": false
418
+ },
419
+ "ProgressBlock": {
420
+ "description": "진행 막대(0~100 정수, 생략하면 불확정)",
421
+ "type": "object",
422
+ "properties": {
423
+ "type": {
424
+ "type": "string",
425
+ "const": "progress"
426
+ },
427
+ "value": {
428
+ "type": "integer",
429
+ "minimum": 0,
430
+ "maximum": 100
431
+ },
432
+ "label": {
433
+ "type": "string"
434
+ }
435
+ },
436
+ "required": [
437
+ "type"
438
+ ],
439
+ "additionalProperties": false
440
+ },
441
+ "StepsBlock": {
442
+ "description": "작업 단계 타임라인(done·active·todo·error)",
443
+ "type": "object",
444
+ "properties": {
445
+ "type": {
446
+ "type": "string",
447
+ "const": "steps"
448
+ },
449
+ "items": {
450
+ "type": "array",
451
+ "items": {
452
+ "type": "object",
453
+ "properties": {
454
+ "label": {
455
+ "type": "string"
456
+ },
457
+ "status": {
458
+ "type": "string",
459
+ "enum": [
460
+ "done",
461
+ "active",
462
+ "todo",
463
+ "error"
464
+ ]
465
+ },
466
+ "note": {
467
+ "type": "string"
468
+ }
469
+ },
470
+ "required": [
471
+ "label"
472
+ ],
473
+ "additionalProperties": false
474
+ }
475
+ }
476
+ },
477
+ "required": [
478
+ "type",
479
+ "items"
480
+ ],
481
+ "additionalProperties": false
482
+ },
483
+ "MetricBlock": {
484
+ "description": "KPI 하나 — 값·목표·증감",
485
+ "type": "object",
486
+ "properties": {
487
+ "type": {
488
+ "type": "string",
489
+ "const": "metric"
490
+ },
491
+ "label": {
492
+ "type": "string"
493
+ },
494
+ "value": {
495
+ "type": "string"
496
+ },
497
+ "target": {
498
+ "type": "string"
499
+ },
500
+ "delta": {
501
+ "type": "string"
502
+ },
503
+ "tone": {
504
+ "$ref": "#/$defs/Tone"
505
+ }
506
+ },
507
+ "required": [
508
+ "type",
509
+ "label",
510
+ "value"
511
+ ],
512
+ "additionalProperties": false
513
+ },
514
+ "ChartBlock": {
515
+ "description": "작은 차트(sparkline·bar·line·donut)",
516
+ "type": "object",
517
+ "properties": {
518
+ "type": {
519
+ "type": "string",
520
+ "const": "chart"
521
+ },
522
+ "variant": {
523
+ "type": "string",
524
+ "enum": [
525
+ "sparkline",
526
+ "bar",
527
+ "line",
528
+ "donut"
529
+ ]
530
+ },
531
+ "data": {
532
+ "type": "array",
533
+ "items": {
534
+ "type": "object",
535
+ "properties": {
536
+ "label": {
537
+ "type": "string"
538
+ },
539
+ "value": {
540
+ "type": "number"
541
+ },
542
+ "tone": {
543
+ "$ref": "#/$defs/Tone"
544
+ }
545
+ },
546
+ "required": [
547
+ "value"
548
+ ],
549
+ "additionalProperties": false
550
+ },
551
+ "minItems": 1
552
+ },
553
+ "caption": {
554
+ "type": "string"
555
+ },
556
+ "max": {
557
+ "type": "number",
558
+ "exclusiveMinimum": 0
559
+ },
560
+ "unit": {
561
+ "type": "string"
562
+ }
563
+ },
564
+ "required": [
565
+ "type",
566
+ "variant",
567
+ "data"
568
+ ],
569
+ "additionalProperties": false
570
+ },
571
+ "CalloutBlock": {
572
+ "description": "톤 강조 상자(정보·경고·위험) — 제목 + 본문",
573
+ "type": "object",
574
+ "properties": {
575
+ "type": {
576
+ "type": "string",
577
+ "const": "callout"
578
+ },
579
+ "text": {
580
+ "type": "string"
581
+ },
582
+ "title": {
583
+ "type": "string"
584
+ },
585
+ "tone": {
586
+ "$ref": "#/$defs/Tone"
587
+ },
588
+ "icon": {
589
+ "type": "string"
590
+ }
591
+ },
592
+ "required": [
593
+ "type",
594
+ "text"
595
+ ],
596
+ "additionalProperties": false
597
+ },
598
+ "CodeBlock": {
599
+ "description": "코드·JSON(읽기 전용)",
600
+ "type": "object",
601
+ "properties": {
602
+ "type": {
603
+ "type": "string",
604
+ "const": "code"
605
+ },
606
+ "code": {
607
+ "type": "string"
608
+ },
609
+ "language": {
610
+ "type": "string"
611
+ }
612
+ },
613
+ "required": [
614
+ "type",
615
+ "code"
616
+ ],
617
+ "additionalProperties": false
618
+ },
619
+ "CollapsibleBlock": {
620
+ "description": "접기/펼치기 — 펼치면 중첩 blocks",
621
+ "type": "object",
622
+ "properties": {
623
+ "type": {
624
+ "type": "string",
625
+ "const": "collapsible"
626
+ },
627
+ "title": {
628
+ "type": "string"
629
+ },
630
+ "open": {
631
+ "type": "boolean"
632
+ },
633
+ "tone": {
634
+ "$ref": "#/$defs/Tone"
635
+ },
636
+ "summary": {
637
+ "type": "string"
638
+ },
639
+ "blocks": {
640
+ "type": "array",
641
+ "items": {
642
+ "$ref": "#/$defs/Block"
643
+ }
644
+ }
645
+ },
646
+ "required": [
647
+ "type",
648
+ "title",
649
+ "blocks"
650
+ ],
651
+ "additionalProperties": false
652
+ },
653
+ "InputBlock": {
654
+ "description": "입력칸(text·textarea·number·date·datetime·time·url·email·file), name 으로 값 수집",
655
+ "type": "object",
656
+ "properties": {
657
+ "type": {
658
+ "type": "string",
659
+ "const": "input"
660
+ },
661
+ "name": {
662
+ "type": "string",
663
+ "minLength": 1
664
+ },
665
+ "input": {
666
+ "type": "string",
667
+ "enum": [
668
+ "text",
669
+ "textarea",
670
+ "number",
671
+ "date",
672
+ "datetime",
673
+ "time",
674
+ "url",
675
+ "email",
676
+ "file"
677
+ ]
678
+ },
679
+ "label": {
680
+ "type": "string"
681
+ },
682
+ "placeholder": {
683
+ "type": "string"
684
+ },
685
+ "required": {
686
+ "type": "boolean"
687
+ },
688
+ "value": {
689
+ "type": "string"
690
+ },
691
+ "min": {
692
+ "type": "string"
693
+ },
694
+ "max": {
695
+ "type": "string"
696
+ }
697
+ },
698
+ "required": [
699
+ "type",
700
+ "name"
701
+ ],
702
+ "additionalProperties": false
703
+ },
704
+ "ToggleBlock": {
705
+ "description": "on/off 스위치(불리언)",
706
+ "type": "object",
707
+ "properties": {
708
+ "type": {
709
+ "type": "string",
710
+ "const": "toggle"
711
+ },
712
+ "name": {
713
+ "type": "string",
714
+ "minLength": 1
715
+ },
716
+ "label": {
717
+ "type": "string"
718
+ },
719
+ "checked": {
720
+ "type": "boolean"
721
+ },
722
+ "onText": {
723
+ "type": "string"
724
+ },
725
+ "offText": {
726
+ "type": "string"
727
+ }
728
+ },
729
+ "required": [
730
+ "type",
731
+ "name",
732
+ "label"
733
+ ],
734
+ "additionalProperties": false
735
+ },
736
+ "RadioBlock": {
737
+ "description": "펼쳐진 단일 선택",
738
+ "type": "object",
739
+ "properties": {
740
+ "type": {
741
+ "type": "string",
742
+ "const": "radio"
743
+ },
744
+ "name": {
745
+ "type": "string",
746
+ "minLength": 1
747
+ },
748
+ "label": {
749
+ "type": "string"
750
+ },
751
+ "options": {
752
+ "type": "array",
753
+ "items": {
754
+ "type": "object",
755
+ "properties": {
756
+ "value": {
757
+ "type": "string"
758
+ },
759
+ "label": {
760
+ "type": "string"
761
+ },
762
+ "hint": {
763
+ "type": "string"
764
+ }
765
+ },
766
+ "required": [
767
+ "value",
768
+ "label"
769
+ ],
770
+ "additionalProperties": false
771
+ }
772
+ },
773
+ "value": {
774
+ "type": "string"
775
+ },
776
+ "style": {
777
+ "type": "string",
778
+ "enum": [
779
+ "cards",
780
+ "segmented"
781
+ ]
782
+ },
783
+ "required": {
784
+ "type": "boolean"
785
+ }
786
+ },
787
+ "required": [
788
+ "type",
789
+ "name",
790
+ "options"
791
+ ],
792
+ "additionalProperties": false
793
+ },
794
+ "SelectBlock": {
795
+ "description": "선택(단일·multi), 후보가 많으면 검색 목록",
796
+ "type": "object",
797
+ "properties": {
798
+ "type": {
799
+ "type": "string",
800
+ "const": "select"
801
+ },
802
+ "name": {
803
+ "type": "string",
804
+ "minLength": 1
805
+ },
806
+ "label": {
807
+ "type": "string"
808
+ },
809
+ "placeholder": {
810
+ "type": "string"
811
+ },
812
+ "options": {
813
+ "type": "array",
814
+ "items": {
815
+ "type": "object",
816
+ "properties": {
817
+ "value": {
818
+ "type": "string"
819
+ },
820
+ "label": {
821
+ "type": "string"
822
+ },
823
+ "hint": {
824
+ "type": "string"
825
+ }
826
+ },
827
+ "required": [
828
+ "value",
829
+ "label"
830
+ ],
831
+ "additionalProperties": false
832
+ }
833
+ },
834
+ "value": {
835
+ "type": "string"
836
+ },
837
+ "multi": {
838
+ "type": "boolean"
839
+ },
840
+ "style": {
841
+ "type": "string",
842
+ "enum": [
843
+ "list",
844
+ "segmented",
845
+ "dropdown",
846
+ "chips"
847
+ ]
848
+ },
849
+ "required": {
850
+ "type": "boolean"
851
+ },
852
+ "min": {
853
+ "type": "integer",
854
+ "minimum": 0
855
+ },
856
+ "max": {
857
+ "type": "integer",
858
+ "exclusiveMinimum": 0
859
+ }
860
+ },
861
+ "required": [
862
+ "type",
863
+ "name",
864
+ "options"
865
+ ],
866
+ "additionalProperties": false
867
+ },
868
+ "CheckboxBlock": {
869
+ "description": "체크박스(불리언)",
870
+ "type": "object",
871
+ "properties": {
872
+ "type": {
873
+ "type": "string",
874
+ "const": "checkbox"
875
+ },
876
+ "name": {
877
+ "type": "string",
878
+ "minLength": 1
879
+ },
880
+ "label": {
881
+ "type": "string"
882
+ },
883
+ "checked": {
884
+ "type": "boolean"
885
+ }
886
+ },
887
+ "required": [
888
+ "type",
889
+ "name",
890
+ "label"
891
+ ],
892
+ "additionalProperties": false
893
+ },
894
+ "ButtonBlock": {
895
+ "description": "버튼 하나 — 누르면 action_id 로 봇에 회신(보통 actions 안에 둔다)",
896
+ "type": "object",
897
+ "properties": {
898
+ "type": {
899
+ "type": "string",
900
+ "const": "button"
901
+ },
902
+ "action_id": {
903
+ "type": "string",
904
+ "minLength": 1
905
+ },
906
+ "text": {
907
+ "type": "string"
908
+ },
909
+ "style": {
910
+ "$ref": "#/$defs/ButtonStyle"
911
+ },
912
+ "value": {
913
+ "type": "string"
914
+ },
915
+ "confirm": {
916
+ "$ref": "#/$defs/Confirm"
917
+ },
918
+ "disabled": {
919
+ "type": "boolean"
920
+ }
921
+ },
922
+ "required": [
923
+ "type",
924
+ "action_id",
925
+ "text"
926
+ ],
927
+ "additionalProperties": false
928
+ },
929
+ "ButtonStyle": {
930
+ "type": "string",
931
+ "enum": [
932
+ "default",
933
+ "primary",
934
+ "danger"
935
+ ]
936
+ },
937
+ "Confirm": {
938
+ "type": "object",
939
+ "properties": {
940
+ "title": {
941
+ "type": "string"
942
+ },
943
+ "text": {
944
+ "type": "string"
945
+ },
946
+ "ok": {
947
+ "type": "string"
948
+ },
949
+ "cancel": {
950
+ "type": "string"
951
+ }
952
+ },
953
+ "required": [
954
+ "title",
955
+ "text"
956
+ ],
957
+ "additionalProperties": false
958
+ },
959
+ "LinkButtonBlock": {
960
+ "description": "https 로 이동만 하는 버튼(회신 없음)",
961
+ "type": "object",
962
+ "properties": {
963
+ "type": {
964
+ "type": "string",
965
+ "const": "linkButton"
966
+ },
967
+ "text": {
968
+ "type": "string"
969
+ },
970
+ "url": {
971
+ "type": "string"
972
+ },
973
+ "style": {
974
+ "$ref": "#/$defs/ButtonStyle"
975
+ },
976
+ "external": {
977
+ "type": "boolean"
978
+ }
979
+ },
980
+ "required": [
981
+ "type",
982
+ "text",
983
+ "url"
984
+ ],
985
+ "additionalProperties": false
986
+ },
987
+ "ActionsBlock": {
988
+ "description": "버튼 한 줄(button·linkButton·overflow) — 입력값과 함께 제출",
989
+ "type": "object",
990
+ "properties": {
991
+ "type": {
992
+ "type": "string",
993
+ "const": "actions"
994
+ },
995
+ "elements": {
996
+ "type": "array",
997
+ "items": {
998
+ "$ref": "#/$defs/ActionElement"
999
+ }
1000
+ }
1001
+ },
1002
+ "required": [
1003
+ "type",
1004
+ "elements"
1005
+ ],
1006
+ "additionalProperties": false
1007
+ },
1008
+ "ActionElement": {
1009
+ "anyOf": [
1010
+ {
1011
+ "$ref": "#/$defs/ButtonBlock"
1012
+ },
1013
+ {
1014
+ "$ref": "#/$defs/LinkButtonBlock"
1015
+ }
1016
+ ]
1017
+ }
1018
+ }
1019
+ }